Imported Upstream version 1.46.0 upstream/1.46.0
authorKarol Lewandowski <k.lewandowsk@samsung.com>
Tue, 9 Feb 2021 11:37:48 +0000 (12:37 +0100)
committerKarol Lewandowski <k.lewandowsk@samsung.com>
Tue, 9 Feb 2021 11:37:48 +0000 (12:37 +0100)
1107 files changed:
.gitignore
.hgignore [deleted file]
.release-checklist
ABOUT-NLS
Android.bp [new file with mode: 0644]
Android.mk [deleted file]
CleanSpec.mk
INSTALL
INSTALL.elfbin
MCONFIG.in
Makefile.in
NOTICE
README
README.subset [deleted file]
RELEASE-NOTES [changed from file to symlink]
TODO [deleted file]
acinclude.m4
aclocal.m4
config/config.guess
config/config.rpath
config/config.sub
config/ltmain.sh [new file with mode: 0644]
configure
configure.ac
contrib/Android.bp [new file with mode: 0644]
contrib/Android.mk [deleted file]
contrib/add_ext4_encrypt.c
contrib/android/Android.bp [new file with mode: 0644]
contrib/android/base_fs.c [new file with mode: 0644]
contrib/android/base_fs.h [new file with mode: 0644]
contrib/android/basefs_allocator.c [new file with mode: 0644]
contrib/android/basefs_allocator.h [new file with mode: 0644]
contrib/android/block_list.c [new file with mode: 0644]
contrib/android/block_list.h [new file with mode: 0644]
contrib/android/block_range.c [new file with mode: 0644]
contrib/android/block_range.h [new file with mode: 0644]
contrib/android/e2fsdroid.c [new file with mode: 0644]
contrib/android/ext2simg.c [new file with mode: 0644]
contrib/android/fsmap.c [new file with mode: 0644]
contrib/android/fsmap.h [new file with mode: 0644]
contrib/android/perms.c [new file with mode: 0644]
contrib/android/perms.h [new file with mode: 0644]
contrib/ext4-ioc.c [new file with mode: 0644]
contrib/fallocate.c
contrib/jbd2-resync.sh [deleted file]
debian/.gitignore [new file with mode: 0644]
debian/changelog
debian/comerr-dev.install [moved from debian/comerr-dev.files.in with 100% similarity]
debian/comerr-dev.postinst [new file with mode: 0644]
debian/comerr-dev.postrm [new file with mode: 0644]
debian/comerr-dev.preinst [new file with mode: 0644]
debian/compat
debian/control [new file with mode: 0644]
debian/control.in [deleted file]
debian/e2fsck-static.copyright
debian/e2fsck-static.install [moved from debian/e2fsck-static.files with 100% similarity]
debian/e2fslibs-dev.postinst [new file with mode: 0644]
debian/e2fslibs-dev.postrm [new file with mode: 0644]
debian/e2fslibs-dev.preinst [new file with mode: 0644]
debian/e2fsprogs-l10n.copyright [new file with mode: 0644]
debian/e2fsprogs-l10n.install [new file with mode: 0644]
debian/e2fsprogs-udeb.install [new file with mode: 0644]
debian/e2fsprogs-udeb.lintian-overrides [new file with mode: 0644]
debian/e2fsprogs.docs
debian/e2fsprogs.files [deleted file]
debian/e2fsprogs.install [new file with mode: 0755]
debian/e2fsprogs.lintian-overrides [new file with mode: 0644]
debian/e2fsprogs.postinst.dh9 [new file with mode: 0644]
debian/e2fsprogs.postrm.dh9 [new file with mode: 0644]
debian/e2fsprogs.shlibs.local [new file with mode: 0644]
debian/e2fsprogs.shlibs.local.in [deleted file]
debian/fuse2fs.install [moved from debian/fuse2fs.files with 62% similarity]
debian/gbp.conf [new file with mode: 0644]
debian/libblkid-dev.install [moved from debian/libblkid-dev.files.in with 100% similarity]
debian/libblkid1.install [moved from debian/libblkid1.files.in with 100% similarity]
debian/libcom-err2.copyright [moved from debian/libcomerr2.copyright with 100% similarity]
debian/libcom-err2.install [moved from debian/libcomerr2.files.in with 100% similarity]
debian/libcom-err2.symbols [new file with mode: 0644]
debian/libcomerr2.symbols [deleted file]
debian/libext2fs-dev.doc-base [moved from debian/e2fslibs-dev.doc-base with 65% similarity]
debian/libext2fs-dev.install [moved from debian/e2fslibs-dev.files.in with 100% similarity]
debian/libext2fs2.install [moved from debian/e2fslibs.files.in with 100% similarity]
debian/libext2fs2.symbols [moved from debian/e2fslibs.symbols with 91% similarity]
debian/libss2.install [moved from debian/libss2.files.in with 100% similarity]
debian/libss2.symbols
debian/libuuid1.install [moved from debian/libuuid1.files.in with 100% similarity]
debian/logsave.install [new file with mode: 0644]
debian/rules
debian/source/lintian-overrides [moved from debian/source.lintian-overrides with 84% similarity]
debian/ss-dev.install [moved from debian/ss-dev.files.in with 100% similarity]
debian/ss-dev.postinst [new file with mode: 0644]
debian/ss-dev.postrm [new file with mode: 0644]
debian/ss-dev.preinst [new file with mode: 0644]
debian/tests/control [new file with mode: 0644]
debian/tests/fuse2fs [new file with mode: 0755]
debian/tests/smoke [new file with mode: 0755]
debian/uuid-dev.README.Debian
debian/uuid-dev.install [moved from debian/uuid-dev.files.in with 100% similarity]
debian/uuid-runtime.install [moved from debian/uuid-runtime.files with 100% similarity]
debugfs/Android.bp [new file with mode: 0644]
debugfs/Android.mk [deleted file]
debugfs/Makefile.in
debugfs/debugfs.8.in
debugfs/debugfs.c
debugfs/debugfs.h
debugfs/do_journal.c
debugfs/dump.c
debugfs/extent_inode.c
debugfs/filefrag.c
debugfs/htree.c
debugfs/icheck.c
debugfs/journal.c
debugfs/logdump.c
debugfs/ls.c
debugfs/lsdel.c
debugfs/ncheck.c
debugfs/quota.c
debugfs/set_fields.c
debugfs/unused.c
debugfs/util.c
debugfs/xattrs.c
debugfs/zap.c
doc/Makefile.in
doc/RelNotes/v1.02.txt [new file with mode: 0644]
doc/RelNotes/v1.03.txt [new file with mode: 0644]
doc/RelNotes/v1.04.txt [new file with mode: 0644]
doc/RelNotes/v1.05.txt [new file with mode: 0644]
doc/RelNotes/v1.06.txt [new file with mode: 0644]
doc/RelNotes/v1.07.txt [new file with mode: 0644]
doc/RelNotes/v1.08.txt [new file with mode: 0644]
doc/RelNotes/v1.09.txt [new file with mode: 0644]
doc/RelNotes/v1.10.txt [new file with mode: 0644]
doc/RelNotes/v1.11.txt [new file with mode: 0644]
doc/RelNotes/v1.12.txt [new file with mode: 0644]
doc/RelNotes/v1.13.txt [new file with mode: 0644]
doc/RelNotes/v1.14.txt [new file with mode: 0644]
doc/RelNotes/v1.15.txt [new file with mode: 0644]
doc/RelNotes/v1.16.txt [new file with mode: 0644]
doc/RelNotes/v1.17.txt [new file with mode: 0644]
doc/RelNotes/v1.18.txt [new file with mode: 0644]
doc/RelNotes/v1.19.txt [new file with mode: 0644]
doc/RelNotes/v1.20.txt [new file with mode: 0644]
doc/RelNotes/v1.21.txt [new file with mode: 0644]
doc/RelNotes/v1.22.txt [new file with mode: 0644]
doc/RelNotes/v1.23.txt [new file with mode: 0644]
doc/RelNotes/v1.24.txt [new file with mode: 0644]
doc/RelNotes/v1.25.txt [new file with mode: 0644]
doc/RelNotes/v1.26.txt [new file with mode: 0644]
doc/RelNotes/v1.27.txt [new file with mode: 0644]
doc/RelNotes/v1.28.txt [new file with mode: 0644]
doc/RelNotes/v1.29.txt [new file with mode: 0644]
doc/RelNotes/v1.30.txt [new file with mode: 0644]
doc/RelNotes/v1.31.txt [new file with mode: 0644]
doc/RelNotes/v1.32.txt [new file with mode: 0644]
doc/RelNotes/v1.33.txt [new file with mode: 0644]
doc/RelNotes/v1.34.txt [new file with mode: 0644]
doc/RelNotes/v1.35.txt [new file with mode: 0644]
doc/RelNotes/v1.36.txt [new file with mode: 0644]
doc/RelNotes/v1.37.txt [new file with mode: 0644]
doc/RelNotes/v1.38.txt [new file with mode: 0644]
doc/RelNotes/v1.39.txt [new file with mode: 0644]
doc/RelNotes/v1.40.txt [new file with mode: 0644]
doc/RelNotes/v1.41.txt [new file with mode: 0644]
doc/RelNotes/v1.42.txt [new file with mode: 0644]
doc/RelNotes/v1.43.0.txt [new file with mode: 0644]
doc/RelNotes/v1.43.1.txt [new file with mode: 0644]
doc/RelNotes/v1.43.2.txt [new file with mode: 0644]
doc/RelNotes/v1.43.3.txt [new file with mode: 0644]
doc/RelNotes/v1.43.4.txt [new file with mode: 0644]
doc/RelNotes/v1.43.5.txt [new file with mode: 0644]
doc/RelNotes/v1.43.6.txt [new file with mode: 0644]
doc/RelNotes/v1.43.7.txt [new file with mode: 0644]
doc/RelNotes/v1.43.8.txt [new file with mode: 0644]
doc/RelNotes/v1.43.9.txt [new file with mode: 0644]
doc/RelNotes/v1.44.0.txt [new file with mode: 0644]
doc/RelNotes/v1.44.1.txt [new file with mode: 0644]
doc/RelNotes/v1.44.2.txt [new file with mode: 0644]
doc/RelNotes/v1.44.3.txt [new file with mode: 0644]
doc/RelNotes/v1.44.4.txt [new file with mode: 0644]
doc/RelNotes/v1.44.5.txt [new file with mode: 0644]
doc/RelNotes/v1.44.6.txt [new file with mode: 0644]
doc/RelNotes/v1.45.0.txt [new file with mode: 0644]
doc/RelNotes/v1.45.1.txt [new file with mode: 0644]
doc/RelNotes/v1.45.2.txt [new file with mode: 0644]
doc/RelNotes/v1.45.3.txt [new file with mode: 0644]
doc/RelNotes/v1.45.4.txt [new file with mode: 0644]
doc/RelNotes/v1.45.5.txt [new file with mode: 0644]
doc/RelNotes/v1.45.6.txt [new file with mode: 0644]
doc/RelNotes/v1.45.7.txt [new file with mode: 0644]
doc/RelNotes/v1.46.0.txt [new file with mode: 0644]
doc/libext2fs.texinfo
e2fsck/Android.bp [new file with mode: 0644]
e2fsck/Android.mk [deleted file]
e2fsck/CHANGES
e2fsck/Makefile.in
e2fsck/Makefile.pq [deleted file]
e2fsck/dirinfo.c
e2fsck/dx_dirinfo.c
e2fsck/e2fsck.8.in
e2fsck/e2fsck.c
e2fsck/e2fsck.conf.5.in
e2fsck/e2fsck.h
e2fsck/ea_refcount.c
e2fsck/emptydir.c
e2fsck/encrypted_files.c [new file with mode: 0644]
e2fsck/extend.c
e2fsck/extents.c
e2fsck/jfs_user.h
e2fsck/journal.c
e2fsck/logfile.c
e2fsck/message.c
e2fsck/pass1.c
e2fsck/pass1b.c
e2fsck/pass2.c
e2fsck/pass3.c
e2fsck/pass4.c
e2fsck/pass5.c
e2fsck/problem.c
e2fsck/problem.h
e2fsck/problemP.h
e2fsck/quota.c
e2fsck/readahead.c
e2fsck/recovery.c
e2fsck/region.c
e2fsck/rehash.c
e2fsck/revoke.c
e2fsck/scantest.c
e2fsck/super.c
e2fsck/unix.c
e2fsck/util.c
e2fsprogs.lsm
e2fsprogs.spec [moved from e2fsprogs.spec.in with 98% similarity]
ext2ed/Makefile.in
ext2ed/README
ext2ed/dir_com.c
ext2ed/disk.c
ext2ed/doc/ext2ed-design.sgml
ext2ed/doc/ext2fs-overview.sgml
ext2ed/doc/user-guide.sgml
ext2ed/ext2.descriptors
ext2ed/ext2ed.8.in
ext2ed/ext2ed.conf.in
ext2ed/ext2ed.h
ext2ed/general_com.c
ext2ed/init.c
ext2ed/main.c
include/mingw/grp.h [new file with mode: 0644]
include/mingw/linux/types.h [new file with mode: 0644]
include/mingw/pwd.h [new file with mode: 0644]
include/mingw/sys/stat.h [new file with mode: 0644]
include/mingw/sys/sysmacros.h [new file with mode: 0644]
include/mingw/sys/types.h [new file with mode: 0644]
include/mingw/unistd.h [new file with mode: 0644]
include/nonunix/getopt.h
include/nonunix/linux/types.h
intl/Makefile.in [deleted file]
intl/VERSION [deleted file]
intl/bindtextdom.c [deleted file]
intl/config.charset [deleted file]
intl/dcgettext.c [deleted file]
intl/dcigettext.c [deleted file]
intl/dcngettext.c [deleted file]
intl/dgettext.c [deleted file]
intl/dngettext.c [deleted file]
intl/eval-plural.h [deleted file]
intl/explodename.c [deleted file]
intl/finddomain.c [deleted file]
intl/gettext.c [deleted file]
intl/gettextP.h [deleted file]
intl/gmo.h [deleted file]
intl/hash-string.h [deleted file]
intl/intl-compat.c [deleted file]
intl/l10nflist.c [deleted file]
intl/libgettext.h [deleted file]
intl/libgnuintl.h.in [deleted file]
intl/loadinfo.h [deleted file]
intl/loadmsgcat.c [deleted file]
intl/localcharset.c [deleted file]
intl/localcharset.h [deleted file]
intl/locale.alias [deleted file]
intl/localealias.c [deleted file]
intl/localename.c [deleted file]
intl/log.c [deleted file]
intl/ngettext.c [deleted file]
intl/os2compat.c [deleted file]
intl/os2compat.h [deleted file]
intl/osdep.c [deleted file]
intl/plural-exp.c [deleted file]
intl/plural-exp.h [deleted file]
intl/plural.c [deleted file]
intl/plural.y [deleted file]
intl/printf-args.c [deleted file]
intl/printf-args.h [deleted file]
intl/printf-parse.c [deleted file]
intl/printf-parse.h [deleted file]
intl/printf.c [deleted file]
intl/ref-add.sin [deleted file]
intl/ref-del.sin [deleted file]
intl/relocatable.c [deleted file]
intl/relocatable.h [deleted file]
intl/textdomain.c [deleted file]
intl/vasnprintf.c [deleted file]
intl/vasnprintf.h [deleted file]
intl/vasnwprintf.h [deleted file]
intl/wprintf-parse.h [deleted file]
intl/xsize.h [deleted file]
lib/Android.bp [new file with mode: 0644]
lib/Android.mk [deleted file]
lib/Makefile.bsd-lib
lib/Makefile.darwin-lib
lib/Makefile.elf-lib
lib/Makefile.library
lib/Makefile.solaris-lib
lib/blkid/Android.bp [new file with mode: 0644]
lib/blkid/Android.mk [deleted file]
lib/blkid/Makefile.in
lib/blkid/blkidP.h
lib/blkid/dev.c
lib/blkid/devname.c
lib/blkid/devno.c
lib/blkid/getsize.c
lib/blkid/libblkid.3.in
lib/blkid/list.h
lib/blkid/probe.c
lib/blkid/probe.h
lib/blkid/read.c
lib/blkid/save.c
lib/blkid/tag.c
lib/blkid/version.c
lib/config.h.in
lib/e2p/Android.bp [new file with mode: 0644]
lib/e2p/Android.mk [deleted file]
lib/e2p/Makefile.in
lib/e2p/crypto_mode.c
lib/e2p/e2p.h
lib/e2p/e2p.pc.in
lib/e2p/encoding.c [new file with mode: 0644]
lib/e2p/errcode.c [new file with mode: 0644]
lib/e2p/feature.c
lib/e2p/fgetversion.c
lib/e2p/fsetversion.c
lib/e2p/getversion.c
lib/e2p/ljs.c [new file with mode: 0644]
lib/e2p/ls.c
lib/e2p/ostype.c
lib/e2p/pf.c
lib/e2p/setversion.c
lib/et/Android.bp [new file with mode: 0644]
lib/et/Android.mk [deleted file]
lib/et/Makefile.in
lib/et/com_err.texinfo
lib/et/com_right.c
lib/et/compile_et.sh.in
lib/et/error_message.c
lib/et/test_cases/heimdal2.c
lib/et/test_cases/heimdal2.et
lib/ext2fs/Android.bp [new file with mode: 0644]
lib/ext2fs/Android.mk [deleted file]
lib/ext2fs/Makefile.in
lib/ext2fs/Makefile.pq [deleted file]
lib/ext2fs/alloc.c
lib/ext2fs/alloc_tables.c
lib/ext2fs/bb_inode.c
lib/ext2fs/bitmaps.c
lib/ext2fs/bitops.c
lib/ext2fs/bitops.h
lib/ext2fs/blkmap64_ba.c
lib/ext2fs/blkmap64_rb.c
lib/ext2fs/blknum.c
lib/ext2fs/block.c
lib/ext2fs/bmap.c
lib/ext2fs/bmap64.h
lib/ext2fs/closefs.c
lib/ext2fs/compiler.h [new file with mode: 0644]
lib/ext2fs/csum.c
lib/ext2fs/digest_encode.c
lib/ext2fs/dirhash.c
lib/ext2fs/ext2_err.et.in
lib/ext2fs/ext2_ext_attr.h
lib/ext2fs/ext2_fs.h
lib/ext2fs/ext2_io.h
lib/ext2fs/ext2_types.h.in
lib/ext2fs/ext2fs.h
lib/ext2fs/ext2fsP.h
lib/ext2fs/ext3_extents.h
lib/ext2fs/ext4_acl.h
lib/ext2fs/ext_attr.c
lib/ext2fs/extent.c
lib/ext2fs/fallocate.c
lib/ext2fs/fast_commit.h [new file with mode: 0644]
lib/ext2fs/fiemap.h
lib/ext2fs/fileio.c
lib/ext2fs/finddev.c
lib/ext2fs/flushb.c
lib/ext2fs/freefs.c
lib/ext2fs/gen_bitmap.c
lib/ext2fs/gen_bitmap64.c
lib/ext2fs/get_pathname.c
lib/ext2fs/getsize.c
lib/ext2fs/hashmap.c [new file with mode: 0644]
lib/ext2fs/hashmap.h [new file with mode: 0644]
lib/ext2fs/icount.c
lib/ext2fs/imager.c
lib/ext2fs/initialize.c
lib/ext2fs/inline_data.c
lib/ext2fs/inode.c
lib/ext2fs/inode_io.c
lib/ext2fs/ismounted.c
lib/ext2fs/jfs_compat.h
lib/ext2fs/jfs_dat.h [deleted file]
lib/ext2fs/kernel-jbd.h
lib/ext2fs/kernel-list.h
lib/ext2fs/link.c
lib/ext2fs/mkdir.c
lib/ext2fs/mkjournal.c
lib/ext2fs/mmp.c
lib/ext2fs/namei.c
lib/ext2fs/nls_utf8.c [new file with mode: 0644]
lib/ext2fs/nt_io.c
lib/ext2fs/openfs.c
lib/ext2fs/qcow2.c
lib/ext2fs/qcow2.h
lib/ext2fs/rbtree.c
lib/ext2fs/rbtree.h
lib/ext2fs/res_gdt.c
lib/ext2fs/rw_bitmaps.c
lib/ext2fs/sha256.c
lib/ext2fs/sha512.c
lib/ext2fs/sparse_io.c [new file with mode: 0644]
lib/ext2fs/swapfs.c
lib/ext2fs/symlink.c
lib/ext2fs/tdb.c
lib/ext2fs/tdb.h
lib/ext2fs/tdb/patches/replace-includes
lib/ext2fs/test_io.c
lib/ext2fs/tst_bitmaps.c
lib/ext2fs/tst_bitmaps_cmds
lib/ext2fs/tst_bitmaps_exp
lib/ext2fs/tst_libext2fs.c
lib/ext2fs/tst_super_size.c
lib/ext2fs/undo_io.c
lib/ext2fs/unix_io.c
lib/ext2fs/unlink.c
lib/ext2fs/utf8data.h [new file with mode: 0644]
lib/ext2fs/utf8n.h [new file with mode: 0644]
lib/ss/Android.bp [new file with mode: 0644]
lib/ss/Android.mk [deleted file]
lib/ss/Makefile.in
lib/ss/ct_c.sed
lib/ss/get_readline.c
lib/ss/mk_cmds.sh.in
lib/support/Android.bp [new file with mode: 0644]
lib/support/Android.mk [deleted file]
lib/support/Makefile.in
lib/support/common.h
lib/support/cstring.c
lib/support/dict.c
lib/support/dict.h
lib/support/mkquota.c
lib/support/parse_qtype.c
lib/support/plausible.c
lib/support/plausible.h
lib/support/profile.c
lib/support/profile_helpers.c
lib/support/quotaio.c
lib/support/quotaio.h
lib/support/quotaio_tree.c
lib/support/quotaio_tree.h
lib/support/quotaio_v2.c
lib/uuid/Android.bp [new file with mode: 0644]
lib/uuid/Android.mk [deleted file]
lib/uuid/Makefile.in
lib/uuid/gen_uuid.c
lib/uuid/gen_uuid_nt.c
lib/uuid/tst_uuid.c
lib/uuid/uuid.3.in
lib/uuid/uuidP.h
lib/uuid/uuid_compare.3.in
lib/uuid/uuid_generate.3.in
lib/uuid/uuid_time.3.in
lib/uuid/uuid_time.c
lib/uuid/uuid_unparse.3.in
misc/Android.bp [new file with mode: 0644]
misc/Android.mk [deleted file]
misc/Makefile.in
misc/badblocks.8.in
misc/badblocks.c
misc/blkid.c
misc/chattr.1.in
misc/chattr.c
misc/check_fuzzer.c [new file with mode: 0644]
misc/create_inode.c
misc/create_inode.h
misc/dumpe2fs.8.in
misc/dumpe2fs.c
misc/e2freefrag.8.in
misc/e2freefrag.c
misc/e2fuzz.c
misc/e2image.8.in
misc/e2image.c
misc/e2label.8.in
misc/e2label.c
misc/e2mmpstatus.8.in [new file with mode: 0644]
misc/e2undo.8.in
misc/e2undo.c
misc/e4crypt.8.in
misc/e4crypt.c
misc/e4defrag.8.in
misc/e4defrag.c
misc/ext4.5.in
misc/filefrag.8.in
misc/filefrag.c
misc/findfs.8.in
misc/findsuper.c
misc/fsck.8.in
misc/fsck.c
misc/fsck.h
misc/fsmap.h [new file with mode: 0644]
misc/fuse2fs.1.in
misc/fuse2fs.c
misc/logsave.8.in
misc/logsave.c
misc/lsattr.1.in
misc/mk_hugefiles.c
misc/mke2fs.8.in
misc/mke2fs.c
misc/mke2fs.conf.5.in
misc/mke2fs.conf.in
misc/mklost+found.8.in
misc/mklost+found.c
misc/profile-to-c.awk
misc/tune2fs.8.in
misc/tune2fs.c
misc/tune2fs.h
misc/util.c
misc/util.h
misc/uuidgen.1.in
po/LINGUAS
po/Makefile.in.in
po/Makevars
po/POTFILES.in
po/Rules-quot
po/at-expand.pl
po/ca.gmo
po/ca.po
po/cs.gmo
po/cs.po
po/da.gmo
po/da.po
po/de.gmo
po/de.po
po/e2fsprogs.pot
po/eo.gmo
po/eo.po
po/es.gmo
po/es.po
po/fi.gmo
po/fi.po
po/fr.gmo
po/fr.po
po/hu.gmo
po/hu.po
po/id.gmo
po/id.po
po/it.gmo
po/it.po
po/ms.gmo
po/ms.po
po/nl.gmo
po/nl.po
po/pl.gmo
po/pl.po
po/pt.gmo [new file with mode: 0644]
po/pt.po [new file with mode: 0644]
po/sr.gmo
po/sr.po
po/sv.gmo
po/sv.po
po/tr.gmo
po/tr.po
po/uk.gmo
po/uk.po
po/vi.gmo
po/vi.po
po/zh_CN.gmo
po/zh_CN.po
resize/Android.bp [new file with mode: 0644]
resize/Android.mk [deleted file]
resize/Makefile.in
resize/Makefile.pq [deleted file]
resize/extent.c
resize/main.c
resize/online.c
resize/resize2fs.8.in
resize/resize2fs.c
resize/resize2fs.h
resize/sim_progress.c
resize/test_extent.c
scrub/Makefile.in [new file with mode: 0644]
scrub/e2scrub.8.in [new file with mode: 0644]
scrub/e2scrub.conf.in [new file with mode: 0644]
scrub/e2scrub.in [new file with mode: 0644]
scrub/e2scrub.rules.in [new file with mode: 0644]
scrub/e2scrub@.service.in [new file with mode: 0644]
scrub/e2scrub_all.8.in [new file with mode: 0644]
scrub/e2scrub_all.cron.in [new file with mode: 0644]
scrub/e2scrub_all.in [new file with mode: 0644]
scrub/e2scrub_all.service.in [new file with mode: 0644]
scrub/e2scrub_all.timer.in [new file with mode: 0644]
scrub/e2scrub_all_cron.in [new file with mode: 0644]
scrub/e2scrub_fail.in [new file with mode: 0644]
scrub/e2scrub_fail@.service.in [new file with mode: 0644]
scrub/e2scrub_reap.service.in [new file with mode: 0644]
tests/Makefile.in
tests/d_bad_ostype/expect [new file with mode: 0644]
tests/d_bad_ostype/name [new file with mode: 0644]
tests/d_bad_ostype/script [new file with mode: 0644]
tests/d_corrupt_journal_nr_users/expect [new file with mode: 0644]
tests/d_corrupt_journal_nr_users/image.gz [new file with mode: 0644]
tests/d_corrupt_journal_nr_users/name [new file with mode: 0644]
tests/d_corrupt_journal_nr_users/script [new file with mode: 0644]
tests/d_dumpe2fs_group_only/script
tests/d_fallocate/script
tests/d_fallocate_bigalloc/script
tests/d_fallocate_blkmap/expect
tests/d_fallocate_blkmap/script
tests/d_inline_dump/expect
tests/d_inline_dump/script
tests/d_loaddump/script
tests/d_punch/expect
tests/d_punch/script
tests/d_punch_bigalloc/expect
tests/d_punch_bigalloc/script
tests/d_special_files/expect
tests/d_special_files/script
tests/d_xattr_edits/script
tests/d_xattr_sorting/script
tests/e_brel_bma/name
tests/e_irel_ima/name
tests/f_bad_disconnected_inode/expect.1
tests/f_bad_encryption/expect.1 [new file with mode: 0644]
tests/f_bad_encryption/expect.2 [new file with mode: 0644]
tests/f_bad_encryption/image.gz [new file with mode: 0644]
tests/f_bad_encryption/mkimage.sh [new file with mode: 0755]
tests/f_bad_encryption/name [new file with mode: 0644]
tests/f_bad_fname/expect.1 [new file with mode: 0644]
tests/f_bad_fname/expect.2 [new file with mode: 0644]
tests/f_bad_fname/image.gz [new file with mode: 0644]
tests/f_bad_fname/name [new file with mode: 0644]
tests/f_bad_local_jnl/image [moved from tests/f_badjour_indblks/image with 99% similarity]
tests/f_badcluster/expect
tests/f_badcluster/script
tests/f_badsymlinks2/expect.1 [new file with mode: 0644]
tests/f_badsymlinks2/expect.2 [new file with mode: 0644]
tests/f_badsymlinks2/image.gz [new file with mode: 0644]
tests/f_badsymlinks2/mkimage.sh [new file with mode: 0755]
tests/f_badsymlinks2/name [new file with mode: 0644]
tests/f_bb_in_bb/expect.1
tests/f_bigalloc_badinode/expect.1 [new file with mode: 0644]
tests/f_bigalloc_badinode/expect.2 [new file with mode: 0644]
tests/f_bigalloc_badinode/name [new file with mode: 0644]
tests/f_bigalloc_badinode/script [new file with mode: 0644]
tests/f_bigalloc_orphan_list/expect.1 [new file with mode: 0644]
tests/f_bigalloc_orphan_list/expect.2 [new file with mode: 0644]
tests/f_bigalloc_orphan_list/name [new file with mode: 0644]
tests/f_bigalloc_orphan_list/script [new file with mode: 0644]
tests/f_bigalloc_symlink_with_xattr/expect.1 [new file with mode: 0644]
tests/f_bigalloc_symlink_with_xattr/image.gz [new file with mode: 0644]
tests/f_bigalloc_symlink_with_xattr/name [new file with mode: 0644]
tests/f_bigalloc_symlink_with_xattr/script [new file with mode: 0644]
tests/f_bitmaps/expect.1
tests/f_boundscheck/name
tests/f_boundscheck/script
tests/f_collapse_extent_tree/expect.1
tests/f_collapse_extent_tree/script
tests/f_compress_extent_tree_level/expect.1
tests/f_compress_extent_tree_level/script
tests/f_convert_bmap/expect.1
tests/f_convert_bmap/script
tests/f_convert_bmap_and_extent/expect.1
tests/f_convert_bmap_and_extent/name
tests/f_convert_bmap_and_extent/script
tests/f_convert_bmap_sparse/expect.1 [new file with mode: 0644]
tests/f_convert_bmap_sparse/expect.2 [new file with mode: 0644]
tests/f_convert_bmap_sparse/image.gz [new file with mode: 0644]
tests/f_convert_bmap_sparse/name [new file with mode: 0644]
tests/f_convert_bmap_sparse/script [new file with mode: 0644]
tests/f_crashdisk/expect.1
tests/f_create_symlinks/expect
tests/f_create_symlinks/script
tests/f_del_dup_quota/expect.1 [new file with mode: 0644]
tests/f_del_dup_quota/expect.2 [new file with mode: 0644]
tests/f_del_dup_quota/image.bz2 [new file with mode: 0644]
tests/f_del_dup_quota/name [new file with mode: 0644]
tests/f_del_dup_quota/script [new file with mode: 0644]
tests/f_deleted_inode_bad_csum/name
tests/f_desc_size_bad/script
tests/f_detect_junk/expect
tests/f_detect_junk/expect.nodebugfs
tests/f_detect_junk/script
tests/f_detect_xfs/expect
tests/f_detect_xfs/script
tests/f_dir_bad_csum/expect.1
tests/f_dir_bad_csum/name
tests/f_dup/expect.1
tests/f_dup2/expect.1
tests/f_dup3/expect.1
tests/f_dup4/script
tests/f_dup_de/script
tests/f_dup_de_crypt/expect.1 [new file with mode: 0644]
tests/f_dup_de_crypt/expect.2 [new file with mode: 0644]
tests/f_dup_de_crypt/image.gz [new file with mode: 0644]
tests/f_dup_de_crypt/name [new file with mode: 0644]
tests/f_dup_resize/script
tests/f_ea_inode/expect.1 [new file with mode: 0644]
tests/f_ea_inode/expect.2 [new file with mode: 0644]
tests/f_ea_inode/image.gz [new file with mode: 0644]
tests/f_ea_inode_self_ref/expect.1 [new file with mode: 0644]
tests/f_ea_inode_self_ref/expect.2 [new file with mode: 0644]
tests/f_ea_inode_self_ref/image.gz [new file with mode: 0644]
tests/f_ea_inode_self_ref/name [new file with mode: 0644]
tests/f_end-bitmap/expect.1
tests/f_eofblocks/expect.1
tests/f_eofblocks/expect.2
tests/f_eofblocks/image.gz
tests/f_extent_bad_node/expect.1
tests/f_extent_htree/expect.1
tests/f_extent_htree/expect.pre.1 [new file with mode: 0644]
tests/f_extent_htree/expect.pre.2 [new file with mode: 0644]
tests/f_extent_htree/image.gz [deleted file]
tests/f_extent_htree/script
tests/f_extent_int_bad_magic/expect.1
tests/f_extent_leaf_bad_magic/expect.1
tests/f_extent_oobounds/expect.1
tests/f_extent_oobounds/script
tests/f_extent_too_deep/script
tests/f_extents/expect.1
tests/f_extents/expect.2
tests/f_extents/image.gz
tests/f_htree_bad_csum/name
tests/f_hugedir_blocks/name
tests/f_illbbitmap/expect.1
tests/f_illibitmap/expect.1
tests/f_illitable_flexbg/expect.1
tests/f_imagic_fs/script
tests/f_ind_inode_collision/expect.1
tests/f_inlinedata_flags/expect.1 [new file with mode: 0644]
tests/f_inlinedata_flags/expect.2 [new file with mode: 0644]
tests/f_inlinedata_flags/image.gz [new file with mode: 0644]
tests/f_inlinedata_flags/name [new file with mode: 0644]
tests/f_itable_collision/expect.1
tests/f_itable_collision/script
tests/f_jnl_errno/expect.0
tests/f_jnl_errno/expect.1
tests/f_jnl_etb_alloc_fail/name
tests/f_journal/expect.1
tests/f_large_dir/expect [new file with mode: 0644]
tests/f_large_dir/is_slow_test [new file with mode: 0644]
tests/f_large_dir/name [new file with mode: 0644]
tests/f_large_dir/script [new file with mode: 0644]
tests/f_large_dir_csum/expect [new file with mode: 0644]
tests/f_large_dir_csum/is_slow_test [new file with mode: 0644]
tests/f_large_dir_csum/name [new file with mode: 0644]
tests/f_large_dir_csum/script [new file with mode: 0644]
tests/f_lpf/expect.1
tests/f_many_subdirs/expect.1 [new file with mode: 0644]
tests/f_many_subdirs/expect.2 [new file with mode: 0644]
tests/f_many_subdirs/image.gz [new file with mode: 0644]
tests/f_many_subdirs/name [new file with mode: 0644]
tests/f_mke2fs_baddisk/script
tests/f_mmp/is_slow_test [new file with mode: 0644]
tests/f_mmp/script
tests/f_mmp_garbage/is_slow_test [new file with mode: 0644]
tests/f_mmp_garbage/script
tests/f_no/expect
tests/f_no/script
tests/f_opt_extent/expect
tests/f_opt_extent/script
tests/f_opt_extent_ext3/script
tests/f_orphan/expect.1
tests/f_orphan_extents_inode/expect.1
tests/f_orphquot/expect [new file with mode: 0644]
tests/f_orphquot/image.bz2 [new file with mode: 0644]
tests/f_orphquot/script [new file with mode: 0644]
tests/f_overfsblks/expect.1
tests/f_pre_1970_date_encoding/script
tests/f_quota_extent_opt/expect.1 [new file with mode: 0644]
tests/f_quota_extent_opt/expect.2 [new file with mode: 0644]
tests/f_quota_extent_opt/image.gz [new file with mode: 0644]
tests/f_quota_extent_opt/name [new file with mode: 0644]
tests/f_quota_invalid_inum/expect.1 [new file with mode: 0644]
tests/f_quota_invalid_inum/expect.2 [new file with mode: 0644]
tests/f_quota_invalid_inum/image.gz [new file with mode: 0644]
tests/f_quota_invalid_inum/name [new file with mode: 0644]
tests/f_readonly_fsck/script
tests/f_rebuild_csum_rootdir/expect.1
tests/f_rebuild_csum_rootdir/name
tests/f_recnect_bad/expect.1
tests/f_rehash_dir/expect.1
tests/f_resize_inode/script
tests/f_resize_inode_meta_bg/expect.1 [new file with mode: 0644]
tests/f_resize_inode_meta_bg/expect.2 [new file with mode: 0644]
tests/f_resize_inode_meta_bg/image.gz [new file with mode: 0644]
tests/f_resize_inode_meta_bg/name [new file with mode: 0644]
tests/f_shared_blocks_ok/expect.1 [new file with mode: 0644]
tests/f_shared_blocks_ok/expect.2 [new file with mode: 0644]
tests/f_shared_blocks_ok/image.gz [new file with mode: 0644]
tests/f_shared_blocks_ok/name [new file with mode: 0644]
tests/f_short_encrypted_dirent/expect.1
tests/f_short_encrypted_dirent/expect.2
tests/f_short_encrypted_dirent/image.gz
tests/f_super_bad_csum/expect.1
tests/f_super_bad_csum/script
tests/f_uninit_bad_free_inodes/expect.1 [new file with mode: 0644]
tests/f_uninit_bad_free_inodes/expect.2 [new file with mode: 0644]
tests/f_uninit_bad_free_inodes/image.gz [new file with mode: 0644]
tests/f_uninit_bad_free_inodes/name [new file with mode: 0644]
tests/f_uninit_blk_used_not_set/expect.1 [new file with mode: 0644]
tests/f_uninit_blk_used_not_set/expect.2 [new file with mode: 0644]
tests/f_uninit_blk_used_not_set/image.gz [new file with mode: 0644]
tests/f_uninit_blk_used_not_set/name [new file with mode: 0644]
tests/f_uninit_cat/script
tests/f_uninit_checksum_bad/expect.1 [new file with mode: 0644]
tests/f_uninit_checksum_bad/expect.2 [new file with mode: 0644]
tests/f_uninit_checksum_bad/image.gz [new file with mode: 0644]
tests/f_uninit_checksum_bad/name [new file with mode: 0644]
tests/f_uninit_disable/expect.1 [new file with mode: 0644]
tests/f_uninit_disable/expect.2 [new file with mode: 0644]
tests/f_uninit_disable/image.gz [new file with mode: 0644]
tests/f_uninit_disable/name [new file with mode: 0644]
tests/f_uninit_enable/expect.1 [new file with mode: 0644]
tests/f_uninit_enable/expect.2 [new file with mode: 0644]
tests/f_uninit_enable/image.gz [new file with mode: 0644]
tests/f_uninit_enable/name [new file with mode: 0644]
tests/f_uninit_ext_past_eof2/name
tests/f_uninit_inode_past_unused/expect.1 [new file with mode: 0644]
tests/f_uninit_inode_past_unused/expect.2 [new file with mode: 0644]
tests/f_uninit_inode_past_unused/image.gz [new file with mode: 0644]
tests/f_uninit_inode_past_unused/name [new file with mode: 0644]
tests/f_uninit_last_uninit/script
tests/f_uninit_restart_fsck/expect.1 [new file with mode: 0644]
tests/f_uninit_restart_fsck/expect.2 [new file with mode: 0644]
tests/f_uninit_restart_fsck/image.gz [new file with mode: 0644]
tests/f_uninit_restart_fsck/name [new file with mode: 0644]
tests/f_uninit_set_inode_not_set/expect.1 [new file with mode: 0644]
tests/f_uninit_set_inode_not_set/expect.2 [new file with mode: 0644]
tests/f_uninit_set_inode_not_set/image.gz [new file with mode: 0644]
tests/f_uninit_set_inode_not_set/name [new file with mode: 0644]
tests/f_unshare_blocks_no_space/expect.1 [new file with mode: 0644]
tests/f_unshare_blocks_no_space/expect.2 [new file with mode: 0644]
tests/f_unshare_blocks_no_space/image.gz [new file with mode: 0644]
tests/f_unshare_blocks_no_space/name [new file with mode: 0644]
tests/f_unshare_blocks_no_space/script [new file with mode: 0644]
tests/f_unshare_blocks_ok/expect.1 [new file with mode: 0644]
tests/f_unshare_blocks_ok/expect.2 [new file with mode: 0644]
tests/f_unshare_blocks_ok/image.gz [new file with mode: 0644]
tests/f_unshare_blocks_ok/name [new file with mode: 0644]
tests/f_unshare_blocks_ok/script [new file with mode: 0644]
tests/f_unsorted_EAs/expect.1
tests/f_valid_ea_in_inode/expect.1
tests/f_valid_ea_in_inode/image.gz
tests/f_verity/expect.1 [new file with mode: 0644]
tests/f_verity/image.gz [new file with mode: 0644]
tests/f_verity/mkimage.sh [new file with mode: 0755]
tests/f_verity/name [new file with mode: 0644]
tests/f_verity/script [new file with mode: 0644]
tests/f_write_ea_toosmall_extra_isize/name
tests/f_yes/expect
tests/f_yes/script
tests/f_yesall/expect
tests/f_yesall/script
tests/f_yesthenall/expect
tests/f_yesthenall/script
tests/f_yesthenno/expect
tests/f_yesthenno/script
tests/filter.sed
tests/i_bad_csum/script
tests/i_bitmaps/expect [new file with mode: 0644]
tests/i_bitmaps/image.bz2 [new file with mode: 0644]
tests/i_bitmaps/script [new file with mode: 0644]
tests/i_qcow/i_qcow.crc
tests/i_qcow/script
tests/i_zero_super/expect.1 [new file with mode: 0644]
tests/i_zero_super/image.gz [new file with mode: 0644]
tests/i_zero_super/script [new file with mode: 0644]
tests/j_corrupt_commit_csum/script
tests/j_corrupt_commit_tid/script
tests/j_corrupt_descr_csum/script
tests/j_corrupt_descr_tid/script
tests/j_corrupt_ext_jnl_sb_block/name
tests/j_corrupt_ext_jnl_sb_block/script
tests/j_corrupt_ext_jnl_sb_csum/expect
tests/j_corrupt_ext_jnl_sb_csum/name
tests/j_corrupt_ext_jnl_sb_csum/script
tests/j_corrupt_journal_block/expect
tests/j_corrupt_journal_block/script
tests/j_corrupt_revoke_block/script
tests/j_corrupt_revoke_csum/script
tests/j_corrupt_sb_csum/script
tests/j_corrupt_sb_magic/script
tests/j_ext_dumpe2fs/expect
tests/j_ext_dumpe2fs/script
tests/j_ext_long_revoke_trans/name
tests/j_ext_long_revoke_trans/script
tests/j_ext_long_trans/expect
tests/j_ext_long_trans/script
tests/j_long_revoke_trans/script
tests/j_long_revoke_trans_mcsum_32bit/name
tests/j_long_revoke_trans_mcsum_32bit/script
tests/j_long_revoke_trans_mcsum_64bit/name
tests/j_long_revoke_trans_mcsum_64bit/script
tests/j_long_trans/expect
tests/j_long_trans/script
tests/j_long_trans_mcsum_32bit/expect
tests/j_long_trans_mcsum_32bit/name
tests/j_long_trans_mcsum_32bit/script
tests/j_long_trans_mcsum_64bit/expect
tests/j_long_trans_mcsum_64bit/name
tests/j_long_trans_mcsum_64bit/script
tests/j_recover_csum2_32bit/expect.1
tests/j_recover_csum2_32bit/script
tests/j_recover_csum2_64bit/expect.1
tests/j_recover_csum2_64bit/script
tests/j_recover_csum3_64bit/expect.1 [new file with mode: 0644]
tests/j_recover_csum3_64bit/expect.2 [new file with mode: 0644]
tests/j_recover_csum3_64bit/image.bz2 [new file with mode: 0644]
tests/j_recover_csum3_64bit/name [new file with mode: 0644]
tests/j_recover_csum3_64bit/script [new file with mode: 0755]
tests/j_recover_fast_commit/commands [new file with mode: 0644]
tests/j_recover_fast_commit/expect [new file with mode: 0644]
tests/j_recover_fast_commit/image.gz [new file with mode: 0644]
tests/j_recover_fast_commit/script [new file with mode: 0755]
tests/j_short_revoke_trans/script
tests/j_short_revoke_trans_mcsum_64bit/name
tests/j_short_revoke_trans_mcsum_64bit/script
tests/j_short_trans/expect
tests/j_short_trans/script
tests/j_short_trans_64bit/expect
tests/j_short_trans_64bit/script
tests/j_short_trans_mcsum_64bit/expect
tests/j_short_trans_mcsum_64bit/name
tests/j_short_trans_mcsum_64bit/script
tests/j_short_trans_old_csum/expect
tests/j_short_trans_old_csum/name
tests/j_short_trans_old_csum/script
tests/j_short_trans_open_recover/expect
tests/j_short_trans_open_recover/name
tests/j_short_trans_open_recover/script
tests/j_short_trans_recover/expect
tests/j_short_trans_recover/script
tests/j_short_trans_recover_mcsum_64bit/expect
tests/j_short_trans_recover_mcsum_64bit/name
tests/j_short_trans_recover_mcsum_64bit/script
tests/j_short_uncommitted_trans/script
tests/j_short_uncommitted_trans_mcsum_64bit/name
tests/j_short_uncommitted_trans_mcsum_64bit/script
tests/m_64bit_flexbg/expect.1
tests/m_bigjournal/expect.1
tests/m_dasd_bs/expect.1
tests/m_desc_size_128/expect.1
tests/m_devdir/script
tests/m_error_behavior/script
tests/m_extent_journal/expect.1
tests/m_hugefile/expect
tests/m_hugefile/script
tests/m_hugefile_slack/name
tests/m_hugefile_slack/script
tests/m_image_mmp/expect.1 [new file with mode: 0644]
tests/m_image_mmp/name [new file with mode: 0644]
tests/m_image_mmp/script [new file with mode: 0644]
tests/m_large_file/expect.1
tests/m_mcsum_extjournal/script
tests/m_meta_bg/expect.1
tests/m_minrootdir/expect
tests/m_minrootdir/script
tests/m_mkfs_overhead/script
tests/m_mmp/expect.1
tests/m_mmp/script
tests/m_mmp_bad_csum/expect
tests/m_mmp_bad_csum/script
tests/m_mmp_bad_magic/expect
tests/m_mmp_bad_magic/script
tests/m_no_opt/expect.1
tests/m_offset/script
tests/m_quota/expect.1
tests/m_raid_opt/expect.1
tests/m_resize_inode_meta_bg/expect.1 [new file with mode: 0644]
tests/m_resize_inode_meta_bg/script [new file with mode: 0644]
tests/m_root_owner/expect.1
tests/m_rootdir/expect
tests/m_rootdir/script
tests/m_std/expect.1
tests/m_uninit/expect.1
tests/mke2fs.conf.in
tests/progs/Makefile.in
tests/progs/test_icount.c
tests/progs/test_icount.h
tests/r_1024_small_bg/script
tests/r_32to64bit/expect
tests/r_32to64bit/script
tests/r_32to64bit_expand_full/name
tests/r_32to64bit_expand_full/script
tests/r_32to64bit_meta/expect
tests/r_32to64bit_meta/script
tests/r_32to64bit_move_itable/expect
tests/r_32to64bit_move_itable/name
tests/r_32to64bit_move_itable/script
tests/r_64bit_big_expand/is_slow_test [new file with mode: 0644]
tests/r_64bit_big_expand/script
tests/r_64to32bit/expect
tests/r_64to32bit/script
tests/r_64to32bit_meta/expect
tests/r_64to32bit_meta/script
tests/r_bigalloc_big_expand/script
tests/r_expand_full/script
tests/r_ext4_big_expand/is_slow_test [new file with mode: 0644]
tests/r_ext4_big_expand/script
tests/r_ext4_small_bg/script
tests/r_fixup_lastbg/script
tests/r_fixup_lastbg_big/script
tests/r_inline_xattr/expect
tests/r_inline_xattr/script
tests/r_meta_bg_shrink/script
tests/r_min_itable/script
tests/r_move_inode_int_extent/expect [new file with mode: 0644]
tests/r_move_inode_int_extent/image.gz [new file with mode: 0644]
tests/r_move_inode_int_extent/name [new file with mode: 0644]
tests/r_move_inode_int_extent/script [new file with mode: 0644]
tests/r_move_itable/script
tests/r_move_itable_nostride/expect [new file with mode: 0644]
tests/r_move_itable_nostride/name [new file with mode: 0644]
tests/r_move_itable_nostride/script [new file with mode: 0644]
tests/r_move_itable_realloc/expect [new file with mode: 0644]
tests/r_move_itable_realloc/name [new file with mode: 0644]
tests/r_move_itable_realloc/script [new file with mode: 0644]
tests/r_resize_inode/script
tests/run_e2fsck
tests/run_mke2fs
tests/scripts/gen-test-data [new file with mode: 0755]
tests/t_change_uuid/script
tests/t_change_uuid_mcsum/script
tests/t_change_uuid_mcsum_mounted/script
tests/t_change_uuid_mcsum_seed_mounted/script
tests/t_change_uuid_mounted/script
tests/t_dangerous/expect
tests/t_dangerous/script
tests/t_disable_changed_csum_seed/script
tests/t_disable_changed_csum_seed_mounted/script
tests/t_disable_csum_seed/script
tests/t_disable_mcsum/expect
tests/t_disable_mcsum_noinitbg/expect
tests/t_disable_mcsum_noinitbg/script
tests/t_disable_mcsum_yesinitbg/expect
tests/t_disable_mcsum_yesinitbg/script
tests/t_disable_meta_csum_and_seed/script
tests/t_enable_csum_seed/script
tests/t_enable_mcsum/expect
tests/t_enable_mcsum_ext3/expect
tests/t_enable_mcsum_initbg/expect
tests/t_ext_jnl_fail/script
tests/t_format_csum_seed/script
tests/t_iexpand_full/expect
tests/t_iexpand_full/script
tests/t_iexpand_mcsum/expect
tests/t_iexpand_mcsum/script
tests/t_mmp_1on/script
tests/t_mmp_2off/script
tests/t_mmp_fail/is_slow_test [new file with mode: 0644]
tests/t_mmp_fail/name [new file with mode: 0644]
tests/t_mmp_fail/script [new file with mode: 0644]
tests/t_project_1on/name [new file with mode: 0644]
tests/t_project_1on/script [new file with mode: 0644]
tests/t_project_2off/name [new file with mode: 0644]
tests/t_project_2off/script [new file with mode: 0644]
tests/t_project_3on/name [new file with mode: 0644]
tests/t_project_3on/script [new file with mode: 0644]
tests/t_project_4off/name [new file with mode: 0644]
tests/t_project_4off/script [new file with mode: 0644]
tests/t_quota_1on/script
tests/t_replay_and_set/expect
tests/t_replay_and_set/script
tests/t_uninit_bg_rm/script
tests/test_config
tests/test_one.in
tests/test_script.in
tests/u_debugfs_opt/script
tests/u_mke2fs_opt_offset/script
tests/u_revert_64bitmcsum_onefile/script
tests/u_revert_all_onefile/script
tests/u_revert_upgrade_to_64bitmcsum/script
util/Makefile.in
util/Makefile.pq [deleted file]
util/android-README.version.in
util/android_config.h
util/android_types.h
util/gcc-wall-cleanup [deleted file]
util/gen-android-files
util/gen-git-tarball [new file with mode: 0755]
util/gen-tarball.in
util/mkutf8data.c [new file with mode: 0644]
util/static-analysis-cleanup [deleted file]
util/subset.exclude [deleted file]
util/subst.c
util/subst.conf.in
util/symlinks.c
util/ucd/README [new file with mode: 0644]
version.h

index baf9b1a..5288836 100644 (file)
@@ -22,11 +22,13 @@ MCONFIG
 asm_types.h
 config.log
 config.status
+cscope.*
 debugfs/extent_cmds.c
 debugfs/debug_cmds.c
 debugfs/debugfs
 debugfs/debugfs.8
 debugfs/extent_cmds.c
+debugfs/tst_set_fields
 doc/libext2fs.aux
 doc/libext2fs.cp
 doc/libext2fs.dvi
@@ -108,11 +110,17 @@ lib/ext2fs/tst_bitops
 lib/ext2fs/tst_cmds.c
 lib/ext2fs/tst_csum
 lib/ext2fs/tst_crc32c
+lib/ext2fs/tst_digest_encode
+lib/ext2fs/tst_getsectsize
+lib/ext2fs/tst_getsize
 lib/ext2fs/tst_icount
 lib/ext2fs/tst_inline
+lib/ext2fs/tst_inline_data
 lib/ext2fs/tst_inode_size
 lib/ext2fs/tst_iscan
 lib/ext2fs/tst_libext2fs
+lib/ext2fs/tst_sha256
+lib/ext2fs/tst_sha512
 lib/ext2fs/tst_super_size
 lib/ext2fs/tst_types
 lib/quota/subdirs
@@ -126,6 +134,9 @@ lib/ss/test.diff
 lib/ss/test_cmd.c
 lib/ss/test_out
 lib/ss/test_ss
+lib/support/prof_err.c
+lib/support/prof_err.h
+lib/support/subdirs
 lib/uuid/subdirs
 lib/uuid/tst_uuid
 lib/uuid/uuid.3
@@ -159,8 +170,12 @@ misc/e2image
 misc/e2image.8
 misc/e2initrd_helper
 misc/e2label.8
+misc/e2mmpstatus
+misc/e2mmpstatus.8
 misc/e2undo
 misc/e2undo.8
+misc/e4crypt
+misc/e4crypt.8
 misc/e4defrag
 misc/e4defrag.8
 misc/ext4.5
@@ -170,6 +185,8 @@ misc/findfs.8
 misc/findsuper
 misc/fsck
 misc/fsck.8
+misc/fuse2fs
+misc/fuse2fs.1
 misc/logsave
 misc/logsave.8
 misc/lsattr
@@ -189,6 +206,7 @@ misc/uuidd
 misc/uuidd.8
 misc/uuidgen
 misc/uuidgen.1
+ncscope.*
 parse-types.log
 po/Makefile.in
 po/POTFILES
@@ -206,6 +224,8 @@ tests/*.ok
 tests/*.failed
 tests/*.log
 tests/*.tmp
+tests/*.slow
+tests/test_data.tmp
 tests/mke2fs.conf
 tests/test_script
 tests/test_one
diff --git a/.hgignore b/.hgignore
deleted file mode 100644 (file)
index bc0bb6b..0000000
--- a/.hgignore
+++ /dev/null
@@ -1,7 +0,0 @@
-^autom4te.cache
-^build
-^FILES
-^core
-~$
-^.pc
-^patches
index 414265c..c8a6fc2 100644 (file)
@@ -11,6 +11,7 @@
        README
        RELEASE-NOTES
        e2fsprogs.lsm
+       e2fsprogs.spec
        doc/libext2fs.texinfo (three places)
 
 6)  Make source distribution
index d528f9c..3cc8286 100644 (file)
--- a/ABOUT-NLS
+++ b/ABOUT-NLS
-Notes on the Free Translation Project
-*************************************
+Notes on the Free Translation Project
+***************************************
 
-   Free software is going international!  The Free Translation Project
-is a way to get maintainers of free software, translators, and users all
-together, so that will gradually become able to speak many languages.
-A few packages already provide translations for their messages.
+Free software is going international!  The Free Translation Project is a
+way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages.  A few packages already provide translations for their
+messages.
 
-   If you found this `ABOUT-NLS' file inside a distribution, you may
-assume that the distributed package does use GNU `gettext' internally,
+   If you found this 'ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU 'gettext' internally,
 itself available at your nearest GNU archive site.  But you do _not_
-need to install GNU `gettext' prior to configuring, installing or using
+need to install GNU 'gettext' prior to configuring, installing or using
 this package with messages translated.
 
    Installers will find here some useful hints.  These notes also
 explain how users should proceed for getting the programs to use the
 available translations.  They tell how people wanting to contribute and
-work at translations should contact the appropriate team.
+work on translations can contact the appropriate team.
 
-   When reporting bugs in the `intl/' directory or bugs which may be
-related to internationalization, you should tell about the version of
-`gettext' which is used.  The information can be found in the
-`intl/VERSION' file, in internationalized packages.
+1.1 INSTALL Matters
+===================
 
-Quick configuration advice
-==========================
-
-   If you want to exploit the full power of internationalization, you
-should configure it using
-
-     ./configure --with-included-gettext
-
-to force usage of internationalizing routines provided within this
-package, despite the existence of internationalizing capabilities in the
-operating system where this package is being installed.  So far, only
-the `gettext' implementation in the GNU C library version 2 provides as
-many features (such as locale alias, message inheritance, automatic
-charset conversion or plural form handling) as the implementation here.
-It is also not possible to offer this additional functionality on top
-of a `catgets' implementation.  Future versions of GNU `gettext' will
-very likely convey even more functionality.  So it might be a good idea
-to change to GNU `gettext' as soon as possible.
-
-   So you need _not_ provide this option if you are using GNU libc 2 or
-you have installed a recent copy of the GNU gettext package with the
-included `libintl'.
-
-INSTALL Matters
-===============
-
-   Some packages are "localizable" when properly installed; the
-programs they contain can be made to speak your own native language.
-Most such packages use GNU `gettext'.  Other packages have their own
-ways to internationalization, predating GNU `gettext'.
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language.  Most such
+packages use GNU 'gettext'.  Other packages have their own ways to
+internationalization, predating GNU 'gettext'.
 
    By default, this package will be installed to allow translation of
 messages.  It will automatically detect whether the system already
-provides the GNU `gettext' functions.  If not, the GNU `gettext' own
-library will be used.  This library is wholly contained within this
-package, usually in the `intl/' subdirectory, so prior installation of
-the GNU `gettext' package is _not_ required.  Installers may use
-special options at configuration time for changing the default
-behaviour.  The commands:
-
-     ./configure --with-included-gettext
-     ./configure --disable-nls
-
-will respectively bypass any pre-existing `gettext' to use the
-internationalizing routines provided within this package, or else,
-_totally_ disable translation of messages.
-
-   When you already have GNU `gettext' installed on your system and run
-configure without an option for your new package, `configure' will
-probably detect the previously built and installed `libintl.a' file and
-will decide to use this.  This might be not what is desirable.  You
-should use the more recent version of the GNU `gettext' library.  I.e.
-if the file `intl/VERSION' shows that the library which comes with this
-package is more recent, you should use
+provides the GNU 'gettext' functions.  Installers may use special
+options at configuration time for changing the default behaviour.  The
+command:
 
-     ./configure --with-included-gettext
+     ./configure --disable-nls
 
-to prevent auto-detection.
+will _totally_ disable translation of messages.
 
-   The configuration process will not test for the `catgets' function
-and therefore it will not be used.  The reason is that even an
-emulation of `gettext' on top of `catgets' could not provide all the
-extensions of the GNU `gettext' library.
+   When you already have GNU 'gettext' installed on your system and run
+configure without an option for your new package, 'configure' will
+probably detect the previously built and installed 'libintl' library and
+will decide to use it.  If not, you may have to to use the
+'--with-libintl-prefix' option to tell 'configure' where to look for it.
 
-   Internationalized packages have usually many `po/LL.po' files, where
+   Internationalized packages usually have many 'po/LL.po' files, where
 LL gives an ISO 639 two-letter code identifying the language.  Unless
-translations have been forbidden at `configure' time by using the
-`--disable-nls' switch, all available translations are installed
-together with the package.  However, the environment variable `LINGUAS'
+translations have been forbidden at 'configure' time by using the
+'--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable 'LINGUAS'
 may be set, prior to configuration, to limit the installed set.
-`LINGUAS' should then contain a space separated list of two-letter
+'LINGUAS' should then contain a space separated list of two-letter
 codes, stating which languages are allowed.
 
-Using This Package
-==================
+1.2 Using This Package
+======================
 
-   As a user, if your language has been installed for this package, you
-only have to set the `LANG' environment variable to the appropriate
-`LL_CC' combination.  Here `LL' is an ISO 639 two-letter language code,
-and `CC' is an ISO 3166 two-letter country code.  For example, let's
-suppose that you speak German and live in Germany.  At the shell
-prompt, merely execute `setenv LANG de_DE' (in `csh'),
-`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
-This can be done from your `.login' or `.profile' file, once and for
-all.
+As a user, if your language has been installed for this package, you
+only have to set the 'LANG' environment variable to the appropriate
+'LL_CC' combination.  If you happen to have the 'LC_ALL' or some other
+'LC_xxx' environment variables set, you should unset them before setting
+'LANG', otherwise the setting of 'LANG' will not have the desired
+effect.  Here 'LL' is an ISO 639 two-letter language code, and 'CC' is
+an ISO 3166 two-letter country code.  For example, let's suppose that
+you speak German and live in Germany.  At the shell prompt, merely
+execute 'setenv LANG de_DE' (in 'csh'), 'export LANG; LANG=de_DE' (in
+'sh') or 'export LANG=de_DE' (in 'bash').  This can be done from your
+'.login' or '.profile' file, once and for all.
 
    You might think that the country code specification is redundant.
 But in fact, some languages have dialects in different countries.  For
-example, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The
+example, 'de_AT' is used for Austria, and 'pt_BR' for Brazil.  The
 country code serves to distinguish the dialects.
 
-   The locale naming convention of `LL_CC', with `LL' denoting the
-language and `CC' denoting the country, is the one use on systems based
-on GNU libc.  On other systems, some variations of this scheme are
-used, such as `LL' or `LL_CC.ENCODING'.  You can get the list of
-locales supported by your system for your country by running the command
-`locale -a | grep '^LL''.
+   The locale naming convention of 'LL_CC', with 'LL' denoting the
+language and 'CC' denoting the country, is the one use on systems based
+on GNU libc.  On other systems, some variations of this scheme are used,
+such as 'LL' or 'LL_CC.ENCODING'.  You can get the list of locales
+supported by your system for your language by running the command
+'locale -a | grep '^LL''.
 
    Not all programs have translations for all languages.  By default, an
 English message is shown in place of a nonexistent translation.  If you
 understand other languages, you can set up a priority list of languages.
 This is done through a different environment variable, called
-`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'
-for the purpose of message handling, but you still need to have `LANG'
+'LANGUAGE'.  GNU 'gettext' gives preference to 'LANGUAGE' over 'LANG'
+for the purpose of message handling, but you still need to have 'LANG'
 set to the primary language; this is required by other parts of the
-system libraries.  For example, some Swedish users who would rather
-read translations in German than English for when Swedish is not
-available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+system libraries.  For example, some Swedish users who would rather read
+translations in German than English for when Swedish is not available,
+set 'LANGUAGE' to 'sv:de' while leaving 'LANG' to 'sv_SE'.
+
+   Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from 'no' to 'nb' recently (in 2003).  During the
+transition period, while some message catalogs for this language are
+installed under 'nb' and some older ones under 'no', it's recommended
+for Norwegian users to set 'LANGUAGE' to 'nb:no' so that both newer and
+older translations are used.
 
-   In the `LANGUAGE' environment variable, but not in the `LANG'
-environment variable, `LL_CC' combinations can be abbreviated as `LL'
-to denote the language's main dialect.  For example, `de' is equivalent
-to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
-(Portuguese as spoken in Portugal) in this context.
+   In the 'LANGUAGE' environment variable, but not in the 'LANG'
+environment variable, 'LL_CC' combinations can be abbreviated as 'LL' to
+denote the language's main dialect.  For example, 'de' is equivalent to
+'de_DE' (German as spoken in Germany), and 'pt' to 'pt_PT' (Portuguese
+as spoken in Portugal) in this context.
 
-Translating Teams
-=================
+1.3 Translating Teams
+=====================
 
-   For the Free Translation Project to be a success, we need interested
+For the Free Translation Project to be a success, we need interested
 people who like their own language and write it well, and who are also
 able to synergize with other translators speaking the same language.
 Each translation team has its own mailing list.  The up-to-date list of
 teams can be found at the Free Translation Project's homepage,
-`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
-area.
+'http://translationproject.org/', in the "Teams" area.
 
    If you'd like to volunteer to _work_ at translating messages, you
 should become a member of the translating team for your own language.
 The subscribing address is _not_ the same as the list itself, it has
-`-request' appended.  For example, speakers of Swedish can send a
-message to `sv-request@li.org', having this message body:
+'-request' appended.  For example, speakers of Swedish can send a
+message to 'sv-request@li.org', having this message body:
 
      subscribe
 
-   Keep in mind that team members are expected to participate
-_actively_ in translations, or at solving translational difficulties,
-rather than merely lurking around.  If your team does not exist yet and
-you want to start one, or if you are unsure about what to do or how to
-get started, please write to `translation@iro.umontreal.ca' to reach the
+   Keep in mind that team members are expected to participate _actively_
+in translations, or at solving translational difficulties, rather than
+merely lurking around.  If your team does not exist yet and you want to
+start one, or if you are unsure about what to do or how to get started,
+please write to 'coordinator@translationproject.org' to reach the
 coordinator for all translator teams.
 
    The English team is special.  It works at improving and uniformizing
-the terminology in use.  Proven linguistic skill are praised more than
-programming skill, here.
+the terminology in use.  Proven linguistic skills are praised more than
+programming skills, here.
 
-Available Packages
-==================
+1.4 Available Packages
+======================
 
-   Languages are not equally supported in all packages.  The following
-matrix shows the current state of internationalization, as of August
-2002.  The matrix shows, in regard of each package, for which languages
-PO files have been submitted to translation coordination, with a
+Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of Jun 2014.
+The matrix shows, in regard of each package, for which languages PO
+files have been submitted to translation coordination, with a
 translation percentage of at least 50%.
 
-     Ready PO files    be bg ca cs da de el en eo es et fi fr
-                     +----------------------------------------+
-     a2ps            |             [] []             []    [] |
-     ap-utils        |                                        |
-     bash            |                []       [] []       [] |
-     bfd             |                            []       [] |
-     binutils        |                            []       [] |
-     bison           |                []          [] []    [] |
-     clisp           |                                        |
-     clisp           |                []    []    []       [] |
-     clisplow        |                                        |
-     cpio            |             [] []          []       [] |
-     darkstat        |             ()                         |
-     diffutils       |          [] [] []       [] []       [] |
-     enscript        |                []                   [] |
-     error           |                []          []       [] |
-     fetchmail       |       [] () [] []          []       () |
-     fileutils       |             [] []          [] []    [] |
-     findutils       |             [] []       [] [] []    [] |
-     flex            |       []    [] []          []       [] |
-     gas             |                            []       [] |
-     gawk            |                []          []       [] |
-     gcal            |       []                            [] |
-     gcc             |                            []       [] |
-     gettext         |       []    [] []          []       [] |
-     gnupg           |       []       [] []    [] [] []    [] |
-     gprof           |                            []       [] |
-     gpsdrive        |             () ()    ()    ()       () |
-     grep            |    [] []       [] []       [] [] [] [] |
-     gretl           |                            []          |
-     gthumb          |                ()          ()       () |
-     hello           |       []    [] [] []    [] [] [] [] [] |
-     id-utils        |             [] []                   [] |
-     indent          |       []       []       []    []    [] |
-     jpilot          |          () [] []                   [] |
-     jwhois          |                            []       [] |
-     kbd             |                []          []       [] |
-     ld              |                            []       [] |
-     libc            |       [] [] [] [] []       []    [] [] |
-     libiconv        |       []       []       [] []          |
-     lifelines       |                ()                   () |
-     lilypond        |             []                      [] |
-     lingoteach      |                         []          [] |
-     lingoteach_lessons|                ()          ()          |
-     lynx            |       [] [] [] []             []       |
-     m4              |          [] [] [] []                [] |
-     make            |             [] []          []       [] |
-     man-db          |       [] () () []          ()       () |
-     mysecretdiary   |                []          []       [] |
-     nano            |       [] () [] []          []       [] |
-     nano_1_0        |       [] () [] []          []       [] |
-     opcodes         |             []             []       [] |
-     parted          |       []    [] []          []       [] |
-     ptx             |             [] []       [] [] [] [] [] |
-     python          |                                        |
-     recode          |             [] [] []    [] []       [] |
-     sed             |       [] [] [] [] []    [] [] [] [] [] |
-     sh-utils        |                []          [] []    [] |
-     sharutils       |          [] [] [] []       [] []    [] |
-     sketch          |                ()          []       () |
-     soundtracker    |                []          []       [] |
-     sp              |                []                      |
-     tar             |          [] [] []          [] []    [] |
-     texinfo         |          [] [] []       []          [] |
-     textutils       |       []    [] []          []       [] |
-     util-linux      |          [] [] []          [] []    [] |
-     vorbis-tools    |                                     [] |
-     wastesedge      |                                        |
-     wdiff           |       []    [] []          [] []    [] |
-     wget            |    [] [] [] [] [] []       [] [] [] [] |
-                     +----------------------------------------+
-                       be bg ca cs da de el en eo es et fi fr
-                        0  2 19 10 30 44  9  1 12 44 17  6 53
-     
-                       gl he hr hu id it ja ko lv nb nl nn
-                     +-------------------------------------+
-     a2ps            |                ()    ()       []    |
-     ap-utils        |                                     |
-     bash            |          []                         |
-     bfd             |                   []                |
-     binutils        |                   []                |
-     bison           |       []       [] []          []    |
-     clisp           |                                     |
-     clisp           |                               []    |
-     clisplow        |                                     |
-     cpio            | []       []          []       []    |
-     darkstat        |                                     |
-     diffutils       | [] []    [] []    []                |
-     enscript        |       []                      []    |
-     error           |          []                         |
-     fetchmail       |                   []                |
-     fileutils       |          []    [] []                |
-     findutils       | []    [] [] [] [] [] []       []    |
-     flex            |                      []             |
-     gas             |                                     |
-     gawk            |    []                               |
-     gcal            |                                     |
-     gcc             |                   []                |
-     gettext         |                   [] []             |
-     gnupg           | []          [] [] []                |
-     gprof           |             []                      |
-     gpsdrive        |          []    ()             ()    |
-     grep            | [] [] [] [] [] [] []                |
-     gretl           |                                     |
-     gthumb          |                () ()                |
-     hello           | [] [] [] [] [] [] [] [] [] [] [] [] |
-     id-utils        |          []                   []    |
-     indent          | []       []       []          []    |
-     jpilot          |                   ()          ()    |
-     jwhois          |          [] []                      |
-     kbd             |                                     |
-     ld              |                                     |
-     libc            | []                [] []    []       |
-     libiconv        | []    [] []                         |
-     lifelines       |                                     |
-     lilypond        |                               []    |
-     lingoteach      |          []                         |
-     lingoteach_lessons|                                     |
-     lynx            |          []    [] []          []    |
-     m4              | []          []    []          []    |
-     make            | [] [] []          [] []       []    |
-     man-db          |                () ()                |
-     mysecretdiary   |             []                      |
-     nano            | []          [] []             []    |
-     nano_1_0        | []          [] []          []    [] |
-     opcodes         |             []                []    |
-     parted          | []                []             [] |
-     ptx             | []       [] []             [] []    |
-     python          |                                     |
-     recode          | [] []          []                   |
-     sed             | [] [] []    [] [] [] []       []    |
-     sh-utils        |                [] []       []       |
-     sharutils       | []                []          []    |
-     sketch          |                ()                   |
-     soundtracker    | []    []                            |
-     sp              |                                     |
-     tar             | []    []    [] [] []       []       |
-     texinfo         |    [] []          []                |
-     textutils       | []                [] []    []       |
-     util-linux      |                () []                |
-     vorbis-tools    |          []                         |
-     wastesedge      |                                     |
-     wdiff           | []       [] []                      |
-     wget            | [] [] [] []       []          []    |
-                     +-------------------------------------+
-                       gl he hr hu id it ja ko lv nb nl nn
-                       23  9 12 19 16 13 26  9  1  7 19  3
-     
-                       no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW
-                     +----------------------------------------------+
-     a2ps            | () () ()  []   []    [] [] []                | 10
-     ap-utils        |                               ()             |  0
-     bash            |           []                                 |  6
-     bfd             |                         [] []                |  5
-     binutils        |                         [] []                |  5
-     bison           |           []   []       [] []                | 12
-     clisp           |                                              |  0
-     clisp           |                                              |  5
-     clisplow        |                                              |  0
-     cpio            |    []     []   []       []                   | 12
-     darkstat        |           []            []        ()    ()   |  2
-     diffutils       |    []     []   []       [] []           []   | 17
-     enscript        |           []   []       [] []                |  8
-     error           |                   []       []           []   |  7
-     fetchmail       |    ()     ()               []                |  6
-     fileutils       |                []    [] [] []     []    []   | 14
-     findutils       |    []     []   [] [] [] [] []                | 21
-     flex            |                []       [] []                |  9
-     gas             |                            []                |  3
-     gawk            |                         [] []                |  6
-     gcal            |                         [] []                |  4
-     gcc             |                            []                |  4
-     gettext         |                [] [] [] [] []           []   | 13
-     gnupg           |    []                   [] []                | 14
-     gprof           |                         [] []                |  5
-     gpsdrive        |                   []    []                   |  3
-     grep            |    []     []   []    []    []                | 20
-     gretl           |                                              |  1
-     gthumb          |           ()   ()       []                   |  1
-     hello           | [] []          [] []    [] [] []             | 28
-     id-utils        |           []   []       [] []                |  9
-     indent          |           []   [] []    [] []                | 14
-     jpilot          | ()                      () []           []   |  5
-     jwhois          |           []   ()       () []           []   |  7
-     kbd             |                         [] []                |  5
-     ld              |                         [] []                |  4
-     libc            | [] []     []      []    [] []                | 18
-     libiconv        |           []   [] []    [] []                | 12
-     lifelines       |                         []                   |  1
-     lilypond        |                         []                   |  4
-     lingoteach      |           []            []                   |  5
-     lingoteach_lessons|                                   ()         |  0
-     lynx            |           []   []       [] []                | 13
-     m4              |    []     []   []       []                   | 13
-     make            |    []     []   []       [] []                | 15
-     man-db          |                                              |  3
-     mysecretdiary   |           []            [] []                |  7
-     nano            |    []          []       []    []             | 13
-     nano_1_0        |    []          []       []    []             | 14
-     opcodes         |           []            [] []                |  8
-     parted          |       []  []            [] []                | 12
-     ptx             | [] [] []  []   []       [] []                | 19
-     python          |                                              |  0
-     recode          |    []     []   []    [] [] []                | 15
-     sed             |           []   [] [] [] [] []                | 24
-     sh-utils        |                []          []                |  9
-     sharutils       |                []       [] []           []   | 14
-     sketch          |           []   ()       []                   |  4
-     soundtracker    |                         []                   |  6
-     sp              |                                              |  1
-     tar             | [] []     []      [] [] [] []                | 19
-     texinfo         |                []       []                   | 10
-     textutils       |                []    [] [] []           []   | 14
-     util-linux      |           []            [] []                | 10
-     vorbis-tools    |                         []                   |  3
-     wastesedge      |                                              |  0
-     wdiff           |           []   [] []    [] []                | 14
-     wget            |    []          [] [] [] [] [] []        []   | 24
-                     +----------------------------------------------+
-       37 teams        no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW
-       68 domains       4 15  2  28   28 12 10 49 43  4   1     9    609
+     Ready PO files       af am an ar as ast az be bg bn bn_IN bs ca crh cs
+                        +---------------------------------------------------+
+     a2ps               |                       []                []     [] |
+     aegis              |                                                   |
+     anubis             |                                                   |
+     aspell             |                []                       []     [] |
+     bash               |                          []             []     [] |
+     bfd                |                                                   |
+     binutils           |                                         []        |
+     bison              |                                                   |
+     bison-runtime      |                []                                 |
+     buzztrax           |                                                [] |
+     ccd2cue            |                                                   |
+     ccide              |                                                   |
+     cflow              |                                                   |
+     clisp              |                                                   |
+     coreutils          |                                         []     [] |
+     cpio               |                                                   |
+     cppi               |                                                   |
+     cpplib             |                                         []        |
+     cryptsetup         |                                                [] |
+     datamash           |                                                   |
+     denemo             |                                         []     [] |
+     dfarc              |                                         []        |
+     dialog             |       []                                []     [] |
+     dico               |                                                   |
+     diffutils          |                                                [] |
+     dink               |                                         []        |
+     direvent           |                                                   |
+     doodle             |                                                [] |
+     dos2unix           |                                                   |
+     dos2unix-man       |                                                   |
+     e2fsprogs          |                                         []     [] |
+     enscript           |                                         []        |
+     exif               |                                                [] |
+     fetchmail          |                                         []     [] |
+     findutils          |                                                [] |
+     flex               |                                         []        |
+     freedink           |                                         []     [] |
+     fusionforge        |                                                   |
+     gas                |                                                   |
+     gawk               |                                         []        |
+     gcal               |                                         []        |
+     gcc                |                                                   |
+     gdbm               |                                                   |
+     gettext-examples   | []             []        []             []     [] |
+     gettext-runtime    |                          []             []     [] |
+     gettext-tools      |                          []             []        |
+     gjay               |                                                   |
+     glunarclock        |                []        []                    [] |
+     gnubiff            |                                                [] |
+     gnubik             |          []                                       |
+     gnucash            |          ()              ()             []        |
+     gnuchess           |                                                   |
+     gnulib             |                                                [] |
+     gnunet             |                                                   |
+     gnunet-gtk         |                                                   |
+     gold               |                                                   |
+     gphoto2            |                                                [] |
+     gprof              |                          []                       |
+     gramadoir          |                                                   |
+     grep               |                          []             []     [] |
+     grub               |                                         []        |
+     gsasl              |                                                   |
+     gss                |                                                   |
+     gst-plugins-bad    |                          []                    [] |
+     gst-plugins-base   |                          []             []     [] |
+     gst-plugins-good   |                          []             []     [] |
+     gst-plugins-ugly   |                          []             []     [] |
+     gstreamer          |                []        []             []     [] |
+     gtick              |                                                [] |
+     gtkam              |                       []                       [] |
+     gtkspell           | []             []     []                []     [] |
+     guix               |                                                   |
+     guix-packages      |                                                   |
+     gutenprint         |                                         []        |
+     hello              |                                         []        |
+     help2man           |                                                   |
+     help2man-texi      |                                                   |
+     hylafax            |                                                   |
+     idutils            |                                                   |
+     iso_15924          |                                                [] |
+     iso_3166           | []          []        [] [] []  []   [] [] []  [] |
+     iso_3166_2         |                                                   |
+     iso_4217           |                                                [] |
+     iso_639            |             [] []     [] [] []  []      [] []  [] |
+     iso_639_3          |                []                          []     |
+     iso_639_5          |                                                   |
+     jwhois             |                                                   |
+     kbd                |                                                [] |
+     klavaro            |          []              [] []          []     [] |
+     ld                 |                          []                       |
+     leafpad            |                       [] []             []     [] |
+     libc               |                          []             []     [] |
+     libexif            |                       ()                          |
+     libextractor       |                                                   |
+     libgnutls          |                                                [] |
+     libgphoto2         |                                                [] |
+     libgphoto2_port    |                                                [] |
+     libgsasl           |                                                   |
+     libiconv           |                          []                    [] |
+     libidn             |                                                [] |
+     liferea            |          []    []                       []     [] |
+     lilypond           |                                         []     [] |
+     lordsawar          |                                         []        |
+     lprng              |                                                   |
+     lynx               |                                         []     [] |
+     m4                 |                                                [] |
+     mailfromd          |                                                   |
+     mailutils          |                                                   |
+     make               |                                                [] |
+     man-db             |                                         []     [] |
+     man-db-manpages    |                                                   |
+     midi-instruments   |          []                             []     [] |
+     minicom            |                                                [] |
+     mkisofs            |                                                [] |
+     myserver           |                                                [] |
+     nano               |                          []             []     [] |
+     opcodes            |                                                   |
+     parted             |                                                [] |
+     pies               |                                                   |
+     pnmixer            |                                                   |
+     popt               |                                                [] |
+     procps-ng          |                                                   |
+     procps-ng-man      |                                                   |
+     psmisc             |                                                [] |
+     pspp               |                                         []        |
+     pushover           |                                                [] |
+     pwdutils           |                                                   |
+     pyspread           |                                                   |
+     radius             |                                         []        |
+     recode             |                       []                []     [] |
+     recutils           |                                                   |
+     rpm                |                                                   |
+     rush               |                                                   |
+     sarg               |                                                   |
+     sed                |                []        []             []     [] |
+     sharutils          |                                                [] |
+     shishi             |                                                   |
+     skribilo           |                                                   |
+     solfege            |                                         []     [] |
+     solfege-manual     |                                                   |
+     spotmachine        |                                                   |
+     sudo               |                                         []     [] |
+     sudoers            |                                         []     [] |
+     sysstat            |                                                [] |
+     tar                |                          []             []     [] |
+     texinfo            |                                         []     [] |
+     texinfo_document   |                                         []     [] |
+     tigervnc           |                          []                       |
+     tin                |                                                   |
+     tin-man            |                                                   |
+     tracgoogleappsa... |                                                   |
+     trader             |                                                   |
+     util-linux         |                                                [] |
+     ve                 |                                                   |
+     vice               |                                                   |
+     vmm                |                                                   |
+     vorbis-tools       |                                                [] |
+     wastesedge         |                                                   |
+     wcd                |                                                   |
+     wcd-man            |                                                   |
+     wdiff              |                                         []     [] |
+     wget               |                                                [] |
+     wyslij-po          |                                                   |
+     xboard             |                                                   |
+     xdg-user-dirs      | []    []    [] []     [] []     []      [] []  [] |
+     xkeyboard-config   |                          []             []     [] |
+                        +---------------------------------------------------+
+                          af am an ar as ast az be bg bn bn_IN bs ca crh cs
+                           4  0  2  5  3 11   0  8 25  3   3    1 55  4  74
+
+                          da  de  el en en_GB en_ZA eo es et eu fa fi  fr 
+                        +--------------------------------------------------+
+     a2ps               | []  []  []     []         [] [] []       []  []  |
+     aegis              | []  []                       []              []  |
+     anubis             | []  []                       []          []  []  |
+     aspell             | []  []         []         [] []          []  []  |
+     bash               |                           [] []              []  |
+     bfd                | []                           []          []  []  |
+     binutils           |                              []          []  []  |
+     bison              | []  []  []                [] [] []       []  []  |
+     bison-runtime      | []  []  []                [] [] []       []  []  |
+     buzztrax           | []  []                                   []  []  |
+     ccd2cue            | []  []                    []                 []  |
+     ccide              | []  []                    [] []          []  []  |
+     cflow              | []  []                    []             []  []  |
+     clisp              | []  []     []                []              []  |
+     coreutils          | []  []                       [] []           []  |
+     cpio               | []  []                       []          []  []  |
+     cppi               | []  []                    []             []  []  |
+     cpplib             | []  []                    [] []          []  []  |
+     cryptsetup         | []  []                       []          []  []  |
+     datamash           | []  []                    []                 []  |
+     denemo             | []                                               |
+     dfarc              | []  []                    [] []          []  []  |
+     dialog             | []  []  []                [] []    [] [] []  []  |
+     dico               | []  []                                   []  []  |
+     diffutils          | []  []  []                [] []              []  |
+     dink               | []  []                    [] []          []  []  |
+     direvent           | []  []                    []                 []  |
+     doodle             | []  []                    []             []      |
+     dos2unix           | []  []                    [] []              []  |
+     dos2unix-man       |     []                       []              []  |
+     e2fsprogs          | []  []                    [] []              []  |
+     enscript           | []  []         []         []             []  []  |
+     exif               | []  []                    [] []          []  []  |
+     fetchmail          | []  ()  []     []         [] []              []  |
+     findutils          | []  []  []                [] [] []       []  []  |
+     flex               | []  []                    [] []          []  []  |
+     freedink           | []  []  []                [] []    []    []  []  |
+     fusionforge        |     []                       []              []  |
+     gas                |                              []          []  []  |
+     gawk               | []  []                       []          []  []  |
+     gcal               | []  []                       []              []  |
+     gcc                |     []                                           |
+     gdbm               | []  []                    []             []  []  |
+     gettext-examples   | []  []  []                [] []          []  []  |
+     gettext-runtime    | []  []                    [] []          []  []  |
+     gettext-tools      | []  []                       []          []  []  |
+     gjay               |     []                    []             []  []  |
+     glunarclock        | []  []                    []             []  []  |
+     gnubiff            |     ()                    []             []  ()  |
+     gnubik             | []  []                    []             []  []  |
+     gnucash            | []  ()  ()     ()            ()          ()  ()  |
+     gnuchess           |     []                    [] []              []  |
+     gnulib             | []  []                    [] [] []       []  []  |
+     gnunet             |                              []                  |
+     gnunet-gtk         |     []                                           |
+     gold               |                              []          []  []  |
+     gphoto2            | []  ()                    []                 []  |
+     gprof              | []  []                    [] []          []  []  |
+     gramadoir          | []  []                    []             []  []  |
+     grep               | []  []                    [] [] []       []  []  |
+     grub               | []  []                       []          []  []  |
+     gsasl              | []  []                    []             []  []  |
+     gss                | []  []                    []             []  []  |
+     gst-plugins-bad    | []  []                                       []  |
+     gst-plugins-base   | []  []  []                   []          []  []  |
+     gst-plugins-good   | []  []  []                   []    []    []  []  |
+     gst-plugins-ugly   | []  []  []                [] []    []    []  []  |
+     gstreamer          | []  []  []                   []    []    []  []  |
+     gtick              | []  ()                    []             []  []  |
+     gtkam              | []  ()                    [] []          []  []  |
+     gtkspell           | []  []  []                [] []    []    []  []  |
+     guix               | []                        []                     |
+     guix-packages      |                                                  |
+     gutenprint         | []  []                                   []  []  |
+     hello              | []  []  []                [] [] []       []  []  |
+     help2man           | []  []  []                [] []          []  []  |
+     help2man-texi      |     []                       []              []  |
+     hylafax            |     []                       []                  |
+     idutils            | []  []                    []             []  []  |
+     iso_15924          | []  ()                    [] []    ()    []  ()  |
+     iso_3166           | []  ()  []                [] [] [] ()    []  ()  |
+     iso_3166_2         | []  ()                             ()        ()  |
+     iso_4217           | []  ()  []                   [] [] ()    []  ()  |
+     iso_639            | []  ()                    [] []    ()    []  ()  |
+     iso_639_3          |     ()                             ()        ()  |
+     iso_639_5          |     ()                             ()        ()  |
+     jwhois             |     []                    [] []          []  []  |
+     kbd                | []  []  []                [] []              []  |
+     klavaro            | []  []  []                [] []    []        []  |
+     ld                 | []                           []          []  []  |
+     leafpad            | []  []  []                [] []    []    []  []  |
+     libc               | []  []                       []          []  []  |
+     libexif            | []  []         ()            []              []  |
+     libextractor       |     []                                           |
+     libgnutls          |     []                    []             []  []  |
+     libgphoto2         | []  ()                                       []  |
+     libgphoto2_port    | []  ()                       []    []    []  []  |
+     libgsasl           | []  []                    []             []  []  |
+     libiconv           | []  []                    [] [] []       []  []  |
+     libidn             | []  []                    []             []  []  |
+     liferea            | []  ()  []                   []    []    []  []  |
+     lilypond           | []  []  []                [] []              []  |
+     lordsawar          | []  []                                           |
+     lprng              |                                                  |
+     lynx               | []  []                    []    []       []  []  |
+     m4                 | []  []  []                []             []  []  |
+     mailfromd          |                                              []  |
+     mailutils          |     []                       []          []  []  |
+     make               | []  []                       []          []  []  |
+     man-db             | []  []                    []                 []  |
+     man-db-manpages    |     []                                       []  |
+     midi-instruments   | []  []  []                [] [] []    [] []  []  |
+     minicom            | []  []                       []          []  []  |
+     mkisofs            |                           []             []  []  |
+     myserver           |     []                    []             []  []  |
+     nano               | []  []                    [] []    []    []  []  |
+     opcodes            | []  []                       []          []  []  |
+     parted             | []  []                                       []  |
+     pies               |     []                                           |
+     pnmixer            |     []                                       []  |
+     popt               | []  []                    [] []          []  []  |
+     procps-ng          |     []                                       []  |
+     procps-ng-man      |     []                                       []  |
+     psmisc             | []  []  []                []       []    []  []  |
+     pspp               |     []                       []              []  |
+     pushover           |     ()                    [] []              []  |
+     pwdutils           | []  []                                       []  |
+     pyspread           | []  []                                       []  |
+     radius             |                              []              []  |
+     recode             | []  []  []                [] []          []  []  |
+     recutils           |     []                       []          []  []  |
+     rpm                | []  []                    []             []  []  |
+     rush               |     []                                   []  []  |
+     sarg               | []                                           []  |
+     sed                | []  []  []                [] [] []       []  []  |
+     sharutils          |     []                    []    []           []  |
+     shishi             |     []                                   []  []  |
+     skribilo           | []                           []              []  |
+     solfege            | []  []                    [] [] []    [] []  []  |
+     solfege-manual     |     []                    [] [] []           []  |
+     spotmachine        | []  []                    []             []  []  |
+     sudo               | []  []                    [] []          []  []  |
+     sudoers            | []  []  []                []             []  []  |
+     sysstat            | []  []                    [] []          []  []  |
+     tar                | []  []                    [] [] []       []  []  |
+     texinfo            | []  []                    [] []              []  |
+     texinfo_document   |     []                    [] []              []  |
+     tigervnc           | []  []  []                []             []  []  |
+     tin                | []  []                          []           []  |
+     tin-man            |                []                                |
+     tracgoogleappsa... | []  []                    []             []  []  |
+     trader             | []  []         []         []             []  []  |
+     util-linux         | []  []                       []              []  |
+     ve                 |     []                    [] []          []  []  |
+     vice               | ()  ()                                       ()  |
+     vmm                |     []                                   []      |
+     vorbis-tools       | []  []                    []                 []  |
+     wastesedge         | []                                               |
+     wcd                |     []                    [] []          []      |
+     wcd-man            |     []                                           |
+     wdiff              | []  []                    [] [] []       []  []  |
+     wget               |     []                    [] [] []       []  []  |
+     wyslij-po          |     []                    []             []  []  |
+     xboard             | []  []                       []              []  |
+     xdg-user-dirs      | []  []  []                [] [] [] [] [] []  []  |
+     xkeyboard-config   | []  []  []                [] []          []  []  |
+                        +--------------------------------------------------+
+                          da  de  el en en_GB en_ZA eo es et eu fa fi  fr 
+                          119 131 32  1   6     0   94 95 22 13  4 102 139
+
+                          ga gd gl gu he hi hr hu hy ia id is it ja ka kk
+                        +-------------------------------------------------+
+     a2ps               |                   []          []    [] []       |
+     aegis              |                                     []          |
+     anubis             |                   [] []       []    []          |
+     aspell             | []                []          []    [] []       |
+     bash               |                      []       []    [] []       |
+     bfd                |                               []       []       |
+     binutils           |                               []    [] []       |
+     bison              |                   []                            |
+     bison-runtime      | []    []          [] []    [] []    [] []       |
+     buzztrax           |                                                 |
+     ccd2cue            |                      []                         |
+     ccide              |                   [] []                         |
+     cflow              | []                []          []                |
+     clisp              |                                                 |
+     coreutils          |                      []                []       |
+     cpio               | []                [] []       []    [] []       |
+     cppi               |       []          [] []             [] []       |
+     cpplib             |                               []       []       |
+     cryptsetup         |                                     []          |
+     datamash           |                                                 |
+     denemo             |                                     []          |
+     dfarc              |                   [] []             []          |
+     dialog             | [] [] []          [] []    [] [] [] [] []       |
+     dico               |                                                 |
+     diffutils          |                      []       []    [] []       |
+     dink               |                      []                         |
+     direvent           |                      []                         |
+     doodle             | []                                  []          |
+     dos2unix           |                      []                []       |
+     dos2unix-man       |                                                 |
+     e2fsprogs          |                      []       []                |
+     enscript           | []                []          []                |
+     exif               |       []          []          [] [] [] []       |
+     fetchmail          |                               []    [] []       |
+     findutils          | []    []          [] []       []    [] []       |
+     flex               | []                                              |
+     freedink           |                   [] []       []    []          |
+     fusionforge        |                                                 |
+     gas                |                               []                |
+     gawk               |                               []    () []       |
+     gcal               |                                                 |
+     gcc                |                                                 |
+     gdbm               |                                                 |
+     gettext-examples   | []    []          [] []       []    [] []       |
+     gettext-runtime    | []    []          [] []       []    [] []       |
+     gettext-tools      |                               []    [] []       |
+     gjay               |       []                                        |
+     glunarclock        | []    []          [] []       []    []          |
+     gnubiff            |                      []       []    ()          |
+     gnubik             |       []          []                []          |
+     gnucash            |          () () ()    ()             ()          |
+     gnuchess           |                                                 |
+     gnulib             | []    []             []             [] []       |
+     gnunet             |                                                 |
+     gnunet-gtk         |                                                 |
+     gold               |                               []    []          |
+     gphoto2            |                      []       []    [] []       |
+     gprof              | []                   []       []    []          |
+     gramadoir          | []                   []       []                |
+     grep               | []    []          [] []       []    [] []       |
+     grub               |       []             []             []          |
+     gsasl              | []                [] []       []    []          |
+     gss                | []                [] []       []    []          |
+     gst-plugins-bad    |                   [] []       []                |
+     gst-plugins-base   |       []          [] []       []                |
+     gst-plugins-good   |       []          [] []       []    [] []       |
+     gst-plugins-ugly   |       []          [] []       []    [] []       |
+     gstreamer          |       []          [] []       []    []          |
+     gtick              | []    []             []       []    []          |
+     gtkam              |                      []       [] [] [] []       |
+     gtkspell           | []    []    []    [] [] []    [] [] [] []       |
+     guix               |                                                 |
+     guix-packages      |                                                 |
+     gutenprint         |       []             []             []          |
+     hello              | []    []          [] []       []                |
+     help2man           |                   []                [] []       |
+     help2man-texi      |                                                 |
+     hylafax            |                               []                |
+     idutils            |                      []       []                |
+     iso_15924          |       []             []    [] [] [] []          |
+     iso_3166           | []    [] [] [] [] [] []    [] [] [] [] []    [] |
+     iso_3166_2         |                               []    []          |
+     iso_4217           |                   [] []       [] [] [] []       |
+     iso_639            | []    [] []       [] []       [] [] [] []       |
+     iso_639_3          |       []                            []          |
+     iso_639_5          |                                                 |
+     jwhois             |       []             []       []    []          |
+     kbd                |                      []       []    []          |
+     klavaro            |       []          [] []             []       [] |
+     ld                 | []                            []    [] []       |
+     leafpad            | []    []    []    [] []       []    [] ()       |
+     libc               |       []          []          []    [] []       |
+     libexif            |                                     []          |
+     libextractor       |                                                 |
+     libgnutls          |                                     []          |
+     libgphoto2         |                                     [] []       |
+     libgphoto2_port    |                                     [] []       |
+     libgsasl           | []                   []       []    []          |
+     libiconv           | []    []          [] []       []    [] []       |
+     libidn             |                   [] []       []    []          |
+     liferea            |       []    []       []             [] []       |
+     lilypond           |                                     []          |
+     lordsawar          |                                                 |
+     lprng              |                               []                |
+     lynx               |                      []       []    [] []       |
+     m4                 | []    []          []          []       []       |
+     mailfromd          |                                                 |
+     mailutils          |                                                 |
+     make               |                   []          []    [] []       |
+     man-db             |                               []       []       |
+     man-db-manpages    |                               []       []       |
+     midi-instruments   |       []    []    [] [] []    [] [] [] []       |
+     minicom            |                      []       []       []       |
+     mkisofs            |                               []    []          |
+     myserver           |                                     []          |
+     nano               | []    []          [] []             [] []       |
+     opcodes            | []                            []    []          |
+     parted             |       []             []       []    [] []       |
+     pies               |                                                 |
+     pnmixer            |                   []                []          |
+     popt               | []    [] []       [] []    [] [] [] [] []       |
+     procps-ng          |                                                 |
+     procps-ng-man      |                                                 |
+     psmisc             |                   [] []       []    []          |
+     pspp               |       []                               []       |
+     pushover           |                                     []          |
+     pwdutils           |                               []                |
+     pyspread           |                                                 |
+     radius             |                               []                |
+     recode             | []    []    []    [] []       []    []          |
+     recutils           |                                                 |
+     rpm                |                               []                |
+     rush               |       []                                        |
+     sarg               |                                                 |
+     sed                | []    []          [] []       []    [] []       |
+     sharutils          |                                                 |
+     shishi             |                                                 |
+     skribilo           |                      []                         |
+     solfege            |       []                            []          |
+     solfege-manual     |                                                 |
+     spotmachine        |                                                 |
+     sudo               |       []          []                [] []       |
+     sudoers            |                   []                [] []       |
+     sysstat            |                   [] []       []       []       |
+     tar                | []                [] []       []    [] []       |
+     texinfo            |                   []          []    []          |
+     texinfo_document   |                   [] []             []          |
+     tigervnc           |                                                 |
+     tin                |                                                 |
+     tin-man            |                                                 |
+     tracgoogleappsa... |       []    []    [] []                         |
+     trader             |                   [] []                         |
+     util-linux         |                                        []       |
+     ve                 |                                     []          |
+     vice               |                      ()             ()          |
+     vmm                |                                                 |
+     vorbis-tools       |                   []          []                |
+     wastesedge         |                                     []          |
+     wcd                |                                                 |
+     wcd-man            |                                                 |
+     wdiff              |       []             []             []          |
+     wget               |                   [] []             [] []       |
+     wyslij-po          |       []          []          []                |
+     xboard             |                                                 |
+     xdg-user-dirs      | [] [] [] [] [] [] [] []    [] [] [] [] []    [] |
+     xkeyboard-config   |       []          [] []       []    [] []       |
+                        +-------------------------------------------------+
+                          ga gd gl gu he hi hr hu hy ia id is it ja ka kk
+                          35  2 47  4  8  2 60 71  2  6 81 11 87 57  0  3
+
+                          kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl 
+                        +--------------------------------------------------+
+     a2ps               |                                  []          []  |
+     aegis              |                                              []  |
+     anubis             |                                  []    []    []  |
+     aspell             |                            []                []  |
+     bash               |                                        []    []  |
+     bfd                |                                                  |
+     binutils           |                                                  |
+     bison              |                                              []  |
+     bison-runtime      |          []    [] []             []    []    []  |
+     buzztrax           |                                                  |
+     ccd2cue            |                                                  |
+     ccide              |                   []                         []  |
+     cflow              |                                              []  |
+     clisp              |                                              []  |
+     coreutils          |                                        []    []  |
+     cpio               |                                              []  |
+     cppi               |                                                  |
+     cpplib             |                                              []  |
+     cryptsetup         |                                              []  |
+     datamash           |                                        []    []  |
+     denemo             |                                                  |
+     dfarc              |                      []                      []  |
+     dialog             |       []       [] []             []    []    []  |
+     dico               |                                                  |
+     diffutils          |                   []                   []    []  |
+     dink               |                                              []  |
+     direvent           |                                              []  |
+     doodle             |                                              []  |
+     dos2unix           |                                        []    []  |
+     dos2unix-man       |                                              []  |
+     e2fsprogs          |                                              []  |
+     enscript           |                                              []  |
+     exif               |    []             []                         []  |
+     fetchmail          |                                              []  |
+     findutils          |                                        []    []  |
+     flex               |                                              []  |
+     freedink           |                                        []    []  |
+     fusionforge        |                                                  |
+     gas                |                                                  |
+     gawk               |                                              []  |
+     gcal               |                                                  |
+     gcc                |                                                  |
+     gdbm               |                                                  |
+     gettext-examples   |          []       []             [] [] []    []  |
+     gettext-runtime    |    []                                  []    []  |
+     gettext-tools      |    []                                            |
+     gjay               |                                                  |
+     glunarclock        |                   []                         []  |
+     gnubiff            |                                              []  |
+     gnubik             |                                        []    []  |
+     gnucash            | () ()          () ()          ()       () () []  |
+     gnuchess           |                                        []    []  |
+     gnulib             |                                              []  |
+     gnunet             |                                                  |
+     gnunet-gtk         |                                                  |
+     gold               |                                                  |
+     gphoto2            |                                              []  |
+     gprof              |                                  []          []  |
+     gramadoir          |                                              []  |
+     grep               |                                        []    []  |
+     grub               |                []                      []    []  |
+     gsasl              |                                              []  |
+     gss                |                                                  |
+     gst-plugins-bad    |                   []                   []    []  |
+     gst-plugins-base   |                   []                   []    []  |
+     gst-plugins-good   |                [] []                   []    []  |
+     gst-plugins-ugly   |                   []             [] [] []    []  |
+     gstreamer          |                []                      []    []  |
+     gtick              |                                              []  |
+     gtkam              |                                        []    []  |
+     gtkspell           |          []    [] []       []    []    []    []  |
+     guix               |                                                  |
+     guix-packages      |                                                  |
+     gutenprint         |                                              []  |
+     hello              |                   []                   []    []  |
+     help2man           |                                        []        |
+     help2man-texi      |                                                  |
+     hylafax            |                                              []  |
+     idutils            |                                              []  |
+     iso_15924          |                () []                         []  |
+     iso_3166           | [] [] []       () [] [] []    []       []    []  |
+     iso_3166_2         |                ()                            []  |
+     iso_4217           |                () []                   []    []  |
+     iso_639            | [] []          () []    []    []             []  |
+     iso_639_3          | []             ()             []                 |
+     iso_639_5          |                ()                                |
+     jwhois             |                   []                         []  |
+     kbd                |                                              []  |
+     klavaro            |                                        []    []  |
+     ld                 |                                                  |
+     leafpad            |    []    []    [] []                         []  |
+     libc               |    []                                        []  |
+     libexif            |                                              []  |
+     libextractor       |                                              []  |
+     libgnutls          |                                  []          []  |
+     libgphoto2         |                                              []  |
+     libgphoto2_port    |                                              []  |
+     libgsasl           |                                              []  |
+     libiconv           |                []                            []  |
+     libidn             |                                              []  |
+     liferea            |                [] []                         []  |
+     lilypond           |                                              []  |
+     lordsawar          |                                                  |
+     lprng              |                                                  |
+     lynx               |                                              []  |
+     m4                 |                                              []  |
+     mailfromd          |                                                  |
+     mailutils          |                                                  |
+     make               |    []                                        []  |
+     man-db             |                                              []  |
+     man-db-manpages    |                                              []  |
+     midi-instruments   |    [] []       []          []    []       [] []  |
+     minicom            |                                        []        |
+     mkisofs            |                                              []  |
+     myserver           |                                                  |
+     nano               |                                  []    []    []  |
+     opcodes            |                                              []  |
+     parted             |    []                                        []  |
+     pies               |                                                  |
+     pnmixer            |                                              []  |
+     popt               | [] []             []                   []    []  |
+     procps-ng          |                                                  |
+     procps-ng-man      |                                                  |
+     psmisc             |                                              []  |
+     pspp               |                []                            []  |
+     pushover           |                                                  |
+     pwdutils           |                                              []  |
+     pyspread           |                                                  |
+     radius             |                                              []  |
+     recode             |                                        []    []  |
+     recutils           |                                              []  |
+     rpm                |                                              []  |
+     rush               |                                              []  |
+     sarg               |                                                  |
+     sed                |                                        []    []  |
+     sharutils          |                                              []  |
+     shishi             |                                                  |
+     skribilo           |                                                  |
+     solfege            |                                        []    []  |
+     solfege-manual     |                                              []  |
+     spotmachine        |                                              []  |
+     sudo               |    []                                  []    []  |
+     sudoers            |    []                                  []    []  |
+     sysstat            |                                        []    []  |
+     tar                |          []                            []    []  |
+     texinfo            |                                              []  |
+     texinfo_document   |                                              []  |
+     tigervnc           |                                              []  |
+     tin                |                                                  |
+     tin-man            |                                                  |
+     tracgoogleappsa... |                   []                   []    []  |
+     trader             |                                        []        |
+     util-linux         |                                              []  |
+     ve                 |                                              []  |
+     vice               |                                              []  |
+     vmm                |                                              []  |
+     vorbis-tools       |                                              []  |
+     wastesedge         |                                              []  |
+     wcd                |                                              []  |
+     wcd-man            |                                              []  |
+     wdiff              |                                              []  |
+     wget               |                                        []    []  |
+     wyslij-po          |                                              []  |
+     xboard             |                                              []  |
+     xdg-user-dirs      | [] [] [] []    [] [] [] []    []       []    []  |
+     xkeyboard-config   |    []          []                            []  |
+                        +--------------------------------------------------+
+                          kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl 
+                           5 15  4  6  0 13 23  3  3  3  4 11  2 42  1 125
+
+                          nn or pa pl  ps pt pt_BR ro ru rw sk sl sq sr 
+                        +------------------------------------------------+
+     a2ps               |          []     []  []   [] []       []    []  |
+     aegis              |                     []      []                 |
+     anubis             |          []                 []             []  |
+     aspell             |          []         []   [] []    [] []    []  |
+     bash               |          []         []      []    [] []    []  |
+     bfd                |                             []             []  |
+     binutils           |                             []             []  |
+     bison              |          []         []                     []  |
+     bison-runtime      |          []     []  []   [] []       [] [] []  |
+     buzztrax           |                     []                         |
+     ccd2cue            |                     []                     []  |
+     ccide              |          []                 []             []  |
+     cflow              |          []         []                     []  |
+     clisp              |                             []                 |
+     coreutils          |          []                 []       []    []  |
+     cpio               |          []                 []             []  |
+     cppi               |          []         []                     []  |
+     cpplib             |                     []      []             []  |
+     cryptsetup         |          []         []                     []  |
+     datamash           |                     []                     []  |
+     denemo             |                                                |
+     dfarc              |          []         []                     []  |
+     dialog             |          []         []   [] []    [] []    []  |
+     dico               |          []                                    |
+     diffutils          |          []         []                     []  |
+     dink               |                                                |
+     direvent           |          []         []                     []  |
+     doodle             |                                         [] []  |
+     dos2unix           |          []         []      []             []  |
+     dos2unix-man       |          []         []                         |
+     e2fsprogs          |          []                                    |
+     enscript           |          []         []   [] []       []    []  |
+     exif               |          []         []   [] []    []       []  |
+     fetchmail          |          []                 []          []     |
+     findutils          |          []         []      []    [] []    []  |
+     flex               |          []         []   [] []             []  |
+     freedink           |          []         []      []       []    []  |
+     fusionforge        |                                                |
+     gas                |                                                |
+     gawk               |          []                                    |
+     gcal               |                                                |
+     gcc                |                                                |
+     gdbm               |          []         []                     []  |
+     gettext-examples   |          []     []  []   [] []    [] []    []  |
+     gettext-runtime    | []       []     []  []   [] []    [] []    []  |
+     gettext-tools      |          []         []   [] []    [] []    []  |
+     gjay               |                                            []  |
+     glunarclock        |          []         []   []       [] []    []  |
+     gnubiff            |                                            []  |
+     gnubik             |          []         []               []    []  |
+     gnucash            |          ()     ()  ()   () ()             []  |
+     gnuchess           |                     []                     []  |
+     gnulib             |          []         []      []       []    []  |
+     gnunet             |                                                |
+     gnunet-gtk         |                                                |
+     gold               |                                                |
+     gphoto2            |          []         []   [] []             []  |
+     gprof              |                     []   [] []             []  |
+     gramadoir          |                                   []       []  |
+     grep               |          []         []      []    [] []    []  |
+     grub               |          []         []      []       []    []  |
+     gsasl              |          []                       []       []  |
+     gss                |          []              []       []       []  |
+     gst-plugins-bad    |          []         []      []    []       []  |
+     gst-plugins-base   |          []         []      []    [] []    []  |
+     gst-plugins-good   |          []         []   [] []    [] []    []  |
+     gst-plugins-ugly   |          []         []   [] []    [] []    []  |
+     gstreamer          |          []         []   [] []    [] []    []  |
+     gtick              |          []         []      []    []       []  |
+     gtkam              |       [] []         []      []    []       []  |
+     gtkspell           |          []     []  []   [] []    [] [] [] []  |
+     guix               |                                                |
+     guix-packages      |                                                |
+     gutenprint         |                                   [] []        |
+     hello              |          []         []      []    [] []    []  |
+     help2man           |          []         []      []             []  |
+     help2man-texi      |          []                                    |
+     hylafax            |                                                |
+     idutils            |          []                 []             []  |
+     iso_15924          |          []     ()       [] []       []    []  |
+     iso_3166           | [] [] [] []     ()  []   [] [] [] [] [] [] []  |
+     iso_3166_2         |          []     ()                         []  |
+     iso_4217           | []       []     ()       [] [] []    []    []  |
+     iso_639            |    [] [] []     ()       [] [] [] [] []    []  |
+     iso_639_3          |       []        ()                             |
+     iso_639_5          |                 ()                         []  |
+     jwhois             |          []         []   []                []  |
+     kbd                |          []                 []                 |
+     klavaro            |       [] []         []      []       []        |
+     ld                 |                                                |
+     leafpad            | []       []     []  []      []    [] []    []  |
+     libc               |          []                 []    []           |
+     libexif            |          []         ()            []           |
+     libextractor       |          []                                    |
+     libgnutls          |          []                                    |
+     libgphoto2         |          []                                    |
+     libgphoto2_port    |          []         []      []    []       []  |
+     libgsasl           |          []              []       []       []  |
+     libiconv           |          []         []            [] []    []  |
+     libidn             |          []         []                     []  |
+     liferea            |          []     []  []   [] ()    []    []     |
+     lilypond           |                                                |
+     lordsawar          |                                                |
+     lprng              |          []                                    |
+     lynx               |                     []      []                 |
+     m4                 |          []         []   [] []             []  |
+     mailfromd          |          []                                    |
+     mailutils          |          []                                    |
+     make               |          []         []      []                 |
+     man-db             |          []                 []             []  |
+     man-db-manpages    |          []                 []             []  |
+     midi-instruments   |          []     []  []   [] []    [] []    []  |
+     minicom            |          []         []   [] []                 |
+     mkisofs            |          []                 []             []  |
+     myserver           |                                      []    []  |
+     nano               |          []         []   [] []       []    []  |
+     opcodes            |                                                |
+     parted             |          []         []      []    [] []    []  |
+     pies               |          []                                    |
+     pnmixer            |                             []                 |
+     popt               |          []     []  []      []       []    []  |
+     procps-ng          |          []                                    |
+     procps-ng-man      |          []                                    |
+     psmisc             |          []         []      []             []  |
+     pspp               |          []                 []                 |
+     pushover           |                                                |
+     pwdutils           |          []                                    |
+     pyspread           | []                  []                         |
+     radius             |          []                 []                 |
+     recode             |          []     []  []   [] []    [] []    []  |
+     recutils           |                     []                     []  |
+     rpm                |          []                                    |
+     rush               |          []         []                     []  |
+     sarg               |                     []      []                 |
+     sed                |          []     []  []   [] []    [] []    []  |
+     sharutils          |          []         []                     []  |
+     shishi             |          []                                []  |
+     skribilo           |                                            []  |
+     solfege            |          []         []      []                 |
+     solfege-manual     |          []         []                         |
+     spotmachine        |                     []                     []  |
+     sudo               |          []         []      []    [] []    []  |
+     sudoers            |          []         []               []    []  |
+     sysstat            |          []         []      []    []       []  |
+     tar                |          []         []      []       []    []  |
+     texinfo            |          []         []      []                 |
+     texinfo_document   |          []         []                         |
+     tigervnc           |                     []      []             []  |
+     tin                |                             []                 |
+     tin-man            |                                                |
+     tracgoogleappsa... |          []         []      []             []  |
+     trader             |                             []             []  |
+     util-linux         |          []         []                         |
+     ve                 |          []         []                     []  |
+     vice               |                                                |
+     vmm                |                                                |
+     vorbis-tools       |          []                          []    []  |
+     wastesedge         |                                                |
+     wcd                |                                                |
+     wcd-man            |                                                |
+     wdiff              |          []         []      []       []    []  |
+     wget               |          []         []      []    []       []  |
+     wyslij-po          | []       []         []                     []  |
+     xboard             |          []                 []             []  |
+     xdg-user-dirs      | [] [] [] []  [] []  []   [] []    [] [] [] []  |
+     xkeyboard-config   |          []         []      []       []        |
+                        +------------------------------------------------+
+                          nn or pa pl  ps pt pt_BR ro ru rw sk sl sq sr 
+                           7  3  6 114  1 12  88   32 82  3 40 45  7 101
+
+                          sv  sw ta te tg th tr uk  ur vi  wa wo zh_CN
+                        +----------------------------------------------+
+     a2ps               | []              [] [] []     []              |
+     aegis              |                              []              |
+     anubis             | []                 [] []     []              |
+     aspell             | []                    []     []  []     []   |
+     bash               | []                    []     []         []   |
+     bfd                | []                    []     []              |
+     binutils           | []                    []     []              |
+     bison              | []                    []     []         []   |
+     bison-runtime      | []              [] [] []     []         []   |
+     buzztrax           | []                           []         []   |
+     ccd2cue            |                       []     []         []   |
+     ccide              | []                    []     []         []   |
+     cflow              | []                    []     []         []   |
+     clisp              |                                              |
+     coreutils          | []                    []     []              |
+     cpio               | []                 [] []     []         []   |
+     cppi               | []                    []     []         []   |
+     cpplib             | []                 [] []     []         []   |
+     cryptsetup         |                       []     []         []   |
+     datamash           | []                    []     []              |
+     denemo             |                                         []   |
+     dfarc              | []                           []              |
+     dialog             | []  []          []           []  []     []   |
+     dico               |                       []                     |
+     diffutils          | []                 [] []     []         []   |
+     dink               | []                                           |
+     direvent           |                       []     []              |
+     doodle             | []                           []              |
+     dos2unix           | []                    []     []         []   |
+     dos2unix-man       | []                    []                []   |
+     e2fsprogs          | []                    []     []         []   |
+     enscript           | []                 [] []     []              |
+     exif               | []                 [] []     []         []   |
+     fetchmail          | []                 []        []         []   |
+     findutils          | []                 [] []     []         []   |
+     flex               | []                 []        []         []   |
+     freedink           | []              []           []              |
+     fusionforge        |                                              |
+     gas                |                       []                     |
+     gawk               | []                           []         []   |
+     gcal               | []                 []                   []   |
+     gcc                | []                                           |
+     gdbm               |                       []     []              |
+     gettext-examples   | []                 [] []     []         []   |
+     gettext-runtime    | []                 [] []     []         []   |
+     gettext-tools      | []                 [] []     []         []   |
+     gjay               |                 []           []         []   |
+     glunarclock        | []                           []  []     []   |
+     gnubiff            | []                           []              |
+     gnubik             | []                    []     []         []   |
+     gnucash            |        () ()              () ()         []   |
+     gnuchess           |                       []     []         []   |
+     gnulib             | []                    []     []         []   |
+     gnunet             |                                              |
+     gnunet-gtk         |                                              |
+     gold               |                       []     []              |
+     gphoto2            | []                    []     []         []   |
+     gprof              | []                 [] []     []              |
+     gramadoir          | []                           []         []   |
+     grep               | []              []    []     []         []   |
+     grub               | []                 [] []     []              |
+     gsasl              | []                    []     []         []   |
+     gss                | []                           []         []   |
+     gst-plugins-bad    | []                 [] []     []         []   |
+     gst-plugins-base   | []                 [] []     []         []   |
+     gst-plugins-good   | []                 [] []     []         []   |
+     gst-plugins-ugly   | []                 [] []     []         []   |
+     gstreamer          | []                 [] []     []         []   |
+     gtick              |                       []     []         []   |
+     gtkam              | []                    []     []         []   |
+     gtkspell           | []              [] [] []     []  []     []   |
+     guix               |                                              |
+     guix-packages      |                                              |
+     gutenprint         |                    [] []     []         []   |
+     hello              | []              [] [] []     []         []   |
+     help2man           |                       []     []         []   |
+     help2man-texi      |                       []                     |
+     hylafax            |                              []              |
+     idutils            |                       []     []         []   |
+     iso_15924          | []              () [] []     ()         []   |
+     iso_3166           | []        []    () [] []     ()  []     []   |
+     iso_3166_2         |                 () [] []     ()         []   |
+     iso_4217           | []              () [] []     ()         []   |
+     iso_639            | []     [] []    () [] []     ()  []     []   |
+     iso_639_3          |        []       () [] []     ()              |
+     iso_639_5          |                 ()    []     ()              |
+     jwhois             | []                 []        []         []   |
+     kbd                | []                    []     []         []   |
+     klavaro            | []                    []  [] []     []  []   |
+     ld                 | []                 [] []     []         []   |
+     leafpad            | []              [] [] []     []         []   |
+     libc               | []                 [] []     []         []   |
+     libexif            | []                           []         ()   |
+     libextractor       |                       []     []              |
+     libgnutls          | []                    []     []         []   |
+     libgphoto2         | []                    []     []              |
+     libgphoto2_port    | []                    []     []         []   |
+     libgsasl           | []                    []     []         []   |
+     libiconv           | []                    []     []  []     []   |
+     libidn             | ()                    []     []         []   |
+     liferea            | []                 [] []     []         []   |
+     lilypond           |                              []              |
+     lordsawar          |                                              |
+     lprng              |                              []              |
+     lynx               | []                 [] []     []              |
+     m4                 | []                           []         []   |
+     mailfromd          |                       []     []              |
+     mailutils          |                              []              |
+     make               | []                    []     []         []   |
+     man-db             | []                           []         []   |
+     man-db-manpages    | []                                      []   |
+     midi-instruments   | []              [] [] []     []         []   |
+     minicom            | []                           []              |
+     mkisofs            |                       []     []         []   |
+     myserver           |                              []              |
+     nano               | []                    []     []         []   |
+     opcodes            |                       []     []         []   |
+     parted             | []                 [] []     []         []   |
+     pies               |                       []     []              |
+     pnmixer            |                       []     []         []   |
+     popt               | []     []       [] [] []     []         []   |
+     procps-ng          |                       []     []              |
+     procps-ng-man      |                       []                     |
+     psmisc             | []                    []     []         []   |
+     pspp               |                    [] []                []   |
+     pushover           | []                                           |
+     pwdutils           | []                           []              |
+     pyspread           |                       []                     |
+     radius             |                       []     []              |
+     recode             | []                 []        []         []   |
+     recutils           | []                    []     []              |
+     rpm                | []                    []     []         []   |
+     rush               |                       []     []              |
+     sarg               |                                              |
+     sed                | []                 [] []     []         []   |
+     sharutils          | []                    []     []         []   |
+     shishi             |                              []         []   |
+     skribilo           | []                    []                     |
+     solfege            | []                 []        []         []   |
+     solfege-manual     |                    []                        |
+     spotmachine        | []                    []     []              |
+     sudo               | []                 [] []     []         []   |
+     sudoers            | []                    []     []         []   |
+     sysstat            | []                 [] []     []         []   |
+     tar                | []                 [] []     []         []   |
+     texinfo            |                    [] []     []              |
+     texinfo_document   |                       []                     |
+     tigervnc           | []                    []                []   |
+     tin                |                                         []   |
+     tin-man            |                                              |
+     tracgoogleappsa... | []              []    []     []         []   |
+     trader             | []                                           |
+     util-linux         | []                    []     []         []   |
+     ve                 | []                    []     []         []   |
+     vice               | ()                 ()                        |
+     vmm                |                                              |
+     vorbis-tools       | []                           []              |
+     wastesedge         |                                              |
+     wcd                |                       []     []         []   |
+     wcd-man            |                       []                     |
+     wdiff              | []                    []     []         []   |
+     wget               |                       []     []         []   |
+     wyslij-po          |                       []     []              |
+     xboard             |                       []                []   |
+     xdg-user-dirs      | []     [] []    [] [] []     []         []   |
+     xkeyboard-config   | []                 [] []     []              |
+                        +----------------------------------------------+
+                          sv  sw ta te tg th tr uk  ur vi  wa wo zh_CN
+                          106  1  4  3  0 13 51 115  1 125  7  1  100 
+
+                          zh_HK zh_TW
+                        +-------------+
+     a2ps               |             | 30
+     aegis              |             |  9
+     anubis             |             | 19
+     aspell             |             | 29
+     bash               |        []   | 23
+     bfd                |             | 11
+     binutils           |             | 12
+     bison              |        []   | 18
+     bison-runtime      |        []   | 38
+     buzztrax           |             |  9
+     ccd2cue            |             | 10
+     ccide              |             | 17
+     cflow              |             | 16
+     clisp              |             | 10
+     coreutils          |             | 18
+     cpio               |             | 20
+     cppi               |             | 17
+     cpplib             |        []   | 19
+     cryptsetup         |             | 14
+     datamash           |             | 11
+     denemo             |             |  5
+     dfarc              |             | 17
+     dialog             |        []   | 42
+     dico               |             |  6
+     diffutils          |             | 22
+     dink               |             | 10
+     direvent           |             | 11
+     doodle             |             | 12
+     dos2unix           |        []   | 18
+     dos2unix-man       |             |  9
+     e2fsprogs          |             | 15
+     enscript           |             | 21
+     exif               |             | 27
+     fetchmail          |             | 19
+     findutils          |             | 29
+     flex               |        []   | 19
+     freedink           |             | 24
+     fusionforge        |             |  3
+     gas                |             |  5
+     gawk               |             | 13
+     gcal               |             |  8
+     gcc                |             |  2
+     gdbm               |             | 10
+     gettext-examples   |  []    []   | 40
+     gettext-runtime    |  []    []   | 35
+     gettext-tools      |        []   | 24
+     gjay               |             |  9
+     glunarclock        |        []   | 27
+     gnubiff            |             |  9
+     gnubik             |             | 19
+     gnucash            |        ()   |  6
+     gnuchess           |             | 11
+     gnulib             |             | 23
+     gnunet             |             |  1
+     gnunet-gtk         |             |  1
+     gold               |             |  7
+     gphoto2            |        []   | 19
+     gprof              |             | 21
+     gramadoir          |             | 14
+     grep               |        []   | 31
+     grub               |             | 21
+     gsasl              |        []   | 19
+     gss                |             | 17
+     gst-plugins-bad    |             | 21
+     gst-plugins-base   |             | 27
+     gst-plugins-good   |             | 32
+     gst-plugins-ugly   |             | 34
+     gstreamer          |        []   | 32
+     gtick              |             | 19
+     gtkam              |             | 24
+     gtkspell           |  []    []   | 48
+     guix               |             |  2
+     guix-packages      |             |  0
+     gutenprint         |             | 15
+     hello              |        []   | 30
+     help2man           |             | 18
+     help2man-texi      |             |  5
+     hylafax            |             |  5
+     idutils            |             | 14
+     iso_15924          |        []   | 23
+     iso_3166           |  []    []   | 58
+     iso_3166_2         |             |  9
+     iso_4217           |  []    []   | 28
+     iso_639            |  []    []   | 46
+     iso_639_3          |             | 10
+     iso_639_5          |             |  2
+     jwhois             |        []   | 20
+     kbd                |             | 17
+     klavaro            |             | 30
+     ld                 |        []   | 15
+     leafpad            |        []   | 39
+     libc               |        []   | 24
+     libexif            |             | 10
+     libextractor       |             |  5
+     libgnutls          |             | 13
+     libgphoto2         |             | 10
+     libgphoto2_port    |        []   | 19
+     libgsasl           |             | 18
+     libiconv           |        []   | 29
+     libidn             |             | 17
+     liferea            |             | 29
+     lilypond           |             | 11
+     lordsawar          |             |  3
+     lprng              |             |  3
+     lynx               |             | 19
+     m4                 |        []   | 22
+     mailfromd          |             |  4
+     mailutils          |             |  6
+     make               |             | 19
+     man-db             |             | 15
+     man-db-manpages    |             | 10
+     midi-instruments   |        []   | 43
+     minicom            |        []   | 17
+     mkisofs            |             | 13
+     myserver           |             |  9
+     nano               |        []   | 30
+     opcodes            |             | 12
+     parted             |        []   | 23
+     pies               |             |  4
+     pnmixer            |             |  9
+     popt               |        []   | 36
+     procps-ng          |             |  5
+     procps-ng-man      |             |  4
+     psmisc             |        []   | 22
+     pspp               |             | 13
+     pushover           |             |  6
+     pwdutils           |             |  8
+     pyspread           |             |  6
+     radius             |             |  9
+     recode             |             | 31
+     recutils           |             | 10
+     rpm                |        []   | 13
+     rush               |             | 10
+     sarg               |             |  4
+     sed                |        []   | 35
+     sharutils          |             | 13
+     shishi             |             |  7
+     skribilo           |             |  7
+     solfege            |             | 21
+     solfege-manual     |             |  9
+     spotmachine        |             | 11
+     sudo               |             | 26
+     sudoers            |             | 22
+     sysstat            |             | 23
+     tar                |        []   | 30
+     texinfo            |             | 17
+     texinfo_document   |             | 13
+     tigervnc           |             | 14
+     tin                |        []   |  7
+     tin-man            |             |  1
+     tracgoogleappsa... |        []   | 22
+     trader             |             | 12
+     util-linux         |             | 13
+     ve                 |             | 14
+     vice               |             |  1
+     vmm                |             |  3
+     vorbis-tools       |             | 13
+     wastesedge         |             |  3
+     wcd                |             |  8
+     wcd-man            |             |  3
+     wdiff              |        []   | 23
+     wget               |             | 21
+     wyslij-po          |             | 14
+     xboard             |             | 10
+     xdg-user-dirs      |  []    []   | 68
+     xkeyboard-config   |        []   | 28
+                        +-------------+
+       89 teams           zh_HK zh_TW
+      166 domains           7    42    2809
 
    Some counters in the preceding matrix are higher than the number of
 visible blocks let us expect.  This is because a few extra PO files are
@@ -404,32 +1350,30 @@ used for implementing regional variants of languages, or language
 dialects.
 
    For a PO file in the matrix above to be effective, the package to
-which it applies should also have been internationalized and
-distributed as such by its maintainer.  There might be an observable
-lag between the mere existence a PO file and its wide availability in a
-distribution.
-
-   If August 2002 seems to be old, you may fetch a more recent copy of
-this `ABOUT-NLS' file on most GNU archive sites.  The most up-to-date
-matrix with full percentage details can be found at
-`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
-
-Using `gettext' in new packages
-===============================
-
-   If you are writing a freely available program and want to
-internationalize it you are welcome to use GNU `gettext' in your
-package.  Of course you have to respect the GNU Library General Public
-License which covers the use of the GNU `gettext' library.  This means
-in particular that even non-free programs can use `libintl' as a shared
-library, whereas only free software can use `libintl' as a static
-library or use modified versions of `libintl'.
+which it applies should also have been internationalized and distributed
+as such by its maintainer.  There might be an observable lag between the
+mere existence a PO file and its wide availability in a distribution.
+
+   If Jun 2014 seems to be old, you may fetch a more recent copy of this
+'ABOUT-NLS' file on most GNU archive sites.  The most up-to-date matrix
+with full percentage details can be found at
+'http://translationproject.org/extra/matrix.html'.
+
+1.5 Using 'gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU 'gettext' in your
+package.  Of course you have to respect the GNU Lesser General Public
+License which covers the use of the GNU 'gettext' library.  This means
+in particular that even non-free programs can use 'libintl' as a shared
+library, whereas only free software can use 'libintl' as a static
+library or use modified versions of 'libintl'.
 
    Once the sources are changed appropriately and the setup can handle
-to use of `gettext' the only thing missing are the translations.  The
+the use of 'gettext' the only thing missing are the translations.  The
 Free Translation Project is also available for packages which are not
 developed inside the GNU project.  Therefore the information given above
 applies also for every other Free Software Project.  Contact
-`translation@iro.umontreal.ca' to make the `.pot' files available to
-the translation teams.
-
+'coordinator@translationproject.org' to make the '.pot' files available
+to the translation teams.
diff --git a/Android.bp b/Android.bp
new file mode 100644 (file)
index 0000000..79dd58e
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2017 The Android Open Source Project
+
+cc_defaults {
+    name: "e2fsprogs-defaults",
+    cflags: ["-Wall", "-Werror"],
+    target: {
+        darwin: {
+            // Still has unfixed/unsuppressed warnings.
+            cflags: ["-Wno-error"],
+        },
+        windows: {
+            cflags: [
+                "-Wno-typedef-redefinition",
+                "-Wno-unused-parameter",
+                "-Wno-unused-variable",
+            ],
+        },
+    },
+}
+
+subdirs = [
+    "contrib",
+    "debugfs",
+    "e2fsck",
+    "lib",
+    "misc",
+    "resize",
+]
diff --git a/Android.mk b/Android.mk
deleted file mode 100644 (file)
index 5053e7d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-include $(call all-subdir-makefiles)
index ded4ceb..8331dae 100644 (file)
@@ -49,3 +49,4 @@
 # ************************************************
 
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libext2_uuid_intermediates)
+$(call add-clean-step, rm -rf $(TARGET_RECOVERY_OUT)/root/sbin)
diff --git a/INSTALL b/INSTALL
index b5afd2f..2dd08f5 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -56,7 +56,7 @@ frequency, and the fsck pass number, respectively.  The problem with
 this is that the getmntent() library routine interprets those missing
 fields as "0", and a pass number of 0 is documented as meaning that
 fsck should not check that particular filesystem.  If your entries in
-your /etc/fstab file look liks this:
+your /etc/fstab file look like this:
 
 /dev/hda4       /        ext2        defaults
 
index 3f54aa1..9c2c600 100644 (file)
@@ -35,7 +35,7 @@ frequency, and the fsck pass number, respectively.  The problem with
 this is that the getmntent() library routine interprets those missing
 fields as "0", and a pass number of 0 is documented as meaning that
 fsck should not check that particular filesystem.  If your entries in
-your /etc/fstab file look liks this:
+your /etc/fstab file look like this:
 
 /dev/hda4       /        ext2        defaults
 
index e82963d..3fede36 100644 (file)
@@ -2,8 +2,12 @@
 
 all::
 
+all-static::
+
 check::
 
+fullcheck::
+
 SHELL = /bin/sh
 
 COMPRESS_EXT = gz bz2 bz Z
@@ -30,6 +34,14 @@ man8dir = $(mandir)/man8
 infodir = @infodir@
 datadir = @datadir@
 pkgconfigdir = $(libdir)/pkgconfig
+pkglibdir = $(libdir)/e2fsprogs
+
+HAVE_UDEV = @have_udev@
+UDEV_RULES_DIR = @pkg_udev_rules_dir@
+HAVE_CROND = @have_crond@
+CROND_DIR = @crond_dir@
+HAVE_SYSTEMD = @have_systemd@
+SYSTEMD_SYSTEM_UNIT_DIR = @systemd_system_unit_dir@
 
 @SET_MAKE@
 
@@ -71,21 +83,26 @@ pkgconfigdir = $(libdir)/pkgconfig
 @ifNotGNUmake@ CHECK_CMD=true
 @ifNotGNUmake@ CPPCHECK_CMD=true
 
-CC = @CC@
+SANITIZER_CFLAGS = @lto_cflags@ @ubsan_cflags@ @addrsan_cflags@ @threadsan_cflags@
+SANITIZER_LDFLAGS = @lto_ldflags@ @ubsan_ldflags@ @addrsan_ldflags@ @threadsan_ldflags@
+
+CC = @PTHREAD_CC@
 BUILD_CC = @BUILD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 CFLAGS = @CFLAGS@
 CFLAGS_SHLIB = @CFLAGS_SHLIB@
 CFLAGS_STLIB = @CFLAGS_STLIB@
 CPPFLAGS = @INCLUDES@
-ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS) $(CFLAGS_WARN) @DEFS@ $(LOCAL_CFLAGS)
-ALL_CFLAGS_SHLIB = $(CPPFLAGS) $(CFLAGS_SHLIB) $(CFLAGS_WARN) @DEFS@ $(LOCAL_CFLAGS)
-ALL_CFLAGS_STLIB = $(CPPFLAGS) $(CFLAGS_STLIB) $(CFLAGS_WARN) @DEFS@ $(LOCAL_CFLAGS)
-LDFLAGS = @LDFLAGS@
-LDFLAGS_SHLIB = @LDFLAGS_SHLIB@
+ALL_CFLAGS = $(CPPFLAGS) $(SANITIZER_CFLAGS) $(CFLAGS) $(PTHREAD_CFLAGS) $(CFLAGS_WARN) @DEFS@ $(LOCAL_CFLAGS)
+ALL_CFLAGS_SHLIB = $(CPPFLAGS) $(SANITIZER_CFLAGS) $(CFLAGS_SHLIB) $(PTHREAD_CFLAGS) $(CFLAGS_WARN) @DEFS@ $(LOCAL_CFLAGS)
+ALL_CFLAGS_STLIB = $(CPPFLAGS) $(SANITIZER_CFLAGS) $(CFLAGS_STLIB) $(PTHREAD_CFLAGS) $(CFLAGS_WARN) @DEFS@ $(LOCAL_CFLAGS)
+LDFLAGS = $(SANITIZER_LDFLAGS) $(PTHREAD_CFLAGS) @LDFLAGS@
+LDFLAGS_SHLIB = $(SANITIZER_LDFLAGS) $(PTHREAD_CFLAGS) @LDFLAGS_SHLIB@
 ALL_LDFLAGS = $(LDFLAGS) @LDFLAG_DYNAMIC@
-LDFLAGS_STATIC = @LDFLAGS_STATIC@
-BUILD_CFLAGS = @BUILD_CFLAGS@
-BUILD_LDFLAGS = @BUILD_LDFLAGS@
+LDFLAGS_STATIC = $(SANITIZER_LDFLAGS) $(PTHREAD_CFLAGS) @LDFLAGS_STATIC@
+BUILD_CFLAGS = $(SANITIZER_CFLAGS) @BUILD_CFLAGS@
+BUILD_LDFLAGS = $(SANITIZER_LDFLAGS) @BUILD_LDFLAGS@
 RDYNAMIC = @RDYNAMIC@
 LINK_BUILD_FLAGS = @LINK_BUILD_FLAGS@
 LINK_INSTALL_FLAGS = @LINK_INSTALL_FLAGS@
@@ -108,7 +125,6 @@ LDCONFIG = @LDCONFIG@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
-MKINSTALLDIRS = @MKINSTALLDIRS@
 
 #
 # Library definitions
@@ -124,7 +140,7 @@ LIBFUSE = @FUSE_LIB@
 LIBSUPPORT = $(LIBINTL) $(LIB)/libsupport@STATIC_LIB_EXT@
 LIBBLKID = @LIBBLKID@ @PRIVATE_LIBS_CMT@ $(LIBUUID)
 LIBINTL = @LIBINTL@
-SYSLIBS = @LIBS@
+SYSLIBS = @LIBS@ @PTHREAD_LIBS@
 DEPLIBSS = $(LIB)/libss@LIB_EXT@
 DEPLIBCOM_ERR = $(LIB)/libcom_err@LIB_EXT@
 DEPLIBUUID = @DEPLIBUUID@
@@ -170,6 +186,14 @@ $(top_builddir)/util/subst:
        cd $(top_builddir)/util ; $(MAKE) subst
 
 #
+# Script for generating utf8data.h
+#
+MKUTF8DATA=$(top_builddir)/util/mkutf8data
+
+$(top_builddir)/util/mkutf8data:
+        $(MAKE) -C $(top_builddir)/util mkutf8data
+
+#
 # Script for installing symlinks (for shared libraries)
 #
 $(top_builddir)/util/install-symlink: $(top_srcdir)/util/install-symlink.in \
@@ -192,8 +216,7 @@ DEP_INSTALL_SYMLINK = $(top_builddir)/util/install-symlink \
 # Run make gcc-wall to do a build with warning messages.
 #
 #
-WFLAGS=                -std=gnu99 -D_XOPEN_SOURCE=600 -D_GNU_SOURCE \
-                       -pedantic $(WFLAGS_EXTRA) \
+WFLAGS=                -std=gnu99 -D_XOPEN_SOURCE=600 -D_GNU_SOURCE $(WFLAGS_EXTRA) \
                        -Wall -W -Wwrite-strings -Wpointer-arith \
                        -Wcast-qual -Wcast-align -Wno-variadic-macros \
                        -Wstrict-prototypes -Wmissing-prototypes \
@@ -203,14 +226,14 @@ WFLAGS=           -std=gnu99 -D_XOPEN_SOURCE=600 -D_GNU_SOURCE \
                        -UENABLE_NLS
 
 gcc-wall-new:
-       ($(MAKE) CFLAGS_WARN="$(WFLAGS)" > /dev/null) 2>&1 | sed -f $(top_srcdir)/util/gcc-wall-cleanup
+       ($(MAKE) CFLAGS_WARN="$(WFLAGS)" > /dev/null) 2>&1
 
 gcc-wall:
        $(MAKE) clean > /dev/null
        $(MAKE) gcc-wall-new
 
 static-check:
-       ($(MAKE) C=1 V=1 CFLAGS="$(ALL_CFLAGS) $(WFLAGS)") 2>&1 | sed -f $(top_srcdir)/util/static-analysis-cleanup
+       ($(MAKE) C=1 V=1 CFLAGS="$(ALL_CFLAGS) $(WFLAGS)") 2>&1
 
 static-check-all:
        $(MAKE) clean > /dev/null
index 7da9ad7..d412dfb 100644 (file)
@@ -4,6 +4,7 @@ VPATH = @srcdir@
 top_builddir = .
 my_dir = .
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
@@ -13,10 +14,17 @@ INSTALL = @INSTALL@
 @DEBUGFS_CMT@DEBUGFS_DIR= debugfs
 @UUID_CMT@UUID_LIB_SUBDIR= lib/uuid
 @BLKID_CMT@BLKID_LIB_SUBDIR= lib/blkid
-SUPPORT_LIB_SUBDIR= lib/support
+@E2SCRUB_CMT@E2SCRUB_DIR= scrub
+@ALL_CMT@SUPPORT_LIB_SUBDIR= lib/support
+@ALL_CMT@E2P_LIB_SUBDIR= lib/e2p
+@ALL_CMT@EXT2FS_LIB_SUBDIR= lib/ext2fs
+
+LIB_SUBDIRS=lib/et lib/ss $(E2P_LIB_SUBDIR) $(UUID_LIB_SUBDIR) \
+       $(BLKID_LIB_SUBDIR) $(SUPPORT_LIB_SUBDIR) $(EXT2FS_LIB_SUBDIR)
+
+PROG_SUBDIRS=e2fsck $(DEBUGFS_DIR) misc $(RESIZE_DIR) tests/progs po \
+       $(E2SCRUB_DIR)
 
-LIB_SUBDIRS=lib/et lib/ss lib/e2p $(UUID_LIB_SUBDIR) $(BLKID_LIB_SUBDIR) $(SUPPORT_LIB_SUBDIR) lib/ext2fs intl
-PROG_SUBDIRS=e2fsck $(DEBUGFS_DIR) misc $(RESIZE_DIR) tests/progs po
 SUBDIRS=util $(LIB_SUBDIRS) $(PROG_SUBDIRS) tests
 
 SUBS= util/subst.conf lib/config.h $(top_builddir)/lib/dirpaths.h \
@@ -26,8 +34,12 @@ TAR=tar
 
 all:: subs
        $(MAKE) libs
-       $(MAKE) progs
-       $(MAKE) docs
+@ALL_CMT@      $(MAKE) progs
+@ALL_CMT@      $(MAKE) docs
+
+all-static::
+       $(MAKE) libs
+@ALL_CMT@      $(MAKE) static-progs
 
 subs: $(DEP_SUBSTITUTE)
        @for i in $(SUBS) ; do if test -d `dirname $$i` ; \
@@ -37,13 +49,11 @@ subs: $(DEP_SUBSTITUTE)
        @(if test -d lib/support ; then cd lib/support && $(MAKE) prof_err.h; fi)
 
 progs: all-progs-recursive
+static-progs: all-static-progs-recursive
 libs: all-libs-recursive
-all-progs-recursive all-libs-recursive: subs
-
-e2fsprogs.spec: $(DEP_SUBSTITUTE) e2fsprogs.spec.in
-       cd $(top_builddir); CONFIG_FILES=./e2fsprogs.spec ./config.status
+all-progs-recursive all-libs-recursive:: subs
 
-rpm: e2fsprogs.spec
+rpm:
        sh contrib/build-rpm
 
 docs:
@@ -63,7 +73,7 @@ distclean-doc:
 
 install: subs all-libs-recursive install-progs-recursive \
   install-shlibs-libs-recursive install-doc-libs
-       if test ! -d e2fsck && test ! -d debugfs && test ! -d misc && test ! -d ext2ed ; then $(MAKE) install-libs ; fi
+@SUBSET_CMT@   $(MAKE) install-libs
 
 install-strip: subs all-libs-recursive install-strip-progs-recursive \
   install-shlibs-strip-libs-recursive install-doc-libs
@@ -78,8 +88,9 @@ coverage.txt: coverage.txt-recursive
 
 check-recursive: all
 
-TAGS clean-recursive distclean-recursive depend-recursive check-recursive \
-  mostlyclean-recursive realclean-recursive coverage.txt-recursive:
+TAGS clean-recursive distclean-recursive depend-recursive fullcheck-recursive \
+  check-recursive mostlyclean-recursive realclean-recursive \
+  coverage.txt-recursive:
        @for subdir in $(SUBDIRS); do \
          if test -d $$subdir ; then \
            target=`echo $@|$(SED) 's/-recursive//'`; \
@@ -89,19 +100,24 @@ TAGS clean-recursive distclean-recursive depend-recursive check-recursive \
        done
 
 all-progs-recursive install-progs-recursive install-strip-progs-recursive \
-  uninstall-progs-recursive coverage.txt-progs-recursive: all-libs-recursive
-       @for subdir in $(PROG_SUBDIRS); do \
-         if test -d $$subdir ; then \
-           target=`echo $@|$(SED) 's/-progs-recursive//'`; \
-           echo making $$target in $$subdir; \
-           (cd $$subdir && $(MAKE) $$target) || exit 1; \
-         fi ; \
-       done
+  uninstall-progs-recursive coverage.txt-progs-recursive:: all-libs-recursive
+
+
+@ALL_CMT@all-progs-recursive all-static-progs-recursive install-progs-recursive \
+@ALL_CMT@  install-strip-progs-recursive uninstall-progs-recursive \
+@ALL_CMT@  coverage.txt-progs-recursive:: all-libs-recursive
+@ALL_CMT@      @for subdir in $(PROG_SUBDIRS); do \
+@ALL_CMT@        if test -d $$subdir ; then \
+@ALL_CMT@          target=`echo $@|$(SED) 's/-progs-recursive//'`; \
+@ALL_CMT@          echo making $$target in $$subdir; \
+@ALL_CMT@          (cd $$subdir && $(MAKE) $$target) || exit 1; \
+@ALL_CMT@        fi ; \
+@ALL_CMT@      done
 
 all-libs-recursive install-libs-recursive install-strip-libs-recursive \
   uninstall-libs-recursive install-shlibs-libs-recursive \
   install-shlibs-strip-libs-recursive uninstall-shlibs-libs-recursive \
-  coverage.txt-libs-recursive:
+  coverage.txt-libs-recursive::
        @for subdir in $(LIB_SUBDIRS); do \
          if test -d $$subdir ; then \
            target=`echo $@|$(SED) 's/-libs-recursive//'`; \
@@ -116,7 +132,7 @@ clean:: clean-recursive clean-local clean-doc
        $(RM) -f $(SUBS) 
 
 distclean: distclean-doc distclean-recursive
-       $(RM) -rf autom4te.cache e2fsprogs.spec ext2ed/Makefile po/stamp-po \
+       $(RM) -rf autom4te.cache ext2ed/Makefile po/stamp-po \
                asm_types.h config.log public_config.h parse-types.log
        $(MAKE) distclean-local 
 
@@ -151,3 +167,4 @@ realclean-local: distclean-local
 
 check::        all check-recursive
 
+fullcheck:: all fullcheck-recursive
diff --git a/NOTICE b/NOTICE
index dd1227b..da98a3e 100644 (file)
--- a/NOTICE
+++ b/NOTICE
@@ -27,7 +27,7 @@ package are flexible, if you give me enough lead time.
                       Version 2, June 1991
 
  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
@@ -330,7 +330,7 @@ the "copyright" line and a pointer to where the full notice is found.
 
     You should have received a copy of the GNU General Public License
     along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 
 
 Also add information on how to contact you by electronic and paper mail.
@@ -370,7 +370,7 @@ Public License instead of this License.
                       Version 2, June 1991
 
  Copyright (C) 1991 Free Software Foundation, Inc.
-                   59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+                   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
@@ -832,7 +832,7 @@ convey the exclusion of warranty; and each file should have at least the
 
     You should have received a copy of the GNU Library General Public
     License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 
 Also add information on how to contact you by electronic and paper mail.
 
diff --git a/README b/README
index 096e3f4..2ae6e24 100644 (file)
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-       This is the new version (1.43.4) of the second extended file
+       This is the new version (1.46.0) of the second extended file
 system management programs.
 
        From time to time, I release new versions of e2fsprogs, to fix
diff --git a/README.subset b/README.subset
deleted file mode 100644 (file)
index 70ed4b2..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-This distribution contains a subset of the e2fsprogs package; it
-contains the base libraries (ss, et, uuid, blkid) which may be used by
-other non-ext2-related applications.
-
-This may be useful for non-Linux operating systems that need these
-libraries for GNOME, but who do not need the ext2/ext3 filesystem
-utilities.
-
-The full e2fsprogs distributions can be found at the e2fsprogs web
-page, which is:
-
-       http://e2fsprogs.sourceforge.net
-
-In case of bugs in these libraries, please contact Ted Ts'o at
-tytso@mit.edu or tytso@alum.mit.edu.
deleted file mode 100644 (file)
index fcbe8dbf69e55e47ef289d6844e37ede1cf5c0b9..0000000000000000000000000000000000000000
+++ /dev/null
-E2fsprogs 1.43.4 (January 31, 2017)
-===================================
-
-Fix e2fsck to require that the system.data extended attribute is
-always present even for files smaller than 60 bytes, to be consistent
-with the kernel.
-
-Fix a bug which was causing mke2fs -d and fuse2fs to improperly handle
-Posix ACL's.
-
-Fix a bug which could cause mke2fs -d to fail if there is an
-zero-length file in source directory tree.
-
-Clarify the default for the "proceed?" question printed by mke2fs and
-tune2fs.  (Addresses Debian Bug: #852727)
-
-Debugfs will now display project quota information.
-
-Debugfs's do_set_xattr now uses C strings to parse extended attribute
-values, and will print the extended attributes using either C strings
-or hex bytes when using debugfs's do_get_xattr command.  It will now
-allow developers to see the contents of the system.data extended
-attribute.
-
-Fix a bug in mke2fs where I/O errors weren't getting properly reported
-to the user.
-
-Fix multiblock writes in the unaligned Direct I/O fallback code.
-(Which is rarely needed on Linux systems, but which is required on
-Freebsd systems.)
-
-Make sure the default mke2fs.conf file includes the uninit_bg feature
-flag.  (Which was accidentally dropped in v1.43).
-
-Fix a bug in resize2fs when operating on very large file systems which
-have a block size different from the VM page size.
-
-If the reported device size is absurdly large, mke2fs will now report
-an error instead looping forever or crashing.
-
-Fix various Coverity warnings and other memory leaks in fuse2fs and
-extended attribute manipulation functions.
-
-Replace a test file but which had a "non-commercial use-only"
-copyright permission file with a newer version from the Cyrus imapd
-package which now has a 4-clause BSD license, which was making some
-lawyers nervous, even though the test file in question was only used
-in lib/et's regression testing and was never included in any compiled
-binary.  (Addresses Debian Bug: #840733)
-
-Stop installing mkfs.ext4dev and fsck.ext4dev
-
-Update Chinese, Czech, Polish, Serbian, and Spanish translations and
-add the Finnish and Malay translation.  (Addresses-Debian-Bug: #774379)
-
-Update various man pages (Addresses-Debian-Bug: #852726)
-
-Programming notes
------------------
-
-Fix more FreeBSD-11 compatibility bugs, including some unmasked by
-FreeBSD 11-rc2.
-
-Fix the Mac build.
-
-Fix build failure on RHEL 5.x systems caused by an old version of
-libmagic.
-
-Fix a number of bugs reported by ASAN that can cause some (mostly
-harmless) memory dereferences beyond allocated memory.
-
-
-E2fsprogs 1.43.3 (September 4, 2016)
-====================================
-
-Fix e2fsck's handling of timestamps on 32-bit systems.
-
-E2fsck will now check, and if necessary repair the extra isize fields
-in the inode and superblock.
-
-Fix crashes on architectures such as sparc64 that are sensitive to
-unaligned pointer derferences in the journal recovery code when
-journal checksums are enabled.
-
-Programming notes
------------------
-
-Support reproducible builds by not capturing the build directory into
-the mk_cmds and compile_et scripts.  Also fix debian build rules to
-ensure build reproducibility.
-
-Fix debian build rules to ensure build reproducibility and to avoid
-hiding the linker flags for e2fsck.static so the build hardening log
-scanner can properly audit the build.
-
-Fix compatibility with FreeBSD's pmake and teach the configure script
-to force the creation of pmake-compatible Makefiles if the
-FORCE_NATIVE_MAKE environment variable is set to a non-empty value.
-
-
-E2fsprogs 1.43.2 (September 1, 2016)
-====================================
-
-Fix resize2fs so it will not crash if there is an extended attribute
-block but it doesn't need to migate any blocks during an off-line
-resize
-
-Fix a crash when mke2fs or debugfs tries to copy in a directory
-hierarchy containing an empty directory
-
-Mke2fs will now use a larger journal by default for filesystems
-greater than 128 GB.  (1GB instead of 128 MB.)
-
-Fix an alignment bug in e2fsck which caused sparc64 architectures to
-crash when replaying the journal on file systems with a 64-bit block
-number.
-
-Clarify the message printed by tune2fs message when the user needs to
-run e2fsck so it's clear that the -f flag to e2fsck is needed to
-force a full e2fsck scan.  (Addresses Debian Bug: #828022)
-
-Fix a bug in e2fsck caused by a power failure during e2fsck's journal
-replay could leave the file system in a state where if the file system
-is mounted without doing a full e2fsck scan, the file system could get
-corrupted
-
-Fix the logic in e2fsck which decides when to repair legacy negative
-timestamp encodings.
-
-Add a command to debugfs to copy the inode structure from one inode to
-another.
-
-Fix a typo in debugfs's stat command when printing out the dtime field
-on file systems with an extended timestamp.
-
-Fix big endian bugs in the e2undo program.  (Addresses Red Hat Bug
-#1344636)
-
-Debugfs's logdump can now properly handle journals larger than 2GB.
-
-Avoid installing the man page for fuse2fs if it has not been built.
-
-Update the Catalan, Chinese, Danish, Dutch, French, German, Polish,
-Swedish, Ukrainian translations and added new translations for
-Hugarian and Serbian.
-
-
-Programming notes
------------------
-
-Fix portability problems in fuse2fs.  Previously it wouldn't build on
-systems with older glibc versions where clock_gettime() is only
-available in the librt library, and if libintl is not bundled into the
-C library.
-
-Remove complicated logic which caused a static code analyzer to flag a
-false positive.  (A static code analyzer also found a valid bug in
-deciding when to repair a legacy negative timestamp encoding, so
-eliminating false positives is important.)
-
-Fixed a bug where the ext2fs library cloud provoke when a
-extfs2_zero_blocks() is used (via fallocation, initializing a file
-system, uninitialized uninitialized inode table blocks) after a
-different file system which also used ext2fs_zero_blocks().
-
-Enable the unix_io manager in the ext2fs library so it can accept the
-use of a file descriptor.  This is helpful in cases where the file
-descriptor comes from temporary file created using O_TMPFILE, or
-passed in from a unix domain socket.
-
-Fix a Windows64 portability bug.
-
-
-E2fsprogs 1.43.1 (June 8, 2016)
-===============================
-
-Fixed e2fsck so that it would correctly update the project quota usage
-when deleting a corrupted and inode, and fixed mke2fs so it wouldn't
-dereference memory beyond the small inode structure (which was wrong,
-but worked mostly by accident unless hardening or some security malloc
-was in use).
-
-Fixed a large number of FreeBSD portability problems.  (To build on
-FreeBSD, however, we still need to use GNU Make and redirect dd to use
-GNU dd.)
-
-The configure script now supports --enable-hardening, which enables
-stack protection, fortify, read-only relocation tables, immediate
-dynamic symbol binding, and text segment ASLR (if the kernel has
-userspace ASLR support enabled) by enabling position independent
-executable code.  (Distributions who want to do their own special
-thing can set CFLAGS, CFLAGS_SHLIB, CLFAGS_STLIB, LDFLAGS,
-LDFLAGS_SHLIB and LDFLAGS_STATIC as appropriate.)
-
-The configure script now supports --disable-tdb since on 64-bit
-systems, it's much faster to just enable additional swap space.  The
-scratch_files feature in e2fsck.conf is mostly only useful on 32-bit
-systems.
-
-Fixed the Direct I/O fallback codepath in the Unix I/O manager so that
-read/modify/write worked correctly.  Fortunately in practice (with the
-exception of the Undo handler when running on FreeBSD) used this buggy
-codepath. so file systems weren't getting corrupted.
-
-Mke2fs will now warn if the user provides a label which is too long.
-(Addresses Debian Bug: #791630)
-
-Debugfs's rdump command now works correctly when dumping the root
-directory of a file system.  (Addresses Debian Bug: #766125)
-
-Fixed a bug in debugfs so it would correctly calculate a block group's
-checksum field field on 64-bit ssystems.
-
-E2fsck now has a much more understandable error message when the
-journal superblock is corrupt and the user declines to fix it.
-(Addresses Debian Bug: #768162)
-
-Fixed support of extended timestamps on 64-bit systems.
-
-Updated/fixed various man pages.  (Addresses Debian Bugs: #766379,
-#761144, #770750, #428361, #766127)
-
-Fixed various Debian Packaging Issues.  (Addresses Debian Bug: #825868)
-
-
-Programming notes
------------------
-
-Fixed coverity, sparse, gcc -Wall, and clang warnings/nits.
-
-Fixed Android build makefiles (which was missing a newly added file in
-lib/support).
-
-In general, checks on s_creator_os have been removed in favor of
-feature flag specific checks; if there is something that can't be
-checked via the presence of a feature flag, we will simply check
-whether the creator OS is *not* EXT2_OS_HURD which is the one
-operating system where there has been extensive abuse of the
-s_creator_os flag.
-
-The libmagic libary has been suppressed when running the regression
-test suite to avoid false test failures caused by differences between
-versions of libmagic (and/or the magic number database).
-
-The tests/test_script progam now accepts the --failed option, which
-will run those tests that had previously failed.
-
-Fixed tests build on those systems which require LDFLAGS to be set.
-
-Fixed the regression test suite so it will properly filter out version
-numbers with two components (such as 1.43) from log files before
-comparing them with the expected golden output.
-
-
-E2fsprogs 1.43 (May 17, 2016)
-=============================
-
-Add support for the ext4 metadata checksum, checksum seed, inline
-data, encryption, project quota, and read-only features.
-
-Support for the very old, experimental, and never-added-to-mainline
-compression feature has been removed.
-
-Mke2fs will now create file systems with the metadata_csum and 64bit
-features enabled by default.
-
-The mke2fs program will now support multiple -O options (instead of
-just ignoring all but the last -O option).
-
-Mke2fs will now correctly determine the size of a file system and
-handle the discard operation correctly when the "-E offset=NNN" is
-used.  (Addresses Debian Bug: #803629)
-
-The tune2fs program will ask the user for confirmation before starting
-dangerous operations if the terminal is available, and it will replay
-the journal if necessary.
-
-Add an ext2/3/4 FUSE server
-
-Debugfs can now modify extended attributes and journal transactions.
-
-Debugfs now can properly display and set extended timestamps.
-
-E2fsck will offer to fix extended timestamps that were incorrectly
-encoded by older kernels.
-
-Fix miscellaneous MMP bugs in debugfs.
-
-Fix sparse_super2 bugs in mke2fs and resize2fs.
-
-Fix or improve offset support in mke2fs, e2undo, and libext2fs.
-
-The resize2fs command can now convert file systems between 64-bit and
-32-bit mode.
-
-Fix potential out-of-bounds memory access in resize2fs when doing a
-large off-line file system grow operation.
-
-We now use a new e2undo file format which is much more efficient and
-faster than the old tdb-based scheme.  Since it so much faster,
-e2fsck, tune2fs, debugfs, and resize2fs now also can support using
-creating an undo file.
-
-The mke2fs command can now set the error behavior when initializing
-the file system (so the administrator doesn't have to issue a separate
-tune2fs -e command).
-
-Teach mke2fs to parse a human-readable argument for -i option.
-
-Teach mke2fs to automatically handle creating file systems > 500T by
-automatically enable the meta_bg feature.
-
-Mke2fs will now prompt for user verification before rewriting a file
-system's superblock using the -S option.
-
-Mke2fs no longer complains if the user tries to create a file system
-using the entire block device (e.g., without using a partition).  The
-minor number convention is not used by all block devices, and it's
-quite normal in some circumstances to create a file system on /dev/sdc
-instead of /dev/sdc1.
-
-Fix an "mke2fs -d" bug which could create inodes with invalid
-extended attribute blocks
-
-E2fsck is now much more paranoid about not freeing or corrupting
-critical metadata blocks, such as inode table blocks, even if
-corrupted indirect blocks or extent trees point at these blocks.
-
-E2fsck now prints block ranges in pass1b instead of listing all of the
-blocks exhaustively.
-
-E2fsck will try to expand the root directory if the lost+found can't
-be linked to the root directory.  Also, offer to use the root
-directory if lost+found can't be created.
-
-E2fsck is now more paranoid handling corrupted extent trees as well as
-corrupted journals.
-
-E2fsck can now rebuild extent trees, either (a) to optimize them, (b)
-to recover from a corrupted extent tree, or (c) to convert
-block-mapped inodes to use extents.
-
-E2fsck now has a readahead mechanism which can significantly speed its
-performance, especially on RAID arrays.
-
-E2fsck now has a "yes to all" option which the user can give if she is
-tired of answering 'y' to a very large number of questions.
-
-E2fsck will now ignore the badblocks inode if the contents of the
-badblocks inode indicate that the portion inode table containing the
-badblocks inode is bad.  (We must go deeper...)
-
-E2fsck can now correctly fix directory with holes on bigalloc file
-systems.
-
-E2fsck will now check for extent mapped inodes with no extent header
-and clear them if found.
-
-E2fsck now checks to make sure the extended attribute header doesn't
-result in the xattr extending beyond the bounds of the inode
-
-Fixed a bug in e2fsck to avoid overrunning a buffer containing jbd2
-revoke records if the journal is corrupted.
-
-Fixed a bug in e2fsck which could cause it loop forever if a special
-inode has too many invalid block mappings.
-
-Fixed a bug in e2fsck which could cause pass1b/c/d processing to get
-confused if an attempt to allocate a block can't find any free space
-in the file system.
-
-E2fsck will no longer try to force rewrite blocks located beyond the
-file system.
-
-The e2fsck program will no longer update the quota inodes when it is
-interrupted.
-
-Fix a bug which in rare cases would cause e2fsck -fD to corrupt an
-extent-mapped directory.
-
-Fixed a bug in resize2fs which could lead to resize2fs crashing or a
-corrupted file system if the file system is almost completely full
-when trying grow a file system and we need to allocate blocks to grow
-the block group descriptors.
-
-Fixed a bug in resize2fs which could cause it to get fooled trying to
-determinthe the RAID array's stride when flex_bg is enabled.
-
-Fix resize2fs bug that could leave block allocation bitmaps
-uninitialized.
-
-The dumpe2fs output has been improved so it is cleaner and always fits
-within 80 columns.  Also added a more easily machine-parsable output
-of dumpe2fs.
-
-The mke2fs program can now pre-populate a file system from a directory
-hierarchy using the -d option.
-
-The mke2fs program now skips zeroing inode table blocks if they were
-already zeroed using the discard feature.
-
-Check to make sure file system features which can not be supported by
-HURD are not enabled if the file system is created to be
-HURD-compatible.
-
-Added a new e2fuzz command that will fuzz an ext4 image for testing
-purposes.
-
-The debugfs logdump command can now deal with 64-bit revoke tables
-correctly.  Also, "logdump -O" will print the old log contents (before
-the journal was replayed).
-
-The debugfs bmap command can now be used to set or allocate a physical
-block.
-
-Fixed a bug so "filefrag -B -e -v" does not return a separate entry
-for each block.
-
-The filefrag program now accounts for holes in sparse files created by
-the file punch operation as an expected/optimal mapping.
-
-The file I/O functions now correctly handle inodes containing
-uninitialized blocks.
-
-Fix a bug in tune2fs so that removing uninit_bg feature on a bigalloc
-file system won't result in corrupted block bitmaps.
-
-Updated/fixed various man pages.  (Addresses Debian Bug: #798425)
-
-
-Programmer's Notes
-------------------
-
-Fixed coverity, sparse gcc -Wall, and clang warnings/nits.
-
-Added Android build files so that e2fsprogs can be built in the
-Android source tree.
-
-Reduce the use of libc functions in libext2fs that may not be present
-in the boot loader environment, at least for those functions that are
-needed by boot loadsers such as yaboot.
-
-Developers can now overide the debugging and optimization flags by
-redefining the CFLAGS makefile macro.
-
-The libext2fs library now has support for fallocate.
-
-The mke2fs command will now ask the user for confirmation if block
-device or image file contains an existing file system image, and
-stdout and stdin are connected to a tty.
-
-The libext2fs library now picks a more intelligent goal block when
-doing block allocations.
-
-The libext2fs library will now automatically set the BLOCK_UNINT flag
-if all of the blocks in a block group are free, to speed up future
-e2fsck and dumpe2fs operations on the file system.
-
-Add two new functions ext2fs_new_range() and ext2fs_alloc_range() to
-libext2fs.
-
-The ext2fs_zero_blocks() command will use FALLOC_FL_ZERO_RANGE for
-file-based images.
-
-The ext2fs_bmap() function supports new flags BMAP_UNINIT and
-BMAP_ZERO.
-
-The ext2fs_new_block2() function will now call the alloc_block hook
-before checking fs->block_map.
-
-Support for the MMP feature can now be disabled at compile time.
-
-Added support to manipulate extended attributes to libext2fs.
-
-Added a lot of new regression tests.
-
-Added endian annotations so it's possible to scan e2fsprogs for endian
-problems using a static code analyzer.
-
-Fixed memory leaks in libext2fs.
-
-The e2fsck jbd2 handling code has been resynced with the 3.16 kernel.
-There is now a script in the contrib directory which automates most of
-the resync process.
-
-The build system will now run cppcheck (a static code analysis tool)
-via "make C=1"
-
-
-E2fsprogs 1.42.13 (May 17, 2015)
-================================
-
-Fixed a potential buffer overflow while closing a file system in
-libext2fs.  (CVE-2015-1572, Addresses Debian Bug: #778948)
-
-Fixed a bug which could cause e2fsck to corrupt Hurd file systems.
-(Addresses Debian Bug: #760275)
-
-Fixed a deadlock which occurs when using systemd and e2fsck.conf's
-logging feature.  (Addresses Debian Bug: #775234)
-
-Fixed a bug which could cause programs using libext2's inode table
-scanning functions from crashing on certain corrupted file systems.
-(Addresses Debian Bug: #773795)
-
-Fixed dumpe2fs so it won't crash if the user doesn't specify a block
-device (file system).  (Addresses Debian Bug: #764293)
-
-Fixed e2fsck so if it notices unexpected HTREE blocks in pass 2, it
-will report the correct directory inode containing the inconsistency.
-
-If e2fsck fails to grow the dir_info structure due realloc(3) not
-having enough memory, it will now fail with explanatory message
-instead of staggering on failing with a confusing internal error
-messages.
-
-The tune2fs program will zero out the superblock journal backup
-information when removing a journal from a file system.
-
-The mke2fs program now enables the large_file feature by default.
-
-Fixed a bug which could cause badblocks to crash if there are millions
-and millions of bad blocks.
-
-Fixed some use-after-free bug in resize2fs and e2fsck.
-
-Fixed a memory leak in tune2fs.
-
-Fixed some bigendian bugs that had crept into both indirect and extent
-handling inside libext2fs.
-
-Updated/fixed various man pages.
-
-Update Esperanto, German, and Spanish translations.  Added Danish
-translation.
-
-Programmer's Notes
-------------------
-
-Fixed coverity, sparce gcc -Wall, and clang warnings/nits.
-
-Clean up some build system problems (build failures with various
-configure options, fix Posix portability issues, etc.)
-
-The functions ext2fs_inode_alloc_stats[2]() and
-ext2fs_block_alloc_stats[2]() now check the inode and block numbers
-passed to them, to avoid crashes caused by buggy callers.
-
-The libext2fs directory iterator will now check for an invalid
-directory entry length instead of possibly walking off the end of the
-directory buffer.
-
-
-E2fsprogs 1.42.12 (August 25, 2014)
-===================================
-
-Fix various e2fsck bugs when trying to repair bigalloc file systems.
-
-E2fsck can now repair a file system with an overly large
-s_first_meta_bg field, which had previously caused all e2fsprogs
-programs to crash when trying to open such a file system.
-
-Fix e2fsck so that it can correctly fix a number of rare file system
-corruptions that were discovered when using a file system fuzzer.
-
-Fix e2fsck so it does not try to write back block group descriptors if
-they have not been modified.
-
-Mke2fs program will now place metadata blocks in the last flex_bg so
-they are contiguous.  This reduces free space fragmentation in a
-freshly created file system, as well as allowing mke2fs commands which
-request extremely large flex_bg size to succeed.
-
-Mke2fs now creates hugefiles more efficiently (with fewer extent tree
-blocks).
-
-Fix a 32/64-bit overflow bug that could cause resize2fs to loop
-forever. (Addresses-Launchpad-Bug: #1321958)
-
-The resize2fs program will now use much less memory when resizing very
-large file systems.
-
-Fix a bug which could cause resize2fs to get confused and produce a
-corrupted file system when shrinking a file system that had been
-previously expanded and converted to use the meta_bg file system
-format, but which no longer needs to use the meta_bg file system
-format any longer.  This typically happened with large (> 16TB) file
-systems.  (Addresses Debian Bug: #756922)
-
-The e4defrag program will now defrag backwards-allocated files.
-
-Fix tune2fs updating UUID's when manipulating file systems with
-external journals (both the file system and journal UUID).
-
-Fix tune2fs so it can remove an external journal for file systems with
-a 1k block size.
-
-Add a new debugfs command, "inode_dump", which prints the inode in hex
-and ASCII format.
-
-The debugfs's "set_inode_field" will now automatically allocate blocks
-for indirect blocks and extent tree blocks.
-
-Fix debugfs's "set_inode_field" so can properly handle
-"block[IND|DIND|TIND]".
-
-The debugfs "rdump" command will now take multiple source arguments.
-
-Fixed a double close(2) bug in "rdump" and "rdump -p".
-
-Fix debugfs's argument parsing for the freefrag command.
-
-Fix filefrag to properly handle using the FIBMAP ioctl (with -B).
-(Addresses Launchpad Bug: #1356496)
-
-Clarified messages that were confusing users in debugfs, e2fsck,
-mke2fs, and resize2fs (Addresses Debian Bugs: #758029, #757543,
-#757544)
-
-Dumpe2fs will now complain if extra arguments are given to it.
-(Addresses Debian Bug: #758074)
-
-Updated/fixed various man pages.  (Addresses-Debian-Bug: #726760)
-
-Update Czech, Dutch, French, Polish, Spanish, Sweedish, Ukrainian, and
-Vietnamese translations.
-
-Programmer's Notes
-------------------
-
-The Unix I/O layer will now use pread[64]/pwrite[64] to reduce the
-number of system calls issued.
-
-Fixed profiled build.
-
-The libext2fs library will now more efficiently split an extent tree
-index block when appending to an end of a file.
-
-Fixed free block accounting for 64-bit file systems.
-
-Add a new function ext2s_inode_size_set() which takes care of all of
-the required feature flag modifications.
-
-The regression tests no longer require the presence of the md5sum
-program.
-
-Fix build failure on MIPS platforms on Debian (Addresses Debian Bug:
-#754605)
-
-Fix various Coverity warnings (#1225003, #1229243, #1252003)
-
-
-E2fsprogs 1.42.11 (July 9, 2014)
-================================
-
-Add support so that mke2fs can create hugefiles so that they are
-aligned relative to the beginning of the disk, instead of relative to
-the beginning of the partition, using the mke2fs.conf configuration
-parameter "hugefiles_align_disk".
-
-Fix a bug which causes e2fsck to abort a journal replay on a file
-system with bigalloc enabled.  (Addresses Debian Bug: #744953)
-
-Add sanity checks so that mke2fs will refuse insanely large flex_bg
-counts specified by the -G option.  Insanely large flex_bg sizes can
-result in a file system which can't be unmounted, or with extremely
-pessimal metadata layouts.
-
-The mke2fs program will provide a better metadata layout for
-moderately large (but believable) flex_bg counts, such as 133,072.
-
-The mke2fs progam will also check the kernel version number to
-determine whether the lazy_itable_init option is supported, so that
-lazy inode table initialization can be used even if the ext4 is
-compiled as a module which isn't loaded at the time that mke2fs is
-run.
-
-Add description of ext4's mount options to the ext4 section 5 man
-page.
-
-Improve the chattr man page and clean up the chattr usage message.
-
-E2fsck will now automatically fix a last mount time or last write time
-which is in the future in preen mode, instead of aborting the fsck
-check.
-
-Mke2fs will now check the file system revision number requested by the
-command line, and reject it if it is too large.  A file system with an
-unsupported revision number will not be accepted by any of the other
-file system tools, and this command line option is rarely used, so
-let's try to help the user not shoot their own foot off.
-
-The debugfs progam can now set the error count and associated
-first_error and last_error fields in the superblock using the
-set_super_value command.
-
-Resize2fs will not try to calculate the minimum size of a file system
-if it contains errors.  Otherwise a very badly corrupted file system
-image can cause the minimum size calculation to loop forwever.  Since
-resize2fs will not allow a file system marked as containing errors to
-be resized.  It's pointless to calculate the minimum size, so just
-skip it.
-
-Fixed a typo in one of mke2fs's error message.
-
-If filefrag runs into an error, it will continue processing the rest
-of the files specified on thec ommand line, but then exit with an
-error code.
-
-Filefrag now prints some additional new flags (such as
-FIEMAP_EXTENT_ENCODED), and print unknown flags as hex values.
-
-Fixed support in filefrag for files with > 2**32 blocks on 32-bit
-platforms.
-
-Fixed a file descriptor leak in debugfs when copying files.
-
-Fixed a regression introduced in 1.42.10 which caused mke2fs to fail
-to create file systems larger than 2GB on 32-bit platforms.
-(Addresses Red Hat Bugzilla: #1099892, Debian Bug: #752107)
-
-Add Esparanto and Ukrainian translations, and update Czech, Dutch,
-French, German, Italian, Polish, Sweedish, and Vietnamese
-translations.
-
-Fixed various compiler warnings.
-
-
-Programmer's Notes
-------------------
-
-The gcc "-checker" option has been long deprecated, so remove support
-from e2fsprogs.  It was causing a few people to be confused when they
-tried enabling the configure option.
-
-Update to the latest version of the config.status and config.rpath
-files, as well as newer versions of the autoconf files in aclocal.m4.
-Also, move the e2fsprogs-specific macros to acinclude.m4, which allows
-people who want to use autoreconf to do so.
-
-Make the use of strptime() function in debugfs to be more portable to
-fix regression test failures for FreeBSD and MacOS.
-
-A few miscellaneous changes designed to make life easier for
-translators.
-
-Fix the f_quota test and some Makefile dependencies if quota support
-is not enabled.
-
-Fix cross-compilation support, which got broken in 1.42.10.
-(Addresses Debian Bug: #753375)
-
-Delete lib/ext2_types.h on a make clean, and build it as necessary.
-
-Add a debug program used for libext2fs unit tests.
-
-Clean up the tests so that it avoids using GNU-specific behaviour in
-mktemp.  Make sure the temporary files are cleaned up if the tests are
-interrupted.
-
-Add a new ext2fs_close_free() helper function which automatically
-takes care of freeing the ext2_filsys structure even if ext2fs_close()
-returns an error.
-
-
-E2fsprogs 1.42.10 (May 18, 2014)
-================================
-
-Mke2fs now creates file systems in regular files (which is very often
-used when maintaining virtual machine images) without requiring the
-user to use the force option.  In addition, the mke2fs output has been
-made much less verbose and only displays information that users will
-be more likely to find useful by default.
-
-Mke2fs now will ask the user to confirm that they want to continue
-before wiping out a pre-existing file system, partition table, or LVM
-physical volume.
-
-Mke2fs now has the ability to create file systems where all the
-metadata is located at the very beginning of the device.  This can be
-useful for flash devices which have SLC flash at the beginning of the
-disk, for FAT compatibility, for example.  As part of this, mke2fs and
-tune2fs can control the location of the data blocks used by the
-journal inode.  In addition, the new sparse_super2 feature allows for
-even fewer (anywhere from zero to two) backup superblocks.
-
-Mke2fs now uses much less CPU when allocating the blocks used for very
-large file systems.
-
-Mke2fs can now support creating a file system at an offset.  This can
-be useful when creating a disk image for virtual machines (Addresses
-Debian Bug: #497984)
-
-Previously, e2fsck had a number of very serious bugs when checking a
-file system wich used the new the quota file system option (where the
-quota inodes were stored in hidden inodes) and the quota inode was
-inconsistent with the actual usage data.  This problem was documented
-in https://ext4.wiki.kernel.org/index.php/Quota.  These problems have
-been fixed in 1.42.10, so the quota should be safe to use with
-e2fsprogs 1.42.10.
-
-Fixed in a bug in resize2fs which could cause shrink operation fail in
-the unlikely situation when the inode table needs to be moved to a
-location before the current location.
-
-Resize2fs now has a much more accurate (and less conservative)
-estimation of how far the file system can be shrunk.  This allows a
-mostly empty filesystem which is a few terabytes, to be shrunk to a
-few megabytes in a single resize2fs -M operation.
-
-E2fsck will now force a full file system check if there are any file
-system inconsistencies detected in the super block.
-
-The filefrag program will now display hte shared extent flag, which is
-used by file systems such as btrfs.
-
-If the number of inodes in the file systems is larger than the time
-that file sytem was created (as measured by the number of seconds
-since January 1, 1970) e2fsck would print a scary (but otherwise
-harmless) warning of file system corruption for each inode in the
-orphan list.  This false positive has been fixed.
-
-The e4defrag program has been fixed so it will no longer refuse with
-filesystem with the 64-bit or the bigalloc feature enabled.
-
-The logsave progam will print a much less scary message which could
-lead users to believe something has gone very wrong with e2fsck exits
-with a non-zero exit status (since this is normal after e2fsck has
-automatically fixed a file system corruption during a preen
-operation).   (Addresses Debian Bug: #468821)
-
-When creating a file system which is larger than 16TB, the
-resize_inode option must be disabled -- since the resize_inode simply
-doesn't support reserving metadata block numbers which is larger than
-32 bits.  The mke2fs program does this automatically if the file
-system size is determined automatically.  It will now also do this if
-the file size is specified explicitly.
-
-Fixed bugs associated with resize2fs and shrinking bigalloc file
-systems.
-
-The e2fsck program will no longer try to add a UUID on a mounted file
-system with checksums enabled, since this could leave the file system
-checksums broken.
-
-Tune2fs will allow the removal of an external journal from file system
-which is marked as needing the journal replayed when the force ("-f")
-option is given twice.  (Addresses Debian Bug: #559301)
-
-Tune2fs will no longer support enabling sparse_super if the meta_bg
-file system feature is enabled, since it could result in data loss.
-In practice, all modern file systems have sparse_super is enabled, so
-it's not worth trying to change how tune2fs handles enabling the
-sparse_super feature.
-
-Fixed support for 1k block file systems with the meta_bg feature.
-
-When the superblock is corrupt, e2fsck can't figure out the location
-of the alternate superblock.  Unfortunately, the routine that
-calculates the location of the alternate superblock uses 8193 if it
-can't figure this out, so the message printed by e2fsck always
-suggests using "e2fsck -b 8193".  This message has been fixed to
-suggest both the superblock location of 8193 and and 32768.
-(Addresses Debian Bug: #719185)
-
-The lookback mount detection code that was introduced in 1.42.9 wasn't
-actually compiled in due to an autoconf oops, so it's fixed now in
-1.42.10.  (Addresses Debian Bug: #497984)
-    
-A bug introduced in 1.42.9 would cause debugfs to print two error
-messages if it found an error while parsing a user-supplied block
-number.  This has been fixed in 1.42.10.
-
-Update Czech, Dutch, French, German, Polish, Spanish, Sweedish, and
-Vietnamese translations.  (Addresses Debian Bug: #703048)
-
-Updated/fixed various man pages.  (Addresses Debian Bugs: #719189,
-#719184)
-
-Fixed various Debian Packaging Issues.  (Addresses Debian Bug: #718725)
-
-
-Programmer's Notes
-------------------
-
-Fixed a lot of coverity, sparce gcc -Wall, and clang warnings/nits.
-
-Allow the location of pkg-config files to be specified independent of
-the libdir location via a makefile variable.
-
-Fixed parse-types.sh not to complain when cross-compiling and the
-sizes of types are different between the target architecture and the
-architecture of the build system
-
-Allow the regression test suite to work correctly on systems which do
-not have the "truncate" or "mksawp" programs.
-
-Allow e2fsck to build correctly on systems (such as Android) that do
-not have the signal.h file.
-
-E2fsprogs now has code coverage testing which can be enbled using
-"configure --enable-gcov".
-
-The libe2p.h header file can now be used included by C++ programs.
-
-The profile/config file used by e2fsck and mke2fs will interpret
-numbers with a leading 0 character to mean that they should be
-interpreted as an octal integer.
-
-The extent handling functions in libext2fs have been improved so they
-have proper rollback when there is an error splitting an extent.  Also
-fix a number of bugs when punching holes in files, and fix an
-off-by-one bug when inserting an extent into an empty inode.
-
-The libext2fs library now handles the support of BLOCK_UNINIT by
-clearing the portion of block bitmap when it is loaded, instead of
-when it is used.  This reduces the chances of bugs, and and simplifies
-the code.  It also means that debugfs will properly show that blocks
-in uninitialized block groups as being unused when using the testb
-command.
-
-The e4defrag program will try to use fadvise64 or posix_fadvise64() if
-it is present, which allows 64-bit offsets on 32-bit systems.
-
-
-E2fsprogs 1.42.9 (December 28, 2013)
-====================================
-
-Mke2fs will detect an attempt to create a file system on a loop
-mounted file and complain without the -FF option.  Also fixed mke2fs
-so it allows the creation of a file system on a mounted device with
-two -F options, as documented in the man page, instead of three -F
-options.
-
-Fixed a large number of bugs in resize2fs, e2fsck, debugfs, and
-libext2fs to correctly handle bigalloc and 64-bit file systems.  There
-were many corner cases that had not been noticed in previous uses of
-these file systems, since they are not as common.  Some of the bugs
-could cause file system corruption or data loss, so users of 64-bit or
-bigalloc file systems are strongly urged to upgrade to e2fsprogs
-1.42.9.
-
-The tune2fs program will now not allow changing the uuid on a mounted
-file system which has the uninit_bg feature enabled.  This avoids a
-nasty race where the kernel and tune2fs are both retrying rewrite the
-group descriptors at the same time, with different ideas about what
-the UUID should be.
-
-When e2fsck is rehashing an extent-mapped directory, it's possible
-(although very rare) that an extent block will need to be allocated;
-fix e2fsck to make sure that the block gets marked as used.
-
-Mke2fs will now properly set the LARGE_FILE feature when creating a
-journal >= 2GB --- which can happen when using 64k block size.
-
-Fixed debugfs so that its freei command will correctly handle a request
-to free a range of consecutive inodes.
-
-Fixed 2fsck so it will not erroneously complain that an external journal
-is invalid if it is exactly 2**32 blocks.
-
-Fixed e2fsck so it won't try checking for, and adding, a missing
-lost+found directory when running in read-only mode.
-
-Fixed e2image so that progress information won't get leaked to stdout.
-(Addresses Red Hat Bugzilla: #1327329)
-
-Fixed e2image to avoid some buffer overruns which would cause it to when
-creating a "standard (non-raw, non-qcow2) image file.  Standard
-e2image files are actually very rarely used, so we didn't notice when
-the changes to enable the qcow2 format broke this e2image mode.
-
-Fixed mke2fs so that the extended option "-E resize=NNN" will not turn
-on the resize_inode feature when the meta_bg feature is set, since
-these two features can not be set at the same time.
-
-Fixed tune2fs so that when it disables the quota feature, it updates all
-of the backup superblocks.
-
-Fixed dumpe2fs that would cause it to abort when run using an image file
-when trying to print the journal information (which is not present in
-an e2image created image file).
-
-Fixed a potential integer overflow in e2reefrag.
-(Addresses-Debian-Bug: #718205)
-
-Enhance debugfs so that when copying a sparse file from a native file
-system into the file system image using the "write" command, it will
-create a sparse file into the destination file system.
-
-Enhanced debugfs so it can support a command line which is up to 8k
-long.
-
-E2image will refuse (unless the -f option is specified to force the
-issue) to create a raw or qcow image using a mounted file system,
-unless the -f option is specified to force the issue.
-
-E2image has been optimized for using it to efficiently copy a file
-system by only copying the allocated blocks, by using the options -ra.
-New options (-o and -O) have been added so that a source and
-destination offset can be given.  The -p option will print progress
-information so the user will know how far along the copy is going.
-And finally, the new option -c is useful for updating a file system on
-an SSD, by avoiding unnecessary writes.  E2image can also shift a file
-system image by doing an in place move.
-
-Fix a regression introduced in 1.42.8 which would cause e2fsck to
-erroneously report uninitialized extents past the EOF (as determined by
-i_size) to be invalid.
-
-Fixed resize2fs so under a corner case when an inode has a complex
-extent tree, it will not corrupt an interior node in the extent tree.
-
-Fixed resize2fs which would sometimes corrupt a file system when
-shrinking a file system to a minimum size using resize2fs -M.
-(Addresses Debian Bug: #660793)
-
-Fixed resize2fs so that it will relocate inode table blocks if this
-becomes necessary when shrinking the file system.
-
-Fixed resize2fs and e2fsck so they will not crash when hit a failure
-while operating on a file system with the MMP feature enabled.
-
-Fixed a bug in debugfs which caused it create an invalid inode when
-trying to write a zero-length file.
-
-E2fsck will no longer crash if it tries to delete an invalid
-extent-mapped symlink.
-
-E2fsck will no longer crash if it comes across an directory which is
-larger than 2GB (which is not allowed in valid file systems).
-
-Fixed debugfs's help texts to fully document all options and otherwise
-be more helpful.
-
-Updated/fixed various man pages.  (Addresses Debian Bugs: #586218,
-#669730, #698076)
-
-Fixed various Debian Packaging Issues (#698879, #721365)
-
-
-Programmer's Notes
-------------------
-
-Fix sparse, gcc -Wall and clang nits.
-
-Update config.{guess,sub} to the latest version
-
-Fixed various memory and file descriptor leaks on various error paths,
-as well as some missing error return checks, which were found using
-Coverity.
-
-Run sparse against source files when building e2fsprogs with 'make
-C=1'.  If instead C=2, it configures basic ext2 types for bitwise
-checking with sparse, which can help find the (many many) spots where
-conversion errors are (possibly) happening.
-
-Allow the regression test to be run in chrooted environments where
-/etc/mtab might be missing.
-
-The ext2fs_punch() function, which was introduced in 1.42, was broken
-in many ways, but this was never noticed since it wasn't used for
-anything significant.  Some of the bugs include failing when trying to
-punch a completely sparse file, failing when punching an extent-mapped
-inode when the starting block was at the beginning of the inode, and
-not being able to punch a single block (where start_blk == end_block).
-It also didn't handle being passed an invalid, too-large ending block
-number, and didn't handle properly terminate at the right place when
-operating on an indirect-mapped inode.
-
-Fixed some minor typo's in the error catalog for libext2fs.
-
-Fixed ext2fs_file_set_size2() so that if it truncates an inode by
-setting the file size, to zero the rest of the block to the end of the
-file, so that if an ext4 FUSE driver tries to extended the file, that
-we don't avoid stale data from being returned.
-
-Fixed ext2fs_bmap() to disallow clients from trying to map or set
-logical blocks which are larger than what an extent-mapped or indirect
-block-mapped inode can allow.
-
-If debugfs (or some userspace program using libext2fs) creates a file
-which is larger than 2GB, make sure the large_file feature flag gets
-set.
-
-Fix a bug in ext2fs_link() where if there is multiple empty slots in the
-directory which are large enough, the directory entry could get
-inserted more than once in the directory.
-
-If quota support is disabled (which is the default), make sure that
-all traces of the quota support is removed from usage messages, man
-pages, and tune2fs must not be able to enable the quota file system
-feature.  (Addresses Red Hat Bugzilla: #1010709)
-
-The ext2fs_file_write() now updates i_size on a successful write,
-instead of only updating i_size wen the file is closed via
-ext2fs_file_close().
-
-Added a shell script, populate-extfs.sh which uses debugfs to populate
-an ext2/3/4 file system image from a given directory.  It is similar
-to the genext2fs program, but it supports ext3 and ext4 file system.
-
-Add changes to the libext2fs library to support block group
-descriptors larger than 64 bytes (for future compatibility).
-
-Fixed an off-by-one bug in ext2fs_file_set_size2() so that it will not
-leave an extra block in the file when truncating the file down to
-size.
-
-The html version info pages are now built using makeinfo --html
-instead of the unmaintained and now-obsolete texi2html program.
-
-
-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)
-================================
-
-Fixed a bug with mke2fs where if there is only 8 inodes per block
-group, the calculation of the number of uninitialized inodes in the
-first block group would go negative.  This resulted in "mke2fs -N 256
--t ext4 /tmp/foo.img 256m" trying to write so many blocks that /tmp
-would run out of space.  (Addresses Sourceforge Bug: #3528892)
-
-Fixed a bug in how e2fsck would uniquify directory entry names.
-(AddressesSourceforge Bug: #3540545)
-
-Previously, e2fsck would only allow a mounted file system to be
-checked if it was the root file system and it was mounted read-only.
-Now it will allow any file system mounted read-only to be checked if
-the -f option is specified.  This makes it easier to test how e2fsck
-handles checking file systems which are mounted without having to test
-on the root file system.
-
-Fixed a problem if e2fsck where if the root file system is mounted
-read-only, e2fsck would not clear an error indication in the journal
-superblock.  Combined with a kernel bug, this would cause the e2fsck
-to check the file system after every single boot.
-
-The e4defrag program can now handle device symlinks, such as
-/dev/mapper/testvg-testlv, instead of insisting on a less
-human-friendly name such as /dev/dm-2.  (Addresses Red Hat Bugzilla:
-#707209)
-
-Fixed filefrag so it will not crash with a segfault on files from a
-virtual file system such as /proc.  (e.g., "filefrag
-/proc/partitions")
-
-Fixed filefrag so that it correctly reports the number of extents.
-(Addresses Red Hat Bugzilla: #840848)
-
-Fixed a file descriptor leak in logsave which could cause it to hang.
-(Addresses Debian Bug: #682592)
-
-Fixed e2fsck so that the file system is marked as containing an error
-if the user chooses not to fix the quota usage information.
-
-Fixed tune2fs so that it correctly removes the quota feature when the
-last quota inode is removed.
-
-Fix tune2fs so that after removing a quota inode, the block bitmap is
-updated; otherwise, e2fsck would complain after running 'tune2fs -O
-^quota <dev>'.
-
-Fix tune2fs so that when converting a file system from using legacy
-quota files to the new quota file system feature with hidden quota
-files, the accounting for these files is handled correctly so that
-e2fsck doesn't complain.
-
-Improved e2fsck's verbose reporting statistics, and allow the more
-verbose reporting to be enabled via /etc/e2fsck.conf.
-
-Fixed various Debian Packaging Issues (Addresses Debian Bug #678395)
-
-Updated/fixed various man pages.  (Addresses Debian Bugs: #680114)
-
-
-Programmer's Notes
-------------------
-
-Fixed portability problems on other operating systems (e.g., Hurd and
-FreeBsd) caused by the attempted inclusion of <sys/quota.h>.
-
-Make sure that shared libraries link with the shared libraries built
-in the build tree, instead of the system provided libraries.
-Previously, libraries and executables were linked with the system
-libraries if present, and possibly using static archives instead of
-shared libraries.  This was also problematic since if libext2fs.so is
-linked with a static libcom_err.a from system, the build system would
-attempt to link without -lpthread.  (Addresses Sourceforge Bug:
-#3542572)
-
-
-E2fsprogs 1.42.4 (June 12, 2012)
-================================
-
-Fixed more 64-bit block number bugs (which could end up corrupting
-file systems!) in e2fsck, debugfs, and libext2fs.
-
-Fixed e2fsck's handling of the journal's s_errno field.  E2fsck was
-not properly propagating the journal's s_errno field to the superblock
-field; it was not checking this field if the journal had already been
-replayed, and if the journal *was* being replayed, the "error bit"
-wasn't getting flushed out to disk.
-
-Fixed a false positive complaint by e2fsck if all of the extents in
-the last extent tree block are uninitalized and located after the end
-of the file as defined by i_size.
-
-The dumpe2fs will now display the journal's s_errno field if it is
-non-zero, and it will also display the journal's 64-bit feature flag
-if present.
-
-Fix e2fsck so that it always opens the device file in exclusive mode
-when it might need to modify the file system, and never if the -n
-option is specified.  (Previously, there were a few corner cases where
-it might get things wrong in either direction.)
-
-E2fsck now correctly truncates or deallocates extent-mapped inodes on
-the orphan list.  The root cause was a bug in libext2fs's block
-iterator which could end up skipping an extent when the last block in
-an extent is removed, causing the current extent to be removed from
-the extent tree.
-
-E2fsck now correctly sets the global free block and inode counts when
-truncating or removing inodes on the orphan list in preen mode.
-Previously, it would leave these values would be set incorrectly,
-which is largely a cosmetic issue since the kernel no longer pays
-attention to those fields, but it can cause spurious complaints in
-subsequent e2fsck runs.
-
-Fix i_blocks accounting when the libext2fs library needs to add or
-remove an extent tree block  on bigalloc file systems.
-
-The lsattr and chattr programs now support the No_COW flag for the
-benefit of btrfs.
-
-Debugfs now interprets date strings of the form @ddd as ddd seconds
-after the beginning of the epoch.  This is handy when setting an inode
-number into the d_time field when debugging orphan list handling.
-
-Fix a precedence bug with built-in quota support which might result in
-e2fsck paying attention to the quota inode field even if the built-in
-quota feature flag is not set.  Fortunately, in practice that
-superblock field should be zero for non-built-in quota file systems,
-so it's unlikely this bug would have caused problems.
-
-Updated/fixed various man pages.  (Addresses Debian Bugs: #674453,
-#674694)
-
-Programmer's Notes
-------------------
-
-The regression test suite can now run the integration tests in the
-tests directory in parallel, via "make -jN check".
-
-Add new test, f_zero_extent_length which tests e2fsck's handling of
-the case where all of the extents in the last extent tree block are
-uninitialized extents after i_size.
-
-Add a new test, f_jnl_errno, which checks handling of an error
-indication set in the journal superblock.
-
-Fix the test f_jnl_64bit so that it properly checks e2fsck's handling
-of a 64-bit journal.
-
-Add two tests, f_orphan_indirect_inode and f_orphan_extent_inode which
-tests e2fsck's handling of orphan inodes in preen mode, and truncation
-of extent inodes on the orphan list.
-
-Fixed more OS X portability issues.
-
-
-E2fsprogs 1.42.3 (May 14, 2012)
-===============================
-
-Fix a bug in the Unix I/O manager which could cause corruption of file
-systems with more than 16TB when e2fsprogs is compiled in 32-bit mode
-(i.e., when unsigned long is 32-bits).  Also fix a bug which caused
-dumpe2fs to incorrectly display block numbers > 32-bits.
-
-Improve the support for integrated quota files (where quota is a first
-class supported feature using hidden files in the ext4 file system).
-Previously the quota file was getting rewritten even when it was not
-necessary, and e2fsck would erroneously try to hide quota files which
-were already hidden.
-
-Quiet complaints in e2fsck when the total free blocks or inodes are
-incorrect in the superblock after an system crash, since we don't
-update nor depend on the superblock summaries at each commit boundary.
-
-Fixed a regression introduced in 1.42.2 which would cause applications
-outside of e2fsprogs which did not pass the EXT2_FLAG_64BIT (and so
-would were still using the legacy 32-bit bitmaps) to crash.  This was
-due to missing 32-bit compat code in side the function
-ext2fs_find_first_zero_generic_bmap().  (Addresses Red Hat Bugzilla:
-#808421)
-    
-Fix a bug which would cause mke2fs to fail creating the journal if
-/etc/mtab and /proc/mounts are missing.  (Addresses Sourceforge Bug:
-#3509398)
-    
-Updated/fixed various man pages.
-
-Update Czech, Dutch, French, German, Polish, Sweedish, and Vietnamese
-translations
-
-Fixed various Debian Packaging issues.
-
-
-Programmer's Notes
-------------------
-
-Change the nonsensically wrong types in the function signature of the
-inline function ext2fs_find_first_zero_block_bitmap2().  This was
-caused by a cut and paste error; fortunately no code in e2fsprogs used
-this inline function, and there are any users of this functions
-outside of e2fsprogs.
-
-Add support for systems which have valloc(), but which do have
-posix_memalign() nor memalign() (such as MacOS 10.5).
-
-Refactor and clean up the allocation of aligned buffers for Direct I/O
-support.  Previously some allocations were requesting a greater
-alignment factor that what was strictly necessary.  Also optimize
-reading and writing bitmaps using Direct I/O when the size of the
-bitmap did not fully cover the file system blocksize.
-
-Reserve the codepoints for the INCOMPAT features LARGEDATA and
-INLINEDATA.
-
-Improved the regression test suite by adding some new integration
-tests (f_jnl_32bit, f_jnl_64bit) which detect breakage of the on-disk
-jbd2 format, as well as f_eofblocks which tests the new handling of
-uninitialized and initialized blocks beyond i_size.  Also add a new
-unit test which verifies 32-bit bitmaps support and the new
-find_first_zero primitives.
-
-Add a few dependencies to fix parallel (make -j) builds.
-
-Removed bash'isms which were breaking the regression test suite on
-systems where /bin/sh is not bash.
-
-The config.guess and config.sub have been updated to the 2012-02-10
-version.
-    
-Fix a portability problem caused by assuming the present of mntent.h
-means that setmntent() exists.  Instead, explicitly test for this in
-the configure script.
-
-If the sys/signal.h header file does not exist, don't try to include
-it, since it's not available on all systems.
-
-Add support for systems that do not support getpwuid_r()
-    
-The configure script now supports a new option,
---enable-relative-symlinks, which will install relative symlinks for
-the ELF shared library files.  (Addresses Sourceforge Bug: #3520767).
-    
-When building BSD shared libraries make sure the LDFLAGS variable is
-passed to the linker.  Fixing this allows, for example, e2fsprogs to
-be built in 32-bit mode on Mac OS X Lion (Addresses Sourceforge Bug:
-#3517272)
-    
-Fix gcc -Wall nitpicks
-
-
-E2fsprogs 1.42.2 (March 27, 2012)
-=================================
-
-The resize2fs program uses much less CPU and is much faster for very
-large file systems.  (Addresses Debian Bug: #663237)
-
-The seti and freei commands in debugfs can now take an optional length
-argument to set and clear a contiguous range of inodes.
-
-E2fsck will now make explicit checks for the EOFBLOCKS_FL, since we
-plan to remove support for it from the kernel file system driver.  It
-really wasn't very useful and was causing more problems than it
-solves.  Since e2fsck will complain if inodes that should have
-EOFBLOCKS_FL do not have the flag set, we are going to remove this
-check from e2fsprogs first, and then only remove the flag from the
-kernel much later.
-
-The mke2fs program can now use direct I/O via "mke2fs -D".  This will
-slow down the mke2fs, but it makes it more polite on a loaded server
-by limiting the amount of memory that gets dirtied by mke2fs when it
-is using buffered I/O.
-
-E2fsck was needlessly closing and re-opening the file system as a side
-effect of adding Multiple Mount Protection (MMP).  This isn't
-necessary for non-MMP file systems, so drop it.
-
-Print errors returned by ext2fs_open2() and ext2fs_check_desc() so we
-can more easily diagnose memory allocation failures caused by
-insufficient memory.  E2fsck will now abort if there are memory
-allocation failures when the file system is initially opened and
-during the block group descriptor checks.  (Addresses Google Bug:
-#6208183)
-
-If there are incorrect block group checks, e2fsck will now report the
-incorrect and corrected checksum values.
-
-The e2fsck progam can now write log files containing the details of
-the problems that were found and fixed directly, via configuration
-parameters in /etc/e2fsck.conf.
-
-Added the ability to limit the number of messages reported by e2fsck
-for a given problem type.  This avoids a potential bottleneck if there
-is a serial console which can cause a boot sequence to take a long
-time if e2fsck needs to report many, many file system errors.
-
-The dumpe2fs, debugfs, and tune2fs now use rbtree bitmaps, which cause
-them to use much less memory for large file systems.
-
-The dumpe2fs program will now print the expected block group checksum
-if it is incorrect.  This helps to diagnose problems caused by
-incorrect block group checksums.
-
-E2fsck now checks for extents with a zero length, since the kernel
-will oops if it comes accross such a corrupted data structure.  (See
-https://bugzilla.kernel.org/show_bug.cgi?id=42859)
-
-E2fsck has a number of bugs relating to discard that have been fixed.
-(1) Fixed a bug which could cause e2fsck to discard portions of the
-inode table which were actually in use.  (2) E2fsck will now avoid
-using discard if the block device doesn't zero data on discard, since
-otherwise this could cause problems if the file system gets corrupted
-in the future.  (3) E2fsck will now avoid using discard when it is run
-in read-only mode.  (4) Fixed a bug which caused e2fsck to not issue
-discards in the last block group.
-
-E2fsck's CPU utilization in pass 5 has been optimized, which will
-speed up e2fsck slightly.
-
-E2image will now skip copying uninitialized bitmap and inode table
-blocks.
-
-Fixed mke2fs -S so it does not corrupt the first block group's
-information.
-
-E2fsck will now check the new sysfs interface to determine if we are
-using the battery or AC mains.  (Addresses SourceForge Bug: #3439277)
-
-Updated/fixed various man pages.  (Addresses Debian Bug: #665427)
-
-Fixed various Debian Packaging issues.  (Addresses Debian Bug: #665885)
-
-Programmer's Notes
-------------------
-
-Fixed various portability issues for non-Linux systems, particularly
-MacOS X, as well as Linux systems running with the just-released glibc
-2.15.
-
-Fix file descriptor leak in ext2fs_close() if the file system with
-uninit_bg is opened read/only with a backup superblock.  (Addresses
-SourceForge Bug: #3444351)
-
-Fixed an invalid return in a non-void function in the quota code.
-(Addresses SourceForge Bug: #3468423)
-
-Fixed the debian rules file so that the calls to dpkg-buildflags works
-when the shell is dash.
-
-The debian package build now uses V=1 so that there is more
-information about potential build failures in debian buildd logs.
-
-If the uninit flags get cleared by functions such as
-ext2fs_new_inode() or ext2fs_new_block2(), we now make sure the
-superblock is marked dirty and the block group descriptor checksum is
-updated if necessary.
-
-The debian rules file will now try to load debian/rules.custom of it
-exists.  This flie can skip various builds for speed reasons if there
-is no need for the e2fsck-static or udeb packages.  Available
-customizations in the rules file includes SKIP_STATIC=yes,
-SKIP_BF=yes, and SKIP_DIETLIBC=yes.
-
-In addition, if the file misc/mke2fs.conf.custom.in exists in the
-source tree, it will be used instead of the standard misc.conf file in
-the upstream sources.  This makes it easier for Debian-derived systems
-to distribute a custom mke2fs.conf file without having to worry about
-merge issues if future versions of e2fsprogs makes changes in the
-upstream default version of mke2fs.conf.
-
-
-E2fsprogs 1.42.1 (February 17, 2012)
-===================================
-
-The mke2fs and e2fsck now use significantly less memory when creating
-or checking very large file systems.  This was enabled by adding
-extent-based bitmaps which are stored using a red-block tree, since
-block and inode allocations tend to be contiguous.
-
-The command mke2fs -S is used as a last ditch recovery command to
-write new superblock and block group descriptors, but _not_ to destroy
-the inode table in hopes of recovering from a badly corrupted file
-system.  So if the uninit_bg feature is enabled, mke2fs -S will now
-set the unused inodes count field to zero.  Otherwise, e2fsck -fy
-after using mke2fs -S would leave the file system completely empty.
-
-Since mke2fs recognizes mke3fs in argv[0] to mean "mkfs.ext3", also
-honor "mke4fs" to work the same as "mke2fs.ext4", since RHEL5 has
-installed an mke2fs binary using that name.
-
-The usage and help messages for the -G, -t and -T options in mke2fs
-have been fixed.
-
-If e2fsck needs to use the backup group descriptors, the
-ext2fs_open2() function clears the UNINIT bits to ensure all of the
-inodes in the file systems get scanned.  However, the code which reset
-the UNINIT flags did not also recalculate the checksum, which produced
-many spurious (and scary) e2fsck messages.  This has been fixed by
-resetting cheksums when the UNINIT bits are cleared.
-
-Relax a check in e2fsck which required that the block bitmap to be
-initialized when the inode bitmap is in use.  This will allow us to
-eventually eliminate code from the kernel which forcibly initialized
-the block bitmap when the inode bitmap is first used, requiring an
-extra journal credit and disk write.  (Addresses Google Bug: #5944440)
-    
-Make sure rdebugfs (which may be installed setuid or setgid disk) does
-not honor environment variables if euid != uid or egid != gid.
-
-Debugfs's ncheck command has been optimized and now is much more
-robust with faced with corrupted file systems.  The ncheck command
-also now has a -c option which will verify the file type information
-in the directory entry to see if matches the inode's mode bits.  This
-is extremely useful when trying to use debugsfs to determine which
-parts of the file system metadata can be trusted.
-
-E2image will try to use ftruncate64() to set the i_size for raw
-images, instead of writing a single null byte.  This avoid allocating
-an extra block to the raw image, for those file systems and/or
-operating systems that support this.  (Linux does.)  In addition, fix
-a logic bug that caused the file to not be properly extended if the
-size of the last hole was exactly an multiple of a megabyte.
-
-Fixed a bug in resize2fs where for 1k and 2k file systems, where
-s_first_data_block is non-zero, this wasn't taken into account when
-calculate the minimum file system size for use with the -M option.
-
-Fixed the badblocks program to honor the -s flag when in read-only -t
-mode.  (Addresses Debian Bug #646629)
-
-Update Czech, Dutch, French, Polish, and Sweedish translation from the
-Translation Project.
-
-Fixed various Debian Packaging issues so that dpkg-buildflags is used
-if present, which allows e2fsprogs to be built with security hardening
-flags.  (Addresses Debian Bugs: #654457)
-
-Programmer's Notes
-------------------
-
-Fix a bug in ext2fs_clear_generic_bmap() when used for 32-bit bitmaps.
-This was only an issue for programs compiled against e2fsprogs 1.41
-that manipulate bitmaps directly.  (Addresses Sourceforge Bugs:
-#3451486)
-
-The libext2fs library now uses sysconf() to fetch the page size, instead
-of the deprecated getpagesize().
-
-The ext2fs_get_pathname() function will return a partial path if an a
-directory in the path is not a directory, displaying it as an inode
-number in angle brackets instead of giving up and displaying an error.
-This is much more helpful when a user is trying to debug a corrupted
-file system.
-
-Codepoints for the RO_COMPAT_REPLICA feature has been reserved.
-
-Added a new library function, ext2fs_file_get_inode_num(), for use by
-fuse2fs.
-
-Fixed a bug in ext2fs_file_set_size2() so that when it is truncating a
-file, it actually works.
-
-The block iterator now properly honors the BLOCK_ABORT flag for
-extent-based flags.  Previously, it didn't, which generally made code
-be less efficient, but it could cause bugs in ext2fs_link(), for
-example, by causing it to insert multiple directory entries.
-
-Fixed an (harmless other than causing a compiler warning) use of an
-uninitialized variable in e2fsck's MMP code.
-
-
-E2fsprogs 1.42 (November 29, 2011)
-==================================
-
-This release of e2fsprogs has support for file systems > 16TB.  Online
-resize requires kernel support which will hopefully be in Linux
-version 3.2.  Offline support is not yet available for > 16TB file
-systems, but will be coming.
-
-This release of e2fsprogs has support for clustered allocation.  This
-reduces the number of block (now cluster) bitmaps by allocating and
-deallocating space in contiguous power-of-2 collections of blocks,
-which are called clustered.  This is a file system level feature,
-called 'bigalloc', which must be enabled when the file system is
-initially formatted.  It is not backwards compatible with older
-kernels.
-
-Added support for the Multi-Mount Protection (MMP) feature.
-
-E2fsck more efficiently uses scratch files for really big file
-systems.  (This is a feature that has to be turned on explicitly; see
-[scratch_files] in the e2fsck.conf man page.)
-
-Fix a bug in e2fsck where if the free blocks and inodes counts are
-incorrect, e2fsck would fix them without printing an error message.
-This would cause a "*** FILE SYSTEM WAS MODIFIED ***" message without
-any explanation of what was fixed.
-
-E2fsck will no longer attempt to clone an extended attribute block in
-pass1b handling if the file system does not support extended
-attributes.
-
-E2fsck will be more careful accidentally asking the user to continue
-if the file system is mounted, so that an escape sequence won't cause
-a false positive.  (Addresses Debian Bug: #619859)
-
-E2fsck now uses less cpu time in pass 5 when large portions of the
-bitmaps are uninitialized.
-
-E2fsck will no longer segault when a corrupted file system has a bad
-extent, and removing it leads to a block needing to be deallocated.
-(Addresses SourceForge Bug: #2971800)
-
-E2fsck will catch termination signals (segfaults, bus errors, sigfpe)
-and print debugging information to make it easier to find potential
-problems.
-
-E2fsck will check to see if the bad block inode looks insane, and will
-skip trying to use if it certain fields which should be zero look
-non-zero.  This is to avoid a corrupted bad block inode causing e2fsck
-to get confused and do more harm than good.
-
-If e2fsck modifies certain superblock fields which the kernel doesn't
-look at, it will now mark the superblock as dirty without marking the
-file system as changed.  This avoids signalling the init scripts that
-a reboot is necessary, since the kernel isn't going to look at those
-fields, so it won't care if they have been changed.
-
-Fixed a bug in the libext2fs library (in the binary search routine of
-the icount abstraction) that could (very, very rarely) cause e2fsck to
-die in the middle of pass 1 or pass 2 processing.
-
-E2fsck will not try to do a discard operation if the -n option was
-specified on the command line.
-
-E2fsck now supports an extended "discard" option which will cause
-e2fsck to attempt discard all unused blocks after a full, successful
-file system check.
-
-E2fsck will check for the bad block inode to make sure it looks sane
-before trusting it, to avoid causing more harm than good to the file
-system.
-
-E2fsck now returns additional status bits in its exit code if it
-aborts early in the e2fsck run.
-
-E2fsck now correctly calculates the maximum file size in the case of
-the huge_file file system feature enabled without extents.
-
-The mke2fs and e2fsck programs now tries to use the punch hole command
-as a "discard" when operating on normal files.
-
-The e2image program now supports the qcow2 format, which is a more
-efficient way of capturing file system dumps.
-
-Mke2fs now supports the [devices] stanza in mke2fs.conf which allows
-per-device defaults to be specified in the configuration file.
-
-Mke2fs now supports the reserved_ratio relation in the [defaults] and
-[fs_types] section in mke2fs.conf.
-
-Mke2fs now creates extent-mapped directories for the root and
-lost+found directories.
-
-Mke2fs will skip zero'ing the journal if the extended option
-"lazy_journal_init" is specified.  This can save a lot of time, but it
-does add a small amount of risk if the system crashes before the
-journal is overwritten entirely once.  It is epsecially useful for
-testing.
-
-Mke2fs will now create file systems that enable user namespace
-extended attributes and with time- and mount count-based file
-system checks disabled.
-
-Mke2fs will not set a stride or strip size of one block based on block
-device attributes obtained from sysfs.
-
-Mke2fs now displays a progress report during the discard process.
-
-Mke2fs now handles extreme file system parameters correctly which
-previously caused the inodes per group to drop below 8, leading to a
-segfault.  (The inodes per group must be a multiple of 8, but the code
-didn't correctly deal with an inodes per group count less than 8.)
-
-Mke2fs and tune2fs previously would give an error if the user tried
-setting the stride and stripe-width parameters to zero; but this is
-necessary to disable the stride and stripe-width settings.  So allow
-setting these superblock fields to zero.  (Addresses Google Bug:
-#4988557)
-
-Mke2fs now gives a warning if the auto-detected block size exceeds the
-system's page size.
-
-If the enable_periodic_fsck option is false in /etc/mke2fs.conf (which
-is the default), mke2fs will now set the s_max_mnt_count superblock
-field to -1, instead of 0.  Kernels older then 3.0 will print a
-spurious message on each mount then they see a s_max_mnt_count set to
-0, which will annoy users.  (Addresses Debian Bug: #632637)
-    
-The default mke2fs.conf now has entries for "big" and "huge", which
-are needed for very big file systems.
-
-The resize2fs program now has support for a new online resize ioctl
-that can support file systems > 16TB, once it arrives in v3.x kernels.
-
-Fixed bug which caused resize2fs to fail when shrinking an empty file
-system down to its minimal size.  (Addresses Sourceforge Bug #3404051)
-
-Fixed tune2fs's mount options parsing.  (Addresses Debian Bug: #641667)
-
-Allow tune2fs to remove external journals if the device can not be
-found.
-
-Debugfs's icheck will now correctly find inodes which use the
-searched-for block as an extended attribute block.
-
-Debugfs now has a new "punch" command which remove blocks from the
-middle of an inode.
-
-Debugfs now has a new "e2freefrag" command which analyzes the free
-space fragmentation of the file system, using the same code as the
-e2freefrag program.
-
-Debugfs now has a "filefrag" command which displays information about
-a file's fragmentation.
-
-Add support to build a metadata-only, read-only, stripped-down version
-of debugfs called rdebugfs.
-
-Fixed a potential stack overrun bug in debugfs.
-
-The badblocks program now correctly recovers from I/O errors when
-direct I/O is being used.  The badblocks command now also supports a
--B option which forces the use of buffered I/O, and the -v option will
-provide a more detailed breakdown of read, write, and failed
-comparison errors.
-
-Added e4defrag tool which uses the EXT4_IOC_MOVE_EXT ioctl.
-
-Added support for journals larger than 2GB.
-
-Support using both hard links and symlinks when installing e2fsprogs.
-
-Add overflow checking to tune2fs -i's fsck interval, which must fit in
-a 32-bit field.
-
-The debugfs command now has a new 'blocks' command which prints out
-data blocks of a particular inode in a format which is useful for
-scripting.
-
-Filefrag will report 0 extents correctly in verbose mode.  (Addresses
-RedHat Bugzilla: #653234)
-
-Filefrag has been fixed so its -v report prints the correct expected
-block number (previously there had been an off-by-one error).  In
-addition, it will now display the number of contiguous extents when -v
-is not specified.  This makes it consistent with the number of extents
-printed when the -v option was specified.  In addition, the number of
-contiguous extents is far more interesting/useful than the number of
-physical extents for very large files.  (Addresses Debian Bug:
-#631498, #644792)
-    
-Logsave's usage message has been fixed.  (Addresses Debian Bug:
-#619788)
-
-Avoid an infinite loop in ext2fs_find_block_device() if there are
-symlink loops in /dev caused by a buggy udev.
-
-Added a useful "fallocate" program to the contrib directory.
-
-Fixed an ABI compatibility problem in libext2fs which broke the dump
-program.  Also added back some macros which dump needed so it could
-compile against the latest version of ext2_fs.h (Addresses Debian Bug:
-#636418)
-
-Fixed parsing of MNTOPT_ options for tune2fs and debugfs (Addresses
-Debian Bug: #641667)
-
-Added internationalization support for libcom_err error table strings.
-
-Fixed various spelling mistakes found in various output strings found
-by I18N translators.
-
-Update translations: French, Chinese, Germany, Indonesian, Swedish,
-Vietnamese, Polish, Dutch, Czech.  (Addresses Debian Bugs: #520985,
-#620659)
-
-Fixed various Debian Packaging issues.  (Addresses Debian Bugs:
-#614662, #632169, #641838, #627535, #629355)
-
-Updated/clarified man pages.  (Addresses Debian Bugs: #639411,
-#642193, #634883)
-
-Programmer's Notes
-------------------
-
-Initial support for quota as an integrated feature, where the quota
-files are hidden system files that are automatically maintained by
-e2fsck is present, although disabled by default.  It must be enabled
-by using the configure option --enable-quota.
-
-Reserved the on-disk fields for the metadata checksum and snapshot
-features, which are currently in development.
-
-The ext2fs library now has the new functions ext2fs_punch(),
-ext2fs_get_memzero() and ext2fs_file_get_inode().
-
-The ext2fs library now has support for calculating the crc32c checksum
-(via the new functions ext2fs_crc32c_be and ext2fs_crc32c_le).
-
-The I/O manager now supports the discard operation.
-
-Reserved file system code points for new 1st class quota feature.
-
-Shortened the compilation lines by moving the autoconf defines to
-a config.h header file.
-
-Fixed a potential free of an unitialized pointer in
-ext2fs_update_bb_inode().
-
-Fixed miscellaneous gcc -Wall and coverity warnings.
-
-Fixed portability issues for Mac OS X, Hurd, and FreeBSD.
-
-Fixed a build failure when OMIT_COM_ERR is defined.
-
-Improved error checking and fixed memory leaks caused by error return
-paths.
-
-Add ext2fs_flush2() and ext2fs_close2() which takes a flag to allow
-the fsync() to be skipped.
-
-Added a test for extent-mapped journals by mke2fs and tune2fs.
-
-Added a test for creating a large (over 4GB) journal using mke2fs.
-
-Added a test to make sure the inode size remains constant.
-
-The regression test script now prints the list of which tests failed.
-
-The regression test system now uses /tmp for its scratch files, which
-is often a tmpfs mounted file system and hence much faster.
-
-The i_e2image test was fixed so it works with valgrind.
-
-Tests that rely on debugfs are now skipped if debugfs wasn't built.
-
-Fixed the dependencies for "make check" so all required dependencies
-are built before running the gression tests.
-
-A link to com_err.h is installed in $(includedir) during a "make install".
-
-The po/*.gmo files are automatically rebuilt if they are missing or
-out of date.  This helps out Debian packaging.
-
-Allow ext2fs_get_memalign() to compile on systems that don't have
-posix_memalign().
-
-Fixed a namespace leak in libext2fs (tdb_null).
-
-
-E2fsprogs 1.41.14 (December 22, 2010)
-=====================================
-
-Fix spurious complaint in mke2fs where it would complain if the file
-system type "default" is not defined in mke2fs.conf.
-
-The resize2fs program will no longer clear the resize_inode feature
-when the number reserved group descriptor blocks reaches zero.  This
-allows for subsequent shrinks of the file system to work cleanly for
-flex_bg file systems.
-
-The resize2fs program now handles devices which are exactly 16T;
-previously it would give an error saying that the file system was too
-big.
-
-E2fsck (and the libext2fs library) will not use the extended rec_len
-encoding for file systems whose block size is less than 64k, for
-consistency with the kernel.
-
-Programming notes
------------------
-
-E2fsprogs 1.41.13 would not compile on big-endian systems.  This has
-been fixed.  (Addresses Sourceforge Bug: #3138115)
-
-The ext2fs_block_iterator2() function passed an incorrect ref_offset
-to its callback function in the case of sparse files.  (Addresses
-Sourceforge Bug: #3081087)
-    
-Fix some type-punning warnings generated by newer versions of gcc.
-
-
-E2fsprogs 1.41.13 (December 13, 2010)
-=====================================
-
-E2fsck now supports the extended option "-E journal_only", which
-causes it to only do a journal replay.  This is useful for scripts
-that want to first replay the journal and then check to see if it
-contains errors.
-
-E2fsck will now support UUID= and LABEL= specifiers for the -j option
-(which specifies where to find the external journal).  (Addresses
-Debian Bug #559315)
-
-E2fsck now has support for the problems/<problem code>/force_no
-configuration option in e2fsck.conf, which forces a problem to not be
-fixed.
-
-Dumpe2fs will now avoid printing large negative offsets for the bitmap
-blocks and instead print a message which is a bit more helpful for
-flex_bg file systems.
-
-Mke2fs will now check the file system type (specified with the -t
-option) to make sure it is defined in the mke2fs.conf file; if it is
-not, it will print an error and abort.  If the usage type (specified
-with the -T option) is not defined in mke2fs.conf, mke2fs will print a
-warning but will continue.  (Addresses Debian Bug #594609)
-
-Clarified error message from resize2fs clarifying that on-line
-shrinking is not supported at all.  (Addresses Debian Bug #599786)
-    
-Fix an e2fsck bug that could cause a PROGRAMMING BUG error to be
-displayed.  (Addresses Debian Bug #555456)
-
-E2fsck will open the external journal in exclusive mode, to prevent
-the journal from getting truncated while it is in use due to a user
-accidentally trying to run e2fsck on a snapshotted file system volume.
-(Addresses Debian Bug #587531)
-
-Fix a bug in e2fsck so it has the correct test for the EOFBLOCKS_FL
-flag.
-
-The tune2fs program can now set the uninit_bg feature without
-requiring an fsck.
-
-The tune2fs, dumpe2fs, and debugfs programs now support the new ext4
-default mount options settings which were added in 2.6.35.
-
-The e2fsck and dumpe2fs programs now support the new ext4 superblock
-fields which track where and when the first and most recent file
-system errors occurred.  These fields are displayed by dumpe2fs and
-cleared by e2fsck.  These new superblock fields were added in 2.6.36.
-
-Debugfs now uses a more concicse format for listing extents in its
-stat command.  This format also includes the interior extent tree
-blocks, which previously was missing from stat's output for
-extent-based files.
-
-Debugfs has a new option, -D, which will request Direct I/O access of
-the file system.
-
-Mke2fs will skip initializing the inode table if a device supports
-discard and the discard operation will result in zero'ed blocks.
-
-Badblocks will now correctly backspace over UTF-8 characters when
-displaying its progress bar.  (Addresses Gentoo Bug #309909; Addresses
-Debian Bugs #583782 and #587834)
-
-E2freefrag will now display the total number of free extents.
-
-Resize2fs -P no longer requires a freshly checked filesystem before
-printing the minimum resize size.
-
-Fixed a floating point precision error in a binary tree search routine
-that can lead to seg fault in e2fsck and resize2fs.
-
-Fixed a bug in e2fsck where if both the original and backup superblock
-are invalid in some way, e2fsck will fail going back to the original
-superblock because it didn't close the backup superblock first, and
-the exclusive open prevented the file system from being reopened.
-
-Fixed a big in e2freefrag which caused getopt parsing to fail on
-architectures with unsigned chars.  (Addresses Gentoo Bug: #299386)
-
-Clarified an mke2fs error message so a missed common in an -E option
-(i.e., mke2fs -t ext4 -E stride=128 stripe-width=512 /dev/sda1")
-results in a more understandable explanation to the user.
-
-Mke2fs now displays the correct valid inode ratio range when
-complaining about an invalid inode ratio specified by the user.
-
-Mke2fs now understands the extended option "discard" and "nodiscard",
-and the older option -K is deprecated.  The default of whether
-discards are enabled by default can be controled by the mke2fs.conf
-file.
-
-Mke2fs's handling of logical and physical sector sizes has been
-improved to reflect the fact that there will be some SSD's with 8k and
-16k physical sectors arriving soon.  Mke2fs will no longer force block
-size to be the physical sector size, since there will be devices where
-the physical sector size is larger than the system's page size, and
-hence larger than the maximal supported block size.  In addition, if
-the minimal and optimal io size are not exported by the device, and
-the physical sector size is larger than the block size, the physical
-sector size will be used to set the Raid I/O optimization hints in the
-superblock.
-
-E2fsck will now display a better, more specific error message when the
-user enters a typo'ed device name, instead of blathering on about
-alternate superblocks.
-
-Fixed various Debian Packaging Issues
-
-Updated/clarified man pages (Addresses Debian Bugs: #580236, #594004,
-#589345, #591083; Addresses Launchpad Bug: #505719)
-
-Update the Chinese, Chzech, Dutch, French, Germany, Indonesian,
-Polish, Swedish, and Vietnamese translations.
-
-
-Programmer's Notes
-------------------
-
-Fix a dependency definition for the static and profiled blkid
-libraries which could cause compile failures in some configurations.
-(Addresses Debian Bug: #604629)
-    
-Add support for Direct I/O in the Unix I/O access layer.
-
-Fixed a memory leak in the Unix I/O layer when changing block sizes.
-
-Fixed minor memory leaks in mke2fs.
-
-Added a new function to the ext2fs library, ext2fs_get_memalign().
-
-The tst_super_size test program will check to make sure the superblock
-fields are correctly aligned and will print them out so they can be
-manually checked for correctness.
-
-Fixed some makefile dependencies for test programs in lib/ext2fs.
-
-Reserved the feature flags and superblock fields needed for the Next3
-snapshot feature.
-
-Reserved the feature flags for EXT4_FEATURE_INCOMPAT_DIRDATA and
-EXT4_INCOMPAT_EA_INODE.
-
-
-E2fsprogs 1.41.12 (May 17, 2010)
-================================
-
-Mke2fs now gives a correct error message if the external journal
-device is not found.  (Addresses Red Hat Bug #572935)
-
-Resize2fs -P will now refuse to print a minimum size if the file
-system is not clean.  Previously it would go ahead and print a minimum
-size anyway, which might not be correct, leading to user confusion.
-
-E2fsck now tests for extents that begin at physical block 0 and
-rejects them as invalid.  (Addresses Google Bug: #2573806)
-    
-Fixed a bug in e2fsck which could cause it to crash when trying to
-remove an invalid extent and the block bitmaps hadn't yet been loaded.
-(Addresses SourceForge Bug: #2971800)
-    
-E2fsck now will completely skip time-based checks if the system clock
-looks insane or the option broken_system_clock is set in
-/etc/e2fsck.conf.
-
-E2fsck would previously report an i_blocks corruption for a 4T file
-created using posix_fallocate; this bug has been fixed.
-
-E2fsck will now correctly mark a sparse journal as invalid and will
-delete and recreate the journal to address the problem.
-
-E2fsck would previously incorrectly ask the user whether she would
-like to abort the file system check after finding a problem --- and
-then abort regardless of the user's answer.  This is annoying, and
-has been fixed.
-
-E2fsck can now continue even if it fails to recreate the resize
-inode; previously it would just abort the file system check
-altogether.
-
-E2fsck could potentially remove directory entries for inodes found in
-the unused region of the inode table; this would generally happen on
-ext4 file systems that do not use journaling.  This bug has been fixed
-by not clearing these directory entries once it has been established
-that bg_unused_inodes may not be trustworthy; once pass #2 has been
-completed, e2fsck will restart the file system check from the
-beginning, and then it will be safe to delete any directory entries
-pointing to inodes that appear to be deleted.  (Addresses Google Bug:
-#2642165)
-    
-E2fsck will not try to set the block group checksums if the user
-cancels the fsck with a control-C.  It's a bad idea to set the
-checksums if e2fsck hasn't been completed, and it often results an the
-error message, "Inode bitmap not loaded while setting block group
-checksum info".  (Addresses Launchpad Bug: #582035)
-
-The mke2fs program now queries the kernel for the physical as well as
-the logical sector size, and will not allow a blocksize below the
-logical, and will strongly encourage a blocksize at least as big as
-the physical blocksize.  This is needed for 4k sector drives that
-emulate 512 byte sector sizes.
-
-Mke2fs will now allow a flex_bg size of 1.  This is unusual, and
-rarely needed, but it is a legal value.
-
-E2fsck will check for cases where the EOFBLOCKS_FL is set when it is
-not needed, and offer to clear it; this is a sign of a kernel bug, but
-more importantly, some released kernels may crash when this situation
-is encountered on ext4 file systems.  (Addresses Google Bug: #2604224)
-    
-E2fsck will use the EOFBLOCKS_FL flag exclusively to check whether
-i_size is correct.  (Kernels starting with 2.6.34 will set
-EOFBLOCKS_FL.)
-
-The com_err library will now only output ^M (a CR character) when the
-tty is in raw mode.
-
-Update the Czech, Chinese, Dutch, French, Germany, Indonesian, Polish,
-and Vietnamese translations.
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bugs: #571247, #563487)
-
-
-Programmer's Notes
-------------------
-
-The regression test suite now uses its own mke2fs.conf file, so that
-downstream distributions want change the mke2fs.conf file which is
-distributed in the RPM or dpkg file, without worrying about screwing
-up the regression test results.
-
-Always build namei.o so that building with configure --disable-debugfs
-works correctly.  Long-term, if we care about reduced e2fsprogs
-builds, we need a more general solution for deciding what .o files are
-needed for a particular build.  Given that install floppies are going
-(gone?) the way the dodo bird, we probably don't care, though.
-(Addresses Sourceforge Bug: #2911433)
-
-Add configure options --enable-symlink-build and
---enable-symlink-install, which allow e2fsprogs be built using
-symlinks instad of hard links, and to be installed using symlinks
-instead of hard links, respectively.  It is useful when the file
-system where the build is taking place, or the file system where
-e2fsprogs is installed, can't handle hard links for some reason.
-(Addresses Sourceforge Bug: #1436294)
-
-Fixed compile warning in mke2fs.c.
-
-    
-E2fsprogs 1.41.11 (March 14, 2010)
-==================================
-
-E2fsck will no longer give a fatal error and abort if the physical
-device has been resized beyond 2**32 blocks.  (Addresses Launchpad
-Bug: #521648)
-
-Debugfs has a bug fixed so that "logdump -b <blk>" now properly shows
-the allocation status of the block <blk>.  (Addresses Debian Bug:
-#564084)
-    
-E2fsck now prints a much more emphatic and hopefully scary message
-when a file system is detected as mounted while doing a read/write
-check of the filesystem.  Hopefully this will dissuade users from
-thinking, "surely that message doesn't apply to *me*" :-(
-
-E2fsck -n will now always open the file system read-only.  We now
-disallow certain combination of options which previously were manual
-exceptions; this is bad because it causes users to think they are
-smarter than they really are.  So "-n -c", "-n -l", "-n -L", and "-n
--D" are no longer supported.  (Addresses Launchpad Bug: #537483)
-    
-In e2fsprogs 1.41.10, mke2fs would ask for confirmation to proceed if
-it detected a badly aligned partition.  Unfortunately, this broke some
-distribution installation scripts, so it now just prints the warning
-message and proceeds.  (Addresses Red Hat Bug: #569021. Addresses
-Launchpad Bug: #530071)
-    
-Mke2fs would take a long time to create very large journal files for
-ext4.  This was caused by a bug in ext2fs_block_iterate2(), which is
-now fixed.
-
-E2fsck now understands the EOFBLOCKS_FL flag which will be used in
-2.6.34 kernels to make e2fsck not complain about blocks deliberately
-fallocated() beyond an inode's i_size.
-
-E2fsprogs 1.41.10 introduced a regression (in commit b71e018) where
-e2fsck -fD can corrupt non-indexed directories when are exists one or
-more file names which alphabetically sort before ".".  This can happen
-with ext2 filesystems or for small directories (take less than a lock)
-which contain filenames that begin with a space or some other
-punctuation mark.  (Addresses Debian Bug: #573923, Addresses Launchpad
-Bug: #525114)
-
-
-Programmer's Notes
-------------------
-
-Add new test, f_rehash_dir, which checks to make sure e2fsck -D works
-correctly.
-
-The libcom_err function now has support for Heimdal's com_right_r
-function().  (Addresses Sourceforge Bug: #2963865, Addresses Debian
-Bug: #558910)
-
-
-E2fsprogs 1.41.10 (February 7, 2010)
-====================================
-
-Fix resize2fs bug which causes it to access invalid memory.
-
-Add libss support for libreadline.so.6.
-    
-Fix e2fsck's check for extent-mapped directory with an incorrect file
-type.
-
-Add new e2fsck.conf configuration option, default/broken_system_clock
-to support systems with broken CMOS hardware clocks.  Also, since too
-many distributions seem to have broken virtualization scripts now,
-e2fsck will by default accept dates which are off by up to 24 hours by
-default.  (Addresses Debian Bugs: #559776, #557636)
-
-Fix a bug where mke2fs may not use the best placement of the inode
-table when there is only room for a single block group in the last
-flex_bg.
-
-E2fsck is now smarter when it needs to allocate blocks in the course
-of fixing file system problems.  This reduces the number of spurious
-differences found in pass #5.
-
-E2fsck will no longer rehash directories which fit in a single
-directory block.
-
-E2fsck now correctly handles holes in extent-mapped directories (i.e.,
-sparse directories which use extents).
-
-Fix big-endian problems with ext2fs_bmap() and ext2fs_bmap2().
-
-Fix a bug in filefrag where on platforms which can allow file systems
-with 8k blocks, that it doesn't core dump when it sees a file system
-with 8k block sizes.  (Thanks to Mikulas Patocka for pointing this
-out.)
-
-E2fsck will correctly fix directories that are have an inaccurate
-i_size as well as other problems in a single pass, instead of
-requiring two e2fsck runs before the file system is fully fixed.
-
-Fix e2fsck so it will correctly find and detect duplicate directory
-entries for non-indexed directories.  ( Addresses Sourceforge Bug:
-#2862551)
-    
-Mke2fs will use BLKDISCARD to pre-discard all blocks on an SSD or
-thinly-provisioned storage device.  This can be disabled using the -K
-option.
-
-Enhance libext2fs so it works around bug in Linux version 2.6.19
-and earlier where the /proc/swaps file was missing the header on
-the first line.
-
-Fix bug in Linux version 2.6.19 and earlier where the /proc/swaps file
-was missing the header on the first line.
-
-Fix some big-endian bugs in e2fsck and libext2fs.
-
-Fix resize2fs so it works correctly on file systems with external
-journals instead of failing early with the error "Illegal inode
-number".
-
-Fix libss so that it does not seg fault when using a readline library
-which does not supply a readline_shutdown() function.
-
-Updated dumpe2fs's usage message so it correctly gives the right
-arguments summary for "-o superblock=<num>" and "-o blocksize=<num>".
-(Addresses Launchpad Bug: #448099)
-   
-Teach libext2fs to ignore the high 32 bits of the i_blocks field
-when huge_file file system feature is set, but the inode does not
-have the HUGE_FILE_FL flag set.
-
-Fix e2fsck's handling of 64-bit i_blocks fields.
-
-E2fsck will now print "Illegal indirect block", "Illegal
-double-indirect block", etc., instead of "Illegal block #-1" or
-"Illegal block #-2", etc.  This makes it easier for users to
-understand what has gone wrong.  (Addresses SourceForge Bug: #2871782)
-
-Mke2fs now will obtain get device topology information from blkid and
-use it to populate the superblock stride and stripe sizes.  It will
-also warn if the block device is misaligned
-
-Fix file descriptor leaks in fsck and debugfs.  (Addresses Novell Bug:
-##524526)
-
-Fix the libext2fs library code to round up the bitmap size to a 4-byte
-boundary, to prevent spurious seg faults caused by the x86
-architecture.  This doesn't affect Linux systems, but was a major
-problem on a number of *BSD systems.  (Addresses Sourceforge Bug:
-#2328708)
-
-Fix resize2fs's minimum size required for a file system so it doesn't
-fail when "resize2fs -M" is run.  (Addresses RedHat Bugzilla: #519131)
-    
-Dumpe2fs now prints summary information about the contents of the
-journal.
-    
-Avoid printing scary error messages when e2fsck starts running
-problems on low-memory systems, as it tends to panic and mislead the
-user.  (Addresses Debian Bug: #509529)
-
-Fix blkid's modules.dep parser so it handles compressed (.ko.gz)
-modules files.  (Address Red Hat Bug: #518572)
-    
-Fix tune2fs so it can add a journal when an extent-enabled file system
-is mounted.  (Addresses Launchpad bug: #416648)
-
-Update Czech, Indonesian, Polish and Vietnamese translations (from the
-Translation Project).
-    
-Update/clarify man pages.  (Addresses Sourceforge Bug: #2822186)
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bugs: #540111)
-
-Programmer's Notes
-------------------
-
-The configure script supports the --with-cc, --with-ccopts, and
---with-ldopts options.  Instead, the more standard use of CC=,
-CCFLAGS=, and LDFLAGS= in the configure command line is used instead.
-Also, --with-ld, which never worked, was also removed.
-(Addresses Sourceforge Bug: #2843248)
-
-The in-tree header files are only used if the in-tree uuid or blkid
-libraries are used.  Otherwise, use the system-provided uuid or blkid
-header files if using the system-provided libraries.
-
-Fix some build failures caused by --disable-* configure options.
-
-Work around a bug in autoconf 2.64.
-
-
-E2fsprogs 1.41.9 (August 22, 2009)
-==================================
-
-Fix a bug in e2fsck routines for reallocating an inode table which
-could cause it to loop forever on an ext4 filesystem with the FLEX_BG
-filesystem feature with a relatively rare (and specific) filesystem
-corruption.  This fix causes e2fsck to try to find space for a new
-portion of the inode table in the containing flex_bg, and if that
-fails, the new portion of the inode table will be allocated in any
-free space available in the filesystem.
-
-Make e2fsck less annoying by only asking for permission to relocate a
-block group's inode table once, instead of for every overlapping
-block.  Similarly, only ask once to recompute the block group
-checksums, instead of once for each corrupted block group's checksum.
-
-Fix filefrag to avoid print the extent header if the FIEMAP ioctl is
-not present, and it needs to fall back to using the FIBMAP ioctl.
-
-Fix filefrag to correctly print the number of extents for zero-length
-files.  (Addresses Debian Bug: #540376)
-
-Filefrag now has a -B option which forces the use of the FIBMAP ioctl
-to more easily debug the FIBMAP code.
-
-Fixed filefrag for non-extent based files.
-
-Add a new program, e2freefrag, which displays information about the
-free space fragmentation in an ext2/3/4 filesystem.
-
-Fix inode resizing via tune2fs -I so that it works correctly in the
-face of non-empty bad blocks inodes, and if the filesystem was
-formatted using the "mke2fs -E stride=N" option for RAID arrays.
-
-Fix regression in ext2fs_extent_set_bmap() caused e2fsck -fD to fail
-and corrupt large directories if the directory needs to shrink by more
-than one block.  (Addresses Debian Bug: #537510)
-    
-Fix e2fsck's buggy_init_scritps=1 so that the if the last write and/or
-last mount times are in the future, they are corrected even if
-buggy_init_scripts is set.  This is needed because otherwise resize2fs
-will refuse to resize the filesystem, even after running "e2fsck -f".
-(Addresses Launchpad bug: #373409)
-
-E2fsck will now print much fuller information when the last mount time
-or last written time is in the future, since most people can't seem to
-believe their distribution has buggy init scripts, or they have a
-failed CMOS/RTS clock battery.
-
-Enhance dumpe2fs to dump the extent information via the 'stat'
-command, and more detailed extent information via the new command
-'dump_extents'.
-    
-Update French, Polish, Czech, and Sweedish translation from the
-Translation Project.
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.
-
-Programmer's Notes
-------------------
-
-Fixed miscellaneous gcc -Wall warnings.
-
-Fixed memory leak in error path in ext2fs_block_iterate2()
-
-Fixed non-Linux build of the intl directory by adding support for the
-E/Q/V macros.
-
-The bitmap read/write functions now treat uninitialized bitmaps as
-unallocated; this fixes a number of problems in all e2fsprogs for ext4
-filesystems when there is a need to allocate new blocks or inodes, and
-there aren't any free blocks or inodes in the already-used block
-groups.
-
-Improve ext2fs_extent_set_bmap() to avoid creating new extents which
-get inserted into the extent tree when they are not needed.
-    
-
-E2fsprogs 1.41.8 (July 11, 2009)
-================================
-
-Fix resize2fs's online resizing, fixing a regression which in
-e2fpsrogs 1.41.7.   (Addresses Debian Bug: #535452)
-
-Fix potential filesystem corruptions caused by using resize2fs to
-shrinking ext4 filesystems with extents enabled.  (Addresses Red Hat
-Bug: #510379)
-
-Optimize uuid_generate() to avoid running uuidd if it is not setuid or
-setgid and the currently running program doesn't have write access to
-the uuidd work directory.
-
-Add safety checks (for non-Linux systems) so that uuidd isn't run with
-file descriptors 0, 1, and 2 closed; and if they are closed, uuidd
-will be careful not to close the file descriptor for its unix domain
-socket when it detaches itself from the controlling tty.  Also add
-safety checks so that if the unix domain socket between the uuid
-library and uuidd program is closed for any reason, both the library
-and the uuidd will return an appropriate error code instead of looping
-in an infinite loop.
-
-The e2croncheck script, which creates an LVM snapshot and then checks
-the ext3/4 filesystem via the LVM snapshot, has been added to the
-contrib directory.
-
-Fix filefrag program for files that have more than 144 extents.
-
-Update French, Polish, Czech, Indonsian, and Sweedish translation from
-the Translation Project.
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bug #535530)
-
-Update/clarify man pages.
-
-Programmer's Notes
-------------------
-
-Fix compilation problem when configured with --disable-uuid.
-
-Don't build uuidgen if configured with --disable-uuid.
-
-Add the new library function ext2fs_test_inode_bitmap_range(), and
-optimized ext2fs_test_block_bitmap_range(), which will be needed for
-future optimizations for e2fsck.
-
-Fix makefile dependencies for libcom_err so that the Makefiles work
-well on non-GNU make program.  (Addresses Sourceforge Patches: #2813809)
-
-Enhance the build system so that the full set of commands executed by
-the Makefiles are displayed, instead of the Linux kernel summary
-output, if the build was configured with --enable-verbose-makecmds, or
-if GNU make is in use and the V variable is non-null, i.e., via "make
-V=1".
-
-
-E2fsprogs 1.41.7 (June 29, 2009)
-================================
-
-Fix a bug in libext2fs which can cause e2fsck and resize2fs to write
-uninitalized data into the portion of the inode beyond the first 128
-bytes when operating on inodes mapped via extents; potentially
-corrupting filesystems.
-
-Fix memory leaks in e2fsprogs, including a very large memory leak
-which can cause e2fsck to run out of memory when checking very large
-filesystems using extents.
-
-The logsave program will now filter out the ^A and ^B characters when
-writing to the console.
-
-Harden ext2fs_validate_entry() so that lsdel will not read beyond the
-end of the block even if the directory block is corrupted.
-
-Fix debugfs from core dumping if the logdump command fails to open the
-output file.
-
-Enhance badblocks to print the currently tested block number when
-interrupted with ^C.
-
-Fix lsattr to exit with a non-zero status when it encounters errors.
-(Addresses RedHat Bugzilla #489841)
-
-Fix e2fsprogs to use the same encoding for rec_len in 64k (and larger)
-filesystems as the kernel when encoding rec_len >= 64k.  For 64k
-filesystems (currently all that is supported by e2fsprogs, this is
-only a minor corner case).
-
-Resize2fs will now update the journal backup fileds in the sup0erblock
-if the journal is moved; this avoids an unnecessary full fsck after
-resizing the filesystem.  (Addresses RedHat Bugzilla: #505339)
-    
-Fix libext2fs to properly initialize i_extra_size when creating the
-journal and resize inodes.
-
-Change badblocks to allow block sizes larger than 4k.
-
-Fix filefrag progam so it correctly checks for errors from the fiemap ioctl.
-
-Update Chinese and Czech translation from the Translation Project.
-
-Clean up various man pages.  (Addresses Debian Bug #531385 and #523063)
-
-
-Programmer's Notes
-------------------
-
-Add --disable-libuuid option to configure which uses an in-system
-installed version of libuuid; the private version is enabled by
-default.
-
-Add --valgrind-leakcheck option to the test_script program which runs
-valgrind with the appropriate options to find memory leaks.
-
-
-E2fsprogs 1.41.6 (May 30, 2009)
-===============================
-
-Fix a critical regression in e2fsck introduced version 1.41.5 which
-can undo updates to the block group descriptors after a journal replay.
-
-If e2fsck receives an I/O error while replaying the journal, prompt
-the user whether they want to ignore the error or not; if e2fsck is
-run in preen mode, force fsck to abort the preen pass.
-
-Fix a bug which would cause e2fsck to core dump if the filesystem
-contains a corrupt extent header, and the user declines to clear the
-inode.  (Addresses Sourceforge Bug: #2791794)
-    
-Fix e2fsck to restart only once in the case of multiple block groups
-which inodes in use that are in the uninitialized part of the block
-group's inode table.
-
-To reduce user confusion, if the /etc/mtab file is missing
-ext2fs_check_mount_point and ext2fs_check_if_mounted will return a
-new, explicit error code to indicate this case.  This will cause
-e2fsck to give a clearer error message when the user is using buggy
-rescue CD's that don't properly set up /etc/mtab.  (Addresses Debian
-Bug: #527859)
-    
-Fix e2fsck so that if the primary group descriptors are corrupted, but
-the backup superblock is entirely invalid, to go back to using (and
-fixing) the priary group descriptors instead of completely giving up
-on the filesystem.  (Addresses Debian Bug: #516820)
-    
-Change e2fsck to not abort a preen pass if an inode is found to have
-i_file_acl_hi non-zero.  Ext3 filesystems don't care, and newer
-kernels (post 2.6.29) will ignore this field.  So let's fix it
-automatically during the preen pass instead of forcing the user to fix
-this up manually.  (Addresses Debian Bug: #526524)
-    
-Add resource tracking for e2fsck passes 1b through 1d.
-
-Speed up e2fsck by eliminating unnecessary journal checks if the
-filesystem is already mounted and doesn't need recovery (since the
-kernel would have run the journal when the filesystem was mounted.)
-Also speed up e2fsck by avoiding unnecessary block group descriptor
-updates in ext2fs_close().
-
-Add support to chattr to migrate inodes from using direct/indirect
-blocks to extents.
-
-Avoid corrupting the filesystem if there is an attempt to shrink a
-filesystem using resize2fs smaller than posible by making
-ext2fs_set_bmap() more careful not to delete the old block until the
-new block can be inserted.  In addition, fix a bug in how the minimum
-size of the filesystem (plus a safety margin) is calculated, and
-modify resize2fs to refuse to shrink the filesystem below that minimum
-size without the force flag.
-
-Teach blkid to try to figure out DM device names using take advantage
-of information in sysfs when running on kernels (2.6.29 and later)
-which provide this information in /sys/block/dm-<N>/dm/name; this is
-much faster than scanning for the devncie number in /dev/mapper.
-
-Fix blkid to prefer /dev/mapper/<name> device names instad of the
-private /dev/dm-X names.
-
-Add an -a option to debugfs's close_filesys command which writes any
-changes to the superblock or block group descriptors to all of the
-backup superblock locations.
-    
-Add support to the filefrag program to use the FIEMAP ioctl.
-
-Update Chinese translation from the Translation Project.
-
-Clean up various man pages.  (Addresses Red Hat Bugzilla: #502971 and
-Launchpad Bug: #381854)
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bug #506064)
-
-
-Programmer's Notes
-------------------
-
-Add test code to make sure e2fsck's problem.c doesn't have two problem
-codes assigned to duplicate values.
-
-Avoid using a hard-coded path for /bin/rm in block's test_probe.in.
-(Addresses Sourceforge Bug: #2780205)
-
-Clean up e2fsck by removing #ifdef RESOURCE_TRACK by adding an empty
-function declaration for init_resource_track() and
-print_resource_track() when RESOURCE_TRACK is not defined.
-
-The test code which is used to build the tst_csum progam has been
-moved from from tst_csum.c into csum.c under an #ifdef DEBUG to to
-avoid compile problems caused by not having a prototype for
-ext2fs_group_desc_csum().  (Addresses Sourceforge Bug #2484331)
-
-Update the config.guess and config.sub file to the latest from the
-FSF, to allow e2fsprogs to build on the avr32 platform.  (Addresses
-Debian Bug: #528330)
-
-Add a new function, ext2fs_extent_open2(), which behaves like
-pext2fs_extent_open(), but uses the user-supplied inode structure
-when opening an extent instead of reading the inode from disk.
-
-
-E2fsprogs 1.41.5 (April 23, 2009)
-=================================
-
-Fix a number of filesystem corruption bugs in resize2fs when growing
-or shrinking ext4 filesystems off-line (i.e., when the ext4 filesystem
-is not mounted).
-
-Debugfs can now set i_file_acl_high via the set_inodes_field command,
-and print a 64-bit file acl.  This is useful for debugging filesystem
-corruptions where the high bits of i_file_acl_high are set.  E2fsck
-will detect and fix non-zero i_file_acl_high on 32-bit filesystems
-since some Linux kernel versions pay attention to this field even when
-they shouldn't.
-
-Speed up e2fsck when checking clean filesystems by avoiding
-unnecessary block reads, and coalescing the block group descriptor
-blocks so they are read using a single read operation.
-
-The libuuid library will now close all file descriptors before running
-uuidd.  This avoids problems when the calling program has open sockets
-which then never get closed because uuidd is a long-running helper
-daeomn.  (Addresses Launchpad bug: #305057)
-
-In order to avoid unnecessary full filesystem checks by e2fsck after
-an on-line resize, e2fsck will ignore the NEEDS_RECOVERY flag set on
-the backup superblocks.  (Addresses Red Hat Bugzilla: #471925)
-
-Mke2fs will avoid trying to create the journal when run in
-superblock-only mode (mke2fs -S), since the left-over journal in the
-inode table will cause mke2fs to fail.
-
-Fix a bug in libext2fs functions that check to see if a particular
-device or filesystem image is mounted, which would cause these
-functions to report that a file identical to the (relative) pathname
-used by a pseudo-filesystem was mounted when in fact it was not.
-
-Update Czech translation from the Translation Project.
-
-Add Chinese (simplified) translation from the Translation Project.
-
-Fix support for external journals (which was broken in e2fsprogs
-1.41.4).
-
-Fix a regression in debugfs where the "stat" command when no
-filesystem was open would cause debugfs to crash with a segmentation
-violation.
-
-Starting in the 2.6.29 linux kernel, the ext4 filesystem driver can be
-used to support filesystems without a journal.  Update the blkid
-library so it understands this.
-
-The blkid library will remove an entry from the blkid cache
-representing the entire disk if partitions are found, since presuambly
-the device previously had no partition table, but has now transitioned
-to using a partition table.
-
-Add a check to mke2fs and tune2fs that the argument to the -m option
-(which specifies the reserved ratio) must be greater than zero.
-(Addresses Debian Bug: #517015)
-
-Add support for tracking the number kilobytes written to the
-filesystem via the superblock field s_kbytes_written.  It will be
-updated by the kernel as well as by e2fsprogs programs which write to
-the filesystem.  This is useful for tracking the wear to filesystems
-on Solid Sstate Drives.
-
-Fix compatibility issue in the libext2fs info file and makeinfo
-version 4.12.  (Addresses Red Hat Bugzilla: #481620)
-
-Update/clarify man pages.  (Addresses Debian Bug: #515693, #365619)
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details. (Addresses Debian Bug: #506279)
-
-Programmer's Notes
-------------------
-
-Fix Hurd compilation problem in e2fsck and tune2fs (Addresses Debian
-Bug: #521602)
-
-Fix various gcc compilation warnings and other programming cleanups.
-(Addresses Red Hat Bugzilla: #486997)
-
-Add support for building the blkid command statically.
-
-Add support for disabling the built-in blkid library in favor of a
-system-installed blkid implementation via the configure option
---disable-libblkid.
-
-
-E2fsprogs 1.41.4 (January 27, 2009)
-===================================
-
-Fixed a bug which could sometimes cause blkid to return an exit value
-of zero for a non-existent device (Addresses Debian Bug: #502541)
-
-Blkid will now recognize ext3 filesystems that have the test_fs flag
-set as ext3 filesystems.
-
-The blkid library will now recognize btrfs filesystems and swap
-devices currently used by user-level software suspend.
-
-Tune2fs now updates the block group checksums when changing the UUID
-to avoid causing e2fsck to complain vociferously at the next reboot.
-
-Tune2fs's inode size resizing algorithms have been fixed so it is not
-vastly inefficient for moderate-to-large filesystems, due to some
-O(n**2) and O(n*m) algorithms that didn't scale well at all.
-
-Fix tune2fs's inode resizing algorithm so it will not corrupt
-filesystems laid out for RAID filesystems; in addition, tune2fs will
-refuse to change the inode size for filesystems that have the flex_bg
-feature enabled.  (This is a limitation in the current implementation
-of tune2fs -I.)
-
-E2fsprogs 1.41 broke debugfs's logdump command for normal ext3/4
-filesystems with 32-bit block numbers, when the headers for 64-bit
-block numbers was added.  This regression has been fixed.
-
-Debugfs's ncheck command has been fixed to avoid printing garbage
-characters at the end of file names.
-
-Fix resize2fs for ext4 filesystems.  Some blocks that that need moving
-when shrinking filesystems with uninit_bg feature would not be moved.
-In addition, blocks and inode table blocks were not being correctly
-freed when shrinking filesystems with the flex_bg feable, which caused
-resize2fs -M to fail.  Finally, when blocks are moved, make sure the
-uninitialized flag in extents is preserved.
-
-Fix bug which caused dumpe2fs to abort with an error if run on a
-filesystem that contained an external journal.
-
-Some distributions used "mke3fs" as an alias for "mkfs.ext3"; check
-for this in argv[0] to provide better legacy support for these
-distributions.  This is a practice that should NOT be continued,
-however.
-
-Mke2fs now has a new option -U, which allows the user to specify the
-UUID that should be used for the new filesystem.
-
-Mke2fs will treat devices that are exactly 16TB as if they were 16TB
-minus one block.  This allows users who have read that ext3 supports
-up to 16TB filesystems and who create a 16TB LVM to not get confused,
-since the true limit is really 16TB minus one block.
-
-E2fsck will no longer abort an fsck run if block group has an errant
-INODE_UNINIT flag.
-
-E2fsck now distinguishes between fragmented directories and fragmented
-files in verbose mode statistics and in the fragcheck report.
-
-Fix a bug in e2fsck which casued it double count non-contiguous
-extent-based inodes.
-
-E2fsck will leave some slack space when repacking directories to allow
-room for a few directory entries to be added without causing leaf
-nodes to be split right away.
-
-Fix a bug which caused e2fsck to crash when it comes across a
-corrupted interior node in an extent tree with the error message:
-"Error1: Corrupt extent header on inode XXXXXX"
-
-E2fsck problem descriptions involving the journal are no longer
-referred to as "ext3" problems, since ext4 filesystems also have
-journals.
-
-Fix a long-standing bug in e2fsck which would cause it to crash when
-replying journals for filesystems with block sizes greater than 8k.
-
-Update Catalan translation from the Translation Project.
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details. (Addresses Debian Bugs: #503057, #502323, #511207)
-
-Programmer's Notes
-------------------
-
-Fix build of e2fsck.profiled, and add support for building profiled
-binaries in the misc directory if configured with --enable-profile.
-
-The ext2fs_open() function now performs more sanity checks on the
-superblock to avoid potential divide by zero errors by other parts of
-library.
-
-The ext2fs_read_inode_full() function now has a safety check to avoid
-a segmentation fault on corrupted filesystems.
-
-The ext2fs_new_inode() function now has a sanity check so that if the
-s_first_inode field in the superblock is insane, it will return
-EXT2_ET_INODE_ALLOC_FAIL instead of returning an invalid inode number.
-
-To avoid segmentation faults, ext2fs_block_alloc_stats() and
-ext2fs_inode_alloc_stats() now validates the passed inode or block
-number to avoid overrunning an array boundary.
-
-Various signed/unsigned errors for variables containing block numbers
-have been fixed.
-
-Accomodations for gcc's stupidity in not realizing that constant
-strings that do not contain a '%' character are safe to use in format
-strings have been made so that distributions that want to compile
-e2fsprogs with -Werror=format-security have an easier time doing so.
-
-Added a new 64-bit getsize interface, ext2fs_get_device_size2().
-
-Added the utility make-sparse.c to the contrib directory.
-
-The ext2fs_block_iterate2() function now reflects errors from
-ext2fs_extent_set_bmap() to the caller, if the callback tries to
-change a block on an extent-based file, and ext2fs_extent_set_bmap()
-fails for some reason (for example, there isn't enough disk space to
-split a node and expand the extent tree.
-
-The ext2fs_block_iterate2() function will preserve the uninit flag in
-extents when the callback function modifies a block in an extent-based
-file.
-
-E2fsck will now flag filesystems that have an insane s_first_ino field
-in their superblock, and attempt to use a backup superblock to repair
-the filesystem.
-
-
-E2fsprogs 1.41.3 (October 12, 2008)
-===================================
-
-E2fsck has been fixed so it prints the correct inode number for
-uinit_bg related problems.
-
-E2fsck will now offer to clear the test_fs flag if the ext4 filesystem
-is available on linux.  This can be disabled via a configuration
-option in /etc/e2fsck.conf.
-
-Fix a file descriptor leak in libblkid when checking to see if an ext4
-or ext4dev module exists.
-
-Fix a bug in e2fsck where in preen mode, if there are disk I/O errors
-while trying to close a filesystem can lead to infinite loops.
-(Addresses Red Hat Bugzilla #465679)
-    
-Fix a bug in resize2fs where passing in a bogus new size of 0 blocks
-will cause resize2fs to drop into an infinite loop.  (Addresses Red
-Hat Bugzilla: #465984)
-    
-Add a check in the Unix I/O functions in libext2fs so that when a
-device is opened read/write, return an error if the device is
-read-only using the BLKROGET ioctl.
-
-Fix debugfs's ncheck command so that it prints all of the names of
-hardlinks in the same directory.
-
-Fix a bug in libblkid so it correctly detects whether the ext4 and
-ext4dev filesystems are available, so that the ext4dev->ext4
-fallback code works correctly.
-
-Programmer's Notes
-------------------
-
-Fix a parallel build problem by making sure util/subst is built before
-trying to build the lib/et directory.  (Addresses Sourceforge Bug:
-#2143281)
-
-Updated "make depend" information for crc16.o
-    
-
-E2fsprogs 1.41.2 (October 2, 2008)
-==================================
-
-Fix e2fsck's automatic blocksize detection.  This fixes a regression
-from e2fsprogs 1.40.7 which caused e2fsck to fail if the user
-specifies a block number using the -b option if the blocksize option
-isn't also specified using -B.  Unfortunately, users very commonly
-invoke e2fsck using "e2fsck -b 32768 /dev/hdXXX" to use the backup
-superblock; in fack e2fsck will often suggest this kind of command
-line.  Oops.
-
-Enhance the debugfs's "ncheck" command so it will print all of the
-pathnames for the specified inodes.  (Previously, in some cases ncheck
-might not print a pathname for an inode at all if some of the other
-inodes had multiple hard links.)
-
-Enhance debugfs's "hash" command so the hash seed can be specified via
-a command-line option.  In addition, allow the hash algorithm to be
-specified by name instead of just by number.
-
-Fix e2fsck so that we don't accidentally print the translation file's
-header when asking the user a custom question so there is no prompt
-defined for a particular problem record.  For example, the question
-"Run journal anyway" will get the PO header tacked on because e2fsck
-erroneously passed the null string to _().  (Addresses Launchpad Bug:
-#246892)
-
-Enhance badblocks so that it can test a normal file which is greater
-than 2GB.
-
-Enhance the badblocks command so that it displays the time and
-percentage complete when in verbose mode.  (Addresses Debian Bug:
-#429739)
-
-Fix a potential memory leak in a error handling path in debugfs's
-ncheck function.
-
-Fix a potential memory corruption problem if a memory allocation fails
-in resize2fs.
-
-Fix the usage message for debugfs's logdump command to be consistent
-with its man manpage.
-
-Update Polish, French, Vietnamese, Dutch, Indonesian, German, Czech,
-and Sweedish translation from the Translation Project.
-
-Add documentation for the file I/O functions to the libext2fs.texinfo
-file.  (Addresses Debian Bug: #484877)
-    
-Update and clarified various man pages.  (Addresses Launchpad Bug
-#275272; Addresses Debian Bugs: #498100, #498101, #498102, #498103)
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details. (Addresses Debian Bug: #497619)
-
-Programmer's Notes
-------------------
-
-Fix a potential file descriptor leack in libcom_err by setting the
-close-on-exec flag for a fd used for debugging.  (Addresses Red Hat
-Bugzilla #464689)
-
-Fix a potential race in libcom_err by using sem_post/sem_init.  SuSE
-has been carrying a patch for a long time to prevent a largely
-theoretical race condition if a multi-threaded application adds and
-removes error tables in multiple threads.  Unfortunately SuSE's
-approach breaks compatibility by forcing applications to link and
-compile with the -pthread option; using pthread mutexes has
-historically been problematic.  We fix this by using sem_post/sem_init
-instead.
-
-Fix e2fsprogs-libs build failure due to 'subs' target.  (Addresses
-Sourceforge Bug: #2087502)
-
-Avoid linking e2initrd_helper, debugfs, blkid, and fsck with unneeded
-libraries when using ELF shared libraries.
-
-Fix ELF shared library when building on systems that don't already
-have the e2fsprogs shared libraries already installed.  (Addresses
-Sourceforge Bug: #2088537)
-
-Fix the pkg-config files so they work correctly when linking with
-static libraries and fix the include directory so programs don't have
-to use #include <ext2fs/ext2fs.h>, but can use #include <ext2fs.h>
-instead.  (Addresses Sourceforge Bug: #2089537)
-    
-Make sure ext2fs_swab64() is compiled for all platforms, and not just
-for x86.  (Addresses Debian Bug: #497515)
-    
-Remove the unused ext2fs_find_{first,ext}_bit_set() functions for all
-non-x86 platforms.  (They had been removed for x86 earlier.)
-
-Fix diet libc compilation support, which had bitrotted due to lack of
-TLC.  Fixing this improves general portability.
-
-When installing the link library when using ELF shared libraries,
-avoid using absolute pathnames if the link library and the shared
-library are installed in the same directory.  (Addresses Sourceforge
-Bug: #1782913)
-
-Fix gen-tarball so it will work even if the top-level directory has
-been renamed to something other than "e2fsprogs".  Also make
-gen-tarball print the size of the resulting tar.gz file.
-
-
-E2fsprogs 1.41.1 (September 1, 2008)
-====================================
-
-Many people are forgetting to update their mke2fs.conf file, and this
-causes ext3, ext4, and ext4dev filesystems won't get created with the
-proper features enabled.  We address this in two ways.  First, mke2fs
-will issue a warning if there is not definition for an ext3, ext4, or
-ext4dev filesystem and the user is trying to create such a filesystem
-type.  Secondly, when installing from a source build, "make install"
-will provide basic configuration file handling for /etc/mke2fs.conf.
-If it exists, and does not mention ext4dev, it will be moved aside to
-/etc/mke2fs.conf.e2fpsrogs-old and the new /etc/mke2fs.conf file will
-be installed.  If the existing /etc/mke2fs.conf file does mention
-ext4dev, then "make install" will install official mke2fs.conf file as
-/etc/mke2fs.conf.e2fsprogs-new and issue a message to the user that
-they should look to see if any changes need to be merged.
-
-The mke2fs program will now create the journal in the middle of the
-filesystem, since this minimizes seek times on average for fsync-heavy
-workloads.  In addition, mke2fs will now create journals using extents
-for filesystems that support them.  This results in a more efficient
-encoding for the journal since it eliminates the need for using
-indirect blocks.
-
-The mke2fs program will avoid allocating an extra block to the
-journal.  (Addresses Sourceforge Bug: #1483791)
-
-Mke2fs will correctly enforce the prohibition against features
-(specifically read-only features) in revision 0 filesystems.  (Thanks
-to Benno Schulenberg for noticing this problem.)
-
-Mke2fs previously would occasionaly create some slightly non-optimally
-placed inode tables; this bug has been fixed.
-
-The mke2fs and tune2fs programs now print the correct usage message
-describing the maximum journal size.  (Addresses Debian Bug: #491620)
-
-Add support for setting the default hash algorithm used in b-tree
-directories in tune2fs (from a command-line option) or mke2fs (via
-mke2fs.conf).  In addition, change the default hash algorithm to
-half_md4, since it is faster and better.
-
-The blkid library will now recognize MacOS hfsx filesystems, and
-correctly extract the label and uuid for hfs, hfsx, and hfsplus
-filesystems.  (Addresses Sourceforge Feature Requests: #2060292)
-
-The blkid library has improved detection of JFS and HPFS filesystems.
-(Addresses Launchpad Bug: #255255)
-
-The blkid library is now much more efficiently handling devicemapper
-devices, mainly by no longer using the devicemapper library.  This can
-speed up access for systems with a large number of device mapper
-devices.
-
-Blkid had a number of cache validation bugs in libblkid that have been
-fixed.   (Addresses Debian Bug: #493216)
-
-Resize2fs will now properly close out the "updating inode references"
-progress bar so there is a newline printed before printing the final
-"resize is successful" message.
-
-Resize2fs will now correctly handle filesystems with extents and/o
-uninitialized block groups correctly when file/directory blocks need
-to relocated (i.e., when shrinking a filesystem or if the resize_inode
-is not present).  To support this, the ext2fs library now supports
-initializing inode and block bitmaps that are not yet initialized when
-allocating them using ext2fs_new_block() and ext2fs_new_inode().  In
-addition, e2fs_block_iterate2() can now support changing the location
-of interior nodes of an extent tree, and ext2fs_extent_set_bmap() has
-been optimized to avoid creating unnecessary new extents when updating
-the location of blocks in the extent tree.  This will also help out
-e2fsck's recovery of obscurely corrupted filesystems with extents,
-when blocks are claimed by multiple inodes.
-
-Add support for on-line resizing ext4 filesystem with the flex_bg
-filesystem feature.  The method for doing so is not optimal, but to do
-a better job will require kernel support.
-
-E2fsprogs 1.41.0 intrduced a bug in libext2fs which casued e2image and
-debugfs programs to not be able to read e2image files; the signed
-vs. unsigned bug in the code which read bitmaps from the e2image has
-been fixed.   (Addresses Debian Bug: #495830)
-
-Resize2fs is now correctly managing the directory in-use counts when
-shrinking filesystems and directory inodes needed to be moved from one
-block group to another.  This bug has been around since e2fsprogs
-1.26, and is largely harmless, but does cause a filesystem corruption
-which will be flagged by e2fsck after the filesystem has been shrunk.
-E2fsck will no longer issue spurious complaints about the inode size
-caused by very large extent-based files, and by blocks reallocated
-using fallocate() with the FALLOC_FL_KEEP_SIZE option.  (Addresses
-Kernel Bugzilla: #11341)
-
-Mke2fs will now set the creation timestamp on the lost+found directory
-and the root directory.  (More generally, all new inodes created using
-the ext2fs library will correctly set the creation timestamp.)
-
-E2fsck now correctly calculates ind/dind/tind statistics in the
-presence of extent-based files.  In addition, "e2fsck -v" will report
-statistics of the depth of extent trees in the filesystem.  E2fsck can
-also give an inode fragmentation report using "e2fsck -E fragcheck"
-which can be useful when debugging the kernel block allocation
-routines.
-
-Fix support for empty directory blocks in ext4 filesystems with 64k
-blocksize filesystems.
-
-E2fsck will now print the depth of corrupt htree directories.
-
-Debugfs's htree command now correctly understands extent-based
-directories.  It will also print out the minor hash as well as the
-major hash.
-
-Debugfs has a new command which will print the supported features of
-e2fsprogs, to enable scripts to know whether the installed version of
-e2fsprogs can support a specific feature.
-
-Debugfs will now write files using extents for filesystems that
-support them.
-
-The error message printed by "tune2fs -I" if the inode size was too
-small was rather confusing, so it has been improved.  Also, we won't
-try to create an undo log until we know that command-line-specified
-parameters such as "tune2fs -I <inode size>" are valid.
-
-Given some filesystems found "in the wild" that had non-zero block
-group checksums even though the uninit_bg/gdt_sum feature was not
-enabled, e2fsck would issue spurious error messages.  Teach
-ext2fs_group_desc_csum_verify() to ignore the block group checksum
-entirely if the feature flag is not set.  (Addresses Debian Bug:
-#490637)
-
-The blkid program will now print out a user-friendly listing of all of
-the block devices in the system and what they contain when given the
--L option.  (Addresses Debian Bug: #490527)
-
-The filefrag program now has a more accurate calculation for the
-number of ideal extents.  (Addresses Debian Bug: #458306)
-
-The test I/O manager is now enabled by default, but its overhead is
-only incurred when it would be enabled via the TEST_IO_FLAGS or
-TEST_IO_BLOCK environment variables.
-
-Typographical errors in various program strings and usage messages
-have been fixed; most of these were pointed out by the e2fsprogs
-message catalog translators.  (Thanks, translators!)
-
-Update and clarified various man pages, as well as some typographical
-errors in the libext2fs texinfo file.
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.
-
-Add Indonesian and update French, Polish, Dutch, German, Sweedish,
-Czech, and Vietnamese Translations.  (Addresses Debian Bugs: #313697,
-#401092)
-
-Programmer's Notes
-------------------
-
-Fix portability problem with the badblocks group; for systems that
-don't have nanosleep(), try using usleep() instead.
-
-The "make check" target in the e2fsck directory now sets
-LD_LIBRARY_PATH before running the various e2fsck internal library
-regression tests.
-
-The crc32 regression test in the e2fsck library is now portable to
-greater varienty of environments, including big-endian systems and
-when cross-building e2fsprogs for embedded systems.  (Addresses
-Sourceforge Bug: #2019287)
-
-The ext2fs_extent_set_bmap() had some bugs when setting the first
-block in a file, or when replacing a single block extent.  Those cases
-fortunately were came up relatively rarely when e2fsck was checking
-files, but caused some problems when resize2fs was shrinking
-extent-based files.
-
-Fix a potential core-dumping bug in libe2p's iterate_on_dir()
-function.
-
-Various ext2fs library functions --- ext2fs_block_iterate2(),
-ext2fs_initialize() and ext2fs_extent_open() --- now correctly free
-allocated memory to avoid memory leaks in all of their error return
-paths.
-
-Ext2ed was failing to build because masix support had been removed in
-the rest of e2fsprogs, so ext2ed no longer has masix support, either.
-
-The configure script now respects the LDFLAGS environment variable if
-it is set when configure is called.  (Addresses Sourceforge Feature
-Request: #1937287)
-
-Libuuid is now more portable to the Windows platform.  (Addresses
-Sourceforge Feature Request: #1937287)
-
-The configure script now uses AC_MSG_{RESULT,WARN,ERROR} instead of
-bare echo commands so that configure flags such as --quiet work
-correctly.  (Addresses Sourceforge Patches: #2058794)
-
-A few uses of sprintf have been removed from the ext2fs library to
-make life easier for bootloaders with a limited libc environment.
-(Addresses Sourceforge Bug: #2049120)
-
-The ext2fs_read_inode() checks the validity of the inode number passed
-to it earlier, to avoid doing some needless work when it would fail
-anyway.
-
-The ext2fs_open() checks the validity of the blocksize parameter
-passed to it earlier, to avoid doing some needless work when it would
-fail anyway.
-
-Disable a very annoying automatic "%.sh -> %" GNU make rule in the
-top-level Makefile.  That automatic rule is used to better support
-SCCS, but it caused problems for a particular niche distribution which
-likes to use configure.sh files to store the configure options used to
-build a package.  Unfortuntaely GNU make will use the configure.sh to
-replace the configure script, resulting in a self-inflicted fork bomb
-leading to an out-of-memory crash.
-
-To support old GNU C compilers don't use C99/C++ comments, but only
-K&R style comments, and don't try to use __builtin_expect if __GNUC__
-is less than 3.  (__builtin_expect is only supported for gcc versions
-2.96 and up, and it's tricky to check for gcc 2.95 vs gcc 2.96; since
-this is an optimization, we only try to use __builtin_expect for gcc 3
-and up.)
-
-In e2fsck's crc routines, make sure we use WORDS_BIGENDIAN instead of
-__LITTLE_ENDIAN, which are only defined by glibc's header files and
-hence isn't portable.
-
-For the convenience for some distributions that need a static tune2fs,
-the Makefile for misc/ now has a tune2fs.static target.
-
-The ext2fs_block_iterate2() function now supports BLOCK_FLAG_APPEND
-for extent-based files
-
-The ext2fs_bmap() function now supports BMAP_ALLOC for extent-based
-files.
-
-All source files no longer have any trailing white space.
-
-The io_channel_read_blk64() and io_channel_write_blk64() functions are
-now functions instead of C preprocessor macros to provide better
-forward compatibility.
-
-The e2fpsrogs translation template now expands the @x abbrevation.
-
-Various namespace leackages in libblkid, libe2p, and libext2fs have
-been fixed.
-
-Fix a parallel build problem in e2fsprogs.
-
-E2fsprogs is now more portable to Solaris.
-  * blkid no longer assumes that the TIOCGSIZE and TIOCGWINSZ ioctl's
-    are always present.
-  * Scripts do not assume that /bin/true is always in /bin
-  * Don't use __FUNCTION__ since Solaris's C99 doesn't support it.
-  * Flush stdio handles before calling setbuf(), since Solaris will
-    discard any pending output to the stream.
-  * Define _XOPEN_SOURCE to 600 since Solaris's header files are very
-    picky about which C compiler can beused for SUSv3 conformance.
-    Use of C99 is not compatible with SUSv2 (_XOPEN_SOURCE=500),
-    and C89 is not compatible with SUSv3 (_XOPEN_SOURCE=600).
-    Since we need some SUSv3 functions, consistently use SUSv3 so
-    that e2fsprogs will build on Solaris using c99.
-  * Solaris C99 does not support varargs C preprocessor macros
-  * Solaris header files pollute the C namespace if in/netinet.h
-    is included, which conflicts with e2fsprogs' use of the kmem_cache_t
-    typedef.
-  * Solaris ships with a pathetically ancient shell in /bin/sh so we
-    avoid the use of various more avanced shell constructs such as $().
-
-The "make rpm" command will now take some extra configure optiosn from
-the build environment without needing to patch the source tree.
-
-The ext2fs_add_dir_block() function will now grow the dblist more
-aggressively as an optimization to avoid copying the array too often.
-
-The e2fsck_write_bitmaps() will write the block and inode bitmaps
-together instead of in two passes.
-
-
-E2fsprogs 1.41 (July 10, 2008)
-==============================
-
-Add support for ext4 filesystem features, in particular extents,
-uninit_bg, flex_bg, huge_file, and dir_nlink features.  Also add
-support for checking journal checksums.  Debugfs will print new
-superblock and inode fields that were defined for ext4.  For example,
-the nanosecond and i_version fields of an inode, and the
-s_min_extra_isize and s_wanted_extra_isize fields from the superblock.
-Note: Resize2fs doesn't currently support the combination of flex_bg
-and !resize_inode.  (Addresses Debian Bug: #388452, #425477)
-
-Tune2fs can support migrating a filesystem from using 128 byte inodes
-to 256 byte inodes, so it can take advantage of the full features of
-ext4.
-
-Add support for "undo" support.  E2fsck and mke2fs can optionally
-record an undo log which can replayed by the program e2undo.
-
-E2fsck could damage a filesystem by trying to relocate inode tables
-due to corrupted block group descriptors, where the attempted inode
-table relocation would do far more harm than good.  E2fsck has been
-fixed to detect this these sorts of corrupted block group descriptors
-much earlier in e2fsck processing, so it can try to use the backup
-superblock and block group descriptors first.  This should be a much
-better strategy for recovering these types of corrupted filesystems.
-(Addresses Sourceforge Bug: #1840291)
-
-E2fsck will display a more understandable message when the last check
-field in the superblock is in the future.  (Addresses Debian Bug:
-#446005).
-
-E2fsck now performs more extensive and careful checks of extended
-attributes stored in the inode.
-
-Enhance mke2fs to print a more explanatory error message when
-ext2fs_get_device_size() returns EFBIG.  (Addresses Debian Bug:
-#488663)
-
-Fix mke2fs to use a default block size of 4k when formatting an
-external journal device.  This is done by using a fixed filesystem
-type list that consists only of the single filesystem type "journal"
-when looking up configuration keys in /etc/mke2fs.conf.  (Addresses
-Debian Bug: #488663)
-
-Speed up how mke2fs writes the journal data blocks by writing the disk
-blocks in larger chunks.
-
-Fix blkid handling of stale devices.  Fix a bug which could cause a
-core dump while garbage collecting the blkid cache, and assure that
-blkid_find_dev_with_tag() never returns a non-existent device.  Also,
-if a filesystem is found at a new /dev location, eliminate any
-duplicate stale entries which can not be verified.
-(Addresses Debian Bugs: #487758, #487783)
-    
-Add more paranoid checks for LVM volumes and swap partitions in
-blkid's probe function, to reduce the chances of false positives.
-
-The mke2fs program now has a much more sophisticated system for
-controlling configuration parameters of a newly created filesystem
-based on a split filesystem and usage type system.  The -t option to
-mke2fs was a deprecated alias to -c; it now specifies a filesystem
-type (ext2, ext3, ext4, etc.), while the -T option can now be a comma
-separated usage list.  The filesystem type information and type
-information is used to extract configuration parameters from the
-/etc/mke2fs.conf file.
-
-The mke2fs program will no longer complain and request the -f option
-when the user tries to create a filesystem with greater than 2**31
-blocks.
-
-When creating a filesystem for the GNU Hurd use a fs-type of Hurd and
-adjust the mke2fs.conf file so filesystems for the Hurd are created
-with a blocksize of 4096 and inode size of 128, which is all it knows
-how to handle.  (Addresses Debian Bug: #471977)
-    
-Mke2fs will always make sure that lost+found always has at least 2
-blocks, even for filesystems with very large blocksizes (i.e., 64kb).
-
-Resize2fs will now print the minimum needed filesystem size if given
-the -P option, and will resize the filesystem to the smallest possible
-size if given the -M option.
-
-Fix resize2fs to clean up the resize_inode if all of the reserved gdt
-blocks are consumed during an off-line resize.
-
-The "ls" command in debugfs now supports the -p option, which causes
-it to quote the filenames so that spaces or tabs in directory entries
-are easily visible.  (Addresses Red Hat Bugzilla: #149480; Addresses
-Sourceforge Feature Request: #1201667)
-
-Fix a potential off-by-one buffer oveflow in the fs_device_name in an
-e2image file.
-
-The chattr program will return a non-zero exit code in case of
-failures, and error messages can be suppressed with the -f option.
-(Addresses Red Hat Bugzilla: #180596)
-
-Fix a bug in badblocks which caused it to overrun an array and likely
-crash if more than 8 test patterns are specified using the -t option.
-(Addresses Debian Bug: #487298)
-    
-Add support to badblocks to limit how quickly it reads from the disk
-drive (so it can be used for background scrubbing), and so it will
-abort after finding a given number of errors.
-
-Remove support for the legacy big-endian filesystem format which only
-existed on extremely long-dead PowerPC kernels almost a decade ago.
-
-Remove MASIX support from e2fsprogs.
-
-Add I/O statistics reporting to e2fsck.
-
-Update Vietnamese, Polish, French, Spanish, German, Catalan, Dutch,
-Czech translations.
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bugs: #487443, #487675, #490003)
-
-Fixed spelling mistakes, typos, and otherwise clarified man pages.
-(Addresses Debian Bugs: #393313, #487849, #440983, #440981)
-
-Programmer's Notes
-------------------
-
-Factor out bitmap code in preparation for adding 64-bit new-style
-bitmaps.
-
-Fix gcc -Wall warnings
-
-Fix the pkg-config files so that private librares are specified in
-"Libs.private:".
-
-Fix the libext2fs.texinfo manual so it builds with modern versions of
-texinfo.
-
-Silence the makefile from showing the awk command used to build the
-
-Clean up the badblocks group so to make it more portable and robust.
-
-Avoid using predictable filenames in /tmp in blkid's regression test
-suite.  Also remove bashism's in the regression test script.
-
-If the configure script is given --with-diet-libc, don't use thread
-local storage, since diet libc doesn't support TLS.  (Addresses
-Sourceforge Bug: #2000654)
-    
-Fix the blkid regression test suite to tolerate older versions of
-mkswap that don't support the -U option.
-
-A few library routines have been converted to support 64-bit block
-numbers; in particular, the I/O manager functions, the test_io,
-inode_io, and unix_io managers have all be converted to support 64-bit
-operation.
-
-Debugfs can now be extended for use by test programs.  See
-lib/ext2fs/extents.c for an example for how it can be used.  The test
-program links against the debugfs object files, and provides
-additional commands by defining an auxiliary libss command table.
-
-The lazy_bg filesystem feature, which was only used by developer's
-testing, has been removed since it has been largely supplanted by
-uninit_bg.  This also simplifies the code.
-
-
-E2fsprogs 1.40.11 (June 17, 2008)
-=================================
-
-Mke2fs, tune2fs, and resize2fs now use floating point to calculate the
-percentage of reserved blocks.  (Addresses Debian Bug: #452639)
-
-Updated Spanish and Catalan translations.
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bugs: #483962, #483023)
-
-Add detection for ZFS volumes to the libblkid library.
-
-Fixed spelling mistakes, typos, and otherwise clarified man pages.
-(Addresses Debian Bug: #486463)
-
-Programmer's notes:
--------------------
-
-Fix marginal C code in probe_lvm2() function to the blkid library more
-portable for older compilers.
-
-Fix build problems on MacOS X.  (Addresses Sourceforge Bug: #1972473)
-
-Fix ext2fs_swap{16,32,64} functions so they can be used by external
-applications on big-endian machines.  (Addresses Debian Bug: #484879)
-    
-
-E2fsprogs 1.40.10 (May 21, 2008)
-================================
-
-When deciding whether or not to revalidate a blkid cache entry, if the
-device's mtime is newer than the last time the cached entry was
-validated, force a revalidation.
-
-Fix a potential data corruption bug in e2fsck in the journal replay.
-The chances of this is happening is extremely remote, especially the
-default data=ordered or data=writeback modes.  However, if a block
-which has been journalled starts with the first four bytes 0xc03b3998,
-when e2fsck replays the journal, those four bytes will be replaced
-with zero's.  Fortunately, it is highly, highly unlikely for e2fsck
-metadata to begin with those fatal 4 byte sequence, and unless
-data=ordered mode is in use, data blocks are never journaled.
-
-Updated German, Dutch, Sweedish, and Vietnamese translations.
-
-Programmer's notes:
--------------------
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.
-
-Remove default sizes of types when cross compiling, since autoconf
-2.50 can figure this out automatically now.
-
-
-E2fsprogs 1.40.9 (April 27, 2008)
-=================================
-
-SuSE's security team audited uuidd and came up with a few minor
-issues.  None of them are serious given that uuidd runs setuid as a
-unprivileged user which has no special access other than libuuid
-directory, but it's good to get them fixed.
-
-One additional fix in ext2fs_swap_inode_full() needed for resize2fs to
-work correctly with in-inode extended attributes.
-
-Updated German, Czech, Dutch, French, Polish, Sweedish, and Vietnamese
-translations.
-
-Debugfs will avoid using a pager if the standard output is not a tty.
-
-Fix debugfs and tune2fs to correctly handle daylight savings time when
-parsing a time string.
-
-Fixed spelling mistakes, typos, and otherwise clarified man pages.
-
-Fix fsck completion bars when multiple filesystems were being checked
-in parallel.  (Addresses Debian Bug: #432865, Addresses Launchpad Bug:
-#203323, Addresses Sourceforge Bug: #1926023)
-
-Fix fsck so that progress information is sent back correctly when
-multiple filesystems are being check and the output of fsck is being
-redirected to a file descriptor.  Also, include the device name (w/o
-spaces) in the progress information sent back via a file descriptor.
-(Addresses Launchpad Bug: #203323, Addresses Sourceforge Bug:
-#1926023)
-
-Teach fsck to treat "ext4" and "ext4dev" as ext* filesystems.
-
-If logsave receives a SIGTERM or SIGINT signal, it will now pass that
-signal to its child process.
-
-Fix mke2fs's creation of are resize inode when there is a non-standard
-s_first_data_block setting.
-
-Fix bug in blkid when run by an unprivileged user; most devices were
-not reported correctly.  9Addresses Launchpad Bug: #220275)
-
-Mke2fs will not allow the logically incorect combination of
-resize_inode and meta_bg, which had previously caused mke2fs to create
-a corrupt fileystem.
-
-Fix fsck in German locales so that a 'j' means yes.
-(Addresses Sourceforge Bug: #1947683)
-
-
-Programmer's notes:
--------------------
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.
-
-Update valgrind options in test_script to work with valgrind 3.2.3
-
-Update texinfo.tex to a much newer version from the FSF.
-
-Remove bashism for configure script and from the lib/ss Makefile.
-Addresses Sourceforge Bug: 1921969
-
-Fix some silently broken tests: m_no_opt, m_meta_bg, and m_raid_opt.
-
-Fix build system so that if texinfo is not installed, it won't print a
-(harmless) error message.
-
-
-E2fsprogs 1.40.8 (March 13, 2008)
-=================================
-
-Fixed e2image -I so it works on image files which are larger than 2GB.
-
-Fixed e2fsck's handling of directory inodes with a corrupt size field.  If
-the size is larger than the number of blocks found in the inode, don't
-try to allocate extra empty blocks at the end of the directory to make
-up the difference; there's no point to doing that.  In addition, if
-the size is not a multiple of a blocksize, always fix it.
-
-E2fsck handled a pass 2 "should never happen error" by not giving
-enough information and then core dumping.  Unfortunately, it was all
-too easy to trigger the "should never happen" situation if a
-directory's inode size was not correct.  This has been fixed, but
-e2fsck has also been taught how to handle this situation more
-gracefully, by simply removing the inode hash tree information, so
-that it can be rebuilt again after e2fsck's pass 3.  (Addresses
-Launchpad Bug: #129395)
-
-Resize2fs had a bug resizing large inodes with extended attributes
-that was fixed in 1.40.6; unfortunately, it turned out it wasn't fixed
-completely on big-endian systems such as PowerPC.  The bug should be
-completely fixed now.  Yay for regression test suites.  (Addresses Red
-Hat Bugzilla: #434893)
-    
-Updated German, Czech, Dutch, Polish, Sweedish, and Vietnamese
-translations.  Many thanks to Philipp Thomas from Novell for stepping
-up to become the new German translation maintainer!  (Addresses Debian
-Bugs: #302512, #370247, #401092, #412882).
-
-When e2fsck is clearing a corrupt inode's HTREE directory information,
-make it clear that it is just clearing the HTREE information, not the
-entire inode.
-
-Fixed spelling mistakes, typos, and otherwise clarified man pages.  
-
-Programmer's notes
-------------------
-
-Add new functions, ext2fs_dblist_get_last() and
-ext2fs_dblist_drop_last(), which allows the caller to examine the last
-directory block entry added to the list, and to drop if it necessary.
-
-Fixed a portability problem in libblkid with DJGPP.
-
-Fix an obvious typo in an "internal error" message in e2fsck.  Thanks
-to Philipp Thomas for pointing this out.
-
-If the info files are not built, change "make install" so it doesn't
-fail with an error code.
-
-
-E2fsprogs 1.40.7 (February 28, 2008)
-====================================
-
-Remove support for clearing the SPARSE_SUPER feature from tune2fs, and
-depreciate the -s option, since it can result in filesystems which
-e2fsck can't fix easily.  There are very good reasons for wanting to
-disable sparse_super; users who wants to turn off sparse_super can use
-debugfs.  (Addresses Sourceforge Bug: #1840286)
-    
-Add missing options to mke2fs's usage message.  (Addresses Sourceforge
-Bug: #1751393)
-    
-Fix bug in resize2fs when large (greater than 128 byte) inodes are
-moved when a filesystem is shrunk; it was only moving the first 128
-bytes, so extended attributes were not getting moved.  (Addresses Red
-Hat Bugzilla: #434893)
-
-E2fsck now prints an explicit message when the bad block inode is
-updated, to avoid confusion about why the filesystem was modified.
-(Addresses Sourceforge Bug: #756460)
-    
-Allow mke2fs and tune2fs manipulate the large_file feature.
-Previously we just let the kernel and e2fsck do this automatically,
-but e2fsck will no longer automatically clear the large_file feature.
-It still isn't really necessary to worry about this feature flag
-explicitly, but some users seem to care.  (Addresses Red Hat Bugzilla:
-#258381)
-    
-Suppress message about an old-style fstab if the fstab file is empty.
-(Addresses Debian Bug: #468176)
-    
-Fix (really minor) bug in debugfs's find_free_block so it avoids
-reporting a free block more than once if there are too few free blocks
-in the filesystem.  (Addresses Sourceforge Bug: #1096315)
-    
-Change e2fsck to no longer clear the LARGE_FILES feature flag
-automatically, when there are no more > 2GB files in the filesystem.
-It's been almost a decade since there have been kernels that don't
-support this flag, and e2fsck clears it quietly without telling the
-user why the filesystem has been changed.
-    
-Fix bug which could cause libblkid to seg fault if a device mapper
-volume disappears while it is being probed.  (Addresses RedHat
-Bugzilla: #433857)
-    
-Inhance e2fsck's reporting of unsupported filesystem feature flags.
-(Addresses Sourceforge Feature Request: #1175808)
-    
-Fix option syntax in dumpe2fs for explicit superblock and blocksize
-parameters.  What was currently documented in the man page has been
-broken for some time, due to getopt() implementation changes.  The
-option sytax has been changed to one which is can be more portable
-supported and which is consistent with the format for extended options
-in mke2fs and tune2fs.  (Addresses Sourceforge Bug: #1830994)
-    
-Add support to tune2fs to clear the resize_inode feature.  This
-requires an fsck afterwards.  (Addresses Red Hat Bugzilla: #167816)
-
-Teach blkid to detect LVM2 physical volumes.  (Addresses Red Hat
-Bugzilla: #409321)
-
-Add support for setting RAID stride and stripe-width via mke2fs and
-tune2fs.  Teach dumpe2fs to print the RAID parameters.
-
-Add support for setting new superblock fields to debugfs's
-set_super_value.
-
-Add support for printing "mostly-printable" extended attributes in
-Debugfs.
-
-Add support for the -M option to fsck, which causes it to ignore
-mounted filesystem.
-
-Fix uuidd so that it creates the pid file with the correct pid number.
-(Addresses Sourceforge Bug: #1893244)
-
-Fix various gcc -Wall warnings.
-
-Update Czech, Dutch, Polish, Sweedish, and Vietnamese translations
-
-Fixed spelling mistakes, typos, and otherwise clarified man pages.  
-(Addresses Sourceforge Patch: #1399325)
-
-
-Programmer's notes:
--------------------
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bug: #466929)
-
-Add new flag EXT2_FLAG_NONFREE_ON_ERROR ext2fs_open2() which returns a
-partially filled-in filesystem object on an error, so that e2fsck can
-print more intelligent error messages.
-    
-Add a new function e2p_edit_feature2() which allows the caller to
-specify which feature flags are OK to set or clear, and which returns
-more specific information about feature flags which are not allowed to
-be set/cleared.
-    
-Set the C locale in the test_script driver since it uses [A-Za-z].
-(Addresses Sourceforge Bug: #1890526)
-
-Use fcntl locking instead of lockf in libuuid since Cygwin doesn't
-support lockf().
-
-Change configure.in to avoid using the 'dc' command unless it is
-absolutely needed. (i.e., when using parsing a WIP-style version
-number)  (Addresses Sourceforge Bug: #1893024)
-
-Add portability checks to support compilation under DJGPP.
-
-Update to the latest samba tdb code before the LGPLv3 change, which
-fixes a realloc() leak on failure.
-
-Fix memory leak in ext2fs_alloc_block().
-
-Fix makefile dependency issues for various install targets.
-(Addresses-Sourceforge-Patches: #1903484, #1903466, #1903456)
-    
-Improve descriptions for the r_move_itable and r_resize_inode tests.
-
-
-E2fsprogs 1.40.6 (February 9, 2008)
-===================================
-
-Add support for returning labels for UDF filesystems in the blkid
-library.
-
-Fix bug in the blkid library where cached filesystems was not being
-flushed when opening USB devices returned the error ENOMEDIUM.
-(Addresses Debian Bug: #463787)
-
-Added logic to the blkid library to automatically choose whether a
-filesystem should be mounted as ext4 or ext4dev, as appropriate.
-
-Allow tune2fs to set and clear the test_fs flag on ext4 filesystems.
-
-Fix a bug in e2fsck which caused it to core dump if e2fsprogs had been
-configured with --enable-jbd-debug.
-
-Document the BLKID_FILE environment variable in the libblkid man page
-
-Programmer's Notes:
--------------------
-
-Update e2fsprogs translation template and Vietnamese and Czech translations
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bugs: #436058)
-
-Don't try to create $DESTDIR/etc/init.d as part of make install as we
-don't install the init.d script (and it's not the recommended way to
-start uuidd anyway).  (Addresses Sourceforge Bug: #1885085)
-
-Use thread local storage to fix a theoretical race condition if two
-threads try to format an unknown error code at the same time in the
-com_err library.
-
-
-E2fsprogs 1.40.5 (January 27, 2008)
-===================================
-
-Fix a potential overflow big in e2image if the device name is too
-long.
-
-Mke2fs will now create new filesystems with 256 byte inodes and the
-ext_attr feature flag by default.  This allows for much better future
-compatibity with ext4 and speeds up extended attributes even on ext3
-filesystems.
-
-Teach e2fsck to ignore certain "safe" filesystem features which are
-set automatically by the kernel.  Having the kernel set features
-automagically behind the user's back is a bad idea, and we should try
-to break the kernel of this habit, especially for the newer ext4
-feature flags.  But for now, we will try to avoid needless full checks
-which can annoy users who are doing fresh installs.
-
-Add support in tune2fs and mke2fs for making a filesystem as being "ok
-to be used with test kernel code".  This will be needed for using test
-filesystems with the latest ext4 kernel code.
-
-Change e2fsck -fD so that it sorts non-htree directories by inode
-numbers instead of by name, since that optimizes performances much
-more significantly.  (Addresses-Sourceforge-Feature-Request: #532439)
-
-If e2image fills the disk, fix it so it exits right away instead of
-spewing large numbers of error messages.
-(Addresses-Sourceforge-Feature-Request: #606508)
-
-If ftruncate64() is not available for resize2fs, let it use ftrucate()
-instead, but have it check to see if the size would get truncated, and
-skip calling ftruncate in that case.
-
-Add support for detecting HFS+ filesystems in the blkid library.
-
-Add supprt in the blkid library for ext4/ext4dev filesystems.
-
-Fix a bug in blkid where it could die on a floating point exception
-when presented with a corrupt reiserfs image.
-
-Fix blkid's handling of ntfs UUID's so that leading zeros are printed
-such that UUID string is a fixed length.
-
-Add sample python bindings for the uuid library to the contrib
-directory.  (Addresses-Sourceforge-Patches: #778817)
-
-Fix debugfs's 'lsdel' command so it uses ext2fs_block_iterate2 so it
-will work with large files.  (Addresses Sourceforge Feature Request:
-#1257500 and Sourceforge Support Request: #1253511)
-    
-Allow the debugfs 'undel' command to undelete an inode without linking
-it to a specific destination directory, since this might require
-allocating blocks that could overwrite some yet-to-be-recovered
-deleted files.  (Addresses-Sourceforge-Feature-Request: #967141)
-
-Update Swedish translations from the Translation Project.
-
-Programmer's Notes:
--------------------
-
-Fix configure handling of --sbindir (which should rarely be used, but
-someone did complain, so let's fix it).  (Addresses Sourceforge Bug:
-#498381)
-
-Updated e2fsprogs.spec file to include a new uuidd package
-
-Use pkg-config to determine where to find the devmapper library so we
-can find out where it is located on different distributions.
-
-Fix Makefile race so that "make -j3 distclean" works correctly
-
-Fix portability problems on non-Linux/non-Hurd/non-Masix systems,
-especially on MacOS X systems.  (Addresses Sourceforge Bugs: #1861633,
-#1819034, #1863819)
-
-Fixed spelling mistakes, typos, and otherwise clarified man pages.
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bugs: #459403, #459475, #459614)
-
-Remove the --enable-dynamic-static configure option, and build e2fsck
-dynamically by default.  If the user wants e2fsck.static, he/she will
-need to build it via "make -C e2fsck e2fsck.static"
-
-Fix various build warnings due to missing prototypes.
-(Addresses Sourceforge Patch: #1861663, #1861659)
-
-
-E2fsprogs 1.40.4 (December 31, 2007)
-====================================
-
-Improve time-based UUID generation.  A new daemon uuidd, is started
-automatically by libuuid if necessary.  This daemon is setuid to allow
-updates to /var/lib/libuuid, so the clock sequence number can be
-stored and so if the clock is set backwards, it can be detected.
-(Addresses Sourceforge Bug: #1529672, Addresses Red Hat Bugzilla:
-#233471)
-
-Filter out the NEEDS_RECOVERY feature flag when writing out the backup
-superblocks.  This avoids e2fsck from concluding that a full
-filesystem check is required before backing up the superblock due to
-changes in the feature flags.  (Addresses Debian Bug: #454926)
-
-Fix fsck to only treat the '#' character as a comment at the beginning
-of the line in /etc/fstab.  Otherwise fstabs for the fuse filesystem
-will cause fsck to issue an bogus warning message.
-(Addresses Gentoo bug: #195405, Addresses Sourceforge bug: #1826147)
-
-Format control characters and characters with the high eighth bit set
-when printing the contents of the blkid cache, to prevent filesystems
-with garbage labels from sending escape sequences to the user's screen
-that might, for example place it in graphics mode.  (Addresses Ubuntu
-Bug: #78087)
-
-Fix sign-extension problem on 64-bit systems in in the com_err
-library.  (Addresses Sourceforge Bug: #1809658)
-
-Avoid division by zero error when probing an invalid FAT filesystem in
-the blkid library.  (Addresses Sourceforge Bug: #1831627)
-
-Update Dutch, Polish, and Vietnamese translations from the Translation
-Project.  Remove the Rwandan translation upon advice of the
-Translation Project.
-
-Programmer's Notes:
--------------------
-
-Fix the libss "make check" regression test so that it works if the
-current directory is not in the user's path or if the libss shared
-library is not installed.  (Addresses Sourceforge Bug: #1848974)
-
-Fixed spelling mistakes, typos, and otherwise clarified man pages.
-(Addresses Debian Bugs: #444883, #441872)
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bugs: #437720, #451172, #458017)
-
-Fix build failure on non-Linux/non-Hurd/non-Masix systems.
-(Addresses Sourceforge Bug: #1859778)
-
-Fix Hurd portability issues.  (Addresses Debian Bug: #437720)
-
-
-E2fsprogs 1.40.3 (December 5, 2007)
-===================================
-
-Fix a potential security vulnerability where an untrusted filesystem
-can be corrupted in such a way that a program using libext2fs will
-allocate a buffer which is far too small.  This can lead to either a
-crash or potentially a heap-based buffer overflow crash.  No known
-exploits exist, but main concern is where an untrusted user who
-possesses privileged access in a guest Xen environment could corrupt a
-filesystem which is then accessed by the pygrub program, running as
-root in the dom0 host environment, thus allowing the untrusted user to
-gain privileged access in the host OS.  Thanks to the McAfee AVERT
-Research group for reporting this issue.  (Addresses CVE-2007-5497.)
-
-Fix hueristics in blkid which could cause a disk without partitions to
-be incorrectly skipped when a loopback device is present.  (Addresses
-Red Hat Bugzilla #400321.)
-
-Fix e2image so that in raw mode it does not create an image file which
-is one byte too large.
-
-Change mke2fs's usage message so it recommends the preferred -E option
-instead of the deprecated -R option.
-
-Enhance the blkid library so it will recognize squashfs filesystems.
-(Addresses Red Hat Bugzilla #305151.)
-
-Enhance e2fsck so it will force the backup superblocks to be backed up
-if the filesystem is consistent and key constants have been changed
-(i.e., by an on-line resize) or by e2fsck in the course of its
-operations.
-
-Enhance blkid's detection of FAT filesystems; so that USB disks with
-only a single bootable partition will not get missed.
-
-E2fsck will no longer mark a filesystem as invalid if it has time
-errors (i.e., if superblock mount time or last write time is in the
-future) and the user refuses to fix the problem.
-
-The Ubuntu init scripts don't properly set the system time correctly
-from hardware clock if the hardware clock is configured to tick local
-time instead of GMT time.  Work around this as best as we can by
-providing an option, buggy_init_scripts, in /etc/e2fsck.conf which can
-be set on Ubuntu systems.  (Addresses Debian Bug #441093, and Ubuntu
-Bug #131201.)
-
-Fix fsck to ignore /etc/fstab entries for bind mounts.  (Addresses Red
-Hat Bugzilla #151533.)
-
-Fix e2fsck so that if the superblock is corrupt, but still looks
-vaguely like an ext2/3/4 superblock, that it automatically tries to
-fall back to the backup superblock, instead of failing with a hard
-error.
-
-Make the e2fsprogs program more robust so that they will not crash
-when opening a corrupt filesystem where s_inode_size is zero.
-
-Change e2fsck so it uses sscanf() instead of atoi() so it non-numeric
-arguments are detected as such and the parse error is reported to the
-user.   (Addresses Debian Bug #435381.)
-
-Change e2fsck so it will not complain if a file has blocks reallocated
-up to the next multiple of a system's page size.
-
-Fix bug in ext2fs_check_desc() which will cause e2fsck to complain
-about (valid) filesystems where the inode table extends to the last
-block of the block group.  (Addresses Red Hat Bugzilla #214765.)
-
-Fix a bug in ext2fs_initialize() which causes mke2fs to fail while
-allocating inode tables for some relatively rare odd disk sizes.
-(Addresses Red Hat Bugzilla #241767.)
-
-Add Catalan translation and update Dutch and Swedish translations
-from the Translation Project.
-
-Fix big-endian byte-swapping bug in ext2fs_swap_inode_full().  We
-still had an issue when trying to figure out whether we need to
-byte-swap fast symlinks that contained extended attributes.
-
-Fixed spelling mistakes, typos, and otherwise clarified man pages.
-(Addresses SourceForge Bug #1821333.)
-
-
-Programmer's Notes:
--------------------
-
-Fix mke2fs tests to avoid needing any significant ^M (CR) characters
-
-Add "make check" to the RPM spec file
-
-Fix "make install" and 'make unstall" in misc/Makefile.in so that it
-works correctly when the prefix is not the root directory.
-
-Fix the resize2fs tests, r_move_itable and r_resize_inode, so they
-clena up after themselves by deleting the test.img temporary file
-after completing the test.
-
-Fixed a corner case bug ext2fs_unlink() when trying to delete the
-first directory entry in a directory block and the last directory
-entry in the previous directory block is not in use.  Fortunately
-ext2fs_unlink() is only used by debugfs and e2fsck, and in e2fsck in
-places where it is extremely unlikely to run into this corner case.
-
-Fix missing dependency which would cuase parallel builds to fail.
-(Addresses Sourceforge Bug #1842331.)
-
-Fix a build error on newer gcc caused by lib/ext2fs/ismounted.c
-calling open(O_CREATE) with a missing mode parameter.
-
-Fix the test_ss.c in lib/ss so it can be used as an example
-application program for the library as well as a regression test
-suite.
-
-Fix ext2fs_dblist_dir_iterate() so that error codes and abort codes
-are properly passed back up through the call stack.
-
-E2fsprogs 1.40.2 (July 12, 2007)
-================================
-
-A recent change to e2fsck_add_dir_info() to use tdb files to check
-filesystems with a very large number of filesystems had a typo which
-caused us to resize the wrong data structure.  This would cause a
-array overrun leading to malloc pointer corruptions and segfaults.
-Since we normally can very accurately predict how big the the dirinfo
-array needs to be, this bug only got triggered on very badly corrupted
-filesystems.
-
-Fix a bug in e2fsck which caused it to incorrectly salvange
-directories when the last entry's rec_len is bogusly too big.  This
-resulted in a nonsense filesystem corruption to be reported, and
-required a second run of e2fsck to fully fix up the directory.
-
-Update tune2fs man page to include more discussion of reserved blocks
-(Addresses Launchpad bug #47817)
-
-Update Turkish, Polish, Dutch, and Vietnamese PO files from the
-Translation Project
-    
-
-E2fsprogs 1.40.1 (July 7, 2007)
-===============================
-
-Fix bug which could cause libblkid to loop forever.  When revalidating
-a partition where there is obsolete information in /etc/blkid.tab, we
-end up freeing a the type tag without clearing dev->bid_type, causing
-blkid_verify() to loop forever.  (Addresses Debian Bug: #432052)
-    
-The Turkish translation has a bug in it where it has the translation
-of "E@e '%Dn' in %p (%i)" to "E@E".  This causes @E to be expanded at
-@E, recursively, forever, until the stack fills up and e2fsck core
-dumps.  We fix this by making e2fsck stop @-expansions after a
-recursive depth of 10, which is far more than we need.
-(Addresses Sourceforge Bug: #1646081)
-    
-Compile the default mke2fs.conf into mke2fs program.  People are
-getting surprised by mke2fs creating filesystems with different
-defaults than earlier versions of mke2fs if mke2fs.conf is not
-present.  So we now create a built in version of mke2fs.conf file
-which is used by mke2fs if the /etc/mke2fs.conf is not present.
-(Addresses SourceforgeBug: #1745818)
-
-Improve the config/parse_types.sh helper script.  Fix a potential
-security problem if e2fsprogs is built as root (as Gentoo does!).  In
-addition fix the script and how it is called from the configure script
-so that it does the right thing when cross-compiling.  (Fixes Gentoo
-bug: #146903)
-    
-Update Vietnamese, French, and Dutch PO files from the Translation
-Project.  Also created a new e2fsprogs.pot file for translator.
-    
-Fix bogus strip permission errors when building under Debian.  When
-building the e2fsprogs dpkg's, the dh_strip command emits a large
-number of error messages caused by the permissions not being right.
-So run dh_fixperms before running dh_strip.
-
-Programmer's Notes:
--------------------
-
-Add new function: profile_set_default().  This function sets the value
-of the pseudo file "<default>".  If the file "<default>" had
-previously been passed to profile_init(), then def_string parameter
-will be parsed and used as the profile information for the "<default>"
-file.
-    
-Fix mk_cmds's error reporting so that it is unambiguous that it is the
-mk_cmds script which is generating the error.  (Obviates Gentoo patch:
-e2fsprogs-1.32-mk_cmds-cosmetic.patch)
-    
-Fix the test suite to use LC_ALL instead of LANG.  LC_ALL is the "high
-priority" environment variable that overrides all others, where as
-LANG is the lowest priorty environment variable.  If LC_ALL is set, it
-doesn't matter whether LANG, LANGUAGE, LC_COLLATE, LC_MESSAGES, and
-the all the rest are set.  This will assure that the locale when
-running the test suites is the "C" locale.  (Obviates Gentoo patch:
-e2fsprogs-1.38-tests-locale.patch)
-    
-
-E2fsprogs 1.40 (June 29, 2007)
-==============================
-
-Fix divide by zero error in blkid's NTFS probing logic.
-
-Add new blkid -g option which causes the blkid cache to be garbage
-collected.
-
-Fix a bug in libblkid which could cause the internal field bid_type to
-become corrupted.  Fortunately bid_type isn't used much, and bid_label
-and bid_uuid is only used by debugging code, so the impact of this bug
-was very minor.
-
-Mke2fs will now store the RAID stride value when a filesystem is
-created with a requested RAID stride, and then use it automatically in
-resize2fs.
-
-Mke2fs has a sanity check added to make sure (inode_size * num_inodes)
-isn't too big.  In some cases Lustre users have tried specifying an
-inode size of 4096 bytes, while keeping an inode ratio of one inode
-per 4096 bytes.  
-
-Improve sanity check in e2fsck's algorithm for finding a backup
-superblock, so that it won't accidentally find a superblock that was
-located in the journal, and then later reject it as being not a valid
-backup superblock.
-
-Fix e2fsck get_size logic so that it will work with the Linux floppy
-driver.  The Linux floppy driver is a bit different from the other
-block device drivers, in that if the device has been opened with
-O_EXCL, it disallows another open(), even if the second open() does
-not have the O_EXCL flag.  (Addresses Debian Bug: #410569)
-
-Fix error checking of badblock's last-block and start-block arguments.
-(Addresses Debian Bug: #416477)
-
-Fix e2fsck so that it doesn't overwrite the backup superblocks when
-recovering a journal until the master superblock has been confirmed as
-being sane.
-
-Change the blkid library to be much more paranoid about concluding
-that a partition contains an NTFS filesystem, and fetch the UUID and
-LABEL information from NTFS filesystems.  (Addresses Launchpad Bug:
-#110138)
-
-Factor out the code which sets the default journal size and move it
-into libext2fs.
-
-Enhance e2fsck so it will recreate the ext3 journal if the original
-journal inode was cleared to due it being corrupt after finishing the
-filesystem check.
-
-Fix e2fsck so that it updates the journal inode if it is corrupted and
-the backup journal information from the superblock was successfully
-used to recover the filesystem.
-
-Fix e2fsck so that it checks all of the blocks in the journal inode
-for validity.  The original code only checked the direct blocks to
-make sure the journal inode was sane.  Unfortunately, if some or all
-of the indirect or doubly indirect blocks were corrupted, this would
-not be caught.
-
-Add support in blkid to detect LUKS encrypted partitions.
-
-Add extra sanity checks for extended attributes in the case where the
-size is zero but the offset is very large.
-
-Fix byte-swapping issues for large inodes in ext2fs_read_inode_full()
-and ext2fs_get_next_inode_full().
-
-Clarify the copyright licenses used by the various libraries in
-the top-level COPYING  file (Red Hat Bugzilla: 166058)
-
-Make mke2fs's defaults when /etc/mke2fs.conf doesn't exist more sane.
-
-Fix mke2fs and debugfs to support large (> 16 bit) uid's and gid's.
-
-Remove check in e2fsck which requires EA's in inodes to be sorted;
-they don't need to be sorted, and e2fsck was previously wrongly
-clearing unsorted EA's stored in the inode structure.
-
-Allow mke2fs or tune2fs to create a substantially larger journal (up
-to 10,240,000 blocks).
-
-Fix MD superblock detection, and make sure the correct UUID is
-reported from the MD superblock.
-
-Fix a signed vs. unsigned bug in debugfs.
-
-Enhance debugfs's date parser so that it accepts integer values.
-
-Fix e2fsck's pass1c accounting so it doesn't terminate too early if a
-file with multiply claimed blocks is hard linked. or not at all if the
-root directory contains shared blocks
-
-Enhance debugfs so it can modify the block group descriptors using the
-command set_block_group_descriptor.
-
-Improve e2fsck's reporting of I/O errors so it's clearer what it was
-trying to do when an error happens
-
-Fix a bug in in how e2fsprogs byte swaps inodes containing fast
-symlinks that have extended attributes.  (Addresses Red Hat Bugzilla:
-#232663 and LTC Bugzilla: #27634)
-
-Fix potential file descriptor leak in ext2fs_get_device_size() in an
-error case.
-
-Add libreadline.so.5 support to libss.
-
-Impove badblocks -n/-w exclusive usage message.
-
-Fix dump_unused segfault in debugfs when a filesystem is not open
-
-Fix memory leak in blkid library.  (Addresses Debian Bug: #413661)
-
-Allow the debugfs lcd command to work w/o a filesystem being open.
-(Addresses LTC Bugzilla #27513)
-
-Fix e2fsck to clear i_size for special devices with a bogus i_blocks
-field on the first pass.
-
-Fix e2fsck to set the file type of the '..' entry when connecting
-a directory to lost+found.  (Addresses Lustre Bug: #11645)
-
-Enhance e2fsck to recover directories whose modes field were corrupted
-to look like special files.  This is probably only useful in
-artificial test cases, but it will be useful if we ever do the "inodes
-in directory" idea for ext4.
-
-Allow debugfs to dump (and rdump) > 2GB files.  (Addresses Debian Bug:
-#412614)
-
-Fix resize2fs parsing of size parameter (in sector units).  This was
-actually a bug in libe2p's parse_num_blocks() function.  When handling
-the 's' suffix, it was ignoring the blocksize information passed in
-from the caller and always interpreting the number in terms of a 1k
-blocksize.  (Addresses Debian Bug: #408298)
-
-There was a floating point precision error which could cause e2fsck to
-loop forever on really big filesystems with a large inode count.
-(Addresses Debian Bug: #411838)
-
-Fix memory leak in ext2fs_write_new_inode()
-
-Add support for using a scratch files directory to reduce e2fsck's
-memory utilization on really big filesystems.  This uses the TDB
-library.  See the [scratch_files] section of the e2fsck.conf man page
-for more details.
-
-Fixed type-punning bug which caused dumpe2fs to crash on the Arm
-platform (Addresses Debian Bug: #397044)
-
-Add explanatory message to badblocks that -n and -w are mutually exclusive
-(Addresses Debian Bug: #371869)
-
-Allow debugfs and dumpe2fs to support fs features under development.
-
-Add support for the new flag EXT2_FLAG_SOFTSUPP_FEATURES flag to
-ext2fs_open() , which allows application to open filesystes with features
-which are currently only partially supported by e2fsprogs.
-
-Allow unix_io to support offsets greater than 2G (Addresses
-SourceForge Bug: #1547922)
-
-Fixed overflow and signed/unsigned problems caused by the number of
-blocks or inodes exceeding 2**31 or being close to 2**32-1.
-
-Add support for unsigned directory hash calculations with hints in the
-superblock to fix cross-architectural portability for htree
-directories with filenames where the high 8th bit is set.  (Addresses
-Debian: #389772)
-
-Fix resize2fs so that it gives user-intelligible error messages if the
-filesystem or the kernel does not support on-line resizing.
-(Addresses Debian Bug: #380548)
-
-Require mke2fs -F -F for really dangerous operations, since -F is
-needed for less dangerous operations such as creating filesystems
-images in regular files, or creating filesystems on whole block
-devices.  These relatively innocuous usages should NOT be confused
-with running mke2fs on an apparently-mounted or in-use filesystem.
-
-Allow the default inode size to be specified into the mke2fs.conf
-file.
-
-Make the smallest default journal size is big enough so that on-line
-resizing should always work.
-
-Fix silly spelling error in e2fsck.  (Addresses SourceForge bug:
-#1531372)
-
-Fix debugfs coredump when lsdel is run without an open filesystem
-(Addresses Debian Bug: #378335)
-
-Fix debugfs display bug us that bytes that have the high bit set are
-displayed as "ec" instead of "ffffffec".
-
-Add support in lsattr so it will display the EXT4_EXTENTS_FL flag.
-
-Device mapper scanning wasn't working in the blkid library because the
-pathnames had an extra "/dev" when they were being probed.
-
-Add GFS/GFS2 support to the blkid library.
-
-Fix blkid support of empty FAT filesystem labels.
-
-Avoid recursing forever (or for a long time) when the blkid library
-searches for a device and there are symlinks to directories in /dev.
-
-Avoid unaligned halfword access in blkid when accessing FAT
-superblocks, as this will cause Sparc/Solaris systems to throw a
-SIGBUS error.
-
-The latest devmapper libraries requires pthreads, add -lpthreads to
-the static link libraries for e2fsck.static if devmapper is enabled.
-(Addresses Debian bug: #388718)
-
-Improve the (non-installed, for experts only) findsuper program by
-printing the uuid and label from the superblocks, as well as the
-starting and ending offsets of the filesystem given the information in
-the superblock.  Omit by default printing superblocks that are likely
-found in located in an ext3 journal unless an explicit -j option is
-given.
-
-Updated Spanish, French and Dutch translations and added Catalan
-translation.  (Addresses Debian bug: #411562)
-
-Use FreeBSD's DIOCGMEDIASIZE and DIOCGDINFO ioctls if available when
-determining a partition's size, since binary searching to determine
-the device doesn't work on FreeBSD.
-
-Documentation about UUID's is available in enough places, and it's
-awkward to deal with debian-legal's insanities.  So I'm caving in the
-"more-lunatic-than-RMS" wing of Debian by removing RFC-4122 so we
-don't have do the dfsg tarball.  Also remove the rule that only tried
-to install RFC-4122 on Ubuntu, since Ubuntu seems to want to fetch
-e2fsprogs exclusively from Debian.  (Addresses Debian Bug: #407107)
-
-Fix the info-dir line so that the menu name does not contain a .info
-prefix.  First of all, it's ugly, secondly, it causes the install-info
-command to fail to remove the com_err info file from the
-/usr/share/info/dir file when the comerr-dev package is removed and
-purged.  (Addresses Debian Bug: #401711)
-
-Fixed spelling mistakes, typos, and otherwise clarified man pages.
-(Addresses Debian Bug: #369761, #373004, #379695)
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bugs #389554, #390664, #413208, #419605,
-#408352, #415560, #399155)
-
-
-Programmer's notes:
--------------------
-
-E2fsck now supports the %It expansion when printing a problem report.
-It will print the type of the inode in the problem context.
-
-Fix misc/Makefile.in so that it builds even if e2fsck hasn't been built yet
-(Addresses Sourceforge Bug: #1565561)
-
-Remove unused variables and other lint/gcc -Wall cleanups
-
-Add check to ext2fs_get_device_size() so it will return EFBIG for for
-filesystems contained in regular files where the filesystem image size
-is returned by stat64().
-
-Set local environment variables to C so mk_cmds and compile_et always
-work.  (Addresses SourceForge Bug: #1532177)
-
-Added the 64-bit byte swapping function ext2fs_swab64().
-
-Added two new helper functions to prevent 2**31/2**32-1 overflow
-problems: ext2fs_div_ceil() and e2p_percent().
-
-Create new ext2fs library inline functions ext2fs_group_first_block()
-and ext2fs_group_last_block() in order to calculate the starting and
-ending blocks in a block group.
-
-Create the generated files read-only to remind developers not to edit them.
-
-Add support for autoconf 2.60 (with backwards compatibility for older
-versions of autoconf).
-
-Added an "make rpm" target to top-level Makefile
-
-Added various FreeBSD portability fixes.
-
-Exclude mercurial files from the RPM build tree to speed up copy/build.
-
-Use root_sysconfdir to define the locations of mke2fs.conf and
-e2fsck.conf instead of using a hard-coded /etc pathname.
-
-Prevent e2fsck.h and ext2_ext_attr.h from getting included multiple times.
-
-Fixed "make clean" in blkid's Makefile.in file from removing tst_*.c files.
-
-If diff -u is supported, use it to report test failures.
-
-Updates/improvements to RPM spec file
-
-Add on-disk format definitions for the following new features:
-EXT4_FEATURE_RO_COMPAT_HUGE_FILE, EXT4_FEATURE_RO_COMPAT_GDT_CSUM,
-EXT4_FEATURE_RO_COMPAT_DIR_NLINK, EXT4_FEATURE_INCOMPAT_64BIT,
-EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE
-
-Add a new make target "checked-failed" in the tests directory which
-reruns any failed tests
-
-Update draft-leach-uuids-guids-01.txt with rfc4122.txt
-
-Fix miscellaneous bugs reported by Coverity: Dead code, potential nul
-pointer dereferences, memory leaks, etc.  None were security-criticial
-problems.
-
-Fix up usage and decrement error messages in the test_icount program
-
-Add debugging code to the com_err library; if the environment variable
-COMERR_DEBUG is set to 1, print out debugging messages as error tables
-are added and removed from the com_err library.  If the
-COMERR_DEBUG_FILE environment variable is set (and the process is not
-setuid) the debugging messages may be redirected to a file.
-
-Change all of the e2fsprogs programs to use the newer add_error_table()
-and remove_error_table() interfaces instead of the much older
-initialize_*_error_table() function.
-
-Add TDB support into the ext2fs library.  This allows us to have a
-guaranteed library we can count on always being present so we can
-store data in an on-disk database.
-
-Add support for using TDB to store the icount data, so we don't run out
-of memory when checking really large filesystems.
-
-Change the regression test suite so that it skips empty test directories.
-
-Define the l_i_iversion field in ext2_inode.  The l_i_version field is
-now defined from the old l_i_reserved1 field in the ext2 inode.  This
-field will be used to store high 32 bits of the 64-bit inode version
-number.
-
-Add Makefile production rule for e2fsprogs.spec in case it gets
-deleted.
-
-Add new function profile_get_uint() to allow for a clean way to fetch
-unsigned integers from the context.
-
-Add test to make sure the ext2 superblock structure is 1024 bytes.
-
-Fix typo in name of f_dup4 regression test
-
-Add new function blkid_gc_cache() which performs a garbage collection
-pass on the /etc/blkid.tab file.
-
-The ext2fs_open() function now sets EXT2_FLAG_MASTER_SB_ONLY.  In
-general, only e2fsck (after the filesystem is clean), tune2fs, and
-resize2fs should change the backup superblocks by default.  Most
-callers of ext2fs_open() should not be touching any superblock fields
-which require the backups to be touched.
-
-Add new function to libext2fs, ext2fs_default_journal_size(), which
-returns the default journal size.
-
-
-E2fsprogs 1.39 (May 29, 2006) 
-=============================
-
-Fix 32-bit cleanliness in e2fsprogs so that we can support filesystems
-between 2**31 and 2**32 blocks.
-
-Change mke2fs to use /etc/mke2fs.conf as a configuration file to
-configure the filesystem features, blocksize, and inode_ratio for
-different filesystem types.
-
-Mke2fs will now create filesystems hash trees and on-line resizing
-enabled by default, based on the new /etc/mke2fs.conf file.
-
-The e2fsprogs tools (resize2fs, e2fsck, mke2fs) will open the
-filesystem device node in exclusive mode to prevent accidents by
-system administrators.  In the case of resize2fs and mke2fs, it will
-only use exclusive mode if the filesystem is not mounted.
-
-Fixed a bug in mke2fs which caused it to to fail when creating the
-resize inode for large filesystems.  (Addresses Debian Bug #346580)
-
-When allocating space for the RAID filesystems with the stride
-parameter, mke2fs will now place each portion of the group's inode
-table right up after the superblock (if present) in order to minimize
-fragmentation of the freespace.
-
-Speed up mke2fs and e2fsck by writing inode and block bitmaps more
-efficiently by writing the inode and block bitmaps in one pass, thus
-reducing the number of disk seeks required.
-
-Add support for on-line resizing to resize2fs.
-
-Fix blkid library so that logic to determine whether or not a device's
-cached information in /etc/blkid.tab needs to be verified or not
-doesn't get confused by a system clock which is insane (for example,
-if the battery is dead on a Macintosh running PPC Linux.  (Addresses
-Red Hat Bug: #182188)
-
-The blkid library will now store the UUID of the external journal used
-by ext3 filesystems, so that in the future, the userspace mount binary
-can use this to find the location of the external journal and pass
-this information to the kernel.
-
-E2fsck will now consult a configuration file, /etc/e2fsck.conf to
-control how various options should be handled.  See the e2fsck.conf
-man page for more details.   (Addresses Debian Bug: #150295)
-
-E2fsck now prints an explanatory message when delaying a filesystem
-check when the system is running on battery.  (Addresses Debian Bug:
-#350306)
-
-E2fsck will detect if the superblock's last mount field or last write
-field is in the future, and offer to fix if so.  (Addresses Debian Bug
-#327580) These problems will be fixed automatically in preen mode
-since Debian's boot sequence bogusly doesn't set the time correctly
-until potentially very late in the bootup process, and this can cause
-false positives which will cause users' systems to fail to boot.
-(Addresses Debian Bugs #343662 and #343645)
-
-E2fsck now checks to see if the superblock hint for the location of
-the external journal is incorrect, and if so, offer to update it.
-(Addresses Debian Bug: #355644)
-
-Fix e2fsck from segfaulting on disconnected inodes that contain one or
-more extended attributes.  (Addresses Debian Bug: #316736, #318463)
-
-E2fsck will stop and print a warning if the user tries running a
-read/write badblocks test on a read-only mounted root filesystem.
-
-Fix a memory leak in e2fsck's error paths.  (Thanks to Michael
-C. Thompson for pointing these out; they were originally found using
-Coverity.)
-
-When resizing a file containing a filesystem, resize2fs will expand or
-truncate a file as necessary.  (Addresses Debian Bug: #271607)
-
-Resize2fs will now automatically determine the RAID stride parameter that
-had been used to create the filesystem, and use that for newly created
-block groups.   The RAID stride parameter may also be manually specified
-on the command line using the new -S option to resize2fs.
-
-Fix mke2fs so that it correctly creates external journals on
-big-endian machines (such as a S/390).  
-
-Fix a bug in the e2p library which could cause dumpe2fs to (rarely)
-fail to print out the journal or hash seed UUID.  (Thanks to Guillaume
-Chambraud for pointing this out.)
-
-Dumpe2fs will now print the size of the journal (if present).
-
-Fix debugfs's set_inode_field command so it can properly set the frag,
-fsize, uid_high, gid_high, and author fields in the inode instead of
-silently failing, and so that setting the i_size actually sets i_size
-correctly.
-
-Add a new debugfs command, set_current_time, which sets fs->now so
-that regression test suites can repeatedly modify the filesystem's
-last_write fields.
-
-Fix a bug in debugfs's icheck which would incorrectly report the owner
-of an extended attribute block.
-
-Fix the debugfs commands htree_dump, dx_hash, and list_dir so they print a
-print a usage message when an illegal option character is given.
-
-Fix debugfs's dump_unsued command on filesystems with a 64k blocksize
-so it won't core dump.  (Addresses SourceForge bug #1424311)
-
-Fix mklost+found so that it creates a full-sized directory on
-filesystems with larger block sizes.
-
-Fix a file descriptor leak in blkid library.
-
-Fix a display bug in "badblocks -sv" so that the done message properly
-clears the block number at the end of the test.  (Addresses Debian Bug
-#322231)
-
-Allow fractional percentages to the -m option in mke2fs and tune2fs
-(Addresses Debian Bug: #80205)
-
-Use fstat/fstat64 in getsize.c if the the target is a regular file,
-instead of attempting to do a binary search.  Fix some fd leaks in
-error cases.
-
-Add support for device mapper library to the blkid library to ensure
-that the "best" (i.e., leaf) device is probed by the blkid library.
-
-Fix the blkid library so that it notices when an ext2 filesystem is
-upgraded to ext3.
-
-Improve the blkid's library VFAT/FAT detection; it now understands
-labels stored in the root directory, and is more paranoid about
-checking the FAT superblock values.
-
-Fixed a fd leak in the uuid library which was causing problems for the
-LVM tools.  (Addresses Debian Bug: #345832)
-
-Add support for the reiser4 and software suspend partitions to the
-blkid library.  Also add support for extract the label from iso9660
-filesystems.
-
-Fix a compile_et bug which miscount the number of error messages if
-continuations are used in the .et file.
-
-Add extra sanity checks to protect users from unusual cirucmstances
-where /etc/mtab may not be sane, by checking to see if the device is
-reported busy (works on Linux 2.6) kernels.  (Addresses Debian Bug
-#319002)
-
-Updated French, Dutch, Polish, and Swedish translations.  (Addresses Debian
-Bug: #343149, #341911, #300871, #316604, #316782, #330789)
-
-Fix use-after-free bug in e2fsck when finishing up the use of the
-e2fsck context structure.
-
-Fixed spelling mistakes, typos, and otherwise clarified man pages and
-documentation.  (Addresses Debian Bugs: #329859, #322188, #316811,
-#312515, #351268, #357951, #347295, #316040, #368392, #368393, #368394,
-#368179)
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bugs #317862, #320389, #290429, #310950,
-#310428, #330737, #330736, #329074, #356293, #360046, #366017, #364516,
-#362544, #362970)
-
-
-Programmer's notes:
--------------------
-
-Update config.guess and config.sub to latest version (2006-02-23) from
-FSF.
-
-Fix asm_types.h type conflicts on AMD 64 platforms.  (Addresses Debian
-Bugs: #360661, #360317)
-
-Fixed the Makefile so that they work correctly on newer versions of
-GNU make (i.e., 3.81).
-
-Add valgrind support to the regression test suites, and eliminate
-false positives from valgrind.
-
-Add a regression test suite for the blkid library.
-
-Fix a fencepost error in resize2fs caught by valgrind.  
-
-Fix compiler warnings about missing memcpy prototypes.
-
-We no longer have the sparc assembly code in the header file any more,
-so we shouldn't set _EXT2_HAVE_HAS_BITOPS_ for the sparc.  This would
-break compiles on the sparc architectures when using gcc.
-
-In the libext2fs library, add the new field fs->now which if non-zero
-is used instead of the system time when setting various filesystem
-fields (last modified time, last write time, etc.)
-
-Fix gcc 4.01 complaints by adding a missing #include <string.h> to
-ext2fs.h which is needed since the inline functions use memcpy().
-(Addresses Sourceforge Bug #1251062)
-
-Use BUILD_CFLAGS and BUILD_LDFLAGS instead of CFLAGS and LDFLAGS in
-the build system when building files in the util directory which are
-needed during the build process.  This avoids potential problems when
-cross-compiling and some of the options specified in CFLAGS or LDFLAGS
-are not recognized as valid by the host compiler.  (Addresses
-Sourceforge Bug #1261547)
-
-Clean up the blkid library by making the superblock and generic i/o
-functions to be more generic.  Clean up interface to the probe
-function, and fix memory leak.  Finallly, remove an unneeded reference
-to probe.h in the lib/blkid/resolve.c
-
-Add an ext2fs_read_bb_FILE regression test to confirm proper detection
-of invalid block #'s.
-
-The x86 asm constraints for ext2fs_{set/clear}_bit have been fixed to
-indicate that the the function read/writes the memory location.
-
-Fix various gcc -Wall complaints.
-
-Add a dependency to make sure that the subdirectories are created
-before creating all of the object files, in order to address parallel
-build problem in the library Makefiles.  (Addresses Sourceforge Bug:
-#1261553)
-
-Add $(LDFLAGS) to the command line argument when generating an ELF or
-Solaris shared library, to allow cross-compile and other builds that
-might need to specify -L paths to needed libraries.  (Addresses
-Sourceforge Bug #1261549)
-
-Add a new feature, EXT2_FEATURE_COMPAT_LAZY_BG, which is initially
-intended for testing purposes.  It allows an ext2/ext3 developer to
-create very large filesystems using sparse files where most of the
-block groups are not initialized and so do not require much disk
-space.  Eventually it could be used as a way of speeding up mke2fs and
-e2fsck for large filesystem, but that would be best done by adding an
-RO_COMPAT extension to the filesystem to allow the inode table to be
-lazily initialized on a per-block basis, instead of being entirely
-initialized or entirely unused on a per-blockgroup basis.
-
-Fix backwards compatibility so e2fsprogs will better compile on Linux
-2.0.35 systems.
-
-Make test scripts more robust against locale-related environment variables
-
-Fix type warning problem with sizeof() in ext2fs_open2().
-
-Fix type warning problem with time_t in debugfs.
-
-
-E2fsprogs 1.38 (June 30, 2005)
-==============================
-
-Fix blkid's test programs (built with "make check") compile correctly
-even without "configure --enable-blkid-debug".
-
-Fix ia64 core dump bug caused by e2fsprogs running afoul of C99 strict
-type aliasing rules on newer gcc compilers.  (Addresses Red Hat
-Bugzilla ##161183.)
-
-Fix com_err library to make it more compatible with recent changes
-made to the com_err library in MIT Kerberos V5 version 1.4.
-(Addresses Sourcefroge Bug #1150146)
-
-General cleanup of messages printed by e2fsprogs programs for grammar,
-consistency, and to make life easier for translators.  Fixed a few
-strings containing English that had not been marked as needing
-translations.  Removed strings that do not need to be translated, to
-make life easier for translators.
-
-Mke2fs and badblocks will take advantage of a feature in Linux 2.6 to
-test to see if a device appears to be in use instead of just relying
-on /proc/mounts and /etc/mtab.  (Addresses Debian Bug #308594).
-
-Fix portability problem in the filefrag program affecting platforms
-where the size of an integer is smaller than the size of a long.
-(Addresses Debian Bug #309655)
-
-Mke2fs will now use a larger journal by default for filesystems
-greater than 4GB.  (128 MB instead of 32MB).
-
-Mke2fs will refuse to create filesystems greater than 2**31-1 blocks,
-unless forced.  This is to avoid signed vs. unsigned kernel bugs in
-block numbers that still need to be fixed.
-
-The blkid program has a new option which will more efficiently search
-for device when it is known (or expected) that only one matching
-device will be found in the system, such as when doing a lookup by
-UUID.
-
-Debian's e2fsprogs-specific initrd fragment will avoid including
-unnecessary libraries into the initrd ramdisk by unsetting LD_PRELOAD
-and LD_LIBRARY_PATH, and filtering out libraries found in
-/etc/ld.so.preload.  (Addresses Debian Bug: #304003)
-
-Fixed a potential portability issue in the blkid programs for
-architectures where the char type is unsigned.  (Addresses Sourceforge
-Bug: #1180585)
-
-Fix a bug in filefrag so that it doesn't falsely count an extra
-discontinuity when the first block found is an indirect block.
-(Addresses Debian Bug #307607).
-
-Fix blkid's recognition of cramfs filesystems, and enhance it to be
-able to handle cramfs labels.
-
-Fix debugfs's stat command to not core dump when a filesystem is not
-open.
-
-Fix e2fsck's handling of error conditions caused by the resize inode
-claiming blocks that are also used by other inodes, a filesystem
-corruption which was commonly caused by a bug in Fedora Core 3's
-resize2fs program.
-
-Fixed bug in filefrag which caused it to fail on non-ext2/3
-filesystems.  (Addresses Debian Bug: #303509)
-
-If the superblock last mount time indicates that the system clock may
-not be accurate, then e2fsck will omit checking inodes' deletion time
-field for indications of a potential corrupted orphaned inode list.
-(Previously e2fsck only ommited these LOW_DTIME checks when the
-superblock's last write time looked insane.)
-
-Fixed a IA64 core dump bug in the e2p library which affected dumpe2fs.
-(Addresses Debian bug #302200)
-
-Make the blkid library more paranoid about being run from setgid
-programs, and to use __secure_getenv() from libc if it is available.
-
-Fixed spelling mistakes, typos, and otherwise clarified man pages.
-(Addresses Debian Bugs: #304591, #304592, #304594, #304597, #304593
-and Sourceforge Bug: #1189803)
-
-Updated and fixed translations.
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.
-
-Programmer's notes:
--------------------
-
-Ext2fs_set_bit(), ext2fs_clear_bit(), and ext2fs_test_bit( have been
-changed to take an unsigned int for the bit number.  Negative bit
-numbers were never allowed (and didn't make any sense), so this should
-be a safe change.  This is needed to allow safe use of block numbers
-greater than or equal to 2**31.
-
-The compile_et program will avoid recreating generated foo_err.c and
-foo_err.h files if no changes are necessary.  The compile_et program
-will also atomically replace these files to avoid a potential parallel
-build race problem on SMP systems.  (Addresses Sourceforge Bug:
-#1157933)
-
-Added a new function to the blkid library, blkid_probe_all_new(),
-which only probes newly added disk devices, and change
-blkid_find_dev_with_tag() to use this function so that when a
-requested tag is not found, devices that were previously not checked
-are searched before searching all devices in the system.
-
-Added new functions to the blkid library, blkid_dev_set_search() and
-blkid_dev_has_tag().
-
-E2fsck's problem strings can now use @m and @n as abbrevations for
-"multiply-claimed" and "invalid", respectively.
-
-The e2fsprog.pot file now has an explanation of how the @-expansion
-and %-expansion works, and strings in e2fsck/problem.c which contain @
-characters now have comments in e2fsprogs.pot with the @-expansion to
-make life easier for translators.
-
-Fixed missing return values in the ext2fs library which could cause it
-to return random garbage in certain error conditions.
-
-Allow the current time to be overriden via the E2FSCK_TIME environment
-variable for use in regression tests.
-
-The test scrpit driver program now exits with a non-zero status if
-there any of its test that it ran failed.
-
-Fixed problems with parabuilds on SMP systems.  (Addresses Sourceforge
-Bug: #1157933)
-
-Fixed "make check" so that it compiles correctly even when e2fsprogs'
-header files have not be installed in the system include directories.
-(Addresses Sourceforge Bug: #1180572)
-
-Fixed gcc -Wall nits.
-
-
-E2fsprogs 1.37 (March 21, 2005)
-===============================
-
-Add support for checking the validity of Extended Attributes stored in
-inodes to e2fsck.
-
-Add support for dumping the contents of large inodes to debugfs,
-including the extended attributes stored in inodes.
-
-Fix mke2fs, e2fsck, debugfs, and the ext2fs_mkdir function so that
-when we create a new inode we make sure that the extra information in
-the inode (any extra fields in a large inode and any ea-in-inode
-information) is initialized correctly.  This can take place when
-mke2fs creates the root and lost+found directory, when e2fsck creates
-a new root inode or a new lost+found directory, and when the user uses
-the debugfs write, mknod, or mkdir commands.  Otherwise, the newly
-create inode could inherit garbage (or old EA information) from a
-previously deleted inode.
-
-Fixed a bug in e2fsck so it would notice if a file with an extended
-attribute block was exactly 2**32 blocks, such that i_blocks wrapped
-to zero.
-
-Added support to filefrag to detect files which are using the new
-experimental file extents format, and use the non-ext2 algorithm in
-that case.  Fixed a bug to avoid reporting a false discontinuity if
-there is one or more unallocated blocks at the beginning of a file.
-
-Duplicated a check for noticing whether or not the number of blocks
-(given a certain blocksize) is greater than 2**32 when the
-BLKGETSIZE64 ioctl is not available to ext2fs_get_device_size().  This
-allows mke2fs to automatically use a larger blocksize when creating a
-filesystem on a very large device when run on systems that do not
-support BLKGETSIZE64.
-
-Fix the I18N build which was broken in e2fsprogs 1.36 because the
-build system had been switched to treat the .gmo files as shipped
-files (for backwards compatibility with systems that have older GNU
-I18N tools installed), but the gen_tarball.in script was still
-removing the .gmo files from the official source distribution.
-
-Fixed various Debian packaging issues --- see debian/changelog for
-details.  (Addresses Debian Bugs ##296769, #299341)
-
-Programmer's notes:
--------------------
-
-Added new functions to the e2p library which convert between a string
-and os_type: e2p_os2string() and e2p_string2os(), and used them to
-make the generated binaries more compact.
-
-Fixed a compile-time error on Darwin systems.
-
-Cleaned up the lib/ext2fs Makefile slightly.
-
-
-E2fsprogs 1.36 (February 4, 2005)
-=================================
-
-All of the patches that were applied to Fedore Core 3's
-e2fsprogs-1.35-11.2 have been integrated, although sometimes with a
-lot of bug fixes first.  Users of Fedora Core 3 are strongly
-encouraged to upgrade to e2fsprogs 1.36 as soon as possible.
-
-Add support for filesystem with the online resizing via resize inode
-feature.  Fixed numerous bugs from the Fedora patches.  The Fedora
-patches also didn't bother to do any consistency checking on the
-resize inode, or add any tests to the regression test suite.  The "-R
-resize=4g" option to mke2fs was a no-op in the Fedora patches, despite
-being listed in mke2fs's usage message.  All of these shortcomings
-have been corrected.
-
-E2fsck can also also fix filesystems trashed by Fedora's resize2fs
-program.  In order to do this, the user must run the commands:
-
-       debugfs -w /dev/hdXXX -R "features ^resize_inode"
-        e2fsck -f /dev/hdXXX
-
-Optionally, the ext2prepare command can be used to re-enable online
-resizing after the filesystem has been fixed.
-
-The fsck program will now accept an optional filedescriptor argument
-to the -C option.  (The Fedora version of this patch would sometimes
-cause fsck to ignore a parameter on fsck's command line in some rare
-cases, sigh.)
-
-Make sure e2fsprogs doesn't write garbage into the reserved portion of
-large inodes.
-
-Make sure resize2fs releases the blocks belonging to the old inode
-table blocks when moving the inode table.  (Addresses Debian Bug:
-#290894)
-
-Skip the r_resize_inode test if resize2fs is not compiled (due to
-configure --disable-resizer)
-
-E2fsck now checks the summary filesystem accounting information, and
-if any of the information is obviously wrong, it will force a full
-filesystem check.  (Addresses Debian Bug #291571)
-
-Fix e2fsck to not complain when the resize_inode feature is enabled,
-s_reserved_gdt_blocks is zero, and there is no DIND block allocated in
-the resize inode.
-
-Fix e2fsck to note delete symlinks that contain an extended attribute
-after the ext_attr feature flag has been cleared.  (Addresses Red Hat
-Bugzilla #146284).
-
-Add new utility program, copy_sparse.c, which is very useful
-for dealing with large sparse files (such as e2image files).
-
-Add support for jnl_blocks[] for debugfs's set_super_value.
-
-Fix filefrag so that it works correctly with sparse files.
-
-Filefrag -v will print first and last blocks.
-
-Add interpretation of OS Creator values for FreeBSD and Lites in mke2fs
-and dumpe2fs.
-
-Add mke2fs support so that it can support filesystems larger than 4TB
-automatically, by retrying with a 4k blocksize if the device size is
-too big to be expressed using a 1k blocksize.  (Addresses Sourceforge
-bug #1106631)
-
-Change blkid to test for NTFS first because Windows sometimes doesn't
-clear enough of the parition to confuse the probing routines into
-thinking the old filesystem type is still valid.  (Addresses Debian
-Bug #291990)
-
-Add support for swap partition label and uuid's in the blkid library.
-
-Add support to the blkid library to recognize Oracle ASM volumes.
-
-Make blkid -t display all devices that match the specified criteria,
-not just the first one, and work more consistently when the blkid
-cache file is not available or set to /dev/null.  (Addresses Debian
-Bug #290530 and #292425)
-
-Badblocks will now correctly display block numbers greater than
-999,999,999 in its progress display.
-
-The tune2fs program will not allow the user from setting a ridiculous
-number of reserved blocks which would cause e2fsck to assume the
-superblock was corrupt.  E2fsck's standards for what is a ridiculous
-number of reserved block has also been relaxed to 50% of the blocks in
-the filesystem.
-
-The blkid library will return vfat in preference to msdos, and ext3 in
-preference to ext2 (if the journalling flag is set) so that mount will
-do the right thing.  (Addresses Debian bug #287455)
-  
-Mke2fs will now use the -E option for extended options; the old -R
-(raid options) option is still accepted for backwards compatibility.
-Fix a double-free problem in resize2fs.  (Red Hat Bugzilla #132707)
-
-Mke2fs will now accept a size in megabytes, gigabytes, and other units
-(via "32m" or "4g" on the command line) if the user finds this more
-convenient than specifying a block count.
-
-Fix an obscure, hard-to find bug in "e2fsck -S" caused by an inode
-cache conherency problem.
-
-Debugfs now supports a new command, set_inode_field, which allows a
-user to manually set a specific inode field more conveniently, as well
-as set entries in the indirect block map.
-
-Debugfs's set_super_value command has been enhanced so that the user
-can set most superblock fields, including the date/time fields and
-some of the more newsly added superblock fields.
-
-E2fsprogs programs now accept an offset to be passed to the file
-specifiers, via the syntax: "/tmp/test.img?offset=1024".
-
-E2fsprogs programs will now accept blocksizes up to 65536; kernel
-support on the x86 doesn't exist for now, but it can be useful on
-other architectures with page sizes greater than 4k.  There are 2.6
-kernel patches out there which enable this, but they are of this
-writing still experimental.
-
-The e2image command now takes the -s option which will scramble
-directory entries for raw image files.
-
-Fix a file descriptor leak in the filefrag program.
-
-Make sure e2fsck doesn't crash when /proc/acpi/ac_adapter is not
-present.
-
-Fix bug in debugfs where kill_file would lead to errors when deleting
-devices and symlinks.  (Sourceforge Bugs #954741 and #957244)
-
-Fix bug in the blkid library when detecting the ocfs1 filesystem 
-
-Remove obsolete EVMS 1.x and a.out DLL support.
-
-E2fsck will attempt to recover from a journal containing illegal blocks.
-
-Fixed two potential ordering constraint problems in e2fsck which might
-cause the filesystem to be corrupted if e2fsck is interrupted during a
-(extremely narrow) race window.  Thanks to Junfeng Yang from the
-Stanford Metacompilation group for pointing this out.
-
-Fixed bug in e2fsck where it would not accurately detect whether or
-not the system is running on adaptor if the ACPI device representing
-the AC adapter didn't correspond to the what was used on IBM
-Thinkpads.
-
-Change e2fsck to accept directories greater than 32MB.
-
-Fix e2fsck so that a checkinterval of zero disables a time-based check
-of the filesystem.
-
-Debugfs will check the DEBUGFS_PAGER enviroment variable in preference
-to the PAGER environment variable.  (Addresses Debian Bug #239547)
-
-Tune2fs will not mark rewrite the superblock if the feature bitmasks 
-are not modified.
-
-The debugfs program will set the filetype information when creating a
-link.
-
-Add debugfs -d option to use a separate source of data blocks when
-reading from an e2image file.
-
-Add e2image -I option which allows the e2image metadata to be
-installed into a filesystem.
-
-Fixed bug in the badblocks program which caused "done" to always
-appear in english even when a translation was available.  (Addresses
-Debian Bug #252836)
-
-The blkid program has a new option -o which controls the output format
-of the blkid program; this is makes blkid more convenient to use in
-shell scripts.
-
-Fix a minor bug in uuid library, which was not using the full 14 bits
-of clock sequence when generating UUID's.
-
-Fix a Y8.8888K problem in the uuid library.
-
-Logsave now creates a new session id for itself to avoid getting
-killed by init whan transitioning between init levels.
-
-Change the licensing of the UUID library to be the 3-clause BSD-style
-license; this allows Apple to use the uuid library in Darwin.
-
-Add ocfs and ocfs2 probe support into the blkid library.
-
-Fix a memory and file descriptor leak in the blkid library.
-
-The blkid library will revalidate the device if the system time is
-earlier than last verification time of the device, since that
-indicates that the system time is probably nottrustworthy.
-
-The blkid library will override the default location of the blkid.tab
-file by the BLKID_FILE environment variable, if it is available.
-
-Change the getsize functions to use the BLKGETSIZE64 ioctl on Linux 2.6.
-
-Add various portability fixes for lame new versions of glibc, Darwin
-and GNU/KFreeBSD, as well as removing XSI:ism's.  (Addresses Debian
-Bugs #239934, #264630, #269044, #255589, #289133)
-
-Add support for Windows 9x/NT under Cygwin.
-
-Updated and clarified various man pages.  (Addresses Debian Bugs #236383,
-       #241940, #238741, #242995, #256669, #268148, #256760, #273679)
-
-Updated and fixed translations.   (Addresses Debian bugs #244105, #262836)
-
-Update the rpm spec files so that it works better with Fedora core 2
-and RH9.
-
-Fixed various Debian packaging issues (see debian/changelog).  In
-particular, fixed the Debian initrd scripts.  (#241183, #248050,
-#253595, #247775)
-
-
-Programmer's notes: 
--------------------
-
-Fixed various gcc -Wall warnings.
-
-The uuid library now has new functions uuid_unparse_upper() and
-uuid_unparse_lower() which forces the case of the hex digits to be
-upper case, or lower case.
-
-The build process has been speeded up by enhancing the subst program
-to update the modtime on the generated files even when the generated
-file hasn't changed.
-
-The uuid library now uses C99 stdint.h types instead of custom types.
-
-Updated config.guess and config.sub with newer versions from the FSF.
-
-Removed out of date .cvsignore files from the source distribution.
-
-The ext2fs_unlink() function will return an error if both the name and
-inode number are unspecified, to avoid doing something surprising
-(such as unconditionally deleting the first directory entry).
-Directory entries are now deleted by coalescing them with the previous
-directory entry if possible, to avoid directory fragmentation.  This
-is not an issue with the e2fsprogs suite, but may be a problem for
-some of the users of libext2fs, such as e2tools.
-
-Add support for version numbers of the form "1.36-rc1".
-
-Fix build of mke2fs.static.
-
-Add basic ext2fs library support for large (EA in inode) inodes.
-
-The test_io mechanism can now abort after n reads or writes to a
-particular block.  The block is specified by TEST_IO_BLOCK environment
-variable, and the read/write count by the TEST_IO_READ_ABORT and
-TEST_IO_WRITE_ABORT environment variables.  The block data is now only
-dumped if the 0x10 bit is set in TEST_IO_FLAGS.
-
-UUID_DEFINE() in the uuid library now creates a static variable, with
-__attribute__ ((unused)) if we are using GCC, so that UUID_DEFINE can
-be used in header files.
-
-Add support for the install-strip and install-shlibs-strip targets, as
-suggested by the GNU coding guielines.  "make install" no longer
-strips the binaries which are installed.
-
-Remove support for the --enable-old-bitops configure option which was
-only for very old sparc systems.
-
-Remove support for --enable-clear-htree; this was only needed during
-the early development of the htree patch.
-
-Use Linux-kernel-style makefile output so it is easier to see compiler
-warnings.
-
-Update gettext files to version 0.14.1.
-
-Update to use autoconf 2.5x.
-
-Improved support for compiling e2fsprogs under dietlibc.
-
-Make e2fsprogs portable to Solaris and FreeBSD systems.
-
-Add blkid_verify(), blkid_get_library_version(), and
-blkid_parse_version_string() functions to the blkid library.
-
-Add pkg-config files for e2fsprogs's libraries.
-
-Fix "make uninstall" to so that it removes everything that is installed.
-
-Add a configure --enable-maintainer-mode option which enables the
-makefile rules to rebuild the configure script from configure.in, and
-to reubuild the .gmo files in po directory.
-
-Drop the sparc assembly bitwise operations; it's less efficient
-than the GCC 3.4 compile code and triggers compiler warnings on
-sparc64.  Thanks to Matthias Andree for his analysis and suggestions.
-(Addresses Debian Bug #232326)
-
-
-E2fsprogs 1.35 (February 28, 2004) 
-==================================
-
-E2fsck has a new -k option, which in conjunction with the -c options,
-preserves the existing badblocks list.
-
-Cleaned up e2fsck's preen-mode messages during the passes 1b, 1c, and 1d.
-
-E2fsprogs will now deal correctly with symlinks that contain
-extended attribute information, which can be created using SE Linux.
-(Addresses Debian Bug #232328)
-                                                                               
-Remove a double longjump into an invalid stack frame bug in e2fsck.
-(This was during an abort sequence, which normally worked on Linux and
-caused a core dump on other operating systems.)
-
-Fix NLS bug in e2fsck, by avoiding trying to expand an empty string
-(the NLS library will replace "" with the .po header information).
-Fix a bug in mke2fs which caused -T largefile or -T largefile4 to core
-dump due to a division by zero error.  (Addresses Debian bug #207082)
-
-Fixed a bug in e2fsck which caused it to incorrectly fix a filesystem
-when reconnecting a directory requires creating a lost+found
-directory.  (Addresses Debian bug #219640).
-
-Fixed a bug where e2fsck would bomb out if a journal needed to be
-replayed when using an alternate superblock.
-E2fsck will give an extra grace period before actually forcing a check
-if the laptop is running on battery.  The next time fsck runs while
-the system is on the AC mains, or after the grace period is exceeded,
-the filesystem will be checked.  (Addresses Debian bug #205177)
-
-E2fsck will inform the user when there are 5 or fewer mounts before a
-filesystem check will be forced.  (Addresses Debian bug #157194)
-
-Fix e2fsck's handling of corrupted indirect blocks in the bad block.
-We now correctly handle the case where there is an overlap between a
-block group descriptor or a superblock and a bad block indirect block.
-In the case where the indirect block is corrupted, we now suggest
-"e2fsck -c".
-
-Fix byte swap bugs in e2fsck that caused the journal backup location 
-in the superblock and symlinks created by SE Linux to be cleared
-by e2fsck on big-endian machines.  (Addresses Debian bug #228723)
-
-E2fsck -c now replaces the current list of bad blocks with the ones
-found by badblocks.
-
-Fix bugs in e2fsck and tune2fs which could cause a core dump if a
-non-existent LABEL or UUID specifier is to e2fsck or tune2fs.
-
-Fix a potential bug in e2fsck which could cause it to core dump when
-trying to print the location of the backup superblock.
-
-Protect against a potential core dump in e2fsck when printing a
-message about backup superblocks.
-
-Add support for backing up the journal inode location in the
-superblock.  E2fsck will automatically save the journal information in
-the superblock if it is not there already, and will use it if the
-journal inode appears to be corrupted.  ext2fs_add_journal_inode()
-will also save the backup information, so that new filesystems created
-by mke2fs and filesystems that have journals added via tune2fs will
-also have journal location written to the superblock as well.
-Debugfs's logdump command has been enhanced so that it can use the
-journal information in the superblock.
-
-E2fsck will now update all superblocks when moving the journal inode.
-  
-Shrink the size of the e2fsck executable by moving some initialized
-variables to the BSS segment.
-
-E2fsck will avoid printing the ^A and ^B characters which bracket the
-progress bar when stdout and stdin are a tty device instead of a pipe
-to another program.  (Addresses Debian bug #204137)
-
-Debugfs's mkdir command will automatically expand the directory if
-necessary.  (Addresses Debian Bug: #217892)
-Fixed a bug in debugfs so that copying a file from /dev/null uses the
-correct mode bits.  (Addresses Debian Bug: #217456)
-If the environment variables DEBUFS_PAGER and PAGER are not set,
-debugfs now searches for the appropriate pager to use, beginning with
-/usr/bin/pager, and then falling back to 'more' and 'less'.
-(Addresses Debian bug #221977)
-
-Debugfs will now support 2.6 device numbers where the major or minor
-number may be larger than 255.  (Addresses Sourceforge bug #865289)
-Fix debugging printf in resize2fs.  (Addresses Debian Bug #271605)
-
-Chattr now stops processing options when it sees '--'.  (Addresses
-Debian bug #225188)
-
-Fix regression tests so they work correctly when e2fsprogs is compiled
-with configure --disable-htree.
-
-Fix bug in uuid library when there is no network card and the library
-is generating a time-based uuid.  The random MAC address was not
-correctly generated to be a multicast address.
-Add compile_et extensions from Heimdall that were missed the first time
-around.
-
-Fix bug in badblocks when using O_DIRECT; we need to make sure that
-we're reading from an offset which is page aligned.  For read-only and
-read-write tests, we try to recover after an error so that we can
-continue reading on page-aligned boundaries.  (Addresses Debian Bug
-#203713)
-  
-Badblocks now checks 64 blocks at a time instead of 16.  (Addresses
-Debian bug #232240)
-Updated and clarified various man pages.  (Addresses Debian Bug
-#206845, #222606, #214920, #232406)
-
-Updated and fixed translations.   (Addresses Debian bugs #200086, #214633)
-
-Fixed various Debian packaging issues (see debian/changelog).
-
-Programmer's notes: 
--------------------
-
-Fixed a build problem so that e2fsprogs would compile with the
---enable-profile option to configure selected.  (Addresses Sourceforge
-bug #811408)
-Fixed C++ problems with the ext2fs.h header.  (Addresses Red Hat
-Bugzilla Bug #112448)
-                                                                               
-Centralize code which calculates the location of the superblock
-and block group descriptors so that it is in a single library routine.
-
-Added two new functions, ext2fs_file_open2() and
-ext2fs_inode_io_intern2() which take a pointer to an inode structure.
-
-Fix compile_et to output the correct prototype for
-initialize_xxx_err_table_r() in the header file.  (Addresses Debian
-bug #204332)
-
-In the lib/et makefile, make sure com_err.info is deleted on "make clean".
-  
-Fix 64-bit warnings in e2fsprogs pass1b by using inttypes.h if
-present.  This is for when we try stuffing an int into void * pointer.
-
-Fix type-punning which can cause gcc 3.x to miscompile code by getting
-confused about pointer aliasing.  ext2fs_getmem(), ext2fs_free_mem(),
-and ext2fs_resize_mem() all now take a 'void *' instead of a 'void
-**'.  The EVMS code uses an ugly union approach since we don't want to
-modify the EVMS interfaces. 
-
-Make sure all Makefiles use $(MAKE) rather than hardcoded "make", to
-aid build process on systems can use invoke GNU make as "gmake".
-
-Added regression testing for mke2fs.
-
-Fixed gcc -Wall nitpicks.
-
-Fixed various compiler warnings.
-
-Add portability fixes for FreeBSD and for using fsctl under Darwin to
-support ext2 ioctl's.
-
-
-E2fsprogs 1.34 (July 25, 2003)
-===============================
-
-Fixed a bug introduced in E2fsprogs 1.30 which caused fsck to spin in
-a tight loop while waiting for a child fsck to exit in some cases.
-This burns CPU times which slows down the low-level filesystem check.
-
-Added code to mke2fs to assure that the default block size for a
-filesystem is at least as big as the sector size of the device, if it
-can be determined.
-
-Changed mke2fs and resize2fs to round the default size of a filesystem
-to be an even multiple of the VM pagesize in order to avoid a Linux
-kernel bug introduced when the storage of the buffer cache was moved
-into the page cache.
-
-Mke2fs will warn the user when creating a filesystem with journaling
-and a blocksize greater than 4096.  (Addresses Debian bug #193773)
-
-Fixed a bug in resize2fs which caused it to fail on filesystems with a
-non-empty bad block list.  Resize2fs now discards any blocks on the
-badblock list which are no longer part of the filesystem as the result
-of a filesystem shrink.  (Note: this means that shrinking and then
-enlarging a filesystem is no longer a reversible operation;
-information about bad blocks in the part of the filesystem which is to
-be chopped off will be lost.)
-
-Changed resize2fs so the user can use prefixes to specify the units of
-the new filesystem size (sectors, kilobytes, megabytes, or gigabytes),
-and to make the error and informational messages explicitly display
-the blocksize used by the filesystem, in order to avoid confusion.
-(Addresses Debian bug: #189814)
-
-Added a new debugfs command, dump_unused, which dumps the contents of
-all unused blocks to stdout.  (Useful as an emergency try-to-find
-deleted data command.)
-
-Added a new debugfs command, imap, which prints the location of a
-specified inode in the inode table.
-
-Fixed a bug in the badblocks program which caused it to use one bit of
-randomness in its non-destructive read/write test, instead of using a
-full 8 bits of randomness.
-
-Added a new option (-t) to badblocks, which allows the user to control
-the test pattern(s) used when checking a disk.
-
-The blkid probe function now more correctly detects UDF filesystems.
-
-Fixed a bug in the blkid library which caused it to not update its
-cache if a filesystem changes from having a label to not having a
-label.
-
-Fixed a bug in the blkid library wihch could avoid an infinite loop
-in blkid_find_dev_with_tag() if /proc is not mounted and there the
-/etc/blkid.tab file has not yet been created.
-
-Fixed the badblocks program so that the destructive read/write test
-honors the -c option, and to use O_DIRECT when possible to avoid
-thrashing the system block buffer cache.
-
-Fixed various NLS issues.
- - Added Czech and Swedish translations
- - Removed testing NYC translation
- - Fixed NLS support for message abbrevations in e2fsck
- - Remove de-utf.po, since we shouldn't have two versions using different
-       charset encodings.
- - Used ngettext() (abbreivated with the macro P_(str1, str2, n)) to 
-       simplify the statistics reporting in e2fsck.
-
-Changed configure.in so that its defaults for *BSD systems no longer
-build an fsck wrapper, and not to install in /usr/local by default.
-
-Fixed some minor spelling errors/typo's in e2fsck and the configure
-script.
-
-Fixed various Debian packaging issues (see debian/changelog). 
-
-Updated and clarified man pages.  (Addresses Debian Bug #195616)
-
-Programmer's notes: 
--------------------
-
-Fix gcc -Wall nitpicks.
-
-Updated gettext implementation used by e2fsprogs to 0.11.5, and enable
-NLS support by default.  (Added partial workaround for gettext/Darwin
-incompatibility problems.)
-
-Added full MIT KRB5 and Himdall compaibility support to the com_err
-library and the compile_et program.  (Addresses Debian bug #191900)
-
-Added the blkid_known_fstype() function to the blkid library, which
-returns true if it is passed a filesystem type which is recognized by
-the blkid probing functions.
-
-Improved the documentation for the blkid library.
-
-Added the ext2fs_get_device_sectsize() function the the ext2fs library, which
-returns the hardware sector size of a device, if it is available.
-
-Added a dependency in the blkid library's .so file to the uuid
-library, since the former uses the latter.  (Addresses Debian bug
-#194094)
-
-Added --with-diet-libc and --disable-evms to the configure script.
-
-Fixed a minor memory leak in the badblocks program.
-
-Fixed a portability problem in tune2fs --- not all systems have strptime().
-
-Fixed a portability problem in debugfs with the use of getopt() more
-than once.  Old-style BSD, new-style BSD, and Linux C libraries all do
-things differently.
-
-Add support Windows support to ext2fs_get_device_size().
-
-Added (normally disabled) debugging code to the Unix I/O manager which
-causes it to disable all userspace caching if the NO_IO_CACHE is
-defined.
-
-Changed the test I/O manager so it can always be linked into e2fsck,
-mke2fs, and tune2fs if enabled via --enable-test-io-debug to the
-configure script.  The test I/O manager will only print any debugging
-information if the TEST_IO_FLAGS or TEST_IO_BLOCK environment
-variables are set, which specifies which I/O operations are logged and
-a block number to watch, respectively.  The log messages are sent to
-stderr by default, unless a filename is specified via the
-TEST_IO_LOGFILE environment variable.
-
-
-E2fsprogs 1.33 (April 21, 2003)
-===============================
-
-Added a new utility program, logsave, which captures the output of a
-command in a log file, even if the containing directory hasn't been
-mounted yet (in which case the it saves the output in memory until it
-can write out the logfile).  This is useful for capturing the
-output of fsck during the boot sequence.
-
-Fixed some portability problems that were causing problems under
-the Cygwin32 environment.
-
-Mke2fs now interprets a negative number to the -b option as a minimum
-block size.
-
-Fixed a bug in mke2fs which was incorrectly checking the argument to
-the -g option if the default block size was used.  (Addresses Debian
-bug #188319)
-
-Fsck now explicitly ignores tmpfs and devpts, and it will complain if
-it can not find filesystem checkers for jfs, reseirfs, and xfs.
-
-E2fsck now updates the global free block and inode counters from the
-block group specific counters quietly.  This is needed for an
-experimental patch which eliminates locking the entire filesystem when
-allocating blocks or inodes; if the filesystem is not unmounted
-cleanly, the global counts may not be accurate.
-
-Imported bug fixes to the EVMS plugin from the EVMS 2.0 tree.  (EVMS
-2.0 is not yet supported; this only pulled in the bug fixes: fixed
-possible hangs caused by bugs in calling waitpid, and not setting the
-pipe to non-blocking mode; also fixed a file descriptor leak; made
-sure all functions call log entry/exit functions.)
-
-Badblocks now flushes its output file as bad blocks are discovered.
-
-The uuid library is now more paranoid about assuming the correctness
-of the /dev/random device; it mixes in a stream of bytes from
-random/srandom, just in case.
-
-Update Debian files to reflect the fact that I am now the Debian
-maintainer of e2fsprogs.  Other various Debian-specific packaging
-cleanups.
-
-Move the source tarball generation functions from the top-level
-makefile to the util/gen-tarball script.  
-
-Updated the Turkish .po translation file.
-
-Added Heimdal and MIT krb5 extensions to the com_err library to make
-it more compatible with com_err libraries from those distributions.
-
-Changed dumpe2fs to always display the superblock fields relating to
-the journalling and/or directory indexing feature even if those
-features are not enabled.
-
-Updated and clarify copyright statement vis-a-vis alpha releases of
-e2fsprogs.
-
-The ss library will now try to dynamically link to the readline
-library and use it if it is present in the system.  This means that
-the debugfs program now has line editing and history features.  The
-SS_READLINE_PATH environment variable is used to find a readline or
-readline-compatible library.
-
-E2fsck now finds most duplicate filenames (all when rebuilding all
-directories via the -D option) and offers to delete or rename
-duplicate filenames/directory entries.  (Addresses Debian Bug #176814).
-
-Fix bug in e2image.  When writing out a raw image file, include data
-blocks from symlinks that do not store the symlink within the inode.
-
-Fix bug in resize2fs which incorrectly moved the block and inode
-bitmaps for sparse superblock filesystems and incorrectly marked
-blocks as in use.  (Addresses Debian bug #174766)
-Added a new shared library, the blkid library, which efficiently
-allows fsck, mke2fs, e2fsck, and tune2fs to be able to look up LABEL
-and UUID filesystem specifiers without needing to search all of the
-devices in the system.  Instead, the device is looked up in a cache
-file, and then verified to make sure the blkid cache is correct.
-
-Tune2fs and e2label will accept LABEL=xxx and UID=yyy specifiers for
-the device name, using the blkid library.  (Addresses Debian bugs
-#166048, #179671)
-
-Fsck now supports backslash escapes in /etc/fstab so that \040 can be
-used for spaces in device labels.
-
-Removed 32-bit limitations for debugfs's dump command.
-
-If the user specifies a large number of inodes, Mke2fs will
-automatically adjust the number of blocks per group to find a valid
-set of filesystem parameters.
-
-Add workaround to detect broken MD devices where when some of the
-underlying devices are marked read-only, writes to the MD device are
-silently dropped.  E2fsck will detect if there is an attempt to run
-the journal twice, and abort with an error if this is the case.
-(Addresses IBM Bugzilla bug #1226)
-
-E2fsck will print an error if more than one of the -p/-a, -n or -y
-options are specified.
-
-E2fsck will fix HTREE corruptions in preen mode, without stopping the
-boot process.  This is needed because the 2.4 ext2 filesystem
-accidentally had the INDEX_FL backwards compatibility code removed.
-
-Mke2fs no longer creates filesystems with the dir_index flag set by
-default; the user has to specifically request it.
-
-Update and clarified various man pages. (Addresses Debian bugs
-#173612, #175233, #175113, and #170497, #185945, #188318)
-
-Created man page for the mk_cmds program (from the libss library).
-
-Programmer's notes: 
--------------------
-
-Fix various gcc -Wall nits.
-
-Fixed a lot of portability problems that caused e2fsprogs not to build
-successfully under Solaris and Apple/Darwin.
-
-Fixed a Makefile dependency to allow building e2fsprogs using parallel
-make jobs.
-
-Changes to create a subset distribution which consists only of the
-et, ss, uuid, and blkid libraries.  The configure script and top-level
-makefile were changed to support working with a subset distribution.
-
-Removed EXT2_FEATURE_RO_COMPAT_BTREE_DIR mention of since it's not
-actually used, and might people who are looking for
-EXT2_FEATURE_COMPAT_DIR_INDEX, which is in use.
-
-Updated debian files to fix a number of Lintian warnings.
-
-Updated config.guess and config.sub with newer versions from the FSF.
-
-Removed unnecessary libraries from being linked into the fsck, lsattr, 
-chattr, and blkid executables.
-
-E2fsprogs 1.32 (Nomvember 9, 2002)
-==================================
-
-Fixed a bug in the Unix I/O routines which caused needless writebacks
-of clean blocks from the unix_io cache (they were erroneously marked
-as being dirty, so they were getting written back to disk before
-getting evicted from the disk cache).  This was harmless, but it
-significantly slowed down e2fsck.
-
-Made some other minor optimizations to the Unix I/O routines to save a
-small amount of CPU time.
-
-Updated internationalization files.
-
-
-E2fsprogs 1.31 (Nomvember 8, 2002)
-==================================
-
-Update EVMS ext2fsim plugin with EVMS 1.2.  (We still support
-compiling the fsim plugin with EVMS 1.0 and 1.1.)  Add better error
-handling for child process that die unexpectly.  Add a hack to force
-mkfs to create filesystems that won't cause problems with hardware
-that has 2k or 4k minimum blocksize requirements.  Read from child
-processes in non-blocking mode, so that the GUI continues to update.
-
-Fix e2fsck so that it returns the appropriate exit code when the root
-filesystem has been changed, so that system's rc scripts will be told that 
-the system needs to be rebooted.
-
-Fix a bug in ext2fs_flush/ext2fs_close; when the MASTER_SB_ONLY flag
-was set, some of the descriptor blocks that should have been written
-out were getting skipped.
-
-Changed e2fsck to force out changes to the backup copies of the
-superblock and block group descriptors when important changes are made
-to those data structures.
-
-Fix a bug where e2fsck could erroneously mark a filesystem as being
-clean if a check of dirty filesystem is interrupted with a ^C.  (Bug
-introduced in e2fsprogs 1.28.)
-
-If journal debuging is enabled using --enable-jbd-debug, the debugging
-level is now set via the E2FSCK_JBD_DEBUG environment variable.
-
-If byteswapping support is disabled using configure --disable-swapfs,
-skip the tests which depend on byte-swapping, so that "make check"
-won't bomb out.
-
-Lshattr will now display the indexed directory flag.  Also, some of
-the more esoteric compression flags are supressed unless compression
-support has been enabled.
-
-Update man pages.
-
-
-E2fsprogs 1.30 (October 31, 2002)
-=================================
-
-When resizing a filesystem, and inodes need to moved, resize2fs will
-update the inode's ctime field, and the mtime field of the containing
-directories, so that incremental backups using dump/restore will work
-correctly.
-
-In order to avoid spurious errors, e2fsck wil check the last
-superblock write time to determine whether or not it can safely use
-the LOW_DTIME checks to determine if there are inodes on the orphan
-inode linked list that had somehow gotten disconnected.  (Addresses
-Sourceforge bug #620980)
-
-Partition in /proc/partitions that being with the string "lvm" are
-considered real partitions even if they do not end with a number.
-
-Fixed a bug in the the uuid generation function, where if /dev/urandom
-is not present, but /dev/random is, and there isn't sufficient
-entropy, the get_random_byte function could spin a loop forever.
-
-E2fsck, mke2fs, etc. will now reliably notice when image files are
-mounted using the loopback interface.  (Addresses Sourceforge bug
-#619119)
-
-When flushing buffers (as is done by badblocks, for example) check to
-see if the BLKFLSBUF ioctl succeeds, and if so, avoid using the
-FDFLUSH ioctl which causes the MD device driver which causes confusing
-syslog messages about obselete ioctl messages.  (Addresses Sourceforge
-bug #545832).
-
-Debugfs's write command now checks to see if the destination filename
-exists before creating it.  (Addresses Sourceforge bug #478195.)
-
-When installing man pages, search for compressed man pages using all
-commonly used compression extensions (i.e., .Z, .gz, .bz2, etc.)
-
-Fixed a bug in fsck where multiple filesystems specified on the
-command were not being checked in parallel due to a logic bug
-introduced to support the FSCK_MAX_INST environment variable.
-
-We have added a new superblock field, s_mkfs_time, which indicates
-when a filesystem was created.  It is set via mke2fs, and printed out
-by dumpe2fs, but is not actually touched by the kernel.
-
-Dumpe2fs has been made more robust by not aborting if there is an
-error reading the block/inode bitmaps; instead it will still print out
-the location of the block/inode bitmaps and inode table.
-
-Add support for the an alternative block group descriptor layout which
-allows for on-line resizing without needing to prepare the filesystem
-in advance.  (This is the incomat feature flag meta_bg.)
-
-Add support for storing default mount options in the superblock, so
-that the filesystem can be mounted with specific mount options without
-needing to specify them on the mount command line or in the /etc/fstab
-file.
-
-Add support for a new inode flag, which is to be used for indicating
-the top of directory hierarchies for the Orlov block allocator.
-
-Fix e2fsck so that if it creates the lost+found directory, it does so
-with the more apporpriate permissions of 0700.  Also change
-mklost+found so that it also creates the directory 0700.
-
-Fixed format bug in e2fsck if NLS is in use.
-  
-Add a German translation for e2fsprogs's NLS support.
-
-Fixed e2fsck so that it more handles BAD_BLOCK_IN_INODE_TABLE even at
-the beginning of the inode table.  This won't matter much, since if
-there is a bad block at the beginning of the inode table, the root
-directory won't be available.  But at least e2fsck won't crash in this
-case.
-
-Fixed endian problems in the htree code for e2fsck and debugfs.
-  
-When byte-swapping a filesystem on a PPC architecture, byte-swap the
-bitmaps since the historical big-endian ext2 variant had byte-swapped
-bitmaps, and the ext2fs library assumes this.  This fixes the
-regression test suite on PPC machines.
-
-Fix e2image so that it handles a bad block in the inode table
-appropriately.
-
-E2fsck now uses a more sophisticated algorithm to salvage corrupted
-directories that recovers more information in the corrupted directory
-block.
-
-E2fsck now performs additional consistency checks on indexed (HTREE)
-directories.
-
-Fix bug where efsck might get confused about whether a completely
-empty directory block is an empty leaf block or an interior htree
-node.  This could cause e2fsck to get confused into think that a valid
-indexed directory was corrupted.
-
-E2fsck no longer creates an empty directory entry at the end of a
-directory block when optimizing a directory.  This would cause some
-earlier versions of the dxdir kernel code to corrupt the directory
-when attempting to split a node containing an empty directory entry.
-
-E2fsck could sometimes in rare circumstances leave the indexed flag
-set after a small directory was optimized by compressing it instead of
-indexing it.  (This should never happen in real life, since
-directories that small wouldn't have been indexed, but better safe
-than sorry.)
-
-E2fsck now only updates the master superblock in all cases.  This
-slightly shortens its run time.
-
-Ext2ed can deal with directory entries of length 0; previously it
-would get stuck in an infinite loop.
-
-Fsck now has support for reiserfs volumes when parsing LABEL= and UUID=
-specifiers.  (Sourceforge patch #613447)
-
-Badblocks will now work correctly on read-only devices such as
-CD-ROM's.  (Sourceforge patch #600451)
-
-Updated and clarified man pages.  (Addresses Debian bug #167108)
-
-
-E2fsprogs 1.29 (September 24, 2002)
-===================================
-
-Fixed a bug in e2fsck which could corrupt a directory when optimizing
-it (via the -D option) or rebuiliding the hash tree index with a 1 in
-512 probability, due to a fence post error.
-
-Fixed a bug in the LVM support code which caused LABEL='xxx' not to
-work correctly.
-
-Mke2fs now enables the directory indexing flag by default.  (Since
-this is a compatible feature flag, it's safe to do so.)
-
-Tune2fs will support setting the directory indexing feature flag.  It
-will automatically set up the default hash algorithm and hash seed
-fields in the superblock.
-
-If the bone-headed user enters the root filesystem twice in
-/etc/fstab, the -R option which skips the root filesystem will skip
-all of them.  (Addresses Debian bug #159423).  Note!  This is not a
-precedent for dealing intelligently with any other kind of doubled
-entry in /etc/fstab!
-
-
-Programmer's notes: 
--------------------
-
-Removed perror declaration in lib/et/internal.h.  All modern systems
-can be expected to define perror() these days.  Besides, the lib/et
-code wasn't using perror at all anyway.  :-)
-
-
-E2fsprogs 1.28 (August 31, 2002)
-================================
-
-Add support for the Hashed-Tree Directory Indexing to e2fsck.  Support
-for setting the htree flag is not included yet, although it can be
-manually turned on via the debugfs program.
-
-Clarified e2fsck error message which is printed when it cannot find
-sufficient contiguous block when relcating filesystem metadata.
-
-Added support for building an EVMS plugin module for ext2/3.  This
-module is substantially the same as the EVMS module shipping with EVMS
-1.1, with one or two bugfixes.  E2fsprogs can also build this plugin
-for use with EVMS 1.0 (which did not include the ext2 plugin module),
-if the configure --enable-old-evms flag is given.
-
-Fsck will search through EVMS volumes when trying to resolve
-filesystem specifications such as LABEL=xxx or UUID=xxx.
-  
-Added a new utility program, /sbin/findfs, which will return
-filesystem specifications such as LABEL=xxx or UUID=xxx, and prints
-the device name.
-
-Update and clarified various man pages. (addresses Debian Bug #145044,
-#146437, #131350, #151990, #144621, #141938)
-
-If there are no filesystems specified on fsck's command line, fsck now
-treat that as if the -As options were given.  Previously it would
-simply do nothing.  (Addresses Debian Bug #153102)
-
-Mke2fs no longer treats a failure to be able to clear the MD signature
-at the end of the filesystem as a fatal error.  (Addresses Debian Bug
-#155007)
-
-The e2p library functions (which are used by lsattr and chattr) now
-double check to make sure the file is a regular file or directory
-before attempting to use the ext2 ioctls.  Some device drivers
-unfortunately respond to the ext2 ioctl's with unknown behaviour.
-(Addresses Debian Bug #152029).
-
-The extended attribute handling has been updated to correspond with
-the latest V2 bestbits ACL code.
-
-Fixed bug in e2fsck which caused it to not clear the dtime field when
-processing truncated inodes on the orphan list.  This could cause data
-loss(!) if a filesystem is rebooted before a truncate has been
-committed.
-
-E2fsck now uses red/black trees in pass1b, which removes some O(n**2)
-algorithms.  This makes e2fsck much faster in the case of severely
-corrupted filesystems where a large number of blocks are claimed by a
-large number of inodes.  (Thanks to the 2.5 IDE device driver for
-inspiring this work.)
-
-Resize2fs has been significantly sped up when shrinking and expanding
-a filesystem by a very small number of blocks (for example, when EVMS
-is converting a partition to be an EVMS legacy volume).
-
-Added a new option to e2fsck, -D, which will optimize or compress all
-of the directories in the filesystem.
-
-E2fsck now catches SIGINT and SIGTERM to make sure it will can
-properly clean up and only exit at safe points.  Fsck will pass
-SIGINT/SIGTERM to its child processes, and wait until they have all
-exited before it exits.
-
-The uuid parsing code in the uuid library now properly complains when
-an illegally formated uuid is presented to it.  (Addresses Debian bug
-#152891)
-
-Restrict use of the 2.4 setrlimit ABI f*ckup to kernels between 2.4.10
-and 2.4.17, since the workaround can cause problems when using a 2.4
-kernel with an old version of glibc built with the 2.2 headers.
-
-Fixed a bug in mke2fs where it wasn't properly clearing the initial
-superblock used by other filesystems.  (Addresses Debian bug #147256.)
-
-Added support for the synchronous directory feature written by Andrew
-Morton.
-
-The debugfs program can delete directories using the rmdir command.
-
-Add support for 8k and 16k filesystems (for systems with page sizes
-that are greater or equal to 8k or 16k, respectively).  Note that
-these filesystems can not be mounted on x86 systems, or other systems
-with only 4k page sizes, due to limitations in the current Linux VM
-code.
-
-Resize2fs requires that the filesystem state be valid and have no
-errors; otherwise, e2fsck -f must be run first.  (Previously it simply
-required that the last fsck time be greater than the last mount time.)
-
-Configure now defaults the man pages directory to /usr/share/man on
-Linux systems.
-
-E2fsck now offers to truncate inodes which contain too many blocks (so
-that i_blocks would overflow.  Also fixed handling of large sparse
-files.
-
-E2fsck now more completely checks for symlink validity, including
-requiring NULL termination and length checks.
-
-E2fsck will offer to try forcing a disk write to remap a bad block
-after finding a read error when reading a filesystem metadata block.
-
-Fixed a bug in debugfs which caused the -b and -s options to crash
-debugfs, as well as breaking the testb, setb, and clearb functions.
-
-Added a bmap command to debugfs which calculates the logical to
-physical block mapping for a particular inode.
-
-Fixed a bug in code which checked to see if a device was mounted which
-sometimes (rarely) failed in the case of a plain file.
-
-Fixed a bug in resize2fs where when it reported an error, it would
-print a message erroneously indicating that the filesystem had been
-resized before it aborted.
-
-When resizing a plain file which is smaller than the requested size,
-resize2fs will attempt to extended the file so that programs like
-e2fsck will not complain that the file is too small.
-
-Resize2fs will print the actual new size of the filesystem when it is
-finished resizing.
-
-Fixed a bug in debugfs where "ls -l" would report incorrectl file type
-information on big-endian systems.
-
-
-Programmer's notes:
--------------------
-
-Fixed collisions with C++ reserved words.
-
-Added portability fixes for building e2fsprogs on the HURD and AIX.
-
-Added the ext2ed program for creation of test cases.  (ext2ed has many
-limitations and bugs which make it unsuitable for production use.)
-
-The ext2fs_read_dir_block2 and ext2fs_write_dir_block now take a new
-flag, EXT2_DIRBLOCK_V2_STRUCT, which will will reverse when the
-name_len field is byte swampped on big-endian machines, since in the
-V2 structure, name_len is a char field which is doesn't need to be
-byte swapped --- except if an old-style kernel had byte-swapped the
-name_len field as part of the V1 structure.
-  
-
-E2fsprogs 1.27 (March 8, 2002)
-==============================
-
-The warning messages for mke2fs now go to standard error.
-
-Fixed to make sure "make check" runs all of the test programs with
-LD_LIBRARY_PATH set, so that we test the libraries in the build tree.
-
-The mke2fs program checks the boot sector for the BSD disk label, and
-avoids erasing it if it is there.
-
-Fixed a bug in e2fsck which caused it to core dump if the journal
-inode was missing when it was supposed to be there.
-
-E2fsck now prints ranges in pass 5 when printing deltas for the block
-and inode bitmaps.
-
-Debugfs's "ls -l" command now will print out the file type information
-in the directory entry.
-
-Create man pages and hard links for fsck.ext3 and mkfs.ext3.  If
-mke2fs is invoked as mkfs.ext3, create the filesystem with a journal.
-
-Debugfs can now examine the experimental directory indexing
-information.
-
-Fixed bug in debugfs which caused it to core dump if modify_inode is
-called without an open filesystem.
-
-The debugfs lsdel command now runs its output through a pager first.
-
-When installing manual pages, remove the compressed manual pages first.
-
-Synchronized with Debian's packaging information for e2fsprogs-1.26-1.
-
-Fix the 2.4 resource limitation workaround introduced in 1.26 which
-actually broke things on mips32, sparc32, and Alpha platforms.
-
-Updated the I18N code so that calls to setlocate(LC_CTYPE, 0) are made
-(which is required by the newer libintl libraries).
-
-Programmer's notes:
--------------------
-
-Fixed various gcc -Wall complaints.
-
-Fixed a few memory leaks in the e2fsck journaling code, and in the
-ismounted code checking for a swap device.
-
-Add new inode I/O abstraction interface which exports an inode as
-an I/O object.
-  
-Exported ext2_file_flush as a public interface.
-  
-In ext2_file_write, we now mark the buffer void * argument as a const, since ext2_file_write doesn't modify the buffer.
-
-Lots of small random portability fixes to make e2fsprogs build under
-AIX --- even without the 5L compatibility toolkit, and even using the
-uber-crippled AIX native C compiler.
-
-
-E2fsprogs 1.26 (February 3, 2002)
-=================================
-
-Dumpe2fs will keep going now if the bad block inode can't be read.
-(Previously it stopped with a fatal error.)
-
-E2fsck will now give an opportunity to run the journal even if the
-recovery flag is not set.  This is the default behaviour if e2fsck is
-using a backup superblock, since the needs_recovery flag will never be
-set in the backup superblock copies.
-
-E2fsck now automatically finds the backup superblock/group descriptors
-even when the primary superblock is completely destroyed for 2k and 4k
-filesystems.  (Previously it just guessed/assumed that we were dealing
-with a 1k filesystem in that case, and users had to manually specify
-the backup superblock number.)
-
-Fixed a bug in e2fsck where it dereferences a null pointer when there
-is a problem opening a filesystem in preen mode.
-
-E2fsck now handles external journals correctly; previously it trashed
-the external journal device if the journal needed to be replayed.
-
-Work around ulimit incompatibility problem caused by recent 2.4
-kernels; the unix IO module will automatically try to set any resource
-limits to be infinite on startup.
-
-Fixed a bug in e2fsck where it wasn't allocating a new block or inode
-bitmap if it wasn't present and the blocksize was 2k or 4k.
- (Addresses Debian Bug #116975)
-
-E2fsck will check and fix botched ext3 V1 to V2 superblock updates by
-clearing the new V2 fields if they do not make sense or if the ext3
-superblock is version 1 superblock.
-
-E2fsck will automatically relocate the ext3 journal from a visible
-file (i.e., /.journal) to an hidden inode if the filesystem has been
-opened read/write.  This allows the users to add a journal while the
-filesystem is mounted, but the next time the system is rebooted, the
-journal file will disappear.  This avoids problems with backups,
-stupid operators with superuser bits, etc.
-
-Fix a bug in fsck where it would not support a filesystem type of
-"auto" if the device was specified in terms of LABEL=xxx or UUID=xxx.
-
-Fsck now supports fstab entries of the form "ext3,ext2".  It will also
-automatically identify reiserfs filesystems.
-
-The number of processes spawned by fsck can now be limited using the
-FSCK_MAX_INST environment variable.
-
-Fsck now searchs the LVM proc hierarchy to find logical volumes which
-should be searched for  UUID and label information.
-
-Work around a bug in 2.4.10+ kernels by trying to unset the filesize
-limit if at all possible, when opening a block device.  (The filesize
-limit shouldn't be applied against writes to a block device.)
-
-In mke2fs and e2fsck, specifying the -c option twice will now do
-a read/write test on the disk.  Update the man pages to encourage
-using the -c option, and to discouraging running badblocks separately,
-since users tend to forget to set the blocksize when running 
-badblocks.
-
-Mke2fs now automatically clears the immutable attribute on a
-pre-existing .journal file left over from a previous failed attempt to
-add a journal to an alreadyy-mounted filesystem.
-
-Fixed mke2fs's exit codes to consistently indicate when the mke2fs
-operation failed.
-
-Mke2fs now creates the lost+found directory with permissions of 0700,
-so that files that had previously lived in protected directory are
-safe if they get dropped in lost+found and the system administrator
-doesn't deal with immediately.  (Addresses Debian #bug 118443)
-
-Mke2fs and e2fsck (and all programs that use the
-ext2fs_check_if_mounted function) will now properly identify that a
-device is mounted, even in cases where devfs has confused things with
-multiple devices names with the same identity, or if a dim-witted
-system administrator has done something stupid like creating device
-file aliases in their home directory.  Also now checks for swap devices
-by using /proc/swaps.  (Addresses Debian bug #106622)
-
-Added a new option (-T) to tune2fs which sets the time a filesystem
-was last checked.
-
-Speed up e2image when creating sparse raw image files by optimizing
-away excess lseek() system calls.
-
-Fix support of large (> 2GB) files when used as a filesystem in
-mke2fs, tune2fs, debugfs, and findsuper.
-
-Debugfs's stat and icheck commands now properly deals with large (>
-2GB) files.
-
-Debugfs's set_super_value command now prints out the list of valid
-superblock fields which can be set using the command.
-
-Debugfs's rm and kill_file command now updates the superblock free block
-and inode counts, thus keeping the filesystem consistent.
-
-Debugfs's lsdel command now takes an optional argument which allows
-the user to only see the most recently deleted files.
-
-A new command (undel) was added to debugfs which automates
-undeleting a deleted inode and linking it back to a directory.
-
-Debugfs's ls command now takes a new option, -d, which lists 
-deleted directory entries.
-
-Debugfs's testb, freeb, setb, and find_free_block commands now take an
-optional count argument.
-
-Add support for a new ext2 file attribute, EXT2_NOTAIL_FL, which will
-be used to signal that a particular inode should not be eligible for
-tail-merging --- this is needed for programs like LILO.
-
-The findsuper (an unreleased, uninstalled utility program) has been
-improved to add extra validity checks and to add a progress meter.
-(It is still an unsupported program; the officially supported way to
-recover from a trashed partition table is to use gpart; findsuper is
-for wizards only.  :-)
-
-Debugfs was fixed to compile with "configure --disable-swapfs".
-
-Cleaned up various manual pages.   (Addresses Debian bug #119624, #120171)
-
-Added new translation file for Turkish.
-
-Programmer's notes:
--------------------
-
-Fix general gcc -Wall complaints.
-
-E2fsprogs (mostly) works with the dietlibc.
-
-The programming texinfo file has been expanded to include description
-of additional libext2fs functions.  (Still not compeltely done, but a
-lot of the more important functions have been documented.)
-
-Added a umask structure to struct_ext2_filsys, which currently only
-modifies the behaviour of ext2fs_mkdir(), but if we add any file
-creation functions to libext2fs, we should also make sure they respect
-the umask setting.
-
-The build-rpm script was fixed to be a bit more safe.
-
-The tests' Makefile now has a way of automating test case creation 
-for e2fsck, using "make testnew".
-
-Created a new function, ext2fs_dir_iterate2 which passes more
-information to the callback function (identical to the one used by
-ext2fs_dblist_dir_iterate).  The directory iterator functions take a
-new flag, DIRENT_FLAG_INCLUDE_REMOVED, which will return deleted
-directory entries.  If the directory entry is deleted, the callback
-function will be called with the entry paraemter set to
-DIRENT_DELETED_FILE.
-  
-Added new functions, ext2fs_inode_alloc_stats and
-ext2fs_block_alloc_stats, which takes updates block/inode allocation
-statistics in the bitmaps, block group descriptors, and superblock
-when inodes or blocks are allocated or deallocated.
-
-
-E2fsprogs 1.25 (September 20, 2001)
-===================================
-
-This is primarily a bug-fix release; no new features were added, but
-there are a number of embarassing bug fixes and cleanups applied.
-
-Fix a bug mke2fs which causes stack garbage to be written to disk when
-zapping disk sectors.  (This bug could cause mke2fs to core dump for
-some kernels, I suspect with security enhancement patches.)
-
-Remove unneeded #include of <linux/config.h> which was breaking
-building e2fsprogs on the Hurd.  (Addresses Debian bug #112414.)
-
-Updated tune2fs man page to reflect the fact that adding or removing a
-journal doesn't require running e2fsck.
-
-Remove use of AC_REQUIRE from autoconf which had been used to prevent
-AC_CANONICAL_HOST from being called twice; unfortunately this causes
-recent autoconf to bomb out since they don't allow AC_REQUIRE to be
-used outside of autoconf macros.  Fortunately, it doesn't seem to be
-necessary any more, anyway.
-
-E2fsck will now not fall back to an alternate superblock if the user
-specifies the superblock location explicitly on the command-line.
-This allows easier recovery from a situation where the primary
-superblock and block groups are slightly corrupted, but the backup
-superblocks are completely broken.  
-
-Fix problem which caused compile_et and mk_cmds to blow up if
-e2fsprogs was in a directory with a pathname that contained spaces.
-
-We are now more paranoid about checking the entry in /etc/mtab to make
-sure the filesystem is really mounted, since some broken distributions
-(read: Slackware) don't initialize /etc/mtab before checking non-root
-filesystems.  (Slackware also doesn't check the root filesystem
-separately, and reboot if the root filesystem had changes applied to
-it, which is dangerous and broken, but there's nothing I can do about
-that.)
-
-Make UUID library C++ friendly by adding appropriate extern "C"
-declarations and using const in the function declarations.
-
-Fix up the com_err texinfo file so that it can product a valid info
-file (previously, it could only be used to generate paper
-documentation using texinfo.tex).
-
-
-E2fsprogs 1.24a (September 2, 2001)
-===================================
-
-Fix brown-paper bug in mke2fs which caused it to segfault when
-printing the version string.
-
-
-E2fsprogs 1.24 (August 30, 2001)
-================================
-
-Revert the BLKGETSIZE64 support, since for some distributions, this
-ioctl has been used by an unofficial kernel patch to update the last
-sector on the disk, and this was causing disk corruption problems as a
-result.
-
-Mke2fs is now more careful about zapping swap space signatures and
-other filesystem/raid superblock magic values so that programs like
-mount who try to use hueristics to determine the filesystem type of a
-partition are less likely to be confused.
-
-E2fsck will no longer complain if the the mode of EXT2_RESIZE_INO is a
-regular file (since Andreas Dilger's on-line resizing tools will set
-its mode bits).
-
-Fixed some minor texinfo, man pages nits for spelling errors,
-texinfo warnings, etc.  (Addresses Debian bug #110621.)
-
-E2fsprogs program no longer print the filesystem version number
-(i.e. 0.5b), since it only confuses people and doesn't serve any real
-purpose.
-
-E2fsck will once again compile under libc5, since it will supply its
-own version of strnlen if necesssary.
-
-mke2fs and tune2fs will allow the use of UUID= or LABEL= specifiers
-when specifying the external journal device.  tune2fs will also search
-devices looking for the externla journal debice when removing.  
-
-E2fsprogs 1.23 (August 15, 2001)
-================================
-
-Add initial support for extended attributes (EA); e2fsck will
-correctly handle a filesystem with EA's and check the EA blocks for
-corruptions.
-
-E2fsck's symlink sanity checking has been cleaned up.  It now checks
-the i_size value of fast symlinks, and checks for immutable flags
-being set of symlinks, etc.
-
-E2fsck now offers to clear inodes which are special files that have a
-non-zero i_blocks or i_size field.  (The i_size field check was in the
-previous version of the code, but due to a bug it didn't offer to
-clear the inode unless i_size and i_size_high were both non-zero.)
-
-E2image can now create "raw" image files, which only contain the
-filesystem metadata placed in a spare file so that e2fsck, dumpe2fs,
-debugfs, etc., can be run directly on the raw image file.
-
-Add support for the 64-bit block device patches.
-
-Fixed bugs in creating external journals with a 1k blocksize.
-
-Add initial support for external journals (so long as the external
-journal only supports a single filesystem) in e2fsck.
-
-Remove requirement for needing to run fsck on a filesystem after
-removing a journal (either internal or external).
-
-The man pages now document how to create and manage external journals.
-
-Speed up the check of an ext3 filesystems by avoiding a needless flush
-of all of the superblock and block group descriptors.
-
-Speed up creating an internal journal using tune2fs in the case where
-the filesystem has a lot blocks already allocated.
-
-Tune2fs has been fixed to make sure that only error messages go to
-stderr, and normal message go to stdout. (Addresses Debian bug #108555)
-
-Fixed a minor bug in mke2fs; if -O none is passed to mke2fs, it will
-now not set the sparse_super feature.  (Addresses Debian bug #108165)
-
-Add support in fsck for the filesystem type "auto".
-
-Fsck -A will not try to interpret device names for filesystems which
-have a pass number is 0.  (Addresses Debian bug #106696).
-
-Fsck prints a warning message if now valid filesystems are passed to
-it.  (Addresses Debian Bug #107458.)
-
-E2fsck now gives an explicit warning if there filesystem still has
-errors at the end of the run. (Addresses Debian bug #104502)
-
-E2fsck will set the EXT2_ERROR_FS flag if the journal superblock
-reflects an error.  E2fsck will also not run the orphan list if the
-filesystem contains errors, since the orphan list might be corrupted.
-
-E2fsck now prints the number of large files when given the -v option.
-
-Fixed minor memory leaks in e2fsck.
-
-Some minor man pages updates. (Addresses Debian bug #30833, #108174)
-
-
-E2fsprogs 1.22 (June 22, 2001)
-==============================
-
-Fixed a bug in e2fsck's handling of orphan inodes which are special
-files (i.e., block/character device files, named FIFO's, etc.).
-
-Fixed a bug accidentally introduced in e2fsprogs 1.21 which caused
-tune2fs to fail at adding a journal to a mounted filesystem.
-
-Fixed a few big-endian bugs in e2fsprogs
-       * The directory block functions were accidentally reporting
-               some directories as corrupted when they weren't.
-       * If e2fsprogs is compiled --disable-swapfs, the C language 
-               equivalents weren't being included for big-endian platforms.
-               (Fixes Debian bug #101686).
-
-Fixed a Hurd compilation problem.  (Addresses Debian bug #101361)
-
-Programmer's notes:
--------------------
-
-Use platform independent method of defining the BLKFLSBUF and FDFLUSH
-ioctls, and allow them to be defined for non-i386 platforms.
-
-The uuid.h header file is now protected against multiple inclusions.
-
-E2fsprogs is now being developed using BitKeeper.  Changed the test
-scripts to deal with BK's stripping CR characgters from text files,
-and changed the top-level Makefile.in to avoid including BitKeeper
-files when generating the source tarball.
-
-
-E2fsprogs 1.21 (June 15, 2001)
-==============================
-
-Added new configure flags which allow a subset e2fsprogs to be built;
-this is most useful for boot floopies, since the resulting shared
-libraries and programs are slimmed down by removing features that
-aren't necessary for a boot floppy.  The new flags that were added
-are: --disable-swapfs, which removes support for byte swapping old
-legacy PPC/68k filesystems, --disable-debugfs, which removes support
-for debugfs from the libext2fs library, --disable-imager, which
-removes support for the e2image program, and --disable-resizer, which
-removes support for resize2fs.
-
-E2fsck now prints the number of mounts or days elapsed since the last
-check when e2fsck is forced to check an otherwise clean filesystem.
-
-Tune2fs now prints an informative message about how often a filesystem
-will be checked when adding a journal to the filesystem, to remind the
-user that he/she may want to adjust those parameters using tune2fs
--c/-i.
-
-Worked around hurd brain-damage which causes e2fsck to sometimes
-believe a filesystem is the root filesystem based on device numbers
-(since Hurd doesn't have dev_t's, which is arguably a POSIX.1
-violation).
-
-Fixed a bug introduced in 1.20 which caused e2fsck to abort with an
-erroneous error with the -F option was specified.
-
-Fixed a ext3 recovery bug in the revoke handling; synchronized with
-ext3 0.7a.
-
-Fixed two bugs in e2fsck's handling of dup block handling, dealing
-with relatively uncommon edge cases: a directory with an indirect
-block which is claimed by another file, and when the last inode in the
-filesystem has blocks claimed by another file.
-
-E2fsck now checks to see if the i_size field of a fast symlink is too
-big, and offers to clear the symlink if so.
-
-E2fsck now checks to see if i_size_high of special files is non-zero,
-and offers to clear i_size_high.
-
-Fix e2fsck's handling of incompatible journal flags so that the user
-has chance to abort, and then has the option to clear out the journal
-entirely.  (Addresses Debian bug #98527.)
-
-Fixed a bug in fsck which could cause it to core dump if a mix of
-standard and non-standard device names are used in /etc/fstab.
-(Debian bug #100559)
-
-Fixed a bug in debugfs which caused read errors when copying a file to
-not be noticed.
-
-The debugfs set_super_value command can now modify the s_lastcheck field.
-
-Fixed a bug in lsattr and chattr which was accidentally introduced in
-1.20 to support > 2GB files; both lsattr and chattr wasn't reading
-directories correctly because the change modified the layout of struct
-dirent to be incompatible with the libe2p shared library.
-
-Cleaned up the mke2fs manual page and included a discussion about why
-it's good to periodically check the filesystem even when journaling is
-enabled.
-
-Programmer's notes:
--------------------
-
-Fix general gcc -Wall complaints.
-
-The types needed by the ext2 header files are now provided by
-lib/ext2fs/ext2_types.h, instead of include/asm/types.h.
-
-Integers are now preferred to longs when trying to find a 32-bit type
-in ext2_types.h.  Also, if linux/types.h has already been defined,
-don't try to redefine the types.
-
-Fixed make depend script so that it automatically corrects the
-pathname cleanups performed by make -M, so I don't have to fix them up
-by hand.
-
-Fixed the d_loaddump test case to be more robust, and not depend on
-bash'isms.
-
-Removed debugfs's dependence on pread(), which was accidentally
-intrudced in e2fsprogs 1.20
-
-Fixed a performance bug in the libext2fs's icount routine; the size
-estimate of the icount array was incorrectly being calculated.
-
-Removed use of the badblocks compatibility functions in the e2fsprogs
-programs.
-
-Added paranoia code which protects against strange cases where /etc
-isn't on the root filesystem, or if /etc/mtab doesn't exist.
-
-The header file ext2_types.h is now installed.
-
-Autoconf is used to determine when we are on big-endian machines,
-instead of doing run-time tests, to save a few bytes of code.
-
-The ext2fs_mark_generic_bitmap and ext2fs_unmark_generic_bitmap
-functions are no longer inline functions, which saves space and
-doesn't really cost any real performance.
-
-The ext2fs library no longer depends on the e2p library.  (What need
-there was of it --- namely, fsetflags, was coded in-line).
-
-Fixed the makefile so that lib/ext2fs/ext2_types.h is generated even
-when the user is stupid and tries compiling the package using "make
-install" as root.
-
-Miscellaneous code cleanups:
-       * Added missing files from Makefile.in's SRCS file, so that 
-               their dependencies would be properly calculated.
-       * Removed redundant code
-       * Fixed comments in code
-       * Removed no-longer unneeded argsused #pragma.
-
-
-E2fsprogs 1.20 (May 20, 2001)
-=============================
-
-Add support for replaying the ext3 journal purely in user mode,
-including handling the orphaned inode list.  Used code contributed by
-Andreas Dilger, with bug fixes and the orphaned inode handling done
-by Theodore Ts'o.
-
-The mke2fs and tune2fs programs can create or modify a filesystem to
-include an ext3 journal.  Tune2fs also can be used to remove an ext3
-journal from a filesystem.
-
-E2fsck will now check for the existence of a linked list of orphan
-inodes in the superblock, and clear those inodes before starting the
-rest of the filesystem check (but after the journal playback).
-
-E2fsck now validates the file descriptor passed to the -C option,
-which saves against the completion bar getting written to an
-unexpected location, such as the disk being checked.  (Debian
-bug/wishlist #55220)
-
-E2fsck will now bump the filesystem revision number from zero to one
-if any of the compatibility bits are set.
-
-Fixed a bug where a badly corrupted directory on a big endian system
-could cause e2fsck to die with a bus error.  The
-ext2fs_read_dir_block() and ext2fs_process_dir_block() functions in
-the ext2 library now does alignment sanity checks on the rec_len field
-of the directory entry before using it.
-
-The ext2 library has been enhanced to make tune2fs safe to run on
-mounted filesystems.  (Users could usually get away with using tune2fs
-on mounted filesystems before, but with the advent of ext3 and
-journaling, it became important to make tune2fs was *really* safe for
-use even when the filesystem being modified is mounted.)  E2label is
-now implemented by tune2fs using an argv[0] dispatch, so that e2label
-is also now safe for use on mounted filesystems.
-
-Added a new program, e2image, which creates a backup of critical ext2
-filesystem data structures.  The generated image file can be examined
-using dumpe2fs and debugfs.  In the future, e2fsck will be able to use
-the image file to help recover very badly damaged filesystems.
-
-Fixed a number of LFS bugs in e2fsck; very, very large (> 2**42) files
-no longer cause e2fsck to bomb out.  Also treat files > 2GB as being
-large file when deciding whether or not the filesystem has large files.
-
-Fixed lsattr and chattr so that they work correctly on large files.
-(Fixes Debian bug #72690.)
-
-Removed limitation in get_device_size() which imposed a one terrabyte
-filesystem limitation.  (Most 2.2 kernels still have a signed int
-problem which cause 1 TB block device limitation.  Fortunately, the
-kernel patches to fix this are much easier than fixing the 2TB
-limitation in the kernel.  :-)
-
-A max_mount_count of zero is now treated as if no mount count were
-set.  (Previously, no mount count was indicated by using -1, and a
-mount count of zero caused e2fsck to always be run.)
-
-Mke2fs supports two new filesystem types largefile and largefile4.
-
-Mke2fs now adds some randomness in s_max_mount_count so that multiple
-filesystems won't be all checked at the same time under normal
-operations.
-
-Fixed bug in the progress bar printing code which could cause e2fsck
-to core dump on an illegal filesystem.
-
-Fixed bug in fsck which could allow more than one instance of e2fsck
-to be printing a progress bar.  (Debian bug #65267)
-
-Fsck using a UUID or a LABEL specifier will work even if devfs is
-compiled into the kernel and not mounted.  If the pathnames in
-/proc/partitions are incorrect, fsck will search /dev for the correct
-device (using the new ext2fs_find_block_device library function).
-Fsck now also checks the RAID devices first so that they are properly
-found when they are in use.  Support has also been added to support
-additional IDE disks and the DAC 960 device names.  (Debian bug #94159)
-
-Fixed a bug in fsck which caused it not deal properly with 16
-byte long filesystem labels.
-
-Fsck's -t option has been made a lot more flexible.  The semantics for
-what happens if a comma-separated list to fsck has been regularized,
-and it is now possible to filter what filesystems will get checked
-based what is in the filesystem's fstab entry's option field.  (Debian
-bug #89483.)
-
-The dumpe2fs program can now print out the group description
-information in hex, and also prints the location of the superblock and
-block group descriptor for those block groups that have them.
-
-Mke2fs now clears the ext2 superblock before it starts creating a
-filesystem, so that the superblock magic number is only written if the
-filesystem creation process successfully completes.
-
-The debugfs program's stat command now pretty-prints the blocks used
-by an inode so that it's more compact and informative.
-
-The debugfs stats command now uses the same libe2p code (which is used
-by dumpe2fs) to print the superblock header information.  This is more
-complete, and it avoids a bit of code duplication.
-
-Added a new debugfs command, set_super_value (ssv) which allows the
-user to set arbitrary superblock fields.
-
-Debugfs was extended to support inode numbers in hex (by prefixing
-them with 0x), and so that modify_inode can set the inode generation
-number.  Also, there is now a new function command called logdump
-which will dump an ext3 journal.
-
-Fixed a bug in debugfs so that quitting out of the pager doesn't kill
-debugfs.
-
-Debugfs's dump command now stops immediately upon reporting a disk
-read error.  (Fixed a bug in ext2fs_file_read library routine which
-caused debugfs not to stop.)  (Debian bug #79163)
-
-On systems with /proc/mounts (mainly Linux systems), /proc/mounts is
-checked before /etc/mtab is used, since /proc/mounts is more likely to
-be accurate.
-
-Added portability fixes for Solaris and Linux/ia64.
-
-Various manual pages were clarified and cleaned up.  (Fixed debian
-bugs #63442, #67446, and #87216)
-
-
-Programmer's notes:
--------------------
-
-The e2fsck message printer now supports %Iu and %Ig, which will print
-out the inode's user and group owners, respectively.
-
-E2fsprogs now includes its own version of include/linux/ext2_fs.h, so
-that no longer dependent on the system having the correct version of
-the kernel header files.
-
-Added a new function to libext2, ext2fs_find_block_device(), which
-searches the system (i.e., /dev, /devfs, /devices) for a pathname to a
-device given its device number.
-
-Added a new function to libext2, ext2fs_sync_device, which centralizes
-all of the places which might try to use the BLKFLSBUF or FDFLUSH
-ioctls (and usually failing to define them since the system header
-files don't usually do this for us, and we're trying to avoid usage of
-kernel include files now).
-
-Added new utility programs in tests/progs: random_exercise and
-hold_inode.  They aren't built by default; they're useful for
-exercising ext3 filesystem code.
-
-Added a new ext2 filesystem flag, EXT2_FLAG_SUPER_ONLY, which causes
-the filesystem close functions to only update the superblock, and to
-not touch the block group descriptors.  Needed by tune2fs when
-modifying a mounted filesystem.
-
-Got rid of struct ext2fs_sb and replaced it with the standard struct
-ext2_super_block from include/linux/ext2_fs.h.  Note: this may break
-source (but not binary) compatibility of some users of the ext2
-library.  Those applications should just simply do a global search and
-replace of struct ext2fs_sb with struct ext2_super_block, and include
-the new header file <ext2fs/ext2_fs.h> which defines it.
-
-The ino_t type has been renamed ext2_ino_t to protect applications
-that attempt to compile -D_FILE_OFFSET_BITS=64, since this
-inexplicably changes ino_t(!?).  So we use ext2_ino_t to avoid an
-unexpected ABI change.
-
-The Makefiles have been reworked so that "make check" can be run from
-the top-level Makefile.
-
-Fix general gcc -Wall complaints and removed dead code.
-
-Remove use of NOARGS, because we assume everyone does ANSI C these
-days.
-
-Added build-rpm script from sct.
-
-New functions ext2fs_image_{inode,super,bitmap}_{read,write} added 
-to support e2image.
-
-New function ext2fs_flush_icache which must be called if the
-application program modifies the inode table blocks without going
-through ext2fs_write_inode() interface.
-
-New ext2fs_check_mount_point() function, which will return the mount
-point of a device if mounted.
-
-The io_channel abstraction now has an optional interface,
-io_channel_write_range, which allows specific byte ranges to be
-written.  
-
-The unix_io IO channel now supports write-through caching, so that
-journal creation is more efficient.
-
-Added x86 assembly language routines to support byte swapping, to
-reduce executable size.
-
-Fixed bug in the utility program subst so that it's possible to
-replace a substitution variable with a zero-length string.
-
-Fixed numbering e2fsck pass1 problem numbers; an extra zero had
-slipped into some of the problem number.
-
-E2fsprogs 1.19 (July 13, 2000)
-==============================
-
-Release the resize2fs program since the timeout before it could
-be released under the GPL has finally expired.
-
-Add experimental support needed for the ext2 compression patches.
-This requires compiling e2fsprogs with the --enable-compression flag
-to the configure script.
-
-Added ext3 journalling support.  E2fsck will run the journal (if
-necessary) by temporarily mounting the filesystem.  /sbin/fsck.ext3 is
-installed as a symlink to e2fsck.  Fsck has been taught about ext3,
-and treats it the same as ext2 in terms of the progress bar logic.
-Dumpe2fs will display the superblock journaling information if the
-filesystem has a journal.  The ext2 library will now permit opening an
-ext3 filesystem with the recovery flag set.  This is necessary for
-on-line dump's to work correctly, but there may be issues with this
-working well since ext3 is much less agressive about syncing blocks to
-the filesystem, since they're safe on the journal.
-
-Tune2fs and e2fsck have been changed to allow the mount_count check to
-be disabled by setting max_mount_count to -1.  (This was already
-supported by the kernel.)
-
-Create a symbolic link for fsck.ext3, since the e2fsprogs utilities
-are used for ext3 as well.
-
-Added internationalization support for e2fsprogs; must be enabled
-by passing --enable-nls to configure.
-
-Always use the provided ext2fs header files to insulate ourselves from
-kernel version changes.  Which include files are used by e2fsprogs
-have also been cleaned up to improve portability.
-
-Limit the number of times that e2fsck updates the progress bar so that
-people who are booting using a 9600 baud console don't get swampped by
-too many updates.
-
-Improved the loop detection algorithm in e2sck's pass #3 so that it is
-much, much faster for large filesystems with a large number of
-directories.
-
-The memory footprint for e2fsck is now slightly smaller than before.
-
-E2fsck now checks if special devices have a non-zero size, and offers
-to clear the size field if it finds such an inode.  
-
-E2fsck now checks if special devices have the append-only flag set,
-and offers to clear the inode.
-
-E2fsck now properly handles some "should never fail" cases during a
-bitmap copy in pass5.
-
-E2fsck now properly prints control characters in filenames as ^A .. ^Z.
-
-E2fsck now calculates the correct location of the backup superblock in
-the case of filesystem blocksizes > 1k.
-
-Fixed a bug in e2fsck's calculation of the number of inodes_per_block
-which normally didn't cause problems under most filesystem parameters,
-but could cause a valid superblock to be rejected in extreme cases.
-Other checks for validating superblock values were made more
-stringent.
-
-Added non-destructive write testing to the badblocks program, courtesy
-of David Beattie.  The badblocks also now has an option to input the
-current set of bad blocks, so that known bad blocks are skipped to
-speed up the badblocks test.  There is also a persistent rescan
-feature which causes badblocks to run until it has completed some
-number of passes without discovering any new bad blocks.
-
-Badblocks now checks to see if the device is mounted and refuses to do
-the tests involving writing to the device if it is mounted.  Also,
-badblocks now allows the number of blocks to be checked to be
-defaulted to the size of the partition.
-
-Fixed a bug in fsck which didn't allow non-root users to be able to
-check filesystems if there were any LABEL= or UUID= entries in
-/etc/fstab.
-
-The Hurd doesn't support the filetype filesystem feature.  The mke2fs
-program now makes sure that for the Hurd, the filestype feature is
-turned off.  E2fsck will check to see if the filetype feature is
-turned on for Hurd filesystems, and offer to turn off the feature.
-
-Mke2fs now has a safety check to make sure the number of blocks do not
-exceed 32 bits even on a 64 bit platform.
-
-Really fixed a bug in fsck to allow "fsck -As" to run interactive
-fsck's.  (For those people who like to do interactive fsck's in the
-/etc/rc scripts!?!)
-
-Debugfs has a few new features: the rdump command, which will do a
-recursive dump of a directory and all of its contents, and the lcd
-command which does a local chdir (much like the ftp command of the
-same name).  In addition, the debugfs program and the open_filesystem
-command now takes three new options: -b and -s, which allows the
-blocksize and superblock location to be specified, and the -c option
-which is used in catastrophic situations where the block group
-descriptors are corrupt.  If the -c option is specified, debugfs will
-skip trying to read in the block and inode bitmaps.
-
-Debufs's lsdel command was fixed to handle bad blocks in the inode
-table.
-
-A Y2K bug in debugfs's "ls -l" handling was fixed by switching to use
-4 digit years.
-
-General improvements in error messages
-
-  - Mke2fs prints a sane error message if the partition size is zero
-       (usually because the partition table wasn't reread by the
-       kernel due to the partition being busy), instead of "invalid
-       argument passed to ext2 library while initializing superblock".
-
-  - Fsck now prints more self-explanatory message if an invalid UUID=
-       or LABEL= specification is passed to it.
-
-UUID library changed to use the LGPL.
-
-Fixed a bug in the UUID library where very rapid calls to the
-time-based UUID generator could cause duplicate UUID's to be returned.
-This was not a problem for e2fsprogs, but it could be a problem for
-other users of the library.
-
-Make the UUID library more robust in the face of missing or an
-improper /dev/urandom or /dev/random files.
-
-Added some random portability fixes for Solaris.
-
-Some minor man page updates.
-
-Fixed a memory leak in the ss library.
-
-
-Programmer's notes:
--------------------
-
-We now try to use lseek64 and open64 from the LFS if possible.
-
-The 3rd parameter in e2p's print_flags is now a flags word, instead of
-a boolean option.
-
-The mark and unmark bitmap functions now return the previous state of
-the bit that was being changed, which is useful for some speed
-optimizations.
-
-The following functions have been added to enhance the badblocks list
-handling in libext2fs: ext2fs_write_bb_FILE, ext2fs_read_bb_FILE2, and
-ext2fs_badblocks_equal.
-
-The ext2 header files now have the latest journalling fields to the
-superblock.
-
-The ext2fs_mkdir function in libext2fs now properly backs out of error
-conditions robustly.
-
-Cleaned up makefiles:
-  - to cleanly  compile with the -j flag.
-  - so distclean removes all generated files.
-  - so in case of an error while installing header files, the make aborts.
-
-Fix test_script so that it works correctly when compiling in the
-source directory.
-
-The random UUID generation routine has been made slightly better in
-the case where /dev/random doesn't exist.  (Use of randomly-based UUID
-is still not recommended if /dev/random doesn't exist, however; it's
-better to use the time/ethernet MAC address UUID in this case.)
-
-Clean up the build process so it's more friendly in case of missing
-directories.
-
-The ext2fs header file can now be #include'd into C++ programs.
-
-The e2p.h header file is now installed.
-
-Added workaround to a gawk 3.0.5 bug in lib/ss/mk_cmds.
-
-
-
-E2fsprogs 1.18 (November 10, 1999)
-==================================
-
-Fix a core dumping bug in e2fsck if an imagic inode is present or
-(more rarely) if the filesystem is badly corrupted enough that e2fsck
-has to restart pass 1 processing.  E2fsck now closes the filesystem
-before freeing a large number of its data structures, so in the case
-of future memory faults, at least the fixed filesystem will be fully
-written out.
-
-If a filesystem doesn't support imagic inodes, and e2fsck discovers an
-imagic inode, it will offer to clear the imagic flag.
-
-E2fsck will now offer to clear the immutable flag on special files
-(device/socket/fifos) when running it in non-preen mode.
-
-E2fsck will now set the filetype when creating /lost+found, and when
-connected orphaned inodes to /lost+found.
-
-Debugfs's ncheck and icheck commands now handles the case where there
-are bad blocks in the inode table without bombing out.
-
-The badblocks list processing code has been made more efficiently for
-appending a large number of (ordered) badblocks to the badblocks list.
-
-Some minor man page updates.
-
-Fsck now allows interactive e2fsck's when using fsck -As (not a common
-mode, but some people like to do this in boot scripts for silly reasons).
-
-Programmer's notes:
--------------------
-
-The internal e2fsck problem code for PR_2_SPLIT_DOT was fixed to meet
-with the problem code convention.
-
-The badblocks list regression test program has been updated to work
-with previously made API name changes.
-
-The ext2fs_free() command now uses the new badblocks API to avoid
-using the compatibility layer.
-
-Added new regression test cases; the run_e2fsck test script now
-supports the ability for a test case to run a prepratory command
-before running e2fsck.
-
-E2fsprogs 1.17 (October 26, 1999)
-=================================
-
-Fixed nasty typo in fsck which caused parallelized fsck's to go into an
-infinite loop.
-
-Fixed a bug in fsck where it used strncmp to compare a binary UUID,
-thus potentially causing problems if a binary UUID contained a NULL
-character.
-
-E2fsck now uses stricter checks for directory entries in pass 2:
-zero-length filenames are not allowed; neither are 8 byte long
-directory entries.
-
-The debugfs "dirty" command now clears the filesystem valid bit.
-(Previously this just set the dirty-as-in-needs-writing-out-to-disk
-bit in the in-core superblock image.  The new functionality is more
-what the user expects, and is more useful.)
-
-Added a debugging hook to test parallel fsck; if the environment
-variable FSCK_FORCE_ALL_PARALLEL, then filesystems on the same drive
-will be checked in parallel when they normally would not be.
-
-Programmer's notes:
--------------------
-
-Fixed some #ifdef's for compilation under the Hurd OS.
-
-Fixed minor W2K compatibility problems.
-
-Fixed some miscellaneous GCC warnings.
-
-
-E2fsprogs 1.16 (October 22, 1999)
-=================================
-
-Fixed a race condition bug in fsck; when printing a progress bar, if
-checking multiple filesystems in parallel, it was possible for fsck to
-send e2fsck a SIGUSR1 signal before e2fsck had installed its signal
-handler, which would cause it to terminate with a signal 10.
-
-E2fsck now properly handles filesystems that have the
-INCOMPAT_FILETYPE feature turned on.  It can be used to convert a
-filesystem into using or not using FILETYPE feature.
-
-E2fsck now properly handles filesystems that have the IMAGIC feature
-turned on (this is used on Linux AFS servers).
-
-The mke2fs program now creates filesystems that have the filetype and
-sparse_superblock features enabled by default, unless it is run on a
-pre-2.2 kernel.  These features are not supported by a pre-2.2 kernel,
-so there is now a new flag -O which allows the user to specify with
-which features she would like to create the filesystem; "mke2fs -O
-none" will create a filesystsem compatible with 2.0 kernels.
-
-The tune2fs program now has a -O option which allows the user to set
-and reset "safe" filesystem features.  Currently, the only ones which
-allows to be modified are the filetype and sparse_superblock features.
-Note setting or clearing either feature will require running e2fsck on
-the filesystem afterwards.  (n.b. Clearing the sparse_superblock feature
-requires that there is enough free space on the filesystem for the
-extra superblocks which will be created by e2fsck.)
-
-Debugfs can now set and print filesystem features in the superblock
-using the "features" command.  Dumpe2fs will print out the complete
-set of features when listing the superblock.
-
-Dumpe2fs has new options -f (force) and -h (header-only).
-
-Fixed a bug in e2fsck which could cause the PROGRAMMING ERROR/bonehead
-message to come up.  This could happen when decrementing or
-incrementing a link count could result in an overflow.
-
-Fixed a bug in e2fsck where the block count on the lost+found
-directory would not be properly incremented when the directory was
-expanded to the point where an indirect block needed to be allocated.
-
-E2fsck now makes some additional sanity checks on the superblock to
-avoid crashing or giving a memory allocation error if some of the
-values in the superblock are unresonable (but the superblock otherwise
-looks valid).
-
-Fixed a bug in e2fsck where a very badly corrupted filesystem might
-require two passes to completely fix the filesystem.  This happened if
-an inode claimed blocks that was part of the filesystem metadata
-(typically, when garbage was written into an inode table or indirect
-block, since this kind of filesystem corruption normally doesn't
-happen otherwise).
-
-On the Alpha, glibc declares st_flags although it isn't actually used;
-the configure script was improved to detect this case so that
-e2fsprogs can avoid using the non-functional stat field.
-
-The manual pages were updated to use a more consistent formatting
-style consistent with standard Unix man pages.  Mke2fs's man page
-added documentation for a few previously undocumented options.
-
-Fixed minor display bugs in tune2fs and mke2fs.
-
-Programmer's notes:
--------------------
-
-Improved portability of e2fsprogs to non-Unix systems (in particular, NT).
-
-Added features to parse and print feature strings into the e2p library.  
-(e2p_feature2string, e2p_string2feature, e2p_edit_feature).
-
-ext2fs_mkdir() and ext2fs_new_dir_block() now creates directories
-whose directory entries contain proper filetype information if the
-filesystem supports it.
-
-ext2fs_link() now uses the low 3 bits of its flags parameter to pass
-the directory entry filetype information.  This is used to set the
-directory entry filetype information if the filesystem supports it.
-
-Fixed a bug in ext2fs_expand_dir() where the block count in a
-directory's inode would not be properly incremented when the directory
-was expanded to the point where an indirect block needed to be
-allocated.
-
-
-E2fsprogs 1.15 (July 18, 1999)
-==============================
-
-Add configuration checks so that e2fsprogs will compile cleanly on
-Linux 2.3 kernels that have renamed i_version to i_generation.
-
-E2fsck now prints a progress/completion bar (and not just a simple
-spinner) if the -C0 option is requested or if it receives a SIGUSR1
-signal.  Fsck will automatically manage the (potentially muliple)
-e2fsck processes to print completion bars if it is given a -C option,
-with the right thing happening if multiple filesystems are being
-checked in parallel.
-
-Mke2fs now has better automatic hueristics to determine the filesystem
-parameters to be used for a particular filesystem.  Added a new option
--T which allows the user to specify how the filesystem is to be used,
-which helps mke2fs do a better job selecting the filesystem parameters.
-
-Mke2fs now creates revision 1 filesystems by default, and with the
-sparse superblock feature enabled.  The sparse superblock feature is
-not understood by Linux 2.0 kernels, so they will only allow read-only
-mounts of filesystems with this sparse superblocks.
-
-Fix bug where if /dev/null couldn't be opened (should never happen),
-e2fsck would hang in a tight loop.
-
-Make e2fsck handle the case where /lost+found isn't a directory.
-
-E2fsck now uses mallinfo if it exists to get accurate statistics about
-its memory usage.
-
-Fix bug in e2fsck where it wouldn't check to see if a disconnected
-inode had any problems before connecting it to /lost+found.
-
-Add check to e2fsck so it makes sure that total number of inodes in
-the filesystem is a sane number.
-
-Fix fencepost error when clearing an the end of the block bitmap which
-caused the last block in the bitmap not to get cleared.
-
-Cleaned up a number of messages in e2fsck:
-       * The message "Group's #'s copy of the group descriptor..."
-               was fixed so that the correct number would be displayed.
-       * Added missing space in the "disk write-protected" error messsage
-       * Cleaned up the error message printed when a non-interactive
-               e2fsck needs to abort a check because the filesystem
-               appears to be mounted.
-
-Added a new command-line utility, uuidgen, which will create and print
-a UUID.
-
-Make debugfs's icheck command more robust by checking to make sure an
-inode has valid blocks before interarting over the inode's blocks.
-
-UUID generation now uses a random-based scheme whenever possible to
-prevent potential privacy problems.
-
-Man pages for all of the UUID functions in the lirbary were added.
-
-Fixed bug in fsck so it won't coredump if a filesystem not in
-/etc/fstab is given to it.
-
-Fsck now understands the UUID=xxxx and LABEL=yyyy forms in /etc/fstab
-that most of the other mount utilities understands.
-
-Mke2fs will make a filesystem even if it appears mounted if the force
-option is given.
-
-Dumpe2fs has new command-line options which allow a filesystem expert
-to specify the superblock and blocksize when opening a filesystem.
-This is mainly useful when examining the remains of a toasted
-filesystem.
-
-The badblocks program has been updated to display correctly on disks
-with large block numbers.
-
-The badblocks program no longer gives spurious errors when errors
-occur on non-block boundaries, which is common if the blocksize is
-larger than 1k.
-
-Mke2fs will sync the disk device every MKE2FS_SYNC block groups if the
-MKE2FS_SYNC environment variable is set.  This is to work around a VM
-bug in the 2.0 kernel.  I've heard a report that a RAID user was able
-to trigger it even using a 2.2 kernel, but hopefully it will not be
-needed for most Linux 2.2 users.
-
-Fixed miscellaneous documentation and man pages.
-
-Programmer's notes:
--------------------
-
-Cleaned up functions such as pass1_get_blocks, pass1_read_inode which
-in e2fsck's pass1.c really should have been static.
-
-The return value of the uuid_compare() function was changed to make it
-match with the convetions used by strcmp, memcmp, and Paul Leach's
-UUID sample document.
-
-The "make depend" process has now been made more automated; it now
-automatically word-wraps the dependencies, and only replaces source
-Makefile.in if there has been a change in the dependencies.  Also, a
-top-level "make depend" now recurses through all the subdirectories
-automatically.
-
-The Makefile in .../util has been changed so that subst is built using
-the native C compiler during a cross-compilation, since the subst
-program is only used during the build process.  Also add an explicit
-rule to build util/subst by cd'ing to the correct directory and
-running Makefile.
-
-The man directories are defined in terms mandir, so that the configure
-script can override the location of the manual pages.
-
-The config files have been updated to recognize new machine types for
-both the i386 and alpha families.
-
-Fsck has been modified so that it will accurately create an
-fsck_instance even when the noexecute flag is set.  This allows for
-accurate debugging of the fsck pass structure.  Also, when the verbose
-flag is given twice, fsck will print debugging information about when
-fsck is waiting for jobs to finish.
-
-
-E2fsprogs 1.14 (January 9, 1999)
-================================
-
-Fix the fstab parsing code so that it can handle blank lines and
-comment characters.  Also, missing pass numbers need to be treated as
-zero.
-
-Fixed a bug in e2fsck where under some circumstances (when e2fsck
-needs to restart processing after fixing an egregious inconsistency)
-it would try to access already freed memory.
-
-E2fsck now prints non-printable characters in directory entries and
-pathnames using '^' and 'M-' notation.
-
-Fixed chattr so that it will ignore symbolic links when doing
-recursive descent traversals.  For both chattr and lsattr, no longer
-print the version string unless the -V option is given.
-
-Allow the system administrator to directly specify the number of
-inodes desired in the filesystem, for some special cases where this is
-necessary.
-
-Fix portability problems so that e2fsprogs can be compiled under Linux
-1.2 systems and Solaris systems.
-
-Update the config.guess file with a more recent version that will
-identify newer Linux platforms.
-
-Programmer's notes
-------------------
-
-Ext2fs_read_inode and ext2fs_write_inode will now return an error if
-an inode number of zero is passed to them.
-
-E2fsprogs 1.13 (December 15, 1998)
-==================================
-
-Fixed a bug in debugfs where an error messages weren't getting printed
-when the ext2 library routines to read inodes returned errors in the
-stat, cmri and rm commands.
-
-Fixed a bug in mke2fs so that if a ridiculous inode ratio parameter is
-provided, it won't create an inode table smaller than the minimum
-number of inodes required for a proper ext2 filesystem.
-
-Fsck now parses the /etc/fstab file directly (instead of using
-getmntent()), so that it can distinguish between a missing pass number
-field and pass number field of zero.  This caused problems for
-diskless workstations where all of the filesystems in /etc/fstab have
-an explicit pass number of zero, and fsck could not distinguish this
-from a /etc/fstab file with missing pass numbers.
-
-E2fsck will create a /lost+found directory if there isn't one in the
-filesystem, since it's safer to create the lost+found directory before
-it's needed.
-
-Fixed e2fsck so that it would detect bogus immutable inodes which
-happen to be sockets and FIFO files, and offer to clear them.
-
-If a filesystem has multiple reasons why it needs to be checked, and
-one of the reasons is that it is uncleanly mounted, e2fsck will print
-that as the reason why the filesystem is being checked.
-
-Cleaned up the output routines of mke2fs so that it doesn't overflow
-an 80 column display when formating really big filesystems.
-
-Added a sanity check to e2fsck to make sure that file descriptors 0,
-1, 2 are open before opening the hard disk.  This avoids a problem
-where a broken program might exec e2fsck with those file descriptors
-closed, which would cause disastrous results if the kernel returns a
-file descriptor for the block device which is also used by FILE *
-stdout.
-
-Fixed up the e2fsck progress reporting functions so that the values
-reliably reach 100% at the completion of all of the e2fsck passes.
-
-Fixed minor documentation bugs in man pages and usage messages.
-
-Programmer's notes:
--------------------
-
-Fixed a number of lint warnings in the ext2fs library and potential
-portability problems from other OS's header files that might define
-CPP macros for names like "max" and "min".
-
-ext2fs_badblocks_list_add() has been made more efficient when it needs
-to grow the bad blocks list.
-
-Fixed a bug in e2fsck which caused it to dereference a freed pointer
-just before exiting.
-
-Fixed the substition process for generating the mk_cmds and compile_et
-scripts so that they will work outside of the build tree.
-
-Add sanity check to e2fsck so that if an internal routine
-(ext2fs_get_dir_info) returns NULL, avoid dereferencing the pointer
-and causing a core dump.  This should never happen, but...
-
-E2fsprogs 1.12 (July 9, 1998)
-==================================
-
-E2fsprogs now works with glibc (at least with the version shipped wtih
-RedHat 5.0).  The ext2fs_llseek() function should now work even with
-i386 ELF shared libraries and if llseek() is not present.  We also
-explicitly do a configure test to see if (a) llseek is in libc, and
-(b) if llseek is declared in the system header files.  (See standard
-complaints about libc developers don't understand the concept of
-compatibility with previous versions of libc.)
-
-The ext2fs library now writes out the block group number in each of
-the superblock copies.  This makes it easier to automatically
-determine the starting block group of the filesystem when the block
-group information is trashed.
-
-Added support for the EXT2_FEATURE_INCOMPAT_FILETYPE feature,
-which means that e2fsprogs will ignore the high 8 bits of the
-directory entry's name_len field, so that it can be used for other
-purposes.
-
-Added support for the EXT2_FEATURE_RO_COMPAT_LARGE_FILE feature.
-E2fsprogs will now support filesystems with 64-bit sized files.
-
-Added support for the EXT2_FEATURE_COMPAT_DIR_PREALLOC feature.
-
-Added new program "e2label", contributed by Andries Brouwer.  E2label
-provides an easy-to-use interface to modify the filesystem label.
-
-Fixed bug so that lsattr -v works instead of producing a core dump.
-
-Fixed a minor bug in mke2fs so that all groups with bad superblock
-backup blocks are printed (not just the first one).
-
-Mke2fs will check the size of the device, and if the user specifies a
-filesystem size larger than the apparent size of the device it will
-print a warning message and ask if the user wants to proceed.
-
-E2fsck has a new option -C, which sends completion information to the
-specified file descriptor.  For the most part, this is intended for
-programs to use, although -C 0 will print a spinning character to the
-stdout device, which may be useful for users who want to see something
-happening while e2fsck goes about its business.
-
-Fixed a bug in e2fsck which could cause a core dump when it needs to
-expand the /lost+found directory, and sometimes the bitmaps haven't
-been merged in.  Also fixed a related bug where ext2fs_write_dir_block
-was used to write out a non-directory block.  (Which would be bad on a
-non-Intel platform with byte swapping going on.)
-
-Fixed bug in e2fsck where it would print a "programming error" message
-instead of correctly identifying where a bad block was in used when
-the bad block was in a non-primary superblock or block group
-descriptor.  Also fixed a related bug when sparse superblocks are in
-use and there is a bad block where a superblock or block group
-descriptor would have been in a group that doesn't include a
-superblock.
-
-Fixed a bug in e2fsck (really in libext2fs's dblist function) where if
-the block group descriptor table is corrupt, it was possible to try to
-allocate a huge array, fail, and then abort e2fsck.
-ext2fs_get_num_dirs() now sanity checks the block group descriptor,
-and subsitutes reasonable values if the descriptors are obviously bogus.
-
-If e2fsck finds a device file which has the immutable flag set and the
-i_blocks beyond the normal device number are non-zero, e2fsck will
-offer to remove it, since it's probably caused by garbage in the inode
-table.
-
-When opening a filesystem, e2fsck specially checks for the EROFS error
-code, and prints a specific error message to the user which is more
-user friendly.
-
-If the filesystem revision is too high, change the e2fsck to print
-that this is either because e2fsck is out of date, or because the
-superblock is corrupt.  
-
-E2fsck now checks for directories that have duplicate '.' and '..'
-entries, and fixes this corruption.
-
-E2fsck no longer forces a sync of the filesystem (with attendant sleep
-calls) at all times.  The ext2fs_flush() function now performs a sync
-only if it needed to write data blocks to disk.
-
-Fixed a minor bug in e2fsck's pass1b's file cloning function, where
-certain errors would not be properly reported.
-
-Updated and expanded a few points in the man pages which users
-complained wheren't explicit enough.
-
-Added special case byte-swapping code if compiling on the PowerPC, to
-accomodate the strange big-endian variant of the ext2 filesystem that
-was previously used on the PowerPC port.
-
-
-Programmer's notes:
--------------------
-
-Removed C++ keywords from the ext2fs libraries so that it could be
-compiled with C++.
-
-E2fsck's internal organization has now been massively reorganized so
-that pass*.c don't have any printf statements.  Instead, all problems
-are reported through the fix_problem() abstraction interface.  E2fsck
-has also been revamped so that it can be called as a library from a
-application.
-
-Added new fileio primitives in libext2fs for reading and writing
-files on an unmounted ext2 filesystem.  This interface is now used by
-debugfs.
-
-Added a new libext2fs function for mapping logical block numbers of
-a file to a physical block number.
-
-Added a new libext2fs function, ext2fs_alloc_block(), which allocates
-a block, zeros it, and updates the filesystem accounting records
-appropriately.
-
-Added a new libext2fs function, ext2fs_set_bitmap_padding(), which
-sets the padding of the bitmap to be all one's.  Used by e2fsck pass 5.
-
-The libext2fs functions now use a set of memory allocation wrapper
-functions: ext2fs_get_mem, ext2fs_free_mem, and ext2fs_resize_mem,
-instead of malloc, free, and resize.  This makes it easier for us to
-be ported to strange environments where malloc, et. al. aren't
-necessarily available.
-
-Change the libext2fs fucntion to return ext2-specific error codes
-(EXT2_DIR_EXISTS and EXT2_DB_NOT_FOUND, for example) instead of using
-and depending on the existence of system error codes (such as EEXIST
-and ENOENT).
-
-Renamed io.h to ext2_io.h to avoid collision with other OS's header
-files.
-
-Add protection against ext2_io.h and ext2fs.h being included multiple
-times.
-
-The types used for memory lengths, etc. have been made more portable.
-In generla, the code has been made 16-bit safe.  Added Mark
-Habersack's contributed DOS disk i/o routines.
-
-Miscellaneous portability fixes, including not depending on char's
-being signed.
-
-The io_channel structure has a new element, app_data, which is
-initialized by the ext2fs routines to contain a copy of the filesystem
-handle.
-
-ext2fs_check_directory()'s callback function may now return the error
-EXT2_ET_CALLBACK_NOTHANDLED if it wishes ext2fs_check_directory() to
-really do the checking, despite the presence of the callback function.
-
-
-E2fsprosg 1.11 (June 17, 1997)
-==============================
-
-Fixed e2fsck to detect (previously ignored) conflicts between the
-superblock or block group descriptors and block bitmaps, inode
-bitmaps, and inode tables.
-
-Fixed bug in e2fsck so that when the message printed out when a block
-or inode bitmap conflicts with other data, it has the correct group
-number.
-
-Fixed bug in e2fsck and mke2fs where the blocksize wasn't being passed
-to badblocks.  This meant that not all of the filesystem was being
-tested for bad blocks! 
-
-Fixed an array boundary overrun case which cropped up in
-ext2fs_badblocks_list_test when a user tried running "mke2fs -c 
--b 4096".
-
-Adjusted the number of columns printed by mke2fs when displaying the
-superblock backups to avoid running over 80 columns when making a
-really big filesystem.
-
-Fixed up the man pages for e2fsck, debugfs, badblocks, chattr,
-dumpe2fs, fsck, mke2fs, and tune2fs (typos and other minor grammar
-fixes), thanks to some suggestions from Bill Hawes (whawes@star.net).
-
-Programmer's notes:
--------------------
-
-Fixed install rule in lib/ss so that ss_err.h is actually getting
-installed.
-
-Fixed bug in ext2fs_copy_bitmap; the destination bitmap wasn't getting
-bassed back to the caller.
-
-Fixed bug in ext2fs_inode_scan_goto_blockgroup; it had not been
-setting the current inode number (which meant this function wasn't
-working at all).
-
-Fixed bug in ext2fs_resize_generic_bitmap; it had not be zeroing all
-blocks in the bitmap when increasing the size of the bitmap.
-
-Changed the initial number of blocks allocated by ext2fs_init_dblist()
-to be more realistic.
-
-Added a new function ext2fs_allocate_group_table, which sets up the
-group descriptor information (and allocates inode and block bitmaps,
-and inode tables for a particular group).  The function was created by
-factoring out code form ext2fs_allocate_tables().
-
-Added a new function ext2fs_move_blocks which takes a bitmap of the
-blocks to be moved, and moves them to another location on the
-boardboard.
-
-Make the unix_io channel's io_channel_flush implementation calls sync()
-to to flush the kernel buffers to disk.
-
-Added a new function ext2fs_dblist_count returns the number of
-directory blocks in dblist.
-
-
-E2fsprogs 1.10 (April 24, 1997)
-===============================
-
-Mke2fs once again defaults to creating revision #0 filesystems, since
-people were complaining about breaking compatibility with 1.2 kernels.
-Warning messages were added to the mke2fs and tune2fs man pages that
-the sparse superblock option isn't supported by most kernels yet (1.2
-and 2.0 both don't support parse superblocks.)
-
-Added new flag to mke2fs, -R <raid options>, which allows the user to
-tell mke2fs about the RAID configuration of the filesystem.  Currently
-the only supported raid option is "stride" which specifies the width
-of the RAID stripe.
-
-Fixed bug in e2fsck where pass1b would bomb out if there were any
-blocks marked bad in the inode table.
-
-Fixed rare bug in mke2fs where if the user had a very unlucky number
-of blocks in a filesystem (probability less than .002) the resulting
-filesystem would be corrupt in the last block group.
-
-Fixed bug where if e2fsck tried to allocate a block to fix a
-filesystem corruption problem and the filesystem had no free blocks,
-ext2fs_new_block() would loop forever.
-
-The configure script now checks explicitly to see if "-static" works,
-since that can't be assumed to be true --- RedHat doesn't install
-libc-static by default.
-
-Fixed bug in libext2's block iterator functions where under some
-cirmcustances, file with holes would cause the bcount parameter to the
-callback function to be incorrect.  This bug didn't affect any of
-e2fsprogs programs, but it was discovered by Paul Mackerras, the
-author of the PPC boot loader.
-
-Removed use of static variables to store the inode cache in libext2fs.
-This caused problems if more than one filesystem was accessed via
-libext2fs (static variables in libraries are generally a bad idea).
-Again, this didn't affect e2fsprogs programs, but it was discovered by
-Paul Mackerras.
-
-Fixed minor bugs and version code drift to assure that e2fsprogs 1.10
-will compile cleanly with 1.2.13 kernels (even with a.out shared
-libraries!)
-
-Programmer's notes:
--------------------
-
-Added new functions to duplicate an ext2 filesystem handle, and its
-associated substructure.  New functions: ext2fs_dup_handle(),
-ext2fs_copy_dblist(), ext2fs_badblocks_copy(), ext2fs_copy_bitmap().
-Other structures, such as the io_channel and the inode_cache, now have
-a ref count so that they only get freed when they are no longer used
-by any filesystem handle.  (These functions were added as part of the
-development effort for an ext2 resizer).
-
-E2fsprogs 1.09 (April 14, 1997)
-===============================
-
-Fixed bug in mke2fs (really in lib/ext2fs/initialize.c) which was
-accidentally introduced in the 1.08 release.  The overhead calculation
-was accidentally removed, which caused ext2fs_initialize() to not
-notice when the filesystem size needed to be adjusted down because
-there wasn't enough space in the last block group.
-
-Fixed bug in version parsing library routine; it was always parsing
-the library version string, instead of using the passed-in string.
-
-Clarified chattr man page.
-
-E2fsprogs 1.08 (April 10, 1997)
-===============================
-
-E2fsck 1.07 was very slow when checking very large filesystems with a
-lot of files that had hard links (i.e., news spools).  This was fixed
-by seriously revamping the icount abstraction.  Added a formal test
-suite for the icount abstraction.
-
-Debugfs now has a "-l" option to the "ls" command, which lists the
-inode number, permissions, owner, group, size, and name of the files
-in the directory.
-
-Fix a bug in e2fsck where when a directory had its blocks moved to
-another location during the pass 1b processing, the directory block
-list wasn't updated, so pass 2 wouldn't check (and correct) the
-correct directory block.
-
-E2fsck will now treat inodes which contain blocks which are claimed by
-the filesystem metadata by treating them as multiply claimed blocks.
-This way, the data in those blocks can be copied to a new block during
-the pass 1b--1d processing.
-
-E2fsck will attempt to determine the correct superblock number and
-display it in the diagnostic and warning messages if possible.
-
-Add support for a new (incompatible) feature, "sparse_super".  This
-feature reduces the number of blocks which contain copies of backup
-superblocks and block group descriptors.  (It is only an incompatible
-feature because of a bug in ext2_free_blocks.)  mke2fs and tune2fs now
-support a new -s option; e2fsck will recognize filesystems built with
-this feature turned on.
-
-E2fsck now checks the library to make sure is the correct version,
-using new library functions.  (This helps to diagnose incorrectly
-installed e2fsprogs distributions.)
-
-Dumpe2fs now prints more information; its now prints the the
-filesystem revision number, the filesystem sparse_super feature (if
-present), the block ranges for each block group, and the offset from
-the beginning of the block group.
-
-Mke2fs now distributes the inode and block bitmap blok so that the
-won't be concentrated in one or two disks in RAID/striping setups.
-Also, if the user chooses a 2k or 4k block group, mke2fs will try to
-choose the largest blocks per group that be chosen.  (For 2k blocks,
-you can have up to 16384 blocks/group; for 4k blocks, you can have up
-to 32768 blocks/group.)  Previously mke2fs would not allow
-specification of more than 8192 blocks per group, even if you were
-using a 2k or 4k block group.
-
-Programmer's notes:
--------------------
-
-Added a new function ext2fs_create_icount2() which takes a "hint"
-argument.  This hint argument presets the icount array with the list
-of inodes which actually need to be in the icount array.  This really
-helps to speed up e2fsck.
-
-Added a new function ext2fs_icount_validate() which checks the rep
-invariant for the icount structure.  This is used mostly for testing.
-
-The error mesasage given when a bad inode number is passed to
-test_generic_bitmap to reflect EXT2FS_TEST_ERROR (instead of
-EXT2FS_UNMARK_ERROR).
-
-Added a new function ext2fs_set_dir_block which sets the block of a
-dblist entry, given the directory inode and blockcnt.
-
-Added a new function ext2fs_get_library_version() which returns the
-current library version, and ext2fs_parse_version_string() which
-returns a version number based on a e2fsprogs version string.
-
-The icount functions will return EINVAL if the passed in inode number
-is out of bounds.
-
-E2fsprogs 1.07 (March 9, 1997)
-==============================
-
-E2fsck is now uses much less memory when checking really large
-filesystems (or rather, filesystems with a large number of inodes).
-Previously a filesystem with 1 million inodes required 4 megabytes of
-memory to store inode count statistics; that storage requirement has
-now been reduced to roughly half a megabyte.
-
-E2fsck can now properly deal with bad blocks appearing inside the
-inode table.  Instead of trying to relocate the inode table (which
-often failed because there wasn't enough space), the inodes in the bad
-block are marked as in use.
-
-E2fsck will automatically try to use the backup superblocks if the
-primary superblocks have a bad magic number or have missing meta-data
-blocks (or meta-data blocks which are out of range).
-
-E2fsck's pass 3 has been made more efficient; most noticeable on
-filesystems with a very large number of directories.
-
-Completely revamped e2fsck's system of printing problem reports.  It
-is now table driven, to make them more easily customizeable and
-extendable.  Error messages which can be printed out during preen mode
-are now one line long.
-
-Fixed e2fsck's filesystem swapping code so that it won't try to swap
-fast symbolic links or deleted files.
-
-Fixed e2fsck core dumping when fixing a filesystem which has no
-directories (not even a root directory).
-
-Added a check to e2fsck to make sure that the length of every
-directory entry is a multiple of 4 (since the kernel complains if it
-isn't).
-
-Added a check to e2fsck to make sure that a directory entry isn't a
-link to the root directory, since that isn't allowed.
-
-Added a check to e2fsk to now make sure the '.' and '..' directory
-entries are null terminated, since the 2.0 kernel requires it.
-
-Added check to write_bitmaps() to make sure the superblock doesn't get
-trashed if the inode or block bitmap is marked as being block zero.
-
-Added checking of the new feature set fields in the superblock, to
-avoid dealing with new filesystem features that this package wasn't
-set up to handle.
-
-Fixed a fencepost error in ext2fs_new_block() which would occasionally
-try to allocate a block beyond the end of a filesystem.
-
-When the UUID library picks a random IEEE 802 address (because it
-can't find one from a network card), it sets the multicast bit, to
-avoid conflicting with a legitimate IEEE 802 address.
-
-Mke2fs now sets the root directory's owner to be the real uid of the
-user running mke2fs.  If the real uid is non-zero, it also sets
-the group ownership of the root directory to be the real group-id of
-the user running mke2fs.
-
-Mke2fs now has more intelligent error checking when it is given a
-non-existent device.
-
-When badblocks is given the -vv option, it now updates the block that
-it is currently testing on every block.
-
-Fixed a bug in fsck where it wouldn't modify the PATH envirnoment
-currently correctly if PATH wasn't already set.
-
-Shared libraries now built with dependencies.  This allows the shared
-library files to be used with dlopen(); it also makes the transition
-to libc 6 easier, since ld.so can tell which libc a particular shared
-library expects to use.
-
-Programmer's notes:
--------------------
-
-Added new abstraction (defined in dblist.c) for maintaining a list of
-blocks which belongs to directories.  This is used in e2fsck and other
-programs which need to iterate over all directories.
-
-Added new functions which test to see if a contiguous range of blocks
-(or inodes) are available.  (ext2fs_*_bitmap_range).
-
-Added new function (ext2_inode_has_valid_blocks) which returns true if
-an inode has valid blocks.  (moved from e2fsck code).
-
-Added new function (ext2fs_allocate_tables) which allocates the
-meta-data blocks as part of initializing a filesystem.  (moved from
-mke2fs code).
-
-Added a new I/O manager for testing purposes.  It will either allow a
-program to intercept I/O requests, or print debugging messages to
-trace the activity of a program using the I/O manager.
-
-The badblocks_list functions now store the bad blocks in a sorted
-order, and use a binary search to speed up badblocks_list_test.
-
-The inode scan function ext2fs_get_next_inode() may now return a soft
-error returns: MISSING_INODE_TABLE and BAD_BLOCK_IN_INODE_TABLE in
-those cases where part of an inode table is missing or there is a bad
-block in the inode table.  
-
-Added a new function (ext2fs_block_iterate2) which adds new arguments to
-the callback function to return a pointer (block and offset) to the
-reference of the block.
-
-Added new function (ext2fs_inode_scan_goto_blockgroup) which allows an
-application to jump to a particular block group while doing an inode
-scan.
-
-The badblocks list functions were renamed from badblocks_* to
-ext2fs_badblocks_*.  Backwards compatibility functions are available
-for now, but programs should be modified to use the new interface.
-
-Some of the library functions were reorganized into separate files to
-reduce the size of some programs which statically link against the
-ext2 library.
-
-Put in some miscellaneous fixes for the Alpha platform.
-
-
-E2fsprogs 1.06 (October 7, 1996)
-================================
-
-Fixed serious bug in e2fsck: if the block descriptors are bad, don't
-smash the backup copies in ext2fs_close().  (The problem was that when
-e2fsck -p discovered the problem, while it was closing the filesystem
-and exiting, it was also blowing away the backup superblocks on the
-disk, which was less than friendly.)  We now make it the case that we
-only write out the backup superblock and the back block descriptors if
-the filesystem is completely free from problems.
-
-Fixed a bug in block_interate in the lib/ext2fs library which caused
-e2fsck to fail on GNU Hurd-created filesystems.
-
-Add support for Linux/FT's bootloader, which actually uses
-EXT2_BOOT_LOADER, and sets its mode bits which caused e2fsck to want
-to clear the inode.
-
-Add support for the "A" (no atime update) attribute.  (Note: this
-attribute is not yet in production kernels.)
-
-The test suite is not automatically run when doing a "make all" from
-the top level directory.  Users should manually run "make check" if
-they wish to run the test suite.
-
-Upon a preenhalt(), make the printed message more explicit that
-running e2fsck "MANAULLY" means without the -p or -a options.
-
-In e2fsck, if a disconnected inode is zero-length, offer to clear it
-instead of offering to connect it to lost+found.
-
-In e2fsck, if a filesystem was just unmounted uncleanly, and needs
-e2fsck to be run over it, change e2fsck to explicitly display this
-fact.
-
-For dumpe2fs and e2fsck, cause the -V option to print out which
-version of the ext2fs library is actually getting used.  (This will
-help detect mismatches of using a 1.06 utility with a 1.05 library,
-etc.)
-
-Programmers' notes:
--------------------
-
-EXT2_SWAP_BYTES was changed to EXT2_FLAG_SWAP_BYTES, which better fits
-the naming convention.
-
-In ext2fs_initialize(), make sure the description for the inode bitmap
-is correctly initialize.
-
-Fixed minor type typo in ext2fs_allocate_generic_bitmap();
-
-E2fsprogs 1.05 (September 7, 1996)
-==================================
-
-Add support for new fields in the ext2 superblock --- volume name,
-volume UUID, and last mounted field.  Dumpe2fs displays these fields,
-tune2fs and mke2fs allows you to set them.  E2fsck will automatically
-generate a UUID for those volumes that don't have them.  
-
-Put in support for e2fsck to recognize HURD specific ext2 features ---
-most notably, the translator block.  The e2fsprogs tools will now use
-the creator_os field in the superblock to correctly handle different
-OS-specific variants of the ext2 filesystem.
-
-E2fsck now fixes inodes which have a the deletion time set, but which
-have a non-zero i_link_count field by offering to clear the deletion
-time.  Previously e2fsck assumed that the inode was deleted (per 0.3c
-ext2 kernel behavior) and offered to unlink the file.
-
-If e2fsck sets the clean bit, but nothing else, set the exit code
-FSCK_NONDESTRUCT.  After all, e2fsck did fix a filesystem error --- it
-set the filesystem valid bit when it was previously cleared.  :-) This
-was needed to make the HURD fsck driver happy.
-
-If the  user  refuses to attach an  unattached  inode, e2fsck  will no
-longer set the inode's link count.  Otherwise, the  inode would end up
-getting marked as unused, which might cause loss of data later.
-
-Make the message issued by e2fsck when the superblock is corrupt less
-confusing for users.  It now mentions that another reason for the
-"corrupt superblock" message might be that the partition might not be
-an ext2 filesystem at all (it might swap, msdos filesystem, ufs, etc.)
-
-Make the libext2 library more robuest so that e2fsck won't coredump on
-an illegal superblock where the blocksize is zero.  (f_crashdisk is
-the test case).
-
-By default, create filesystems where the default checkinterval is 6
-months (180 days).  Linux servers can be robust enough that 20 reboots
-can be a long, long time.
-
-Added configure flag --enable-old-bitops, which forces the bitops to
-use the old (native) bitmask operations.  By default on the sparc
-platform, the standard ext2 bit ordering is now used.
-
-Added a new feature to e2fsck to byte-swap filesystems; this can be
-used to convert old m68k filesystems to use the standard byte-order
-storage for the superblock, inodes, and directory blocks.  This
-function is invoked by using the '-s' option to e2fsck.
-
-Debugfs's "dump" command has been enhanced so that it writes out the
-exact size of the file so that the nulls at the end of the file are
-eliminated.  The command also accept a new "-p" option which will
-attempt preserve to preserve the ownernship, permissions, and
-file modification/access times.
-
-Debugfs has two new options, -f and -R.  The -R option allows the user
-to execute a single debugfs command from the command line.  The -f
-option allows the user to specify a "command file" containing debugfs
-commands which will get executed.
-
-Dumpe2fs now pretty prints the check interval, instead of just
-printing the check interval as a number of seconds.
-
-Fix bugs in debugfs: the params command when no filesystem is opened
-no longer causes a core dump.  It is now possible to unlink a file
-when a pathame containing a '/' is specified.
-
-Tune2fs has a new -C option which sets the number of times the
-filesystem has been mounted.
-
-Fix the chattr '-v' option so that it actually works.  Chattr was
-being buggy about the -v option parsing.
-
-Programmers' notes:
--------------------
-
-The directory lib/uuid contains a set of library routines to generate
-DCE compatible UUIDs.  
-
-Extended ext2fs_namei() to handle symbolic links.  Added new function
-ext2fs_nami_follow() which will follow last symbolic link in the case
-where the pathname points to a sym link.
-
-The ext2fs_block_iterate function will now return the HURD translator
-block, if present.  The new flag BLOCK_FLAG_DATA_ONLY will cause the
-iterator to return data blocks only.  The ext2fs.h file now defines
-constants BLOCK_COUNT_IND, BLOCK_COUNT_DIND, BLOCK_COUNT_TIND, and
-BLOCK_COUNT_TRANSLATOR, which are the magic values passed in the block
-count field of the iterator callback function.
-
-The test script driver now takes an optional second argument, which is
-the test case to be run.  This allows you to run a test case without
-needing to run the entire test suite.
-
-On Linux ELF systems, install the .so files in the correct places
-(/usr/lib).  The .so files must be stored in the same directory as the
-.a files.
-
-Fixed miscellaneous HURD compilation issues with header file being
-included in the right order.
-
-Fixed debugfs so that it resets optind to zero, not one, since setting
-optind to zero is more correct.
-
-
-E2fsprogs 1.04 (May 16, 1996)
-=============================
-
-First "official" (1.03 was a limited release only) to support building
-e2fsprogs under Linux 2.0 kernels (as well as late model 1.3 and 1.99
-kernels).
-
-This package includes a RPM specs file, that it can be built using the
-RedHat Package Manager.
-
-E2fsck now prints a hint that if there are lots of incorrectly located
-inode bitmaps, block bitmaps, and inode table blocks, the user might
-want to try using e2fsck -b 8193 first, to see if that fares any
-better.
-
-For ext2 filesystem written with the hurd, debugfs will now print out
-the translator field when printing an inode structure.
-
-Lots of miscellaneous linking/installation cleanups:
-
-  Libraries are now linked using a relative pathname, instead of
-  relying on -L working correct.  It doesn't, in many cases, including
-  current versions of GNU ld.  This guarantees that the build tree is
-  linking with the right libraries, instead of the ones installed in
-  /usr/lib.
-
-  Header files, man pages, and the et/ss shell scripts are now
-  generated using a custom substitution script, instead of relying on
-  the configure script.  This prevents needless recompilation of
-  files; in addition, the custom substitution script is much faster.
-
-  e2fsck may now be linked dynamically, by using the
-  --enable-dynamic-e2fsck flag to configure.  This is not recommended,
-  since it increases e2fsck's dependence on other files, but some
-  people need to save disk space, and other critical programs on their
-  systems were being linked dynamically anyway.
-
-  Programs such as fsck which didn't need to be linked against
-  libext2fs (or mke2fs which didn't need to be linked against libe2p)
-  only link against libraries they actually need.  Otherwise, those
-  programs would require the presense of libraries that otherwise
-  could be removed from a rescuse diskette.
-
-  The ss include files are now installed correctly so they can
-  actually be used by another package.
-
-  If the profiling libraries are built, they are now installed on a
-  "make install-libs".
-
-
-E2fsprogs 1.03 (March 27, 1996)
-===============================
-
-Change the m68k bit numbering for bitmasks to match the bit numbering
-used by all other ext2 implementations.  (This change was requested by
-the m68k kernel development team.)
-
-Support (in-development) filesystem format revision which supports
-(among other things) dynamically sized inodes.
-
-Fixed a bug in the ext2 library so that an intelligent error is
-returned if mke2fs is run with a ridiculously small number of blocks
-for a partition.
-
-Fixed a bug in the ext2 library which required that the device be
-openable in read/write mode in order to determine its size.  This
-caused e2fsck -n to require read/write access when it was not
-previously necessary.
-
-Fixed a bug in e2fsck which casued it to occasionally fail the test
-suite depending on which version of the floating point library it was
-using.
-
-Fixed a bug in e2fsck so that it now halts with a fatal error when
-certain superblock consistency checks fail.  Previously it continued
-running e2fsck, with some potential confusing/damaging consequences.
-
-Added new flag to fsck which allows the root to be checked in parallel
-with other filesytems.  This is not the safest thing in the world to
-do, but some system administrators really wanted it.
-
-Fixed -Wall flames in lib/ss.
-
-
-E2fsprogs 1.02 (January 16, 1996)
-=================================
-
-Fix to allow e2fsprogs to be compiled on recent 1.3 (pl45+) kernels.
-
-Change e2fsck to print statistics of how many non-contiguous files are
-on the system.  Note that a file which is larger than 8k blocks, it is
-guaranteed to be non-contiguous.
-
-In mke2fs, print a warning message if a user tries to format a whole
-disk (/dev/hda versus /dev/hda1).  If a user really wants to format a
-whole disk, the -F (force) option forces mke2fs to format a whole disk
-as a filesytem.
-
-Fix a bug in fsck where in some cases it might start checking
-partitions in the next pass before it finishes checking partitions in
-the current pass.  This still won't cause two partitions on the same
-disk will be checked, so it's rarely a problem in real life.
-
-Patch lsattr so that it won't hang when checking a named pipe.
-
-Minor compilation fixes:
-       * Fix the order of libraries that were linked in debugfs.
-       * Allow the sources to be compiled with -ansi turned on.
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..21ae9791e35e38c906b3038aa290fb80a87ebfbb
--- /dev/null
@@ -0,0 +1 @@
+doc/RelNotes/v1.46.0.txt
\ No newline at end of file
diff --git a/TODO b/TODO
deleted file mode 100644 (file)
index d531d17..0000000
--- a/TODO
+++ /dev/null
@@ -1,277 +0,0 @@
-Need to process the bad block inode *before* doing the inode scan.
-
-Also check to see if the first block of the inode table is not on the
-bad block scan, and fix that.  We need to check for an inaccurate
-blocks, and fix them before we start doing anything else with the
-filesystem!
-
----------------------------------------------------
-User request:
-
-BTW: Could you please add some sort of deleted and possibly corrupted file
-     and inode list to e2fsck report. There should be filenames deleted
-     from directory inodes, files with duplicate blocks e.t.c.
-     It's pretty annoying to filter this information from e2fsck output
-     by hand :-
-
-------------------------------------------
-
-Add a "answer Yes always to this class of question" response.
-
-----------------------------------
-
-ext2fs_flush() should return a different error message for primary
-versus backup superblock flushing, so that mke2fs can print an
-appropriate error message.
-
----------------------------------
-Date: Mon, 08 Mar 1999 21:46:14 +0100
-From: Sergio Polini <s.polini@mclink.it>
-
-
-I'm reading the sorce code of e2fsck 1.14.
-In pass2.c, lines 352-357, I read:
-
-if ((dirent->name_len & 0xFF) > EXT2_NAME_LEN) {
-        if (fix_problem(ctx, PR_2_FILENAME_LONG, &cd->pctx)) {
-                dirent->name_len = EXT2_NAME_LEN;
-                dir_modified++;
-        }
-}
-
-I think that I'll never see any messages about too long filenames,
-because "whatever & 0xFF" can never be "> 0xFF".
-Am I wrong?
---------------------------------------
-
-Add chmod command to debugfs.
-
-------------------------------------------
-
-Date: Tue, 18 Jan 2000 17:54:53 -0800 (PST)
-From: Alan Blanchard <alan@abraxas.to>
-To: tytso@MIT.EDU
-Subject: DEBUGFS - thanks and a feature idea
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-
-Theodore:
-
-First, let me thank you for writing debugfs. Recently, my Linux box
-(RH 6.0, 400 MHz PIII, on a DSL line) was hacked into.  The intruder did
-an "rm -Rf" on a 34 GB drive with about 5GB of data on it.  I was able to
-restore essentially the entire thing with debugfs and a bit of C code and Perl.
-Actually, I could have done the entire thing with debugfs and Perl, but I
-thought it would be too slow.
-
-During this exercise, I noticed that one small feature was lacking that would
-have made my job a bit easier.  The length of a deleted directory is
-reported as 0, hence debugfs won't dump the contents of the directory to a
-file using the "dump" command.  The only thing that saved me was that the
-list of disk blocks is not zeroed out.  I was able to dump the contents of the
-directories by using debugfs to get the relevant block numbers, then
-using dd to get the actual data.
-
-If debugfs had a feature where it ignored the size of a directory reported by
-the inode and instead just dumped all the blocks, it would have facilited
-things a bit. This seems like a very easy feature to add.
-
-Again, thanks for writing debugfs (and all the other Linux stuff you've written!).
-
-Cheers,
-Alan Blanchard
-alan@abraxas.to
-
-
--------------------------------------------------------------------
-
-Date: Fri, 21 Jan 2000 14:07:12 -0800
-From: "H. Peter Anvin" <hpa@www.transmeta.com>
-Subject: mkfs -cc and fsck -c
-
-b) An option to mkfs to zero the partition.  Yes, it can be done with
-dd, but it would be a nicer way of doing it.
-
-------------------------------------------------------------------
-
-Add support for in ext2fs_block_iterate() for a returning the
-compressed flag blocks to block_iterate.  Change default to not return
-EXT2_COMPRESSED_BLKADDR.  Change e2fsck to pass this flag in.
-
-(The old compression patches did this by default all the time, which
-is bad, since it meant e2fsck never saw the EXT2_COMPRESSED_BLKADDR
-flagword.
-
-------------------------------------------------------------
-
-E2fsck should offer to clear all the blocks in an indirect block, not
-the entire inode, so there's better recovery for when an indirect
-block gets trashed.
-
-
--------------------------------------------------------------
-
-From: Yann Dirson - LOGATIQUE <Yann.Dirson@France.Sun.COM>
-Date: Thu, 2 Mar 2000 13:52:13 +0100 (MET)
-
-During my experiments on the broken system, I noticed the following in
-the badblocks program (which I'm aware is not designed for IDE drives)
-- I'd probably have already fixed them if my home system was up :(
-
-* the syntax summary documents 2nd arg as blocks_count, which should
-probably read something like end_count.
-
-* testing past end of device is not detected, and lists those blocks
-as bad, whereas they simply do not exist.
-
-
-I think I'll probably add a "max count" option to findsuper(8), so
-that I do not have to wait for the whole disk to be scanned when the
-system had to be launched with "init=/bin/sh", in which case Ctrl-[CZ]
-and friends appear to be absolutely ignored.
-
-
-Somewhat unrelated, I just noticed the
-http://web.mit.edu/tytso/www/linux/ext2.html could be updated:
-
-- could mention SGI xfs (http://oss.sgi.com/projects/xfs/ - they just
-  release 0.03 snapshot)
-
-----------------------------------------------------------------
-
-Return-Path: <tytso@MIT.EDU>
-Date: Thu, 10 Feb 2000 13:20:14 -0500
-From: "Theodore Y. Ts'o" <tytso@MIT.EDU>
-To: R.E.Wolff@BitWizard.nl
-In-Reply-To: Rogier Wolff's message of Thu, 10 Feb 2000 08:46:30 +0100 (MET),
-       <200002100746.IAA24573@cave.bitwizard.nl>
-Subject: Re: e2fsck request for enhancement.
-Phone: (781) 391-3464
-
-   Date: Thu, 10 Feb 2000 08:46:30 +0100 (MET)
-   From: R.E.Wolff@BitWizard.nl (Rogier Wolff)
-
-   Lately, while trying to recover a broken disk, my system froze (twice,
-   until I tried something else) while copying the disk.
-
-   So I had a file of about 50Mb that was growing frantically at the
-   moment of the crash.
-
-   e2fsck, then finds an indirect block that is completely bogus. It
-   starts by asking me if it's ok to clear a few of the referenced
-   blocks. I say yes. Then it comes to the conclusion: 
-
-      too many invalid blocks. Clear inode?
-
-   and then I get the option to delete the whole file. Not to truncate
-   the file to a "working" size.
-
-
-   I'd MUCH rather have e2fsck say something like:
-
-      inode 1234 references an invalid block 134345454. Hmm.
-      inode 1234 references 567 out of 50176 invalid blocks, 
-                         all near the end. Truncate file to 49152 blocks?
-
-   Here you can see that of the 1024 blocks near the end of the file,
-   only 567 were detected as invalid. However now 48Mb of the file will
-   be recovered, instead of thrown away.
-
-That's a good point.  Actually, the right thing is for e2fsck to offer
-to clear all of the bad blocks in a particular indirect block.  I don't
-know how hard it would be to do that, but I'll put it on my e2fsprogs
-TODO list.
-
-                                                       - Ted
-
----------------------------------------------------------------
-From e2fsprogs Debian TODO file as of 1.10-13.
-
-* Maybe make -dbg packages. Look at how others do it.
-
----------------------------------------------------------------
-
-Add --lba option to debian icheck command, and have ways of making it
-easier to translate LBA to filesystem block numbers.
-
--------------------------------------------------------
-
-
-
-List of projects for e2fsprogs:
-
-
-1) Make debugfs's "ncheck <inode>" command list all of the pathnames
-to an inode, not just only the first link to the inode which is found.
-(A good "intro to libext2fs programming interfaces project)
-
-       Difficulty: Low         Priority: Low
-
-2) Use a code coverage tool such as Rational's PureCoverage to see
-what kind of code coverage we have for e2fsck, and try to add test
-cases to increase the code coverage for e2fsck.
-
-       Difficulty: Medium      Priorty: Low
-
-3) Use a code coverage tool such as Rational's PureCoverage to see
-what kind of code coverage we have for resize2fs, and try to add test
-cases to increase the code coverage for resize2fs.
-
-       Difficulty: Medium      Priorty: Medium
-
-4) Create a new I/O manager (i.e., test_io.c, unix_io.c, et.al.) which
-layers on top of an existing I/O manager which provides copy-on-write
-functionality.  This COW I/O manager takes will take two open I/O
-managers, call them "base" and "changed".  The "base" I/O manager is
-opened read/only, so any changes are written instead to the "changed"
-I/O manager, in a compact, non-sparse format containing the intended
-modification to the "base" filesystem.  
-
-This will allow resize2fs to figure out what changes need to made to
-extend a filesystem, or expand the size of inodes in the inode table,
-and the changes can be pushed the filesystem in one fell swoop.  (If
-the system crashes; the program which runs the "changed" file can be
-re-run, much like a journal replay.  My assumption is that the COW
-file will contain the filesystem UUID in a the COW superblock, and the
-COW file will be stored in some place such as /var/state/e2fsprogs,
-with an init.d file to automate the replay so we can recover cleanly
-from a crash during the resize2fs process.)
-
-       Difficulty: Medium      Priority: Medium
-
-5) Create a new I/O manager (i.e., test_io.c, unix_io.c, et.al.) which
-layers on top of an existing I/O manager which provides an "undo"
-functionality.  This undo I/O manager takes will take two open I/O
-managers, call them "base" and "undo".  The "base" I/O manager is be
-opened read/write, and when any writes are sent to the I/O manager,
-the I/O manager will check the "undo" I/O manager, using a file format
-identical to the one found in (5) above.  
-
-This is useful for allowing e2fsck to create an "undo" file, which
-would make things like "e2fsck -y" much safer.
-
-       Difficulty: Low (once 5 is done)  Priority: Low
-
-6) Modify resize2fs so that it can relocate and reorganize the
-filesystem in the following ways: (1) increase the inode size, so that
-an existing filesystem can use the EA-in-inode kernel patch, (2)
-reserve blocks in the resize inode to allow for on-line resizing.  Use
-the COW I/O manager described in (5) in order to provide robustness in
-case of a crash during the resize/reorganization operation.  
-
-       Difficulty: High        Priority: Medium
-
-7) Review the EA-in-inode patches to e2fsck for correctness/code
-cleanliness.  (I will probably have to do this myself -- Ted)
-
-       Difficulty: High        Priorty: Medium
-
-8) Add support for extent maps to e2fsprogs.  I need to review the
-extent maps first/in parallel. 
-
-       Difficulty: High        Priority: Medium
-
-----------------------------------
-
-Need to deal with the case where the resize inode overlaps with the
-bad blocks inode.
-
index 912383a..13b1e02 100644 (file)
@@ -133,21 +133,46 @@ dnl If there was a GNU version, then set @ifGNUmake@ to the empty string, '#' ot
         AC_SUBST(ifGNUmake)
         AC_SUBST(ifNotGNUmake)
 ] )
-# was originally from nls.m4 serial 1 (gettext-0.12)
-AC_DEFUN([AM_MKINSTALLDIRS],
+
+# AX_CHECK_MOUNT_OPT: an autoconf macro to check for generic filesystem-
+# agnostic 'mount' options. Written by Nicholas Clark. Looks for constants in
+# sys/mount.h to predict whether the 'mount' utility will support a specific
+# mounting option.
+#
+# This macro can be used to check for the presence of 'nodev' (or other mount
+# options), which isn't uniformly implemented in the BSD family at the time of
+# this writing. Tested on FreeBSD, NetBSD, OpenBSD, and Linux.
+#
+# Usage:
+#
+# AX_CHECK_MOUNT_OPT(option)
+#
+# Defines HAVE_MOUNT_$OPTION (in uppercase) if the option exists, and sets
+# ac_cv_mount_$option (in original case) otherwise.
+#
+# Copyright (c) 2018 Nicholas Clark <nicholas.clark@gmail.com>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty or attribution requirement.
+
+AC_DEFUN([AX_CHECK_MOUNT_OPT], [__AX_CHECK_MOUNT_OPT(m4_tolower([$1]),m4_toupper([$1]))])
+AC_DEFUN([__AX_CHECK_MOUNT_OPT],
 [
-  dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
-  dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
-  dnl Try to locate it.
-  MKINSTALLDIRS=
-  if test -n "$ac_aux_dir"; then
-    case "$ac_aux_dir" in
-      /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
-      *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
-    esac
-  fi
-  if test -z "$MKINSTALLDIRS"; then
-    MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
-  fi
-  AC_SUBST(MKINSTALLDIRS)
+    AS_ECHO_N("checking for mount '$1' option... ")
+    AC_TRY_COMPILE(
+        [#include <sys/mount.h>],
+        [void *temp = (void *)(MS_$2); (void) temp;],
+        [AC_DEFINE(HAVE_MOUNT_$2, 1, [Define to 1 if mount supports $1.])
+         AS_VAR_SET(ac_cv_mount_$1, yes)
+         AS_ECHO("yes")],
+        [AC_TRY_COMPILE(
+            [#include <sys/mount.h>],
+            [void *temp = (void *)(MNT_$2); (void) temp;],
+            [AC_DEFINE(HAVE_MOUNT_$2, 1, [Define to 1 if mount supports $1.])
+             AS_VAR_SET(ac_cv_mount_$1, yes)
+             AS_ECHO("yes")],
+            [AS_VAR_SET(ac_cv_mount_$1, no)
+             AS_ECHO("no")]
+        )]
+    )
 ])
index 4cf123a..0f39d30 100644 (file)
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.3 -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # PARTICULAR PURPOSE.
 
 m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-# codeset.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2000-2002, 2006, 2008-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
+# ===========================================================================
+#        https://www.gnu.org/software/autoconf-archive/ax_pthread.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+#   This macro figures out how to build C programs using POSIX threads. It
+#   sets the PTHREAD_LIBS output variable to the threads library and linker
+#   flags, and the PTHREAD_CFLAGS output variable to any special C compiler
+#   flags that are needed. (The user can also force certain compiler
+#   flags/libs to be tested by setting these environment variables.)
+#
+#   Also sets PTHREAD_CC to any special C compiler that is needed for
+#   multi-threaded programs (defaults to the value of CC otherwise). (This
+#   is necessary on AIX to use the special cc_r compiler alias.)
+#
+#   NOTE: You are assumed to not only compile your program with these flags,
+#   but also to link with them as well. For example, you might link with
+#   $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
+#
+#   If you are only building threaded programs, you may wish to use these
+#   variables in your default LIBS, CFLAGS, and CC:
+#
+#     LIBS="$PTHREAD_LIBS $LIBS"
+#     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+#     CC="$PTHREAD_CC"
+#
+#   In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
+#   has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to
+#   that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+#
+#   Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
+#   PTHREAD_PRIO_INHERIT symbol is defined when compiling with
+#   PTHREAD_CFLAGS.
+#
+#   ACTION-IF-FOUND is a list of shell commands to run if a threads library
+#   is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
+#   is not found. If ACTION-IF-FOUND is not specified, the default action
+#   will define HAVE_PTHREAD.
+#
+#   Please let the authors know if this macro fails on any platform, or if
+#   you have any other suggestions or comments. This macro was based on work
+#   by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
+#   from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
+#   Alejandro Forero Cuervo to the autoconf macro repository. We are also
+#   grateful for the helpful feedback of numerous users.
+#
+#   Updated for Autoconf 2.68 by Daniel Richard G.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
+#   Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
+#
+#   This program 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.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 24
+
+AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
+AC_DEFUN([AX_PTHREAD], [
+AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AC_PROG_SED])
+AC_LANG_PUSH([C])
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on Tru64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
+        ax_pthread_save_CC="$CC"
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
+        AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])
+        AC_MSG_RESULT([$ax_pthread_ok])
+        if test "x$ax_pthread_ok" = "xno"; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        CC="$ax_pthread_save_CC"
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+fi
 
-dnl From Bruno Haible.
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
+#           (Note: HP C rejects this with "bad form for `-t' option")
+# -pthreads: Solaris/gcc (Note: HP C also rejects)
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads and
+#      -D_REENTRANT too), HP C (must be checked before -lpthread, which
+#      is present but should not be used directly; and before -mthreads,
+#      because the compiler interprets this as "-mt" + "-hreads")
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case $host_os in
+
+        freebsd*)
+
+        # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+        # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+
+        ax_pthread_flags="-kthread lthread $ax_pthread_flags"
+        ;;
 
-AC_DEFUN([AM_LANGINFO_CODESET],
-[
-  AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset],
-    [AC_LINK_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <langinfo.h>]],
-          [[char* cs = nl_langinfo(CODESET); return !cs;]])],
-       [am_cv_langinfo_codeset=yes],
-       [am_cv_langinfo_codeset=no])
+        hpux*)
+
+        # From the cc(1) man page: "[-mt] Sets various -D flags to enable
+        # multi-threading and also sets -lpthread."
+
+        ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
+        ;;
+
+        openedition*)
+
+        # IBM z/OS requires a feature-test macro to be defined in order to
+        # enable POSIX threads at all, so give the user a hint if this is
+        # not set. (We don't define these ourselves, as they can affect
+        # other portions of the system API in unpredictable ways.)
+
+        AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],
+            [
+#            if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
+             AX_PTHREAD_ZOS_MISSING
+#            endif
+            ],
+            [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])
+        ;;
+
+        solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed. (N.B.: The stubs are missing
+        # pthread_cleanup_push, or rather a function called by this macro,
+        # so we could check for that, but who knows whether they'll stub
+        # that too in a future libc.)  So we'll check first for the
+        # standard Solaris way of linking pthreads (-mt -lpthread).
+
+        ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
+        ;;
+esac
+
+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
+
+AS_IF([test "x$GCC" = "xyes"],
+      [ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"])
+
+# The presence of a feature test macro requesting re-entrant function
+# definitions is, on some systems, a strong hint that pthreads support is
+# correctly enabled
+
+case $host_os in
+        darwin* | hpux* | linux* | osf* | solaris*)
+        ax_pthread_check_macro="_REENTRANT"
+        ;;
+
+        aix*)
+        ax_pthread_check_macro="_THREAD_SAFE"
+        ;;
+
+        *)
+        ax_pthread_check_macro="--"
+        ;;
+esac
+AS_IF([test "x$ax_pthread_check_macro" = "x--"],
+      [ax_pthread_check_cond=0],
+      [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"])
+
+# Are we compiling with Clang?
+
+AC_CACHE_CHECK([whether $CC is Clang],
+    [ax_cv_PTHREAD_CLANG],
+    [ax_cv_PTHREAD_CLANG=no
+     # Note that Autoconf sets GCC=yes for Clang as well as GCC
+     if test "x$GCC" = "xyes"; then
+        AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
+            [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
+#            if defined(__clang__) && defined(__llvm__)
+             AX_PTHREAD_CC_IS_CLANG
+#            endif
+            ],
+            [ax_cv_PTHREAD_CLANG=yes])
+     fi
     ])
-  if test $am_cv_langinfo_codeset = yes; then
-    AC_DEFINE([HAVE_LANGINFO_CODESET], [1],
-      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
-  fi
-])
+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
+
+ax_pthread_clang_warning=no
+
+# Clang needs special handling, because older versions handle the -pthread
+# option in a rather... idiosyncratic way
+
+if test "x$ax_pthread_clang" = "xyes"; then
+
+        # Clang takes -pthread; it has never supported any other flag
+
+        # (Note 1: This will need to be revisited if a system that Clang
+        # supports has POSIX threads in a separate library.  This tends not
+        # to be the way of modern systems, but it's conceivable.)
+
+        # (Note 2: On some systems, notably Darwin, -pthread is not needed
+        # to get POSIX threads support; the API is always present and
+        # active.  We could reasonably leave PTHREAD_CFLAGS empty.  But
+        # -pthread does define _REENTRANT, and while the Darwin headers
+        # ignore this macro, third-party headers might not.)
+
+        PTHREAD_CFLAGS="-pthread"
+        PTHREAD_LIBS=
+
+        ax_pthread_ok=yes
+
+        # However, older versions of Clang make a point of warning the user
+        # that, in an invocation where only linking and no compilation is
+        # taking place, the -pthread option has no effect ("argument unused
+        # during compilation").  They expect -pthread to be passed in only
+        # when source code is being compiled.
+        #
+        # Problem is, this is at odds with the way Automake and most other
+        # C build frameworks function, which is that the same flags used in
+        # compilation (CFLAGS) are also used in linking.  Many systems
+        # supported by AX_PTHREAD require exactly this for POSIX threads
+        # support, and in fact it is often not straightforward to specify a
+        # flag that is used only in the compilation phase and not in
+        # linking.  Such a scenario is extremely rare in practice.
+        #
+        # Even though use of the -pthread flag in linking would only print
+        # a warning, this can be a nuisance for well-run software projects
+        # that build with -Werror.  So if the active version of Clang has
+        # this misfeature, we search for an option to squash it.
+
+        AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread],
+            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],
+            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+             # Create an alternate version of $ac_link that compiles and
+             # links in two steps (.c -> .o, .o -> exe) instead of one
+             # (.c -> exe), because the warning occurs only in the second
+             # step
+             ax_pthread_save_ac_link="$ac_link"
+             ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
+             ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
+             ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
+             ax_pthread_save_CFLAGS="$CFLAGS"
+             for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
+                AS_IF([test "x$ax_pthread_try" = "xunknown"], [break])
+                CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
+                ac_link="$ax_pthread_save_ac_link"
+                AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
+                    [ac_link="$ax_pthread_2step_ac_link"
+                     AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
+                         [break])
+                    ])
+             done
+             ac_link="$ax_pthread_save_ac_link"
+             CFLAGS="$ax_pthread_save_CFLAGS"
+             AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no])
+             ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
+            ])
 
-dnl 'extern inline' a la ISO C99.
+        case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
+                no | unknown) ;;
+                *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
+        esac
 
-dnl Copyright 2012-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
+fi # $ax_pthread_clang = yes
 
-AC_DEFUN([gl_EXTERN_INLINE],
-[
-  AH_VERBATIM([extern_inline],
-[/* Please see the Gnulib manual for how to use these macros.
-
-   Suppress extern inline with HP-UX cc, as it appears to be broken; see
-   <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>.
-
-   Suppress extern inline with Sun C in standards-conformance mode, as it
-   mishandles inline functions that call each other.  E.g., for 'inline void f
-   (void) { } inline void g (void) { f (); }', c99 incorrectly complains
-   'reference to static identifier "f" in extern inline function'.
-   This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
-
-   Suppress the use of extern inline on Apple's platforms, as Libc at least
-   through Libc-825.26 (2013-04-09) is incompatible with it; see, e.g.,
-   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
-   Perhaps Apple will fix this some day.  */
-#if ((__GNUC__ \
-      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
-      : (199901L <= __STDC_VERSION__ \
-         && !defined __HP_cc \
-         && !(defined __SUNPRO_C && __STDC__))) \
-     && !defined __APPLE__)
-# define _GL_INLINE inline
-# define _GL_EXTERN_INLINE extern inline
-#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
-       && !defined __APPLE__)
-# if __GNUC_GNU_INLINE__
-   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
-#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
-# else
-#  define _GL_INLINE extern inline
-# endif
-# define _GL_EXTERN_INLINE extern
-#else
-# define _GL_INLINE static _GL_UNUSED
-# define _GL_EXTERN_INLINE static _GL_UNUSED
-#endif
+if test "x$ax_pthread_ok" = "xno"; then
+for ax_pthread_try_flag in $ax_pthread_flags; do
 
-#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
-# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
-#  define _GL_INLINE_HEADER_CONST_PRAGMA
-# else
-#  define _GL_INLINE_HEADER_CONST_PRAGMA \
-     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
-# endif
-  /* Suppress GCC's bogus "no previous prototype for 'FOO'"
-     and "no previous declaration for 'FOO'"  diagnostics,
-     when FOO is an inline function in the header; see
-     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.  */
-# define _GL_INLINE_HEADER_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
-    _GL_INLINE_HEADER_CONST_PRAGMA
-# define _GL_INLINE_HEADER_END \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define _GL_INLINE_HEADER_BEGIN
-# define _GL_INLINE_HEADER_END
-#endif])
-])
+        case $ax_pthread_try_flag in
+                none)
+                AC_MSG_CHECKING([whether pthreads work without any flags])
+                ;;
 
-# fcntl-o.m4 serial 4
-dnl Copyright (C) 2006, 2009-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
+                -mt,pthread)
+                AC_MSG_CHECKING([whether pthreads work with -mt -lpthread])
+                PTHREAD_CFLAGS="-mt"
+                PTHREAD_LIBS="-lpthread"
+                ;;
 
-dnl Written by Paul Eggert.
+                -*)
+                AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
+                PTHREAD_CFLAGS="$ax_pthread_try_flag"
+                ;;
 
-# Test whether the flags O_NOATIME and O_NOFOLLOW actually work.
-# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise.
-# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise.
-AC_DEFUN([gl_FCNTL_O_FLAGS],
-[
-  dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW.
-  dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
-  dnl AC_GNU_SOURCE.
-  m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
-    [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
-    [AC_REQUIRE([AC_GNU_SOURCE])])
-
-  AC_CHECK_HEADERS_ONCE([unistd.h])
-  AC_CHECK_FUNCS_ONCE([symlink])
-  AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
-    [AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <sys/types.h>
-           #include <sys/stat.h>
-           #if HAVE_UNISTD_H
-           # include <unistd.h>
-           #else /* on Windows with MSVC */
-           # include <io.h>
-           # include <stdlib.h>
-           # defined sleep(n) _sleep ((n) * 1000)
-           #endif
-           #include <fcntl.h>
-           #ifndef O_NOATIME
-            #define O_NOATIME 0
-           #endif
-           #ifndef O_NOFOLLOW
-            #define O_NOFOLLOW 0
-           #endif
-           static int const constants[] =
-            {
-              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
-            };
-          ]],
-          [[
-            int result = !constants;
-            #if HAVE_SYMLINK
-            {
-              static char const sym[] = "conftest.sym";
-              if (symlink ("/dev/null", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              if (unlink (sym) != 0 || symlink (".", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              unlink (sym);
-            }
-            #endif
-            {
-              static char const file[] = "confdefs.h";
-              int fd = open (file, O_RDONLY | O_NOATIME);
-              if (fd < 0)
-                result |= 8;
-              else
-                {
-                  struct stat st0;
-                  if (fstat (fd, &st0) != 0)
-                    result |= 16;
-                  else
-                    {
-                      char c;
-                      sleep (1);
-                      if (read (fd, &c, 1) != 1)
-                        result |= 24;
-                      else
-                        {
-                          if (close (fd) != 0)
-                            result |= 32;
-                          else
-                            {
-                              struct stat st1;
-                              if (stat (file, &st1) != 0)
-                                result |= 40;
-                              else
-                                if (st0.st_atime != st1.st_atime)
-                                  result |= 64;
-                            }
-                        }
-                    }
-                }
-            }
-            return result;]])],
-       [gl_cv_header_working_fcntl_h=yes],
-       [case $? in #(
-        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
-        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
-        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
-         *) gl_cv_header_working_fcntl_h='no';;
-        esac],
-       [gl_cv_header_working_fcntl_h=cross-compiling])])
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
-    [Define to 1 if O_NOATIME works.])
+                pthread-config)
+                AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
+                AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
 
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
-    [Define to 1 if O_NOFOLLOW works.])
-])
+                *)
+                AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
+                PTHREAD_LIBS="-l$ax_pthread_try_flag"
+                ;;
+        esac
+
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
+#                       if $ax_pthread_check_cond
+#                        error "$ax_pthread_check_macro must be defined"
+#                       endif
+                        static void routine(void *a) { a = 0; }
+                        static void *start_routine(void *a) { return a; }],
+                       [pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */])],
+            [ax_pthread_ok=yes],
+            [])
+
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+
+        AC_MSG_RESULT([$ax_pthread_ok])
+        AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = "xyes"; then
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+        AC_CACHE_CHECK([for joinable pthread attribute],
+            [ax_cv_PTHREAD_JOINABLE_ATTR],
+            [ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+             for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+                 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+                                                 [int attr = $ax_pthread_attr; return attr /* ; */])],
+                                [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],
+                                [])
+             done
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
+               test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
+               test "x$ax_pthread_joinable_attr_defined" != "xyes"],
+              [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],
+                                  [$ax_cv_PTHREAD_JOINABLE_ATTR],
+                                  [Define to necessary symbol if this constant
+                                   uses a non-standard name on your system.])
+               ax_pthread_joinable_attr_defined=yes
+              ])
+
+        AC_CACHE_CHECK([whether more special flags are required for pthreads],
+            [ax_cv_PTHREAD_SPECIAL_FLAGS],
+            [ax_cv_PTHREAD_SPECIAL_FLAGS=no
+             case $host_os in
+             solaris*)
+             ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
+             ;;
+             esac
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
+               test "x$ax_pthread_special_flags_added" != "xyes"],
+              [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
+               ax_pthread_special_flags_added=yes])
+
+        AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
+            [ax_cv_PTHREAD_PRIO_INHERIT],
+            [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
+                                             [[int i = PTHREAD_PRIO_INHERIT;]])],
+                            [ax_cv_PTHREAD_PRIO_INHERIT=yes],
+                            [ax_cv_PTHREAD_PRIO_INHERIT=no])
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
+               test "x$ax_pthread_prio_inherit_defined" != "xyes"],
+              [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])
+               ax_pthread_prio_inherit_defined=yes
+              ])
+
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+
+        # More AIX lossage: compile with *_r variant
+        if test "x$GCC" != "xyes"; then
+            case $host_os in
+                aix*)
+                AS_CASE(["x/$CC"],
+                    [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
+                    [#handle absolute path differently from PATH based program lookup
+                     AS_CASE(["x$CC"],
+                         [x/*],
+                         [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
+                         [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
+                ;;
+            esac
+        fi
+fi
+
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+
+AC_SUBST([PTHREAD_LIBS])
+AC_SUBST([PTHREAD_CFLAGS])
+AC_SUBST([PTHREAD_CC])
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test "x$ax_pthread_ok" = "xyes"; then
+        ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
+        :
+else
+        ax_pthread_ok=no
+        $2
+fi
+AC_LANG_POP
+])dnl AX_PTHREAD
 
-# gettext.m4 serial 66 (gettext-0.18.2)
-dnl Copyright (C) 1995-2013 Free Software Foundation, Inc.
+# gettext.m4 serial 71 (gettext-0.20.2)
+dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
 dnl License but which still want to provide support for the GNU gettext
 dnl functionality.
 dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
 dnl They are *not* in the public domain.
 
 dnl Authors:
@@ -264,15 +520,13 @@ dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
 dnl Macro to add for using GNU gettext.
 
 dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
-dnl    default (if it is not specified or empty) is 'no-libtool'.
-dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
-dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl INTLSYMBOL must be one of 'external', 'use-libtool'.
+dnl    INTLSYMBOL should be 'external' for packages other than GNU gettext, and
+dnl    'use-libtool' for the packages 'gettext-runtime' and 'gettext-tools'.
 dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
 dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
 dnl    depending on --{enable,disable}-{shared,static} and on the presence of
-dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
-dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl    AM-DISABLE-SHARED).
 dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
 dnl    implementations (in libc or libintl) without the ngettext() function
 dnl    will be ignored.  If NEEDSYMBOL is specified and is
@@ -301,19 +555,17 @@ dnl
 AC_DEFUN([AM_GNU_GETTEXT],
 [
   dnl Argument checking.
-  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [use-libtool], ,
     [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-])])])])])
+])])])])
   ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
-    [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
+    [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported.
+])])
   ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
     [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
 ])])])])
   define([gt_included_intl],
-    ifelse([$1], [external],
-      ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
-      [yes]))
-  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+    ifelse([$1], [external], [no], [yes]))
   gt_NEEDS_INIT
   AM_GNU_GETTEXT_NEED([$2])
 
@@ -335,8 +587,7 @@ AC_DEFUN([AM_GNU_GETTEXT],
   dnl again, outside any 'if'. There are two solutions:
   dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
   dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
-  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
-  dnl documented, we avoid it.
+  dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it.
   ifelse(gt_included_intl, yes, , [
     AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
   ])
@@ -405,13 +656,18 @@ changequote([,])dnl
             [AC_LANG_PROGRAM(
                [[
 #include <libintl.h>
-$gt_revision_test_code
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
 extern int _nl_msg_cat_cntr;
 extern int *_nl_domain_bindings;
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
                ]],
                [[
 bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
                ]])],
             [eval "$gt_func_gnugettext_libc=yes"],
             [eval "$gt_func_gnugettext_libc=no"])])
@@ -437,17 +693,22 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_b
               [AC_LANG_PROGRAM(
                  [[
 #include <libintl.h>
-$gt_revision_test_code
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
 extern int _nl_msg_cat_cntr;
 extern
 #ifdef __cplusplus
 "C"
 #endif
 const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
                  ]],
                  [[
 bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
                  ]])],
               [eval "$gt_func_gnugettext_libintl=yes"],
               [eval "$gt_func_gnugettext_libintl=no"])
@@ -458,17 +719,22 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_a
                 [AC_LANG_PROGRAM(
                    [[
 #include <libintl.h>
-$gt_revision_test_code
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
 extern int _nl_msg_cat_cntr;
 extern
 #ifdef __cplusplus
 "C"
 #endif
 const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
                    ]],
                    [[
 bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
                    ]])],
                 [LIBINTL="$LIBINTL $LIBICONV"
                  LTLIBINTL="$LTLIBINTL $LTLIBICONV"
@@ -507,8 +773,8 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_a
         dnl Mark actions used to generate GNU NLS library.
         BUILD_INCLUDED_LIBINTL=yes
         USE_INCLUDED_LIBINTL=yes
-        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
-        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD"
+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD"
         LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
       fi
 
@@ -576,43 +842,14 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_a
   fi
 
   ifelse(gt_included_intl, yes, [
-    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
-    dnl to 'yes' because some of the testsuite requires it.
-    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
-      BUILD_INCLUDED_LIBINTL=yes
-    fi
+    dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes'
+    dnl because some of the testsuite requires it.
+    BUILD_INCLUDED_LIBINTL=yes
 
     dnl Make all variables we use known to autoconf.
     AC_SUBST([BUILD_INCLUDED_LIBINTL])
     AC_SUBST([USE_INCLUDED_LIBINTL])
     AC_SUBST([CATOBJEXT])
-
-    dnl For backward compatibility. Some configure.ins may be using this.
-    nls_cv_header_intl=
-    nls_cv_header_libgt=
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    DATADIRNAME=share
-    AC_SUBST([DATADIRNAME])
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    INSTOBJEXT=.mo
-    AC_SUBST([INSTOBJEXT])
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    GENCAT=gencat
-    AC_SUBST([GENCAT])
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    INTLOBJS=
-    if test "$USE_INCLUDED_LIBINTL" = yes; then
-      INTLOBJS="\$(GETTOBJS)"
-    fi
-    AC_SUBST([INTLOBJS])
-
-    dnl Enable libtool support if the surrounding package wishes it.
-    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
-    AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
   ])
 
   dnl For backward compatibility. Some Makefiles may be using this.
@@ -644,75 +881,689 @@ AC_DEFUN([AM_GNU_GETTEXT_NEED],
 dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
 AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
 
-# glibc2.m4 serial 3
-dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2013 Free Software Foundation,
-dnl Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
 
-# Test for the GNU C Library, version 2.0 or newer.
-# From Bruno Haible.
+dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], [])
 
-AC_DEFUN([gt_GLIBC2],
-  [
-    AC_CACHE_CHECK([whether we are using the GNU C Library 2 or newer],
-      [ac_cv_gnu_library_2],
-      [AC_EGREP_CPP([Lucky GNU user],
-        [
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ >= 2) && !defined __UCLIBC__
-  Lucky GNU user
- #endif
-#endif
-        ],
-        [ac_cv_gnu_library_2=yes],
-        [ac_cv_gnu_library_2=no])
-      ]
-    )
-    AC_SUBST([GLIBC2])
-    GLIBC2="$ac_cv_gnu_library_2"
-  ]
-)
-
-# glibc21.m4 serial 5
-dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2013 Free Software Foundation,
-dnl Inc.
+# host-cpu-c-abi.m4 serial 13
+dnl Copyright (C) 2002-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-# Test for the GNU C Library, version 2.1 or newer, or uClibc.
-# From Bruno Haible.
+dnl From Bruno Haible and Sam Steingold.
 
-AC_DEFUN([gl_GLIBC21],
-  [
-    AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc],
-      [ac_cv_gnu_library_2_1],
-      [AC_EGREP_CPP([Lucky],
-        [
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
-  Lucky GNU user
- #endif
+dnl Sets the HOST_CPU variable to the canonical name of the CPU.
+dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its
+dnl C language ABI (application binary interface).
+dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in
+dnl config.h.
+dnl
+dnl This canonical name can be used to select a particular assembly language
+dnl source file that will interoperate with C code on the given host.
+dnl
+dnl For example:
+dnl * 'i386' and 'sparc' are different canonical names, because code for i386
+dnl   will not run on SPARC CPUs and vice versa. They have different
+dnl   instruction sets.
+dnl * 'sparc' and 'sparc64' are different canonical names, because code for
+dnl   'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code
+dnl   contains 32-bit instructions, whereas 'sparc64' code contains 64-bit
+dnl   instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit
+dnl   mode, but not both.
+dnl * 'mips' and 'mipsn32' are different canonical names, because they use
+dnl   different argument passing and return conventions for C functions, and
+dnl   although the instruction set of 'mips' is a large subset of the
+dnl   instruction set of 'mipsn32'.
+dnl * 'mipsn32' and 'mips64' are different canonical names, because they use
+dnl   different sizes for the C types like 'int' and 'void *', and although
+dnl   the instruction sets of 'mipsn32' and 'mips64' are the same.
+dnl * The same canonical name is used for different endiannesses. You can
+dnl   determine the endianness through preprocessor symbols:
+dnl   - 'arm': test __ARMEL__.
+dnl   - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL.
+dnl   - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN.
+dnl * The same name 'i386' is used for CPUs of type i386, i486, i586
+dnl   (Pentium), AMD K7, Pentium II, Pentium IV, etc., because
+dnl   - Instructions that do not exist on all of these CPUs (cmpxchg,
+dnl     MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your
+dnl     assembly language source files use such instructions, you will
+dnl     need to make the distinction.
+dnl   - Speed of execution of the common instruction set is reasonable across
+dnl     the entire family of CPUs. If you have assembly language source files
+dnl     that are optimized for particular CPU types (like GNU gmp has), you
+dnl     will need to make the distinction.
+dnl   See <https://en.wikipedia.org/wiki/X86_instruction_listings>.
+AC_DEFUN([gl_HOST_CPU_C_ABI],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([gl_C_ASM])
+  AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi],
+    [case "$host_cpu" in
+
+changequote(,)dnl
+       i[34567]86 )
+changequote([,])dnl
+         gl_cv_host_cpu_c_abi=i386
+         ;;
+
+       x86_64 )
+         # On x86_64 systems, the C compiler may be generating code in one of
+         # these ABIs:
+         # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
+         # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
+         #   with native Windows (mingw, MSVC).
+         # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
+         # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if (defined __x86_64__ || defined __amd64__ \
+                     || defined _M_X64 || defined _M_AMD64)
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if defined __ILP32__ || defined _ILP32
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+                 ]])],
+              [gl_cv_host_cpu_c_abi=x86_64-x32],
+              [gl_cv_host_cpu_c_abi=x86_64])],
+           [gl_cv_host_cpu_c_abi=i386])
+         ;;
+
+changequote(,)dnl
+       alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] )
+changequote([,])dnl
+         gl_cv_host_cpu_c_abi=alpha
+         ;;
+
+       arm* | aarch64 )
+         # Assume arm with EABI.
+         # On arm64 systems, the C compiler may be generating code in one of
+         # these ABIs:
+         # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
+         # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
+         # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#ifdef __aarch64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                [[#if defined __ILP32__ || defined _ILP32
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+              [gl_cv_host_cpu_c_abi=arm64-ilp32],
+              [gl_cv_host_cpu_c_abi=arm64])],
+           [# Don't distinguish little-endian and big-endian arm, since they
+            # don't require different machine code for simple operations and
+            # since the user can distinguish them through the preprocessor
+            # defines __ARMEL__ vs. __ARMEB__.
+            # But distinguish arm which passes floating-point arguments and
+            # return values in integer registers (r0, r1, ...) - this is
+            # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which
+            # passes them in float registers (s0, s1, ...) and double registers
+            # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer
+            # sets the preprocessor defines __ARM_PCS (for the first case) and
+            # __ARM_PCS_VFP (for the second case), but older GCC does not.
+            echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c
+            # Look for a reference to the register d0 in the .s file.
+            AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
+            if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then
+              gl_cv_host_cpu_c_abi=armhf
+            else
+              gl_cv_host_cpu_c_abi=arm
+            fi
+            rm -f conftest*
+           ])
+         ;;
+
+       hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
+         # On hppa, the C compiler may be generating 32-bit code or 64-bit
+         # code. In the latter case, it defines _LP64 and __LP64__.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#ifdef __LP64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=hppa64],
+           [gl_cv_host_cpu_c_abi=hppa])
+         ;;
+
+       ia64* )
+         # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
+         # 32-bit code. In the latter case, it defines _ILP32.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#ifdef _ILP32
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=ia64-ilp32],
+           [gl_cv_host_cpu_c_abi=ia64])
+         ;;
+
+       mips* )
+         # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
+         # at 32.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=mips64],
+           [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but
+            # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32.
+            # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but
+            # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32.
+            AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if (_MIPS_SIM == _ABIN32)
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+                 ]])],
+              [gl_cv_host_cpu_c_abi=mipsn32],
+              [gl_cv_host_cpu_c_abi=mips])])
+         ;;
+
+       powerpc* )
+         # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
+         # No need to distinguish them here; the caller may distinguish
+         # them based on the OS.
+         # On powerpc64 systems, the C compiler may still be generating
+         # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
+         # be generating 64-bit code.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __powerpc64__ || defined _ARCH_PPC64
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [# On powerpc64, there are two ABIs on Linux: The AIX compatible
+            # one and the ELFv2 one. The latter defines _CALL_ELF=2.
+            AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if defined _CALL_ELF && _CALL_ELF == 2
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+                 ]])],
+              [gl_cv_host_cpu_c_abi=powerpc64-elfv2],
+              [gl_cv_host_cpu_c_abi=powerpc64])
+           ],
+           [gl_cv_host_cpu_c_abi=powerpc])
+         ;;
+
+       rs6000 )
+         gl_cv_host_cpu_c_abi=powerpc
+         ;;
+
+       riscv32 | riscv64 )
+         # There are 2 architectures (with variants): rv32* and rv64*.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if __riscv_xlen == 64
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [cpu=riscv64],
+           [cpu=riscv32])
+         # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
+         # Size of 'long' and 'void *':
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __LP64__
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [main_abi=lp64],
+           [main_abi=ilp32])
+         # Float ABIs:
+         # __riscv_float_abi_double:
+         #   'float' and 'double' are passed in floating-point registers.
+         # __riscv_float_abi_single:
+         #   'float' are passed in floating-point registers.
+         # __riscv_float_abi_soft:
+         #   No values are passed in floating-point registers.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __riscv_float_abi_double
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [float_abi=d],
+           [AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if defined __riscv_float_abi_single
+                     int ok;
+                   #else
+                     error fail
+                   #endif
+                 ]])],
+              [float_abi=f],
+              [float_abi=''])
+           ])
+         gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}"
+         ;;
+
+       s390* )
+         # On s390x, the C compiler may be generating 64-bit (= s390x) code
+         # or 31-bit (= s390) code.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __LP64__ || defined __s390x__
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=s390x],
+           [gl_cv_host_cpu_c_abi=s390])
+         ;;
+
+       sparc | sparc64 )
+         # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
+         # C compiler still generates 32-bit code.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __sparcv9 || defined __arch64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=sparc64],
+           [gl_cv_host_cpu_c_abi=sparc])
+         ;;
+
+       *)
+         gl_cv_host_cpu_c_abi="$host_cpu"
+         ;;
+     esac
+    ])
+
+  dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same.
+  HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'`
+  HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi"
+  AC_SUBST([HOST_CPU])
+  AC_SUBST([HOST_CPU_C_ABI])
+
+  # This was
+  #   AC_DEFINE_UNQUOTED([__${HOST_CPU}__])
+  #   AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__])
+  # earlier, but KAI C++ 3.2d doesn't like this.
+  sed -e 's/-/_/g' >> confdefs.h <<EOF
+#ifndef __${HOST_CPU}__
+#define __${HOST_CPU}__ 1
+#endif
+#ifndef __${HOST_CPU_C_ABI}__
+#define __${HOST_CPU_C_ABI}__ 1
+#endif
+EOF
+  AH_TOP([/* CPU and C ABI indicator */
+#ifndef __i386__
+#undef __i386__
+#endif
+#ifndef __x86_64_x32__
+#undef __x86_64_x32__
+#endif
+#ifndef __x86_64__
+#undef __x86_64__
+#endif
+#ifndef __alpha__
+#undef __alpha__
+#endif
+#ifndef __arm__
+#undef __arm__
+#endif
+#ifndef __armhf__
+#undef __armhf__
+#endif
+#ifndef __arm64_ilp32__
+#undef __arm64_ilp32__
+#endif
+#ifndef __arm64__
+#undef __arm64__
+#endif
+#ifndef __hppa__
+#undef __hppa__
+#endif
+#ifndef __hppa64__
+#undef __hppa64__
+#endif
+#ifndef __ia64_ilp32__
+#undef __ia64_ilp32__
+#endif
+#ifndef __ia64__
+#undef __ia64__
+#endif
+#ifndef __m68k__
+#undef __m68k__
+#endif
+#ifndef __mips__
+#undef __mips__
+#endif
+#ifndef __mipsn32__
+#undef __mipsn32__
+#endif
+#ifndef __mips64__
+#undef __mips64__
+#endif
+#ifndef __powerpc__
+#undef __powerpc__
+#endif
+#ifndef __powerpc64__
+#undef __powerpc64__
+#endif
+#ifndef __powerpc64_elfv2__
+#undef __powerpc64_elfv2__
+#endif
+#ifndef __riscv32__
+#undef __riscv32__
+#endif
+#ifndef __riscv64__
+#undef __riscv64__
+#endif
+#ifndef __riscv32_ilp32__
+#undef __riscv32_ilp32__
+#endif
+#ifndef __riscv32_ilp32f__
+#undef __riscv32_ilp32f__
+#endif
+#ifndef __riscv32_ilp32d__
+#undef __riscv32_ilp32d__
+#endif
+#ifndef __riscv64_ilp32__
+#undef __riscv64_ilp32__
+#endif
+#ifndef __riscv64_ilp32f__
+#undef __riscv64_ilp32f__
+#endif
+#ifndef __riscv64_ilp32d__
+#undef __riscv64_ilp32d__
+#endif
+#ifndef __riscv64_lp64__
+#undef __riscv64_lp64__
+#endif
+#ifndef __riscv64_lp64f__
+#undef __riscv64_lp64f__
+#endif
+#ifndef __riscv64_lp64d__
+#undef __riscv64_lp64d__
 #endif
-#ifdef __UCLIBC__
- Lucky user
+#ifndef __s390__
+#undef __s390__
 #endif
-        ],
-        [ac_cv_gnu_library_2_1=yes],
-        [ac_cv_gnu_library_2_1=no])
-      ]
-    )
-    AC_SUBST([GLIBC21])
-    GLIBC21="$ac_cv_gnu_library_2_1"
-  ]
-)
-
-# iconv.m4 serial 18 (gettext-0.18.2)
-dnl Copyright (C) 2000-2002, 2007-2013 Free Software Foundation, Inc.
+#ifndef __s390x__
+#undef __s390x__
+#endif
+#ifndef __sh__
+#undef __sh__
+#endif
+#ifndef __sparc__
+#undef __sparc__
+#endif
+#ifndef __sparc64__
+#undef __sparc64__
+#endif
+])
+
+])
+
+
+dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI
+dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit
+dnl one, or to 'unknown' if unknown.
+dnl This is a simplified variant of gl_HOST_CPU_C_ABI.
+AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit],
+    [if test -n "$gl_cv_host_cpu_c_abi"; then
+       case "$gl_cv_host_cpu_c_abi" in
+         i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc)
+           gl_cv_host_cpu_c_abi_32bit=yes ;;
+         x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 )
+           gl_cv_host_cpu_c_abi_32bit=no ;;
+         *)
+           gl_cv_host_cpu_c_abi_32bit=unknown ;;
+       esac
+     else
+       case "$host_cpu" in
+
+         # CPUs that only support a 32-bit ABI.
+         arc \
+         | bfin \
+         | cris* \
+         | csky \
+         | epiphany \
+         | ft32 \
+         | h8300 \
+         | m68k \
+         | microblaze | microblazeel \
+         | nds32 | nds32le | nds32be \
+         | nios2 | nios2eb | nios2el \
+         | or1k* \
+         | or32 \
+         | sh | sh[1234] | sh[1234]e[lb] \
+         | tic6x \
+         | xtensa* )
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
+
+         # CPUs that only support a 64-bit ABI.
+changequote(,)dnl
+         alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \
+         | mmix )
+changequote([,])dnl
+           gl_cv_host_cpu_c_abi_32bit=no
+           ;;
+
+changequote(,)dnl
+         i[34567]86 )
+changequote([,])dnl
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
+
+         x86_64 )
+           # On x86_64 systems, the C compiler may be generating code in one of
+           # these ABIs:
+           # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
+           # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
+           #   with native Windows (mingw, MSVC).
+           # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
+           # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if (defined __x86_64__ || defined __amd64__ \
+                       || defined _M_X64 || defined _M_AMD64) \
+                      && !(defined __ILP32__ || defined _ILP32)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         arm* | aarch64 )
+           # Assume arm with EABI.
+           # On arm64 systems, the C compiler may be generating code in one of
+           # these ABIs:
+           # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
+           # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
+           # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
+           # On hppa, the C compiler may be generating 32-bit code or 64-bit
+           # code. In the latter case, it defines _LP64 and __LP64__.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#ifdef __LP64__
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         ia64* )
+           # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
+           # 32-bit code. In the latter case, it defines _ILP32.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#ifdef _ILP32
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=yes],
+             [gl_cv_host_cpu_c_abi_32bit=no])
+           ;;
+
+         mips* )
+           # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
+           # at 32.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         powerpc* )
+           # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
+           # No need to distinguish them here; the caller may distinguish
+           # them based on the OS.
+           # On powerpc64 systems, the C compiler may still be generating
+           # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
+           # be generating 64-bit code.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined __powerpc64__ || defined _ARCH_PPC64
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         rs6000 )
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
+
+         riscv32 | riscv64 )
+           # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
+           # Size of 'long' and 'void *':
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined __LP64__
+                    int ok;
+                  #else
+                    error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         s390* )
+           # On s390x, the C compiler may be generating 64-bit (= s390x) code
+           # or 31-bit (= s390) code.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined __LP64__ || defined __s390x__
+                    int ok;
+                  #else
+                    error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         sparc | sparc64 )
+           # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
+           # C compiler still generates 32-bit code.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined __sparcv9 || defined __arch64__
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         *)
+           gl_cv_host_cpu_c_abi_32bit=unknown
+           ;;
+       esac
+     fi
+    ])
+
+  HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit"
+])
+
+# iconv.m4 serial 21
+dnl Copyright (C) 2000-2002, 2007-2014, 2016-2020 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -785,27 +1636,33 @@ AC_DEFUN([AM_ICONV_LINK],
       if test $am_cv_lib_iconv = yes; then
         LIBS="$LIBS $LIBICONV"
       fi
-      AC_RUN_IFELSE(
-        [AC_LANG_SOURCE([[
+      am_cv_func_iconv_works=no
+      for ac_iconv_const in '' 'const'; do
+        AC_RUN_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[
 #include <iconv.h>
 #include <string.h>
-int main ()
-{
-  int result = 0;
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+             ]],
+             [[int result = 0;
   /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
      returns.  */
   {
     iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
     if (cd_utf8_to_88591 != (iconv_t)(-1))
       {
-        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
         char buf[10];
-        const char *inptr = input;
+        ICONV_CONST char *inptr = input;
         size_t inbytesleft = strlen (input);
         char *outptr = buf;
         size_t outbytesleft = sizeof (buf);
         size_t res = iconv (cd_utf8_to_88591,
-                            (char **) &inptr, &inbytesleft,
+                            &inptr, &inbytesleft,
                             &outptr, &outbytesleft);
         if (res == 0)
           result |= 1;
@@ -818,14 +1675,14 @@ int main ()
     iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
     if (cd_ascii_to_88591 != (iconv_t)(-1))
       {
-        static const char input[] = "\263";
+        static ICONV_CONST char input[] = "\263";
         char buf[10];
-        const char *inptr = input;
+        ICONV_CONST char *inptr = input;
         size_t inbytesleft = strlen (input);
         char *outptr = buf;
         size_t outbytesleft = sizeof (buf);
         size_t res = iconv (cd_ascii_to_88591,
-                            (char **) &inptr, &inbytesleft,
+                            &inptr, &inbytesleft,
                             &outptr, &outbytesleft);
         if (res == 0)
           result |= 2;
@@ -837,14 +1694,14 @@ int main ()
     iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
     if (cd_88591_to_utf8 != (iconv_t)(-1))
       {
-        static const char input[] = "\304";
+        static ICONV_CONST char input[] = "\304";
         static char buf[2] = { (char)0xDE, (char)0xAD };
-        const char *inptr = input;
+        ICONV_CONST char *inptr = input;
         size_t inbytesleft = 1;
         char *outptr = buf;
         size_t outbytesleft = 1;
         size_t res = iconv (cd_88591_to_utf8,
-                            (char **) &inptr, &inbytesleft,
+                            &inptr, &inbytesleft,
                             &outptr, &outbytesleft);
         if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
           result |= 4;
@@ -857,14 +1714,14 @@ int main ()
     iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
     if (cd_88591_to_utf8 != (iconv_t)(-1))
       {
-        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
         char buf[50];
-        const char *inptr = input;
+        ICONV_CONST char *inptr = input;
         size_t inbytesleft = strlen (input);
         char *outptr = buf;
         size_t outbytesleft = sizeof (buf);
         size_t res = iconv (cd_88591_to_utf8,
-                            (char **) &inptr, &inbytesleft,
+                            &inptr, &inbytesleft,
                             &outptr, &outbytesleft);
         if ((int)res > 0)
           result |= 8;
@@ -874,27 +1731,36 @@ int main ()
 #endif
   /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
      provided.  */
-  if (/* Try standardized names.  */
-      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
-      /* Try IRIX, OSF/1 names.  */
-      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
-      /* Try AIX names.  */
-      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
-      /* Try HP-UX names.  */
-      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
-    result |= 16;
+  {
+    /* Try standardized names.  */
+    iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP");
+    /* Try IRIX, OSF/1 names.  */
+    iconv_t cd2 = iconv_open ("UTF-8", "eucJP");
+    /* Try AIX names.  */
+    iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP");
+    /* Try HP-UX names.  */
+    iconv_t cd4 = iconv_open ("utf8", "eucJP");
+    if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1)
+        && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1))
+      result |= 16;
+    if (cd1 != (iconv_t)(-1))
+      iconv_close (cd1);
+    if (cd2 != (iconv_t)(-1))
+      iconv_close (cd2);
+    if (cd3 != (iconv_t)(-1))
+      iconv_close (cd3);
+    if (cd4 != (iconv_t)(-1))
+      iconv_close (cd4);
+  }
   return result;
-}]])],
-        [am_cv_func_iconv_works=yes],
-        [am_cv_func_iconv_works=no],
-        [
-changequote(,)dnl
-         case "$host_os" in
-           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
-           *)            am_cv_func_iconv_works="guessing yes" ;;
-         esac
-changequote([,])dnl
-        ])
+]])],
+          [am_cv_func_iconv_works=yes], ,
+          [case "$host_os" in
+             aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+             *)            am_cv_func_iconv_works="guessing yes" ;;
+           esac])
+        test "$am_cv_func_iconv_works" = no || break
+      done
       LIBS="$am_save_LIBS"
     ])
     case "$am_cv_func_iconv_works" in
@@ -968,399 +1834,42 @@ size_t iconv();
     am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
     AC_MSG_RESULT([
          $am_cv_proto_iconv])
-    AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
-      [Define as const if the declaration of iconv() needs const.])
-    dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
-    m4_ifdef([gl_ICONV_H_DEFAULTS],
-      [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
-       if test -n "$am_cv_proto_iconv_arg1"; then
-         ICONV_CONST="const"
-       fi
-      ])
-  fi
-])
-
-# intdiv0.m4 serial 6 (gettext-0.18.2)
-dnl Copyright (C) 2002, 2007-2008, 2010-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([gt_INTDIV0],
-[
-  AC_REQUIRE([AC_PROG_CC])dnl
-  AC_REQUIRE([AC_CANONICAL_HOST])dnl
-
-  AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
-    gt_cv_int_divbyzero_sigfpe,
-    [
-      gt_cv_int_divbyzero_sigfpe=
-changequote(,)dnl
-      case "$host_os" in
-        macos* | darwin[6-9]* | darwin[1-9][0-9]*)
-          # On Mac OS X 10.2 or newer, just assume the same as when cross-
-          # compiling. If we were to perform the real test, 1 Crash Report
-          # dialog window would pop up.
-          case "$host_cpu" in
-            i[34567]86 | x86_64)
-              gt_cv_int_divbyzero_sigfpe="guessing yes" ;;
-          esac
-          ;;
-      esac
-changequote([,])dnl
-      if test -z "$gt_cv_int_divbyzero_sigfpe"; then
-        AC_RUN_IFELSE(
-          [AC_LANG_SOURCE([[
-#include <stdlib.h>
-#include <signal.h>
-
-static void
-sigfpe_handler (int sig)
-{
-  /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
-  exit (sig != SIGFPE);
-}
-
-int x = 1;
-int y = 0;
-int z;
-int nan;
-
-int main ()
-{
-  signal (SIGFPE, sigfpe_handler);
-/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
-#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
-  signal (SIGTRAP, sigfpe_handler);
-#endif
-/* Linux/SPARC yields signal SIGILL.  */
-#if defined (__sparc__) && defined (__linux__)
-  signal (SIGILL, sigfpe_handler);
-#endif
-
-  z = x / y;
-  nan = y / y;
-  exit (2);
-}
-]])],
-          [gt_cv_int_divbyzero_sigfpe=yes],
-          [gt_cv_int_divbyzero_sigfpe=no],
-          [
-            # Guess based on the CPU.
-changequote(,)dnl
-            case "$host_cpu" in
-              alpha* | i[34567]86 | x86_64 | m68k | s390*)
-                gt_cv_int_divbyzero_sigfpe="guessing yes";;
-              *)
-                gt_cv_int_divbyzero_sigfpe="guessing no";;
-            esac
-changequote([,])dnl
-          ])
-      fi
-    ])
-  case "$gt_cv_int_divbyzero_sigfpe" in
-    *yes) value=1;;
-    *) value=0;;
-  esac
-  AC_DEFINE_UNQUOTED([INTDIV0_RAISES_SIGFPE], [$value],
-    [Define if integer division by zero raises signal SIGFPE.])
-])
-
-# intl.m4 serial 25 (gettext-0.18.3)
-dnl Copyright (C) 1995-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2009.
-
-AC_PREREQ([2.60])
-
-dnl Checks for all prerequisites of the intl subdirectory,
-dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
-dnl            USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
-AC_DEFUN([AM_INTL_SUBDIR],
-[
-  AC_REQUIRE([AC_PROG_INSTALL])dnl
-  AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-  AC_REQUIRE([AC_PROG_CC])dnl
-  AC_REQUIRE([AC_CANONICAL_HOST])dnl
-  AC_REQUIRE([gt_GLIBC2])dnl
-  AC_REQUIRE([AC_PROG_RANLIB])dnl
-  AC_REQUIRE([gl_VISIBILITY])dnl
-  AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl
-  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl
-  AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
-  AC_REQUIRE([gt_TYPE_WINT_T])dnl
-  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
-  AC_REQUIRE([gt_TYPE_INTMAX_T])
-  AC_REQUIRE([gt_PRINTF_POSIX])
-  AC_REQUIRE([gl_GLIBC21])dnl
-  AC_REQUIRE([gl_XSIZE])dnl
-  AC_REQUIRE([gl_FCNTL_O_FLAGS])dnl
-  AC_REQUIRE([gt_INTL_MACOSX])dnl
-  AC_REQUIRE([gl_EXTERN_INLINE])dnl
-
-  dnl Support for automake's --enable-silent-rules.
-  case "$enable_silent_rules" in
-    yes) INTL_DEFAULT_VERBOSITY=0;;
-    no)  INTL_DEFAULT_VERBOSITY=1;;
-    *)   INTL_DEFAULT_VERBOSITY=1;;
-  esac
-  AC_SUBST([INTL_DEFAULT_VERBOSITY])
-
-  AC_CHECK_TYPE([ptrdiff_t], ,
-    [AC_DEFINE([ptrdiff_t], [long],
-       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
-    ])
-  AC_CHECK_HEADERS([features.h stddef.h stdlib.h string.h])
-  AC_CHECK_FUNCS([asprintf fwprintf newlocale putenv setenv setlocale \
-    snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb])
-
-  dnl Use the _snprintf function only if it is declared (because on NetBSD it
-  dnl is defined as a weak alias of snprintf; we prefer to use the latter).
-  AC_CHECK_DECLS([_snprintf, _snwprintf], , , [#include <stdio.h>])
-
-  dnl Use the *_unlocked functions only if they are declared.
-  dnl (because some of them were defined without being declared in Solaris
-  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
-  dnl on Solaris 2.5.1 to run on Solaris 2.6).
-  AC_CHECK_DECLS([getc_unlocked], , , [#include <stdio.h>])
-
-  case $gt_cv_func_printf_posix in
-    *yes) HAVE_POSIX_PRINTF=1 ;;
-    *) HAVE_POSIX_PRINTF=0 ;;
-  esac
-  AC_SUBST([HAVE_POSIX_PRINTF])
-  if test "$ac_cv_func_asprintf" = yes; then
-    HAVE_ASPRINTF=1
-  else
-    HAVE_ASPRINTF=0
-  fi
-  AC_SUBST([HAVE_ASPRINTF])
-  if test "$ac_cv_func_snprintf" = yes; then
-    HAVE_SNPRINTF=1
-  else
-    HAVE_SNPRINTF=0
-  fi
-  AC_SUBST([HAVE_SNPRINTF])
-  if test "$ac_cv_func_newlocale" = yes; then
-    HAVE_NEWLOCALE=1
-  else
-    HAVE_NEWLOCALE=0
-  fi
-  AC_SUBST([HAVE_NEWLOCALE])
-  if test "$ac_cv_func_wprintf" = yes; then
-    HAVE_WPRINTF=1
-  else
-    HAVE_WPRINTF=0
-  fi
-  AC_SUBST([HAVE_WPRINTF])
-
-  AM_LANGINFO_CODESET
-  gt_LC_MESSAGES
-
-  dnl Compilation on mingw and Cygwin needs special Makefile rules, because
-  dnl 1. when we install a shared library, we must arrange to export
-  dnl    auxiliary pointer variables for every exported variable,
-  dnl 2. when we install a shared library and a static library simultaneously,
-  dnl    the include file specifies __declspec(dllimport) and therefore we
-  dnl    must arrange to define the auxiliary pointer variables for the
-  dnl    exported variables _also_ in the static library.
-  if test "$enable_shared" = yes; then
-    case "$host_os" in
-      mingw* | cygwin*) is_woe32dll=yes ;;
-      *) is_woe32dll=no ;;
-    esac
   else
-    is_woe32dll=no
-  fi
-  WOE32DLL=$is_woe32dll
-  AC_SUBST([WOE32DLL])
-
-  dnl On mingw and Cygwin, we can activate special Makefile rules which add
-  dnl version information to the shared libraries and executables.
-  case "$host_os" in
-    mingw* | cygwin*) is_woe32=yes ;;
-    *) is_woe32=no ;;
-  esac
-  WOE32=$is_woe32
-  AC_SUBST([WOE32])
-  if test $WOE32 = yes; then
-    dnl Check for a program that compiles Windows resource files.
-    AC_CHECK_TOOL([WINDRES], [windres])
-  fi
-
-  dnl Determine whether when creating a library, "-lc" should be passed to
-  dnl libtool or not. On many platforms, it is required for the libtool option
-  dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool
-  dnl in the *.la files - makes it impossible to create multithreaded programs,
-  dnl because libtool also reorders the -lc to come before the -pthread, and
-  dnl this disables pthread_create() <http://docs.hp.com/en/1896/pthreads.html>.
-  case "$host_os" in
-    hpux*) LTLIBC="" ;;
-    *)     LTLIBC="-lc" ;;
-  esac
-  AC_SUBST([LTLIBC])
-
-  dnl Rename some macros and functions used for locking.
-  AH_BOTTOM([
-#define __libc_lock_t                   gl_lock_t
-#define __libc_lock_define              gl_lock_define
-#define __libc_lock_define_initialized  gl_lock_define_initialized
-#define __libc_lock_init                gl_lock_init
-#define __libc_lock_lock                gl_lock_lock
-#define __libc_lock_unlock              gl_lock_unlock
-#define __libc_lock_recursive_t                   gl_recursive_lock_t
-#define __libc_lock_define_recursive              gl_recursive_lock_define
-#define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
-#define __libc_lock_init_recursive                gl_recursive_lock_init
-#define __libc_lock_lock_recursive                gl_recursive_lock_lock
-#define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
-#define glthread_in_use  libintl_thread_in_use
-#define glthread_lock_init_func     libintl_lock_init_func
-#define glthread_lock_lock_func     libintl_lock_lock_func
-#define glthread_lock_unlock_func   libintl_lock_unlock_func
-#define glthread_lock_destroy_func  libintl_lock_destroy_func
-#define glthread_rwlock_init_multithreaded     libintl_rwlock_init_multithreaded
-#define glthread_rwlock_init_func              libintl_rwlock_init_func
-#define glthread_rwlock_rdlock_multithreaded   libintl_rwlock_rdlock_multithreaded
-#define glthread_rwlock_rdlock_func            libintl_rwlock_rdlock_func
-#define glthread_rwlock_wrlock_multithreaded   libintl_rwlock_wrlock_multithreaded
-#define glthread_rwlock_wrlock_func            libintl_rwlock_wrlock_func
-#define glthread_rwlock_unlock_multithreaded   libintl_rwlock_unlock_multithreaded
-#define glthread_rwlock_unlock_func            libintl_rwlock_unlock_func
-#define glthread_rwlock_destroy_multithreaded  libintl_rwlock_destroy_multithreaded
-#define glthread_rwlock_destroy_func           libintl_rwlock_destroy_func
-#define glthread_recursive_lock_init_multithreaded     libintl_recursive_lock_init_multithreaded
-#define glthread_recursive_lock_init_func              libintl_recursive_lock_init_func
-#define glthread_recursive_lock_lock_multithreaded     libintl_recursive_lock_lock_multithreaded
-#define glthread_recursive_lock_lock_func              libintl_recursive_lock_lock_func
-#define glthread_recursive_lock_unlock_multithreaded   libintl_recursive_lock_unlock_multithreaded
-#define glthread_recursive_lock_unlock_func            libintl_recursive_lock_unlock_func
-#define glthread_recursive_lock_destroy_multithreaded  libintl_recursive_lock_destroy_multithreaded
-#define glthread_recursive_lock_destroy_func           libintl_recursive_lock_destroy_func
-#define glthread_once_func            libintl_once_func
-#define glthread_once_singlethreaded  libintl_once_singlethreaded
-#define glthread_once_multithreaded   libintl_once_multithreaded
-])
-])
-
-
-dnl Checks for the core files of the intl subdirectory:
-dnl   dcigettext.c
-dnl   eval-plural.h
-dnl   explodename.c
-dnl   finddomain.c
-dnl   gettextP.h
-dnl   gmo.h
-dnl   hash-string.h hash-string.c
-dnl   l10nflist.c
-dnl   libgnuintl.h.in (except the *printf stuff)
-dnl   loadinfo.h
-dnl   loadmsgcat.c
-dnl   localealias.c
-dnl   log.c
-dnl   plural-exp.h plural-exp.c
-dnl   plural.y
-dnl Used by libglocale.
-AC_DEFUN([gt_INTL_SUBDIR_CORE],
-[
-  AC_REQUIRE([AC_C_INLINE])dnl
-  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
-  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
-  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
-  AC_REQUIRE([AC_FUNC_MMAP])dnl
-  AC_REQUIRE([gt_INTDIV0])dnl
-  AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
-  AC_REQUIRE([gt_INTTYPES_PRI])dnl
-  AC_REQUIRE([gl_LOCK])dnl
-
-  AC_LINK_IFELSE(
-    [AC_LANG_PROGRAM(
-       [[int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }]],
-       [[]])],
-    [AC_DEFINE([HAVE_BUILTIN_EXPECT], [1],
-       [Define to 1 if the compiler understands __builtin_expect.])])
-
-  AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h])
-  AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \
-    stpcpy strcasecmp strdup strtoul tsearch uselocale argz_count \
-    argz_stringify argz_next __fsetlocking])
-
-  dnl Use the *_unlocked functions only if they are declared.
-  dnl (because some of them were defined without being declared in Solaris
-  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
-  dnl on Solaris 2.5.1 to run on Solaris 2.6).
-  AC_CHECK_DECLS([feof_unlocked, fgets_unlocked], , , [#include <stdio.h>])
-
-  AM_ICONV
-
-  dnl intl/plural.c is generated from intl/plural.y. It requires bison,
-  dnl because plural.y uses bison specific features. It requires at least
-  dnl bison-1.26 because earlier versions generate a plural.c that doesn't
-  dnl compile.
-  dnl bison is only needed for the maintainer (who touches plural.y). But in
-  dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
-  dnl the rule in general Makefile. Now, some people carelessly touch the
-  dnl files or have a broken "make" program, hence the plural.c rule will
-  dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
-  dnl present or too old.
-  AC_CHECK_PROGS([INTLBISON], [bison])
-  if test -z "$INTLBISON"; then
-    ac_verc_fail=yes
-  else
-    dnl Found it, now check the version.
-    AC_MSG_CHECKING([version of bison])
-changequote(<<,>>)dnl
-    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
-    case $ac_prog_version in
-      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
-      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
-changequote([,])dnl
-         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
-      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
-    esac
-    AC_MSG_RESULT([$ac_prog_version])
-  fi
-  if test $ac_verc_fail = yes; then
-    INTLBISON=:
+    dnl When compiling GNU libiconv on a system that does not have iconv yet,
+    dnl pick the POSIX compliant declaration without 'const'.
+    am_cv_proto_iconv_arg1=""
   fi
+  AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+    [Define as const if the declaration of iconv() needs const.])
+  dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
+  m4_ifdef([gl_ICONV_H_DEFAULTS],
+    [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
+     if test -n "$am_cv_proto_iconv_arg1"; then
+       ICONV_CONST="const"
+     fi
+    ])
 ])
 
-# intlmacosx.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2004-2013 Free Software Foundation, Inc.
+# intlmacosx.m4 serial 8 (gettext-0.20.2)
+dnl Copyright (C) 2004-2014, 2016, 2019-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
 dnl License but which still want to provide support for the GNU gettext
 dnl functionality.
 dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
 dnl They are *not* in the public domain.
 
 dnl Checks for special options needed on Mac OS X.
 dnl Defines INTL_MACOSX_LIBS.
 AC_DEFUN([gt_INTL_MACOSX],
 [
-  dnl Check for API introduced in Mac OS X 10.2.
+  dnl Check for API introduced in Mac OS X 10.4.
   AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
     [gt_cv_func_CFPreferencesCopyAppValue],
     [gt_save_LIBS="$LIBS"
@@ -1376,176 +1885,39 @@ AC_DEFUN([gt_INTL_MACOSX],
     AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
       [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
   fi
-  dnl Check for API introduced in Mac OS X 10.3.
-  AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
+  dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent,
+  dnl because in macOS 10.13.4 it has the following behaviour:
+  dnl When two or more languages are specified in the
+  dnl "System Preferences > Language & Region > Preferred Languages" panel,
+  dnl it returns en_CC where CC is the territory (even when English is not among
+  dnl the preferred languages!).  What we want instead is what
+  dnl CFLocaleCopyCurrent returned in earlier macOS releases and what
+  dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the
+  dnl first among the preferred languages and CC is the territory.
+  AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages],
     [gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
      AC_LINK_IFELSE(
        [AC_LANG_PROGRAM(
           [[#include <CoreFoundation/CFLocale.h>]],
-          [[CFLocaleCopyCurrent();]])],
-       [gt_cv_func_CFLocaleCopyCurrent=yes],
-       [gt_cv_func_CFLocaleCopyCurrent=no])
+          [[CFLocaleCopyPreferredLanguages();]])],
+       [gt_cv_func_CFLocaleCopyPreferredLanguages=yes],
+       [gt_cv_func_CFLocaleCopyPreferredLanguages=no])
      LIBS="$gt_save_LIBS"])
-  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
-    AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
-      [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+  if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+    AC_DEFINE([HAVE_CFLOCALECOPYPREFERREDLANGUAGES], [1],
+      [Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework.])
   fi
   INTL_MACOSX_LIBS=
-  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes \
+     || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
     INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
   fi
   AC_SUBST([INTL_MACOSX_LIBS])
 ])
 
-# intmax.m4 serial 6 (gettext-0.18.2)
-dnl Copyright (C) 2002-2005, 2008-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-dnl Test whether the system has the 'intmax_t' type, but don't attempt to
-dnl find a replacement if it is lacking.
-
-AC_DEFUN([gt_TYPE_INTMAX_T],
-[
-  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
-  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
-  AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[
-#include <stddef.h>
-#include <stdlib.h>
-#if HAVE_STDINT_H_WITH_UINTMAX
-#include <stdint.h>
-#endif
-#if HAVE_INTTYPES_H_WITH_UINTMAX
-#include <inttypes.h>
-#endif
-          ]],
-          [[intmax_t x = -1;
-            return !x;]])],
-       [gt_cv_c_intmax_t=yes],
-       [gt_cv_c_intmax_t=no])])
-  if test $gt_cv_c_intmax_t = yes; then
-    AC_DEFINE([HAVE_INTMAX_T], [1],
-      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
-  fi
-])
-
-# inttypes-pri.m4 serial 7 (gettext-0.18.2)
-dnl Copyright (C) 1997-2002, 2006, 2008-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_PREREQ([2.53])
-
-# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
-# macros to non-string values.  This is the case on AIX 4.3.3.
-
-AC_DEFUN([gt_INTTYPES_PRI],
-[
-  AC_CHECK_HEADERS([inttypes.h])
-  if test $ac_cv_header_inttypes_h = yes; then
-    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
-      [gt_cv_inttypes_pri_broken],
-      [
-        AC_COMPILE_IFELSE(
-          [AC_LANG_PROGRAM(
-             [[
-#include <inttypes.h>
-#ifdef PRId32
-char *p = PRId32;
-#endif
-             ]],
-             [[]])],
-          [gt_cv_inttypes_pri_broken=no],
-          [gt_cv_inttypes_pri_broken=yes])
-      ])
-  fi
-  if test "$gt_cv_inttypes_pri_broken" = yes; then
-    AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1],
-      [Define if <inttypes.h> exists and defines unusable PRI* macros.])
-    PRI_MACROS_BROKEN=1
-  else
-    PRI_MACROS_BROKEN=0
-  fi
-  AC_SUBST([PRI_MACROS_BROKEN])
-])
-
-# inttypes_h.m4 serial 10
-dnl Copyright (C) 1997-2004, 2006, 2008-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
-# doesn't clash with <sys/types.h>, and declares uintmax_t.
-
-AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
-[
-  AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[
-#include <sys/types.h>
-#include <inttypes.h>
-          ]],
-          [[uintmax_t i = (uintmax_t) -1; return !i;]])],
-       [gl_cv_header_inttypes_h=yes],
-       [gl_cv_header_inttypes_h=no])])
-  if test $gl_cv_header_inttypes_h = yes; then
-    AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1],
-      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
-       and declares uintmax_t. ])
-  fi
-])
-
-# lcmessage.m4 serial 7 (gettext-0.18.2)
-dnl Copyright (C) 1995-2002, 2004-2005, 2008-2013 Free Software Foundation,
-dnl Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl   Ulrich Drepper <drepper@cygnus.com>, 1995.
-
-# Check whether LC_MESSAGES is available in <locale.h>.
-
-AC_DEFUN([gt_LC_MESSAGES],
-[
-  AC_CACHE_CHECK([for LC_MESSAGES], [gt_cv_val_LC_MESSAGES],
-    [AC_LINK_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <locale.h>]],
-          [[return LC_MESSAGES]])],
-       [gt_cv_val_LC_MESSAGES=yes],
-       [gt_cv_val_LC_MESSAGES=no])])
-  if test $gt_cv_val_LC_MESSAGES = yes; then
-    AC_DEFINE([HAVE_LC_MESSAGES], [1],
-      [Define if your <locale.h> file defines LC_MESSAGES.])
-  fi
-])
-
-# lib-ld.m4 serial 6
-dnl Copyright (C) 1996-2003, 2009-2013 Free Software Foundation, Inc.
+# lib-ld.m4 serial 9
+dnl Copyright (C) 1996-2003, 2009-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -1593,86 +1965,135 @@ if test "${PATH_SEPARATOR+set}" != set; then
        }
 fi
 
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
+if test -n "$LD"; then
+  AC_MSG_CHECKING([for ld])
+elif test "$GCC" = yes; then
   AC_MSG_CHECKING([for ld used by $CC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]]* | ?:[[\\/]]*)
-      re_direlt='/[[^/]][[^/]]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
-      while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
-        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
 elif test "$with_gnu_ld" = yes; then
   AC_MSG_CHECKING([for GNU ld])
 else
   AC_MSG_CHECKING([for non-GNU ld])
 fi
-AC_CACHE_VAL([acl_cv_path_LD],
-[if test -z "$LD"; then
-  acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$acl_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      acl_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-        test "$with_gnu_ld" != no && break
-        ;;
-      *)
-        test "$with_gnu_ld" != yes && break
-        ;;
+if test -n "$LD"; then
+  # Let the user override the test with a path.
+  :
+else
+  AC_CACHE_VAL([acl_cv_path_LD],
+  [
+    acl_cv_path_LD= # Final result of this test
+    ac_prog=ld # Program to search in $PATH
+    if test "$GCC" = yes; then
+      # Check if gcc -print-prog-name=ld gives a path.
+      case $host in
+        *-*-mingw*)
+          # gcc leaves a trailing carriage return which upsets mingw
+          acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+        *)
+          acl_output=`($CC -print-prog-name=ld) 2>&5` ;;
+      esac
+      case $acl_output in
+        # Accept absolute paths.
+        [[\\/]]* | ?:[[\\/]]*)
+          re_direlt='/[[^/]][[^/]]*/\.\./'
+          # Canonicalize the pathname of ld
+          acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'`
+          while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do
+            acl_output=`echo $acl_output | sed "s%$re_direlt%/%"`
+          done
+          # Got the pathname. No search in PATH is needed.
+          acl_cv_path_LD="$acl_output"
+          ac_prog=
+          ;;
+        "")
+          # If it fails, then pretend we aren't using GCC.
+          ;;
+        *)
+          # If it is relative, then search for the first ld in PATH.
+          with_gnu_ld=unknown
+          ;;
       esac
     fi
-  done
-  IFS="$acl_save_ifs"
-else
-  acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$acl_cv_path_LD"
+    if test -n "$ac_prog"; then
+      # Search for $ac_prog in $PATH.
+      acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+      for ac_dir in $PATH; do
+        IFS="$acl_save_ifs"
+        test -z "$ac_dir" && ac_dir=.
+        if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+          acl_cv_path_LD="$ac_dir/$ac_prog"
+          # Check to see if the program is GNU ld.  I'd rather use --version,
+          # but apparently some variants of GNU ld only accept -v.
+          # Break only if it was the GNU/non-GNU ld that we prefer.
+          case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
+            *GNU* | *'with BFD'*)
+              test "$with_gnu_ld" != no && break
+              ;;
+            *)
+              test "$with_gnu_ld" != yes && break
+              ;;
+          esac
+        fi
+      done
+      IFS="$acl_save_ifs"
+    fi
+    case $host in
+      *-*-aix*)
+        AC_COMPILE_IFELSE(
+          [AC_LANG_SOURCE(
+             [[#if defined __powerpc64__ || defined _ARCH_PPC64
+                int ok;
+               #else
+                error fail
+               #endif
+             ]])],
+          [# The compiler produces 64-bit code. Add option '-b64' so that the
+           # linker groks 64-bit object files.
+           case "$acl_cv_path_LD " in
+             *" -b64 "*) ;;
+             *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;;
+           esac
+          ], [])
+        ;;
+      sparc64-*-netbsd*)
+        AC_COMPILE_IFELSE(
+          [AC_LANG_SOURCE(
+             [[#if defined __sparcv9 || defined __arch64__
+                int ok;
+               #else
+                error fail
+               #endif
+             ]])],
+          [],
+          [# The compiler produces 32-bit code. Add option '-m elf32_sparc'
+           # so that the linker groks 32-bit object files.
+           case "$acl_cv_path_LD " in
+             *" -m elf32_sparc "*) ;;
+             *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;;
+           esac
+          ])
+        ;;
+    esac
+  ])
+  LD="$acl_cv_path_LD"
+fi
 if test -n "$LD"; then
   AC_MSG_RESULT([$LD])
 else
   AC_MSG_RESULT([no])
+  AC_MSG_ERROR([no acceptable ld found in \$PATH])
 fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
 AC_LIB_PROG_LD_GNU
 ])
 
-# lib-link.m4 serial 26 (gettext-0.18.2)
-dnl Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# lib-link.m4 serial 31
+dnl Copyright (C) 2001-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 dnl From Bruno Haible.
 
-AC_PREREQ([2.54])
+AC_PREREQ([2.61])
 
 dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
 dnl the libraries corresponding to explicit and implicit dependencies.
@@ -1790,8 +2211,8 @@ dnl   acl_hardcode_direct,
 dnl   acl_hardcode_minus_L.
 AC_DEFUN([AC_LIB_RPATH],
 [
-  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
-  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  dnl Complain if config.rpath is missing.
+  AC_REQUIRE_AUX_FILE([config.rpath])
   AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
   AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
   AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
@@ -1853,17 +2274,17 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
   pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
                                      [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
   pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
-  dnl Autoconf >= 2.61 supports dots in --with options.
-  pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)])
   dnl By default, look in $includedir and $libdir.
   use_additional=yes
   AC_LIB_WITH_FINAL_PREFIX([
     eval additional_includedir=\"$includedir\"
     eval additional_libdir=\"$libdir\"
+    eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+    eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
   ])
-  AC_ARG_WITH(P_A_C_K[-prefix],
-[[  --with-]]P_A_C_K[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib
-  --without-]]P_A_C_K[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]],
+  AC_ARG_WITH(PACK[-prefix],
+[[  --with-]]PACK[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib
+  --without-]]PACK[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]],
 [
     if test "X$withval" = "Xno"; then
       use_additional=no
@@ -1872,17 +2293,23 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
         AC_LIB_WITH_FINAL_PREFIX([
           eval additional_includedir=\"$includedir\"
           eval additional_libdir=\"$libdir\"
+          eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+          eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
         ])
       else
         additional_includedir="$withval/include"
         additional_libdir="$withval/$acl_libdirstem"
-        if test "$acl_libdirstem2" != "$acl_libdirstem" \
-           && ! test -d "$withval/$acl_libdirstem"; then
-          additional_libdir="$withval/$acl_libdirstem2"
-        fi
+        additional_libdir2="$withval/$acl_libdirstem2"
+        additional_libdir3="$withval/$acl_libdirstem3"
       fi
     fi
 ])
+  if test "X$additional_libdir2" = "X$additional_libdir"; then
+    additional_libdir2=
+  fi
+  if test "X$additional_libdir3" = "X$additional_libdir"; then
+    additional_libdir3=
+  fi
   dnl Search the library and its dependencies in $additional_libdir and
   dnl $LDFLAGS. Using breadth-first-seach.
   LIB[]NAME=
@@ -1938,48 +2365,54 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
             shrext=
           fi
           if test $use_additional = yes; then
-            dir="$additional_libdir"
-            dnl The same code as in the loop below:
-            dnl First look for a shared library.
-            if test -n "$acl_shlibext"; then
-              if test -f "$dir/$libname$shrext"; then
-                found_dir="$dir"
-                found_so="$dir/$libname$shrext"
-              else
-                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
-                  ver=`(cd "$dir" && \
-                        for f in "$libname$shrext".*; do echo "$f"; done \
-                        | sed -e "s,^$libname$shrext\\\\.,," \
-                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
-                        | sed 1q ) 2>/dev/null`
-                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
-                    found_dir="$dir"
-                    found_so="$dir/$libname$shrext.$ver"
+            for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do
+              if test "X$found_dir" = "X"; then
+                eval dir=\$$additional_libdir_variable
+                if test -n "$dir"; then
+                  dnl The same code as in the loop below:
+                  dnl First look for a shared library.
+                  if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
                   fi
-                else
-                  eval library_names=\"$acl_library_names_spec\"
-                  for f in $library_names; do
-                    if test -f "$dir/$f"; then
+                  dnl Then look for a static library.
+                  if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
                       found_dir="$dir"
-                      found_so="$dir/$f"
-                      break
+                      found_a="$dir/$libname.$acl_libext"
                     fi
-                  done
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
                 fi
               fi
-            fi
-            dnl Then look for a static library.
-            if test "X$found_dir" = "X"; then
-              if test -f "$dir/$libname.$acl_libext"; then
-                found_dir="$dir"
-                found_a="$dir/$libname.$acl_libext"
-              fi
-            fi
-            if test "X$found_dir" != "X"; then
-              if test -f "$dir/$libname.la"; then
-                found_la="$dir/$libname.la"
-              fi
-            fi
+            done
           fi
           if test "X$found_dir" = "X"; then
             for x in $LDFLAGS $LTLIB[]NAME; do
@@ -1989,7 +2422,7 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
                   dnl First look for a shared library.
                   if test -n "$acl_shlibext"; then
-                    if test -f "$dir/$libname$shrext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
                       found_dir="$dir"
                       found_so="$dir/$libname$shrext"
                     else
@@ -1999,14 +2432,14 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
                               | sed -e "s,^$libname$shrext\\\\.,," \
                               | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
                               | sed 1q ) 2>/dev/null`
-                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
                           found_dir="$dir"
                           found_so="$dir/$libname$shrext.$ver"
                         fi
                       else
                         eval library_names=\"$acl_library_names_spec\"
                         for f in $library_names; do
-                          if test -f "$dir/$f"; then
+                          if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
                             found_dir="$dir"
                             found_so="$dir/$f"
                             break
@@ -2017,7 +2450,7 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
                   fi
                   dnl Then look for a static library.
                   if test "X$found_dir" = "X"; then
-                    if test -f "$dir/$libname.$acl_libext"; then
+                    if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
                       found_dir="$dir"
                       found_a="$dir/$libname.$acl_libext"
                     fi
@@ -2043,7 +2476,8 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
               dnl standard /usr/lib.
               if test "$enable_rpath" = no \
                  || test "X$found_dir" = "X/usr/$acl_libdirstem" \
-                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then
                 dnl No hardcoding is needed.
                 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
               else
@@ -2143,6 +2577,13 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
                 fi
                 additional_includedir="$basedir/include"
                 ;;
+              */$acl_libdirstem3 | */$acl_libdirstem3/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'`
+                if test "$name" = '$1'; then
+                  LIB[]NAME[]_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
             esac
             if test "X$additional_includedir" != "X"; then
               dnl Potentially add $additional_includedir to $INCNAME.
@@ -2193,19 +2634,21 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
               for dep in $dependency_libs; do
                 case "$dep" in
                   -L*)
-                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME.
                     dnl But don't add it
                     dnl   1. if it's the standard /usr/lib,
                     dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
                     dnl   3. if it's already present in $LDFLAGS or the already
                     dnl      constructed $LIBNAME,
                     dnl   4. if it doesn't exist as a directory.
-                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
-                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+                    if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then
                       haveit=
-                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
-                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                      if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then
                         if test -n "$GCC"; then
                           case $host_os in
                             linux* | gnu* | k*bsd*-gnu) haveit=yes;;
@@ -2216,29 +2659,29 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
                         haveit=
                         for x in $LDFLAGS $LIB[]NAME; do
                           AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-                          if test "X$x" = "X-L$additional_libdir"; then
+                          if test "X$x" = "X-L$dependency_libdir"; then
                             haveit=yes
                             break
                           fi
                         done
                         if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                            dnl Really add $additional_libdir to $LIBNAME.
-                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          if test -d "$dependency_libdir"; then
+                            dnl Really add $dependency_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir"
                           fi
                         fi
                         haveit=
                         for x in $LDFLAGS $LTLIB[]NAME; do
                           AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-                          if test "X$x" = "X-L$additional_libdir"; then
+                          if test "X$x" = "X-L$dependency_libdir"; then
                             haveit=yes
                             break
                           fi
                         done
                         if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                            dnl Really add $additional_libdir to $LTLIBNAME.
-                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          if test -d "$dependency_libdir"; then
+                            dnl Really add $dependency_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir"
                           fi
                         fi
                       fi
@@ -2336,7 +2779,6 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
       LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
     done
   fi
-  popdef([P_A_C_K])
   popdef([PACKLIBS])
   popdef([PACKUP])
   popdef([PACK])
@@ -2387,7 +2829,8 @@ AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
           dir="$next"
           dnl No need to hardcode the standard /usr/lib.
           if test "X$dir" != "X/usr/$acl_libdirstem" \
-             && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+             && test "X$dir" != "X/usr/$acl_libdirstem2" \
+             && test "X$dir" != "X/usr/$acl_libdirstem3"; then
             rpathdirs="$rpathdirs $dir"
           fi
           next=
@@ -2397,7 +2840,8 @@ AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
             -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
                  dnl No need to hardcode the standard /usr/lib.
                  if test "X$dir" != "X/usr/$acl_libdirstem" \
-                    && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+                    && test "X$dir" != "X/usr/$acl_libdirstem2" \
+                    && test "X$dir" != "X/usr/$acl_libdirstem3"; then
                    rpathdirs="$rpathdirs $dir"
                  fi
                  next= ;;
@@ -2442,21 +2886,14 @@ AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
   AC_SUBST([$1])
 ])
 
-# lib-prefix.m4 serial 7 (gettext-0.18)
-dnl Copyright (C) 2001-2005, 2008-2013 Free Software Foundation, Inc.
+# lib-prefix.m4 serial 17
+dnl Copyright (C) 2001-2005, 2008-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 dnl From Bruno Haible.
 
-dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
-dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
-dnl require excessive bracketing.
-ifdef([AC_HELP_STRING],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
-[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
-
 dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
 dnl to access previously installed libraries. The basic assumption is that
 dnl a user will want packages to use other packages he previously installed
@@ -2476,9 +2913,9 @@ AC_DEFUN([AC_LIB_PREFIX],
     eval additional_includedir=\"$includedir\"
     eval additional_libdir=\"$libdir\"
   ])
-  AC_LIB_ARG_WITH([lib-prefix],
-[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
-  --without-lib-prefix    don't search for libraries in includedir and libdir],
+  AC_ARG_WITH([lib-prefix],
+[[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir]],
 [
     if test "X$withval" = "Xno"; then
       use_additional=no
@@ -2598,246 +3035,192 @@ AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
 ])
 
 dnl AC_LIB_PREPARE_MULTILIB creates
-dnl - a variable acl_libdirstem, containing the basename of the libdir, either
-dnl   "lib" or "lib64" or "lib/64",
-dnl - a variable acl_libdirstem2, as a secondary possible value for
-dnl   acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
-dnl   "lib/amd64".
+dnl - a function acl_is_expected_elfclass, that tests whether standard input
+dn;   has a 32-bit or 64-bit ELF header, depending on the host CPU ABI,
+dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing
+dnl   the basename of the libdir to try in turn, either "lib" or "lib64" or
+dnl   "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar.
 AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
 [
-  dnl There is no formal standard regarding lib and lib64.
-  dnl On glibc systems, the current practice is that on a system supporting
+  dnl There is no formal standard regarding lib, lib32, and lib64.
+  dnl On most glibc systems, the current practice is that on a system supporting
   dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
-  dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
-  dnl the compiler's default mode by looking at the compiler's library search
-  dnl path. If at least one of its elements ends in /lib64 or points to a
-  dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
-  dnl Otherwise we use the default, namely "lib".
+  dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on
+  dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go
+  dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib.
+  dnl We determine the compiler's default mode by looking at the compiler's
+  dnl library search path. If at least one of its elements ends in /lib64 or
+  dnl points to a directory whose absolute pathname ends in /lib64, we use that
+  dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default,
+  dnl namely "lib".
   dnl On Solaris systems, the current practice is that on a system supporting
   dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
   dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
   dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
-  AC_REQUIRE([AC_CANONICAL_HOST])
-  acl_libdirstem=lib
-  acl_libdirstem2=
-  case "$host_os" in
-    solaris*)
-      dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
-      dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
-      dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
-      dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
-      dnl symlink is missing, so we set acl_libdirstem2 too.
-      AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
-        [AC_EGREP_CPP([sixtyfour bits], [
-#ifdef _LP64
-sixtyfour bits
-#endif
-           ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
-        ])
-      if test $gl_cv_solaris_64bit = yes; then
-        acl_libdirstem=lib/64
-        case "$host_cpu" in
-          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
-          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
-        esac
-      fi
-      ;;
-    *)
-      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
-      if test -n "$searchpath"; then
-        acl_save_IFS="${IFS=   }"; IFS=":"
-        for searchdir in $searchpath; do
-          if test -d "$searchdir"; then
-            case "$searchdir" in
-              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
-              */../ | */.. )
-                # Better ignore directories of this form. They are misleading.
-                ;;
-              *) searchdir=`cd "$searchdir" && pwd`
-                 case "$searchdir" in
-                   */lib64 ) acl_libdirstem=lib64 ;;
-                 esac ;;
-            esac
-          fi
-        done
-        IFS="$acl_save_IFS"
-      fi
-      ;;
-  esac
-  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
-])
-
-# lock.m4 serial 13 (gettext-0.18.2)
-dnl Copyright (C) 2005-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([gl_LOCK],
-[
-  AC_REQUIRE([gl_THREADLIB])
-  if test "$gl_threads_api" = posix; then
-    # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the
-    # pthread_rwlock_* functions.
-    AC_CHECK_TYPE([pthread_rwlock_t],
-      [AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1],
-         [Define if the POSIX multithreading library has read/write locks.])],
-      [],
-      [#include <pthread.h>])
-    # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
-    AC_COMPILE_IFELSE([
-      AC_LANG_PROGRAM(
-        [[#include <pthread.h>]],
-        [[
-#if __FreeBSD__ == 4
-error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
-#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \
-       && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
-error "No, in Mac OS X < 10.7 recursive mutexes actually don't work."
-#else
-int x = (int)PTHREAD_MUTEX_RECURSIVE;
-return !x;
-#endif
-        ]])],
-      [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1],
-         [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])])
-  fi
-  gl_PREREQ_LOCK
-])
-
-# Prerequisites of lib/glthread/lock.c.
-AC_DEFUN([gl_PREREQ_LOCK], [:])
-
-# longlong.m4 serial 17
-dnl Copyright (C) 1999-2007, 2009-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-# Define HAVE_LONG_LONG_INT if 'long long int' works.
-# This fixes a bug in Autoconf 2.61, and can be faster
-# than what's in Autoconf 2.62 through 2.68.
-
-# Note: If the type 'long long int' exists but is only 32 bits large
-# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
-# defined. In this case you can treat 'long long int' like 'long int'.
-
-AC_DEFUN([AC_TYPE_LONG_LONG_INT],
-[
-  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
-  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
-     [ac_cv_type_long_long_int=yes
-      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
-        if test $ac_cv_type_long_long_int = yes; then
-          dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
-          dnl If cross compiling, assume the bug is not important, since
-          dnl nobody cross compiles for this platform as far as we know.
-          AC_RUN_IFELSE(
-            [AC_LANG_PROGRAM(
-               [[@%:@include <limits.h>
-                 @%:@ifndef LLONG_MAX
-                 @%:@ define HALF \
-                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-                 @%:@ define LLONG_MAX (HALF - 1 + HALF)
-                 @%:@endif]],
-               [[long long int n = 1;
-                 int i;
-                 for (i = 0; ; i++)
-                   {
-                     long long int m = n << i;
-                     if (m >> i != n)
-                       return 1;
-                     if (LLONG_MAX / 2 < m)
-                       break;
-                   }
-                 return 0;]])],
-            [],
-            [ac_cv_type_long_long_int=no],
-            [:])
-        fi
-      fi])
-  if test $ac_cv_type_long_long_int = yes; then
-    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
-      [Define to 1 if the system has the type 'long long int'.])
-  fi
-])
-
-# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
-# This fixes a bug in Autoconf 2.61, and can be faster
-# than what's in Autoconf 2.62 through 2.68.
-
-# Note: If the type 'unsigned long long int' exists but is only 32 bits
-# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
-# will not be defined. In this case you can treat 'unsigned long long int'
-# like 'unsigned long int'.
-
-AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
-[
-  AC_CACHE_CHECK([for unsigned long long int],
-    [ac_cv_type_unsigned_long_long_int],
-    [ac_cv_type_unsigned_long_long_int=yes
-     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-       AC_LINK_IFELSE(
-         [_AC_TYPE_LONG_LONG_SNIPPET],
-         [],
-         [ac_cv_type_unsigned_long_long_int=no])
-     fi])
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
-      [Define to 1 if the system has the type 'unsigned long long int'.])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT])
+
+  AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf],
+    [AC_EGREP_CPP([Extensible Linking Format],
+       [#ifdef __ELF__
+        Extensible Linking Format
+        #endif
+       ],
+       [gl_cv_elf=yes],
+       [gl_cv_elf=no])
+     ])
+  if test $gl_cv_elf; then
+    # Extract the ELF class of a file (5th byte) in decimal.
+    # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
+    if od -A x < /dev/null >/dev/null 2>/dev/null; then
+      # Use POSIX od.
+      func_elfclass ()
+      {
+        od -A n -t d1 -j 4 -N 1
+      }
+    else
+      # Use BSD hexdump.
+      func_elfclass ()
+      {
+        dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "'
+        echo
+      }
+    fi
+changequote(,)dnl
+    case $HOST_CPU_C_ABI_32BIT in
+      yes)
+        # 32-bit ABI.
+        acl_is_expected_elfclass ()
+        {
+          test "`func_elfclass | sed -e 's/[   ]//g'`" = 1
+        }
+        ;;
+      no)
+        # 64-bit ABI.
+        acl_is_expected_elfclass ()
+        {
+          test "`func_elfclass | sed -e 's/[   ]//g'`" = 2
+        }
+        ;;
+      *)
+        # Unknown.
+        acl_is_expected_elfclass ()
+        {
+          :
+        }
+        ;;
+    esac
+changequote([,])dnl
+  else
+    acl_is_expected_elfclass ()
+    {
+      :
+    }
   fi
-])
 
-# Expands to a C program that can be used to test for simultaneous support
-# of 'long long' and 'unsigned long long'. We don't want to say that
-# 'long long' is available if 'unsigned long long' is not, or vice versa,
-# because too many programs rely on the symmetry between signed and unsigned
-# integer types (excluding 'bool').
-AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
-[
-  AC_LANG_PROGRAM(
-    [[/* For now, do not test the preprocessor; as of 2007 there are too many
-         implementations with broken preprocessors.  Perhaps this can
-         be revisited in 2012.  In the meantime, code should not expect
-         #if to work with literals wider than 32 bits.  */
-      /* Test literals.  */
-      long long int ll = 9223372036854775807ll;
-      long long int nll = -9223372036854775807LL;
-      unsigned long long int ull = 18446744073709551615ULL;
-      /* Test constant expressions.   */
-      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                     ? 1 : -1)];
-      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                     ? 1 : -1)];
-      int i = 63;]],
-    [[/* Test availability of runtime routines for shift and division.  */
-      long long int llmax = 9223372036854775807ll;
-      unsigned long long int ullmax = 18446744073709551615ull;
-      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-              | (llmax / ll) | (llmax % ll)
-              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-              | (ullmax / ull) | (ullmax % ull));]])
+  dnl Allow the user to override the result by setting acl_cv_libdirstems.
+  AC_CACHE_CHECK([for the common suffixes of directories in the library search path],
+    [acl_cv_libdirstems],
+    [dnl Try 'lib' first, because that's the default for libdir in GNU, see
+     dnl <https://www.gnu.org/prep/standards/html_node/Directory-Variables.html>.
+     acl_libdirstem=lib
+     acl_libdirstem2=
+     acl_libdirstem3=
+     case "$host_os" in
+       solaris*)
+         dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+         dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>.
+         dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+         dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+         dnl symlink is missing, so we set acl_libdirstem2 too.
+         if test $HOST_CPU_C_ABI_32BIT = no; then
+           acl_libdirstem2=lib/64
+           case "$host_cpu" in
+             sparc*)        acl_libdirstem3=lib/sparcv9 ;;
+             i*86 | x86_64) acl_libdirstem3=lib/amd64 ;;
+           esac
+         fi
+         ;;
+       *)
+         dnl If $CC generates code for a 32-bit ABI, the libraries are
+         dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64.
+         dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries
+         dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32.
+         dnl Find the compiler's search path. However, non-system compilers
+         dnl sometimes have odd library search paths. But we can't simply invoke
+         dnl '/usr/bin/gcc -print-search-dirs' because that would not take into
+         dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS.
+         searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \
+                     | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+         if test $HOST_CPU_C_ABI_32BIT != no; then
+           # 32-bit or unknown ABI.
+           if test -d /usr/lib32; then
+             acl_libdirstem2=lib32
+           fi
+         fi
+         if test $HOST_CPU_C_ABI_32BIT != yes; then
+           # 64-bit or unknown ABI.
+           if test -d /usr/lib64; then
+             acl_libdirstem3=lib64
+           fi
+         fi
+         if test -n "$searchpath"; then
+           acl_save_IFS="${IFS=        }"; IFS=":"
+           for searchdir in $searchpath; do
+             if test -d "$searchdir"; then
+               case "$searchdir" in
+                 */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;;
+                 */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;;
+                 */../ | */.. )
+                   # Better ignore directories of this form. They are misleading.
+                   ;;
+                 *) searchdir=`cd "$searchdir" && pwd`
+                    case "$searchdir" in
+                      */lib32 ) acl_libdirstem2=lib32 ;;
+                      */lib64 ) acl_libdirstem3=lib64 ;;
+                    esac ;;
+               esac
+             fi
+           done
+           IFS="$acl_save_IFS"
+           if test $HOST_CPU_C_ABI_32BIT = yes; then
+             # 32-bit ABI.
+             acl_libdirstem3=
+           fi
+           if test $HOST_CPU_C_ABI_32BIT = no; then
+             # 64-bit ABI.
+             acl_libdirstem2=
+           fi
+         fi
+         ;;
+     esac
+     test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+     test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem"
+     acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3"
+    ])
+  dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and
+  dnl acl_libdirstem3.
+changequote(,)dnl
+  acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'`
+  acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'`
+  acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'`
+changequote([,])dnl
 ])
 
-# nls.m4 serial 5 (gettext-0.18)
-dnl Copyright (C) 1995-2003, 2005-2006, 2008-2013 Free Software Foundation,
-dnl Inc.
+# nls.m4 serial 6 (gettext-0.20.2)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016, 2019-2020 Free
+dnl Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
 dnl License but which still want to provide support for the GNU gettext
 dnl functionality.
 dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
 dnl They are *not* in the public domain.
 
 dnl Authors:
@@ -2857,32 +3240,63 @@ AC_DEFUN([AM_NLS],
   AC_SUBST([USE_NLS])
 ])
 
-# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
-# serial 1 (pkg-config-0.24)
-# 
-# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# This program 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
-# (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.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# 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.
+# pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
+# serial 12 (pkg-config-0.29.2)
 
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
+dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl     [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.2])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+    [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
 AC_DEFUN([PKG_PROG_PKG_CONFIG],
 [m4_pattern_forbid([^_?PKG_[A-Z_]+$])
 m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
@@ -2904,18 +3318,19 @@ if test -n "$PKG_CONFIG"; then
                PKG_CONFIG=""
        fi
 fi[]dnl
-])# PKG_PROG_PKG_CONFIG
+])dnl PKG_PROG_PKG_CONFIG
 
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists.  Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-# only at the first occurence in configure.ac, so if the first place
-# it's called might be skipped (such as if it is within an "if", you
-# have to call PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
 AC_DEFUN([PKG_CHECK_EXISTS],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 if test -n "$PKG_CONFIG" && \
@@ -2925,8 +3340,10 @@ m4_ifvaln([$3], [else
   $3])dnl
 fi])
 
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
 m4_define([_PKG_CONFIG],
 [if test -n "$$1"; then
     pkg_cv_[]$1="$$1"
@@ -2938,10 +3355,11 @@ m4_define([_PKG_CONFIG],
  else
     pkg_failed=untried
 fi[]dnl
-])# _PKG_CONFIG
+])dnl _PKG_CONFIG
 
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
 AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -2949,26 +3367,24 @@ if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
 else
         _pkg_short_errors_supported=no
 fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
 
 
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
 AC_DEFUN([PKG_CHECK_MODULES],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
 AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
 
 pkg_failed=no
-AC_MSG_CHECKING([for $1])
+AC_MSG_CHECKING([for $2])
 
 _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
 _PKG_CONFIG([$1][_LIBS], [libs], [$2])
@@ -2978,11 +3394,11 @@ and $1[]_LIBS to avoid the need to call pkg-config.
 See the pkg-config man page for more details.])
 
 if test $pkg_failed = yes; then
-       AC_MSG_RESULT([no])
+        AC_MSG_RESULT([no])
         _PKG_SHORT_ERRORS_SUPPORTED
         if test $_pkg_short_errors_supported = yes; then
                $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
-        else 
+        else
                $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
         fi
        # Put the nasty error message in config.log where it belongs
@@ -2999,7 +3415,7 @@ installed software in a non-standard prefix.
 _PKG_TEXT])[]dnl
         ])
 elif test $pkg_failed = untried; then
-       AC_MSG_RESULT([no])
+        AC_MSG_RESULT([no])
        m4_default([$4], [AC_MSG_FAILURE(
 [The pkg-config script could not be found or is too old.  Make sure it
 is in your PATH or set the PKG_CONFIG environment variable to the full
@@ -3015,16 +3431,40 @@ else
         AC_MSG_RESULT([yes])
        $3
 fi[]dnl
-])# PKG_CHECK_MODULES
+])dnl PKG_CHECK_MODULES
+
+
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
 
 
-# PKG_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable pkgconfigdir as the location where a module
-# should install pkg-config .pc files. By default the directory is
-# $libdir/pkgconfig, but the default can be changed by passing
-# DIRECTORY. The user can override through the --with-pkgconfigdir
-# parameter.
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
 AC_DEFUN([PKG_INSTALLDIR],
 [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
 m4_pushdef([pkg_description],
@@ -3035,16 +3475,18 @@ AC_ARG_WITH([pkgconfigdir],
 AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
 m4_popdef([pkg_default])
 m4_popdef([pkg_description])
-]) dnl PKG_INSTALLDIR
+])dnl PKG_INSTALLDIR
 
 
-# PKG_NOARCH_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable noarch_pkgconfigdir as the location where a
-# module should install arch-independent pkg-config .pc files. By
-# default the directory is $datadir/pkgconfig, but the default can be
-# changed by passing DIRECTORY. The user can override through the
-# --with-noarch-pkgconfigdir parameter.
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
 AC_DEFUN([PKG_NOARCH_INSTALLDIR],
 [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
 m4_pushdef([pkg_description],
@@ -3055,13 +3497,15 @@ AC_ARG_WITH([noarch-pkgconfigdir],
 AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
 m4_popdef([pkg_default])
 m4_popdef([pkg_description])
-]) dnl PKG_NOARCH_INSTALLDIR
+])dnl PKG_NOARCH_INSTALLDIR
 
 
-# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
-# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-# -------------------------------------------
-# Retrieves the value of the pkg-config variable for the given module.
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
 AC_DEFUN([PKG_CHECK_VAR],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
@@ -3070,21 +3514,21 @@ _PKG_CONFIG([$1], [variable="][$3]["], [$2])
 AS_VAR_COPY([$1], [pkg_cv_][$1])
 
 AS_VAR_IF([$1], [""], [$5], [$4])dnl
-])# PKG_CHECK_VAR
+])dnl PKG_CHECK_VAR
 
-# po.m4 serial 21 (gettext-0.18.3)
-dnl Copyright (C) 1995-2013 Free Software Foundation, Inc.
+# po.m4 serial 31 (gettext-0.20.2)
+dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
 dnl License but which still want to provide support for the GNU gettext
 dnl functionality.
 dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
 dnl They are *not* in the public domain.
 
 dnl Authors:
@@ -3104,7 +3548,7 @@ AC_DEFUN([AM_PO_SUBDIRS],
 
   dnl Release version of the gettext macros. This is used to ensure that
   dnl the gettext macros and po/Makefile.in.in are in sync.
-  AC_SUBST([GETTEXT_MACRO_VERSION], [0.18])
+  AC_SUBST([GETTEXT_MACRO_VERSION], [0.20])
 
   dnl Perform the following tests also if --disable-nls has been given,
   dnl because they are needed for "make dist" to work.
@@ -3120,13 +3564,6 @@ AC_DEFUN([AM_PO_SUBDIRS],
 
   dnl Test whether it is GNU msgfmt >= 0.15.
 changequote(,)dnl
-  case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
-    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
-    *) MSGFMT_015=$MSGFMT ;;
-  esac
-changequote([,])dnl
-  AC_SUBST([MSGFMT_015])
-changequote(,)dnl
   case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
     '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
     *) GMSGFMT_015=$GMSGFMT ;;
@@ -3157,11 +3594,21 @@ changequote([,])dnl
   AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
     [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
 
-  dnl Installation directories.
-  dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
-  dnl have to define it here, so that it can be used in po/Makefile.
-  test -n "$localedir" || localedir='${datadir}/locale'
-  AC_SUBST([localedir])
+  dnl Test whether it is GNU msgmerge >= 0.20.
+  if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then
+    MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt'
+  else
+    dnl Test whether it is GNU msgmerge >= 0.12.
+    if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then
+      MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet'
+    else
+      dnl With these old versions, $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) is
+      dnl slow. But this is not a big problem, as such old gettext versions are
+      dnl hardly in use any more.
+      MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet'
+    fi
+  fi
+  AC_SUBST([MSGMERGE_FOR_MSGFMT_OPTION])
 
   dnl Support for AM_XGETTEXT_OPTION.
   test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
@@ -3204,14 +3651,11 @@ changequote([,])dnl
             if test -n "$OBSOLETE_ALL_LINGUAS"; then
               test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
             fi
-            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
-            # Hide the ALL_LINGUAS assignment from automake < 1.5.
-            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
             POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
           else
             # The set of available languages was given in configure.in.
-            # Hide the ALL_LINGUAS assignment from automake < 1.5.
-            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+            ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS
           fi
           # Compute POFILES
           # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
@@ -3282,9 +3726,8 @@ changequote([,])dnl
       esac
     done]],
    [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
-    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
-    # from automake < 1.5.
-    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS.
+    OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS"
     # Capture the value of LINGUAS because we need it to compute CATALOGS.
     LINGUAS="${LINGUAS-%UNSET%}"
    ])
@@ -3385,15 +3828,13 @@ changequote([,])dnl
   fi
   if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
     # The LINGUAS file contains the set of available languages.
-    ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+    ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
     POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
   else
     # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
     sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
-    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+    ALL_LINGUAS=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
   fi
-  # Hide the ALL_LINGUAS assignment from automake < 1.5.
-  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
   # Compute POFILES
   # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
   # Compute UPDATEPOFILES
@@ -3403,9 +3844,9 @@ changequote([,])dnl
   # Compute GMOFILES
   # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
   # Compute PROPERTIESFILES
-  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).properties)
   # Compute CLASSFILES
-  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).class)
   # Compute QMFILES
   # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
   # Compute MSGFILES
@@ -3430,8 +3871,8 @@ changequote([,])dnl
     UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
     DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
     GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
-    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
-    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+    PROPERTIESFILES="$PROPERTIESFILES \$(srcdir)/\$(DOMAIN)_$lang.properties"
+    CLASSFILES="$CLASSFILES \$(srcdir)/\$(DOMAIN)_$lang.class"
     QMFILES="$QMFILES $srcdirpre$lang.qm"
     frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
     MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
@@ -3526,68 +3967,19 @@ AC_DEFUN([AM_XGETTEXT_OPTION],
   XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
 ])
 
-# printf-posix.m4 serial 6 (gettext-0.18.2)
-dnl Copyright (C) 2003, 2007, 2009-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-dnl Test whether the printf() function supports POSIX/XSI format strings with
-dnl positions.
-
-AC_DEFUN([gt_PRINTF_POSIX],
-[
-  AC_REQUIRE([AC_PROG_CC])
-  AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
-    gt_cv_func_printf_posix,
-    [
-      AC_RUN_IFELSE(
-        [AC_LANG_SOURCE([[
-#include <stdio.h>
-#include <string.h>
-/* The string "%2$d %1$d", with dollar characters protected from the shell's
-   dollar expansion (possibly an autoconf bug).  */
-static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
-static char buf[100];
-int main ()
-{
-  sprintf (buf, format, 33, 55);
-  return (strcmp (buf, "55 33") != 0);
-}]])],
-        [gt_cv_func_printf_posix=yes],
-        [gt_cv_func_printf_posix=no],
-        [
-          AC_EGREP_CPP([notposix], [
-#if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
-  notposix
-#endif
-            ],
-            [gt_cv_func_printf_posix="guessing no"],
-            [gt_cv_func_printf_posix="guessing yes"])
-        ])
-    ])
-  case $gt_cv_func_printf_posix in
-    *yes)
-      AC_DEFINE([HAVE_POSIX_PRINTF], [1],
-        [Define if your printf() function supports format strings with positions.])
-      ;;
-  esac
-])
-
-# progtest.m4 serial 7 (gettext-0.18.2)
-dnl Copyright (C) 1996-2003, 2005, 2008-2013 Free Software Foundation, Inc.
+# progtest.m4 serial 8 (gettext-0.20.2)
+dnl Copyright (C) 1996-2003, 2005, 2008-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
 dnl License but which still want to provide support for the GNU gettext
 dnl functionality.
 dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
 dnl They are *not* in the public domain.
 
 dnl Authors:
@@ -3667,664 +4059,4 @@ fi
 AC_SUBST([$1])dnl
 ])
 
-# size_max.m4 serial 10
-dnl Copyright (C) 2003, 2005-2006, 2008-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([gl_SIZE_MAX],
-[
-  AC_CHECK_HEADERS([stdint.h])
-  dnl First test whether the system already has SIZE_MAX.
-  AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [
-    gl_cv_size_max=
-    AC_EGREP_CPP([Found it], [
-#include <limits.h>
-#if HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#ifdef SIZE_MAX
-Found it
-#endif
-], [gl_cv_size_max=yes])
-    if test -z "$gl_cv_size_max"; then
-      dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
-      dnl than the type 'unsigned long'. Try hard to find a definition that can
-      dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
-      AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1],
-        [#include <stddef.h>
-#include <limits.h>], [size_t_bits_minus_1=])
-      AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)],
-        [#include <stddef.h>], [fits_in_uint=])
-      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
-        if test $fits_in_uint = 1; then
-          dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
-          dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
-          AC_COMPILE_IFELSE(
-            [AC_LANG_PROGRAM(
-               [[#include <stddef.h>
-                 extern size_t foo;
-                 extern unsigned long foo;
-               ]],
-               [[]])],
-            [fits_in_uint=0])
-        fi
-        dnl We cannot use 'expr' to simplify this expression, because 'expr'
-        dnl works only with 'long' integers in the host environment, while we
-        dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
-        if test $fits_in_uint = 1; then
-          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
-        else
-          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
-        fi
-      else
-        dnl Shouldn't happen, but who knows...
-        gl_cv_size_max='((size_t)~(size_t)0)'
-      fi
-    fi
-  ])
-  if test "$gl_cv_size_max" != yes; then
-    AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
-      [Define as the maximum value of type 'size_t', if the system doesn't define it.])
-  fi
-  dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after
-  dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with
-  dnl #define by AC_DEFINE_UNQUOTED.
-  AH_VERBATIM([SIZE_MAX],
-[/* Define as the maximum value of type 'size_t', if the system doesn't define
-   it. */
-#ifndef SIZE_MAX
-# undef SIZE_MAX
-#endif])
-])
-
-dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
-dnl Remove this when we can assume autoconf >= 2.61.
-m4_ifdef([AC_COMPUTE_INT], [], [
-  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
-])
-
-# stdint_h.m4 serial 9
-dnl Copyright (C) 1997-2004, 2006, 2008-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
-# doesn't clash with <sys/types.h>, and declares uintmax_t.
-
-AC_DEFUN([gl_AC_HEADER_STDINT_H],
-[
-  AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <sys/types.h>
-            #include <stdint.h>]],
-          [[uintmax_t i = (uintmax_t) -1; return !i;]])],
-       [gl_cv_header_stdint_h=yes],
-       [gl_cv_header_stdint_h=no])])
-  if test $gl_cv_header_stdint_h = yes; then
-    AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1],
-      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
-       and declares uintmax_t. ])
-  fi
-])
-
-# threadlib.m4 serial 10 (gettext-0.18.2)
-dnl Copyright (C) 2005-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-dnl gl_THREADLIB
-dnl ------------
-dnl Tests for a multithreading library to be used.
-dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO
-dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the
-dnl default is 'no', otherwise it is system dependent. In both cases, the user
-dnl can change the choice through the options --enable-threads=choice or
-dnl --disable-threads.
-dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS,
-dnl USE_PTH_THREADS, USE_WINDOWS_THREADS
-dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use
-dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with
-dnl libtool).
-dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for
-dnl programs that really need multithread functionality. The difference
-dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak
-dnl symbols, typically LIBTHREAD="" whereas LIBMULTITHREAD="-lpthread".
-dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
-dnl multithread-safe programs.
-
-AC_DEFUN([gl_THREADLIB_EARLY],
-[
-  AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
-])
-
-dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once.
-
-AC_DEFUN([gl_THREADLIB_EARLY_BODY],
-[
-  dnl Ordering constraints: This macro modifies CPPFLAGS in a way that
-  dnl influences the result of the autoconf tests that test for *_unlocked
-  dnl declarations, on AIX 5 at least. Therefore it must come early.
-  AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl
-  AC_BEFORE([$0], [gl_ARGP])dnl
-
-  AC_REQUIRE([AC_CANONICAL_HOST])
-  dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems.
-  dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
-  dnl AC_GNU_SOURCE.
-  m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
-    [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
-    [AC_REQUIRE([AC_GNU_SOURCE])])
-  dnl Check for multithreading.
-  m4_ifdef([gl_THREADLIB_DEFAULT_NO],
-    [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])],
-    [m4_divert_text([DEFAULTS], [gl_use_threads_default=])])
-  AC_ARG_ENABLE([threads],
-AC_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [
-AC_HELP_STRING([--disable-threads], [build without multithread safety])]),
-    [gl_use_threads=$enableval],
-    [if test -n "$gl_use_threads_default"; then
-       gl_use_threads="$gl_use_threads_default"
-     else
-changequote(,)dnl
-       case "$host_os" in
-         dnl Disable multithreading by default on OSF/1, because it interferes
-         dnl with fork()/exec(): When msgexec is linked with -lpthread, its
-         dnl child process gets an endless segmentation fault inside execvp().
-         dnl Disable multithreading by default on Cygwin 1.5.x, because it has
-         dnl bugs that lead to endless loops or crashes. See
-         dnl <http://cygwin.com/ml/cygwin/2009-08/msg00283.html>.
-         osf*) gl_use_threads=no ;;
-         cygwin*)
-               case `uname -r` in
-                 1.[0-5].*) gl_use_threads=no ;;
-                 *)         gl_use_threads=yes ;;
-               esac
-               ;;
-         *)    gl_use_threads=yes ;;
-       esac
-changequote([,])dnl
-     fi
-    ])
-  if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
-    # For using <pthread.h>:
-    case "$host_os" in
-      osf*)
-        # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
-        # groks <pthread.h>. cc also understands the flag -pthread, but
-        # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
-        # 2. putting a flag into CPPFLAGS that has an effect on the linker
-        # causes the AC_LINK_IFELSE test below to succeed unexpectedly,
-        # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
-        CPPFLAGS="$CPPFLAGS -D_REENTRANT"
-        ;;
-    esac
-    # Some systems optimize for single-threaded programs by default, and
-    # need special flags to disable these optimizations. For example, the
-    # definition of 'errno' in <errno.h>.
-    case "$host_os" in
-      aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
-      solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
-    esac
-  fi
-])
-
-dnl The guts of gl_THREADLIB. Needs to be expanded only once.
-
-AC_DEFUN([gl_THREADLIB_BODY],
-[
-  AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
-  gl_threads_api=none
-  LIBTHREAD=
-  LTLIBTHREAD=
-  LIBMULTITHREAD=
-  LTLIBMULTITHREAD=
-  if test "$gl_use_threads" != no; then
-    dnl Check whether the compiler and linker support weak declarations.
-    AC_CACHE_CHECK([whether imported symbols can be declared weak],
-      [gl_cv_have_weak],
-      [gl_cv_have_weak=no
-       dnl First, test whether the compiler accepts it syntactically.
-       AC_LINK_IFELSE(
-         [AC_LANG_PROGRAM(
-            [[extern void xyzzy ();
-#pragma weak xyzzy]],
-            [[xyzzy();]])],
-         [gl_cv_have_weak=maybe])
-       if test $gl_cv_have_weak = maybe; then
-         dnl Second, test whether it actually works. On Cygwin 1.7.2, with
-         dnl gcc 4.3, symbols declared weak always evaluate to the address 0.
-         AC_RUN_IFELSE(
-           [AC_LANG_SOURCE([[
-#include <stdio.h>
-#pragma weak fputs
-int main ()
-{
-  return (fputs == NULL);
-}]])],
-           [gl_cv_have_weak=yes],
-           [gl_cv_have_weak=no],
-           [dnl When cross-compiling, assume that only ELF platforms support
-            dnl weak symbols.
-            AC_EGREP_CPP([Extensible Linking Format],
-              [#ifdef __ELF__
-               Extensible Linking Format
-               #endif
-              ],
-              [gl_cv_have_weak="guessing yes"],
-              [gl_cv_have_weak="guessing no"])
-           ])
-       fi
-      ])
-    if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
-      # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
-      # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY.
-      AC_CHECK_HEADER([pthread.h],
-        [gl_have_pthread_h=yes], [gl_have_pthread_h=no])
-      if test "$gl_have_pthread_h" = yes; then
-        # Other possible tests:
-        #   -lpthreads (FSU threads, PCthreads)
-        #   -lgthreads
-        gl_have_pthread=
-        # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
-        # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
-        # the second one only in libpthread, and lock.c needs it.
-        AC_LINK_IFELSE(
-          [AC_LANG_PROGRAM(
-             [[#include <pthread.h>]],
-             [[pthread_mutex_lock((pthread_mutex_t*)0);
-               pthread_mutexattr_init((pthread_mutexattr_t*)0);]])],
-          [gl_have_pthread=yes])
-        # Test for libpthread by looking for pthread_kill. (Not pthread_self,
-        # since it is defined as a macro on OSF/1.)
-        if test -n "$gl_have_pthread"; then
-          # The program links fine without libpthread. But it may actually
-          # need to link with libpthread in order to create multiple threads.
-          AC_CHECK_LIB([pthread], [pthread_kill],
-            [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
-             # On Solaris and HP-UX, most pthread functions exist also in libc.
-             # Therefore pthread_in_use() needs to actually try to create a
-             # thread: pthread_create from libc will fail, whereas
-             # pthread_create will actually create a thread.
-             case "$host_os" in
-               solaris* | hpux*)
-                 AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1],
-                   [Define if the pthread_in_use() detection is hard.])
-             esac
-            ])
-        else
-          # Some library is needed. Try libpthread and libc_r.
-          AC_CHECK_LIB([pthread], [pthread_kill],
-            [gl_have_pthread=yes
-             LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread
-             LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread])
-          if test -z "$gl_have_pthread"; then
-            # For FreeBSD 4.
-            AC_CHECK_LIB([c_r], [pthread_kill],
-              [gl_have_pthread=yes
-               LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r
-               LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r])
-          fi
-        fi
-        if test -n "$gl_have_pthread"; then
-          gl_threads_api=posix
-          AC_DEFINE([USE_POSIX_THREADS], [1],
-            [Define if the POSIX multithreading library can be used.])
-          if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
-            if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
-              AC_DEFINE([USE_POSIX_THREADS_WEAK], [1],
-                [Define if references to the POSIX multithreading library should be made weak.])
-              LIBTHREAD=
-              LTLIBTHREAD=
-            fi
-          fi
-        fi
-      fi
-    fi
-    if test -z "$gl_have_pthread"; then
-      if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then
-        gl_have_solaristhread=
-        gl_save_LIBS="$LIBS"
-        LIBS="$LIBS -lthread"
-        AC_LINK_IFELSE(
-          [AC_LANG_PROGRAM(
-             [[
-#include <thread.h>
-#include <synch.h>
-             ]],
-             [[thr_self();]])],
-          [gl_have_solaristhread=yes])
-        LIBS="$gl_save_LIBS"
-        if test -n "$gl_have_solaristhread"; then
-          gl_threads_api=solaris
-          LIBTHREAD=-lthread
-          LTLIBTHREAD=-lthread
-          LIBMULTITHREAD="$LIBTHREAD"
-          LTLIBMULTITHREAD="$LTLIBTHREAD"
-          AC_DEFINE([USE_SOLARIS_THREADS], [1],
-            [Define if the old Solaris multithreading library can be used.])
-          if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
-            AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1],
-              [Define if references to the old Solaris multithreading library should be made weak.])
-            LIBTHREAD=
-            LTLIBTHREAD=
-          fi
-        fi
-      fi
-    fi
-    if test "$gl_use_threads" = pth; then
-      gl_save_CPPFLAGS="$CPPFLAGS"
-      AC_LIB_LINKFLAGS([pth])
-      gl_have_pth=
-      gl_save_LIBS="$LIBS"
-      LIBS="$LIBS $LIBPTH"
-      AC_LINK_IFELSE(
-        [AC_LANG_PROGRAM([[#include <pth.h>]], [[pth_self();]])],
-        [gl_have_pth=yes])
-      LIBS="$gl_save_LIBS"
-      if test -n "$gl_have_pth"; then
-        gl_threads_api=pth
-        LIBTHREAD="$LIBPTH"
-        LTLIBTHREAD="$LTLIBPTH"
-        LIBMULTITHREAD="$LIBTHREAD"
-        LTLIBMULTITHREAD="$LTLIBTHREAD"
-        AC_DEFINE([USE_PTH_THREADS], [1],
-          [Define if the GNU Pth multithreading library can be used.])
-        if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
-          if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
-            AC_DEFINE([USE_PTH_THREADS_WEAK], [1],
-              [Define if references to the GNU Pth multithreading library should be made weak.])
-            LIBTHREAD=
-            LTLIBTHREAD=
-          fi
-        fi
-      else
-        CPPFLAGS="$gl_save_CPPFLAGS"
-      fi
-    fi
-    if test -z "$gl_have_pthread"; then
-      case "$gl_use_threads" in
-        yes | windows | win32) # The 'win32' is for backward compatibility.
-          if { case "$host_os" in
-                 mingw*) true;;
-                 *) false;;
-               esac
-             }; then
-            gl_threads_api=windows
-            AC_DEFINE([USE_WINDOWS_THREADS], [1],
-              [Define if the native Windows multithreading API can be used.])
-          fi
-          ;;
-      esac
-    fi
-  fi
-  AC_MSG_CHECKING([for multithread API to use])
-  AC_MSG_RESULT([$gl_threads_api])
-  AC_SUBST([LIBTHREAD])
-  AC_SUBST([LTLIBTHREAD])
-  AC_SUBST([LIBMULTITHREAD])
-  AC_SUBST([LTLIBMULTITHREAD])
-])
-
-AC_DEFUN([gl_THREADLIB],
-[
-  AC_REQUIRE([gl_THREADLIB_EARLY])
-  AC_REQUIRE([gl_THREADLIB_BODY])
-])
-
-
-dnl gl_DISABLE_THREADS
-dnl ------------------
-dnl Sets the gl_THREADLIB default so that threads are not used by default.
-dnl The user can still override it at installation time, by using the
-dnl configure option '--enable-threads'.
-
-AC_DEFUN([gl_DISABLE_THREADS], [
-  m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no])
-])
-
-
-dnl Survey of platforms:
-dnl
-dnl Platform           Available  Compiler    Supports   test-lock
-dnl                    flavours   option      weak       result
-dnl ---------------    ---------  ---------   --------   ---------
-dnl Linux 2.4/glibc    posix      -lpthread       Y      OK
-dnl
-dnl GNU Hurd/glibc     posix
-dnl
-dnl FreeBSD 5.3        posix      -lc_r           Y
-dnl                    posix      -lkse ?         Y
-dnl                    posix      -lpthread ?     Y
-dnl                    posix      -lthr           Y
-dnl
-dnl FreeBSD 5.2        posix      -lc_r           Y
-dnl                    posix      -lkse           Y
-dnl                    posix      -lthr           Y
-dnl
-dnl FreeBSD 4.0,4.10   posix      -lc_r           Y      OK
-dnl
-dnl NetBSD 1.6         --
-dnl
-dnl OpenBSD 3.4        posix      -lpthread       Y      OK
-dnl
-dnl Mac OS X 10.[123]  posix      -lpthread       Y      OK
-dnl
-dnl Solaris 7,8,9      posix      -lpthread       Y      Sol 7,8: 0.0; Sol 9: OK
-dnl                    solaris    -lthread        Y      Sol 7,8: 0.0; Sol 9: OK
-dnl
-dnl HP-UX 11           posix      -lpthread       N (cc) OK
-dnl                                               Y (gcc)
-dnl
-dnl IRIX 6.5           posix      -lpthread       Y      0.5
-dnl
-dnl AIX 4.3,5.1        posix      -lpthread       N      AIX 4: 0.5; AIX 5: OK
-dnl
-dnl OSF/1 4.0,5.1      posix      -pthread (cc)   N      OK
-dnl                               -lpthread (gcc) Y
-dnl
-dnl Cygwin             posix      -lpthread       Y      OK
-dnl
-dnl Any of the above   pth        -lpth                  0.0
-dnl
-dnl Mingw              windows                    N      OK
-dnl
-dnl BeOS 5             --
-dnl
-dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is
-dnl turned off:
-dnl   OK if all three tests terminate OK,
-dnl   0.5 if the first test terminates OK but the second one loops endlessly,
-dnl   0.0 if the first test already loops endlessly.
-
-# uintmax_t.m4 serial 12
-dnl Copyright (C) 1997-2004, 2007-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-AC_PREREQ([2.13])
-
-# Define uintmax_t to 'unsigned long' or 'unsigned long long'
-# if it is not already defined in <stdint.h> or <inttypes.h>.
-
-AC_DEFUN([gl_AC_TYPE_UINTMAX_T],
-[
-  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
-  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
-  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
-    AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
-    test $ac_cv_type_unsigned_long_long_int = yes \
-      && ac_type='unsigned long long' \
-      || ac_type='unsigned long'
-    AC_DEFINE_UNQUOTED([uintmax_t], [$ac_type],
-      [Define to unsigned long or unsigned long long
-       if <stdint.h> and <inttypes.h> don't define.])
-  else
-    AC_DEFINE([HAVE_UINTMAX_T], [1],
-      [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
-  fi
-])
-
-# visibility.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2005, 2008, 2010-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-dnl Tests whether the compiler supports the command-line option
-dnl -fvisibility=hidden and the function and variable attributes
-dnl __attribute__((__visibility__("hidden"))) and
-dnl __attribute__((__visibility__("default"))).
-dnl Does *not* test for __visibility__("protected") - which has tricky
-dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
-dnl Mac OS X.
-dnl Does *not* test for __visibility__("internal") - which has processor
-dnl dependent semantics.
-dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
-dnl "really only recommended for legacy code".
-dnl Set the variable CFLAG_VISIBILITY.
-dnl Defines and sets the variable HAVE_VISIBILITY.
-
-AC_DEFUN([gl_VISIBILITY],
-[
-  AC_REQUIRE([AC_PROG_CC])
-  CFLAG_VISIBILITY=
-  HAVE_VISIBILITY=0
-  if test -n "$GCC"; then
-    dnl First, check whether -Werror can be added to the command line, or
-    dnl whether it leads to an error because of some other option that the
-    dnl user has put into $CC $CFLAGS $CPPFLAGS.
-    AC_MSG_CHECKING([whether the -Werror option is usable])
-    AC_CACHE_VAL([gl_cv_cc_vis_werror], [
-      gl_save_CFLAGS="$CFLAGS"
-      CFLAGS="$CFLAGS -Werror"
-      AC_COMPILE_IFELSE(
-        [AC_LANG_PROGRAM([[]], [[]])],
-        [gl_cv_cc_vis_werror=yes],
-        [gl_cv_cc_vis_werror=no])
-      CFLAGS="$gl_save_CFLAGS"])
-    AC_MSG_RESULT([$gl_cv_cc_vis_werror])
-    dnl Now check whether visibility declarations are supported.
-    AC_MSG_CHECKING([for simple visibility declarations])
-    AC_CACHE_VAL([gl_cv_cc_visibility], [
-      gl_save_CFLAGS="$CFLAGS"
-      CFLAGS="$CFLAGS -fvisibility=hidden"
-      dnl We use the option -Werror and a function dummyfunc, because on some
-      dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning
-      dnl "visibility attribute not supported in this configuration; ignored"
-      dnl at the first function definition in every compilation unit, and we
-      dnl don't want to use the option in this case.
-      if test $gl_cv_cc_vis_werror = yes; then
-        CFLAGS="$CFLAGS -Werror"
-      fi
-      AC_COMPILE_IFELSE(
-        [AC_LANG_PROGRAM(
-           [[extern __attribute__((__visibility__("hidden"))) int hiddenvar;
-             extern __attribute__((__visibility__("default"))) int exportedvar;
-             extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
-             extern __attribute__((__visibility__("default"))) int exportedfunc (void);
-             void dummyfunc (void) {}
-           ]],
-           [[]])],
-        [gl_cv_cc_visibility=yes],
-        [gl_cv_cc_visibility=no])
-      CFLAGS="$gl_save_CFLAGS"])
-    AC_MSG_RESULT([$gl_cv_cc_visibility])
-    if test $gl_cv_cc_visibility = yes; then
-      CFLAG_VISIBILITY="-fvisibility=hidden"
-      HAVE_VISIBILITY=1
-    fi
-  fi
-  AC_SUBST([CFLAG_VISIBILITY])
-  AC_SUBST([HAVE_VISIBILITY])
-  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
-    [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])
-])
-
-# wchar_t.m4 serial 4 (gettext-0.18.2)
-dnl Copyright (C) 2002-2003, 2008-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-dnl Test whether <stddef.h> has the 'wchar_t' type.
-dnl Prerequisite: AC_PROG_CC
-
-AC_DEFUN([gt_TYPE_WCHAR_T],
-[
-  AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <stddef.h>
-            wchar_t foo = (wchar_t)'\0';]],
-          [[]])],
-       [gt_cv_c_wchar_t=yes],
-       [gt_cv_c_wchar_t=no])])
-  if test $gt_cv_c_wchar_t = yes; then
-    AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
-  fi
-])
-
-# wint_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2003, 2007-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-dnl Test whether <wchar.h> has the 'wint_t' type.
-dnl Prerequisite: AC_PROG_CC
-
-AC_DEFUN([gt_TYPE_WINT_T],
-[
-  AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-            wint_t foo = (wchar_t)'\0';]],
-          [[]])],
-       [gt_cv_c_wint_t=yes],
-       [gt_cv_c_wint_t=no])])
-  if test $gt_cv_c_wint_t = yes; then
-    AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
-  fi
-])
-
-# xsize.m4 serial 5
-dnl Copyright (C) 2003-2004, 2008-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_XSIZE],
-[
-  dnl Prerequisites of lib/xsize.h.
-  AC_REQUIRE([gl_SIZE_MAX])
-  AC_CHECK_HEADERS([stdint.h])
-])
-
 m4_include([acinclude.m4])
index c4bd827..45001cf 100755 (executable)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2016 Free Software Foundation, Inc.
+#   Copyright 1992-2020 Free Software Foundation, Inc.
 
-timestamp='2016-05-15'
+timestamp='2020-01-01'
 
 # 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
@@ -15,7 +15,7 @@ timestamp='2016-05-15'
 # 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/>.
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -27,7 +27,7 @@ timestamp='2016-05-15'
 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # 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
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 #
 # Please send patches to <config-patches@gnu.org>.
 
@@ -39,7 +39,7 @@ Usage: $0 [OPTION]
 
 Output the configuration name of the system \`$me' is run on.
 
-Operation modes:
+Options:
   -h, --help         print this help, then exit
   -t, --time-stamp   print date of last modification, then exit
   -v, --version      print version number, then exit
@@ -50,7 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2016 Free Software Foundation, Inc.
+Copyright 1992-2020 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."
@@ -84,8 +84,6 @@ if test $# != 0; then
   exit 1
 fi
 
-trap 'exit 1' 1 2 15
-
 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
 # compiler to aid in system detection is discouraged as it requires
 # temporary files to be created and, as you can see below, it is a
@@ -96,34 +94,40 @@ trap 'exit 1' 1 2 15
 
 # Portable tmp directory creation inspired by the Autoconf team.
 
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-       for c in cc gcc c89 c99 ; do
-         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-            CC_FOR_BUILD="$c"; break ;
-         fi ;
-       done ;
-       if test x"$CC_FOR_BUILD" = x ; then
-         CC_FOR_BUILD=no_compiler_found ;
-       fi
-       ;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
+
+set_cc_for_build() {
+    # prevent multiple calls if $tmp is already set
+    test "$tmp" && return 0
+    : "${TMPDIR=/tmp}"
+    # shellcheck disable=SC2039
+    { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+       { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
+       { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+       { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+    dummy=$tmp/dummy
+    case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+       ,,)    echo "int x;" > "$dummy.c"
+              for driver in cc gcc c89 c99 ; do
+                  if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+                      CC_FOR_BUILD="$driver"
+                      break
+                  fi
+              done
+              if test x"$CC_FOR_BUILD" = x ; then
+                  CC_FOR_BUILD=no_compiler_found
+              fi
+              ;;
+       ,,*)   CC_FOR_BUILD=$CC ;;
+       ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+    esac
+}
 
 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
 # (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+if test -f /.attbin/uname ; then
        PATH=$PATH:/.attbin ; export PATH
 fi
 
@@ -132,14 +136,14 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-case "${UNAME_SYSTEM}" in
+case "$UNAME_SYSTEM" in
 Linux|GNU|GNU/*)
        # If the system lacks a compiler, then just pick glibc.
        # We could probably try harder.
        LIBC=gnu
 
-       eval $set_cc_for_build
-       cat <<-EOF > $dummy.c
+       set_cc_for_build
+       cat <<-EOF > "$dummy.c"
        #include <features.h>
        #if defined(__UCLIBC__)
        LIBC=uclibc
@@ -149,13 +153,20 @@ Linux|GNU|GNU/*)
        LIBC=gnu
        #endif
        EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+       eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+
+       # If ldd exists, use it to detect musl libc.
+       if command -v ldd >/dev/null && \
+               ldd --version 2>&1 | grep -q ^musl
+       then
+           LIBC=musl
+       fi
        ;;
 esac
 
 # Note: order is significant - the case branches are not exclusive.
 
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
     *:NetBSD:*:*)
        # NetBSD (nbsd) targets should (where applicable) match one or
        # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
@@ -169,30 +180,30 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # portion of the name.  We always set it to "unknown".
        sysctl="sysctl -n hw.machine_arch"
        UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
-           /sbin/$sysctl 2>/dev/null || \
-           /usr/sbin/$sysctl 2>/dev/null || \
+           "/sbin/$sysctl" 2>/dev/null || \
+           "/usr/sbin/$sysctl" 2>/dev/null || \
            echo unknown)`
-       case "${UNAME_MACHINE_ARCH}" in
+       case "$UNAME_MACHINE_ARCH" in
            armeb) machine=armeb-unknown ;;
            arm*) machine=arm-unknown ;;
            sh3el) machine=shl-unknown ;;
            sh3eb) machine=sh-unknown ;;
            sh5el) machine=sh5le-unknown ;;
            earmv*)
-               arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
-               endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
-               machine=${arch}${endian}-unknown
+               arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+               endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+               machine="${arch}${endian}"-unknown
                ;;
-           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+           *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
        esac
        # The Operating System including object format, if it has switched
        # to ELF recently (or will in the future) and ABI.
-       case "${UNAME_MACHINE_ARCH}" in
+       case "$UNAME_MACHINE_ARCH" in
            earm*)
                os=netbsdelf
                ;;
            arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-               eval $set_cc_for_build
+               set_cc_for_build
                if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
                        | grep -q __ELF__
                then
@@ -208,10 +219,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                ;;
        esac
        # Determine ABI tags.
-       case "${UNAME_MACHINE_ARCH}" in
+       case "$UNAME_MACHINE_ARCH" in
            earm*)
                expr='s/^earmv[0-9]/-eabi/;s/eb$//'
-               abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+               abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
                ;;
        esac
        # The OS release
@@ -219,45 +230,60 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # thus, need a distinct triplet. However, they do not need
        # kernel version information, so it can be replaced with a
        # suitable tag, in the style of linux-gnu.
-       case "${UNAME_VERSION}" in
+       case "$UNAME_VERSION" in
            Debian*)
                release='-gnu'
                ;;
            *)
-               release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
+               release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
                ;;
        esac
        # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
        # contains redundant information, the shorter form:
        # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-       echo "${machine}-${os}${release}${abi}"
+       echo "$machine-${os}${release}${abi-}"
        exit ;;
     *:Bitrig:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+       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}
+       echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
        exit ;;
     *:LibertyBSD:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+       echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
+       exit ;;
+    *:MidnightBSD:*:*)
+       echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
        exit ;;
     *:ekkoBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
        exit ;;
     *:SolidBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
+       exit ;;
+    *:OS108:*:*)
+       echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
        exit ;;
     macppc:MirBSD:*:*)
-       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+       echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
        exit ;;
     *:MirBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
        exit ;;
     *:Sortix:*:*)
-       echo ${UNAME_MACHINE}-unknown-sortix
+       echo "$UNAME_MACHINE"-unknown-sortix
+       exit ;;
+    *:Twizzler:*:*)
+       echo "$UNAME_MACHINE"-unknown-twizzler
+       exit ;;
+    *:Redox:*:*)
+       echo "$UNAME_MACHINE"-unknown-redox
+       exit ;;
+    mips:OSF1:*.*)
+       echo mips-dec-osf1
        exit ;;
     alpha:OSF1:*:*)
        case $UNAME_RELEASE in
@@ -310,28 +336,19 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # A Tn.n version is a released field test version.
        # A Xn.n version is an unreleased experimental baselevel.
        # 1.2 uses "1.2" for uname -r.
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+       echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
        # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
        exitcode=$?
        trap '' 0
        exit $exitcode ;;
-    Alpha\ *:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # Should we change UNAME_MACHINE based on the output of uname instead
-       # of the specific Alpha model?
-       echo alpha-pc-interix
-       exit ;;
-    21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
-       exit ;;
     Amiga*:UNIX_System_V:4.0:*)
        echo m68k-unknown-sysv4
        exit ;;
     *:[Aa]miga[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-amigaos
+       echo "$UNAME_MACHINE"-unknown-amigaos
        exit ;;
     *:[Mm]orph[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-morphos
+       echo "$UNAME_MACHINE"-unknown-morphos
        exit ;;
     *:OS/390:*:*)
        echo i370-ibm-openedition
@@ -343,7 +360,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        echo powerpc-ibm-os400
        exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-       echo arm-acorn-riscix${UNAME_RELEASE}
+       echo arm-acorn-riscix"$UNAME_RELEASE"
        exit ;;
     arm*:riscos:*:*|arm*:RISCOS:*:*)
        echo arm-unknown-riscos
@@ -370,19 +387,19 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
            sparc) echo sparc-icl-nx7; exit ;;
        esac ;;
     s390x:SunOS:*:*)
-       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
        exit ;;
     sun4H:SunOS:5.*:*)
-       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
        exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
        exit ;;
     i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-       echo i386-pc-auroraux${UNAME_RELEASE}
+       echo i386-pc-auroraux"$UNAME_RELEASE"
        exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-       eval $set_cc_for_build
+       set_cc_for_build
        SUN_ARCH=i386
        # If there is a compiler, see if it is configured for 64-bit objects.
        # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
@@ -395,13 +412,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                SUN_ARCH=x86_64
            fi
        fi
-       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
        exit ;;
     sun4*:SunOS:6*:*)
        # According to config.sub, this is the proper way to canonicalize
        # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
        # it's likely to be more like Solaris than SunOS4.
-       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
        exit ;;
     sun4*:SunOS:*:*)
        case "`/usr/bin/arch -k`" in
@@ -410,25 +427,25 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                ;;
        esac
        # Japanese Language versions have a version number like `4.1.3-JL'.
-       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
        exit ;;
     sun3*:SunOS:*:*)
-       echo m68k-sun-sunos${UNAME_RELEASE}
+       echo m68k-sun-sunos"$UNAME_RELEASE"
        exit ;;
     sun*:*:4.2BSD:*)
        UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-       test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
+       test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
        case "`/bin/arch`" in
            sun3)
-               echo m68k-sun-sunos${UNAME_RELEASE}
+               echo m68k-sun-sunos"$UNAME_RELEASE"
                ;;
            sun4)
-               echo sparc-sun-sunos${UNAME_RELEASE}
+               echo sparc-sun-sunos"$UNAME_RELEASE"
                ;;
        esac
        exit ;;
     aushp:SunOS:*:*)
-       echo sparc-auspex-sunos${UNAME_RELEASE}
+       echo sparc-auspex-sunos"$UNAME_RELEASE"
        exit ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
@@ -439,44 +456,44 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint"$UNAME_RELEASE"
        exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint"$UNAME_RELEASE"
        exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint"$UNAME_RELEASE"
        exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-       echo m68k-milan-mint${UNAME_RELEASE}
+       echo m68k-milan-mint"$UNAME_RELEASE"
        exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-       echo m68k-hades-mint${UNAME_RELEASE}
+       echo m68k-hades-mint"$UNAME_RELEASE"
        exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-       echo m68k-unknown-mint${UNAME_RELEASE}
+       echo m68k-unknown-mint"$UNAME_RELEASE"
        exit ;;
     m68k:machten:*:*)
-       echo m68k-apple-machten${UNAME_RELEASE}
+       echo m68k-apple-machten"$UNAME_RELEASE"
        exit ;;
     powerpc:machten:*:*)
-       echo powerpc-apple-machten${UNAME_RELEASE}
+       echo powerpc-apple-machten"$UNAME_RELEASE"
        exit ;;
     RISC*:Mach:*:*)
        echo mips-dec-mach_bsd4.3
        exit ;;
     RISC*:ULTRIX:*:*)
-       echo mips-dec-ultrix${UNAME_RELEASE}
+       echo mips-dec-ultrix"$UNAME_RELEASE"
        exit ;;
     VAX*:ULTRIX*:*:*)
-       echo vax-dec-ultrix${UNAME_RELEASE}
+       echo vax-dec-ultrix"$UNAME_RELEASE"
        exit ;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
-       echo clipper-intergraph-clix${UNAME_RELEASE}
+       echo clipper-intergraph-clix"$UNAME_RELEASE"
        exit ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
+       set_cc_for_build
+       sed 's/^        //' << EOF > "$dummy.c"
 #ifdef __cplusplus
 #include <stdio.h>  /* for printf() prototype */
        int main (int argc, char *argv[]) {
@@ -485,23 +502,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 #endif
        #if defined (host_mips) && defined (MIPSEB)
        #if defined (SYSTYPE_SYSV)
-         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+         printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
        #endif
        #if defined (SYSTYPE_SVR4)
-         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+         printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
        #endif
        #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+         printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
        #endif
        #endif
          exit (-1);
        }
 EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c &&
-         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-         SYSTEM_NAME=`$dummy $dummyarg` &&
+       $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
+         dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
            { echo "$SYSTEM_NAME"; exit; }
-       echo mips-mips-riscos${UNAME_RELEASE}
+       echo mips-mips-riscos"$UNAME_RELEASE"
        exit ;;
     Motorola:PowerMAX_OS:*:*)
        echo powerpc-motorola-powermax
@@ -527,17 +544,17 @@ EOF
     AViiON:dgux:*:*)
        # DG/UX returns AViiON for all architectures
        UNAME_PROCESSOR=`/usr/bin/uname -p`
-       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
        then
-           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
+              [ "$TARGET_BINARY_INTERFACE"x = x ]
            then
-               echo m88k-dg-dgux${UNAME_RELEASE}
+               echo m88k-dg-dgux"$UNAME_RELEASE"
            else
-               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+               echo m88k-dg-dguxbcs"$UNAME_RELEASE"
            fi
        else
-           echo i586-dg-dgux${UNAME_RELEASE}
+           echo i586-dg-dgux"$UNAME_RELEASE"
        fi
        exit ;;
     M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
@@ -554,7 +571,7 @@ EOF
        echo m68k-tektronix-bsd
        exit ;;
     *:IRIX*:*:*)
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
        exit ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
        echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
@@ -566,14 +583,14 @@ EOF
        if [ -x /usr/bin/oslevel ] ; then
                IBM_REV=`/usr/bin/oslevel`
        else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+               IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
        fi
-       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
        exit ;;
     *:AIX:2:3)
        if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-               eval $set_cc_for_build
-               sed 's/^                //' << EOF >$dummy.c
+               set_cc_for_build
+               sed 's/^                //' << EOF > "$dummy.c"
                #include <sys/systemcfg.h>
 
                main()
@@ -584,7 +601,7 @@ EOF
                        exit(0);
                        }
 EOF
-               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
                then
                        echo "$SYSTEM_NAME"
                else
@@ -598,7 +615,7 @@ EOF
        exit ;;
     *:AIX:*:[4567])
        IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+       if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
                IBM_ARCH=rs6000
        else
                IBM_ARCH=powerpc
@@ -607,18 +624,18 @@ EOF
                IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
                           awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
        else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+               IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
        fi
-       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
        exit ;;
     *:AIX:*:*)
        echo rs6000-ibm-aix
        exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+    ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
        echo romp-ibm-bsd4.4
        exit ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       echo romp-ibm-bsd"$UNAME_RELEASE"   # 4.3 with uname added to
        exit ;;                             # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
        echo rs6000-bull-bosx
@@ -633,28 +650,28 @@ EOF
        echo m68k-hp-bsd4.4
        exit ;;
     9000/[34678]??:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       case "${UNAME_MACHINE}" in
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
+       HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+       case "$UNAME_MACHINE" in
+           9000/31?)            HP_ARCH=m68000 ;;
+           9000/[34]??)         HP_ARCH=m68k ;;
            9000/[678][0-9][0-9])
                if [ -x /usr/bin/getconf ]; then
                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                   case "${sc_cpu_version}" in
+                   case "$sc_cpu_version" in
                      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
                      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
                      532)                      # CPU_PA_RISC2_0
-                       case "${sc_kernel_bits}" in
+                       case "$sc_kernel_bits" in
                          32) HP_ARCH=hppa2.0n ;;
                          64) HP_ARCH=hppa2.0w ;;
                          '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
                        esac ;;
                    esac
                fi
-               if [ "${HP_ARCH}" = "" ]; then
-                   eval $set_cc_for_build
-                   sed 's/^            //' << EOF >$dummy.c
+               if [ "$HP_ARCH" = "" ]; then
+                   set_cc_for_build
+                   sed 's/^            //' << EOF > "$dummy.c"
 
                #define _HPUX_SOURCE
                #include <stdlib.h>
@@ -687,13 +704,13 @@ EOF
                    exit (0);
                }
 EOF
-                   (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
                    test -z "$HP_ARCH" && HP_ARCH=hppa
                fi ;;
        esac
-       if [ ${HP_ARCH} = hppa2.0w ]
+       if [ "$HP_ARCH" = hppa2.0w ]
        then
-           eval $set_cc_for_build
+           set_cc_for_build
 
            # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
            # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
@@ -712,15 +729,15 @@ EOF
                HP_ARCH=hppa64
            fi
        fi
-       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
        exit ;;
     ia64:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       echo ia64-hp-hpux${HPUX_REV}
+       HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux"$HPUX_REV"
        exit ;;
     3050*:HI-UX:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
+       set_cc_for_build
+       sed 's/^        //' << EOF > "$dummy.c"
        #include <unistd.h>
        int
        main ()
@@ -745,11 +762,11 @@ EOF
          exit (0);
        }
 EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+       $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
                { echo "$SYSTEM_NAME"; exit; }
        echo unknown-hitachi-hiuxwe2
        exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
        echo hppa1.1-hp-bsd
        exit ;;
     9000/8??:4.3bsd:*:*)
@@ -758,7 +775,7 @@ EOF
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
        echo hppa1.0-hp-mpeix
        exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
        echo hppa1.1-hp-osf
        exit ;;
     hp8??:OSF1:*:*)
@@ -766,9 +783,9 @@ EOF
        exit ;;
     i*86:OSF1:*:*)
        if [ -x /usr/sbin/sysversion ] ; then
-           echo ${UNAME_MACHINE}-unknown-osf1mk
+           echo "$UNAME_MACHINE"-unknown-osf1mk
        else
-           echo ${UNAME_MACHINE}-unknown-osf1
+           echo "$UNAME_MACHINE"-unknown-osf1
        fi
        exit ;;
     parisc*:Lites*:*:*)
@@ -793,130 +810,123 @@ EOF
        echo c4-convex-bsd
        exit ;;
     CRAY*Y-MP:*:*:*)
-       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     CRAY*[A-Z]90:*:*:*)
-       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
        | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
              -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
              -e 's/\.[^.]*$/.X/'
        exit ;;
     CRAY*TS:*:*:*)
-       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     CRAY*T3E:*:*:*)
-       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     CRAY*SV1:*:*:*)
-       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     *:UNICOS/mp:*:*)
-       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
        FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
        FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
-       FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+       FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     5000:UNIX_System_V:4.*:*)
        FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
-       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+       FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
        exit ;;
     sparc*:BSD/OS:*:*)
-       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       echo sparc-unknown-bsdi"$UNAME_RELEASE"
        exit ;;
     *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
+       exit ;;
+    arm:FreeBSD:*:*)
+       UNAME_PROCESSOR=`uname -p`
+       set_cc_for_build
+       if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_PCS_VFP
+       then
+           echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi
+       else
+           echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
+       fi
        exit ;;
     *:FreeBSD:*:*)
        UNAME_PROCESSOR=`/usr/bin/uname -p`
-       case ${UNAME_PROCESSOR} in
+       case "$UNAME_PROCESSOR" in
            amd64)
-               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-           *)
-               echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+               UNAME_PROCESSOR=x86_64 ;;
+           i386)
+               UNAME_PROCESSOR=i586 ;;
        esac
+       echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
        exit ;;
     i*:CYGWIN*:*)
-       echo ${UNAME_MACHINE}-pc-cygwin
+       echo "$UNAME_MACHINE"-pc-cygwin
        exit ;;
     *:MINGW64*:*)
-       echo ${UNAME_MACHINE}-pc-mingw64
+       echo "$UNAME_MACHINE"-pc-mingw64
        exit ;;
     *:MINGW*:*)
-       echo ${UNAME_MACHINE}-pc-mingw32
+       echo "$UNAME_MACHINE"-pc-mingw32
        exit ;;
     *:MSYS*:*)
-       echo ${UNAME_MACHINE}-pc-msys
-       exit ;;
-    i*:windows32*:*)
-       # uname -m includes "-pc" on this system.
-       echo ${UNAME_MACHINE}-mingw32
+       echo "$UNAME_MACHINE"-pc-msys
        exit ;;
     i*:PW*:*)
-       echo ${UNAME_MACHINE}-pc-pw32
+       echo "$UNAME_MACHINE"-pc-pw32
        exit ;;
     *:Interix*:*)
-       case ${UNAME_MACHINE} in
+       case "$UNAME_MACHINE" in
            x86)
-               echo i586-pc-interix${UNAME_RELEASE}
+               echo i586-pc-interix"$UNAME_RELEASE"
                exit ;;
            authenticamd | genuineintel | EM64T)
-               echo x86_64-unknown-interix${UNAME_RELEASE}
+               echo x86_64-unknown-interix"$UNAME_RELEASE"
                exit ;;
            IA64)
-               echo ia64-unknown-interix${UNAME_RELEASE}
+               echo ia64-unknown-interix"$UNAME_RELEASE"
                exit ;;
        esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-       echo i${UNAME_MACHINE}-pc-mks
-       exit ;;
-    8664:Windows_NT:*)
-       echo x86_64-pc-mks
-       exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-       # UNAME_MACHINE based on the output of uname instead of i386?
-       echo i586-pc-interix
-       exit ;;
     i*:UWIN*:*)
-       echo ${UNAME_MACHINE}-pc-uwin
+       echo "$UNAME_MACHINE"-pc-uwin
        exit ;;
     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-       echo x86_64-unknown-cygwin
-       exit ;;
-    p*:CYGWIN*:*)
-       echo powerpcle-unknown-cygwin
+       echo x86_64-pc-cygwin
        exit ;;
     prep*:SunOS:5.*:*)
-       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
        exit ;;
     *:GNU:*:*)
        # the GNU system
-       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
        exit ;;
     *:GNU/*:*:*)
        # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+       echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
        exit ;;
-    i*86:Minix:*:*)
-       echo ${UNAME_MACHINE}-pc-minix
+    *:Minix:*:*)
+       echo "$UNAME_MACHINE"-unknown-minix
        exit ;;
     aarch64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     aarch64_be:Linux:*:*)
        UNAME_MACHINE=aarch64_be
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     alpha:Linux:*:*)
-       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
          EV5)   UNAME_MACHINE=alphaev5 ;;
          EV56)  UNAME_MACHINE=alphaev56 ;;
          PCA56) UNAME_MACHINE=alphapca56 ;;
@@ -927,134 +937,168 @@ EOF
        esac
        objdump --private-headers /bin/sh | grep -q ld.so.1
        if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     arc:Linux:*:* | arceb:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     arm*:Linux:*:*)
-       eval $set_cc_for_build
+       set_cc_for_build
        if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
            | grep -q __ARM_EABI__
        then
-           echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+           echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        else
            if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
                | grep -q __ARM_PCS_VFP
            then
-               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+               echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
            else
-               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+               echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
            fi
        fi
        exit ;;
     avr32*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     cris:Linux:*:*)
-       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+       echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
        exit ;;
     crisv32:Linux:*:*)
-       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+       echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
        exit ;;
     e2k:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     frv:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     hexagon:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     i*86:Linux:*:*)
-       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+       echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
        exit ;;
     ia64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     k1om:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     m32r*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     m68*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     mips:Linux:*:* | mips64:Linux:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
+       set_cc_for_build
+       IS_GLIBC=0
+       test x"${LIBC}" = xgnu && IS_GLIBC=1
+       sed 's/^        //' << EOF > "$dummy.c"
        #undef CPU
-       #undef ${UNAME_MACHINE}
-       #undef ${UNAME_MACHINE}el
+       #undef mips
+       #undef mipsel
+       #undef mips64
+       #undef mips64el
+       #if ${IS_GLIBC} && defined(_ABI64)
+       LIBCABI=gnuabi64
+       #else
+       #if ${IS_GLIBC} && defined(_ABIN32)
+       LIBCABI=gnuabin32
+       #else
+       LIBCABI=${LIBC}
+       #endif
+       #endif
+
+       #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+       CPU=mipsisa64r6
+       #else
+       #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+       CPU=mipsisa32r6
+       #else
+       #if defined(__mips64)
+       CPU=mips64
+       #else
+       CPU=mips
+       #endif
+       #endif
+       #endif
+
        #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=${UNAME_MACHINE}el
+       MIPS_ENDIAN=el
        #else
        #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=${UNAME_MACHINE}
+       MIPS_ENDIAN=
        #else
-       CPU=
+       MIPS_ENDIAN=
        #endif
        #endif
 EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+       eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`"
+       test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
        ;;
+    mips64el:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
     openrisc*:Linux:*:*)
-       echo or1k-unknown-linux-${LIBC}
+       echo or1k-unknown-linux-"$LIBC"
        exit ;;
     or32:Linux:*:* | or1k*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     padre:Linux:*:*)
-       echo sparc-unknown-linux-${LIBC}
+       echo sparc-unknown-linux-"$LIBC"
        exit ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-${LIBC}
+       echo hppa64-unknown-linux-"$LIBC"
        exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
        # Look for CPU level
        case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-         PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
-         PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
-         *)    echo hppa-unknown-linux-${LIBC} ;;
+         PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
+         PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
+         *)    echo hppa-unknown-linux-"$LIBC" ;;
        esac
        exit ;;
     ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-${LIBC}
+       echo powerpc64-unknown-linux-"$LIBC"
        exit ;;
     ppc:Linux:*:*)
-       echo powerpc-unknown-linux-${LIBC}
+       echo powerpc-unknown-linux-"$LIBC"
        exit ;;
     ppc64le:Linux:*:*)
-       echo powerpc64le-unknown-linux-${LIBC}
+       echo powerpc64le-unknown-linux-"$LIBC"
        exit ;;
     ppcle:Linux:*:*)
-       echo powerpcle-unknown-linux-${LIBC}
+       echo powerpcle-unknown-linux-"$LIBC"
+       exit ;;
+    riscv32:Linux:*:* | riscv64:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-       echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+       echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
        exit ;;
     sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     sh*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     tile*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     vax:Linux:*:*)
-       echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+       echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
        exit ;;
     x86_64:Linux:*:*)
-       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+       echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
        exit ;;
     xtensa*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     i*86:DYNIX/ptx:4*:*)
        # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -1068,34 +1112,34 @@ EOF
        # I am not positive that other SVR4 systems won't match this,
        # I just have to hope.  -- rms.
        # Use sysv4.2uw... so that sysv4* matches it.
-       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
        exit ;;
     i*86:OS/2:*:*)
        # If we were able to find `uname', then EMX Unix compatibility
        # is probably installed.
-       echo ${UNAME_MACHINE}-pc-os2-emx
+       echo "$UNAME_MACHINE"-pc-os2-emx
        exit ;;
     i*86:XTS-300:*:STOP)
-       echo ${UNAME_MACHINE}-unknown-stop
+       echo "$UNAME_MACHINE"-unknown-stop
        exit ;;
     i*86:atheos:*:*)
-       echo ${UNAME_MACHINE}-unknown-atheos
+       echo "$UNAME_MACHINE"-unknown-atheos
        exit ;;
     i*86:syllable:*:*)
-       echo ${UNAME_MACHINE}-pc-syllable
+       echo "$UNAME_MACHINE"-pc-syllable
        exit ;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-       echo i386-unknown-lynxos${UNAME_RELEASE}
+       echo i386-unknown-lynxos"$UNAME_RELEASE"
        exit ;;
     i*86:*DOS:*:*)
-       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       echo "$UNAME_MACHINE"-pc-msdosdjgpp
        exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+    i*86:*:4.*:*)
+       UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
        if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+               echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
        else
-               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+               echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
        fi
        exit ;;
     i*86:*:5:[678]*)
@@ -1105,12 +1149,12 @@ EOF
            *Pentium)        UNAME_MACHINE=i586 ;;
            *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
        esac
-       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
        exit ;;
     i*86:*:3.2:*)
        if test -f /usr/options/cb.name; then
                UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+               echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
        elif /bin/uname -X 2>/dev/null >/dev/null ; then
                UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
                (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
@@ -1120,9 +1164,9 @@ EOF
                        && UNAME_MACHINE=i686
                (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
                        && UNAME_MACHINE=i686
-               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+               echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
        else
-               echo ${UNAME_MACHINE}-pc-sysv32
+               echo "$UNAME_MACHINE"-pc-sysv32
        fi
        exit ;;
     pc:*:*:*)
@@ -1142,9 +1186,9 @@ EOF
        exit ;;
     i860:*:4.*:*) # i860-SVR4
        if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+         echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
        else # Add other i860-SVR4 vendors below as they are discovered.
-         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+         echo i860-unknown-sysv"$UNAME_RELEASE"  # Unknown i860-SVR4
        fi
        exit ;;
     mini*:CTIX:SYS*5:*)
@@ -1164,9 +1208,9 @@ EOF
        test -r /etc/.relid \
        && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+         && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
        /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+         && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
          && { echo i486-ncr-sysv4; exit; } ;;
@@ -1175,28 +1219,28 @@ EOF
        test -r /etc/.relid \
            && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+           && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
        /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+           && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
        /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+           && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       echo m68k-unknown-lynxos"$UNAME_RELEASE"
        exit ;;
     mc68030:UNIX_System_V:4.*:*)
        echo m68k-atari-sysv4
        exit ;;
     TSUNAMI:LynxOS:2.*:*)
-       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       echo sparc-unknown-lynxos"$UNAME_RELEASE"
        exit ;;
     rs6000:LynxOS:2.*:*)
-       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       echo rs6000-unknown-lynxos"$UNAME_RELEASE"
        exit ;;
     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       echo powerpc-unknown-lynxos"$UNAME_RELEASE"
        exit ;;
     SM[BE]S:UNIX_SV:*:*)
-       echo mips-dde-sysv${UNAME_RELEASE}
+       echo mips-dde-sysv"$UNAME_RELEASE"
        exit ;;
     RM*:ReliantUNIX-*:*:*)
        echo mips-sni-sysv4
@@ -1207,7 +1251,7 @@ EOF
     *:SINIX-*:*:*)
        if uname -p 2>/dev/null >/dev/null ; then
                UNAME_MACHINE=`(uname -p) 2>/dev/null`
-               echo ${UNAME_MACHINE}-sni-sysv4
+               echo "$UNAME_MACHINE"-sni-sysv4
        else
                echo ns32k-sni-sysv
        fi
@@ -1227,23 +1271,23 @@ EOF
        exit ;;
     i*86:VOS:*:*)
        # From Paul.Green@stratus.com.
-       echo ${UNAME_MACHINE}-stratus-vos
+       echo "$UNAME_MACHINE"-stratus-vos
        exit ;;
     *:VOS:*:*)
        # From Paul.Green@stratus.com.
        echo hppa1.1-stratus-vos
        exit ;;
     mc68*:A/UX:*:*)
-       echo m68k-apple-aux${UNAME_RELEASE}
+       echo m68k-apple-aux"$UNAME_RELEASE"
        exit ;;
     news*:NEWS-OS:6*:*)
        echo mips-sony-newsos6
        exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
        if [ -d /usr/nec ]; then
-               echo mips-nec-sysv${UNAME_RELEASE}
+               echo mips-nec-sysv"$UNAME_RELEASE"
        else
-               echo mips-unknown-sysv${UNAME_RELEASE}
+               echo mips-unknown-sysv"$UNAME_RELEASE"
        fi
        exit ;;
     BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
@@ -1262,60 +1306,68 @@ EOF
        echo x86_64-unknown-haiku
        exit ;;
     SX-4:SUPER-UX:*:*)
-       echo sx4-nec-superux${UNAME_RELEASE}
+       echo sx4-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-5:SUPER-UX:*:*)
-       echo sx5-nec-superux${UNAME_RELEASE}
+       echo sx5-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-6:SUPER-UX:*:*)
-       echo sx6-nec-superux${UNAME_RELEASE}
+       echo sx6-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-7:SUPER-UX:*:*)
-       echo sx7-nec-superux${UNAME_RELEASE}
+       echo sx7-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-8:SUPER-UX:*:*)
-       echo sx8-nec-superux${UNAME_RELEASE}
+       echo sx8-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-8R:SUPER-UX:*:*)
-       echo sx8r-nec-superux${UNAME_RELEASE}
+       echo sx8r-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-ACE:SUPER-UX:*:*)
-       echo sxace-nec-superux${UNAME_RELEASE}
+       echo sxace-nec-superux"$UNAME_RELEASE"
        exit ;;
     Power*:Rhapsody:*:*)
-       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       echo powerpc-apple-rhapsody"$UNAME_RELEASE"
        exit ;;
     *:Rhapsody:*:*)
-       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
        exit ;;
     *:Darwin:*:*)
-       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-       eval $set_cc_for_build
-       if test "$UNAME_PROCESSOR" = unknown ; then
-           UNAME_PROCESSOR=powerpc
+       UNAME_PROCESSOR=`uname -p`
+       case $UNAME_PROCESSOR in
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       if command -v xcode-select > /dev/null 2> /dev/null && \
+               ! xcode-select --print-path > /dev/null 2> /dev/null ; then
+           # Avoid executing cc if there is no toolchain installed as
+           # cc will be a stub that puts up a graphical alert
+           # prompting the user to install developer tools.
+           CC_FOR_BUILD=no_compiler_found
+       else
+           set_cc_for_build
        fi
-       if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-           if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
-               if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                   (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-                   grep IS_64BIT_ARCH >/dev/null
-               then
-                   case $UNAME_PROCESSOR in
-                       i386) UNAME_PROCESSOR=x86_64 ;;
-                       powerpc) UNAME_PROCESSOR=powerpc64 ;;
-                   esac
-               fi
+       if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+           if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+                  (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+                  grep IS_64BIT_ARCH >/dev/null
+           then
+               case $UNAME_PROCESSOR in
+                   i386) UNAME_PROCESSOR=x86_64 ;;
+                   powerpc) UNAME_PROCESSOR=powerpc64 ;;
+               esac
+           fi
+           # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+           if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+                  (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+                  grep IS_PPC >/dev/null
+           then
+               UNAME_PROCESSOR=powerpc
            fi
        elif test "$UNAME_PROCESSOR" = i386 ; then
-           # Avoid executing cc on OS X 10.9, as it ships with a stub
-           # that puts up a graphical alert prompting to install
-           # developer tools.  Any system running Mac OS X 10.7 or
-           # later (Darwin 11 and later) is required to have a 64-bit
-           # processor. This is not true of the ARM version of Darwin
-           # that Apple uses in portable devices.
-           UNAME_PROCESSOR=x86_64
+           # uname -m returns i386 or x86_64
+           UNAME_PROCESSOR=$UNAME_MACHINE
        fi
-       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
        exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
        UNAME_PROCESSOR=`uname -p`
@@ -1323,19 +1375,25 @@ EOF
                UNAME_PROCESSOR=i386
                UNAME_MACHINE=pc
        fi
-       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
        exit ;;
     *:QNX:*:4*)
        echo i386-pc-qnx
        exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
-       echo neo-tandem-nsk${UNAME_RELEASE}
+    NEO-*:NONSTOP_KERNEL:*:*)
+       echo neo-tandem-nsk"$UNAME_RELEASE"
        exit ;;
     NSE-*:NONSTOP_KERNEL:*:*)
-       echo nse-tandem-nsk${UNAME_RELEASE}
+       echo nse-tandem-nsk"$UNAME_RELEASE"
+       exit ;;
+    NSR-*:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk"$UNAME_RELEASE"
+       exit ;;
+    NSV-*:NONSTOP_KERNEL:*:*)
+       echo nsv-tandem-nsk"$UNAME_RELEASE"
        exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-       echo nsr-tandem-nsk${UNAME_RELEASE}
+    NSX-*:NONSTOP_KERNEL:*:*)
+       echo nsx-tandem-nsk"$UNAME_RELEASE"
        exit ;;
     *:NonStop-UX:*:*)
        echo mips-compaq-nonstopux
@@ -1344,18 +1402,19 @@ EOF
        echo bs2000-siemens-sysv
        exit ;;
     DS/*:UNIX_System_V:*:*)
-       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
        exit ;;
     *:Plan9:*:*)
        # "uname -m" is not consistent, so use $cputype instead. 386
        # is converted to i386 for consistency with other x86
        # operating systems.
+       # shellcheck disable=SC2154
        if test "$cputype" = 386; then
            UNAME_MACHINE=i386
        else
            UNAME_MACHINE="$cputype"
        fi
-       echo ${UNAME_MACHINE}-unknown-plan9
+       echo "$UNAME_MACHINE"-unknown-plan9
        exit ;;
     *:TOPS-10:*:*)
        echo pdp10-unknown-tops10
@@ -1376,14 +1435,14 @@ EOF
        echo pdp10-unknown-its
        exit ;;
     SEI:*:*:SEIUX)
-       echo mips-sei-seiux${UNAME_RELEASE}
+       echo mips-sei-seiux"$UNAME_RELEASE"
        exit ;;
     *:DragonFly:*:*)
-       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
        exit ;;
     *:*VMS:*:*)
        UNAME_MACHINE=`(uname -p) 2>/dev/null`
-       case "${UNAME_MACHINE}" in
+       case "$UNAME_MACHINE" in
            A*) echo alpha-dec-vms ; exit ;;
            I*) echo ia64-dec-vms ; exit ;;
            V*) echo vax-dec-vms ; exit ;;
@@ -1392,32 +1451,184 @@ EOF
        echo i386-pc-xenix
        exit ;;
     i*86:skyos:*:*)
-       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
+       echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
        exit ;;
     i*86:rdos:*:*)
-       echo ${UNAME_MACHINE}-pc-rdos
+       echo "$UNAME_MACHINE"-pc-rdos
        exit ;;
     i*86:AROS:*:*)
-       echo ${UNAME_MACHINE}-pc-aros
+       echo "$UNAME_MACHINE"-pc-aros
        exit ;;
     x86_64:VMkernel:*:*)
-       echo ${UNAME_MACHINE}-unknown-esx
+       echo "$UNAME_MACHINE"-unknown-esx
        exit ;;
     amd64:Isilon\ OneFS:*:*)
        echo x86_64-unknown-onefs
        exit ;;
+    *:Unleashed:*:*)
+       echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
+       exit ;;
+esac
+
+# No uname command or uname output not recognized.
+set_cc_for_build
+cat > "$dummy.c" <<EOF
+#ifdef _SEQUENT_
+#include <sys/types.h>
+#include <sys/utsname.h>
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#include <signal.h>
+#if defined(_SIZE_T_) || defined(SIGLOST)
+#include <sys/utsname.h>
+#endif
+#endif
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+  "4"
+#else
+  ""
+#endif
+  ); exit (0);
+#endif
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+  struct utsname un;
+
+  uname(&un);
+  if (strncmp(un.version, "V2", 2) == 0) {
+    printf ("i386-sequent-ptx2\n"); exit (0);
+  }
+  if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+    printf ("i386-sequent-ptx1\n"); exit (0);
+  }
+  printf ("i386-sequent-ptx\n"); exit (0);
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+#include <sys/param.h>
+#if defined (BSD)
+#if BSD == 43
+  printf ("vax-dec-bsd4.3\n"); exit (0);
+#else
+#if BSD == 199006
+  printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#else
+  printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#endif
+#else
+  printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#else
+#if defined(_SIZE_T_) || defined(SIGLOST)
+  struct utsname un;
+  uname (&un);
+  printf ("vax-dec-ultrix%s\n", un.release); exit (0);
+#else
+  printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#if defined(_SIZE_T_) || defined(SIGLOST)
+  struct utsname *un;
+  uname (&un);
+  printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#else
+  printf ("mips-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
+
+echo "$0: unable to guess system type" >&2
+
+case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+    mips:Linux | mips64:Linux)
+       # If we got here on MIPS GNU/Linux, output extra information.
+       cat >&2 <<EOF
+
+NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
+the system type. Please install a C compiler and try again.
+EOF
+       ;;
 esac
 
 cat >&2 <<EOF
-$0: unable to guess system type
 
 This script (version $timestamp), has failed to recognize the
-operating system you are using. If your script is old, overwrite
-config.guess and config.sub with the latest versions from:
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
 
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 If $0 has already been updated, send the following data and any
 information you think might be pertinent to config-patches@gnu.org to
@@ -1440,16 +1651,16 @@ hostinfo               = `(hostinfo) 2>/dev/null`
 /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
 /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
 
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
+UNAME_MACHINE = "$UNAME_MACHINE"
+UNAME_RELEASE = "$UNAME_RELEASE"
+UNAME_SYSTEM  = "$UNAME_SYSTEM"
+UNAME_VERSION = "$UNAME_VERSION"
 EOF
 
 exit 1
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"
index b625621..98183ff 100755 (executable)
@@ -2,7 +2,7 @@
 # Output a system dependent set of variables, describing how to set the
 # run time search path of shared libraries in an executable.
 #
-#   Copyright 1996-2014 Free Software Foundation, Inc.
+#   Copyright 1996-2016 Free Software Foundation, Inc.
 #   Taken from GNU libtool, 2001
 #   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 #
index a1f8229..f02d43a 100755 (executable)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2016 Free Software Foundation, Inc.
+#   Copyright 1992-2020 Free Software Foundation, Inc.
 
-timestamp='2016-08-25'
+timestamp='2020-01-01'
 
 # 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
@@ -15,7 +15,7 @@ timestamp='2016-08-25'
 # 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/>.
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -33,7 +33,7 @@ timestamp='2016-08-25'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -57,7 +57,7 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
-Operation modes:
+Options:
   -h, --help         print this help, then exit
   -t, --time-stamp   print date of last modification, then exit
   -v, --version      print version number, then exit
@@ -67,7 +67,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2016 Free Software Foundation, Inc.
+Copyright 1992-2020 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."
@@ -89,12 +89,12 @@ while test $# -gt 0 ; do
     - )        # Use stdin as input.
        break ;;
     -* )
-       echo "$me: invalid option $1$help"
+       echo "$me: invalid option $1$help" >&2
        exit 1 ;;
 
     *local*)
        # First pass through any local machine types.
-       echo $1
+       echo "$1"
        exit ;;
 
     * )
@@ -110,1242 +110,1164 @@ case $# in
     exit 1;;
 esac
 
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
-  kopensolaris*-gnu* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  android-linux)
-    os=-linux-android
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
+# Split fields of configuration type
+# shellcheck disable=SC2162
+IFS="-" read field1 field2 field3 field4 <<EOF
+$1
+EOF
 
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-       -sun*os*)
-               # Prevent following clause from handling this invalid input.
-               ;;
-       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-       -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*)
-               os=
-               basic_machine=$1
-               ;;
-       -bluegene*)
-               os=-cnk
-               ;;
-       -sim | -cisco | -oki | -wec | -winbond)
-               os=
-               basic_machine=$1
-               ;;
-       -scout)
-               ;;
-       -wrs)
-               os=-vxworks
-               basic_machine=$1
-               ;;
-       -chorusos*)
-               os=-chorusos
-               basic_machine=$1
-               ;;
-       -chorusrdb)
-               os=-chorusrdb
-               basic_machine=$1
-               ;;
-       -hiux*)
-               os=-hiuxwe2
-               ;;
-       -sco6)
-               os=-sco5v6
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5)
-               os=-sco3.2v5
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco4)
-               os=-sco3.2v4
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2.[4-9]*)
-               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2v[4-9]*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5v6*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco*)
-               os=-sco3.2v2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -udk*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -isc)
-               os=-isc2.2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -clix*)
-               basic_machine=clipper-intergraph
-               ;;
-       -isc*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -lynx*178)
-               os=-lynxos178
-               ;;
-       -lynx*5)
-               os=-lynxos5
-               ;;
-       -lynx*)
-               os=-lynxos
+# Separate into logical components for further validation
+case $1 in
+       *-*-*-*-*)
+               echo Invalid configuration \`"$1"\': more than four components >&2
+               exit 1
                ;;
-       -ptx*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+       *-*-*-*)
+               basic_machine=$field1-$field2
+               os=$field3-$field4
                ;;
-       -windowsnt*)
-               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+       *-*-*)
+               # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+               # parts
+               maybe_os=$field2-$field3
+               case $maybe_os in
+                       nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \
+                       | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \
+                       | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
+                       | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
+                       | storm-chaos* | os2-emx* | rtmk-nova*)
+                               basic_machine=$field1
+                               os=$maybe_os
+                               ;;
+                       android-linux)
+                               basic_machine=$field1-unknown
+                               os=linux-android
+                               ;;
+                       *)
+                               basic_machine=$field1-$field2
+                               os=$field3
+                               ;;
+               esac
                ;;
-       -psos*)
-               os=-psos
+       *-*)
+               # A lone config we happen to match not fitting any pattern
+               case $field1-$field2 in
+                       decstation-3100)
+                               basic_machine=mips-dec
+                               os=
+                               ;;
+                       *-*)
+                               # Second component is usually, but not always the OS
+                               case $field2 in
+                                       # Prevent following clause from handling this valid os
+                                       sun*os*)
+                                               basic_machine=$field1
+                                               os=$field2
+                                               ;;
+                                       # Manufacturers
+                                       dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+                                       | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+                                       | unicom* | ibm* | next | hp | isi* | apollo | altos* \
+                                       | 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* | sim | cisco \
+                                       | oki | wec | wrs | winbond)
+                                               basic_machine=$field1-$field2
+                                               os=
+                                               ;;
+                                       *)
+                                               basic_machine=$field1
+                                               os=$field2
+                                               ;;
+                               esac
+                       ;;
+               esac
                ;;
-       -mint | -mint[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
+       *)
+               # Convert single-component short-hands not valid as part of
+               # multi-component configurations.
+               case $field1 in
+                       386bsd)
+                               basic_machine=i386-pc
+                               os=bsd
+                               ;;
+                       a29khif)
+                               basic_machine=a29k-amd
+                               os=udi
+                               ;;
+                       adobe68k)
+                               basic_machine=m68010-adobe
+                               os=scout
+                               ;;
+                       alliant)
+                               basic_machine=fx80-alliant
+                               os=
+                               ;;
+                       altos | altos3068)
+                               basic_machine=m68k-altos
+                               os=
+                               ;;
+                       am29k)
+                               basic_machine=a29k-none
+                               os=bsd
+                               ;;
+                       amdahl)
+                               basic_machine=580-amdahl
+                               os=sysv
+                               ;;
+                       amiga)
+                               basic_machine=m68k-unknown
+                               os=
+                               ;;
+                       amigaos | amigados)
+                               basic_machine=m68k-unknown
+                               os=amigaos
+                               ;;
+                       amigaunix | amix)
+                               basic_machine=m68k-unknown
+                               os=sysv4
+                               ;;
+                       apollo68)
+                               basic_machine=m68k-apollo
+                               os=sysv
+                               ;;
+                       apollo68bsd)
+                               basic_machine=m68k-apollo
+                               os=bsd
+                               ;;
+                       aros)
+                               basic_machine=i386-pc
+                               os=aros
+                               ;;
+                       aux)
+                               basic_machine=m68k-apple
+                               os=aux
+                               ;;
+                       balance)
+                               basic_machine=ns32k-sequent
+                               os=dynix
+                               ;;
+                       blackfin)
+                               basic_machine=bfin-unknown
+                               os=linux
+                               ;;
+                       cegcc)
+                               basic_machine=arm-unknown
+                               os=cegcc
+                               ;;
+                       convex-c1)
+                               basic_machine=c1-convex
+                               os=bsd
+                               ;;
+                       convex-c2)
+                               basic_machine=c2-convex
+                               os=bsd
+                               ;;
+                       convex-c32)
+                               basic_machine=c32-convex
+                               os=bsd
+                               ;;
+                       convex-c34)
+                               basic_machine=c34-convex
+                               os=bsd
+                               ;;
+                       convex-c38)
+                               basic_machine=c38-convex
+                               os=bsd
+                               ;;
+                       cray)
+                               basic_machine=j90-cray
+                               os=unicos
+                               ;;
+                       crds | unos)
+                               basic_machine=m68k-crds
+                               os=
+                               ;;
+                       da30)
+                               basic_machine=m68k-da30
+                               os=
+                               ;;
+                       decstation | pmax | pmin | dec3100 | decstatn)
+                               basic_machine=mips-dec
+                               os=
+                               ;;
+                       delta88)
+                               basic_machine=m88k-motorola
+                               os=sysv3
+                               ;;
+                       dicos)
+                               basic_machine=i686-pc
+                               os=dicos
+                               ;;
+                       djgpp)
+                               basic_machine=i586-pc
+                               os=msdosdjgpp
+                               ;;
+                       ebmon29k)
+                               basic_machine=a29k-amd
+                               os=ebmon
+                               ;;
+                       es1800 | OSE68k | ose68k | ose | OSE)
+                               basic_machine=m68k-ericsson
+                               os=ose
+                               ;;
+                       gmicro)
+                               basic_machine=tron-gmicro
+                               os=sysv
+                               ;;
+                       go32)
+                               basic_machine=i386-pc
+                               os=go32
+                               ;;
+                       h8300hms)
+                               basic_machine=h8300-hitachi
+                               os=hms
+                               ;;
+                       h8300xray)
+                               basic_machine=h8300-hitachi
+                               os=xray
+                               ;;
+                       h8500hms)
+                               basic_machine=h8500-hitachi
+                               os=hms
+                               ;;
+                       harris)
+                               basic_machine=m88k-harris
+                               os=sysv3
+                               ;;
+                       hp300 | hp300hpux)
+                               basic_machine=m68k-hp
+                               os=hpux
+                               ;;
+                       hp300bsd)
+                               basic_machine=m68k-hp
+                               os=bsd
+                               ;;
+                       hppaosf)
+                               basic_machine=hppa1.1-hp
+                               os=osf
+                               ;;
+                       hppro)
+                               basic_machine=hppa1.1-hp
+                               os=proelf
+                               ;;
+                       i386mach)
+                               basic_machine=i386-mach
+                               os=mach
+                               ;;
+                       isi68 | isi)
+                               basic_machine=m68k-isi
+                               os=sysv
+                               ;;
+                       m68knommu)
+                               basic_machine=m68k-unknown
+                               os=linux
+                               ;;
+                       magnum | m3230)
+                               basic_machine=mips-mips
+                               os=sysv
+                               ;;
+                       merlin)
+                               basic_machine=ns32k-utek
+                               os=sysv
+                               ;;
+                       mingw64)
+                               basic_machine=x86_64-pc
+                               os=mingw64
+                               ;;
+                       mingw32)
+                               basic_machine=i686-pc
+                               os=mingw32
+                               ;;
+                       mingw32ce)
+                               basic_machine=arm-unknown
+                               os=mingw32ce
+                               ;;
+                       monitor)
+                               basic_machine=m68k-rom68k
+                               os=coff
+                               ;;
+                       morphos)
+                               basic_machine=powerpc-unknown
+                               os=morphos
+                               ;;
+                       moxiebox)
+                               basic_machine=moxie-unknown
+                               os=moxiebox
+                               ;;
+                       msdos)
+                               basic_machine=i386-pc
+                               os=msdos
+                               ;;
+                       msys)
+                               basic_machine=i686-pc
+                               os=msys
+                               ;;
+                       mvs)
+                               basic_machine=i370-ibm
+                               os=mvs
+                               ;;
+                       nacl)
+                               basic_machine=le32-unknown
+                               os=nacl
+                               ;;
+                       ncr3000)
+                               basic_machine=i486-ncr
+                               os=sysv4
+                               ;;
+                       netbsd386)
+                               basic_machine=i386-pc
+                               os=netbsd
+                               ;;
+                       netwinder)
+                               basic_machine=armv4l-rebel
+                               os=linux
+                               ;;
+                       news | news700 | news800 | news900)
+                               basic_machine=m68k-sony
+                               os=newsos
+                               ;;
+                       news1000)
+                               basic_machine=m68030-sony
+                               os=newsos
+                               ;;
+                       necv70)
+                               basic_machine=v70-nec
+                               os=sysv
+                               ;;
+                       nh3000)
+                               basic_machine=m68k-harris
+                               os=cxux
+                               ;;
+                       nh[45]000)
+                               basic_machine=m88k-harris
+                               os=cxux
+                               ;;
+                       nindy960)
+                               basic_machine=i960-intel
+                               os=nindy
+                               ;;
+                       mon960)
+                               basic_machine=i960-intel
+                               os=mon960
+                               ;;
+                       nonstopux)
+                               basic_machine=mips-compaq
+                               os=nonstopux
+                               ;;
+                       os400)
+                               basic_machine=powerpc-ibm
+                               os=os400
+                               ;;
+                       OSE68000 | ose68000)
+                               basic_machine=m68000-ericsson
+                               os=ose
+                               ;;
+                       os68k)
+                               basic_machine=m68k-none
+                               os=os68k
+                               ;;
+                       paragon)
+                               basic_machine=i860-intel
+                               os=osf
+                               ;;
+                       parisc)
+                               basic_machine=hppa-unknown
+                               os=linux
+                               ;;
+                       pw32)
+                               basic_machine=i586-unknown
+                               os=pw32
+                               ;;
+                       rdos | rdos64)
+                               basic_machine=x86_64-pc
+                               os=rdos
+                               ;;
+                       rdos32)
+                               basic_machine=i386-pc
+                               os=rdos
+                               ;;
+                       rom68k)
+                               basic_machine=m68k-rom68k
+                               os=coff
+                               ;;
+                       sa29200)
+                               basic_machine=a29k-amd
+                               os=udi
+                               ;;
+                       sei)
+                               basic_machine=mips-sei
+                               os=seiux
+                               ;;
+                       sequent)
+                               basic_machine=i386-sequent
+                               os=
+                               ;;
+                       sps7)
+                               basic_machine=m68k-bull
+                               os=sysv2
+                               ;;
+                       st2000)
+                               basic_machine=m68k-tandem
+                               os=
+                               ;;
+                       stratus)
+                               basic_machine=i860-stratus
+                               os=sysv4
+                               ;;
+                       sun2)
+                               basic_machine=m68000-sun
+                               os=
+                               ;;
+                       sun2os3)
+                               basic_machine=m68000-sun
+                               os=sunos3
+                               ;;
+                       sun2os4)
+                               basic_machine=m68000-sun
+                               os=sunos4
+                               ;;
+                       sun3)
+                               basic_machine=m68k-sun
+                               os=
+                               ;;
+                       sun3os3)
+                               basic_machine=m68k-sun
+                               os=sunos3
+                               ;;
+                       sun3os4)
+                               basic_machine=m68k-sun
+                               os=sunos4
+                               ;;
+                       sun4)
+                               basic_machine=sparc-sun
+                               os=
+                               ;;
+                       sun4os3)
+                               basic_machine=sparc-sun
+                               os=sunos3
+                               ;;
+                       sun4os4)
+                               basic_machine=sparc-sun
+                               os=sunos4
+                               ;;
+                       sun4sol2)
+                               basic_machine=sparc-sun
+                               os=solaris2
+                               ;;
+                       sun386 | sun386i | roadrunner)
+                               basic_machine=i386-sun
+                               os=
+                               ;;
+                       sv1)
+                               basic_machine=sv1-cray
+                               os=unicos
+                               ;;
+                       symmetry)
+                               basic_machine=i386-sequent
+                               os=dynix
+                               ;;
+                       t3e)
+                               basic_machine=alphaev5-cray
+                               os=unicos
+                               ;;
+                       t90)
+                               basic_machine=t90-cray
+                               os=unicos
+                               ;;
+                       toad1)
+                               basic_machine=pdp10-xkl
+                               os=tops20
+                               ;;
+                       tpf)
+                               basic_machine=s390x-ibm
+                               os=tpf
+                               ;;
+                       udi29k)
+                               basic_machine=a29k-amd
+                               os=udi
+                               ;;
+                       ultra3)
+                               basic_machine=a29k-nyu
+                               os=sym1
+                               ;;
+                       v810 | necv810)
+                               basic_machine=v810-nec
+                               os=none
+                               ;;
+                       vaxv)
+                               basic_machine=vax-dec
+                               os=sysv
+                               ;;
+                       vms)
+                               basic_machine=vax-dec
+                               os=vms
+                               ;;
+                       vsta)
+                               basic_machine=i386-pc
+                               os=vsta
+                               ;;
+                       vxworks960)
+                               basic_machine=i960-wrs
+                               os=vxworks
+                               ;;
+                       vxworks68)
+                               basic_machine=m68k-wrs
+                               os=vxworks
+                               ;;
+                       vxworks29k)
+                               basic_machine=a29k-wrs
+                               os=vxworks
+                               ;;
+                       xbox)
+                               basic_machine=i686-pc
+                               os=mingw32
+                               ;;
+                       ymp)
+                               basic_machine=ymp-cray
+                               os=unicos
+                               ;;
+                       *)
+                               basic_machine=$1
+                               os=
+                               ;;
+               esac
                ;;
 esac
 
-# Decode aliases for certain CPU-COMPANY combinations.
+# Decode 1-component or ad-hoc basic machines
 case $basic_machine in
-       # Recognize the basic CPU types without company name.
-       # Some are omitted here because they have special meanings below.
-       1750a | 580 \
-       | a29k \
-       | aarch64 | aarch64_be \
-       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-       | am33_2.0 \
-       | arc | arceb \
-       | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-       | avr | avr32 \
-       | ba \
-       | be32 | be64 \
-       | bfin \
-       | c4x | c8051 | clipper \
-       | d10v | d30v | dlx | dsp16xx \
-       | e2k | epiphany \
-       | fido | fr30 | frv | ft32 \
-       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-       | hexagon \
-       | i370 | i860 | i960 | ia64 \
-       | ip2k | iq2000 \
-       | k1om \
-       | le32 | le64 \
-       | lm32 \
-       | m32c | m32r | m32rle | m68000 | m68k | m88k \
-       | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
-       | mips | mipsbe | mipseb | mipsel | mipsle \
-       | mips16 \
-       | mips64 | mips64el \
-       | mips64octeon | mips64octeonel \
-       | mips64orion | mips64orionel \
-       | mips64r5900 | mips64r5900el \
-       | mips64vr | mips64vrel \
-       | mips64vr4100 | mips64vr4100el \
-       | mips64vr4300 | mips64vr4300el \
-       | mips64vr5000 | mips64vr5000el \
-       | mips64vr5900 | mips64vr5900el \
-       | mipsisa32 | mipsisa32el \
-       | mipsisa32r2 | mipsisa32r2el \
-       | mipsisa32r6 | mipsisa32r6el \
-       | mipsisa64 | mipsisa64el \
-       | mipsisa64r2 | mipsisa64r2el \
-       | mipsisa64r6 | mipsisa64r6el \
-       | mipsisa64sb1 | mipsisa64sb1el \
-       | mipsisa64sr71k | mipsisa64sr71kel \
-       | mipsr5900 | mipsr5900el \
-       | mipstx39 | mipstx39el \
-       | mn10200 | mn10300 \
-       | moxie \
-       | mt \
-       | msp430 \
-       | nds32 | nds32le | nds32be \
-       | nios | nios2 | nios2eb | nios2el \
-       | ns16k | ns32k \
-       | open8 | or1k | or1knd | or32 \
-       | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle \
-       | pyramid \
-       | riscv32 | riscv64 \
-       | rl78 | rx \
-       | score \
-       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-       | sh64 | sh64le \
-       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-       | spu \
-       | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-       | ubicom32 \
-       | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-       | visium \
-       | we32k \
-       | x86 | xc16x | xstormy16 | xtensa \
-       | z8k | z80)
-               basic_machine=$basic_machine-unknown
-               ;;
-       c54x)
-               basic_machine=tic54x-unknown
-               ;;
-       c55x)
-               basic_machine=tic55x-unknown
-               ;;
-       c6x)
-               basic_machine=tic6x-unknown
-               ;;
-       leon|leon[3-9])
-               basic_machine=sparc-$basic_machine
-               ;;
-       m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
-               basic_machine=$basic_machine-unknown
-               os=-none
+       # Here we handle the default manufacturer of certain CPU types.  It is in
+       # some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               cpu=hppa1.1
+               vendor=winbond
                ;;
-       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+       op50n)
+               cpu=hppa1.1
+               vendor=oki
                ;;
-       ms1)
-               basic_machine=mt-unknown
+       op60c)
+               cpu=hppa1.1
+               vendor=oki
                ;;
-
-       strongarm | thumb | xscale)
-               basic_machine=arm-unknown
+       ibm*)
+               cpu=i370
+               vendor=ibm
                ;;
-       xgate)
-               basic_machine=$basic_machine-unknown
-               os=-none
+       orion105)
+               cpu=clipper
+               vendor=highlevel
                ;;
-       xscaleeb)
-               basic_machine=armeb-unknown
+       mac | mpw | mac-mpw)
+               cpu=m68k
+               vendor=apple
                ;;
-
-       xscaleel)
-               basic_machine=armel-unknown
+       pmac | pmac-mpw)
+               cpu=powerpc
+               vendor=apple
                ;;
 
-       # We use `pc' rather than `unknown'
-       # because (1) that's what they normally are, and
-       # (2) the word "unknown" tends to confuse beginning users.
-       i*86 | x86_64)
-         basic_machine=$basic_machine-pc
-         ;;
-       # Object if more than one company name word.
-       *-*-*)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-       # Recognize the basic CPU types with company name.
-       580-* \
-       | a29k-* \
-       | aarch64-* | aarch64_be-* \
-       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-       | avr-* | avr32-* \
-       | ba-* \
-       | be32-* | be64-* \
-       | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* \
-       | c8051-* | clipper-* | craynv-* | cydra-* \
-       | d10v-* | d30v-* | dlx-* \
-       | e2k-* | elxsi-* \
-       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-       | h8300-* | h8500-* \
-       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-       | hexagon-* \
-       | i*86-* | i860-* | i960-* | ia64-* \
-       | ip2k-* | iq2000-* \
-       | k1om-* \
-       | le32-* | le64-* \
-       | lm32-* \
-       | m32c-* | m32r-* | m32rle-* \
-       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-       | microblaze-* | microblazeel-* \
-       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-       | mips16-* \
-       | mips64-* | mips64el-* \
-       | mips64octeon-* | mips64octeonel-* \
-       | mips64orion-* | mips64orionel-* \
-       | mips64r5900-* | mips64r5900el-* \
-       | mips64vr-* | mips64vrel-* \
-       | mips64vr4100-* | mips64vr4100el-* \
-       | mips64vr4300-* | mips64vr4300el-* \
-       | mips64vr5000-* | mips64vr5000el-* \
-       | mips64vr5900-* | mips64vr5900el-* \
-       | mipsisa32-* | mipsisa32el-* \
-       | mipsisa32r2-* | mipsisa32r2el-* \
-       | mipsisa32r6-* | mipsisa32r6el-* \
-       | mipsisa64-* | mipsisa64el-* \
-       | mipsisa64r2-* | mipsisa64r2el-* \
-       | mipsisa64r6-* | mipsisa64r6el-* \
-       | mipsisa64sb1-* | mipsisa64sb1el-* \
-       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-       | mipsr5900-* | mipsr5900el-* \
-       | mipstx39-* | mipstx39el-* \
-       | mmix-* \
-       | mt-* \
-       | msp430-* \
-       | nds32-* | nds32le-* | nds32be-* \
-       | nios-* | nios2-* | nios2eb-* | nios2el-* \
-       | none-* | np1-* | ns16k-* | ns32k-* \
-       | open8-* \
-       | or1k*-* \
-       | orion-* \
-       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-       | pyramid-* \
-       | riscv32-* | riscv64-* \
-       | rl78-* | romp-* | rs6000-* | rx-* \
-       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-       | sparclite-* \
-       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
-       | tahoe-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-       | tile*-* \
-       | tron-* \
-       | ubicom32-* \
-       | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-       | vax-* \
-       | visium-* \
-       | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* \
-       | xstormy16-* | xtensa*-* \
-       | ymp-* \
-       | z8k-* | z80-*)
-               ;;
-       # Recognize the basic CPU types without company name, with glob match.
-       xtensa*)
-               basic_machine=$basic_machine-unknown
-               ;;
        # Recognize the various machine names and aliases which stand
        # for a CPU type and a company and sometimes even an OS.
-       386bsd)
-               basic_machine=i386-unknown
-               os=-bsd
-               ;;
        3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-               basic_machine=m68000-att
+               cpu=m68000
+               vendor=att
                ;;
        3b*)
-               basic_machine=we32k-att
-               ;;
-       a29khif)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       abacus)
-               basic_machine=abacus-unknown
-               ;;
-       adobe68k)
-               basic_machine=m68010-adobe
-               os=-scout
-               ;;
-       alliant | fx80)
-               basic_machine=fx80-alliant
-               ;;
-       altos | altos3068)
-               basic_machine=m68k-altos
-               ;;
-       am29k)
-               basic_machine=a29k-none
-               os=-bsd
-               ;;
-       amd64)
-               basic_machine=x86_64-pc
-               ;;
-       amd64-*)
-               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       amdahl)
-               basic_machine=580-amdahl
-               os=-sysv
-               ;;
-       amiga | amiga-*)
-               basic_machine=m68k-unknown
-               ;;
-       amigaos | amigados)
-               basic_machine=m68k-unknown
-               os=-amigaos
-               ;;
-       amigaunix | amix)
-               basic_machine=m68k-unknown
-               os=-sysv4
-               ;;
-       apollo68)
-               basic_machine=m68k-apollo
-               os=-sysv
-               ;;
-       apollo68bsd)
-               basic_machine=m68k-apollo
-               os=-bsd
-               ;;
-       aros)
-               basic_machine=i386-pc
-               os=-aros
-               ;;
-       asmjs)
-               basic_machine=asmjs-unknown
-               ;;
-       aux)
-               basic_machine=m68k-apple
-               os=-aux
-               ;;
-       balance)
-               basic_machine=ns32k-sequent
-               os=-dynix
-               ;;
-       blackfin)
-               basic_machine=bfin-unknown
-               os=-linux
-               ;;
-       blackfin-*)
-               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
+               cpu=we32k
+               vendor=att
                ;;
        bluegene*)
-               basic_machine=powerpc-ibm
-               os=-cnk
-               ;;
-       c54x-*)
-               basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c55x-*)
-               basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c6x-*)
-               basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c90)
-               basic_machine=c90-cray
-               os=-unicos
-               ;;
-       cegcc)
-               basic_machine=arm-unknown
-               os=-cegcc
-               ;;
-       convex-c1)
-               basic_machine=c1-convex
-               os=-bsd
-               ;;
-       convex-c2)
-               basic_machine=c2-convex
-               os=-bsd
-               ;;
-       convex-c32)
-               basic_machine=c32-convex
-               os=-bsd
-               ;;
-       convex-c34)
-               basic_machine=c34-convex
-               os=-bsd
-               ;;
-       convex-c38)
-               basic_machine=c38-convex
-               os=-bsd
-               ;;
-       cray | j90)
-               basic_machine=j90-cray
-               os=-unicos
-               ;;
-       craynv)
-               basic_machine=craynv-cray
-               os=-unicosmp
-               ;;
-       cr16 | cr16-*)
-               basic_machine=cr16-unknown
-               os=-elf
-               ;;
-       crds | unos)
-               basic_machine=m68k-crds
-               ;;
-       crisv32 | crisv32-* | etraxfs*)
-               basic_machine=crisv32-axis
-               ;;
-       cris | cris-* | etrax*)
-               basic_machine=cris-axis
-               ;;
-       crx)
-               basic_machine=crx-unknown
-               os=-elf
-               ;;
-       da30 | da30-*)
-               basic_machine=m68k-da30
-               ;;
-       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-               basic_machine=mips-dec
+               cpu=powerpc
+               vendor=ibm
+               os=cnk
                ;;
        decsystem10* | dec10*)
-               basic_machine=pdp10-dec
-               os=-tops10
+               cpu=pdp10
+               vendor=dec
+               os=tops10
                ;;
        decsystem20* | dec20*)
-               basic_machine=pdp10-dec
-               os=-tops20
+               cpu=pdp10
+               vendor=dec
+               os=tops20
                ;;
        delta | 3300 | motorola-3300 | motorola-delta \
              | 3300-motorola | delta-motorola)
-               basic_machine=m68k-motorola
-               ;;
-       delta88)
-               basic_machine=m88k-motorola
-               os=-sysv3
-               ;;
-       dicos)
-               basic_machine=i686-pc
-               os=-dicos
-               ;;
-       djgpp)
-               basic_machine=i586-pc
-               os=-msdosdjgpp
-               ;;
-       dpx20 | dpx20-*)
-               basic_machine=rs6000-bull
-               os=-bosx
-               ;;
-       dpx2* | dpx2*-bull)
-               basic_machine=m68k-bull
-               os=-sysv3
-               ;;
-       e500v[12])
-               basic_machine=powerpc-unknown
-               os=$os"spe"
-               ;;
-       e500v[12]-*)
-               basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=$os"spe"
+               cpu=m68k
+               vendor=motorola
                ;;
-       ebmon29k)
-               basic_machine=a29k-amd
-               os=-ebmon
-               ;;
-       elxsi)
-               basic_machine=elxsi-elxsi
-               os=-bsd
+       dpx2*)
+               cpu=m68k
+               vendor=bull
+               os=sysv3
                ;;
        encore | umax | mmax)
-               basic_machine=ns32k-encore
+               cpu=ns32k
+               vendor=encore
                ;;
-       es1800 | OSE68k | ose68k | ose | OSE)
-               basic_machine=m68k-ericsson
-               os=-ose
+       elxsi)
+               cpu=elxsi
+               vendor=elxsi
+               os=${os:-bsd}
                ;;
        fx2800)
-               basic_machine=i860-alliant
+               cpu=i860
+               vendor=alliant
                ;;
        genix)
-               basic_machine=ns32k-ns
-               ;;
-       gmicro)
-               basic_machine=tron-gmicro
-               os=-sysv
-               ;;
-       go32)
-               basic_machine=i386-pc
-               os=-go32
+               cpu=ns32k
+               vendor=ns
                ;;
        h3050r* | hiux*)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       h8300hms)
-               basic_machine=h8300-hitachi
-               os=-hms
-               ;;
-       h8300xray)
-               basic_machine=h8300-hitachi
-               os=-xray
-               ;;
-       h8500hms)
-               basic_machine=h8500-hitachi
-               os=-hms
-               ;;
-       harris)
-               basic_machine=m88k-harris
-               os=-sysv3
-               ;;
-       hp300-*)
-               basic_machine=m68k-hp
-               ;;
-       hp300bsd)
-               basic_machine=m68k-hp
-               os=-bsd
-               ;;
-       hp300hpux)
-               basic_machine=m68k-hp
-               os=-hpux
+               cpu=hppa1.1
+               vendor=hitachi
+               os=hiuxwe2
                ;;
        hp3k9[0-9][0-9] | hp9[0-9][0-9])
-               basic_machine=hppa1.0-hp
+               cpu=hppa1.0
+               vendor=hp
                ;;
        hp9k2[0-9][0-9] | hp9k31[0-9])
-               basic_machine=m68000-hp
+               cpu=m68000
+               vendor=hp
                ;;
        hp9k3[2-9][0-9])
-               basic_machine=m68k-hp
+               cpu=m68k
+               vendor=hp
                ;;
        hp9k6[0-9][0-9] | hp6[0-9][0-9])
-               basic_machine=hppa1.0-hp
+               cpu=hppa1.0
+               vendor=hp
                ;;
        hp9k7[0-79][0-9] | hp7[0-79][0-9])
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k78[0-9] | hp78[0-9])
                # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
                # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k8[0-9][13679] | hp8[0-9][13679])
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k8[0-9][0-9] | hp8[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hppa-next)
-               os=-nextstep3
-               ;;
-       hppaosf)
-               basic_machine=hppa1.1-hp
-               os=-osf
-               ;;
-       hppro)
-               basic_machine=hppa1.1-hp
-               os=-proelf
-               ;;
-       i370-ibm* | ibm*)
-               basic_machine=i370-ibm
+               cpu=hppa1.0
+               vendor=hp
                ;;
        i*86v32)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv32
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=sysv32
                ;;
        i*86v4*)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv4
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=sysv4
                ;;
        i*86v)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=sysv
                ;;
        i*86sol2)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-solaris2
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=solaris2
                ;;
-       i386mach)
-               basic_machine=i386-mach
-               os=-mach
-               ;;
-       i386-vsta | vsta)
-               basic_machine=i386-unknown
-               os=-vsta
+       j90 | j90-cray)
+               cpu=j90
+               vendor=cray
+               os=${os:-unicos}
                ;;
        iris | iris4d)
-               basic_machine=mips-sgi
+               cpu=mips
+               vendor=sgi
                case $os in
-                   -irix*)
+                   irix*)
                        ;;
                    *)
-                       os=-irix4
+                       os=irix4
                        ;;
                esac
                ;;
-       isi68 | isi)
-               basic_machine=m68k-isi
-               os=-sysv
-               ;;
-       leon-*|leon[3-9]-*)
-               basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
-               ;;
-       m68knommu)
-               basic_machine=m68k-unknown
-               os=-linux
-               ;;
-       m68knommu-*)
-               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       m88k-omron*)
-               basic_machine=m88k-omron
-               ;;
-       magnum | m3230)
-               basic_machine=mips-mips
-               os=-sysv
-               ;;
-       merlin)
-               basic_machine=ns32k-utek
-               os=-sysv
-               ;;
-       microblaze*)
-               basic_machine=microblaze-xilinx
-               ;;
-       mingw64)
-               basic_machine=x86_64-pc
-               os=-mingw64
-               ;;
-       mingw32)
-               basic_machine=i686-pc
-               os=-mingw32
-               ;;
-       mingw32ce)
-               basic_machine=arm-unknown
-               os=-mingw32ce
-               ;;
        miniframe)
-               basic_machine=m68000-convergent
-               ;;
-       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-       mips3*-*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-               ;;
-       mips3*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-               ;;
-       monitor)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       morphos)
-               basic_machine=powerpc-unknown
-               os=-morphos
-               ;;
-       moxiebox)
-               basic_machine=moxie-unknown
-               os=-moxiebox
-               ;;
-       msdos)
-               basic_machine=i386-pc
-               os=-msdos
-               ;;
-       ms1-*)
-               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-               ;;
-       msys)
-               basic_machine=i686-pc
-               os=-msys
-               ;;
-       mvs)
-               basic_machine=i370-ibm
-               os=-mvs
+               cpu=m68000
+               vendor=convergent
                ;;
-       nacl)
-               basic_machine=le32-unknown
-               os=-nacl
-               ;;
-       ncr3000)
-               basic_machine=i486-ncr
-               os=-sysv4
-               ;;
-       netbsd386)
-               basic_machine=i386-unknown
-               os=-netbsd
-               ;;
-       netwinder)
-               basic_machine=armv4l-rebel
-               os=-linux
-               ;;
-       news | news700 | news800 | news900)
-               basic_machine=m68k-sony
-               os=-newsos
-               ;;
-       news1000)
-               basic_machine=m68030-sony
-               os=-newsos
+       *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               cpu=m68k
+               vendor=atari
+               os=mint
                ;;
        news-3600 | risc-news)
-               basic_machine=mips-sony
-               os=-newsos
-               ;;
-       necv70)
-               basic_machine=v70-nec
-               os=-sysv
+               cpu=mips
+               vendor=sony
+               os=newsos
                ;;
-       next | m*-next )
-               basic_machine=m68k-next
+       next | m*-next)
+               cpu=m68k
+               vendor=next
                case $os in
-                   -nextstep* )
+                   openstep*)
+                       ;;
+                   nextstep*)
                        ;;
-                   -ns2*)
-                     os=-nextstep2
+                   ns2*)
+                     os=nextstep2
                        ;;
                    *)
-                     os=-nextstep3
+                     os=nextstep3
                        ;;
                esac
                ;;
-       nh3000)
-               basic_machine=m68k-harris
-               os=-cxux
-               ;;
-       nh[45]000)
-               basic_machine=m88k-harris
-               os=-cxux
-               ;;
-       nindy960)
-               basic_machine=i960-intel
-               os=-nindy
-               ;;
-       mon960)
-               basic_machine=i960-intel
-               os=-mon960
-               ;;
-       nonstopux)
-               basic_machine=mips-compaq
-               os=-nonstopux
-               ;;
        np1)
-               basic_machine=np1-gould
-               ;;
-       neo-tandem)
-               basic_machine=neo-tandem
-               ;;
-       nse-tandem)
-               basic_machine=nse-tandem
-               ;;
-       nsr-tandem)
-               basic_machine=nsr-tandem
+               cpu=np1
+               vendor=gould
                ;;
        op50n-* | op60c-*)
-               basic_machine=hppa1.1-oki
-               os=-proelf
-               ;;
-       openrisc | openrisc-*)
-               basic_machine=or32-unknown
-               ;;
-       os400)
-               basic_machine=powerpc-ibm
-               os=-os400
-               ;;
-       OSE68000 | ose68000)
-               basic_machine=m68000-ericsson
-               os=-ose
-               ;;
-       os68k)
-               basic_machine=m68k-none
-               os=-os68k
+               cpu=hppa1.1
+               vendor=oki
+               os=proelf
                ;;
        pa-hitachi)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       paragon)
-               basic_machine=i860-intel
-               os=-osf
-               ;;
-       parisc)
-               basic_machine=hppa-unknown
-               os=-linux
-               ;;
-       parisc-*)
-               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
+               cpu=hppa1.1
+               vendor=hitachi
+               os=hiuxwe2
                ;;
        pbd)
-               basic_machine=sparc-tti
+               cpu=sparc
+               vendor=tti
                ;;
        pbb)
-               basic_machine=m68k-tti
-               ;;
-       pc532 | pc532-*)
-               basic_machine=ns32k-pc532
+               cpu=m68k
+               vendor=tti
                ;;
-       pc98)
-               basic_machine=i386-pc
-               ;;
-       pc98-*)
-               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium | p5 | k5 | k6 | nexgen | viac3)
-               basic_machine=i586-pc
-               ;;
-       pentiumpro | p6 | 6x86 | athlon | athlon_*)
-               basic_machine=i686-pc
-               ;;
-       pentiumii | pentium2 | pentiumiii | pentium3)
-               basic_machine=i686-pc
-               ;;
-       pentium4)
-               basic_machine=i786-pc
-               ;;
-       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumpro-* | p6-* | 6x86-* | athlon-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium4-*)
-               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+       pc532)
+               cpu=ns32k
+               vendor=pc532
                ;;
        pn)
-               basic_machine=pn-gould
+               cpu=pn
+               vendor=gould
                ;;
-       power)  basic_machine=power-ibm
-               ;;
-       ppc | ppcbe)    basic_machine=powerpc-unknown
-               ;;
-       ppc-* | ppcbe-*)
-               basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppcle | powerpclittle)
-               basic_machine=powerpcle-unknown
-               ;;
-       ppcle-* | powerpclittle-*)
-               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64)  basic_machine=powerpc64-unknown
-               ;;
-       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64le | powerpc64little)
-               basic_machine=powerpc64le-unknown
-               ;;
-       ppc64le-* | powerpc64little-*)
-               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+       power)
+               cpu=power
+               vendor=ibm
                ;;
        ps2)
-               basic_machine=i386-ibm
-               ;;
-       pw32)
-               basic_machine=i586-unknown
-               os=-pw32
-               ;;
-       rdos | rdos64)
-               basic_machine=x86_64-pc
-               os=-rdos
-               ;;
-       rdos32)
-               basic_machine=i386-pc
-               os=-rdos
-               ;;
-       rom68k)
-               basic_machine=m68k-rom68k
-               os=-coff
+               cpu=i386
+               vendor=ibm
                ;;
        rm[46]00)
-               basic_machine=mips-siemens
+               cpu=mips
+               vendor=siemens
                ;;
        rtpc | rtpc-*)
-               basic_machine=romp-ibm
-               ;;
-       s390 | s390-*)
-               basic_machine=s390-ibm
-               ;;
-       s390x | s390x-*)
-               basic_machine=s390x-ibm
+               cpu=romp
+               vendor=ibm
                ;;
-       sa29200)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       sb1)
-               basic_machine=mipsisa64sb1-unknown
+       sde)
+               cpu=mipsisa32
+               vendor=sde
+               os=${os:-elf}
                ;;
-       sb1el)
-               basic_machine=mipsisa64sb1el-unknown
+       simso-wrs)
+               cpu=sparclite
+               vendor=wrs
+               os=vxworks
                ;;
-       sde)
-               basic_machine=mipsisa32-sde
-               os=-elf
+       tower | tower-32)
+               cpu=m68k
+               vendor=ncr
                ;;
-       sei)
-               basic_machine=mips-sei
-               os=-seiux
+       vpp*|vx|vx-*)
+               cpu=f301
+               vendor=fujitsu
                ;;
-       sequent)
-               basic_machine=i386-sequent
+       w65)
+               cpu=w65
+               vendor=wdc
                ;;
-       sh)
-               basic_machine=sh-hitachi
-               os=-hms
+       w89k-*)
+               cpu=hppa1.1
+               vendor=winbond
+               os=proelf
                ;;
-       sh5el)
-               basic_machine=sh5le-unknown
+       none)
+               cpu=none
+               vendor=none
                ;;
-       sh64)
-               basic_machine=sh64-unknown
+       leon|leon[3-9])
+               cpu=sparc
+               vendor=$basic_machine
                ;;
-       sparclite-wrs | simso-wrs)
-               basic_machine=sparclite-wrs
-               os=-vxworks
+       leon-*|leon[3-9]-*)
+               cpu=sparc
+               vendor=`echo "$basic_machine" | sed 's/-.*//'`
                ;;
-       sps7)
-               basic_machine=m68k-bull
-               os=-sysv2
+
+       *-*)
+               # shellcheck disable=SC2162
+               IFS="-" read cpu vendor <<EOF
+$basic_machine
+EOF
                ;;
-       spur)
-               basic_machine=spur-unknown
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+               cpu=$basic_machine
+               vendor=pc
                ;;
-       st2000)
-               basic_machine=m68k-tandem
+       # These rules are duplicated from below for sake of the special case above;
+       # i.e. things that normalized to x86 arches should also default to "pc"
+       pc98)
+               cpu=i386
+               vendor=pc
                ;;
-       stratus)
-               basic_machine=i860-stratus
-               os=-sysv4
+       x64 | amd64)
+               cpu=x86_64
+               vendor=pc
                ;;
-       strongarm-* | thumb-*)
-               basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+       # Recognize the basic CPU types without company name.
+       *)
+               cpu=$basic_machine
+               vendor=unknown
                ;;
-       sun2)
-               basic_machine=m68000-sun
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+       # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
+       # some cases the only manufacturer, in others, it is the most popular.
+       craynv-unknown)
+               vendor=cray
+               os=${os:-unicosmp}
                ;;
-       sun2os3)
-               basic_machine=m68000-sun
-               os=-sunos3
+       c90-unknown | c90-cray)
+               vendor=cray
+               os=${os:-unicos}
                ;;
-       sun2os4)
-               basic_machine=m68000-sun
-               os=-sunos4
+       fx80-unknown)
+               vendor=alliant
                ;;
-       sun3os3)
-               basic_machine=m68k-sun
-               os=-sunos3
+       romp-unknown)
+               vendor=ibm
                ;;
-       sun3os4)
-               basic_machine=m68k-sun
-               os=-sunos4
+       mmix-unknown)
+               vendor=knuth
                ;;
-       sun4os3)
-               basic_machine=sparc-sun
-               os=-sunos3
+       microblaze-unknown | microblazeel-unknown)
+               vendor=xilinx
                ;;
-       sun4os4)
-               basic_machine=sparc-sun
-               os=-sunos4
+       rs6000-unknown)
+               vendor=ibm
                ;;
-       sun4sol2)
-               basic_machine=sparc-sun
-               os=-solaris2
+       vax-unknown)
+               vendor=dec
                ;;
-       sun3 | sun3-*)
-               basic_machine=m68k-sun
+       pdp11-unknown)
+               vendor=dec
                ;;
-       sun4)
-               basic_machine=sparc-sun
+       we32k-unknown)
+               vendor=att
                ;;
-       sun386 | sun386i | roadrunner)
-               basic_machine=i386-sun
+       cydra-unknown)
+               vendor=cydrome
                ;;
-       sv1)
-               basic_machine=sv1-cray
-               os=-unicos
+       i370-ibm*)
+               vendor=ibm
                ;;
-       symmetry)
-               basic_machine=i386-sequent
-               os=-dynix
+       orion-unknown)
+               vendor=highlevel
                ;;
-       t3e)
-               basic_machine=alphaev5-cray
-               os=-unicos
+       xps-unknown | xps100-unknown)
+               cpu=xps100
+               vendor=honeywell
                ;;
-       t90)
-               basic_machine=t90-cray
-               os=-unicos
+
+       # Here we normalize CPU types with a missing or matching vendor
+       dpx20-unknown | dpx20-bull)
+               cpu=rs6000
+               vendor=bull
+               os=${os:-bosx}
                ;;
-       tile*)
-               basic_machine=$basic_machine-unknown
-               os=-linux-gnu
+
+       # Here we normalize CPU types irrespective of the vendor
+       amd64-*)
+               cpu=x86_64
                ;;
-       tx39)
-               basic_machine=mipstx39-unknown
+       blackfin-*)
+               cpu=bfin
+               os=linux
                ;;
-       tx39el)
-               basic_machine=mipstx39el-unknown
+       c54x-*)
+               cpu=tic54x
                ;;
-       toad1)
-               basic_machine=pdp10-xkl
-               os=-tops20
+       c55x-*)
+               cpu=tic55x
                ;;
-       tower | tower-32)
-               basic_machine=m68k-ncr
+       c6x-*)
+               cpu=tic6x
                ;;
-       tpf)
-               basic_machine=s390x-ibm
-               os=-tpf
+       e500v[12]-*)
+               cpu=powerpc
+               os=$os"spe"
                ;;
-       udi29k)
-               basic_machine=a29k-amd
-               os=-udi
+       mips3*-*)
+               cpu=mips64
                ;;
-       ultra3)
-               basic_machine=a29k-nyu
-               os=-sym1
+       ms1-*)
+               cpu=mt
                ;;
-       v810 | necv810)
-               basic_machine=v810-nec
-               os=-none
+       m68knommu-*)
+               cpu=m68k
+               os=linux
                ;;
-       vaxv)
-               basic_machine=vax-dec
-               os=-sysv
+       m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+               cpu=s12z
                ;;
-       vms)
-               basic_machine=vax-dec
-               os=-vms
+       openrisc-*)
+               cpu=or32
                ;;
-       vpp*|vx|vx-*)
-               basic_machine=f301-fujitsu
+       parisc-*)
+               cpu=hppa
+               os=linux
                ;;
-       vxworks960)
-               basic_machine=i960-wrs
-               os=-vxworks
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               cpu=i586
                ;;
-       vxworks68)
-               basic_machine=m68k-wrs
-               os=-vxworks
+       pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+               cpu=i686
                ;;
-       vxworks29k)
-               basic_machine=a29k-wrs
-               os=-vxworks
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               cpu=i686
                ;;
-       w65*)
-               basic_machine=w65-wdc
-               os=-none
+       pentium4-*)
+               cpu=i786
                ;;
-       w89k-*)
-               basic_machine=hppa1.1-winbond
-               os=-proelf
+       pc98-*)
+               cpu=i386
                ;;
-       xbox)
-               basic_machine=i686-pc
-               os=-mingw32
+       ppc-* | ppcbe-*)
+               cpu=powerpc
                ;;
-       xps | xps100)
-               basic_machine=xps100-honeywell
+       ppcle-* | powerpclittle-*)
+               cpu=powerpcle
                ;;
-       xscale-* | xscalee[bl]-*)
-               basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+       ppc64-*)
+               cpu=powerpc64
                ;;
-       ymp)
-               basic_machine=ymp-cray
-               os=-unicos
+       ppc64le-* | powerpc64little-*)
+               cpu=powerpc64le
                ;;
-       z8k-*-coff)
-               basic_machine=z8k-unknown
-               os=-sim
+       sb1-*)
+               cpu=mipsisa64sb1
                ;;
-       z80-*-coff)
-               basic_machine=z80-unknown
-               os=-sim
+       sb1el-*)
+               cpu=mipsisa64sb1el
                ;;
-       none)
-               basic_machine=none-none
-               os=-none
+       sh5e[lb]-*)
+               cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
                ;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-       w89k)
-               basic_machine=hppa1.1-winbond
+       spur-*)
+               cpu=spur
                ;;
-       op50n)
-               basic_machine=hppa1.1-oki
+       strongarm-* | thumb-*)
+               cpu=arm
                ;;
-       op60c)
-               basic_machine=hppa1.1-oki
+       tx39-*)
+               cpu=mipstx39
                ;;
-       romp)
-               basic_machine=romp-ibm
+       tx39el-*)
+               cpu=mipstx39el
                ;;
-       mmix)
-               basic_machine=mmix-knuth
+       x64-*)
+               cpu=x86_64
                ;;
-       rs6000)
-               basic_machine=rs6000-ibm
+       xscale-* | xscalee[bl]-*)
+               cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
                ;;
-       vax)
-               basic_machine=vax-dec
+
+       # Recognize the canonical CPU Types that limit and/or modify the
+       # company names they are paired with.
+       cr16-*)
+               os=${os:-elf}
                ;;
-       pdp10)
-               # there are many clones, so DEC is not a safe bet
-               basic_machine=pdp10-unknown
+       crisv32-* | etraxfs*-*)
+               cpu=crisv32
+               vendor=axis
                ;;
-       pdp11)
-               basic_machine=pdp11-dec
+       cris-* | etrax*-*)
+               cpu=cris
+               vendor=axis
                ;;
-       we32k)
-               basic_machine=we32k-att
+       crx-*)
+               os=${os:-elf}
                ;;
-       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-               basic_machine=sh-unknown
+       neo-tandem)
+               cpu=neo
+               vendor=tandem
                ;;
-       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-               basic_machine=sparc-sun
+       nse-tandem)
+               cpu=nse
+               vendor=tandem
                ;;
-       cydra)
-               basic_machine=cydra-cydrome
+       nsr-tandem)
+               cpu=nsr
+               vendor=tandem
                ;;
-       orion)
-               basic_machine=orion-highlevel
+       nsv-tandem)
+               cpu=nsv
+               vendor=tandem
                ;;
-       orion105)
-               basic_machine=clipper-highlevel
+       nsx-tandem)
+               cpu=nsx
+               vendor=tandem
                ;;
-       mac | mpw | mac-mpw)
-               basic_machine=m68k-apple
+       s390-*)
+               cpu=s390
+               vendor=ibm
                ;;
-       pmac | pmac-mpw)
-               basic_machine=powerpc-apple
+       s390x-*)
+               cpu=s390x
+               vendor=ibm
                ;;
-       *-unknown)
-               # Make sure to match an already-canonicalized machine name.
+       tile*-*)
+               os=${os:-linux-gnu}
                ;;
+
        *)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
+               # Recognize the canonical CPU types that are allowed with any
+               # company name.
+               case $cpu in
+                       1750a | 580 \
+                       | a29k \
+                       | aarch64 | aarch64_be \
+                       | abacus \
+                       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+                       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+                       | alphapca5[67] | alpha64pca5[67] \
+                       | am33_2.0 \
+                       | amdgcn \
+                       | arc | arceb \
+                       | arm  | arm[lb]e | arme[lb] | armv* \
+                       | avr | avr32 \
+                       | asmjs \
+                       | ba \
+                       | be32 | be64 \
+                       | bfin | bpf | bs2000 \
+                       | c[123]* | c30 | [cjt]90 | c4x \
+                       | c8051 | clipper | craynv | csky | cydra \
+                       | d10v | d30v | dlx | dsp16xx \
+                       | e2k | elxsi | epiphany \
+                       | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+                       | h8300 | h8500 \
+                       | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+                       | hexagon \
+                       | i370 | i*86 | i860 | i960 | ia16 | ia64 \
+                       | ip2k | iq2000 \
+                       | k1om \
+                       | le32 | le64 \
+                       | lm32 \
+                       | m32c | m32r | m32rle \
+                       | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
+                       | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
+                       | m88110 | m88k | maxq | mb | mcore | mep | metag \
+                       | microblaze | microblazeel \
+                       | mips | mipsbe | mipseb | mipsel | mipsle \
+                       | mips16 \
+                       | mips64 | mips64eb | mips64el \
+                       | mips64octeon | mips64octeonel \
+                       | mips64orion | mips64orionel \
+                       | mips64r5900 | mips64r5900el \
+                       | mips64vr | mips64vrel \
+                       | mips64vr4100 | mips64vr4100el \
+                       | mips64vr4300 | mips64vr4300el \
+                       | mips64vr5000 | mips64vr5000el \
+                       | mips64vr5900 | mips64vr5900el \
+                       | mipsisa32 | mipsisa32el \
+                       | mipsisa32r2 | mipsisa32r2el \
+                       | mipsisa32r6 | mipsisa32r6el \
+                       | mipsisa64 | mipsisa64el \
+                       | mipsisa64r2 | mipsisa64r2el \
+                       | mipsisa64r6 | mipsisa64r6el \
+                       | mipsisa64sb1 | mipsisa64sb1el \
+                       | mipsisa64sr71k | mipsisa64sr71kel \
+                       | mipsr5900 | mipsr5900el \
+                       | mipstx39 | mipstx39el \
+                       | mmix \
+                       | mn10200 | mn10300 \
+                       | moxie \
+                       | mt \
+                       | msp430 \
+                       | nds32 | nds32le | nds32be \
+                       | nfp \
+                       | nios | nios2 | nios2eb | nios2el \
+                       | none | np1 | ns16k | ns32k | nvptx \
+                       | open8 \
+                       | or1k* \
+                       | or32 \
+                       | orion \
+                       | picochip \
+                       | pdp10 | pdp11 | pj | pjl | pn | power \
+                       | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+                       | pru \
+                       | pyramid \
+                       | riscv | riscv32 | riscv64 \
+                       | rl78 | romp | rs6000 | rx \
+                       | score \
+                       | sh | shl \
+                       | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+                       | sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+                       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+                       | sparclite \
+                       | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+                       | spu \
+                       | tahoe \
+                       | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+                       | tron \
+                       | ubicom32 \
+                       | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+                       | vax \
+                       | visium \
+                       | w65 \
+                       | wasm32 | wasm64 \
+                       | we32k \
+                       | x86 | x86_64 | xc16x | xgate | xps100 \
+                       | xstormy16 | xtensa* \
+                       | ymp \
+                       | z8k | z80)
+                               ;;
+
+                       *)
+                               echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+                               exit 1
+                               ;;
+               esac
                ;;
 esac
 
 # Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-       *-digital*)
-               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+case $vendor in
+       digital*)
+               vendor=dec
                ;;
-       *-commodore*)
-               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+       commodore*)
+               vendor=cbm
                ;;
        *)
                ;;
@@ -1353,200 +1275,244 @@ esac
 
 # Decode manufacturer-specific aliases for certain operating systems.
 
-if [ x"$os" != x"" ]
+if [ x$os != x ]
 then
 case $os in
-       # First match some system type aliases
-       # that might get confused with valid system types.
-       # -solaris* is a basic system type, with this one exception.
-       -auroraux)
-               os=-auroraux
+       # First match some system type aliases that might get confused
+       # with valid system types.
+       # solaris* is a basic system type, with this one exception.
+       auroraux)
+               os=auroraux
                ;;
-       -solaris1 | -solaris1.*)
-               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+       bluegene*)
+               os=cnk
                ;;
-       -solaris)
-               os=-solaris2
+       solaris1 | solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
                ;;
-       -svr4*)
-               os=-sysv4
+       solaris)
+               os=solaris2
                ;;
-       -unixware*)
-               os=-sysv4.2uw
+       unixware*)
+               os=sysv4.2uw
                ;;
-       -gnu/linux*)
+       gnu/linux*)
                os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
                ;;
-       # First accept the basic system types.
+       # es1800 is here to avoid being matched by es* (a different OS)
+       es1800*)
+               os=ose
+               ;;
+       # Some version numbers need modification
+       chorusos*)
+               os=chorusos
+               ;;
+       isc)
+               os=isc2.2
+               ;;
+       sco6)
+               os=sco5v6
+               ;;
+       sco5)
+               os=sco3.2v5
+               ;;
+       sco4)
+               os=sco3.2v4
+               ;;
+       sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               ;;
+       sco3.2v[4-9]* | sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               ;;
+       scout)
+               # Don't match below
+               ;;
+       sco*)
+               os=sco3.2v2
+               ;;
+       psos*)
+               os=psos
+               ;;
+       # Now accept the basic system types.
        # The portable systems comes first.
-       # Each alternative MUST END IN A *, to match a version number.
-       # -sysv* is not here because it comes later, after sysvr4.
-       -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* | -plan9* \
-             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* | -aros* | -cloudabi* | -sortix* \
-             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
-             | -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* \
-             | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-             | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-             | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-             | -onefs* | -tirtos* | -phoenix*)
+       # Each alternative MUST end in a * to match a version number.
+       # sysv* is not here because it comes later, after sysvr4.
+       gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+            | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\
+            | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+            | sym* | kopensolaris* | plan9* \
+            | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+            | aos* | aros* | cloudabi* | sortix* | twizzler* \
+            | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+            | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+            | knetbsd* | mirbsd* | netbsd* \
+            | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
+            | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
+            | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+            | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+            | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \
+            | chorusrdb* | cegcc* | glidix* \
+            | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+            | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \
+            | linux-newlib* | linux-musl* | linux-uclibc* \
+            | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+            | interix* | uwin* | mks* | rhapsody* | darwin* \
+            | openstep* | oskit* | conix* | pw32* | nonstopux* \
+            | storm-chaos* | tops10* | tenex* | tops20* | its* \
+            | os2* | vos* | palmos* | uclinux* | nucleus* \
+            | morphos* | superux* | rtmk* | windiss* \
+            | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+            | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+            | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+            | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+            | nsk* | powerunix)
        # Remember, each alternative MUST END IN *, to match a version number.
                ;;
-       -qnx*)
-               case $basic_machine in
-                   x86-* | i*86-*)
+       qnx*)
+               case $cpu in
+                   x86 | i*86)
                        ;;
                    *)
-                       os=-nto$os
+                       os=nto-$os
                        ;;
                esac
                ;;
-       -nto-qnx*)
+       hiux*)
+               os=hiuxwe2
                ;;
-       -nto*)
-               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+       nto-qnx*)
                ;;
-       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+       nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
                ;;
-       -mac*)
-               os=`echo $os | sed -e 's|mac|macos|'`
+       sim | xray | os68k* | v88r* \
+           | windows* | osx | abug | netware* | os9* \
+           | macos* | mpw* | magic* | mmixware* | mon960* | lnews*)
                ;;
-       -linux-dietlibc)
-               os=-linux-dietlibc
+       linux-dietlibc)
+               os=linux-dietlibc
                ;;
-       -linux*)
+       linux*)
                os=`echo $os | sed -e 's|linux|linux-gnu|'`
                ;;
-       -sunos5*)
-               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+       lynx*178)
+               os=lynxos178
+               ;;
+       lynx*5)
+               os=lynxos5
                ;;
-       -sunos6*)
-               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+       lynx*)
+               os=lynxos
                ;;
-       -opened*)
-               os=-openedition
+       mac*)
+               os=`echo "$os" | sed -e 's|mac|macos|'`
                ;;
-       -os400*)
-               os=-os400
+       opened*)
+               os=openedition
                ;;
-       -wince*)
-               os=-wince
+       os400*)
+               os=os400
                ;;
-       -osfrose*)
-               os=-osfrose
+       sunos5*)
+               os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
                ;;
-       -osf*)
-               os=-osf
+       sunos6*)
+               os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
                ;;
-       -utek*)
-               os=-bsd
+       wince*)
+               os=wince
                ;;
-       -dynix*)
-               os=-bsd
+       utek*)
+               os=bsd
                ;;
-       -acis*)
-               os=-aos
+       dynix*)
+               os=bsd
                ;;
-       -atheos*)
-               os=-atheos
+       acis*)
+               os=aos
                ;;
-       -syllable*)
-               os=-syllable
+       atheos*)
+               os=atheos
                ;;
-       -386bsd)
-               os=-bsd
+       syllable*)
+               os=syllable
                ;;
-       -ctix* | -uts*)
-               os=-sysv
+       386bsd)
+               os=bsd
                ;;
-       -nova*)
-               os=-rtmk-nova
+       ctix* | uts*)
+               os=sysv
                ;;
-       -ns2 )
-               os=-nextstep2
+       nova*)
+               os=rtmk-nova
                ;;
-       -nsk*)
-               os=-nsk
+       ns2)
+               os=nextstep2
                ;;
        # Preserve the version number of sinix5.
-       -sinix5.*)
+       sinix5.*)
                os=`echo $os | sed -e 's|sinix|sysv|'`
                ;;
-       -sinix*)
-               os=-sysv4
+       sinix*)
+               os=sysv4
                ;;
-       -tpf*)
-               os=-tpf
+       tpf*)
+               os=tpf
                ;;
-       -triton*)
-               os=-sysv3
+       triton*)
+               os=sysv3
                ;;
-       -oss*)
-               os=-sysv3
+       oss*)
+               os=sysv3
                ;;
-       -svr4)
-               os=-sysv4
+       svr4*)
+               os=sysv4
                ;;
-       -svr3)
-               os=-sysv3
+       svr3)
+               os=sysv3
                ;;
-       -sysvr4)
-               os=-sysv4
+       sysvr4)
+               os=sysv4
                ;;
-       # This must come after -sysvr4.
-       -sysv*)
+       # This must come after sysvr4.
+       sysv*)
                ;;
-       -ose*)
-               os=-ose
+       ose*)
+               os=ose
                ;;
-       -es1800*)
-               os=-ose
+       *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+               os=mint
                ;;
-       -xenix)
-               os=-xenix
+       zvmoe)
+               os=zvmoe
                ;;
-       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-               os=-mint
+       dicos*)
+               os=dicos
                ;;
-       -aros*)
-               os=-aros
-               ;;
-       -zvmoe)
-               os=-zvmoe
+       pikeos*)
+               # Until real need of OS specific support for
+               # particular features comes up, bare metal
+               # configurations are quite functional.
+               case $cpu in
+                   arm*)
+                       os=eabi
+                       ;;
+                   *)
+                       os=elf
+                       ;;
+               esac
                ;;
-       -dicos*)
-               os=-dicos
+       nacl*)
                ;;
-       -nacl*)
+       ios)
                ;;
-       -ios)
+       none)
                ;;
-       -none)
+       *-eabi)
                ;;
        *)
-               # Get rid of the `-' at the beginning of $os.
-               os=`echo $os | sed 's/[^-]*-//'`
-               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
                exit 1
                ;;
 esac
@@ -1562,261 +1528,265 @@ else
 # will signal an error saying that MANUFACTURER isn't an operating
 # system, and we'll never get to this point.
 
-case $basic_machine in
+case $cpu-$vendor in
        score-*)
-               os=-elf
+               os=elf
                ;;
        spu-*)
-               os=-elf
+               os=elf
                ;;
        *-acorn)
-               os=-riscix1.2
+               os=riscix1.2
                ;;
        arm*-rebel)
-               os=-linux
+               os=linux
                ;;
        arm*-semi)
-               os=-aout
+               os=aout
                ;;
        c4x-* | tic4x-*)
-               os=-coff
+               os=coff
                ;;
        c8051-*)
-               os=-elf
+               os=elf
+               ;;
+       clipper-intergraph)
+               os=clix
                ;;
        hexagon-*)
-               os=-elf
+               os=elf
                ;;
        tic54x-*)
-               os=-coff
+               os=coff
                ;;
        tic55x-*)
-               os=-coff
+               os=coff
                ;;
        tic6x-*)
-               os=-coff
+               os=coff
                ;;
        # This must come before the *-dec entry.
        pdp10-*)
-               os=-tops20
+               os=tops20
                ;;
        pdp11-*)
-               os=-none
+               os=none
                ;;
        *-dec | vax-*)
-               os=-ultrix4.2
+               os=ultrix4.2
                ;;
        m68*-apollo)
-               os=-domain
+               os=domain
                ;;
        i386-sun)
-               os=-sunos4.0.2
+               os=sunos4.0.2
                ;;
        m68000-sun)
-               os=-sunos3
+               os=sunos3
                ;;
        m68*-cisco)
-               os=-aout
+               os=aout
                ;;
        mep-*)
-               os=-elf
+               os=elf
                ;;
        mips*-cisco)
-               os=-elf
+               os=elf
                ;;
        mips*-*)
-               os=-elf
+               os=elf
                ;;
        or32-*)
-               os=-coff
+               os=coff
                ;;
        *-tti)  # must be before sparc entry or we get the wrong os.
-               os=-sysv3
+               os=sysv3
                ;;
        sparc-* | *-sun)
-               os=-sunos4.1.1
+               os=sunos4.1.1
                ;;
-       *-be)
-               os=-beos
+       pru-*)
+               os=elf
                ;;
-       *-haiku)
-               os=-haiku
+       *-be)
+               os=beos
                ;;
        *-ibm)
-               os=-aix
+               os=aix
                ;;
        *-knuth)
-               os=-mmixware
+               os=mmixware
                ;;
        *-wec)
-               os=-proelf
+               os=proelf
                ;;
        *-winbond)
-               os=-proelf
+               os=proelf
                ;;
        *-oki)
-               os=-proelf
+               os=proelf
                ;;
        *-hp)
-               os=-hpux
+               os=hpux
                ;;
        *-hitachi)
-               os=-hiux
+               os=hiux
                ;;
        i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-               os=-sysv
+               os=sysv
                ;;
        *-cbm)
-               os=-amigaos
+               os=amigaos
                ;;
        *-dg)
-               os=-dgux
+               os=dgux
                ;;
        *-dolphin)
-               os=-sysv3
+               os=sysv3
                ;;
        m68k-ccur)
-               os=-rtu
+               os=rtu
                ;;
        m88k-omron*)
-               os=-luna
+               os=luna
                ;;
-       *-next )
-               os=-nextstep
+       *-next)
+               os=nextstep
                ;;
        *-sequent)
-               os=-ptx
+               os=ptx
                ;;
        *-crds)
-               os=-unos
+               os=unos
                ;;
        *-ns)
-               os=-genix
+               os=genix
                ;;
        i370-*)
-               os=-mvs
-               ;;
-       *-next)
-               os=-nextstep3
+               os=mvs
                ;;
        *-gould)
-               os=-sysv
+               os=sysv
                ;;
        *-highlevel)
-               os=-bsd
+               os=bsd
                ;;
        *-encore)
-               os=-bsd
+               os=bsd
                ;;
        *-sgi)
-               os=-irix
+               os=irix
                ;;
        *-siemens)
-               os=-sysv4
+               os=sysv4
                ;;
        *-masscomp)
-               os=-rtu
+               os=rtu
                ;;
        f30[01]-fujitsu | f700-fujitsu)
-               os=-uxpv
+               os=uxpv
                ;;
        *-rom68k)
-               os=-coff
+               os=coff
                ;;
        *-*bug)
-               os=-coff
+               os=coff
                ;;
        *-apple)
-               os=-macos
+               os=macos
                ;;
        *-atari*)
-               os=-mint
+               os=mint
+               ;;
+       *-wrs)
+               os=vxworks
                ;;
        *)
-               os=-none
+               os=none
                ;;
 esac
 fi
 
 # Here we handle the case where we know the os, and the CPU type, but not the
 # manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-       *-unknown)
+case $vendor in
+       unknown)
                case $os in
-                       -riscix*)
+                       riscix*)
                                vendor=acorn
                                ;;
-                       -sunos*)
+                       sunos*)
                                vendor=sun
                                ;;
-                       -cnk*|-aix*)
+                       cnk*|-aix*)
                                vendor=ibm
                                ;;
-                       -beos*)
+                       beos*)
                                vendor=be
                                ;;
-                       -hpux*)
+                       hpux*)
                                vendor=hp
                                ;;
-                       -mpeix*)
+                       mpeix*)
                                vendor=hp
                                ;;
-                       -hiux*)
+                       hiux*)
                                vendor=hitachi
                                ;;
-                       -unos*)
+                       unos*)
                                vendor=crds
                                ;;
-                       -dgux*)
+                       dgux*)
                                vendor=dg
                                ;;
-                       -luna*)
+                       luna*)
                                vendor=omron
                                ;;
-                       -genix*)
+                       genix*)
                                vendor=ns
                                ;;
-                       -mvs* | -opened*)
+                       clix*)
+                               vendor=intergraph
+                               ;;
+                       mvs* | opened*)
                                vendor=ibm
                                ;;
-                       -os400*)
+                       os400*)
                                vendor=ibm
                                ;;
-                       -ptx*)
+                       ptx*)
                                vendor=sequent
                                ;;
-                       -tpf*)
+                       tpf*)
                                vendor=ibm
                                ;;
-                       -vxsim* | -vxworks* | -windiss*)
+                       vxsim* | vxworks* | windiss*)
                                vendor=wrs
                                ;;
-                       -aux*)
+                       aux*)
                                vendor=apple
                                ;;
-                       -hms*)
+                       hms*)
                                vendor=hitachi
                                ;;
-                       -mpw* | -macos*)
+                       mpw* | macos*)
                                vendor=apple
                                ;;
-                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                       *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
                                vendor=atari
                                ;;
-                       -vos*)
+                       vos*)
                                vendor=stratus
                                ;;
                esac
-               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
                ;;
 esac
 
-echo $basic_machine$os
+echo "$cpu-$vendor-$os"
 exit
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"
diff --git a/config/ltmain.sh b/config/ltmain.sh
new file mode 100644 (file)
index 0000000..c12c197
--- /dev/null
@@ -0,0 +1,11249 @@
+#! /bin/sh
+## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
+##               by inline-source v2014-01-03.01
+
+# libtool (GNU libtool) 2.4.6
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996-2015 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.
+
+# GNU Libtool 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
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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/>.
+
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION="2.4.6 Debian-2.4.6-9"
+package_revision=2.4.6
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Run './libtool --help' for help with using this script from the
+# command line.
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# After configure completes, it has a better idea of some of the
+# shell tools we need than the defaults used by the functions shared
+# with bootstrap, so set those here where they can still be over-
+# ridden by the user, but otherwise take precedence.
+
+: ${AUTOCONF="autoconf"}
+: ${AUTOMAKE="automake"}
+
+
+## -------------------------- ##
+## Source external libraries. ##
+## -------------------------- ##
+
+# Much of our low-level functionality needs to be sourced from external
+# libraries, which are installed to $pkgauxdir.
+
+# Set a version string for this script.
+scriptversion=2015-01-20.17; # UTC
+
+# General shell script boiler plate, and helper functions.
+# Written by Gary V. Vaughan, 2004
+
+# Copyright (C) 2004-2015 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.
+
+# This program 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.
+
+# As a special exception to the GNU General Public License, if you distribute
+# this file as part of a program or library that is built using GNU Libtool,
+# you may include this file under the same distribution terms that you use
+# for the rest of that program.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNES 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/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Evaluate this file near the top of your script to gain access to
+# the functions and variables defined here:
+#
+#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
+#
+# If you need to override any of the default environment variable
+# settings, do that before evaluating this file.
+
+
+## -------------------- ##
+## Shell normalisation. ##
+## -------------------- ##
+
+# Some shells need a little help to be as Bourne compatible as possible.
+# Before doing anything else, make sure all that help has been provided!
+
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
+fi
+
+# NLS nuisances: We save the old values in case they are required later.
+_G_user_locale=
+_G_safe_locale=
+for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test set = \"\${$_G_var+set}\"; then
+          save_$_G_var=\$$_G_var
+          $_G_var=C
+         export $_G_var
+         _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
+         _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
+       fi"
+done
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Make sure IFS has a sensible default
+sp=' '
+nl='
+'
+IFS="$sp       $nl"
+
+# There are apparently some retarded systems that use ';' as a PATH separator!
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+
+## ------------------------- ##
+## Locate command utilities. ##
+## ------------------------- ##
+
+
+# func_executable_p FILE
+# ----------------------
+# Check that FILE is an executable regular file.
+func_executable_p ()
+{
+    test -f "$1" && test -x "$1"
+}
+
+
+# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
+# --------------------------------------------
+# Search for either a program that responds to --version with output
+# containing "GNU", or else returned by CHECK_FUNC otherwise, by
+# trying all the directories in PATH with each of the elements of
+# PROGS_LIST.
+#
+# CHECK_FUNC should accept the path to a candidate program, and
+# set $func_check_prog_result if it truncates its output less than
+# $_G_path_prog_max characters.
+func_path_progs ()
+{
+    _G_progs_list=$1
+    _G_check_func=$2
+    _G_PATH=${3-"$PATH"}
+
+    _G_path_prog_max=0
+    _G_path_prog_found=false
+    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
+    for _G_dir in $_G_PATH; do
+      IFS=$_G_save_IFS
+      test -z "$_G_dir" && _G_dir=.
+      for _G_prog_name in $_G_progs_list; do
+        for _exeext in '' .EXE; do
+          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
+          func_executable_p "$_G_path_prog" || continue
+          case `"$_G_path_prog" --version 2>&1` in
+            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
+            *)     $_G_check_func $_G_path_prog
+                  func_path_progs_result=$func_check_prog_result
+                  ;;
+          esac
+          $_G_path_prog_found && break 3
+        done
+      done
+    done
+    IFS=$_G_save_IFS
+    test -z "$func_path_progs_result" && {
+      echo "no acceptable sed could be found in \$PATH" >&2
+      exit 1
+    }
+}
+
+
+# We want to be able to use the functions in this file before configure
+# has figured out where the best binaries are kept, which means we have
+# to search for them ourselves - except when the results are already set
+# where we skip the searches.
+
+# Unless the user overrides by setting SED, search the path for either GNU
+# sed, or the sed that truncates its output the least.
+test -z "$SED" && {
+  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+  for _G_i in 1 2 3 4 5 6 7; do
+    _G_sed_script=$_G_sed_script$nl$_G_sed_script
+  done
+  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
+  _G_sed_script=
+
+  func_check_prog_sed ()
+  {
+    _G_path_prog=$1
+
+    _G_count=0
+    printf 0123456789 >conftest.in
+    while :
+    do
+      cat conftest.in conftest.in >conftest.tmp
+      mv conftest.tmp conftest.in
+      cp conftest.in conftest.nl
+      echo '' >> conftest.nl
+      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+      diff conftest.out conftest.nl >/dev/null 2>&1 || break
+      _G_count=`expr $_G_count + 1`
+      if test "$_G_count" -gt "$_G_path_prog_max"; then
+        # Best one so far, save it but keep looking for a better one
+        func_check_prog_result=$_G_path_prog
+        _G_path_prog_max=$_G_count
+      fi
+      # 10*(2^10) chars as input seems more than enough
+      test 10 -lt "$_G_count" && break
+    done
+    rm -f conftest.in conftest.tmp conftest.nl conftest.out
+  }
+
+  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
+  rm -f conftest.sed
+  SED=$func_path_progs_result
+}
+
+
+# Unless the user overrides by setting GREP, search the path for either GNU
+# grep, or the grep that truncates its output the least.
+test -z "$GREP" && {
+  func_check_prog_grep ()
+  {
+    _G_path_prog=$1
+
+    _G_count=0
+    _G_path_prog_max=0
+    printf 0123456789 >conftest.in
+    while :
+    do
+      cat conftest.in conftest.in >conftest.tmp
+      mv conftest.tmp conftest.in
+      cp conftest.in conftest.nl
+      echo 'GREP' >> conftest.nl
+      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
+      diff conftest.out conftest.nl >/dev/null 2>&1 || break
+      _G_count=`expr $_G_count + 1`
+      if test "$_G_count" -gt "$_G_path_prog_max"; then
+        # Best one so far, save it but keep looking for a better one
+        func_check_prog_result=$_G_path_prog
+        _G_path_prog_max=$_G_count
+      fi
+      # 10*(2^10) chars as input seems more than enough
+      test 10 -lt "$_G_count" && break
+    done
+    rm -f conftest.in conftest.tmp conftest.nl conftest.out
+  }
+
+  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
+  GREP=$func_path_progs_result
+}
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# All uppercase variable names are used for environment variables.  These
+# variables can be overridden by the user before calling a script that
+# uses them if a suitable command of that name is not already available
+# in the command search PATH.
+
+: ${CP="cp -f"}
+: ${ECHO="printf %s\n"}
+: ${EGREP="$GREP -E"}
+: ${FGREP="$GREP -F"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+
+
+## -------------------- ##
+## Useful sed snippets. ##
+## -------------------- ##
+
+sed_dirname='s|/[^/]*$||'
+sed_basename='s|^.*/||'
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
+
+# Same as above, but do not quote variable references.
+sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
+
+# Sed substitution that converts a w32 file name or path
+# that contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-'\' parameter expansions in output of sed_double_quote_subst that
+# were '\'-ed in input to the same.  If an odd number of '\' preceded a
+# '$' in input to sed_double_quote_subst, that '$' was protected from
+# expansion.  Since each input '\' is now two '\'s, look for any number
+# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
+_G_bs='\\'
+_G_bs2='\\\\'
+_G_bs4='\\\\\\\\'
+_G_dollar='\$'
+sed_double_backslash="\
+  s/$_G_bs4/&\\
+/g
+  s/^$_G_bs2$_G_dollar/$_G_bs&/
+  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
+  s/\n//g"
+
+
+## ----------------- ##
+## Global variables. ##
+## ----------------- ##
+
+# Except for the global variables explicitly listed below, the following
+# functions in the '^func_' namespace, and the '^require_' namespace
+# variables initialised in the 'Resource management' section, sourcing
+# this file will not pollute your global namespace with anything
+# else. There's no portable way to scope variables in Bourne shell
+# though, so actually running these functions will sometimes place
+# results into a variable named after the function, and often use
+# temporary variables in the '^_G_' namespace. If you are careful to
+# avoid using those namespaces casually in your sourcing script, things
+# should continue to work as you expect. And, of course, you can freely
+# overwrite any of the functions or variables defined here before
+# calling anything to customize them.
+
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77     # $? = 77 is used to indicate a skipped test to automake.
+
+# Allow overriding, eg assuming that you follow the convention of
+# putting '$debug_cmd' at the start of all your functions, you can get
+# bash to show function call trace with:
+#
+#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
+debug_cmd=${debug_cmd-":"}
+exit_cmd=:
+
+# By convention, finish your script with:
+#
+#    exit $exit_status
+#
+# so that you can set exit_status to non-zero if you want to indicate
+# something went wrong during execution without actually bailing out at
+# the point of failure.
+exit_status=$EXIT_SUCCESS
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath=$0
+
+# The name of this program.
+progname=`$ECHO "$progpath" |$SED "$sed_basename"`
+
+# Make sure we have an absolute progpath for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
+     progdir=`cd "$progdir" && pwd`
+     progpath=$progdir/$progname
+     ;;
+  *)
+     _G_IFS=$IFS
+     IFS=${PATH_SEPARATOR-:}
+     for progdir in $PATH; do
+       IFS=$_G_IFS
+       test -x "$progdir/$progname" && break
+     done
+     IFS=$_G_IFS
+     test -n "$progdir" || progdir=`pwd`
+     progpath=$progdir/$progname
+     ;;
+esac
+
+
+## ----------------- ##
+## Standard options. ##
+## ----------------- ##
+
+# The following options affect the operation of the functions defined
+# below, and should be set appropriately depending on run-time para-
+# meters passed on the command line.
+
+opt_dry_run=false
+opt_quiet=false
+opt_verbose=false
+
+# Categories 'all' and 'none' are always available.  Append any others
+# you will pass as the first argument to func_warning from your own
+# code.
+warning_categories=
+
+# By default, display warnings according to 'opt_warning_types'.  Set
+# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
+# treat the next displayed warning as a fatal error.
+warning_func=func_warn_and_continue
+
+# Set to 'all' to display all warnings, 'none' to suppress all
+# warnings, or a space delimited list of some subset of
+# 'warning_categories' to display only the listed warnings.
+opt_warning_types=all
+
+
+## -------------------- ##
+## Resource management. ##
+## -------------------- ##
+
+# This section contains definitions for functions that each ensure a
+# particular resource (a file, or a non-empty configuration variable for
+# example) is available, and if appropriate to extract default values
+# from pertinent package files. Call them using their associated
+# 'require_*' variable to ensure that they are executed, at most, once.
+#
+# It's entirely deliberate that calling these functions can set
+# variables that don't obey the namespace limitations obeyed by the rest
+# of this file, in order that that they be as useful as possible to
+# callers.
+
+
+# require_term_colors
+# -------------------
+# Allow display of bold text on terminals that support it.
+require_term_colors=func_require_term_colors
+func_require_term_colors ()
+{
+    $debug_cmd
+
+    test -t 1 && {
+      # COLORTERM and USE_ANSI_COLORS environment variables take
+      # precedence, because most terminfo databases neglect to describe
+      # whether color sequences are supported.
+      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
+
+      if test 1 = "$USE_ANSI_COLORS"; then
+        # Standard ANSI escape sequences
+        tc_reset='\e[0m'
+        tc_bold='\e[1m';   tc_standout='\e[7m'
+        tc_red='\e[31m';   tc_green='\e[32m'
+        tc_blue='\e[34m';  tc_cyan='\e[36m'
+      else
+        # Otherwise trust the terminfo database after all.
+        test -n "`tput sgr0 2>/dev/null`" && {
+          tc_reset=`tput sgr0`
+          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
+          tc_standout=$tc_bold
+          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
+          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
+          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
+          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
+          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
+        }
+      fi
+    }
+
+    require_term_colors=:
+}
+
+
+## ----------------- ##
+## Function library. ##
+## ----------------- ##
+
+# This section contains a variety of useful functions to call in your
+# scripts. Take note of the portable wrappers for features provided by
+# some modern shells, which will fall back to slower equivalents on
+# less featureful shells.
+
+
+# func_append VAR VALUE
+# ---------------------
+# Append VALUE onto the existing contents of VAR.
+
+  # We should try to minimise forks, especially on Windows where they are
+  # unreasonably slow, so skip the feature probes when bash or zsh are
+  # being used:
+  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
+    : ${_G_HAVE_ARITH_OP="yes"}
+    : ${_G_HAVE_XSI_OPS="yes"}
+    # The += operator was introduced in bash 3.1
+    case $BASH_VERSION in
+      [12].* | 3.0 | 3.0*) ;;
+      *)
+        : ${_G_HAVE_PLUSEQ_OP="yes"}
+        ;;
+    esac
+  fi
+
+  # _G_HAVE_PLUSEQ_OP
+  # Can be empty, in which case the shell is probed, "yes" if += is
+  # useable or anything else if it does not work.
+  test -z "$_G_HAVE_PLUSEQ_OP" \
+    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
+    && _G_HAVE_PLUSEQ_OP=yes
+
+if test yes = "$_G_HAVE_PLUSEQ_OP"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_append ()
+  {
+    $debug_cmd
+
+    eval "$1+=\$2"
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_append ()
+  {
+    $debug_cmd
+
+    eval "$1=\$$1\$2"
+  }
+fi
+
+
+# func_append_quoted VAR VALUE
+# ----------------------------
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+if test yes = "$_G_HAVE_PLUSEQ_OP"; then
+  eval 'func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1+=\\ \$func_quote_for_eval_result"
+  }'
+else
+  func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1=\$$1\\ \$func_quote_for_eval_result"
+  }
+fi
+
+
+# func_append_uniq VAR VALUE
+# --------------------------
+# Append unique VALUE onto the existing contents of VAR, assuming
+# entries are delimited by the first character of VALUE.  For example:
+#
+#   func_append_uniq options " --another-option option-argument"
+#
+# will only append to $options if " --another-option option-argument "
+# is not already present somewhere in $options already (note spaces at
+# each end implied by leading space in second argument).
+func_append_uniq ()
+{
+    $debug_cmd
+
+    eval _G_current_value='`$ECHO $'$1'`'
+    _G_delim=`expr "$2" : '\(.\)'`
+
+    case $_G_delim$_G_current_value$_G_delim in
+      *"$2$_G_delim"*) ;;
+      *) func_append "$@" ;;
+    esac
+}
+
+
+# func_arith TERM...
+# ------------------
+# Set func_arith_result to the result of evaluating TERMs.
+  test -z "$_G_HAVE_ARITH_OP" \
+    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
+    && _G_HAVE_ARITH_OP=yes
+
+if test yes = "$_G_HAVE_ARITH_OP"; then
+  eval 'func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=$(( $* ))
+  }'
+else
+  func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=`expr "$@"`
+  }
+fi
+
+
+# func_basename FILE
+# ------------------
+# Set func_basename_result to FILE with everything up to and including
+# the last / stripped.
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  # If this shell supports suffix pattern removal, then use it to avoid
+  # forking. Hide the definitions single quotes in case the shell chokes
+  # on unsupported syntax...
+  _b='func_basename_result=${1##*/}'
+  _d='case $1 in
+        */*) func_dirname_result=${1%/*}$2 ;;
+        *  ) func_dirname_result=$3        ;;
+      esac'
+
+else
+  # ...otherwise fall back to using sed.
+  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
+  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
+      if test "X$func_dirname_result" = "X$1"; then
+        func_dirname_result=$3
+      else
+        func_append func_dirname_result "$2"
+      fi'
+fi
+
+eval 'func_basename ()
+{
+    $debug_cmd
+
+    '"$_b"'
+}'
+
+
+# func_dirname FILE APPEND NONDIR_REPLACEMENT
+# -------------------------------------------
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+eval 'func_dirname ()
+{
+    $debug_cmd
+
+    '"$_d"'
+}'
+
+
+# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
+# --------------------------------------------------------
+# Perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# For efficiency, we do not delegate to the functions above but instead
+# duplicate the functionality here.
+eval 'func_dirname_and_basename ()
+{
+    $debug_cmd
+
+    '"$_b"'
+    '"$_d"'
+}'
+
+
+# func_echo ARG...
+# ----------------
+# Echo program name prefixed message.
+func_echo ()
+{
+    $debug_cmd
+
+    _G_message=$*
+
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $ECHO "$progname: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
+
+
+# func_echo_all ARG...
+# --------------------
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+
+# func_echo_infix_1 INFIX ARG...
+# ------------------------------
+# Echo program name, followed by INFIX on the first line, with any
+# additional lines not showing INFIX.
+func_echo_infix_1 ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    _G_infix=$1; shift
+    _G_indent=$_G_infix
+    _G_prefix="$progname: $_G_infix: "
+    _G_message=$*
+
+    # Strip color escape sequences before counting printable length
+    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
+    do
+      test -n "$_G_tc" && {
+        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
+        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
+      }
+    done
+    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
+
+    func_echo_infix_1_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_infix_1_IFS
+      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
+      _G_prefix=$_G_indent
+    done
+    IFS=$func_echo_infix_1_IFS
+}
+
+
+# func_error ARG...
+# -----------------
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
+}
+
+
+# func_fatal_error ARG...
+# -----------------------
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    $debug_cmd
+
+    func_error "$*"
+    exit $EXIT_FAILURE
+}
+
+
+# func_grep EXPRESSION FILENAME
+# -----------------------------
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $debug_cmd
+
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_len STRING
+# ---------------
+# Set func_len_result to the length of STRING. STRING may not
+# start with a hyphen.
+  test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=${#1}
+  }'
+else
+  func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+  }
+fi
+
+
+# func_mkdir_p DIRECTORY-PATH
+# ---------------------------
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    $debug_cmd
+
+    _G_directory_path=$1
+    _G_dir_list=
+
+    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
+
+      # Protect directory names starting with '-'
+      case $_G_directory_path in
+        -*) _G_directory_path=./$_G_directory_path ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$_G_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+       # list incase some portion of path contains whitespace.
+        _G_dir_list=$_G_directory_path:$_G_dir_list
+
+        # If the last portion added has no slash in it, the list is done
+        case $_G_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
+      done
+      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
+
+      func_mkdir_p_IFS=$IFS; IFS=:
+      for _G_dir in $_G_dir_list; do
+       IFS=$func_mkdir_p_IFS
+        # mkdir can fail with a 'File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$_G_dir" 2>/dev/null || :
+      done
+      IFS=$func_mkdir_p_IFS
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$_G_directory_path" || \
+        func_fatal_error "Failed to create '$1'"
+    fi
+}
+
+
+# func_mktempdir [BASENAME]
+# -------------------------
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, BASENAME is the basename for that directory.
+func_mktempdir ()
+{
+    $debug_cmd
+
+    _G_template=${TMPDIR-/tmp}/${1-$progname}
+
+    if test : = "$opt_dry_run"; then
+      # Return a directory name, but don't create it in dry-run mode
+      _G_tmpdir=$_G_template-$$
+    else
+
+      # If mktemp works, use that first and foremost
+      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$_G_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        _G_tmpdir=$_G_template-${RANDOM-0}$$
+
+        func_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$_G_tmpdir"
+        umask $func_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$_G_tmpdir" || \
+        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
+    fi
+
+    $ECHO "$_G_tmpdir"
+}
+
+
+# func_normal_abspath PATH
+# ------------------------
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+func_normal_abspath ()
+{
+    $debug_cmd
+
+    # These SED scripts presuppose an absolute path with a trailing slash.
+    _G_pathcar='s|^/\([^/]*\).*$|\1|'
+    _G_pathcdr='s|^/[^/]*||'
+    _G_removedotparts=':dotsl
+               s|/\./|/|g
+               t dotsl
+               s|/\.$|/|'
+    _G_collapseslashes='s|/\{1,\}|/|g'
+    _G_finalslash='s|/*$|/|'
+
+    # Start from root dir and reassemble the path.
+    func_normal_abspath_result=
+    func_normal_abspath_tpath=$1
+    func_normal_abspath_altnamespace=
+    case $func_normal_abspath_tpath in
+      "")
+        # Empty path, that just means $cwd.
+        func_stripname '' '/' "`pwd`"
+        func_normal_abspath_result=$func_stripname_result
+        return
+        ;;
+      # The next three entries are used to spot a run of precisely
+      # two leading slashes without using negated character classes;
+      # we take advantage of case's first-match behaviour.
+      ///*)
+        # Unusual form of absolute path, do nothing.
+        ;;
+      //*)
+        # Not necessarily an ordinary path; POSIX reserves leading '//'
+        # and for example Cygwin uses it to access remote file shares
+        # over CIFS/SMB, so we conserve a leading double slash if found.
+        func_normal_abspath_altnamespace=/
+        ;;
+      /*)
+        # Absolute path, do nothing.
+        ;;
+      *)
+        # Relative path, prepend $cwd.
+        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+        ;;
+    esac
+
+    # Cancel out all the simple stuff to save iterations.  We also want
+    # the path to end with a slash for ease of parsing, so make sure
+    # there is one (and only one) here.
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
+    while :; do
+      # Processed it all yet?
+      if test / = "$func_normal_abspath_tpath"; then
+        # If we ascended to the root using ".." the result may be empty now.
+        if test -z "$func_normal_abspath_result"; then
+          func_normal_abspath_result=/
+        fi
+        break
+      fi
+      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcar"`
+      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcdr"`
+      # Figure out what to do with it
+      case $func_normal_abspath_tcomponent in
+        "")
+          # Trailing empty path component, ignore it.
+          ;;
+        ..)
+          # Parent dir; strip last assembled component from result.
+          func_dirname "$func_normal_abspath_result"
+          func_normal_abspath_result=$func_dirname_result
+          ;;
+        *)
+          # Actual path component, append it.
+          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
+          ;;
+      esac
+    done
+    # Restore leading double-slash if one was found on entry.
+    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+
+# func_notquiet ARG...
+# --------------------
+# Echo program name prefixed message only when not in quiet mode.
+func_notquiet ()
+{
+    $debug_cmd
+
+    $opt_quiet || func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+
+# func_relative_path SRCDIR DSTDIR
+# --------------------------------
+# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
+func_relative_path ()
+{
+    $debug_cmd
+
+    func_relative_path_result=
+    func_normal_abspath "$1"
+    func_relative_path_tlibdir=$func_normal_abspath_result
+    func_normal_abspath "$2"
+    func_relative_path_tbindir=$func_normal_abspath_result
+
+    # Ascend the tree starting from libdir
+    while :; do
+      # check if we have found a prefix of bindir
+      case $func_relative_path_tbindir in
+        $func_relative_path_tlibdir)
+          # found an exact match
+          func_relative_path_tcancelled=
+          break
+          ;;
+        $func_relative_path_tlibdir*)
+          # found a matching prefix
+          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+          func_relative_path_tcancelled=$func_stripname_result
+          if test -z "$func_relative_path_result"; then
+            func_relative_path_result=.
+          fi
+          break
+          ;;
+        *)
+          func_dirname $func_relative_path_tlibdir
+          func_relative_path_tlibdir=$func_dirname_result
+          if test -z "$func_relative_path_tlibdir"; then
+            # Have to descend all the way to the root!
+            func_relative_path_result=../$func_relative_path_result
+            func_relative_path_tcancelled=$func_relative_path_tbindir
+            break
+          fi
+          func_relative_path_result=../$func_relative_path_result
+          ;;
+      esac
+    done
+
+    # Now calculate path; take care to avoid doubling-up slashes.
+    func_stripname '' '/' "$func_relative_path_result"
+    func_relative_path_result=$func_stripname_result
+    func_stripname '/' '/' "$func_relative_path_tcancelled"
+    if test -n "$func_stripname_result"; then
+      func_append func_relative_path_result "/$func_stripname_result"
+    fi
+
+    # Normalisation. If bindir is libdir, return '.' else relative path.
+    if test -n "$func_relative_path_result"; then
+      func_stripname './' '' "$func_relative_path_result"
+      func_relative_path_result=$func_stripname_result
+    fi
+
+    test -n "$func_relative_path_result" || func_relative_path_result=.
+
+    :
+}
+
+
+# func_quote_for_eval ARG...
+# --------------------------
+# Aesthetically quote ARGs to be evaled later.
+# This function returns two values:
+#   i) func_quote_for_eval_result
+#      double-quoted, suitable for a subsequent eval
+#  ii) func_quote_for_eval_unquoted_result
+#      has all characters that are still active within double
+#      quotes backslashified.
+func_quote_for_eval ()
+{
+    $debug_cmd
+
+    func_quote_for_eval_unquoted_result=
+    func_quote_for_eval_result=
+    while test 0 -lt $#; do
+      case $1 in
+        *[\\\`\"\$]*)
+         _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
+        *)
+          _G_unquoted_arg=$1 ;;
+      esac
+      if test -n "$func_quote_for_eval_unquoted_result"; then
+       func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
+      else
+        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+      fi
+
+      case $_G_unquoted_arg in
+        # Double-quote args containing shell metacharacters to delay
+        # word splitting, command substitution and variable expansion
+        # for a subsequent eval.
+        # Many Bourne shells cannot handle close brackets correctly
+        # in scan sets, so we specify it separately.
+        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \  ]*|*]*|"")
+          _G_quoted_arg=\"$_G_unquoted_arg\"
+          ;;
+        *)
+          _G_quoted_arg=$_G_unquoted_arg
+         ;;
+      esac
+
+      if test -n "$func_quote_for_eval_result"; then
+       func_append func_quote_for_eval_result " $_G_quoted_arg"
+      else
+        func_append func_quote_for_eval_result "$_G_quoted_arg"
+      fi
+      shift
+    done
+}
+
+
+# func_quote_for_expand ARG
+# -------------------------
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    $debug_cmd
+
+    case $1 in
+      *[\\\`\"]*)
+       _G_arg=`$ECHO "$1" | $SED \
+           -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        _G_arg=$1 ;;
+    esac
+
+    case $_G_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        _G_arg=\"$_G_arg\"
+        ;;
+    esac
+
+    func_quote_for_expand_result=$_G_arg
+}
+
+
+# func_stripname PREFIX SUFFIX NAME
+# ---------------------------------
+# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_stripname ()
+  {
+    $debug_cmd
+
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary variable first.
+    func_stripname_result=$3
+    func_stripname_result=${func_stripname_result#"$1"}
+    func_stripname_result=${func_stripname_result%"$2"}
+  }'
+else
+  func_stripname ()
+  {
+    $debug_cmd
+
+    case $2 in
+      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
+      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
+    esac
+  }
+fi
+
+
+# func_show_eval CMD [FAIL_EXP]
+# -----------------------------
+# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    $debug_cmd
+
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
+
+    func_quote_for_expand "$_G_cmd"
+    eval "func_notquiet $func_quote_for_expand_result"
+
+    $opt_dry_run || {
+      eval "$_G_cmd"
+      _G_status=$?
+      if test 0 -ne "$_G_status"; then
+       eval "(exit $_G_status); $_G_fail_exp"
+      fi
+    }
+}
+
+
+# func_show_eval_locale CMD [FAIL_EXP]
+# ------------------------------------
+# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    $debug_cmd
+
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
+
+    $opt_quiet || {
+      func_quote_for_expand "$_G_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    $opt_dry_run || {
+      eval "$_G_user_locale
+           $_G_cmd"
+      _G_status=$?
+      eval "$_G_safe_locale"
+      if test 0 -ne "$_G_status"; then
+       eval "(exit $_G_status); $_G_fail_exp"
+      fi
+    }
+}
+
+
+# func_tr_sh
+# ----------
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+    $debug_cmd
+
+    case $1 in
+    [0-9]* | *[!a-zA-Z0-9_]*)
+      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
+      ;;
+    * )
+      func_tr_sh_result=$1
+      ;;
+    esac
+}
+
+
+# func_verbose ARG...
+# -------------------
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $debug_cmd
+
+    $opt_verbose && func_echo "$*"
+
+    :
+}
+
+
+# func_warn_and_continue ARG...
+# -----------------------------
+# Echo program name prefixed warning message to standard error.
+func_warn_and_continue ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
+}
+
+
+# func_warning CATEGORY ARG...
+# ----------------------------
+# Echo program name prefixed warning message to standard error. Warning
+# messages can be filtered according to CATEGORY, where this function
+# elides messages where CATEGORY is not listed in the global variable
+# 'opt_warning_types'.
+func_warning ()
+{
+    $debug_cmd
+
+    # CATEGORY must be in the warning_categories list!
+    case " $warning_categories " in
+      *" $1 "*) ;;
+      *) func_internal_error "invalid warning category '$1'" ;;
+    esac
+
+    _G_category=$1
+    shift
+
+    case " $opt_warning_types " in
+      *" $_G_category "*) $warning_func ${1+"$@"} ;;
+    esac
+}
+
+
+# func_sort_ver VER1 VER2
+# -----------------------
+# 'sort -V' is not generally available.
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+func_sort_ver ()
+{
+    $debug_cmd
+
+    printf '%s\n%s\n' "$1" "$2" \
+      | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
+}
+
+# func_lt_ver PREV CURR
+# ---------------------
+# Return true if PREV and CURR are in the correct order according to
+# func_sort_ver, otherwise false.  Use it like this:
+#
+#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
+func_lt_ver ()
+{
+    $debug_cmd
+
+    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+#! /bin/sh
+
+# Set a version string for this script.
+scriptversion=2015-10-07.11; # UTC
+
+# A portable, pluggable option parser for Bourne shell.
+# Written by Gary V. Vaughan, 2010
+
+# Copyright (C) 2010-2015 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.
+
+# This program 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.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# This file is a library for parsing options in your shell scripts along
+# with assorted other useful supporting features that you can make use
+# of too.
+#
+# For the simplest scripts you might need only:
+#
+#   #!/bin/sh
+#   . relative/path/to/funclib.sh
+#   . relative/path/to/options-parser
+#   scriptversion=1.0
+#   func_options ${1+"$@"}
+#   eval set dummy "$func_options_result"; shift
+#   ...rest of your script...
+#
+# In order for the '--version' option to work, you will need to have a
+# suitably formatted comment like the one at the top of this file
+# starting with '# Written by ' and ending with '# warranty; '.
+#
+# For '-h' and '--help' to work, you will also need a one line
+# description of your script's purpose in a comment directly above the
+# '# Written by ' line, like the one at the top of this file.
+#
+# The default options also support '--debug', which will turn on shell
+# execution tracing (see the comment above debug_cmd below for another
+# use), and '--verbose' and the func_verbose function to allow your script
+# to display verbose messages only when your user has specified
+# '--verbose'.
+#
+# After sourcing this file, you can plug processing for additional
+# options by amending the variables from the 'Configuration' section
+# below, and following the instructions in the 'Option parsing'
+# section further down.
+
+## -------------- ##
+## Configuration. ##
+## -------------- ##
+
+# You should override these variables in your script after sourcing this
+# file so that they reflect the customisations you have added to the
+# option parser.
+
+# The usage line for option parsing errors and the start of '-h' and
+# '--help' output messages. You can embed shell variables for delayed
+# expansion at the time the message is displayed, but you will need to
+# quote other shell meta-characters carefully to prevent them being
+# expanded when the contents are evaled.
+usage='$progpath [OPTION]...'
+
+# Short help message in response to '-h' and '--help'.  Add to this or
+# override it after sourcing this library to reflect the full set of
+# options your script accepts.
+usage_message="\
+       --debug        enable verbose shell tracing
+   -W, --warnings=CATEGORY
+                      report the warnings falling in CATEGORY [all]
+   -v, --verbose      verbosely report processing
+       --version      print version information and exit
+   -h, --help         print short or long help message and exit
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message="
+Warning categories include:
+       'all'          show all warnings
+       'none'         turn off all the warnings
+       'error'        warnings are treated as fatal errors"
+
+# Help message printed before fatal option parsing errors.
+fatal_help="Try '\$progname --help' for more information."
+
+
+
+## ------------------------- ##
+## Hook function management. ##
+## ------------------------- ##
+
+# This section contains functions for adding, removing, and running hooks
+# to the main code.  A hook is just a named list of of function, that can
+# be run in order later on.
+
+# func_hookable FUNC_NAME
+# -----------------------
+# Declare that FUNC_NAME will run hooks added with
+# 'func_add_hook FUNC_NAME ...'.
+func_hookable ()
+{
+    $debug_cmd
+
+    func_append hookable_fns " $1"
+}
+
+
+# func_add_hook FUNC_NAME HOOK_FUNC
+# ---------------------------------
+# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
+# first have been declared "hookable" by a call to 'func_hookable'.
+func_add_hook ()
+{
+    $debug_cmd
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not accept hook functions." ;;
+    esac
+
+    eval func_append ${1}_hooks '" $2"'
+}
+
+
+# func_remove_hook FUNC_NAME HOOK_FUNC
+# ------------------------------------
+# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
+func_remove_hook ()
+{
+    $debug_cmd
+
+    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
+}
+
+
+# func_run_hooks FUNC_NAME [ARG]...
+# ---------------------------------
+# Run all hook functions registered to FUNC_NAME.
+# It is assumed that the list of hook functions contains nothing more
+# than a whitespace-delimited list of legal shell function names, and
+# no effort is wasted trying to catch shell meta-characters or preserve
+# whitespace.
+func_run_hooks ()
+{
+    $debug_cmd
+
+    _G_rc_run_hooks=false
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
+    esac
+
+    eval _G_hook_fns=\$$1_hooks; shift
+
+    for _G_hook in $_G_hook_fns; do
+      if eval $_G_hook '"$@"'; then
+        # store returned options list back into positional
+        # parameters for next 'cmd' execution.
+        eval _G_hook_result=\$${_G_hook}_result
+        eval set dummy "$_G_hook_result"; shift
+        _G_rc_run_hooks=:
+      fi
+    done
+
+    $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result
+}
+
+
+
+## --------------- ##
+## Option parsing. ##
+## --------------- ##
+
+# In order to add your own option parsing hooks, you must accept the
+# full positional parameter list in your hook function, you may remove/edit
+# any options that you action, and then pass back the remaining unprocessed
+# options in '<hooked_function_name>_result', escaped suitably for
+# 'eval'.  In this case you also must return $EXIT_SUCCESS to let the
+# hook's caller know that it should pay attention to
+# '<hooked_function_name>_result'.  Returning $EXIT_FAILURE signalizes that
+# arguments are left untouched by the hook and therefore caller will ignore the
+# result variable.
+#
+# Like this:
+#
+#    my_options_prep ()
+#    {
+#        $debug_cmd
+#
+#        # Extend the existing usage message.
+#        usage_message=$usage_message'
+#      -s, --silent       don'\''t print informational messages
+#    '
+#        # No change in '$@' (ignored completely by this hook).  There is
+#        # no need to do the equivalent (but slower) action:
+#        # func_quote_for_eval ${1+"$@"}
+#        # my_options_prep_result=$func_quote_for_eval_result
+#        false
+#    }
+#    func_add_hook func_options_prep my_options_prep
+#
+#
+#    my_silent_option ()
+#    {
+#        $debug_cmd
+#
+#        args_changed=false
+#
+#        # Note that for efficiency, we parse as many options as we can
+#        # recognise in a loop before passing the remainder back to the
+#        # caller on the first unrecognised argument we encounter.
+#        while test $# -gt 0; do
+#          opt=$1; shift
+#          case $opt in
+#            --silent|-s) opt_silent=:
+#                         args_changed=:
+#                         ;;
+#            # Separate non-argument short options:
+#            -s*)         func_split_short_opt "$_G_opt"
+#                         set dummy "$func_split_short_opt_name" \
+#                             "-$func_split_short_opt_arg" ${1+"$@"}
+#                         shift
+#                         args_changed=:
+#                         ;;
+#            *)           # Make sure the first unrecognised option "$_G_opt"
+#                         # is added back to "$@", we could need that later
+#                         # if $args_changed is true.
+#                         set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+#          esac
+#        done
+#
+#        if $args_changed; then
+#          func_quote_for_eval ${1+"$@"}
+#          my_silent_option_result=$func_quote_for_eval_result
+#        fi
+#
+#        $args_changed
+#    }
+#    func_add_hook func_parse_options my_silent_option
+#
+#
+#    my_option_validation ()
+#    {
+#        $debug_cmd
+#
+#        $opt_silent && $opt_verbose && func_fatal_help "\
+#    '--silent' and '--verbose' options are mutually exclusive."
+#
+#        false
+#    }
+#    func_add_hook func_validate_options my_option_validation
+#
+# You'll also need to manually amend $usage_message to reflect the extra
+# options you parse.  It's preferable to append if you can, so that
+# multiple option parsing hooks can be added safely.
+
+
+# func_options_finish [ARG]...
+# ----------------------------
+# Finishing the option parse loop (call 'func_options' hooks ATM).
+func_options_finish ()
+{
+    $debug_cmd
+
+    _G_func_options_finish_exit=false
+    if func_run_hooks func_options ${1+"$@"}; then
+      func_options_finish_result=$func_run_hooks_result
+      _G_func_options_finish_exit=:
+    fi
+
+    $_G_func_options_finish_exit
+}
+
+
+# func_options [ARG]...
+# ---------------------
+# All the functions called inside func_options are hookable. See the
+# individual implementations for details.
+func_hookable func_options
+func_options ()
+{
+    $debug_cmd
+
+    _G_rc_options=false
+
+    for my_func in options_prep parse_options validate_options options_finish
+    do
+      if eval func_$my_func '${1+"$@"}'; then
+        eval _G_res_var='$'"func_${my_func}_result"
+        eval set dummy "$_G_res_var" ; shift
+        _G_rc_options=:
+      fi
+    done
+
+    # Save modified positional parameters for caller.  As a top-level
+    # options-parser function we always need to set the 'func_options_result'
+    # variable (regardless the $_G_rc_options value).
+    if $_G_rc_options; then
+      func_options_result=$_G_res_var
+    else
+      func_quote_for_eval ${1+"$@"}
+      func_options_result=$func_quote_for_eval_result
+    fi
+
+    $_G_rc_options
+}
+
+
+# func_options_prep [ARG]...
+# --------------------------
+# All initialisations required before starting the option parse loop.
+# Note that when calling hook functions, we pass through the list of
+# positional parameters.  If a hook function modifies that list, and
+# needs to propagate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before
+# returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned).
+func_hookable func_options_prep
+func_options_prep ()
+{
+    $debug_cmd
+
+    # Option defaults:
+    opt_verbose=false
+    opt_warning_types=
+
+    _G_rc_options_prep=false
+    if func_run_hooks func_options_prep ${1+"$@"}; then
+      _G_rc_options_prep=:
+      # save modified positional parameters for caller
+      func_options_prep_result=$func_run_hooks_result
+    fi
+
+    $_G_rc_options_prep
+}
+
+
+# func_parse_options [ARG]...
+# ---------------------------
+# The main option parsing loop.
+func_hookable func_parse_options
+func_parse_options ()
+{
+    $debug_cmd
+
+    func_parse_options_result=
+
+    _G_rc_parse_options=false
+    # this just eases exit handling
+    while test $# -gt 0; do
+      # Defer to hook functions for initial option parsing, so they
+      # get priority in the event of reusing an option name.
+      if func_run_hooks func_parse_options ${1+"$@"}; then
+        eval set dummy "$func_run_hooks_result"; shift
+        _G_rc_parse_options=:
+      fi
+
+      # Break out of the loop if we already parsed every option.
+      test $# -gt 0 || break
+
+      _G_match_parse_options=:
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --debug|-x)   debug_cmd='set -x'
+                      func_echo "enabling shell trace mode"
+                      $debug_cmd
+                      ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                      set dummy --warnings none ${1+"$@"}
+                      shift
+                     ;;
+
+        --warnings|--warning|-W)
+                      if test $# = 0 && func_missing_arg $_G_opt; then
+                        _G_rc_parse_options=:
+                        break
+                      fi
+                      case " $warning_categories $1" in
+                        *" $1 "*)
+                          # trailing space prevents matching last $1 above
+                          func_append_uniq opt_warning_types " $1"
+                          ;;
+                        *all)
+                          opt_warning_types=$warning_categories
+                          ;;
+                        *none)
+                          opt_warning_types=none
+                          warning_func=:
+                          ;;
+                        *error)
+                          opt_warning_types=$warning_categories
+                          warning_func=func_fatal_error
+                          ;;
+                        *)
+                          func_fatal_error \
+                             "unsupported warning category: '$1'"
+                          ;;
+                      esac
+                      shift
+                      ;;
+
+        --verbose|-v) opt_verbose=: ;;
+        --version)    func_version ;;
+        -\?|-h)       func_usage ;;
+        --help)       func_help ;;
+
+       # Separate optargs to long options (plugins may need this):
+       --*=*)        func_split_equals "$_G_opt"
+                     set dummy "$func_split_equals_lhs" \
+                          "$func_split_equals_rhs" ${1+"$@"}
+                      shift
+                      ;;
+
+       # Separate optargs to short options:
+        -W*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        # Separate non-argument short options:
+        -\?*|-h*|-v*|-x*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "-$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        --)           _G_rc_parse_options=: ; break ;;
+        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
+        *)            set dummy "$_G_opt" ${1+"$@"}; shift
+                      _G_match_parse_options=false
+                      break
+                      ;;
+      esac
+
+      $_G_match_parse_options && _G_rc_parse_options=:
+    done
+
+
+    if $_G_rc_parse_options; then
+      # save modified positional parameters for caller
+      func_quote_for_eval ${1+"$@"}
+      func_parse_options_result=$func_quote_for_eval_result
+    fi
+
+    $_G_rc_parse_options
+}
+
+
+# func_validate_options [ARG]...
+# ------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+func_hookable func_validate_options
+func_validate_options ()
+{
+    $debug_cmd
+
+    _G_rc_validate_options=false
+
+    # Display all warnings if -W was not given.
+    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
+
+    if func_run_hooks func_validate_options ${1+"$@"}; then
+      # save modified positional parameters for caller
+      func_validate_options_result=$func_run_hooks_result
+      _G_rc_validate_options=:
+    fi
+
+    # Bail if the options were screwed!
+    $exit_cmd $EXIT_FAILURE
+
+    $_G_rc_validate_options
+}
+
+
+
+## ----------------- ##
+## Helper functions. ##
+## ----------------- ##
+
+# This section contains the helper functions used by the rest of the
+# hookable option parser framework in ascii-betical order.
+
+
+# func_fatal_help ARG...
+# ----------------------
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    $debug_cmd
+
+    eval \$ECHO \""Usage: $usage"\"
+    eval \$ECHO \""$fatal_help"\"
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+
+# func_help
+# ---------
+# Echo long help message to standard output and exit.
+func_help ()
+{
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "$long_help_message"
+    exit 0
+}
+
+
+# func_missing_arg ARGNAME
+# ------------------------
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    $debug_cmd
+
+    func_error "Missing argument for '$1'."
+    exit_cmd=exit
+}
+
+
+# func_split_equals STRING
+# ------------------------
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
+# splitting STRING at the '=' sign.
+test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_equals ()
+  {
+      $debug_cmd
+
+      func_split_equals_lhs=${1%%=*}
+      func_split_equals_rhs=${1#*=}
+      test "x$func_split_equals_lhs" = "x$1" \
+        && func_split_equals_rhs=
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_equals ()
+  {
+      $debug_cmd
+
+      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
+      func_split_equals_rhs=
+      test "x$func_split_equals_lhs" = "x$1" \
+        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
+  }
+fi #func_split_equals
+
+
+# func_split_short_opt SHORTOPT
+# -----------------------------
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_arg=${1#??}
+      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
+      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
+  }
+fi #func_split_short_opt
+
+
+# func_usage
+# ----------
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
+    exit 0
+}
+
+
+# func_usage_message
+# ------------------
+# Echo short help message to standard output.
+func_usage_message ()
+{
+    $debug_cmd
+
+    eval \$ECHO \""Usage: $usage"\"
+    echo
+    $SED -n 's|^# ||
+        /^Written by/{
+          x;p;x
+        }
+       h
+       /^Written by/q' < "$progpath"
+    echo
+    eval \$ECHO \""$usage_message"\"
+}
+
+
+# func_version
+# ------------
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $debug_cmd
+
+    printf '%s\n' "$progname $scriptversion"
+    $SED -n '
+        /(C)/!b go
+        :more
+        /\./!{
+          N
+          s|\n# | |
+          b more
+        }
+        :go
+        /^# Written by /,/# warranty; / {
+          s|^# ||
+          s|^# *$||
+          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+          p
+        }
+        /^# Written by / {
+          s|^# ||
+          p
+        }
+        /^warranty; /q' < "$progpath"
+
+    exit $?
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+
+# Set a version string.
+scriptversion='(GNU libtool) 2.4.6'
+
+
+# func_echo ARG...
+# ----------------
+# Libtool also displays the current mode in messages, so override
+# funclib.sh func_echo with this custom definition.
+func_echo ()
+{
+    $debug_cmd
+
+    _G_message=$*
+
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
+
+
+# func_warning ARG...
+# -------------------
+# Libtool warnings are not categorized, so override funclib.sh
+# func_warning with this simpler definition.
+func_warning ()
+{
+    $debug_cmd
+
+    $warning_func ${1+"$@"}
+}
+
+
+## ---------------- ##
+## Options parsing. ##
+## ---------------- ##
+
+# Hook in the functions to make sure our own options are parsed during
+# the option parsing loop.
+
+usage='$progpath [OPTION]... [MODE-ARG]...'
+
+# Short help message in response to '-h'.
+usage_message="Options:
+       --config             show all configuration variables
+       --debug              enable verbose shell tracing
+   -n, --dry-run            display commands without modifying any files
+       --features           display basic configuration information and exit
+       --mode=MODE          use operation mode MODE
+       --no-warnings        equivalent to '-Wnone'
+       --preserve-dup-deps  don't remove duplicate dependency libraries
+       --quiet, --silent    don't print informational messages
+       --tag=TAG            use configuration variables from tag TAG
+   -v, --verbose            print more informational messages than default
+       --version            print version information
+   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
+   -h, --help, --help-all   print short, long, or detailed help message
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+func_help ()
+{
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "$long_help_message
+
+MODE must be one of the following:
+
+       clean           remove files from the build directory
+       compile         compile a source file into a libtool object
+       execute         automatically set library path, then run a program
+       finish          complete the installation of libtool libraries
+       install         install libraries or executables
+       link            create a library or an executable
+       uninstall       remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE.  When passed as first option,
+'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
+Try '$progname --help --mode=MODE' for a more detailed description of MODE.
+
+When reporting a bug, please describe a test case to reproduce it and
+include the following information:
+
+       host-triplet:   $host
+       shell:          $SHELL
+       compiler:       $LTCC
+       compiler flags: $LTCFLAGS
+       linker:         $LD (gnu? $with_gnu_ld)
+       version:        $progname $scriptversion Debian-2.4.6-9
+       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
+       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
+
+Report bugs to <bug-libtool@gnu.org>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+    exit 0
+}
+
+
+# func_lo2o OBJECT-NAME
+# ---------------------
+# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
+# object suffix.
+
+lo2o=s/\\.lo\$/.$objext/
+o2lo=s/\\.$objext\$/.lo/
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_lo2o ()
+  {
+    case $1 in
+      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
+      *   ) func_lo2o_result=$1               ;;
+    esac
+  }'
+
+  # func_xform LIBOBJ-OR-SOURCE
+  # ---------------------------
+  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
+  # suffix to a '.lo' libtool-object suffix.
+  eval 'func_xform ()
+  {
+    func_xform_result=${1%.*}.lo
+  }'
+else
+  # ...otherwise fall back to using sed.
+  func_lo2o ()
+  {
+    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
+  }
+
+  func_xform ()
+  {
+    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
+  }
+fi
+
+
+# func_fatal_configuration ARG...
+# -------------------------------
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func__fatal_error ${1+"$@"} \
+      "See the $PACKAGE documentation for more information." \
+      "Fatal configuration error."
+}
+
+
+# func_config
+# -----------
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+
+# func_features
+# -------------
+# Display the features supported by this script.
+func_features ()
+{
+    echo "host: $host"
+    if test yes = "$build_libtool_libs"; then
+      echo "enable shared libraries"
+    else
+      echo "disable shared libraries"
+    fi
+    if test yes = "$build_old_libs"; then
+      echo "enable static libraries"
+    else
+      echo "disable static libraries"
+    fi
+
+    exit $?
+}
+
+
+# func_enable_tag TAGNAME
+# -----------------------
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+    # Global variable:
+    tagname=$1
+
+    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+    sed_extractcf=/$re_begincf/,/$re_endcf/p
+
+    # Validate tagname.
+    case $tagname in
+      *[!-_A-Za-z0-9,/]*)
+        func_fatal_error "invalid tag name: $tagname"
+        ;;
+    esac
+
+    # Don't test for the "default" C tag, as we know it's
+    # there but not specially marked.
+    case $tagname in
+        CC) ;;
+    *)
+        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+         taglist="$taglist $tagname"
+
+         # Evaluate the configuration.  Be careful to quote the path
+         # and the sed script, to avoid splitting on whitespace, but
+         # also don't use non-portable quotes within backquotes within
+         # quotes we have to do it in 2 steps:
+         extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+         eval "$extractedcf"
+        else
+         func_error "ignoring unknown tag $tagname"
+        fi
+        ;;
+    esac
+}
+
+
+# func_check_version_match
+# ------------------------
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+    if test "$package_revision" != "$macro_revision"; then
+      if test "$VERSION" != "$macro_version"; then
+        if test -z "$macro_version"; then
+          cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+        else
+          cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+        fi
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+      fi
+
+      exit $EXIT_MISMATCH
+    fi
+}
+
+
+# libtool_options_prep [ARG]...
+# -----------------------------
+# Preparation for options parsed by libtool.
+libtool_options_prep ()
+{
+    $debug_mode
+
+    # Option defaults:
+    opt_config=false
+    opt_dlopen=
+    opt_dry_run=false
+    opt_help=false
+    opt_mode=
+    opt_preserve_dup_deps=false
+    opt_quiet=false
+
+    nonopt=
+    preserve_args=
+
+    _G_rc_lt_options_prep=:
+
+    # Shorthand for --mode=foo, only valid as the first argument
+    case $1 in
+    clean|clea|cle|cl)
+      shift; set dummy --mode clean ${1+"$@"}; shift
+      ;;
+    compile|compil|compi|comp|com|co|c)
+      shift; set dummy --mode compile ${1+"$@"}; shift
+      ;;
+    execute|execut|execu|exec|exe|ex|e)
+      shift; set dummy --mode execute ${1+"$@"}; shift
+      ;;
+    finish|finis|fini|fin|fi|f)
+      shift; set dummy --mode finish ${1+"$@"}; shift
+      ;;
+    install|instal|insta|inst|ins|in|i)
+      shift; set dummy --mode install ${1+"$@"}; shift
+      ;;
+    link|lin|li|l)
+      shift; set dummy --mode link ${1+"$@"}; shift
+      ;;
+    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+      shift; set dummy --mode uninstall ${1+"$@"}; shift
+      ;;
+    *)
+      _G_rc_lt_options_prep=false
+      ;;
+    esac
+
+    if $_G_rc_lt_options_prep; then
+      # Pass back the list of options.
+      func_quote_for_eval ${1+"$@"}
+      libtool_options_prep_result=$func_quote_for_eval_result
+    fi
+
+    $_G_rc_lt_options_prep
+}
+func_add_hook func_options_prep libtool_options_prep
+
+
+# libtool_parse_options [ARG]...
+# ---------------------------------
+# Provide handling for libtool specific options.
+libtool_parse_options ()
+{
+    $debug_cmd
+
+    _G_rc_lt_parse_options=false
+
+    # Perform our own loop to consume as many options as possible in
+    # each iteration.
+    while test $# -gt 0; do
+      _G_match_lt_parse_options=:
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --dry-run|--dryrun|-n)
+                        opt_dry_run=:
+                        ;;
+
+        --config)       func_config ;;
+
+        --dlopen|-dlopen)
+                        opt_dlopen="${opt_dlopen+$opt_dlopen
+}$1"
+                        shift
+                        ;;
+
+        --preserve-dup-deps)
+                        opt_preserve_dup_deps=: ;;
+
+        --features)     func_features ;;
+
+        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
+
+        --help)         opt_help=: ;;
+
+        --help-all)     opt_help=': help-all' ;;
+
+        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_mode=$1
+                        case $1 in
+                          # Valid mode arguments:
+                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+                          # Catch anything else as an error
+                          *) func_error "invalid argument for $_G_opt"
+                             exit_cmd=exit
+                             break
+                             ;;
+                        esac
+                        shift
+                        ;;
+
+        --no-silent|--no-quiet)
+                        opt_quiet=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                        opt_warning=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-verbose)
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --silent|--quiet)
+                        opt_quiet=:
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_tag=$1
+                        func_append preserve_args " $_G_opt $1"
+                        func_enable_tag "$1"
+                        shift
+                        ;;
+
+        --verbose|-v)   opt_quiet=false
+                        opt_verbose=:
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        # An option not handled by this hook function:
+        *)              set dummy "$_G_opt" ${1+"$@"} ; shift
+                        _G_match_lt_parse_options=false
+                        break
+                        ;;
+      esac
+      $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
+    done
+
+    if $_G_rc_lt_parse_options; then
+      # save modified positional parameters for caller
+      func_quote_for_eval ${1+"$@"}
+      libtool_parse_options_result=$func_quote_for_eval_result
+    fi
+
+    $_G_rc_lt_parse_options
+}
+func_add_hook func_parse_options libtool_parse_options
+
+
+
+# libtool_validate_options [ARG]...
+# ---------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+libtool_validate_options ()
+{
+    # save first non-option argument
+    if test 0 -lt $#; then
+      nonopt=$1
+      shift
+    fi
+
+    # preserve --debug
+    test : = "$debug_cmd" || func_append preserve_args " --debug"
+
+    case $host in
+      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
+        # don't eliminate duplications in $postdeps and $predeps
+        opt_duplicate_compiler_generated_deps=:
+        ;;
+      *)
+        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+        ;;
+    esac
+
+    $opt_help || {
+      # Sanity checks first:
+      func_check_version_match
+
+      test yes != "$build_libtool_libs" \
+        && test yes != "$build_old_libs" \
+        && func_fatal_configuration "not configured to build any kind of library"
+
+      # Darwin sucks
+      eval std_shrext=\"$shrext_cmds\"
+
+      # Only execute mode is allowed to have -dlopen flags.
+      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
+        func_error "unrecognized option '-dlopen'"
+        $ECHO "$help" 1>&2
+        exit $EXIT_FAILURE
+      fi
+
+      # Change the help message to a mode-specific one.
+      generic_help=$help
+      help="Try '$progname --help --mode=$opt_mode' for more information."
+    }
+
+    # Pass back the unparsed argument list
+    func_quote_for_eval ${1+"$@"}
+    libtool_validate_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_validate_options libtool_validate_options
+
+
+# Process options as early as possible so that --help and --version
+# can return quickly.
+func_options ${1+"$@"}
+eval set dummy "$func_options_result"; shift
+
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+magic='%%%MAGIC variable%%%'
+magic_exe='%%%MAGIC EXE variable%%%'
+
+# Global variables.
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# func_generated_by_libtool
+# True iff stdin has been generated by Libtool. This function is only
+# a basic sanity check; it will hardly flush out determined imposters.
+func_generated_by_libtool_p ()
+{
+  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if 'file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+       for lalib_p_l in 1 2 3 4
+       do
+           read lalib_p_line
+           case $lalib_p_line in
+               \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+           esac
+       done
+       exec 0<&5 5<&-
+    fi
+    test yes = "$lalib_p"
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    test -f "$1" &&
+      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $debug_cmd
+
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$sp$nl
+      eval cmd=\"$cmd\"
+      IFS=$save_ifs
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# 'FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $debug_cmd
+
+    case $1 in
+    */* | *\\*)        . "$1" ;;
+    *)         . "./$1" ;;
+    esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case $lt_sysroot:$1 in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result='='$func_stripname_result
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $debug_cmd
+
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+       func_append_quoted CC_quoted "$arg"
+      done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+       for z in $available_tags; do
+         if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+           # Evaluate the configuration.
+           eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+           CC_quoted=
+           for arg in $CC; do
+             # Double-quote args containing other shell metacharacters.
+             func_append_quoted CC_quoted "$arg"
+           done
+           CC_expanded=`func_echo_all $CC`
+           CC_quoted_expanded=`func_echo_all $CC_quoted`
+           case "$@ " in
+           " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+           " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+             # The compiler in the base compile command matches
+             # the one in the tagged configuration.
+             # Assume this is the tagged configuration we want.
+             tagname=$z
+             break
+             ;;
+           esac
+         fi
+       done
+       # If $tagname still isn't set, then no tagged configuration
+       # was found and let the user know that the "--tag" command
+       # line option must be used.
+       if test -z "$tagname"; then
+         func_echo "unable to infer tagged configuration"
+         func_fatal_error "specify a tag with '--tag'"
+#      else
+#        func_verbose "using $tagname tagged configuration"
+       fi
+       ;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=$1
+    if test yes = "$build_libtool_libs"; then
+      write_lobj=\'$2\'
+    else
+      write_lobj=none
+    fi
+
+    if test yes = "$build_old_libs"; then
+      write_oldobj=\'$3\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "$write_libobj"
+    }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $debug_cmd
+
+  func_convert_core_file_wine_to_w32_result=$1
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $debug_cmd
+
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result"; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $debug_cmd
+
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $debug_cmd
+
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $debug_cmd
+
+  if test -z "$2" && test -n "$1"; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  '$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result=$1
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $debug_cmd
+
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  '$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result=$3
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $debug_cmd
+
+  case $4 in
+  $1 ) func_to_host_path_result=$3$func_to_host_path_result
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via '$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $debug_cmd
+
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $debug_cmd
+
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result=$1
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result=$func_convert_core_msys_to_w32_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result=$func_cygpath_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result=$func_cygpath_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via '$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $debug_cmd
+
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd=func_convert_path_$func_stripname_result
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $debug_cmd
+
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result=$1
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result=$func_convert_core_msys_to_w32_result
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result=$func_cygpath_result
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result=$func_cygpath_result
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_dll_def_p FILE
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with _LT_DLL_DEF_P in libtool.m4
+func_dll_def_p ()
+{
+  $debug_cmd
+
+  func_dll_def_p_tmp=`$SED -n \
+    -e 's/^[    ]*//' \
+    -e '/^\(;.*\)*$/d' \
+    -e 's/^\(EXPORTS\|LIBRARY\)\([      ].*\)*$/DEF/p' \
+    -e q \
+    "$1"`
+  test DEF = "$func_dll_def_p_tmp"
+}
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $debug_cmd
+
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+       # do not "continue".  Instead, add this to base_compile
+       lastarg=$arg
+       arg_mode=normal
+       ;;
+
+      target )
+       libobj=$arg
+       arg_mode=normal
+       continue
+       ;;
+
+      normal )
+       # Accept any command-line options.
+       case $arg in
+       -o)
+         test -n "$libobj" && \
+           func_fatal_error "you cannot specify '-o' more than once"
+         arg_mode=target
+         continue
+         ;;
+
+       -pie | -fpie | -fPIE)
+          func_append pie_flag " $arg"
+         continue
+         ;;
+
+       -shared | -static | -prefer-pic | -prefer-non-pic)
+         func_append later " $arg"
+         continue
+         ;;
+
+       -no-suppress)
+         suppress_opt=no
+         continue
+         ;;
+
+       -Xcompiler)
+         arg_mode=arg  #  the next one goes into the "base_compile" arg list
+         continue      #  The current "srcfile" will either be retained or
+         ;;            #  replaced later.  I would guess that would be a bug.
+
+       -Wc,*)
+         func_stripname '-Wc,' '' "$arg"
+         args=$func_stripname_result
+         lastarg=
+         save_ifs=$IFS; IFS=,
+         for arg in $args; do
+           IFS=$save_ifs
+           func_append_quoted lastarg "$arg"
+         done
+         IFS=$save_ifs
+         func_stripname ' ' '' "$lastarg"
+         lastarg=$func_stripname_result
+
+         # Add the arguments to base_compile.
+         func_append base_compile " $lastarg"
+         continue
+         ;;
+
+       *)
+         # Accept the current argument as the source file.
+         # The previous "srcfile" becomes the current argument.
+         #
+         lastarg=$srcfile
+         srcfile=$arg
+         ;;
+       esac  #  case $arg
+       ;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_append_quoted base_compile "$lastarg"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with '-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+       func_basename "$srcfile"
+       libobj=$func_basename_result
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from '$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+       test yes = "$build_libtool_libs" \
+         || func_fatal_configuration "cannot build a shared library"
+       build_old_libs=no
+       continue
+       ;;
+
+      -static)
+       build_libtool_libs=no
+       build_old_libs=yes
+       continue
+       ;;
+
+      -prefer-pic)
+       pic_mode=yes
+       continue
+       ;;
+
+      -prefer-non-pic)
+       pic_mode=no
+       continue
+       ;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
+      && func_warning "libobj name '$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname=$func_basename_result
+    xdir=$func_dirname_result
+    lobj=$xdir$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test yes = "$build_old_libs"; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test no = "$compiler_c_o"; then
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
+      lockfile=$output_obj.lock
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test yes = "$need_locks"; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    elif test warn = "$need_locks"; then
+      if test -f "$lockfile"; then
+       $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+      func_append removelist " $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    func_append removelist " $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test yes = "$build_libtool_libs"; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test no != "$pic_mode"; then
+       command="$base_compile $qsrcfile $pic_flag"
+      else
+       # Don't build PIC code
+       command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+       # Place PIC objects in $objdir
+       func_append command " -o $lobj"
+      fi
+
+      func_show_eval_locale "$command" \
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test warn = "$need_locks" &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+       func_show_eval '$MV "$output_obj" "$lobj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test yes = "$suppress_opt"; then
+       suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test yes = "$build_old_libs"; then
+      if test yes != "$pic_mode"; then
+       # Don't build PIC code
+       command="$base_compile $qsrcfile$pie_flag"
+      else
+       command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test yes = "$compiler_c_o"; then
+       func_append command " -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      func_append command "$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test warn = "$need_locks" &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+       func_show_eval '$MV "$output_obj" "$obj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test no != "$need_locks"; then
+       removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $opt_mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
+  -shared           do not build a '.o' file suitable for static linking
+  -static           only build a '.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a 'standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix '.c' with the
+library object suffix, '.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to '-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the '--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the 'install' or 'cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
+  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  use a list of object files found in FILE to specify objects
+  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with '-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in '.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in '.la', then a libtool library is created,
+only library objects ('.lo' files) may be specified, and '-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
+using 'ar' and 'ranlib', or on Windows using 'lib'.
+
+If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode '$opt_mode'"
+        ;;
+    esac
+
+    echo
+    $ECHO "Try '$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test : = "$opt_help"; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+       func_mode_help
+      done
+    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+       echo
+       func_mode_help
+      done
+    } |
+    $SED '1d
+      /^When reporting/,/^Report/{
+       H
+       d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $debug_cmd
+
+    # The first argument is the command name.
+    cmd=$nonopt
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $opt_dlopen; do
+      test -f "$file" \
+       || func_fatal_help "'$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+       func_resolve_sysroot "$file"
+       file=$func_resolve_sysroot_result
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "'$lib' is not a valid libtool archive"
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+       func_source "$file"
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && \
+           func_warning "'$file' was not linked with '-export-dynamic'"
+         continue
+       fi
+
+       func_dirname "$file" "" "."
+       dir=$func_dirname_result
+
+       if test -f "$dir/$objdir/$dlname"; then
+         func_append dir "/$objdir"
+       else
+         if test ! -f "$dir/$dlname"; then
+           func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
+         fi
+       fi
+       ;;
+
+      *.lo)
+       # Just add the directory containing the .lo file.
+       func_dirname "$file" "" "."
+       dir=$func_dirname_result
+       ;;
+
+      *)
+       func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
+       continue
+       ;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir=$absdir
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+       eval "$shlibpath_var=\"\$dir\""
+      else
+       eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic=$magic
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -* | *.la | *.lo ) ;;
+      *)
+       # Do a test to see if this is really a libtool program.
+       if func_ltwrapper_script_p "$file"; then
+         func_source "$file"
+         # Transform arg to wrapped name.
+         file=$progdir/$program
+       elif func_ltwrapper_executable_p "$file"; then
+         func_ltwrapper_scriptname "$file"
+         func_source "$func_ltwrapper_scriptname_result"
+         # Transform arg to wrapped name.
+         file=$progdir/$program
+       fi
+       ;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_append_quoted args "$file"
+    done
+
+    if $opt_dry_run; then
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+       eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+       echo "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    else
+      if test -n "$shlibpath_var"; then
+       # Export the shlibpath_var.
+       eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+       eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+             else
+               $lt_unset $lt_var
+             fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd=\$cmd$args
+    fi
+}
+
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $debug_cmd
+
+    libs=
+    libdirs=
+    admincmds=
+
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+       func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+       if func_lalib_unsafe_p "$opt"; then
+         func_append libs " $opt"
+       else
+         func_warning "'$opt' is not a valid libtool archive"
+       fi
+
+      else
+       func_fatal_error "invalid argument '$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
+
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+         $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+           > $tmpdir/tmp-la
+         mv -f $tmpdir/tmp-la $lib
+       done
+        ${RM}r "$tmpdir"
+      fi
+    fi
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for libdir in $libdirs; do
+       if test -n "$finish_cmds"; then
+         # Do each command in the finish commands.
+         func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+       fi
+       if test -n "$finish_eval"; then
+         # Do the single finish_eval.
+         eval cmds=\"$finish_eval\"
+         $opt_dry_run || eval "$cmds" || func_append admincmds "
+       $cmds"
+       fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_quiet && exit $EXIT_SUCCESS
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+       $ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+       echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
+       echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+       echo "   - add LIBDIR to the '$runpath_var' environment variable"
+       echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+       libdir=LIBDIR
+       eval flag=\"$hardcode_libdir_flag_spec\"
+
+       $ECHO "   - use the '$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+       $ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+       echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
+      fi
+      echo
+
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+       solaris2.[6789]|solaris2.1[0-9])
+         echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+         echo "pages."
+         ;;
+       *)
+         echo "more information, such as the ld(1) and ld.so(8) manual pages."
+         ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
+    exit $EXIT_SUCCESS
+}
+
+test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $debug_cmd
+
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
+       # Allow the use of GNU shtool's install command.
+       case $nonopt in *shtool*) :;; *) false;; esac
+    then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=false
+    stripme=
+    no_mode=:
+    for arg
+    do
+      arg2=
+      if test -n "$dest"; then
+       func_append files " $dest"
+       dest=$arg
+       continue
+      fi
+
+      case $arg in
+      -d) isdir=: ;;
+      -f)
+       if $install_cp; then :; else
+         prev=$arg
+       fi
+       ;;
+      -g | -m | -o)
+       prev=$arg
+       ;;
+      -s)
+       stripme=" -s"
+       continue
+       ;;
+      -*)
+       ;;
+      *)
+       # If the previous option needed an argument, then skip it.
+       if test -n "$prev"; then
+         if test X-m = "X$prev" && test -n "$install_override_mode"; then
+           arg2=$install_override_mode
+           no_mode=false
+         fi
+         prev=
+       else
+         dest=$arg
+         continue
+       fi
+       ;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+       func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the '$prev' option requires an argument"
+
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+       func_quote_for_eval "$install_override_mode"
+       func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+       func_fatal_help "no file or destination specified"
+      else
+       func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=:
+    if $isdir; then
+      destdir=$dest
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir=$func_dirname_result
+      destname=$func_basename_result
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+       func_fatal_help "'$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+       case $file in
+       *.lo) ;;
+       *)
+         func_fatal_help "'$destdir' must be an absolute directory name"
+         ;;
+       esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic=$magic
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+       # Do the static libraries later.
+       func_append staticlibs " $file"
+       ;;
+
+      *.la)
+       func_resolve_sysroot "$file"
+       file=$func_resolve_sysroot_result
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "'$file' is not a valid libtool archive"
+
+       library_names=
+       old_library=
+       relink_command=
+       func_source "$file"
+
+       # Add the libdir to current_libdirs if it is the destination.
+       if test "X$destdir" = "X$libdir"; then
+         case "$current_libdirs " in
+         *" $libdir "*) ;;
+         *) func_append current_libdirs " $libdir" ;;
+         esac
+       else
+         # Note the libdir as a future libdir.
+         case "$future_libdirs " in
+         *" $libdir "*) ;;
+         *) func_append future_libdirs " $libdir" ;;
+         esac
+       fi
+
+       func_dirname "$file" "/" ""
+       dir=$func_dirname_result
+       func_append dir "$objdir"
+
+       if test -n "$relink_command"; then
+         # Determine the prefix the user has applied to our future dir.
+         inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+         # Don't allow the user to place us outside of our expected
+         # location b/c this prevents finding dependent libraries that
+         # are installed to the same prefix.
+         # At present, this check doesn't affect windows .dll's that
+         # are installed into $libdir/../bin (currently, that works fine)
+         # but it's something to keep an eye on.
+         test "$inst_prefix_dir" = "$destdir" && \
+           func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
+
+         if test -n "$inst_prefix_dir"; then
+           # Stick the inst_prefix_dir data into the link command.
+           relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+         else
+           relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+         fi
+
+         func_warning "relinking '$file'"
+         func_show_eval "$relink_command" \
+           'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
+       fi
+
+       # See the names of the shared library.
+       set dummy $library_names; shift
+       if test -n "$1"; then
+         realname=$1
+         shift
+
+         srcname=$realname
+         test -n "$relink_command" && srcname=${realname}T
+
+         # Install the shared library and build the symlinks.
+         func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+             'exit $?'
+         tstripme=$stripme
+         case $host_os in
+         cygwin* | mingw* | pw32* | cegcc*)
+           case $realname in
+           *.dll.a)
+             tstripme=
+             ;;
+           esac
+           ;;
+         os2*)
+           case $realname in
+           *_dll.a)
+             tstripme=
+             ;;
+           esac
+           ;;
+         esac
+         if test -n "$tstripme" && test -n "$striplib"; then
+           func_show_eval "$striplib $destdir/$realname" 'exit $?'
+         fi
+
+         if test "$#" -gt 0; then
+           # Delete the old symlinks, and create new ones.
+           # Try 'ln -sf' first, because the 'ln' binary might depend on
+           # the symlink we replace!  Solaris /bin/ln does not understand -f,
+           # so we also need to try rm && ln -s.
+           for linkname
+           do
+             test "$linkname" != "$realname" \
+               && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+           done
+         fi
+
+         # Do each command in the postinstall commands.
+         lib=$destdir/$realname
+         func_execute_cmds "$postinstall_cmds" 'exit $?'
+       fi
+
+       # Install the pseudo-library for information purposes.
+       func_basename "$file"
+       name=$func_basename_result
+       instname=$dir/${name}i
+       func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+       # Maybe install the static library, too.
+       test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+       ;;
+
+      *.lo)
+       # Install (i.e. copy) a libtool object.
+
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile=$destdir/$destname
+       else
+         func_basename "$file"
+         destfile=$func_basename_result
+         destfile=$destdir/$destfile
+       fi
+
+       # Deduce the name of the destination old-style object file.
+       case $destfile in
+       *.lo)
+         func_lo2o "$destfile"
+         staticdest=$func_lo2o_result
+         ;;
+       *.$objext)
+         staticdest=$destfile
+         destfile=
+         ;;
+       *)
+         func_fatal_help "cannot copy a libtool object to '$destfile'"
+         ;;
+       esac
+
+       # Install the libtool object if requested.
+       test -n "$destfile" && \
+         func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+       # Install the old object if enabled.
+       if test yes = "$build_old_libs"; then
+         # Deduce the name of the old-style object file.
+         func_lo2o "$file"
+         staticobj=$func_lo2o_result
+         func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+       fi
+       exit $EXIT_SUCCESS
+       ;;
+
+      *)
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile=$destdir/$destname
+       else
+         func_basename "$file"
+         destfile=$func_basename_result
+         destfile=$destdir/$destfile
+       fi
+
+       # If the file is missing, and there is a .exe on the end, strip it
+       # because it is most likely a libtool script we actually want to
+       # install
+       stripped_ext=
+       case $file in
+         *.exe)
+           if test ! -f "$file"; then
+             func_stripname '' '.exe' "$file"
+             file=$func_stripname_result
+             stripped_ext=.exe
+           fi
+           ;;
+       esac
+
+       # Do a test to see if this is really a libtool program.
+       case $host in
+       *cygwin* | *mingw*)
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             wrapper=$func_ltwrapper_scriptname_result
+           else
+             func_stripname '' '.exe' "$file"
+             wrapper=$func_stripname_result
+           fi
+           ;;
+       *)
+           wrapper=$file
+           ;;
+       esac
+       if func_ltwrapper_script_p "$wrapper"; then
+         notinst_deplibs=
+         relink_command=
+
+         func_source "$wrapper"
+
+         # Check the variables that should have been set.
+         test -z "$generated_by_libtool_version" && \
+           func_fatal_error "invalid libtool wrapper script '$wrapper'"
+
+         finalize=:
+         for lib in $notinst_deplibs; do
+           # Check to see that each library is installed.
+           libdir=
+           if test -f "$lib"; then
+             func_source "$lib"
+           fi
+           libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
+           if test -n "$libdir" && test ! -f "$libfile"; then
+             func_warning "'$lib' has not been installed in '$libdir'"
+             finalize=false
+           fi
+         done
+
+         relink_command=
+         func_source "$wrapper"
+
+         outputname=
+         if test no = "$fast_install" && test -n "$relink_command"; then
+           $opt_dry_run || {
+             if $finalize; then
+               tmpdir=`func_mktempdir`
+               func_basename "$file$stripped_ext"
+               file=$func_basename_result
+               outputname=$tmpdir/$file
+               # Replace the output file specification.
+               relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+               $opt_quiet || {
+                 func_quote_for_expand "$relink_command"
+                 eval "func_echo $func_quote_for_expand_result"
+               }
+               if eval "$relink_command"; then :
+                 else
+                 func_error "error: relink '$file' with the above command before installing it"
+                 $opt_dry_run || ${RM}r "$tmpdir"
+                 continue
+               fi
+               file=$outputname
+             else
+               func_warning "cannot relink '$file'"
+             fi
+           }
+         else
+           # Install the binary that we compiled earlier.
+           file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+         fi
+       fi
+
+       # remove .exe since cygwin /usr/bin/install will append another
+       # one anyway
+       case $install_prog,$host in
+       */usr/bin/install*,*cygwin*)
+         case $file:$destfile in
+         *.exe:*.exe)
+           # this is ok
+           ;;
+         *.exe:*)
+           destfile=$destfile.exe
+           ;;
+         *:*.exe)
+           func_stripname '' '.exe' "$destfile"
+           destfile=$func_stripname_result
+           ;;
+         esac
+         ;;
+       esac
+       func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+       $opt_dry_run || if test -n "$outputname"; then
+         ${RM}r "$tmpdir"
+       fi
+       ;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name=$func_basename_result
+
+      # Set up the ranlib parameters.
+      oldlib=$destdir/$name
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+       func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run '$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test install = "$opt_mode" && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $debug_cmd
+
+    my_outputname=$1
+    my_originator=$2
+    my_pic_p=${3-false}
+    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+       my_dlsyms=${my_outputname}S.c
+      else
+       func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+       # Discover the nlist of each of the dlfiles.
+       nlist=$output_objdir/$my_outputname.nm
+
+       func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+       # Parse the name list into a source file.
+       func_verbose "creating $output_objdir/$my_dlsyms"
+
+       $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* External symbol declarations for the compiler. */\
+"
+
+       if test yes = "$dlself"; then
+         func_verbose "generating symbol list for '$output'"
+
+         $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+         # Add our own program objects to the symbol list.
+         progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+         for progfile in $progfiles; do
+           func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+           func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
+           $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+         done
+
+         if test -n "$exclude_expsyms"; then
+           $opt_dry_run || {
+             eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         if test -n "$export_symbols_regex"; then
+           $opt_dry_run || {
+             eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         # Prepare the list of exported symbols
+         if test -z "$export_symbols"; then
+           export_symbols=$output_objdir/$outputname.exp
+           $opt_dry_run || {
+             $RM $export_symbols
+             eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+             case $host in
+             *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+               ;;
+             esac
+           }
+         else
+           $opt_dry_run || {
+             eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+             case $host in
+               *cygwin* | *mingw* | *cegcc* )
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+                 ;;
+             esac
+           }
+         fi
+       fi
+
+       for dlprefile in $dlprefiles; do
+         func_verbose "extracting global C symbols from '$dlprefile'"
+         func_basename "$dlprefile"
+         name=$func_basename_result
+          case $host in
+           *cygwin* | *mingw* | *cegcc* )
+             # if an import library, we need to obtain dlname
+             if func_win32_import_lib_p "$dlprefile"; then
+               func_tr_sh "$dlprefile"
+               eval "curr_lafile=\$libfile_$func_tr_sh_result"
+               dlprefile_dlbasename=
+               if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+                 # Use subshell, to avoid clobbering current variable values
+                 dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+                 if test -n "$dlprefile_dlname"; then
+                   func_basename "$dlprefile_dlname"
+                   dlprefile_dlbasename=$func_basename_result
+                 else
+                   # no lafile. user explicitly requested -dlpreopen <import library>.
+                   $sharedlib_from_linklib_cmd "$dlprefile"
+                   dlprefile_dlbasename=$sharedlib_from_linklib_result
+                 fi
+               fi
+               $opt_dry_run || {
+                 if test -n "$dlprefile_dlbasename"; then
+                   eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+                 else
+                   func_warning "Could not compute DLL name from $name"
+                   eval '$ECHO ": $name " >> "$nlist"'
+                 fi
+                 func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+                 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+                   $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+               }
+             else # not an import lib
+               $opt_dry_run || {
+                 eval '$ECHO ": $name " >> "$nlist"'
+                 func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+                 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+               }
+             fi
+           ;;
+           *)
+             $opt_dry_run || {
+               eval '$ECHO ": $name " >> "$nlist"'
+               func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+               eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+             }
+           ;;
+          esac
+       done
+
+       $opt_dry_run || {
+         # Make sure we have at least an empty file.
+         test -f "$nlist" || : > "$nlist"
+
+         if test -n "$exclude_expsyms"; then
+           $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+           $MV "$nlist"T "$nlist"
+         fi
+
+         # Try sorting and uniquifying the output.
+         if $GREP -v "^: " < "$nlist" |
+             if sort -k 3 </dev/null >/dev/null 2>&1; then
+               sort -k 3
+             else
+               sort +2
+             fi |
+             uniq > "$nlist"S; then
+           :
+         else
+           $GREP -v "^: " < "$nlist" > "$nlist"S
+         fi
+
+         if test -f "$nlist"S; then
+           eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+         else
+           echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+         fi
+
+         func_show_eval '$RM "${nlist}I"'
+         if test -n "$global_symbol_to_import"; then
+           eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
+         fi
+
+         echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];\
+"
+
+         if test -s "$nlist"I; then
+           echo >> "$output_objdir/$my_dlsyms" "\
+static void lt_syminit(void)
+{
+  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
+  for (; symbol->name; ++symbol)
+    {"
+           $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
+           echo >> "$output_objdir/$my_dlsyms" "\
+    }
+}"
+         fi
+         echo >> "$output_objdir/$my_dlsyms" "\
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{ {\"$my_originator\", (void *) 0},"
+
+         if test -s "$nlist"I; then
+           echo >> "$output_objdir/$my_dlsyms" "\
+  {\"@INIT@\", (void *) &lt_syminit},"
+         fi
+
+         case $need_lib_prefix in
+         no)
+           eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         *)
+           eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         esac
+         echo >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+       } # !$opt_dry_run
+
+       pic_flag_for_symtable=
+       case "$compile_command " in
+       *" -static "*) ;;
+       *)
+         case $host in
+         # compiling the symbol table file with pic_flag works around
+         # a FreeBSD bug that causes programs to crash when -lm is
+         # linked before any other PIC object.  But we must not use
+         # pic_flag when linking with -static.  The problem exists in
+         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+         *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+           pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+         *-*-hpux*)
+           pic_flag_for_symtable=" $pic_flag"  ;;
+         *)
+           $my_pic_p && pic_flag_for_symtable=" $pic_flag"
+           ;;
+         esac
+         ;;
+       esac
+       symtab_cflags=
+       for arg in $LTCFLAGS; do
+         case $arg in
+         -pie | -fpie | -fPIE) ;;
+         *) func_append symtab_cflags " $arg" ;;
+         esac
+       done
+
+       # Now compile the dynamic symbol file.
+       func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+       # Clean up the generated files.
+       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
+
+       # Transform the symbol file into the correct name.
+       symfileobj=$output_objdir/${my_outputname}S.$objext
+       case $host in
+       *cygwin* | *mingw* | *cegcc* )
+         if test -f "$output_objdir/$my_outputname.def"; then
+           compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+           finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+         else
+           compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+           finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+         fi
+         ;;
+       *)
+         compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+         finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+         ;;
+       esac
+       ;;
+      *)
+       func_fatal_error "unknown suffix for '$my_dlsyms'"
+       ;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+  $debug_cmd
+
+  win32_libid_type=unknown
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      case $nm_interface in
+      "MS dumpbin")
+       if func_cygming_ms_implib_p "$1" ||
+          func_cygming_gnu_implib_p "$1"
+       then
+         win32_nmres=import
+       else
+         win32_nmres=
+       fi
+       ;;
+      *)
+       func_to_tool_file "$1" func_convert_file_msys_to_w32
+       win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+         $SED -n -e '
+           1,100{
+               / I /{
+                   s|.*|import|
+                   p
+                   q
+               }
+           }'`
+       ;;
+      esac
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $debug_cmd
+
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $debug_cmd
+
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[         ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive that possess that section. Heuristic: eliminate
+    # all those that have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $debug_cmd
+
+  if func_cygming_gnu_implib_p "$1"; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1"; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=
+  fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $debug_cmd
+
+    f_ex_an_ar_dir=$1; shift
+    f_ex_an_ar_oldlib=$1
+    if test yes = "$lock_old_archive_extraction"; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+                  'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test yes = "$lock_old_archive_extraction"; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $debug_cmd
+
+    my_gentop=$1; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=
+    my_xlib=
+    my_xabs=
+    my_xdir=
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
+       *) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib=$func_basename_result
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+       *" $my_xlib_u "*)
+         func_arith $extracted_serial + 1
+         extracted_serial=$func_arith_result
+         my_xlib_u=lt$extracted_serial-$my_xlib ;;
+       *) break ;;
+       esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir=$my_gentop/$my_xlib_u
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+       func_verbose "Extracting $my_xabs"
+       # Do not bother doing anything if just a dry run
+       $opt_dry_run || {
+         darwin_orig_dir=`pwd`
+         cd $my_xdir || exit $?
+         darwin_archive=$my_xabs
+         darwin_curdir=`pwd`
+         func_basename "$darwin_archive"
+         darwin_base_archive=$func_basename_result
+         darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+         if test -n "$darwin_arches"; then
+           darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+           darwin_arch=
+           func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+           for darwin_arch in  $darwin_arches; do
+             func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
+             $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
+             cd "unfat-$$/$darwin_base_archive-$darwin_arch"
+             func_extract_an_archive "`pwd`" "$darwin_base_archive"
+             cd "$darwin_curdir"
+             $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
+           done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+           darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
+           darwin_file=
+           darwin_files=
+           for darwin_file in $darwin_filelist; do
+             darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+             $LIPO -create -output "$darwin_file" $darwin_files
+           done # $darwin_filelist
+           $RM -rf unfat-$$
+           cd "$darwin_orig_dir"
+         else
+           cd $darwin_orig_dir
+           func_extract_an_archive "$my_xdir" "$my_xabs"
+         fi # $darwin_arches
+       } # !$opt_dry_run
+       ;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+       ;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+    done
+
+    func_extract_archives_result=$my_oldobjs
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory where it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+       func_emit_wrapper_arg1=${1-no}
+
+       $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ that is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options that match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+       if test yes = "$fast_install"; then
+         $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+         $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+       \$ECHO \"\$relink_command_output\" >&2
+       $RM \"\$progdir/\$file\"
+       exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+       else
+         $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+       fi
+
+       $ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+       # fixup the dll searchpath if we need to.
+       #
+       # Fix the DLL searchpath if we need to.  Do this before prepending
+       # to shlibpath, because on Windows, both are PATH and uninstalled
+       # libraries must come first.
+       if test -n "$dllsearchpath"; then
+         $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+       fi
+
+       # Export our shlibpath_var if we have one.
+       if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+         $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+       fi
+
+       $ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+      func_exec_program \${1+\"\$@\"}
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+       cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+*/
+EOF
+           cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* declarations of non-ANSI functions */
+#if defined __MINGW32__
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined __CYGWIN__
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined other_platform || defined ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined _MSC_VER
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+#elif defined __MINGW32__
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined __CYGWIN__
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined other platforms ... */
+#endif
+
+#if defined PATH_MAX
+# define LT_PATHMAX PATH_MAX
+#elif defined MAXPATHLEN
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
+  defined __OS2__
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+       (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free (stale); stale = 0; } \
+} while (0)
+
+#if defined LT_DEBUGWRAPPER
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+           cat <<EOF
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
+# define externally_visible volatile
+#else
+# define externally_visible __attribute__((externally_visible)) volatile
+#endif
+externally_visible const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+           if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_path "$temp_rpath"
+             cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+           else
+             cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test -n "$dllsearchpath"; then
+              func_to_host_path "$dllsearchpath:"
+             cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+           else
+             cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test yes = "$fast_install"; then
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+           else
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+           fi
+
+
+           cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  int rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  newargz = XMALLOC (char *, (size_t) argc + 1);
+
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (STREQ (argv[i], dumpscript_opt))
+       {
+EOF
+           case $host in
+             *mingw* | *cygwin* )
+               # make stdout use "unix" line endings
+               echo "          setmode(1,_O_BINARY);"
+               ;;
+             esac
+
+           cat <<"EOF"
+         lt_dump_script (stdout);
+         return 0;
+       }
+      if (STREQ (argv[i], debug_opt))
+       {
+          lt_debug = 1;
+          continue;
+       }
+      if (STREQ (argv[i], ltwrapper_option_prefix))
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+                   "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+EOF
+           cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
+EOF
+           cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+                 tmp_pathspec);
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+                 actual_cwrapper_path);
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(main) libtool target name: %s\n",
+                 target_name);
+EOF
+
+           cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+                   strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+           cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+           case $host_os in
+             mingw*)
+           cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+       *p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+       *p = '/';
+      }
+  }
+EOF
+           ;;
+           esac
+
+           cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+                 nonnull (lt_argv_zero));
+  for (i = 0; i < newargc; i++)
+    {
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+                     i, nonnull (newargz[i]));
+    }
+
+EOF
+
+           case $host_os in
+             mingw*)
+               cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
+  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      lt_debugprintf (__FILE__, __LINE__,
+                     "(main) failed to launch target \"%s\": %s\n",
+                     lt_argv_zero, nonnull (strerror (errno)));
+      return 127;
+    }
+  return rval;
+EOF
+               ;;
+             *)
+               cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+               ;;
+           esac
+
+           cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+                         string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  size_t tmp_len;
+  char *concat_name;
+
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+       return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+       {
+         concat_name = xstrdup (wrapper);
+         if (check_executable (concat_name))
+           return concat_name;
+         XFREE (concat_name);
+       }
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+       has_slash = 1;
+       break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+       {
+         for (p = path; *p; p = p_next)
+           {
+             const char *q;
+             size_t p_len;
+             for (q = p; *q; q++)
+               if (IS_PATH_SEPARATOR (*q))
+                 break;
+             p_len = (size_t) (q - p);
+             p_next = (*q == '\0' ? q : q + 1);
+             if (p_len == 0)
+               {
+                 /* empty path: current directory */
+                 if (getcwd (tmp, LT_PATHMAX) == NULL)
+                   lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
+                 tmp_len = strlen (tmp);
+                 concat_name =
+                   XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, tmp, tmp_len);
+                 concat_name[tmp_len] = '/';
+                 strcpy (concat_name + tmp_len + 1, wrapper);
+               }
+             else
+               {
+                 concat_name =
+                   XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, p, p_len);
+                 concat_name[p_len] = '/';
+                 strcpy (concat_name + p_len + 1, wrapper);
+               }
+             if (check_executable (concat_name))
+               return concat_name;
+             XFREE (concat_name);
+           }
+       }
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      lt_debugprintf (__FILE__, __LINE__,
+                     "checking path component for symlinks: %s\n",
+                     tmp_pathspec);
+      if (lstat (tmp_pathspec, &s) == 0)
+       {
+         if (S_ISLNK (s.st_mode) != 0)
+           {
+             has_symlinks = 1;
+             break;
+           }
+
+         /* search backwards for last DIR_SEPARATOR */
+         p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+         while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           p--;
+         if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           {
+             /* no more DIR_SEPARATORS left */
+             break;
+           }
+         *p = '\0';
+       }
+      else
+       {
+         lt_fatal (__FILE__, __LINE__,
+                   "error accessing file \"%s\": %s",
+                   tmp_pathspec, nonnull (strerror (errno)));
+       }
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal (__FILE__, __LINE__,
+               "could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (STREQ (str, pat))
+       *str = '\0';
+    }
+  return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+              int line, const char *mode,
+              const char *message, va_list ap)
+{
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+  va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    size_t len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      size_t orig_value_len = strlen (orig_value);
+      size_t add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      size_t len = strlen (new_value);
+      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[--len] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+EOF
+           case $host_os in
+             mingw*)
+               cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+       new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+       {
+         int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+         size_t length;
+         unsigned int backslashes;
+         const char *s;
+         char *quoted_string;
+         char *p;
+
+         length = 0;
+         backslashes = 0;
+         if (quote_around)
+           length++;
+         for (s = string; *s != '\0'; s++)
+           {
+             char c = *s;
+             if (c == '"')
+               length += backslashes + 1;
+             length++;
+             if (c == '\\')
+               backslashes++;
+             else
+               backslashes = 0;
+           }
+         if (quote_around)
+           length += backslashes + 1;
+
+         quoted_string = XMALLOC (char, length + 1);
+
+         p = quoted_string;
+         backslashes = 0;
+         if (quote_around)
+           *p++ = '"';
+         for (s = string; *s != '\0'; s++)
+           {
+             char c = *s;
+             if (c == '"')
+               {
+                 unsigned int j;
+                 for (j = backslashes + 1; j > 0; j--)
+                   *p++ = '\\';
+               }
+             *p++ = c;
+             if (c == '\\')
+               backslashes++;
+             else
+               backslashes = 0;
+           }
+         if (quote_around)
+           {
+             unsigned int j;
+             for (j = backslashes; j > 0; j--)
+               *p++ = '\\';
+             *p++ = '"';
+           }
+         *p = '\0';
+
+         new_argv[i] = quoted_string;
+       }
+      else
+       new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+               ;;
+           esac
+
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+           func_emit_wrapper yes |
+             $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
+            cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $debug_cmd
+
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
+# func_suncc_cstd_abi
+# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
+# Several compiler flags select an ABI that is incompatible with the
+# Cstd library. Avoid specifying it if any are in CXXFLAGS.
+func_suncc_cstd_abi ()
+{
+    $debug_cmd
+
+    case " $compile_command " in
+    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
+      suncc_use_cstd_abi=no
+      ;;
+    *)
+      suncc_use_cstd_abi=yes
+      ;;
+    esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $debug_cmd
+
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # what system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll that has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    bindir=
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    os2dllname=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=false
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module=$wl-single_module
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+       test yes != "$build_libtool_libs" \
+         && func_fatal_configuration "cannot build a shared library"
+       build_old_libs=no
+       break
+       ;;
+      -all-static | -static | -static-libtool-libs)
+       case $arg in
+       -all-static)
+         if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
+           func_warning "complete static linking is impossible in this configuration"
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       -static)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=built
+         ;;
+       -static-libtool-libs)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       esac
+       build_libtool_libs=no
+       build_old_libs=yes
+       break
+       ;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg=$1
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+       case $prev in
+       output)
+         func_append compile_command " @OUTPUT@"
+         func_append finalize_command " @OUTPUT@"
+         ;;
+       esac
+
+       case $prev in
+       bindir)
+         bindir=$arg
+         prev=
+         continue
+         ;;
+       dlfiles|dlprefiles)
+         $preload || {
+           # Add the symbol object into the linking commands.
+           func_append compile_command " @SYMFILE@"
+           func_append finalize_command " @SYMFILE@"
+           preload=:
+         }
+         case $arg in
+         *.la | *.lo) ;;  # We handle these cases below.
+         force)
+           if test no = "$dlself"; then
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         self)
+           if test dlprefiles = "$prev"; then
+             dlself=yes
+           elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
+             dlself=yes
+           else
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         *)
+           if test dlfiles = "$prev"; then
+             func_append dlfiles " $arg"
+           else
+             func_append dlprefiles " $arg"
+           fi
+           prev=
+           continue
+           ;;
+         esac
+         ;;
+       expsyms)
+         export_symbols=$arg
+         test -f "$arg" \
+           || func_fatal_error "symbol file '$arg' does not exist"
+         prev=
+         continue
+         ;;
+       expsyms_regex)
+         export_symbols_regex=$arg
+         prev=
+         continue
+         ;;
+       framework)
+         case $host in
+           *-*-darwin*)
+             case "$deplibs " in
+               *" $qarg.ltframework "*) ;;
+               *) func_append deplibs " $qarg.ltframework" # this is fixed later
+                  ;;
+             esac
+             ;;
+         esac
+         prev=
+         continue
+         ;;
+       inst_prefix)
+         inst_prefix_dir=$arg
+         prev=
+         continue
+         ;;
+       mllvm)
+         # Clang does not use LLVM to link, so we can simply discard any
+         # '-mllvm $arg' options when doing the link step.
+         prev=
+         continue
+         ;;
+       objectlist)
+         if test -f "$arg"; then
+           save_arg=$arg
+           moreargs=
+           for fil in `cat "$save_arg"`
+           do
+#            func_append moreargs " $fil"
+             arg=$fil
+             # A libtool-controlled object.
+
+             # Check to see that this really is a libtool object.
+             if func_lalib_unsafe_p "$arg"; then
+               pic_object=
+               non_pic_object=
+
+               # Read the .lo file
+               func_source "$arg"
+
+               if test -z "$pic_object" ||
+                  test -z "$non_pic_object" ||
+                  test none = "$pic_object" &&
+                  test none = "$non_pic_object"; then
+                 func_fatal_error "cannot find name of object for '$arg'"
+               fi
+
+               # Extract subdirectory from the argument.
+               func_dirname "$arg" "/" ""
+               xdir=$func_dirname_result
+
+               if test none != "$pic_object"; then
+                 # Prepend the subdirectory the object is found in.
+                 pic_object=$xdir$pic_object
+
+                 if test dlfiles = "$prev"; then
+                   if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+                     func_append dlfiles " $pic_object"
+                     prev=
+                     continue
+                   else
+                     # If libtool objects are unsupported, then we need to preload.
+                     prev=dlprefiles
+                   fi
+                 fi
+
+                 # CHECK ME:  I think I busted this.  -Ossama
+                 if test dlprefiles = "$prev"; then
+                   # Preload the old-style object.
+                   func_append dlprefiles " $pic_object"
+                   prev=
+                 fi
+
+                 # A PIC object.
+                 func_append libobjs " $pic_object"
+                 arg=$pic_object
+               fi
+
+               # Non-PIC object.
+               if test none != "$non_pic_object"; then
+                 # Prepend the subdirectory the object is found in.
+                 non_pic_object=$xdir$non_pic_object
+
+                 # A standard non-PIC object
+                 func_append non_pic_objects " $non_pic_object"
+                 if test -z "$pic_object" || test none = "$pic_object"; then
+                   arg=$non_pic_object
+                 fi
+               else
+                 # If the PIC object exists, use it instead.
+                 # $xdir was prepended to $pic_object above.
+                 non_pic_object=$pic_object
+                 func_append non_pic_objects " $non_pic_object"
+               fi
+             else
+               # Only an error if not doing a dry-run.
+               if $opt_dry_run; then
+                 # Extract subdirectory from the argument.
+                 func_dirname "$arg" "/" ""
+                 xdir=$func_dirname_result
+
+                 func_lo2o "$arg"
+                 pic_object=$xdir$objdir/$func_lo2o_result
+                 non_pic_object=$xdir$func_lo2o_result
+                 func_append libobjs " $pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               else
+                 func_fatal_error "'$arg' is not a valid libtool object"
+               fi
+             fi
+           done
+         else
+           func_fatal_error "link input file '$arg' does not exist"
+         fi
+         arg=$save_arg
+         prev=
+         continue
+         ;;
+       os2dllname)
+         os2dllname=$arg
+         prev=
+         continue
+         ;;
+       precious_regex)
+         precious_files_regex=$arg
+         prev=
+         continue
+         ;;
+       release)
+         release=-$arg
+         prev=
+         continue
+         ;;
+       rpath | xrpath)
+         # We need an absolute path.
+         case $arg in
+         [\\/]* | [A-Za-z]:[\\/]*) ;;
+         *)
+           func_fatal_error "only absolute run-paths are allowed"
+           ;;
+         esac
+         if test rpath = "$prev"; then
+           case "$rpath " in
+           *" $arg "*) ;;
+           *) func_append rpath " $arg" ;;
+           esac
+         else
+           case "$xrpath " in
+           *" $arg "*) ;;
+           *) func_append xrpath " $arg" ;;
+           esac
+         fi
+         prev=
+         continue
+         ;;
+       shrext)
+         shrext_cmds=$arg
+         prev=
+         continue
+         ;;
+       weak)
+         func_append weak_libs " $arg"
+         prev=
+         continue
+         ;;
+       xcclinker)
+         func_append linker_flags " $qarg"
+         func_append compiler_flags " $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xcompiler)
+         func_append compiler_flags " $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xlinker)
+         func_append linker_flags " $qarg"
+         func_append compiler_flags " $wl$qarg"
+         prev=
+         func_append compile_command " $wl$qarg"
+         func_append finalize_command " $wl$qarg"
+         continue
+         ;;
+       *)
+         eval "$prev=\"\$arg\""
+         prev=
+         continue
+         ;;
+       esac
+      fi # test -n "$prev"
+
+      prevarg=$arg
+
+      case $arg in
+      -all-static)
+       if test -n "$link_static_flag"; then
+         # See comment for -static flag below, for more details.
+         func_append compile_command " $link_static_flag"
+         func_append finalize_command " $link_static_flag"
+       fi
+       continue
+       ;;
+
+      -allow-undefined)
+       # FIXME: remove this flag sometime in the future.
+       func_fatal_error "'-allow-undefined' must not be used because it is the default"
+       ;;
+
+      -avoid-version)
+       avoid_version=yes
+       continue
+       ;;
+
+      -bindir)
+       prev=bindir
+       continue
+       ;;
+
+      -dlopen)
+       prev=dlfiles
+       continue
+       ;;
+
+      -dlpreopen)
+       prev=dlprefiles
+       continue
+       ;;
+
+      -export-dynamic)
+       export_dynamic=yes
+       continue
+       ;;
+
+      -export-symbols | -export-symbols-regex)
+       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+         func_fatal_error "more than one -exported-symbols argument is not allowed"
+       fi
+       if test X-export-symbols = "X$arg"; then
+         prev=expsyms
+       else
+         prev=expsyms_regex
+       fi
+       continue
+       ;;
+
+      -framework)
+       prev=framework
+       continue
+       ;;
+
+      -inst-prefix-dir)
+       prev=inst_prefix
+       continue
+       ;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+       case $with_gcc/$host in
+       no/*-*-irix* | /*-*-irix*)
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         ;;
+       esac
+       continue
+       ;;
+
+      -L*)
+       func_stripname "-L" '' "$arg"
+       if test -z "$func_stripname_result"; then
+         if test "$#" -gt 0; then
+           func_fatal_error "require no space between '-L' and '$1'"
+         else
+           func_fatal_error "need path for '-L' option"
+         fi
+       fi
+       func_resolve_sysroot "$func_stripname_result"
+       dir=$func_resolve_sysroot_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         absdir=`cd "$dir" && pwd`
+         test -z "$absdir" && \
+           func_fatal_error "cannot determine absolute directory name of '$dir'"
+         dir=$absdir
+         ;;
+       esac
+       case "$deplibs " in
+       *" -L$dir "* | *" $arg "*)
+         # Will only happen for absolute or sysroot arguments
+         ;;
+       *)
+         # Preserve sysroot, but never include relative directories
+         case $dir in
+           [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+           *) func_append deplibs " -L$dir" ;;
+         esac
+         func_append lib_search_path " $dir"
+         ;;
+       esac
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$dir:"*) ;;
+         ::) dllsearchpath=$dir;;
+         *) func_append dllsearchpath ":$dir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) func_append dllsearchpath ":$testbindir";;
+         esac
+         ;;
+       esac
+       continue
+       ;;
+
+      -l*)
+       if test X-lc = "X$arg" || test X-lm = "X$arg"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+           # These systems don't actually have a C or math library (as such)
+           continue
+           ;;
+         *-*-os2*)
+           # These systems don't actually have a C library (as such)
+           test X-lc = "X$arg" && continue
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+           # Do not include libc due to us having libc/libc_r.
+           test X-lc = "X$arg" && continue
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C and math libraries are in the System framework
+           func_append deplibs " System.ltframework"
+           continue
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           test X-lc = "X$arg" && continue
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           test X-lc = "X$arg" && continue
+           ;;
+         esac
+       elif test X-lc_r = "X$arg"; then
+        case $host in
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+          # Do not include libc_r directly, use -pthread flag.
+          continue
+          ;;
+        esac
+       fi
+       func_append deplibs " $arg"
+       continue
+       ;;
+
+      -mllvm)
+       prev=mllvm
+       continue
+       ;;
+
+      -module)
+       module=yes
+       continue
+       ;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot|--sysroot)
+       func_append compiler_flags " $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       prev=xcompiler
+       continue
+       ;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+       func_append compiler_flags " $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       case "$new_inherited_linker_flags " in
+           *" $arg "*) ;;
+           * ) func_append new_inherited_linker_flags " $arg" ;;
+       esac
+       continue
+       ;;
+
+      -multi_module)
+       single_module=$wl-multi_module
+       continue
+       ;;
+
+      -no-fast-install)
+       fast_install=no
+       continue
+       ;;
+
+      -no-install)
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+         # The PATH hackery in wrapper scripts is required on Windows
+         # and Darwin in order for the loader to find any dlls it needs.
+         func_warning "'-no-install' is ignored for $host"
+         func_warning "assuming '-no-fast-install' instead"
+         fast_install=no
+         ;;
+       *) no_install=yes ;;
+       esac
+       continue
+       ;;
+
+      -no-undefined)
+       allow_undefined=no
+       continue
+       ;;
+
+      -objectlist)
+       prev=objectlist
+       continue
+       ;;
+
+      -os2dllname)
+       prev=os2dllname
+       continue
+       ;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+       prev=precious_regex
+       continue
+       ;;
+
+      -release)
+       prev=release
+       continue
+       ;;
+
+      -rpath)
+       prev=rpath
+       continue
+       ;;
+
+      -R)
+       prev=xrpath
+       continue
+       ;;
+
+      -R*)
+       func_stripname '-R' '' "$arg"
+       dir=$func_stripname_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       =*)
+         func_stripname '=' '' "$dir"
+         dir=$lt_sysroot$func_stripname_result
+         ;;
+       *)
+         func_fatal_error "only absolute run-paths are allowed"
+         ;;
+       esac
+       case "$xrpath " in
+       *" $dir "*) ;;
+       *) func_append xrpath " $dir" ;;
+       esac
+       continue
+       ;;
+
+      -shared)
+       # The effects of -shared are defined in a previous loop.
+       continue
+       ;;
+
+      -shrext)
+       prev=shrext
+       continue
+       ;;
+
+      -static | -static-libtool-libs)
+       # The effects of -static are defined in a previous loop.
+       # We used to do the same as -all-static on platforms that
+       # didn't have a PIC flag, but the assumption that the effects
+       # would be equivalent was wrong.  It would break on at least
+       # Digital Unix and AIX.
+       continue
+       ;;
+
+      -thread-safe)
+       thread_safe=yes
+       continue
+       ;;
+
+      -version-info)
+       prev=vinfo
+       continue
+       ;;
+
+      -version-number)
+       prev=vinfo
+       vinfo_number=yes
+       continue
+       ;;
+
+      -weak)
+        prev=weak
+       continue
+       ;;
+
+      -Wc,*)
+       func_stripname '-Wc,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs=$IFS; IFS=,
+       for flag in $args; do
+         IFS=$save_ifs
+          func_quote_for_eval "$flag"
+         func_append arg " $func_quote_for_eval_result"
+         func_append compiler_flags " $func_quote_for_eval_result"
+       done
+       IFS=$save_ifs
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Wl,*)
+       func_stripname '-Wl,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs=$IFS; IFS=,
+       for flag in $args; do
+         IFS=$save_ifs
+          func_quote_for_eval "$flag"
+         func_append arg " $wl$func_quote_for_eval_result"
+         func_append compiler_flags " $wl$func_quote_for_eval_result"
+         func_append linker_flags " $func_quote_for_eval_result"
+       done
+       IFS=$save_ifs
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Xcompiler)
+       prev=xcompiler
+       continue
+       ;;
+
+      -Xlinker)
+       prev=xlinker
+       continue
+       ;;
+
+      -XCClinker)
+       prev=xcclinker
+       continue
+       ;;
+
+      # -msg_* for osf cc
+      -msg_*)
+       func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
+       ;;
+
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # -fstack-protector*   stack protector flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      # -specs=*             GCC specs files
+      # -stdlib=*            select c++ std lib with clang
+      # -fsanitize=*         Clang/GCC memory and address sanitizer
+      # -fuse-ld=*           Linker select flags for GCC
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+      -specs=*|-fsanitize=*|-fuse-ld=*)
+        func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        func_append compiler_flags " $arg"
+        continue
+        ;;
+
+      -Z*)
+        if test os2 = "`expr $host : '.*\(os2\)'`"; then
+          # OS/2 uses -Zxxx to specify OS/2-specific options
+         compiler_flags="$compiler_flags $arg"
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         case $arg in
+         -Zlinker | -Zstack)
+           prev=xcompiler
+           ;;
+         esac
+         continue
+        else
+         # Otherwise treat like 'Some other compiler flag' below
+         func_quote_for_eval "$arg"
+         arg=$func_quote_for_eval_result
+        fi
+       ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
+       ;;
+
+      *.$objext)
+       # A standard object.
+       func_append objs " $arg"
+       ;;
+
+      *.lo)
+       # A libtool-controlled object.
+
+       # Check to see that this really is a libtool object.
+       if func_lalib_unsafe_p "$arg"; then
+         pic_object=
+         non_pic_object=
+
+         # Read the .lo file
+         func_source "$arg"
+
+         if test -z "$pic_object" ||
+            test -z "$non_pic_object" ||
+            test none = "$pic_object" &&
+            test none = "$non_pic_object"; then
+           func_fatal_error "cannot find name of object for '$arg'"
+         fi
+
+         # Extract subdirectory from the argument.
+         func_dirname "$arg" "/" ""
+         xdir=$func_dirname_result
+
+         test none = "$pic_object" || {
+           # Prepend the subdirectory the object is found in.
+           pic_object=$xdir$pic_object
+
+           if test dlfiles = "$prev"; then
+             if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+               func_append dlfiles " $pic_object"
+               prev=
+               continue
+             else
+               # If libtool objects are unsupported, then we need to preload.
+               prev=dlprefiles
+             fi
+           fi
+
+           # CHECK ME:  I think I busted this.  -Ossama
+           if test dlprefiles = "$prev"; then
+             # Preload the old-style object.
+             func_append dlprefiles " $pic_object"
+             prev=
+           fi
+
+           # A PIC object.
+           func_append libobjs " $pic_object"
+           arg=$pic_object
+         }
+
+         # Non-PIC object.
+         if test none != "$non_pic_object"; then
+           # Prepend the subdirectory the object is found in.
+           non_pic_object=$xdir$non_pic_object
+
+           # A standard non-PIC object
+           func_append non_pic_objects " $non_pic_object"
+           if test -z "$pic_object" || test none = "$pic_object"; then
+             arg=$non_pic_object
+           fi
+         else
+           # If the PIC object exists, use it instead.
+           # $xdir was prepended to $pic_object above.
+           non_pic_object=$pic_object
+           func_append non_pic_objects " $non_pic_object"
+         fi
+       else
+         # Only an error if not doing a dry-run.
+         if $opt_dry_run; then
+           # Extract subdirectory from the argument.
+           func_dirname "$arg" "/" ""
+           xdir=$func_dirname_result
+
+           func_lo2o "$arg"
+           pic_object=$xdir$objdir/$func_lo2o_result
+           non_pic_object=$xdir$func_lo2o_result
+           func_append libobjs " $pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         else
+           func_fatal_error "'$arg' is not a valid libtool object"
+         fi
+       fi
+       ;;
+
+      *.$libext)
+       # An archive.
+       func_append deplibs " $arg"
+       func_append old_deplibs " $arg"
+       continue
+       ;;
+
+      *.la)
+       # A libtool-controlled library.
+
+       func_resolve_sysroot "$arg"
+       if test dlfiles = "$prev"; then
+         # This library was specified with -dlopen.
+         func_append dlfiles " $func_resolve_sysroot_result"
+         prev=
+       elif test dlprefiles = "$prev"; then
+         # The library was specified with -dlpreopen.
+         func_append dlprefiles " $func_resolve_sysroot_result"
+         prev=
+       else
+         func_append deplibs " $func_resolve_sysroot_result"
+       fi
+       continue
+       ;;
+
+      # Some other compiler argument.
+      *)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
+       ;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the '$prevarg' option requires an argument"
+
+    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname=$func_basename_result
+    libobjs_save=$libobjs
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    # Definition is injected by LT_CONFIG during libtool generation.
+    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+
+    func_dirname "$output" "/" ""
+    output_objdir=$func_dirname_result$objdir
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_preserve_dup_deps; then
+       case "$libs " in
+       *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+       esac
+      fi
+      func_append libs " $deplib"
+    done
+
+    if test lib = "$linkmode"; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+       for pre_post_dep in $predeps $postdeps; do
+         case "$pre_post_deps " in
+         *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+         esac
+         func_append pre_post_deps " $pre_post_dep"
+       done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+       passes="conv dlpreopen link"
+       for file in $dlfiles $dlprefiles; do
+         case $file in
+         *.la) ;;
+         *)
+           func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
+           ;;
+         esac
+       done
+       ;;
+    prog)
+       compile_deplibs=
+       finalize_deplibs=
+       alldeplibs=false
+       newdlfiles=
+       newdlprefiles=
+       passes="conv scan dlopen dlpreopen link"
+       ;;
+    *)  passes="conv"
+       ;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test lib,link = "$linkmode,$pass"; then
+       ## FIXME: Find the place where the list is rebuilt in the wrong
+       ##        order, and fix it there properly
+        tmp_deplibs=
+       for deplib in $deplibs; do
+         tmp_deplibs="$deplib $tmp_deplibs"
+       done
+       deplibs=$tmp_deplibs
+      fi
+
+      if test lib,link = "$linkmode,$pass" ||
+        test prog,scan = "$linkmode,$pass"; then
+       libs=$deplibs
+       deplibs=
+      fi
+      if test prog = "$linkmode"; then
+       case $pass in
+       dlopen) libs=$dlfiles ;;
+       dlpreopen) libs=$dlprefiles ;;
+       link)
+         libs="$deplibs %DEPLIBS%"
+         test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+         ;;
+       esac
+      fi
+      if test lib,dlpreopen = "$linkmode,$pass"; then
+       # Collect and forward deplibs of preopened libtool libs
+       for lib in $dlprefiles; do
+         # Ignore non-libtool-libs
+         dependency_libs=
+         func_resolve_sysroot "$lib"
+         case $lib in
+         *.la) func_source "$func_resolve_sysroot_result" ;;
+         esac
+
+         # Collect preopened libtool deplibs, except any this library
+         # has declared as weak libs
+         for deplib in $dependency_libs; do
+           func_basename "$deplib"
+            deplib_base=$func_basename_result
+           case " $weak_libs " in
+           *" $deplib_base "*) ;;
+           *) func_append deplibs " $deplib" ;;
+           esac
+         done
+       done
+       libs=$dlprefiles
+      fi
+      if test dlopen = "$pass"; then
+       # Collect dlpreopened libraries
+       save_deplibs=$deplibs
+       deplibs=
+      fi
+
+      for deplib in $libs; do
+       lib=
+       found=false
+       case $deplib in
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+         if test prog,link = "$linkmode,$pass"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           func_append compiler_flags " $deplib"
+           if test lib = "$linkmode"; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) func_append new_inherited_linker_flags " $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -l*)
+         if test lib != "$linkmode" && test prog != "$linkmode"; then
+           func_warning "'-l' is ignored for archives/objects"
+           continue
+         fi
+         func_stripname '-l' '' "$deplib"
+         name=$func_stripname_result
+         if test lib = "$linkmode"; then
+           searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+         else
+           searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+         fi
+         for searchdir in $searchdirs; do
+           for search_ext in .la $std_shrext .so .a; do
+             # Search the libtool library
+             lib=$searchdir/lib$name$search_ext
+             if test -f "$lib"; then
+               if test .la = "$search_ext"; then
+                 found=:
+               else
+                 found=false
+               fi
+               break 2
+             fi
+           done
+         done
+         if $found; then
+           # deplib is a libtool library
+           # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+           # We need to do some special things here, and not later.
+           if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+             case " $predeps $postdeps " in
+             *" $deplib "*)
+               if func_lalib_p "$lib"; then
+                 library_names=
+                 old_library=
+                 func_source "$lib"
+                 for l in $old_library $library_names; do
+                   ll=$l
+                 done
+                 if test "X$ll" = "X$old_library"; then # only static version available
+                   found=false
+                   func_dirname "$lib" "" "."
+                   ladir=$func_dirname_result
+                   lib=$ladir/$old_library
+                   if test prog,link = "$linkmode,$pass"; then
+                     compile_deplibs="$deplib $compile_deplibs"
+                     finalize_deplibs="$deplib $finalize_deplibs"
+                   else
+                     deplibs="$deplib $deplibs"
+                     test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+                   fi
+                   continue
+                 fi
+               fi
+               ;;
+             *) ;;
+             esac
+           fi
+         else
+           # deplib doesn't seem to be a libtool library
+           if test prog,link = "$linkmode,$pass"; then
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             deplibs="$deplib $deplibs"
+             test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+           fi
+           continue
+         fi
+         ;; # -l
+       *.ltframework)
+         if test prog,link = "$linkmode,$pass"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           deplibs="$deplib $deplibs"
+           if test lib = "$linkmode"; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) func_append new_inherited_linker_flags " $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -L*)
+         case $linkmode in
+         lib)
+           deplibs="$deplib $deplibs"
+           test conv = "$pass" && continue
+           newdependency_libs="$deplib $newdependency_libs"
+           func_stripname '-L' '' "$deplib"
+           func_resolve_sysroot "$func_stripname_result"
+           func_append newlib_search_path " $func_resolve_sysroot_result"
+           ;;
+         prog)
+           if test conv = "$pass"; then
+             deplibs="$deplib $deplibs"
+             continue
+           fi
+           if test scan = "$pass"; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           func_stripname '-L' '' "$deplib"
+           func_resolve_sysroot "$func_stripname_result"
+           func_append newlib_search_path " $func_resolve_sysroot_result"
+           ;;
+         *)
+           func_warning "'-L' is ignored for archives/objects"
+           ;;
+         esac # linkmode
+         continue
+         ;; # -L
+       -R*)
+         if test link = "$pass"; then
+           func_stripname '-R' '' "$deplib"
+           func_resolve_sysroot "$func_stripname_result"
+           dir=$func_resolve_sysroot_result
+           # Make sure the xrpath contains only unique directories.
+           case "$xrpath " in
+           *" $dir "*) ;;
+           *) func_append xrpath " $dir" ;;
+           esac
+         fi
+         deplibs="$deplib $deplibs"
+         continue
+         ;;
+       *.la)
+         func_resolve_sysroot "$deplib"
+         lib=$func_resolve_sysroot_result
+         ;;
+       *.$libext)
+         if test conv = "$pass"; then
+           deplibs="$deplib $deplibs"
+           continue
+         fi
+         case $linkmode in
+         lib)
+           # Linking convenience modules into shared libraries is allowed,
+           # but linking other static libraries is non-portable.
+           case " $dlpreconveniencelibs " in
+           *" $deplib "*) ;;
+           *)
+             valid_a_lib=false
+             case $deplibs_check_method in
+               match_pattern*)
+                 set dummy $deplibs_check_method; shift
+                 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+                 if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+                   | $EGREP "$match_pattern_regex" > /dev/null; then
+                   valid_a_lib=:
+                 fi
+               ;;
+               pass_all)
+                 valid_a_lib=:
+               ;;
+             esac
+             if $valid_a_lib; then
+               echo
+               $ECHO "*** Warning: Linking the shared library $output against the"
+               $ECHO "*** static library $deplib is not portable!"
+               deplibs="$deplib $deplibs"
+             else
+               echo
+               $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+               echo "*** I have the capability to make that library automatically link in when"
+               echo "*** you link to this library.  But I can only do this if you have a"
+               echo "*** shared version of the library, which you do not appear to have"
+               echo "*** because the file extensions .$libext of this argument makes me believe"
+               echo "*** that it is just a static archive that I should not use here."
+             fi
+             ;;
+           esac
+           continue
+           ;;
+         prog)
+           if test link != "$pass"; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           continue
+           ;;
+         esac # linkmode
+         ;; # *.$libext
+       *.lo | *.$objext)
+         if test conv = "$pass"; then
+           deplibs="$deplib $deplibs"
+         elif test prog = "$linkmode"; then
+           if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
+             # If there is no dlopen support or we're linking statically,
+             # we need to preload.
+             func_append newdlprefiles " $deplib"
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             func_append newdlfiles " $deplib"
+           fi
+         fi
+         continue
+         ;;
+       %DEPLIBS%)
+         alldeplibs=:
+         continue
+         ;;
+       esac # case $deplib
+
+       $found || test -f "$lib" \
+         || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$lib" \
+         || func_fatal_error "'$lib' is not a valid libtool archive"
+
+       func_dirname "$lib" "" "."
+       ladir=$func_dirname_result
+
+       dlname=
+       dlopen=
+       dlpreopen=
+       libdir=
+       library_names=
+       old_library=
+       inherited_linker_flags=
+       # If the library was installed with an old release of libtool,
+       # it will not redefine variables installed, or shouldnotlink
+       installed=yes
+       shouldnotlink=no
+       avoidtemprpath=
+
+
+       # Read the .la file
+       func_source "$lib"
+
+       # Convert "-framework foo" to "foo.ltframework"
+       if test -n "$inherited_linker_flags"; then
+         tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+         for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+           case " $new_inherited_linker_flags " in
+             *" $tmp_inherited_linker_flag "*) ;;
+             *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+           esac
+         done
+       fi
+       dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+       if test lib,link = "$linkmode,$pass" ||
+          test prog,scan = "$linkmode,$pass" ||
+          { test prog != "$linkmode" && test lib != "$linkmode"; }; then
+         test -n "$dlopen" && func_append dlfiles " $dlopen"
+         test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+       fi
+
+       if test conv = "$pass"; then
+         # Only check for convenience libraries
+         deplibs="$lib $deplibs"
+         if test -z "$libdir"; then
+           if test -z "$old_library"; then
+             func_fatal_error "cannot find name of link library for '$lib'"
+           fi
+           # It is a libtool convenience library, so add in its objects.
+           func_append convenience " $ladir/$objdir/$old_library"
+           func_append old_convenience " $ladir/$objdir/$old_library"
+           tmp_libs=
+           for deplib in $dependency_libs; do
+             deplibs="$deplib $deplibs"
+             if $opt_preserve_dup_deps; then
+               case "$tmp_libs " in
+               *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+               esac
+             fi
+             func_append tmp_libs " $deplib"
+           done
+         elif test prog != "$linkmode" && test lib != "$linkmode"; then
+           func_fatal_error "'$lib' is not a convenience library"
+         fi
+         continue
+       fi # $pass = conv
+
+
+       # Get the name of the library we link against.
+       linklib=
+       if test -n "$old_library" &&
+          { test yes = "$prefer_static_libs" ||
+            test built,no = "$prefer_static_libs,$installed"; }; then
+         linklib=$old_library
+       else
+         for l in $old_library $library_names; do
+           linklib=$l
+         done
+       fi
+       if test -z "$linklib"; then
+         func_fatal_error "cannot find name of link library for '$lib'"
+       fi
+
+       # This library was specified with -dlopen.
+       if test dlopen = "$pass"; then
+         test -z "$libdir" \
+           && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
+         if test -z "$dlname" ||
+            test yes != "$dlopen_support" ||
+            test no = "$build_libtool_libs"
+         then
+           # If there is no dlname, no dlopen support or we're linking
+           # statically, we need to preload.  We also need to preload any
+           # dependent libraries so libltdl's deplib preloader doesn't
+           # bomb out in the load deplibs phase.
+           func_append dlprefiles " $lib $dependency_libs"
+         else
+           func_append newdlfiles " $lib"
+         fi
+         continue
+       fi # $pass = dlopen
+
+       # We need an absolute path.
+       case $ladir in
+       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
+       *)
+         abs_ladir=`cd "$ladir" && pwd`
+         if test -z "$abs_ladir"; then
+           func_warning "cannot determine absolute directory name of '$ladir'"
+           func_warning "passing it literally to the linker, although it might fail"
+           abs_ladir=$ladir
+         fi
+         ;;
+       esac
+       func_basename "$lib"
+       laname=$func_basename_result
+
+       # Find the relevant object directory and library name.
+       if test yes = "$installed"; then
+         if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           func_warning "library '$lib' was moved."
+           dir=$ladir
+           absdir=$abs_ladir
+           libdir=$abs_ladir
+         else
+           dir=$lt_sysroot$libdir
+           absdir=$lt_sysroot$libdir
+         fi
+         test yes = "$hardcode_automatic" && avoidtemprpath=yes
+       else
+         if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           dir=$ladir
+           absdir=$abs_ladir
+           # Remove this search path later
+           func_append notinst_path " $abs_ladir"
+         else
+           dir=$ladir/$objdir
+           absdir=$abs_ladir/$objdir
+           # Remove this search path later
+           func_append notinst_path " $abs_ladir"
+         fi
+       fi # $installed = yes
+       func_stripname 'lib' '.la' "$laname"
+       name=$func_stripname_result
+
+       # This library was specified with -dlpreopen.
+       if test dlpreopen = "$pass"; then
+         if test -z "$libdir" && test prog = "$linkmode"; then
+           func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
+         fi
+         case $host in
+           # special handling for platforms with PE-DLLs.
+           *cygwin* | *mingw* | *cegcc* )
+             # Linker will automatically link against shared library if both
+             # static and shared are present.  Therefore, ensure we extract
+             # symbols from the import library if a shared library is present
+             # (otherwise, the dlopen module name will be incorrect).  We do
+             # this by putting the import library name into $newdlprefiles.
+             # We recover the dlopen module name by 'saving' the la file
+             # name in a special purpose variable, and (later) extracting the
+             # dlname from the la file.
+             if test -n "$dlname"; then
+               func_tr_sh "$dir/$linklib"
+               eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+               func_append newdlprefiles " $dir/$linklib"
+             else
+               func_append newdlprefiles " $dir/$old_library"
+               # Keep a list of preopened convenience libraries to check
+               # that they are being used correctly in the link pass.
+               test -z "$libdir" && \
+                 func_append dlpreconveniencelibs " $dir/$old_library"
+             fi
+           ;;
+           * )
+             # Prefer using a static library (so that no silly _DYNAMIC symbols
+             # are required to link).
+             if test -n "$old_library"; then
+               func_append newdlprefiles " $dir/$old_library"
+               # Keep a list of preopened convenience libraries to check
+               # that they are being used correctly in the link pass.
+               test -z "$libdir" && \
+                 func_append dlpreconveniencelibs " $dir/$old_library"
+             # Otherwise, use the dlname, so that lt_dlopen finds it.
+             elif test -n "$dlname"; then
+               func_append newdlprefiles " $dir/$dlname"
+             else
+               func_append newdlprefiles " $dir/$linklib"
+             fi
+           ;;
+         esac
+       fi # $pass = dlpreopen
+
+       if test -z "$libdir"; then
+         # Link the convenience library
+         if test lib = "$linkmode"; then
+           deplibs="$dir/$old_library $deplibs"
+         elif test prog,link = "$linkmode,$pass"; then
+           compile_deplibs="$dir/$old_library $compile_deplibs"
+           finalize_deplibs="$dir/$old_library $finalize_deplibs"
+         else
+           deplibs="$lib $deplibs" # used for prog,scan pass
+         fi
+         continue
+       fi
+
+
+       if test prog = "$linkmode" && test link != "$pass"; then
+         func_append newlib_search_path " $ladir"
+         deplibs="$lib $deplibs"
+
+         linkalldeplibs=false
+         if test no != "$link_all_deplibs" || test -z "$library_names" ||
+            test no = "$build_libtool_libs"; then
+           linkalldeplibs=:
+         fi
+
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           case $deplib in
+           -L*) func_stripname '-L' '' "$deplib"
+                func_resolve_sysroot "$func_stripname_result"
+                func_append newlib_search_path " $func_resolve_sysroot_result"
+                ;;
+           esac
+           # Need to link against all dependency_libs?
+           if $linkalldeplibs; then
+             deplibs="$deplib $deplibs"
+           else
+             # Need to hardcode shared library paths
+             # or/and link against static libraries
+             newdependency_libs="$deplib $newdependency_libs"
+           fi
+           if $opt_preserve_dup_deps; then
+             case "$tmp_libs " in
+             *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+             esac
+           fi
+           func_append tmp_libs " $deplib"
+         done # for deplib
+         continue
+       fi # $linkmode = prog...
+
+       if test prog,link = "$linkmode,$pass"; then
+         if test -n "$library_names" &&
+            { { test no = "$prefer_static_libs" ||
+                test built,yes = "$prefer_static_libs,$installed"; } ||
+              test -z "$old_library"; }; then
+           # We need to hardcode the library path
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
+             # Make sure the rpath contains only unique directories.
+             case $temp_rpath: in
+             *"$absdir:"*) ;;
+             *) func_append temp_rpath "$absdir:" ;;
+             esac
+           fi
+
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) func_append compile_rpath " $absdir" ;;
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) func_append finalize_rpath " $libdir" ;;
+             esac
+             ;;
+           esac
+         fi # $linkmode,$pass = prog,link...
+
+         if $alldeplibs &&
+            { test pass_all = "$deplibs_check_method" ||
+              { test yes = "$build_libtool_libs" &&
+                test -n "$library_names"; }; }; then
+           # We only need to search for static libraries
+           continue
+         fi
+       fi
+
+       link_static=no # Whether the deplib will be linked statically
+       use_static_libs=$prefer_static_libs
+       if test built = "$use_static_libs" && test yes = "$installed"; then
+         use_static_libs=no
+       fi
+       if test -n "$library_names" &&
+          { test no = "$use_static_libs" || test -z "$old_library"; }; then
+         case $host in
+         *cygwin* | *mingw* | *cegcc* | *os2*)
+             # No point in relinking DLLs because paths are not encoded
+             func_append notinst_deplibs " $lib"
+             need_relink=no
+           ;;
+         *)
+           if test no = "$installed"; then
+             func_append notinst_deplibs " $lib"
+             need_relink=yes
+           fi
+           ;;
+         esac
+         # This is a shared library
+
+         # Warn about portability, can't link against -module's on some
+         # systems (darwin).  Don't bleat about dlopened modules though!
+         dlopenmodule=
+         for dlpremoduletest in $dlprefiles; do
+           if test "X$dlpremoduletest" = "X$lib"; then
+             dlopenmodule=$dlpremoduletest
+             break
+           fi
+         done
+         if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
+           echo
+           if test prog = "$linkmode"; then
+             $ECHO "*** Warning: Linking the executable $output against the loadable module"
+           else
+             $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+           fi
+           $ECHO "*** $linklib is not portable!"
+         fi
+         if test lib = "$linkmode" &&
+            test yes = "$hardcode_into_libs"; then
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) func_append compile_rpath " $absdir" ;;
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) func_append finalize_rpath " $libdir" ;;
+             esac
+             ;;
+           esac
+         fi
+
+         if test -n "$old_archive_from_expsyms_cmds"; then
+           # figure out the soname
+           set dummy $library_names
+           shift
+           realname=$1
+           shift
+           libname=`eval "\\$ECHO \"$libname_spec\""`
+           # use dlname if we got it. it's perfectly good, no?
+           if test -n "$dlname"; then
+             soname=$dlname
+           elif test -n "$soname_spec"; then
+             # bleh windows
+             case $host in
+             *cygwin* | mingw* | *cegcc* | *os2*)
+               func_arith $current - $age
+               major=$func_arith_result
+               versuffix=-$major
+               ;;
+             esac
+             eval soname=\"$soname_spec\"
+           else
+             soname=$realname
+           fi
+
+           # Make a new name for the extract_expsyms_cmds to use
+           soroot=$soname
+           func_basename "$soroot"
+           soname=$func_basename_result
+           func_stripname 'lib' '.dll' "$soname"
+           newlib=libimp-$func_stripname_result.a
+
+           # If the library has no export list, then create one now
+           if test -f "$output_objdir/$soname-def"; then :
+           else
+             func_verbose "extracting exported symbol list from '$soname'"
+             func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+           fi
+
+           # Create $newlib
+           if test -f "$output_objdir/$newlib"; then :; else
+             func_verbose "generating import library for '$soname'"
+             func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+           fi
+           # make sure the library variables are pointing to the new library
+           dir=$output_objdir
+           linklib=$newlib
+         fi # test -n "$old_archive_from_expsyms_cmds"
+
+         if test prog = "$linkmode" || test relink != "$opt_mode"; then
+           add_shlibpath=
+           add_dir=
+           add=
+           lib_linked=yes
+           case $hardcode_action in
+           immediate | unsupported)
+             if test no = "$hardcode_direct"; then
+               add=$dir/$linklib
+               case $host in
+                 *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
+                 *-*-sysv4*uw2*) add_dir=-L$dir ;;
+                 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+                   *-*-unixware7*) add_dir=-L$dir ;;
+                 *-*-darwin* )
+                   # if the lib is a (non-dlopened) module then we cannot
+                   # link against it, someone is ignoring the earlier warnings
+                   if /usr/bin/file -L $add 2> /dev/null |
+                        $GREP ": [^:]* bundle" >/dev/null; then
+                     if test "X$dlopenmodule" != "X$lib"; then
+                       $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+                       if test -z "$old_library"; then
+                         echo
+                         echo "*** And there doesn't seem to be a static archive available"
+                         echo "*** The link will probably fail, sorry"
+                       else
+                         add=$dir/$old_library
+                       fi
+                     elif test -n "$old_library"; then
+                       add=$dir/$old_library
+                     fi
+                   fi
+               esac
+             elif test no = "$hardcode_minus_L"; then
+               case $host in
+               *-*-sunos*) add_shlibpath=$dir ;;
+               esac
+               add_dir=-L$dir
+               add=-l$name
+             elif test no = "$hardcode_shlibpath_var"; then
+               add_shlibpath=$dir
+               add=-l$name
+             else
+               lib_linked=no
+             fi
+             ;;
+           relink)
+             if test yes = "$hardcode_direct" &&
+                test no = "$hardcode_direct_absolute"; then
+               add=$dir/$linklib
+             elif test yes = "$hardcode_minus_L"; then
+               add_dir=-L$absdir
+               # Try looking first in the location we're being installed to.
+               if test -n "$inst_prefix_dir"; then
+                 case $libdir in
+                   [\\/]*)
+                     func_append add_dir " -L$inst_prefix_dir$libdir"
+                     ;;
+                 esac
+               fi
+               add=-l$name
+             elif test yes = "$hardcode_shlibpath_var"; then
+               add_shlibpath=$dir
+               add=-l$name
+             else
+               lib_linked=no
+             fi
+             ;;
+           *) lib_linked=no ;;
+           esac
+
+           if test yes != "$lib_linked"; then
+             func_fatal_configuration "unsupported hardcode properties"
+           fi
+
+           if test -n "$add_shlibpath"; then
+             case :$compile_shlibpath: in
+             *":$add_shlibpath:"*) ;;
+             *) func_append compile_shlibpath "$add_shlibpath:" ;;
+             esac
+           fi
+           if test prog = "$linkmode"; then
+             test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+             test -n "$add" && compile_deplibs="$add $compile_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+             if test yes != "$hardcode_direct" &&
+                test yes != "$hardcode_minus_L" &&
+                test yes = "$hardcode_shlibpath_var"; then
+               case :$finalize_shlibpath: in
+               *":$libdir:"*) ;;
+               *) func_append finalize_shlibpath "$libdir:" ;;
+               esac
+             fi
+           fi
+         fi
+
+         if test prog = "$linkmode" || test relink = "$opt_mode"; then
+           add_shlibpath=
+           add_dir=
+           add=
+           # Finalize command for both is simple: just hardcode it.
+           if test yes = "$hardcode_direct" &&
+              test no = "$hardcode_direct_absolute"; then
+             add=$libdir/$linklib
+           elif test yes = "$hardcode_minus_L"; then
+             add_dir=-L$libdir
+             add=-l$name
+           elif test yes = "$hardcode_shlibpath_var"; then
+             case :$finalize_shlibpath: in
+             *":$libdir:"*) ;;
+             *) func_append finalize_shlibpath "$libdir:" ;;
+             esac
+             add=-l$name
+           elif test yes = "$hardcode_automatic"; then
+             if test -n "$inst_prefix_dir" &&
+                test -f "$inst_prefix_dir$libdir/$linklib"; then
+               add=$inst_prefix_dir$libdir/$linklib
+             else
+               add=$libdir/$linklib
+             fi
+           else
+             # We cannot seem to hardcode it, guess we'll fake it.
+             add_dir=-L$libdir
+             # Try looking first in the location we're being installed to.
+             if test -n "$inst_prefix_dir"; then
+               case $libdir in
+                 [\\/]*)
+                   func_append add_dir " -L$inst_prefix_dir$libdir"
+                   ;;
+               esac
+             fi
+             add=-l$name
+           fi
+
+           if test prog = "$linkmode"; then
+             test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+             test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+           fi
+         fi
+       elif test prog = "$linkmode"; then
+         # Here we assume that one of hardcode_direct or hardcode_minus_L
+         # is not unsupported.  This is valid on all known static and
+         # shared platforms.
+         if test unsupported != "$hardcode_direct"; then
+           test -n "$old_library" && linklib=$old_library
+           compile_deplibs="$dir/$linklib $compile_deplibs"
+           finalize_deplibs="$dir/$linklib $finalize_deplibs"
+         else
+           compile_deplibs="-l$name -L$dir $compile_deplibs"
+           finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+         fi
+       elif test yes = "$build_libtool_libs"; then
+         # Not a shared library
+         if test pass_all != "$deplibs_check_method"; then
+           # We're trying link a shared library against a static one
+           # but the system doesn't support it.
+
+           # Just print a warning and add the library to dependency_libs so
+           # that the program can be linked against the static library.
+           echo
+           $ECHO "*** Warning: This system cannot link to static lib archive $lib."
+           echo "*** I have the capability to make that library automatically link in when"
+           echo "*** you link to this library.  But I can only do this if you have a"
+           echo "*** shared version of the library, which you do not appear to have."
+           if test yes = "$module"; then
+             echo "*** But as you try to build a module library, libtool will still create "
+             echo "*** a static module, that should work as long as the dlopening application"
+             echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+             if test -z "$global_symbol_pipe"; then
+               echo
+               echo "*** However, this would only work if libtool was able to extract symbol"
+               echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+               echo "*** not find such a program.  So, this module is probably useless."
+               echo "*** 'nm' from GNU binutils and a full rebuild may help."
+             fi
+             if test no = "$build_old_libs"; then
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         else
+           deplibs="$dir/$old_library $deplibs"
+           link_static=yes
+         fi
+       fi # link shared/static library?
+
+       if test lib = "$linkmode"; then
+         if test -n "$dependency_libs" &&
+            { test yes != "$hardcode_into_libs" ||
+              test yes = "$build_old_libs" ||
+              test yes = "$link_static"; }; then
+           # Extract -R from dependency_libs
+           temp_deplibs=
+           for libdir in $dependency_libs; do
+             case $libdir in
+             -R*) func_stripname '-R' '' "$libdir"
+                  temp_xrpath=$func_stripname_result
+                  case " $xrpath " in
+                  *" $temp_xrpath "*) ;;
+                  *) func_append xrpath " $temp_xrpath";;
+                  esac;;
+             *) func_append temp_deplibs " $libdir";;
+             esac
+           done
+           dependency_libs=$temp_deplibs
+         fi
+
+         func_append newlib_search_path " $absdir"
+         # Link against this library
+         test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+         # ... and its dependency_libs
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           newdependency_libs="$deplib $newdependency_libs"
+           case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+           if $opt_preserve_dup_deps; then
+             case "$tmp_libs " in
+             *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+             esac
+           fi
+           func_append tmp_libs " $func_resolve_sysroot_result"
+         done
+
+         if test no != "$link_all_deplibs"; then
+           # Add the search paths of all dependency libraries
+           for deplib in $dependency_libs; do
+             path=
+             case $deplib in
+             -L*) path=$deplib ;;
+             *.la)
+               func_resolve_sysroot "$deplib"
+               deplib=$func_resolve_sysroot_result
+               func_dirname "$deplib" "" "."
+               dir=$func_dirname_result
+               # We need an absolute path.
+               case $dir in
+               [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
+               *)
+                 absdir=`cd "$dir" && pwd`
+                 if test -z "$absdir"; then
+                   func_warning "cannot determine absolute directory name of '$dir'"
+                   absdir=$dir
+                 fi
+                 ;;
+               esac
+               if $GREP "^installed=no" $deplib > /dev/null; then
+               case $host in
+               *-*-darwin*)
+                 depdepl=
+                 eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+                 if test -n "$deplibrary_names"; then
+                   for tmp in $deplibrary_names; do
+                     depdepl=$tmp
+                   done
+                   if test -f "$absdir/$objdir/$depdepl"; then
+                     depdepl=$absdir/$objdir/$depdepl
+                     darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+                     func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
+                     func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
+                     path=
+                   fi
+                 fi
+                 ;;
+               *)
+                 path=-L$absdir/$objdir
+                 ;;
+               esac
+               else
+                 eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 test -z "$libdir" && \
+                   func_fatal_error "'$deplib' is not a valid libtool archive"
+                 test "$absdir" != "$libdir" && \
+                   func_warning "'$deplib' seems to be moved"
+
+                 path=-L$absdir
+               fi
+               ;;
+             esac
+             case " $deplibs " in
+             *" $path "*) ;;
+             *) deplibs="$path $deplibs" ;;
+             esac
+           done
+         fi # link_all_deplibs != no
+       fi # linkmode = lib
+      done # for deplib in $libs
+      if test link = "$pass"; then
+       if test prog = "$linkmode"; then
+         compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+         finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+       else
+         compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+       fi
+      fi
+      dependency_libs=$newdependency_libs
+      if test dlpreopen = "$pass"; then
+       # Link the dlpreopened libraries before other libraries
+       for deplib in $save_deplibs; do
+         deplibs="$deplib $deplibs"
+       done
+      fi
+      if test dlopen != "$pass"; then
+       test conv = "$pass" || {
+         # Make sure lib_search_path contains only unique directories.
+         lib_search_path=
+         for dir in $newlib_search_path; do
+           case "$lib_search_path " in
+           *" $dir "*) ;;
+           *) func_append lib_search_path " $dir" ;;
+           esac
+         done
+         newlib_search_path=
+       }
+
+       if test prog,link = "$linkmode,$pass"; then
+         vars="compile_deplibs finalize_deplibs"
+       else
+         vars=deplibs
+       fi
+       for var in $vars dependency_libs; do
+         # Add libraries to $var in reverse order
+         eval tmp_libs=\"\$$var\"
+         new_libs=
+         for deplib in $tmp_libs; do
+           # FIXME: Pedantically, this is the right thing to do, so
+           #        that some nasty dependency loop isn't accidentally
+           #        broken:
+           #new_libs="$deplib $new_libs"
+           # Pragmatically, this seems to cause very few problems in
+           # practice:
+           case $deplib in
+           -L*) new_libs="$deplib $new_libs" ;;
+           -R*) ;;
+           *)
+             # And here is the reason: when a library appears more
+             # than once as an explicit dependence of a library, or
+             # is implicitly linked in more than once by the
+             # compiler, it is considered special, and multiple
+             # occurrences thereof are not removed.  Compare this
+             # with having the same library being listed as a
+             # dependency of multiple other libraries: in this case,
+             # we know (pedantically, we assume) the library does not
+             # need to be listed more than once, so we keep only the
+             # last copy.  This is not always right, but it is rare
+             # enough that we require users that really mean to play
+             # such unportable linking tricks to link the library
+             # using -Wl,-lname, so that libtool does not consider it
+             # for duplicate removal.
+             case " $specialdeplibs " in
+             *" $deplib "*) new_libs="$deplib $new_libs" ;;
+             *)
+               case " $new_libs " in
+               *" $deplib "*) ;;
+               *) new_libs="$deplib $new_libs" ;;
+               esac
+               ;;
+             esac
+             ;;
+           esac
+         done
+         tmp_libs=
+         for deplib in $new_libs; do
+           case $deplib in
+           -L*)
+             case " $tmp_libs " in
+             *" $deplib "*) ;;
+             *) func_append tmp_libs " $deplib" ;;
+             esac
+             ;;
+           *) func_append tmp_libs " $deplib" ;;
+           esac
+         done
+         eval $var=\"$tmp_libs\"
+       done # for var
+      fi
+
+      # Add Sun CC postdeps if required:
+      test CXX = "$tagname" && {
+        case $host_os in
+        linux*)
+          case `$CC -V 2>&1 | sed 5q` in
+          *Sun\ C*) # Sun C++ 5.9
+            func_suncc_cstd_abi
+
+            if test no != "$suncc_use_cstd_abi"; then
+              func_append postdeps ' -library=Cstd -library=Crun'
+            fi
+            ;;
+          esac
+          ;;
+
+        solaris*)
+          func_cc_basename "$CC"
+          case $func_cc_basename_result in
+          CC* | sunCC*)
+            func_suncc_cstd_abi
+
+            if test no != "$suncc_use_cstd_abi"; then
+              func_append postdeps ' -library=Cstd -library=Crun'
+            fi
+            ;;
+          esac
+          ;;
+        esac
+      }
+
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs; do
+       case " $predeps $postdeps $compiler_lib_search_path " in
+       *" $i "*)
+         i=
+         ;;
+       esac
+       if test -n "$i"; then
+         func_append tmp_libs " $i"
+       fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test prog = "$linkmode"; then
+      dlfiles=$newdlfiles
+    fi
+    if test prog = "$linkmode" || test lib = "$linkmode"; then
+      dlprefiles=$newdlprefiles
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+       func_warning "'-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "'-l' and '-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "'-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+       func_warning "'-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+       func_warning "'-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+       func_warning "'-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+       func_warning "'-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs=$output
+      func_append objs "$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form 'libNAME.la'.
+      case $outputname in
+      lib*)
+       func_stripname 'lib' '.la' "$outputname"
+       name=$func_stripname_result
+       eval shared_ext=\"$shrext_cmds\"
+       eval libname=\"$libname_spec\"
+       ;;
+      *)
+       test no = "$module" \
+         && func_fatal_help "libtool library '$output' must begin with 'lib'"
+
+       if test no != "$need_lib_prefix"; then
+         # Add the "lib" prefix for modules if required
+         func_stripname '' '.la' "$outputname"
+         name=$func_stripname_result
+         eval shared_ext=\"$shrext_cmds\"
+         eval libname=\"$libname_spec\"
+       else
+         func_stripname '' '.la' "$outputname"
+         libname=$func_stripname_result
+       fi
+       ;;
+      esac
+
+      if test -n "$objs"; then
+       if test pass_all != "$deplibs_check_method"; then
+         func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
+       else
+         echo
+         $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+         $ECHO "*** objects $objs is not portable!"
+         func_append libobjs " $objs"
+       fi
+      fi
+
+      test no = "$dlself" \
+       || func_warning "'-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test 1 -lt "$#" \
+       && func_warning "ignoring multiple '-rpath's for a libtool library"
+
+      install_libdir=$1
+
+      oldlibs=
+      if test -z "$rpath"; then
+       if test yes = "$build_libtool_libs"; then
+         # Building a libtool convenience library.
+         # Some compilers have problems with a '.al' extension so
+         # convenience libraries should have the same extension an
+         # archive normally would.
+         oldlibs="$output_objdir/$libname.$libext $oldlibs"
+         build_libtool_libs=convenience
+         build_old_libs=yes
+       fi
+
+       test -n "$vinfo" && \
+         func_warning "'-version-info/-version-number' is ignored for convenience libraries"
+
+       test -n "$release" && \
+         func_warning "'-release' is ignored for convenience libraries"
+      else
+
+       # Parse the version information argument.
+       save_ifs=$IFS; IFS=:
+       set dummy $vinfo 0 0 0
+       shift
+       IFS=$save_ifs
+
+       test -n "$7" && \
+         func_fatal_help "too many parameters to '-version-info'"
+
+       # convert absolute version numbers to libtool ages
+       # this retains compatibility with .la files and attempts
+       # to make the code below a bit more comprehensible
+
+       case $vinfo_number in
+       yes)
+         number_major=$1
+         number_minor=$2
+         number_revision=$3
+         #
+         # There are really only two kinds -- those that
+         # use the current revision as the major version
+         # and those that subtract age and use age as
+         # a minor version.  But, then there is irix
+         # that has an extra 1 added just for fun
+         #
+         case $version_type in
+         # correct linux to gnu/linux during the next big refactor
+         darwin|freebsd-elf|linux|osf|windows|none)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age=$number_minor
+           revision=$number_revision
+           ;;
+         freebsd-aout|qnx|sunos)
+           current=$number_major
+           revision=$number_minor
+           age=0
+           ;;
+         irix|nonstopux)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age=$number_minor
+           revision=$number_minor
+           lt_irix_increment=no
+           ;;
+         *)
+           func_fatal_configuration "$modename: unknown library version type '$version_type'"
+           ;;
+         esac
+         ;;
+       no)
+         current=$1
+         revision=$2
+         age=$3
+         ;;
+       esac
+
+       # Check that each of the things are valid numbers.
+       case $current in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "CURRENT '$current' must be a nonnegative integer"
+         func_fatal_error "'$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $revision in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "REVISION '$revision' must be a nonnegative integer"
+         func_fatal_error "'$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $age in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "AGE '$age' must be a nonnegative integer"
+         func_fatal_error "'$vinfo' is not valid version information"
+         ;;
+       esac
+
+       if test "$age" -gt "$current"; then
+         func_error "AGE '$age' is greater than the current interface number '$current'"
+         func_fatal_error "'$vinfo' is not valid version information"
+       fi
+
+       # Calculate the version variables.
+       major=
+       versuffix=
+       verstring=
+       case $version_type in
+       none) ;;
+
+       darwin)
+         # Like Linux, but with the current version available in
+         # verstring for coding it into the library header
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=$major.$age.$revision
+         # Darwin ld doesn't like 0 for these options...
+         func_arith $current + 1
+         minor_current=$func_arith_result
+         xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+         verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+          # On Darwin other compilers
+          case $CC in
+              nagfor*)
+                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+                  ;;
+              *)
+                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+                  ;;
+          esac
+         ;;
+
+       freebsd-aout)
+         major=.$current
+         versuffix=.$current.$revision
+         ;;
+
+       freebsd-elf)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=$major.$age.$revision
+         ;;
+
+       irix | nonstopux)
+         if test no = "$lt_irix_increment"; then
+           func_arith $current - $age
+         else
+           func_arith $current - $age + 1
+         fi
+         major=$func_arith_result
+
+         case $version_type in
+           nonstopux) verstring_prefix=nonstopux ;;
+           *)         verstring_prefix=sgi ;;
+         esac
+         verstring=$verstring_prefix$major.$revision
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$revision
+         while test 0 -ne "$loop"; do
+           func_arith $revision - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring=$verstring_prefix$major.$iface:$verstring
+         done
+
+         # Before this point, $major must not contain '.'.
+         major=.$major
+         versuffix=$major.$revision
+         ;;
+
+       linux) # correct to gnu/linux during the next big refactor
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=$major.$age.$revision
+         ;;
+
+       osf)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=.$current.$age.$revision
+         verstring=$current.$age.$revision
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$age
+         while test 0 -ne "$loop"; do
+           func_arith $current - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring=$verstring:$iface.0
+         done
+
+         # Make executables depend on our current version.
+         func_append verstring ":$current.0"
+         ;;
+
+       qnx)
+         major=.$current
+         versuffix=.$current
+         ;;
+
+       sco)
+         major=.$current
+         versuffix=.$current
+         ;;
+
+       sunos)
+         major=.$current
+         versuffix=.$current.$revision
+         ;;
+
+       windows)
+         # Use '-' rather than '.', since we only want one
+         # extension on DOS 8.3 file systems.
+         func_arith $current - $age
+         major=$func_arith_result
+         versuffix=-$major
+         ;;
+
+       *)
+         func_fatal_configuration "unknown library version type '$version_type'"
+         ;;
+       esac
+
+       # Clear the version info if we defaulted, and they specified a release.
+       if test -z "$vinfo" && test -n "$release"; then
+         major=
+         case $version_type in
+         darwin)
+           # we can't check for "0.0" in archive_cmds due to quoting
+           # problems, so we reset it completely
+           verstring=
+           ;;
+         *)
+           verstring=0.0
+           ;;
+         esac
+         if test no = "$need_version"; then
+           versuffix=
+         else
+           versuffix=.0.0
+         fi
+       fi
+
+       # Remove version info from name if versioning should be avoided
+       if test yes,no = "$avoid_version,$need_version"; then
+         major=
+         versuffix=
+         verstring=
+       fi
+
+       # Check to see if the archive will have undefined symbols.
+       if test yes = "$allow_undefined"; then
+         if test unsupported = "$allow_undefined_flag"; then
+           if test yes = "$build_old_libs"; then
+             func_warning "undefined symbols not allowed in $host shared libraries; building static only"
+             build_libtool_libs=no
+           else
+             func_fatal_error "can't build $host shared library unless -no-undefined is specified"
+           fi
+         fi
+       else
+         # Don't allow undefined symbols.
+         allow_undefined_flag=$no_undefined_flag
+       fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" :
+      func_append libobjs " $symfileobj"
+      test " " = "$libobjs" && libobjs=
+
+      if test relink != "$opt_mode"; then
+       # Remove our outputs, but don't remove object files since they
+       # may have been created when compiling PIC objects.
+       removelist=
+       tempremovelist=`$ECHO "$output_objdir/*"`
+       for p in $tempremovelist; do
+         case $p in
+           *.$objext | *.gcno)
+              ;;
+           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
+              if test -n "$precious_files_regex"; then
+                if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+                then
+                  continue
+                fi
+              fi
+              func_append removelist " $p"
+              ;;
+           *) ;;
+         esac
+       done
+       test -n "$removelist" && \
+         func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
+       func_append oldlibs " $output_objdir/$libname.$libext"
+
+       # Transform .lo files to .o files.
+       oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #        lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #        deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #        dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       temp_xrpath=
+       for libdir in $xrpath; do
+         func_replace_sysroot "$libdir"
+         func_append temp_xrpath " -R$func_replace_sysroot_result"
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) func_append finalize_rpath " $libdir" ;;
+         esac
+       done
+       if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
+         dependency_libs="$temp_xrpath $dependency_libs"
+       fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles=$dlfiles
+      dlfiles=
+      for lib in $old_dlfiles; do
+       case " $dlprefiles $dlfiles " in
+       *" $lib "*) ;;
+       *) func_append dlfiles " $lib" ;;
+       esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles=$dlprefiles
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+       case "$dlprefiles " in
+       *" $lib "*) ;;
+       *) func_append dlprefiles " $lib" ;;
+       esac
+      done
+
+      if test yes = "$build_libtool_libs"; then
+       if test -n "$rpath"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+           # these systems don't actually have a c library (as such)!
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C library is in the System framework
+           func_append deplibs " System.ltframework"
+           ;;
+         *-*-netbsd*)
+           # Don't link with libc until the a.out ld.so is fixed.
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           ;;
+         *)
+           # Add libc to deplibs on all other systems if necessary.
+           if test yes = "$build_libtool_need_lc"; then
+             func_append deplibs " -lc"
+           fi
+           ;;
+         esac
+       fi
+
+       # Transform deplibs into only deplibs that can be linked in shared.
+       name_save=$name
+       libname_save=$libname
+       release_save=$release
+       versuffix_save=$versuffix
+       major_save=$major
+       # I'm not sure if I'm treating the release correctly.  I think
+       # release should show up in the -l (ie -lgmp5) so we don't want to
+       # add it in twice.  Is that correct?
+       release=
+       versuffix=
+       major=
+       newdeplibs=
+       droppeddeps=no
+       case $deplibs_check_method in
+       pass_all)
+         # Don't check for shared/static.  Everything works.
+         # This might be a little naive.  We might want to check
+         # whether the library exists or not.  But this is on
+         # osf3 & osf4 and I'm not really sure... Just
+         # implementing what was already the behavior.
+         newdeplibs=$deplibs
+         ;;
+       test_compile)
+         # This code stresses the "libraries are programs" paradigm to its
+         # limits. Maybe even breaks it.  We compile a program, linking it
+         # against the deplibs as a proxy for the library.  Then we can check
+         # whether they linked in statically or dynamically with ldd.
+         $opt_dry_run || $RM conftest.c
+         cat > conftest.c <<EOF
+         int main() { return 0; }
+EOF
+         $opt_dry_run || $RM conftest
+         if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+           ldd_output=`ldd conftest`
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+                 case " $predeps $postdeps " in
+                 *" $i "*)
+                   func_append newdeplibs " $i"
+                   i=
+                   ;;
+                 esac
+               fi
+               if test -n "$i"; then
+                 libname=`eval "\\$ECHO \"$libname_spec\""`
+                 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                 set dummy $deplib_matches; shift
+                 deplib_match=$1
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+                   func_append newdeplibs " $i"
+                 else
+                   droppeddeps=yes
+                   echo
+                   $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                   echo "*** I have the capability to make that library automatically link in when"
+                   echo "*** you link to this library.  But I can only do this if you have a"
+                   echo "*** shared version of the library, which I believe you do not have"
+                   echo "*** because a test_compile did reveal that the linker did not use it for"
+                   echo "*** its dynamic dependency list that programs get resolved with at runtime."
+                 fi
+               fi
+               ;;
+             *)
+               func_append newdeplibs " $i"
+               ;;
+             esac
+           done
+         else
+           # Error occurred in the first compile.  Let's try to salvage
+           # the situation: Compile a separate program for each library.
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               $opt_dry_run || $RM conftest
+               if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+                 ldd_output=`ldd conftest`
+                 if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+                   case " $predeps $postdeps " in
+                   *" $i "*)
+                     func_append newdeplibs " $i"
+                     i=
+                     ;;
+                   esac
+                 fi
+                 if test -n "$i"; then
+                   libname=`eval "\\$ECHO \"$libname_spec\""`
+                   deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                   set dummy $deplib_matches; shift
+                   deplib_match=$1
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+                     func_append newdeplibs " $i"
+                   else
+                     droppeddeps=yes
+                     echo
+                     $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                     echo "*** I have the capability to make that library automatically link in when"
+                     echo "*** you link to this library.  But I can only do this if you have a"
+                     echo "*** shared version of the library, which you do not appear to have"
+                     echo "*** because a test_compile did reveal that the linker did not use this one"
+                     echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+                   fi
+                 fi
+               else
+                 droppeddeps=yes
+                 echo
+                 $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+                 echo "*** make it link in!  You will probably need to install it or some"
+                 echo "*** library that it depends on before this library will be fully"
+                 echo "*** functional.  Installing it before continuing would be even better."
+               fi
+               ;;
+             *)
+               func_append newdeplibs " $i"
+               ;;
+             esac
+           done
+         fi
+         ;;
+       file_magic*)
+         set dummy $deplibs_check_method; shift
+         file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 func_append newdeplibs " $a_deplib"
+                 a_deplib=
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib"; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               if test -n "$file_magic_glob"; then
+                 libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+               else
+                 libnameglob=$libname
+               fi
+               test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 if test yes = "$want_nocaseglob"; then
+                   shopt -s nocaseglob
+                   potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+                   $nocaseglob
+                 else
+                   potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+                 fi
+                 for potent_lib in $potential_libs; do
+                     # Follow soft links.
+                     if ls -lLd "$potent_lib" 2>/dev/null |
+                        $GREP " -> " >/dev/null; then
+                       continue
+                     fi
+                     # The statement above tries to avoid entering an
+                     # endless loop below, in case of cyclic links.
+                     # We might still enter an endless loop, since a link
+                     # loop can be closed while we follow links,
+                     # but so what?
+                     potlib=$potent_lib
+                     while test -h "$potlib" 2>/dev/null; do
+                       potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
+                       case $potliblink in
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+                       *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
+                       esac
+                     done
+                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+                        $SED -e 10q |
+                        $EGREP "$file_magic_regex" > /dev/null; then
+                       func_append newdeplibs " $a_deplib"
+                       a_deplib=
+                       break 2
+                     fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib"; then
+               droppeddeps=yes
+               echo
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               echo "*** I have the capability to make that library automatically link in when"
+               echo "*** you link to this library.  But I can only do this if you have a"
+               echo "*** shared version of the library, which you do not appear to have"
+               echo "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib"; then
+                 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a file magic. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             func_append newdeplibs " $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       match_pattern*)
+         set dummy $deplibs_check_method; shift
+         match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 func_append newdeplibs " $a_deplib"
+                 a_deplib=
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib"; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                   potlib=$potent_lib # see symlink-check above in file_magic test
+                   if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+                      $EGREP "$match_pattern_regex" > /dev/null; then
+                     func_append newdeplibs " $a_deplib"
+                     a_deplib=
+                     break 2
+                   fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib"; then
+               droppeddeps=yes
+               echo
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               echo "*** I have the capability to make that library automatically link in when"
+               echo "*** you link to this library.  But I can only do this if you have a"
+               echo "*** shared version of the library, which you do not appear to have"
+               echo "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib"; then
+                 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a regex pattern. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             func_append newdeplibs " $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       none | unknown | *)
+         newdeplibs=
+         tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+         if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+           for i in $predeps $postdeps; do
+             # can't use Xsed below, because $i might contain '/'
+             tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
+           done
+         fi
+         case $tmp_deplibs in
+         *[!\  \ ]*)
+           echo
+           if test none = "$deplibs_check_method"; then
+             echo "*** Warning: inter-library dependencies are not supported in this platform."
+           else
+             echo "*** Warning: inter-library dependencies are not known to be supported."
+           fi
+           echo "*** All declared inter-library dependencies are being dropped."
+           droppeddeps=yes
+           ;;
+         esac
+         ;;
+       esac
+       versuffix=$versuffix_save
+       major=$major_save
+       release=$release_save
+       libname=$libname_save
+       name=$name_save
+
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+         # On Rhapsody replace the C library with the System framework
+         newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+         ;;
+       esac
+
+       if test yes = "$droppeddeps"; then
+         if test yes = "$module"; then
+           echo
+           echo "*** Warning: libtool could not satisfy all declared inter-library"
+           $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+           echo "*** a static module, that should work as long as the dlopening"
+           echo "*** application is linked with the -dlopen flag."
+           if test -z "$global_symbol_pipe"; then
+             echo
+             echo "*** However, this would only work if libtool was able to extract symbol"
+             echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+             echo "*** not find such a program.  So, this module is probably useless."
+             echo "*** 'nm' from GNU binutils and a full rebuild may help."
+           fi
+           if test no = "$build_old_libs"; then
+             oldlibs=$output_objdir/$libname.$libext
+             build_libtool_libs=module
+             build_old_libs=yes
+           else
+             build_libtool_libs=no
+           fi
+         else
+           echo "*** The inter-library dependencies that have been dropped here will be"
+           echo "*** automatically added whenever a program is linked with this library"
+           echo "*** or is declared to -dlopen it."
+
+           if test no = "$allow_undefined"; then
+             echo
+             echo "*** Since this library must not contain undefined symbols,"
+             echo "*** because either the platform does not support them or"
+             echo "*** it was explicitly requested with -no-undefined,"
+             echo "*** libtool will only create a static version of it."
+             if test no = "$build_old_libs"; then
+               oldlibs=$output_objdir/$libname.$libext
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         fi
+       fi
+       # Done checking deplibs!
+       deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+       *-*-darwin*)
+         newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+         new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+         deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+         ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $deplibs " in
+         *" -L$path/$objdir "*)
+           func_append new_libs " -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) func_append new_libs " $deplib" ;;
+         esac
+         ;;
+       *) func_append new_libs " $deplib" ;;
+       esac
+      done
+      deplibs=$new_libs
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test yes = "$build_libtool_libs"; then
+       # Remove $wl instances when linking with ld.
+       # FIXME: should test the right _cmds variable.
+       case $archive_cmds in
+         *\$LD\ *) wl= ;;
+        esac
+       if test yes = "$hardcode_into_libs"; then
+         # Hardcode the library paths
+         hardcode_libdirs=
+         dep_rpath=
+         rpath=$finalize_rpath
+         test relink = "$opt_mode" || rpath=$compile_rpath$rpath
+         for libdir in $rpath; do
+           if test -n "$hardcode_libdir_flag_spec"; then
+             if test -n "$hardcode_libdir_separator"; then
+               func_replace_sysroot "$libdir"
+               libdir=$func_replace_sysroot_result
+               if test -z "$hardcode_libdirs"; then
+                 hardcode_libdirs=$libdir
+               else
+                 # Just accumulate the unique libdirs.
+                 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+                 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+                   ;;
+                 *)
+                   func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+                   ;;
+                 esac
+               fi
+             else
+               eval flag=\"$hardcode_libdir_flag_spec\"
+               func_append dep_rpath " $flag"
+             fi
+           elif test -n "$runpath_var"; then
+             case "$perm_rpath " in
+             *" $libdir "*) ;;
+             *) func_append perm_rpath " $libdir" ;;
+             esac
+           fi
+         done
+         # Substitute the hardcoded libdirs into the rpath.
+         if test -n "$hardcode_libdir_separator" &&
+            test -n "$hardcode_libdirs"; then
+           libdir=$hardcode_libdirs
+           eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+         fi
+         if test -n "$runpath_var" && test -n "$perm_rpath"; then
+           # We should set the runpath_var.
+           rpath=
+           for dir in $perm_rpath; do
+             func_append rpath "$dir:"
+           done
+           eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+         fi
+         test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+       fi
+
+       shlibpath=$finalize_shlibpath
+       test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
+       if test -n "$shlibpath"; then
+         eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+       fi
+
+       # Get the real and link names of the library.
+       eval shared_ext=\"$shrext_cmds\"
+       eval library_names=\"$library_names_spec\"
+       set dummy $library_names
+       shift
+       realname=$1
+       shift
+
+       if test -n "$soname_spec"; then
+         eval soname=\"$soname_spec\"
+       else
+         soname=$realname
+       fi
+       if test -z "$dlname"; then
+         dlname=$soname
+       fi
+
+       lib=$output_objdir/$realname
+       linknames=
+       for link
+       do
+         func_append linknames " $link"
+       done
+
+       # Use standard objects if they are pic
+       test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+       test "X$libobjs" = "X " && libobjs=
+
+       delfiles=
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+         export_symbols=$output_objdir/$libname.uexp
+         func_append delfiles " $export_symbols"
+       fi
+
+       orig_export_symbols=
+       case $host_os in
+       cygwin* | mingw* | cegcc*)
+         if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+           # exporting using user supplied symfile
+           func_dll_def_p "$export_symbols" || {
+             # and it's NOT already a .def file. Must figure out
+             # which of the given symbols are data symbols and tag
+             # them as such. So, trigger use of export_symbols_cmds.
+             # export_symbols gets reassigned inside the "prepare
+             # the list of exported symbols" if statement, so the
+             # include_expsyms logic still works.
+             orig_export_symbols=$export_symbols
+             export_symbols=
+             always_export_symbols=yes
+           }
+         fi
+         ;;
+       esac
+
+       # Prepare the list of exported symbols
+       if test -z "$export_symbols"; then
+         if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
+           func_verbose "generating symbol list for '$libname.la'"
+           export_symbols=$output_objdir/$libname.exp
+           $opt_dry_run || $RM $export_symbols
+           cmds=$export_symbols_cmds
+           save_ifs=$IFS; IFS='~'
+           for cmd1 in $cmds; do
+             IFS=$save_ifs
+             # Take the normal branch if the nm_file_list_spec branch
+             # doesn't work or if tool conversion is not needed.
+             case $nm_file_list_spec~$to_tool_file_cmd in
+               *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+                 try_normal_branch=yes
+                 eval cmd=\"$cmd1\"
+                 func_len " $cmd"
+                 len=$func_len_result
+                 ;;
+               *)
+                 try_normal_branch=no
+                 ;;
+             esac
+             if test yes = "$try_normal_branch" \
+                && { test "$len" -lt "$max_cmd_len" \
+                     || test "$max_cmd_len" -le -1; }
+             then
+               func_show_eval "$cmd" 'exit $?'
+               skipped_export=false
+             elif test -n "$nm_file_list_spec"; then
+               func_basename "$output"
+               output_la=$func_basename_result
+               save_libobjs=$libobjs
+               save_output=$output
+               output=$output_objdir/$output_la.nm
+               func_to_tool_file "$output"
+               libobjs=$nm_file_list_spec$func_to_tool_file_result
+               func_append delfiles " $output"
+               func_verbose "creating $NM input file list: $output"
+               for obj in $save_libobjs; do
+                 func_to_tool_file "$obj"
+                 $ECHO "$func_to_tool_file_result"
+               done > "$output"
+               eval cmd=\"$cmd1\"
+               func_show_eval "$cmd" 'exit $?'
+               output=$save_output
+               libobjs=$save_libobjs
+               skipped_export=false
+             else
+               # The command line is too long to execute in one step.
+               func_verbose "using reloadable object file for export list..."
+               skipped_export=:
+               # Break out early, otherwise skipped_export may be
+               # set to false by a later but shorter cmd.
+               break
+             fi
+           done
+           IFS=$save_ifs
+           if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+       fi
+
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         tmp_export_symbols=$export_symbols
+         test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+         $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+       fi
+
+       if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
+         # The given exports_symbols file has to be filtered, so filter it.
+         func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+         # FIXME: $output_objdir/$libname.filter potentially contains lots of
+         # 's' commands, which not all seds can handle. GNU sed should be fine
+         # though. Also, the filter scales superlinearly with the number of
+         # global variables. join(1) would be nice here, but unfortunately
+         # isn't a blessed tool.
+         $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+         func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+         export_symbols=$output_objdir/$libname.def
+         $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+       fi
+
+       tmp_deplibs=
+       for test_deplib in $deplibs; do
+         case " $convenience " in
+         *" $test_deplib "*) ;;
+         *)
+           func_append tmp_deplibs " $test_deplib"
+           ;;
+         esac
+       done
+       deplibs=$tmp_deplibs
+
+       if test -n "$convenience"; then
+         if test -n "$whole_archive_flag_spec" &&
+           test yes = "$compiler_needs_object" &&
+           test -z "$libobjs"; then
+           # extract the archives, so we have objects to list.
+           # TODO: could optimize this to just extract one archive.
+           whole_archive_flag_spec=
+         fi
+         if test -n "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         else
+           gentop=$output_objdir/${outputname}x
+           func_append generated " $gentop"
+
+           func_extract_archives $gentop $convenience
+           func_append libobjs " $func_extract_archives_result"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+       fi
+
+       if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
+         eval flag=\"$thread_safe_flag_spec\"
+         func_append linker_flags " $flag"
+       fi
+
+       # Make a backup of the uninstalled library when relinking
+       if test relink = "$opt_mode"; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+       fi
+
+       # Do each of the archive commands.
+       if test yes = "$module" && test -n "$module_cmds"; then
+         if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+           eval test_cmds=\"$module_expsym_cmds\"
+           cmds=$module_expsym_cmds
+         else
+           eval test_cmds=\"$module_cmds\"
+           cmds=$module_cmds
+         fi
+       else
+         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+           eval test_cmds=\"$archive_expsym_cmds\"
+           cmds=$archive_expsym_cmds
+         else
+           eval test_cmds=\"$archive_cmds\"
+           cmds=$archive_cmds
+         fi
+       fi
+
+       if test : != "$skipped_export" &&
+          func_len " $test_cmds" &&
+          len=$func_len_result &&
+          test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         :
+       else
+         # The command line is too long to link in one step, link piecewise
+         # or, if using GNU ld and skipped_export is not :, use a linker
+         # script.
+
+         # Save the value of $output and $libobjs because we want to
+         # use them later.  If we have whole_archive_flag_spec, we
+         # want to use save_libobjs as it was before
+         # whole_archive_flag_spec was expanded, because we can't
+         # assume the linker understands whole_archive_flag_spec.
+         # This may have to be revisited, in case too many
+         # convenience libraries get linked in and end up exceeding
+         # the spec.
+         if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+         fi
+         save_output=$output
+         func_basename "$output"
+         output_la=$func_basename_result
+
+         # Clear the reloadable object creation command queue and
+         # initialize k to one.
+         test_cmds=
+         concat_cmds=
+         objlist=
+         last_robj=
+         k=1
+
+         if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+           output=$output_objdir/$output_la.lnkscript
+           func_verbose "creating GNU ld script: $output"
+           echo 'INPUT (' > $output
+           for obj in $save_libobjs
+           do
+             func_to_tool_file "$obj"
+             $ECHO "$func_to_tool_file_result" >> $output
+           done
+           echo ')' >> $output
+           func_append delfiles " $output"
+           func_to_tool_file "$output"
+           output=$func_to_tool_file_result
+         elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
+           output=$output_objdir/$output_la.lnk
+           func_verbose "creating linker input file list: $output"
+           : > $output
+           set x $save_libobjs
+           shift
+           firstobj=
+           if test yes = "$compiler_needs_object"; then
+             firstobj="$1 "
+             shift
+           fi
+           for obj
+           do
+             func_to_tool_file "$obj"
+             $ECHO "$func_to_tool_file_result" >> $output
+           done
+           func_append delfiles " $output"
+           func_to_tool_file "$output"
+           output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+         else
+           if test -n "$save_libobjs"; then
+             func_verbose "creating reloadable object files..."
+             output=$output_objdir/$output_la-$k.$objext
+             eval test_cmds=\"$reload_cmds\"
+             func_len " $test_cmds"
+             len0=$func_len_result
+             len=$len0
+
+             # Loop over the list of objects to be linked.
+             for obj in $save_libobjs
+             do
+               func_len " $obj"
+               func_arith $len + $func_len_result
+               len=$func_arith_result
+               if test -z "$objlist" ||
+                  test "$len" -lt "$max_cmd_len"; then
+                 func_append objlist " $obj"
+               else
+                 # The command $test_cmds is almost too long, add a
+                 # command to the queue.
+                 if test 1 -eq "$k"; then
+                   # The first file doesn't have a previous command to add.
+                   reload_objs=$objlist
+                   eval concat_cmds=\"$reload_cmds\"
+                 else
+                   # All subsequent reloadable object files will link in
+                   # the last one created.
+                   reload_objs="$objlist $last_robj"
+                   eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+                 fi
+                 last_robj=$output_objdir/$output_la-$k.$objext
+                 func_arith $k + 1
+                 k=$func_arith_result
+                 output=$output_objdir/$output_la-$k.$objext
+                 objlist=" $obj"
+                 func_len " $last_robj"
+                 func_arith $len0 + $func_len_result
+                 len=$func_arith_result
+               fi
+             done
+             # Handle the remaining objects by creating one last
+             # reloadable object file.  All subsequent reloadable object
+             # files will link in the last one created.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             reload_objs="$objlist $last_robj"
+             eval concat_cmds=\"\$concat_cmds$reload_cmds\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+             fi
+             func_append delfiles " $output"
+
+           else
+             output=
+           fi
+
+           ${skipped_export-false} && {
+             func_verbose "generating symbol list for '$libname.la'"
+             export_symbols=$output_objdir/$libname.exp
+             $opt_dry_run || $RM $export_symbols
+             libobjs=$output
+             # Append the command to create the export file.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+             fi
+           }
+
+           test -n "$save_libobjs" &&
+             func_verbose "creating a temporary reloadable object file: $output"
+
+           # Loop through the commands generated above and execute them.
+           save_ifs=$IFS; IFS='~'
+           for cmd in $concat_cmds; do
+             IFS=$save_ifs
+             $opt_quiet || {
+                 func_quote_for_expand "$cmd"
+                 eval "func_echo $func_quote_for_expand_result"
+             }
+             $opt_dry_run || eval "$cmd" || {
+               lt_exit=$?
+
+               # Restore the uninstalled library and exit
+               if test relink = "$opt_mode"; then
+                 ( cd "$output_objdir" && \
+                   $RM "${realname}T" && \
+                   $MV "${realname}U" "$realname" )
+               fi
+
+               exit $lt_exit
+             }
+           done
+           IFS=$save_ifs
+
+           if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+
+          ${skipped_export-false} && {
+           if test -n "$export_symbols" && test -n "$include_expsyms"; then
+             tmp_export_symbols=$export_symbols
+             test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+             $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+           fi
+
+           if test -n "$orig_export_symbols"; then
+             # The given exports_symbols file has to be filtered, so filter it.
+             func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+             # FIXME: $output_objdir/$libname.filter potentially contains lots of
+             # 's' commands, which not all seds can handle. GNU sed should be fine
+             # though. Also, the filter scales superlinearly with the number of
+             # global variables. join(1) would be nice here, but unfortunately
+             # isn't a blessed tool.
+             $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+             func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+             export_symbols=$output_objdir/$libname.def
+             $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+           fi
+         }
+
+         libobjs=$output
+         # Restore the value of output.
+         output=$save_output
+
+         if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+         # Expand the library linking commands again to reset the
+         # value of $libobjs for piecewise linking.
+
+         # Do each of the archive commands.
+         if test yes = "$module" && test -n "$module_cmds"; then
+           if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+             cmds=$module_expsym_cmds
+           else
+             cmds=$module_cmds
+           fi
+         else
+           if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+             cmds=$archive_expsym_cmds
+           else
+             cmds=$archive_cmds
+           fi
+         fi
+       fi
+
+       if test -n "$delfiles"; then
+         # Append the command to remove temporary files to $cmds.
+         eval cmds=\"\$cmds~\$RM $delfiles\"
+       fi
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop=$output_objdir/${outputname}x
+         func_append generated " $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         func_append libobjs " $func_extract_archives_result"
+         test "X$libobjs" = "X " && libobjs=
+       fi
+
+       save_ifs=$IFS; IFS='~'
+       for cmd in $cmds; do
+         IFS=$sp$nl
+         eval cmd=\"$cmd\"
+         IFS=$save_ifs
+         $opt_quiet || {
+           func_quote_for_expand "$cmd"
+           eval "func_echo $func_quote_for_expand_result"
+         }
+         $opt_dry_run || eval "$cmd" || {
+           lt_exit=$?
+
+           # Restore the uninstalled library and exit
+           if test relink = "$opt_mode"; then
+             ( cd "$output_objdir" && \
+               $RM "${realname}T" && \
+               $MV "${realname}U" "$realname" )
+           fi
+
+           exit $lt_exit
+         }
+       done
+       IFS=$save_ifs
+
+       # Restore the uninstalled library and exit
+       if test relink = "$opt_mode"; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+         if test -n "$convenience"; then
+           if test -z "$whole_archive_flag_spec"; then
+             func_show_eval '${RM}r "$gentop"'
+           fi
+         fi
+
+         exit $EXIT_SUCCESS
+       fi
+
+       # Create links to the real library.
+       for linkname in $linknames; do
+         if test "$realname" != "$linkname"; then
+           func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+         fi
+       done
+
+       # If -module or -export-dynamic was specified, set the dlname.
+       if test yes = "$module" || test yes = "$export_dynamic"; then
+         # On all known operating systems, these are identical.
+         dlname=$soname
+       fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+       func_warning "'-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "'-l' and '-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "'-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+       func_warning "'-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+       func_warning "'-version-info' is ignored for objects"
+
+      test -n "$release" && \
+       func_warning "'-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+       test -n "$objs$old_deplibs" && \
+         func_fatal_error "cannot build library object '$output' from non-libtool objects"
+
+       libobj=$output
+       func_lo2o "$libobj"
+       obj=$func_lo2o_result
+       ;;
+      *)
+       libobj=
+       obj=$output
+       ;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # if reload_cmds runs $LD directly, get rid of -Wl from
+      # whole_archive_flag_spec and hope we can get by with turning comma
+      # into space.
+      case $reload_cmds in
+        *\$LD[\ \$]*) wl= ;;
+      esac
+      if test -n "$convenience"; then
+       if test -n "$whole_archive_flag_spec"; then
+         eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+         test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+         reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
+       else
+         gentop=$output_objdir/${obj}x
+         func_append generated " $gentop"
+
+         func_extract_archives $gentop $convenience
+         reload_conv_objs="$reload_objs $func_extract_archives_result"
+       fi
+      fi
+
+      # If we're not building shared, we need to use non_pic_objs
+      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
+
+      # Create the old-style object.
+      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
+
+      output=$obj
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      test yes = "$build_libtool_libs" || {
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       # Create an invalid libtool object if no PIC, so that we don't
+       # accidentally link it into a program.
+       # $show "echo timestamp > $libobj"
+       # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+       exit $EXIT_SUCCESS
+      }
+
+      if test -n "$pic_flag" || test default != "$pic_mode"; then
+       # Only do commands if we really have different PIC objects.
+       reload_objs="$libobjs $reload_conv_objs"
+       output=$libobj
+       func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+       func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+       *cygwin*) func_stripname '' '.exe' "$output"
+                 output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+       func_warning "'-version-info' is ignored for programs"
+
+      test -n "$release" && \
+       func_warning "'-release' is ignored for programs"
+
+      $preload \
+       && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
+       && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+       # On Rhapsody replace the C library is the System framework
+       compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+       finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+       ;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+       # Don't allow lazy linking, it breaks C++ global constructors
+       # But is supposedly fixed on 10.4 or later (yay!).
+       if test CXX = "$tagname"; then
+         case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+           10.[0123])
+             func_append compile_command " $wl-bind_at_load"
+             func_append finalize_command " $wl-bind_at_load"
+           ;;
+         esac
+       fi
+       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+       compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+       finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+       ;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $compile_deplibs " in
+         *" -L$path/$objdir "*)
+           func_append new_libs " -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $compile_deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) func_append new_libs " $deplib" ;;
+         esac
+         ;;
+       *) func_append new_libs " $deplib" ;;
+       esac
+      done
+      compile_deplibs=$new_libs
+
+
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) func_append finalize_rpath " $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs=$libdir
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           func_append rpath " $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) func_append perm_rpath " $libdir" ;;
+         esac
+       fi
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$libdir:"*) ;;
+         ::) dllsearchpath=$libdir;;
+         *) func_append dllsearchpath ":$libdir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) func_append dllsearchpath ":$testbindir";;
+         esac
+         ;;
+       esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir=$hardcode_libdirs
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath=$rpath
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs=$libdir
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           func_append rpath " $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) func_append finalize_perm_rpath " $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir=$hardcode_libdirs
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath=$rpath
+
+      if test -n "$libobjs" && test yes = "$build_old_libs"; then
+       # Transform all the library objects into standard objects.
+       compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+       finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" false
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+       func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=:
+      case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=false
+        ;;
+      *cygwin* | *mingw* )
+        test yes = "$build_libtool_libs" || wrappers_required=false
+        ;;
+      *)
+        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+          wrappers_required=false
+        fi
+        ;;
+      esac
+      $wrappers_required || {
+       # Replace the output file specification.
+       compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+       link_command=$compile_command$compile_rpath
+
+       # We have no uninstalled library dependencies, so finalize right now.
+       exit_status=0
+       func_show_eval "$link_command" 'exit_status=$?'
+
+       if test -n "$postlink_cmds"; then
+         func_to_tool_file "$output"
+         postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+         func_execute_cmds "$postlink_cmds" 'exit $?'
+       fi
+
+       # Delete the generated files.
+       if test -f "$output_objdir/${outputname}S.$objext"; then
+         func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
+       fi
+
+       exit $exit_status
+      }
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+       compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+       finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+       if test -n "$perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $perm_rpath; do
+           func_append rpath "$dir:"
+         done
+         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+       if test -n "$finalize_perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $finalize_perm_rpath; do
+           func_append rpath "$dir:"
+         done
+         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+      fi
+
+      if test yes = "$no_install"; then
+       # We don't need to create a wrapper script.
+       link_command=$compile_var$compile_command$compile_rpath
+       # Replace the output file specification.
+       link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+       # Delete the old output file.
+       $opt_dry_run || $RM $output
+       # Link the executable and exit
+       func_show_eval "$link_command" 'exit $?'
+
+       if test -n "$postlink_cmds"; then
+         func_to_tool_file "$output"
+         postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+         func_execute_cmds "$postlink_cmds" 'exit $?'
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      case $hardcode_action,$fast_install in
+        relink,*)
+         # Fast installation is not supported
+         link_command=$compile_var$compile_command$compile_rpath
+         relink_command=$finalize_var$finalize_command$finalize_rpath
+
+         func_warning "this platform does not like uninstalled shared libraries"
+         func_warning "'$output' will be relinked during installation"
+         ;;
+        *,yes)
+         link_command=$finalize_var$compile_command$finalize_rpath
+         relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+          ;;
+       *,no)
+         link_command=$compile_var$compile_command$compile_rpath
+         relink_command=$finalize_var$finalize_command$finalize_rpath
+          ;;
+       *,needless)
+         link_command=$finalize_var$compile_command$finalize_rpath
+         relink_command=
+          ;;
+      esac
+
+      # Replace the output file specification.
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      if test -n "$postlink_cmds"; then
+       func_to_tool_file "$output_objdir/$outputname"
+       postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+       func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+       # Preserve any variables that may affect compiler behavior
+       for var in $variables_saved_for_relink; do
+         if eval test -z \"\${$var+set}\"; then
+           relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+         elif eval var_value=\$$var; test -z "$var_value"; then
+           relink_command="$var=; export $var; $relink_command"
+         else
+           func_quote_for_eval "$var_value"
+           relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+         fi
+       done
+       relink_command="(cd `pwd`; $relink_command)"
+       relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+       # win32 will think the script is a binary if it has
+       # a .exe suffix, so we strip it off here.
+       case $output in
+         *.exe) func_stripname '' '.exe' "$output"
+                output=$func_stripname_result ;;
+       esac
+       # test for cygwin because mv fails w/o .exe extensions
+       case $host in
+         *cygwin*)
+           exeext=.exe
+           func_stripname '' '.exe' "$outputname"
+           outputname=$func_stripname_result ;;
+         *) exeext= ;;
+       esac
+       case $host in
+         *cygwin* | *mingw* )
+           func_dirname_and_basename "$output" "" "."
+           output_name=$func_basename_result
+           output_path=$func_dirname_result
+           cwrappersource=$output_path/$objdir/lt-$output_name.c
+           cwrapper=$output_path/$output_name.exe
+           $RM $cwrappersource $cwrapper
+           trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_cwrapperexe_src > $cwrappersource
+
+           # The wrapper executable is built using the $host compiler,
+           # because it contains $host paths and files. If cross-
+           # compiling, it, like the target executable, must be
+           # executed on the $host or under an emulation environment.
+           $opt_dry_run || {
+             $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+             $STRIP $cwrapper
+           }
+
+           # Now, create the wrapper script for func_source use:
+           func_ltwrapper_scriptname $cwrapper
+           $RM $func_ltwrapper_scriptname_result
+           trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+           $opt_dry_run || {
+             # note: this script will not be executed, so do not chmod.
+             if test "x$build" = "x$host"; then
+               $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+             else
+               func_emit_wrapper no > $func_ltwrapper_scriptname_result
+             fi
+           }
+         ;;
+         * )
+           $RM $output
+           trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_wrapper no > $output
+           chmod +x $output
+         ;;
+       esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      case $build_libtool_libs in
+        convenience)
+         oldobjs="$libobjs_save $symfileobj"
+         addlibs=$convenience
+         build_libtool_libs=no
+         ;;
+       module)
+         oldobjs=$libobjs_save
+         addlibs=$old_convenience
+         build_libtool_libs=no
+          ;;
+       *)
+         oldobjs="$old_deplibs $non_pic_objects"
+         $preload && test -f "$symfileobj" \
+           && func_append oldobjs " $symfileobj"
+         addlibs=$old_convenience
+         ;;
+      esac
+
+      if test -n "$addlibs"; then
+       gentop=$output_objdir/${outputname}x
+       func_append generated " $gentop"
+
+       func_extract_archives $gentop $addlibs
+       func_append oldobjs " $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
+       cmds=$old_archive_from_new_cmds
+      else
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop=$output_objdir/${outputname}x
+         func_append generated " $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         func_append oldobjs " $func_extract_archives_result"
+       fi
+
+       # POSIX demands no paths to be encoded in archives.  We have
+       # to avoid creating archives with duplicate basenames if we
+       # might have to extract them afterwards, e.g., when creating a
+       # static archive out of a convenience library, or when linking
+       # the entirety of a libtool archive into another (currently
+       # not supported by libtool).
+       if (for obj in $oldobjs
+           do
+             func_basename "$obj"
+             $ECHO "$func_basename_result"
+           done | sort | sort -uc >/dev/null 2>&1); then
+         :
+       else
+         echo "copying selected object files to avoid basename conflicts..."
+         gentop=$output_objdir/${outputname}x
+         func_append generated " $gentop"
+         func_mkdir_p "$gentop"
+         save_oldobjs=$oldobjs
+         oldobjs=
+         counter=1
+         for obj in $save_oldobjs
+         do
+           func_basename "$obj"
+           objbase=$func_basename_result
+           case " $oldobjs " in
+           " ") oldobjs=$obj ;;
+           *[\ /]"$objbase "*)
+             while :; do
+               # Make sure we don't pick an alternate name that also
+               # overlaps.
+               newobj=lt$counter-$objbase
+               func_arith $counter + 1
+               counter=$func_arith_result
+               case " $oldobjs " in
+               *[\ /]"$newobj "*) ;;
+               *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+               esac
+             done
+             func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+             func_append oldobjs " $gentop/$newobj"
+             ;;
+           *) func_append oldobjs " $obj" ;;
+           esac
+         done
+       fi
+       func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+       tool_oldlib=$func_to_tool_file_result
+       eval cmds=\"$old_archive_cmds\"
+
+       func_len " $cmds"
+       len=$func_len_result
+       if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         cmds=$old_archive_cmds
+       elif test -n "$archiver_list_spec"; then
+         func_verbose "using command file archive linking..."
+         for obj in $oldobjs
+         do
+           func_to_tool_file "$obj"
+           $ECHO "$func_to_tool_file_result"
+         done > $output_objdir/$libname.libcmd
+         func_to_tool_file "$output_objdir/$libname.libcmd"
+         oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+         cmds=$old_archive_cmds
+       else
+         # the command line is too long to link in one step, link in parts
+         func_verbose "using piecewise archive linking..."
+         save_RANLIB=$RANLIB
+         RANLIB=:
+         objlist=
+         concat_cmds=
+         save_oldobjs=$oldobjs
+         oldobjs=
+         # Is there a better way of finding the last object in the list?
+         for obj in $save_oldobjs
+         do
+           last_oldobj=$obj
+         done
+         eval test_cmds=\"$old_archive_cmds\"
+         func_len " $test_cmds"
+         len0=$func_len_result
+         len=$len0
+         for obj in $save_oldobjs
+         do
+           func_len " $obj"
+           func_arith $len + $func_len_result
+           len=$func_arith_result
+           func_append objlist " $obj"
+           if test "$len" -lt "$max_cmd_len"; then
+             :
+           else
+             # the above command should be used before it gets too long
+             oldobjs=$objlist
+             if test "$obj" = "$last_oldobj"; then
+               RANLIB=$save_RANLIB
+             fi
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
+             objlist=
+             len=$len0
+           fi
+         done
+         RANLIB=$save_RANLIB
+         oldobjs=$objlist
+         if test -z "$oldobjs"; then
+           eval cmds=\"\$concat_cmds\"
+         else
+           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+         fi
+       fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test yes = "$build_old_libs" && old_library=$libname.$libext
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+       if eval test -z \"\${$var+set}\"; then
+         relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+       elif eval var_value=\$$var; test -z "$var_value"; then
+         relink_command="$var=; export $var; $relink_command"
+       else
+         func_quote_for_eval "$var_value"
+         relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+       fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      if test yes = "$hardcode_automatic"; then
+       relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+       for installed in no yes; do
+         if test yes = "$installed"; then
+           if test -z "$install_libdir"; then
+             break
+           fi
+           output=$output_objdir/${outputname}i
+           # Replace all uninstalled libtool libraries with the installed ones
+           newdependency_libs=
+           for deplib in $dependency_libs; do
+             case $deplib in
+             *.la)
+               func_basename "$deplib"
+               name=$func_basename_result
+               func_resolve_sysroot "$deplib"
+               eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+               test -z "$libdir" && \
+                 func_fatal_error "'$deplib' is not a valid libtool archive"
+               func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+               ;;
+             -L*)
+               func_stripname -L '' "$deplib"
+               func_replace_sysroot "$func_stripname_result"
+               func_append newdependency_libs " -L$func_replace_sysroot_result"
+               ;;
+             -R*)
+               func_stripname -R '' "$deplib"
+               func_replace_sysroot "$func_stripname_result"
+               func_append newdependency_libs " -R$func_replace_sysroot_result"
+               ;;
+             *) func_append newdependency_libs " $deplib" ;;
+             esac
+           done
+           dependency_libs=$newdependency_libs
+           newdlfiles=
+
+           for lib in $dlfiles; do
+             case $lib in
+             *.la)
+               func_basename "$lib"
+               name=$func_basename_result
+               eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "'$lib' is not a valid libtool archive"
+               func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+               ;;
+             *) func_append newdlfiles " $lib" ;;
+             esac
+           done
+           dlfiles=$newdlfiles
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+             *.la)
+               # Only pass preopened files to the pseudo-archive (for
+               # eventual linking with the app. that links it) if we
+               # didn't already link the preopened objects directly into
+               # the library:
+               func_basename "$lib"
+               name=$func_basename_result
+               eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "'$lib' is not a valid libtool archive"
+               func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+               ;;
+             esac
+           done
+           dlprefiles=$newdlprefiles
+         else
+           newdlfiles=
+           for lib in $dlfiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             func_append newdlfiles " $abs"
+           done
+           dlfiles=$newdlfiles
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             func_append newdlprefiles " $abs"
+           done
+           dlprefiles=$newdlprefiles
+         fi
+         $RM $output
+         # place dlname in correct position for cygwin
+         # In fact, it would be nice if we could use this code for all target
+         # systems that can't hard-code library paths into their executables
+         # and that have no shared library path variable independent of PATH,
+         # but it turns out we can't easily determine that from inspecting
+         # libtool variables, so we have to hard-code the OSs to which it
+         # applies here; at the moment, that means platforms that use the PE
+         # object format with DLL files.  See the long comment at the top of
+         # tests/bindir.at for full details.
+         tdlname=$dlname
+         case $host,$output,$installed,$module,$dlname in
+           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+             # If a -bindir argument was supplied, place the dll there.
+             if test -n "$bindir"; then
+               func_relative_path "$install_libdir" "$bindir"
+               tdlname=$func_relative_path_result/$dlname
+             else
+               # Otherwise fall back on heuristic.
+               tdlname=../bin/$dlname
+             fi
+             ;;
+         esac
+         $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that cannot go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+         if test no,yes = "$installed,$need_relink"; then
+           $ECHO >> $output "\
+relink_command=\"$relink_command\""
+         fi
+       done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+if test link = "$opt_mode" || test relink = "$opt_mode"; then
+  func_mode_link ${1+"$@"}
+fi
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $debug_cmd
+
+    RM=$nonopt
+    files=
+    rmforce=false
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic=$magic
+
+    for arg
+    do
+      case $arg in
+      -f) func_append RM " $arg"; rmforce=: ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir=$func_dirname_result
+      if test . = "$dir"; then
+       odir=$objdir
+      else
+       odir=$dir/$objdir
+      fi
+      func_basename "$file"
+      name=$func_basename_result
+      test uninstall = "$opt_mode" && odir=$dir
+
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test clean = "$opt_mode"; then
+       case " $rmdirs " in
+         *" $odir "*) ;;
+         *) func_append rmdirs " $odir" ;;
+       esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+        { test -h "$file"; } >/dev/null 2>&1 ||
+        test -f "$file"; then
+       :
+      elif test -d "$file"; then
+       exit_status=1
+       continue
+      elif $rmforce; then
+       continue
+      fi
+
+      rmfiles=$file
+
+      case $name in
+      *.la)
+       # Possibly a libtool archive, so verify it.
+       if func_lalib_p "$file"; then
+         func_source $dir/$name
+
+         # Delete the libtool libraries and symlinks.
+         for n in $library_names; do
+           func_append rmfiles " $odir/$n"
+         done
+         test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+         case $opt_mode in
+         clean)
+           case " $library_names " in
+           *" $dlname "*) ;;
+           *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+           esac
+           test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+           ;;
+         uninstall)
+           if test -n "$library_names"; then
+             # Do each command in the postuninstall commands.
+             func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
+           fi
+
+           if test -n "$old_library"; then
+             # Do each command in the old_postuninstall commands.
+             func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
+           fi
+           # FIXME: should reinstall the best remaining shared library.
+           ;;
+         esac
+       fi
+       ;;
+
+      *.lo)
+       # Possibly a libtool object, so verify it.
+       if func_lalib_p "$file"; then
+
+         # Read the .lo file
+         func_source $dir/$name
+
+         # Add PIC object to the list of files to remove.
+         if test -n "$pic_object" && test none != "$pic_object"; then
+           func_append rmfiles " $dir/$pic_object"
+         fi
+
+         # Add non-PIC object to the list of files to remove.
+         if test -n "$non_pic_object" && test none != "$non_pic_object"; then
+           func_append rmfiles " $dir/$non_pic_object"
+         fi
+       fi
+       ;;
+
+      *)
+       if test clean = "$opt_mode"; then
+         noexename=$name
+         case $file in
+         *.exe)
+           func_stripname '' '.exe' "$file"
+           file=$func_stripname_result
+           func_stripname '' '.exe' "$name"
+           noexename=$func_stripname_result
+           # $file with .exe has already been added to rmfiles,
+           # add $file without .exe
+           func_append rmfiles " $file"
+           ;;
+         esac
+         # Do a test to see if this is a libtool program.
+         if func_ltwrapper_p "$file"; then
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             relink_command=
+             func_source $func_ltwrapper_scriptname_result
+             func_append rmfiles " $func_ltwrapper_scriptname_result"
+           else
+             relink_command=
+             func_source $dir/$noexename
+           fi
+
+           # note $name still contains .exe if it was in $file originally
+           # as does the version of $file that was added into $rmfiles
+           func_append rmfiles " $odir/$name $odir/${name}S.$objext"
+           if test yes = "$fast_install" && test -n "$relink_command"; then
+             func_append rmfiles " $odir/lt-$name"
+           fi
+           if test "X$noexename" != "X$name"; then
+             func_append rmfiles " $odir/lt-$noexename.c"
+           fi
+         fi
+       fi
+       ;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+
+    # Try to remove the $objdir's in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+       func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
+  func_mode_uninstall ${1+"$@"}
+fi
+
+test -z "$opt_mode" && {
+  help=$generic_help
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode '$opt_mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# where we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
index 5f7b429..9d41d06 100755 (executable)
--- a/configure
+++ b/configure
@@ -620,17 +620,23 @@ ac_includes_default="\
 #endif"
 
 gt_needs=
-ac_header_list=
-gl_use_threads_default=
-ac_func_list=
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
+systemd_system_unit_dir
+have_systemd
+systemd_LIBS
+systemd_CFLAGS
+crond_dir
+have_crond
+pkg_udev_rules_dir
+have_udev
+udev_LIBS
+udev_CFLAGS
 LDFLAGS_SHLIB
 CFLAGS_STLIB
 CFLAGS_SHLIB
 BUILD_LDFLAGS
 BUILD_CFLAGS
-MKINSTALLDIRS
 INCLUDES
 DO_TEST_SUITE
 LDFLAGS_STATIC
@@ -639,9 +645,24 @@ root_libdir
 root_sbindir
 root_bindir
 root_prefix
+E2SCRUB_CMT
 UNIX_CMT
 CYGWIN_CMT
 LINUX_CMT
+threadsan_ldflags
+threadsan_cflags
+have_threadsan
+addrsan_ldflags
+addrsan_cflags
+have_addrsan
+ubsan_ldflags
+ubsan_cflags
+have_ubsan
+lto_ldflags
+lto_cflags
+have_lto
+gcc_ranlib
+gcc_ar
 UNI_DIFF_OPTS
 SEM_INIT_LIB
 FUSE_CMT
@@ -655,9 +676,11 @@ SIZEOF_LONG_LONG
 SIZEOF_LONG
 SIZEOF_INT
 SIZEOF_SHORT
+DD
 BUILD_CC
 MAKEINFO
 STRIP
+RANLIB
 AR
 LDCONFIG
 PERL
@@ -667,6 +690,7 @@ RM
 CP
 MV
 LN_S
+mkdir_p
 LN
 ifNotGNUmake
 ifGNUmake
@@ -675,53 +699,19 @@ POSUB
 LTLIBINTL
 LIBINTL
 INTLLIBS
-INTL_LIBTOOL_SUFFIX_PREFIX
-INTLOBJS
-GENCAT
-INSTOBJEXT
-DATADIRNAME
-CATOBJEXT
-USE_INCLUDED_LIBINTL
-BUILD_INCLUDED_LIBINTL
-LTLIBC
-WINDRES
-WOE32
-WOE32DLL
-HAVE_WPRINTF
-HAVE_NEWLOCALE
-HAVE_SNPRINTF
-HAVE_ASPRINTF
-HAVE_POSIX_PRINTF
-INTL_DEFAULT_VERBOSITY
-INTL_MACOSX_LIBS
-GLIBC21
-INTLBISON
 LTLIBICONV
 LIBICONV
-LTLIBMULTITHREAD
-LIBMULTITHREAD
-LTLIBTHREAD
-LIBTHREAD
-LIBPTH_PREFIX
-LTLIBPTH
-LIBPTH
-PRI_MACROS_BROKEN
-ALLOCA
-HAVE_VISIBILITY
-CFLAG_VISIBILITY
-RANLIB
-GLIBC2
+INTL_MACOSX_LIBS
 XGETTEXT_EXTRA_OPTIONS
+MSGMERGE_FOR_MSGFMT_OPTION
 MSGMERGE
 XGETTEXT_015
 XGETTEXT
 GMSGFMT_015
-MSGFMT_015
 GMSGFMT
 MSGFMT
 GETTEXT_MACRO_VERSION
 USE_NLS
-SED
 MKDIR_P
 INSTALL_DATA
 INSTALL_SCRIPT
@@ -733,6 +723,11 @@ GETTEXT_PACKAGE
 TDB_MAN_COMMENT
 TDB_CMT
 UUIDD_CMT
+PTHREAD_CFLAGS
+PTHREAD_LIBS
+PTHREAD_CC
+ax_pthread_config
+SED
 E2INITRD_MAN
 E2INITRD_PROG
 FSCK_MAN
@@ -741,6 +736,8 @@ DEFRAG_CMT
 RESIZER_CMT
 IMAGER_CMT
 DEBUGFS_CMT
+SUBSET_CMT
+ALL_CMT
 BLKID_CMT
 DEPPROFILED_LIBBLKID
 PROFILED_LIBBLKID
@@ -758,6 +755,7 @@ LIBUUID
 PKG_CONFIG_LIBDIR
 PKG_CONFIG_PATH
 PKG_CONFIG
+DEV_FEATURES_CMT
 TEST_IO_CMT
 PRIVATE_LIBS_CMT
 LDFLAG_DYNAMIC
@@ -794,6 +792,7 @@ build_os
 build_vendor
 build_cpu
 build
+E2FSPROGS_DATE
 E2FSPROGS_PKGVER
 E2FSPROGS_VERSION
 E2FSPROGS_DAY
@@ -866,8 +865,10 @@ enable_hardening
 enable_jbd_debug
 enable_blkid_debug
 enable_testio_debug
+enable_developer_features
 enable_libuuid
 enable_libblkid
+enable_subset
 enable_backtrace
 enable_debugfs
 enable_imager
@@ -876,21 +877,26 @@ enable_defrag
 enable_fsck
 enable_e2initrd_helper
 enable_tls
+with_pthread
 enable_uuidd
 enable_mmp
 enable_tdb
 enable_bmap_stats
 enable_bmap_stats_ops
 enable_nls
-enable_threads
 with_gnu_ld
 enable_rpath
-with_libpth_prefix
 with_libiconv_prefix
-with_included_gettext
 with_libintl_prefix
 enable_fuse2fs
+enable_lto
+enable_ubsan
+enable_addrsan
+enable_threadsan
 with_multiarch
+with_udev_rules_dir
+with_crond_dir
+with_systemd_unit_dir
 '
       ac_precious_vars='build_alias
 host_alias
@@ -903,7 +909,11 @@ CPPFLAGS
 CPP
 PKG_CONFIG
 PKG_CONFIG_PATH
-PKG_CONFIG_LIBDIR'
+PKG_CONFIG_LIBDIR
+udev_CFLAGS
+udev_LIBS
+systemd_CFLAGS
+systemd_LIBS'
 
 
 # Initialize some variables set by options.
@@ -1540,8 +1550,10 @@ Optional Features:
   --enable-jbd-debug     enable journal debugging
   --enable-blkid-debug    enable blkid debugging
   --disable-testio-debug  disable the use of the test I/O manager for debugging
+  --enable-developer-features  enable features for use by ext4 developers
   --enable-libuuid       build and use private uuid library
   --enable-libblkid      build and use private blkid library
+  --enable-subset        enable subset-only build
   --disable-backtrace    disable use backtrace
   --disable-debugfs      disable support of debugfs program
   --disable-imager       disable support of e2image program
@@ -1556,11 +1568,12 @@ Optional Features:
   --disable-bmap-stats    disable collection of bitmap stats.
   --enable-bmap-stats-ops enable collection of additional bitmap stats
   --disable-nls           do not use Native Language Support
-  --enable-threads={posix|solaris|pth|windows}
-                          specify multithreading API
-  --disable-threads       build without multithread safety
   --disable-rpath         do not hardcode runtime library paths
   --disable-fuse2fs      do not build fuse2fs
+  --enable-lto           enable link time optimization
+  --enable-ubsan         enable undefined behavior sanitizer
+  --enable-addrsan       enable address sanitizer
+  --enable-threadsan     enable thread sanitizer
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1570,15 +1583,18 @@ Optional Packages:
   --with-ccopts           no longer supported, use CFLAGS= instead
   --with-ldopts           no longer supported, use LDFLAGS= instead
   --with-root-prefix=PREFIX override prefix variable for files to be placed in the root
+  --without-pthread       disable use of pthread support
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-  --with-libpth-prefix[=DIR]  search for libpth in DIR/include and DIR/lib
-  --without-libpth-prefix     don't search for libpth in includedir and libdir
   --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
   --without-libiconv-prefix     don't search for libiconv in includedir and libdir
-  --with-included-gettext use the GNU gettext library included here
   --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib
   --without-libintl-prefix     don't search for libintl in includedir and libdir
   --with-multiarch=ARCH specify the multiarch triplet
+  --with-udev-rules-dir[=DIR]
+                          Install udev rules into DIR.
+  --with-crond-dir[=DIR]  Install system crontabs into DIR.
+  --with-systemd-unit-dir[=DIR]
+                          Install systemd system units into DIR.
 
 Some influential environment variables:
   CC          C compiler command
@@ -1594,6 +1610,12 @@ Some influential environment variables:
               directories to add to pkg-config's search path
   PKG_CONFIG_LIBDIR
               path overriding pkg-config's built-in search path
+  udev_CFLAGS C compiler flags for udev, overriding pkg-config
+  udev_LIBS   linker flags for udev, overriding pkg-config
+  systemd_CFLAGS
+              C compiler flags for systemd, overriding pkg-config
+  systemd_LIBS
+              linker flags for systemd, overriding pkg-config
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -1956,60 +1978,6 @@ $as_echo "$ac_res" >&6; }
 
 } # ac_fn_c_check_header_compile
 
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-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 eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=no"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof ($2))
-        return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
-           return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-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; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_type
-
 # ac_fn_c_check_func LINENO FUNC VAR
 # ----------------------------------
 # Tests whether FUNC exists, setting the cache variable VAR accordingly
@@ -2077,6 +2045,117 @@ $as_echo "$ac_res" >&6; }
 
 } # ac_fn_c_check_func
 
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+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 eval \${$4+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+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; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_member
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+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 eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+        return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+           return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+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; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
 # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
 # ---------------------------------------------
 # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
@@ -2305,63 +2384,6 @@ rm -f conftest.val
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_compute_int
-
-# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
-# ----------------------------------------------------
-# Tries to find if the field MEMBER exists in type AGGR, after including
-# INCLUDES, setting cache variable VAR accordingly.
-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 eval \${$4+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$5
-int
-main ()
-{
-static $2 ac_aggr;
-if (ac_aggr.$3)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$4=yes"
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$5
-int
-main ()
-{
-static $2 ac_aggr;
-if (sizeof ac_aggr.$3)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$4=yes"
-else
-  eval "$4=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-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; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_member
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
@@ -2647,10 +2669,6 @@ $as_echo "$as_me: creating cache $cache_file" >&6;}
 fi
 
 gt_needs="$gt_needs "
-as_fn_append ac_header_list " stdlib.h"
-as_fn_append ac_header_list " unistd.h"
-as_fn_append ac_header_list " sys/param.h"
-as_fn_append ac_func_list " symlink"
 # Check that the precious variables saved in the cache have kept the same
 # value.
 ac_cache_corrupted=false
@@ -2757,11 +2775,11 @@ MCONFIG=./MCONFIG
 BINARY_TYPE=bin
 E2FSPROGS_VERSION=`grep E2FSPROGS_VERSION ${srcdir}/version.h  \
        | awk '{print $3}' | tr \" " " | awk '{print $1}'`
-DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \
-       | tr \" " "`
-E2FSPROGS_DAY=$(echo $DATE | awk -F- '{print $1}' | sed -e '/^[1-9]$/s/^/0/')
-MONTH=`echo $DATE | awk -F- '{print $2}'`
-YEAR=`echo $DATE | awk -F- '{print $3}'`
+E2FSPROGS_DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \
+       | tr \" " " | awk '{print $1}'`
+E2FSPROGS_DAY=$(echo $E2FSPROGS_DATE | awk -F- '{print $1}' | sed -e '/^[1-9]$/s/^/0/')
+MONTH=`echo $E2FSPROGS_DATE | awk -F- '{print $2}'`
+YEAR=`echo $E2FSPROGS_DATE | awk -F- '{print $3}'`
 
 if expr $YEAR ">" 1900 > /dev/null ; then
        E2FSPROGS_YEAR=$YEAR
@@ -2812,6 +2830,7 @@ $as_echo "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}" >&6; }
 
 
 
+
 WITH_DIET_LIBC=
 
 # Check whether --with-diet-libc was given.
@@ -5111,6 +5130,30 @@ TEST_IO_CMT=
 fi
 
 
+# Check whether --enable-developer-features was given.
+if test "${enable_developer_features+set}" = set; then :
+  enableval=$enable_developer_features;
+if test "$enableval" = "yes"
+then
+       DEV_FEATURES_CMT=
+       $as_echo "#define CONFIG_DEVELOPER_FEATURES 1" >>confdefs.h
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling ext4 developer features" >&5
+$as_echo "Enabling ext4 developer features" >&6; }
+else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling ext4 developer features" >&5
+$as_echo "Disabling ext4 developer features" >&6; }
+       DEV_FEATURES_CMT="#"
+fi
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling ext4 developer features by default" >&5
+$as_echo "Disabling ext4 developer features by default" >&6; }
+DEV_FEATURES_CMT=
+
+fi
+
+
 
 
 
@@ -5640,6 +5683,25 @@ fi
 
 
 
+ALL_CMT=
+SUBSET_CMT=
+# Check whether --enable-subset was given.
+if test "${enable_subset+set}" = set; then :
+  enableval=$enable_subset; if test "$enableval" = "no"
+then
+       SUBSET_CMT=#
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling subset-only build" >&5
+$as_echo "Disabling subset-only build" >&6; }
+else
+       ALL_CMT=#
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling subset-only-build" >&5
+$as_echo "Enabling subset-only-build" >&6; }
+fi
+
+fi
+
+
+
 
 # Check whether --enable-backtrace was given.
 if test "${enable_backtrace+set}" = set; then :
@@ -5885,503 +5947,683 @@ $as_echo "$ac_cv_tls" >&6; }
 
 fi
 
-# Check whether --enable-uuidd was given.
-if test "${enable_uuidd+set}" = set; then :
-  enableval=$enable_uuidd; if test "$enableval" = "no"
+# Check whether --with-pthread was given.
+if test "${with_pthread+set}" = set; then :
+  withval=$with_pthread; if test "$withval" = "no"
 then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not building uuidd" >&5
-$as_echo "Not building uuidd" >&6; }
-       UUIDD_CMT="#"
+       try_pthread=""
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling pthread support" >&5
+$as_echo "Disabling pthread support" >&6; }
 else
-       $as_echo "#define USE_UUIDD 1" >>confdefs.h
+       try_pthread="yes"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Testing for pthread support" >&5
+$as_echo "Testing for pthread support" >&6; }
+fi
+
+else
+  try_pthread="yes"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Try testing for pthread support by default" >&5
+$as_echo "Try testing for pthread support by default" >&6; }
 
-       UUIDD_CMT=""
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Building uuidd" >&5
-$as_echo "Building uuidd" >&6; }
 fi
 
+if test "$try_pthread" = "yes"
+then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  $as_echo "#define USE_UUIDD 1" >>confdefs.h
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
 
-if test -z "$UUID_CMT"
-then
-       UUIDD_CMT=""
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Building uuidd by default" >&5
-$as_echo "Building uuidd by default" >&6; }
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
 else
-       UUIDD_CMT="#"
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling uuidd by default" >&5
-$as_echo "Disabling uuidd by default" >&6; }
+  ac_cv_path_SED=$SED
 fi
 
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
 
 
 
-# Check whether --enable-mmp was given.
-if test "${enable_mmp+set}" = set; then :
-  enableval=$enable_mmp; if test "$enableval" = "no"
-then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling mmp support" >&5
-$as_echo "Disabling mmp support" >&6; }
-else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling mmp support" >&5
-$as_echo "Enabling mmp support" >&6; }
-       $as_echo "#define CONFIG_MMP 1" >>confdefs.h
 
-fi
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling mmp support by default" >&5
-$as_echo "Enabling mmp support by default" >&6; }
-$as_echo "#define CONFIG_MMP 1" >>confdefs.h
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on Tru64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
+        ax_pthread_save_CC="$CC"
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        if test "x$PTHREAD_CC" != "x"; then :
+  CC="$PTHREAD_CC"
+fi
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5
+$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_join ();
+int
+main ()
+{
+return pthread_join ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test "x$ax_pthread_ok" = "xno"; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        CC="$ax_pthread_save_CC"
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
+#           (Note: HP C rejects this with "bad form for `-t' option")
+# -pthreads: Solaris/gcc (Note: HP C also rejects)
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads and
+#      -D_REENTRANT too), HP C (must be checked before -lpthread, which
+#      is present but should not be used directly; and before -mthreads,
+#      because the compiler interprets this as "-mt" + "-hreads")
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case $host_os in
+
+        freebsd*)
+
+        # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+        # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+
+        ax_pthread_flags="-kthread lthread $ax_pthread_flags"
+        ;;
 
+        hpux*)
 
-# Check whether --enable-tdb was given.
-if test "${enable_tdb+set}" = set; then :
-  enableval=$enable_tdb; if test "$enableval" = "no"
-then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling tdb support" >&5
-$as_echo "Disabling tdb support" >&6; }
-       TDB_CMT="#"
-       TDB_MAN_COMMENT='.\"'
-else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling tdb support" >&5
-$as_echo "Enabling tdb support" >&6; }
-       $as_echo "#define CONFIG_TDB 1" >>confdefs.h
+        # From the cc(1) man page: "[-mt] Sets various -D flags to enable
+        # multi-threading and also sets -lpthread."
 
-       TDB_CMT=""
-       TDB_MAN_COMMENT=""
-fi
+        ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
+        ;;
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling mmp support by default" >&5
-$as_echo "Enabling mmp support by default" >&6; }
-$as_echo "#define CONFIG_TDB 1" >>confdefs.h
+        openedition*)
 
-TDB_CMT=""
-TDB_MAN_COMMENT=""
+        # IBM z/OS requires a feature-test macro to be defined in order to
+        # enable POSIX threads at all, so give the user a hint if this is
+        # not set. (We don't define these ourselves, as they can affect
+        # other portions of the system API in unpredictable ways.)
 
-fi
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+#            if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
+             AX_PTHREAD_ZOS_MISSING
+#            endif
 
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5
+$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;}
+fi
+rm -f conftest*
 
+        ;;
 
-# Check whether --enable-bmap-stats was given.
-if test "${enable_bmap_stats+set}" = set; then :
-  enableval=$enable_bmap_stats; if test "$enableval" = "no"
-then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling bitmap statistics support" >&5
-$as_echo "Disabling bitmap statistics support" >&6; }
-else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling bitmap statistics support" >&5
-$as_echo "Enabling bitmap statistics support" >&6; }
-       $as_echo "#define ENABLE_BMAP_STATS 1" >>confdefs.h
+        solaris*)
 
-fi
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed. (N.B.: The stubs are missing
+        # pthread_cleanup_push, or rather a function called by this macro,
+        # so we could check for that, but who knows whether they'll stub
+        # that too in a future libc.)  So we'll check first for the
+        # standard Solaris way of linking pthreads (-mt -lpthread).
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling bitmap statistics support by default" >&5
-$as_echo "Enabling bitmap statistics support by default" >&6; }
-$as_echo "#define ENABLE_BMAP_STATS 1" >>confdefs.h
+        ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
+        ;;
+esac
 
+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
 
+if test "x$GCC" = "xyes"; then :
+  ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"
 fi
 
+# The presence of a feature test macro requesting re-entrant function
+# definitions is, on some systems, a strong hint that pthreads support is
+# correctly enabled
 
-# Check whether --enable-bmap-stats-ops was given.
-if test "${enable_bmap_stats_ops+set}" = set; then :
-  enableval=$enable_bmap_stats_ops; if test "$enableval" = "no"
-then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling additional bitmap statistics" >&5
-$as_echo "Disabling additional bitmap statistics" >&6; }
-else
-               if test "x${enable_bmap_stats}" = "xno"; 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 $? "Error --enable-bmap-stats-ops requires bmap-stats
-See \`config.log' for more details" "$LINENO" 5; }
-fi
+case $host_os in
+        darwin* | hpux* | linux* | osf* | solaris*)
+        ax_pthread_check_macro="_REENTRANT"
+        ;;
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling additional bitmap statistics" >&5
-$as_echo "Enabling additional bitmap statistics" >&6; }
-       $as_echo "#define ENABLE_BMAP_STATS_OPS 1" >>confdefs.h
+        aix*)
+        ax_pthread_check_macro="_THREAD_SAFE"
+        ;;
 
+        *)
+        ax_pthread_check_macro="--"
+        ;;
+esac
+if test "x$ax_pthread_check_macro" = "x--"; then :
+  ax_pthread_check_cond=0
+else
+  ax_pthread_check_cond="!defined($ax_pthread_check_macro)"
 fi
 
+# Are we compiling with Clang?
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5
+$as_echo_n "checking whether $CC is Clang... " >&6; }
+if ${ax_cv_PTHREAD_CLANG+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling additional bitmap statistics by default" >&5
-$as_echo "Disabling additional bitmap statistics by default" >&6; }
+  ax_cv_PTHREAD_CLANG=no
+     # Note that Autoconf sets GCC=yes for Clang as well as GCC
+     if test "x$GCC" = "xyes"; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
+#            if defined(__clang__) && defined(__llvm__)
+             AX_PTHREAD_CC_IS_CLANG
+#            endif
 
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then :
+  ax_cv_PTHREAD_CLANG=yes
 fi
+rm -f conftest*
 
-MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
-
-GETTEXT_PACKAGE=e2fsprogs
-PACKAGE=e2fsprogs
-VERSION="$E2FSPROGS_VERSION"
-VERSION=0.14.1
+     fi
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG" >&6; }
+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
+
+ax_pthread_clang_warning=no
+
+# Clang needs special handling, because older versions handle the -pthread
+# option in a rather... idiosyncratic way
+
+if test "x$ax_pthread_clang" = "xyes"; then
+
+        # Clang takes -pthread; it has never supported any other flag
+
+        # (Note 1: This will need to be revisited if a system that Clang
+        # supports has POSIX threads in a separate library.  This tends not
+        # to be the way of modern systems, but it's conceivable.)
+
+        # (Note 2: On some systems, notably Darwin, -pthread is not needed
+        # to get POSIX threads support; the API is always present and
+        # active.  We could reasonably leave PTHREAD_CFLAGS empty.  But
+        # -pthread does define _REENTRANT, and while the Darwin headers
+        # ignore this macro, third-party headers might not.)
+
+        PTHREAD_CFLAGS="-pthread"
+        PTHREAD_LIBS=
+
+        ax_pthread_ok=yes
+
+        # However, older versions of Clang make a point of warning the user
+        # that, in an invocation where only linking and no compilation is
+        # taking place, the -pthread option has no effect ("argument unused
+        # during compilation").  They expect -pthread to be passed in only
+        # when source code is being compiled.
+        #
+        # Problem is, this is at odds with the way Automake and most other
+        # C build frameworks function, which is that the same flags used in
+        # compilation (CFLAGS) are also used in linking.  Many systems
+        # supported by AX_PTHREAD require exactly this for POSIX threads
+        # support, and in fact it is often not straightforward to specify a
+        # flag that is used only in the compilation phase and not in
+        # linking.  Such a scenario is extremely rare in practice.
+        #
+        # Even though use of the -pthread flag in linking would only print
+        # a warning, this can be a nuisance for well-run software projects
+        # that build with -Werror.  So if the active version of Clang has
+        # this misfeature, we search for an option to squash it.
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5
+$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; }
+if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+             # Create an alternate version of $ac_link that compiles and
+             # links in two steps (.c -> .o, .o -> exe) instead of one
+             # (.c -> exe), because the warning occurs only in the second
+             # step
+             ax_pthread_save_ac_link="$ac_link"
+             ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
+             ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
+             ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
+             ax_pthread_save_CFLAGS="$CFLAGS"
+             for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
+                if test "x$ax_pthread_try" = "xunknown"; then :
+  break
+fi
+                CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
+                ac_link="$ax_pthread_save_ac_link"
+                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(void){return 0;}
 _ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_link="$ax_pthread_2step_ac_link"
+                     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+             done
+             ac_link="$ax_pthread_save_ac_link"
+             CFLAGS="$ax_pthread_save_CFLAGS"
+             if test "x$ax_pthread_try" = "x"; then :
+  ax_pthread_try=no
+fi
+             ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
 
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; }
 
+        case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
+                no | unknown) ;;
+                *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
+        esac
 
+fi # $ax_pthread_clang = yes
 
+if test "x$ax_pthread_ok" = "xno"; then
+for ax_pthread_try_flag in $ax_pthread_flags; do
 
+        case $ax_pthread_try_flag in
+                none)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
+$as_echo_n "checking whether pthreads work without any flags... " >&6; }
+                ;;
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$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 eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+                -mt,pthread)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5
+$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; }
+                PTHREAD_CFLAGS="-mt"
+                PTHREAD_LIBS="-lpthread"
+                ;;
+
+                -*)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5
+$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; }
+                PTHREAD_CFLAGS="$ax_pthread_try_flag"
+                ;;
+
+                pthread-config)
+                # Extract the first word of "pthread-config", so it can be a program name with args.
+set dummy pthread-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 ${ac_cv_prog_ax_pthread_config+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
-       @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# 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;;
-  *)
-    eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  SET_MAKE=
+  if test -n "$ax_pthread_config"; then
+  ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $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 ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-       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.
-           :
-         elif test $ac_prog = install &&
-           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-           # program-specific install script used by HP pwplus--don't use.
-           :
-         else
-           rm -rf conftest.one conftest.two conftest.dir
-           echo one > conftest.one
-           echo two > conftest.two
-           mkdir conftest.dir
-           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-             test -s conftest.one && test -s conftest.two &&
-             test -s conftest.dir/conftest.one &&
-             test -s conftest.dir/conftest.two
-           then
-             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-             break 3
-           fi
-         fi
-       fi
-      done
-    done
-    ;;
-esac
-
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ax_pthread_config="yes"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
   done
 IFS=$as_save_IFS
 
-rm -rf conftest.one conftest.two conftest.dir
-
+  test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
 fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+ax_pthread_config=$ac_cv_prog_ax_pthread_config
+if test -n "$ax_pthread_config"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
+$as_echo "$ax_pthread_config" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+                if test "x$ax_pthread_config" = "xno"; then :
+  continue
+fi
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
-if test -z "$MKDIR_P"; then
-  if ${ac_cv_path_mkdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in mkdir gmkdir; do
-        for ac_exec_ext in '' $ac_executable_extensions; do
-          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
-          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
-            'mkdir (GNU coreutils) '* | \
-            'mkdir (coreutils) '* | \
-            'mkdir (fileutils) '4.1*)
-              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
-              break 3;;
-          esac
-        done
-       done
-  done
-IFS=$as_save_IFS
+                *)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5
+$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; }
+                PTHREAD_LIBS="-l$ax_pthread_try_flag"
+                ;;
+        esac
 
-fi
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
 
-  test -d ./--version && rmdir ./--version
-  if test "${ac_cv_path_mkdir+set}" = set; then
-    MKDIR_P="$ac_cv_path_mkdir -p"
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for MKDIR_P within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    MKDIR_P="$ac_install_sh -d"
-  fi
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+#                       if $ax_pthread_check_cond
+#                        error "$ax_pthread_check_macro must be defined"
+#                       endif
+                        static void routine(void *a) { a = 0; }
+                        static void *start_routine(void *a) { return a; }
+int
+main ()
+{
+pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
-     for ac_i in 1 2 3 4 5 6 7; do
-       ac_script="$ac_script$as_nl$ac_script"
-     done
-     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
-     { ac_script=; unset ac_script;}
-     if test -z "$SED"; then
-  ac_path_SED_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_SED" || continue
-# Check for GNU ac_path_SED and select it if it is found.
-  # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
-*GNU*)
-  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
-    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_SED_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_SED="$ac_path_SED"
-      ac_path_SED_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
 
-      $ac_path_SED_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_SED"; then
-    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
-  fi
-else
-  ac_cv_path_SED=$SED
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test "x$ax_pthread_ok" = "xyes"; then :
+  break
 fi
 
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
- SED="$ac_cv_path_SED"
-  rm -f conftest.sed
 
+# Various other checks:
+if test "x$ax_pthread_ok" = "xyes"; then
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
-$as_echo_n "checking whether NLS is requested... " >&6; }
-    # Check whether --enable-nls was given.
-if test "${enable_nls+set}" = set; then :
-  enableval=$enable_nls; USE_NLS=$enableval
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
+$as_echo_n "checking for joinable pthread attribute... " >&6; }
+if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  USE_NLS=yes
+  ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+             for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+                 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+int attr = $ax_pthread_attr; return attr /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+             done
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
-$as_echo "$USE_NLS" >&6; }
-
-
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5
+$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; }
+        if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
+               test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
+               test "x$ax_pthread_joinable_attr_defined" != "xyes"; then :
 
+cat >>confdefs.h <<_ACEOF
+#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR
+_ACEOF
 
-      GETTEXT_MACRO_VERSION=0.18
+               ax_pthread_joinable_attr_defined=yes
 
+fi
 
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5
+$as_echo_n "checking whether more special flags are required for pthreads... " >&6; }
+if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_SPECIAL_FLAGS=no
+             case $host_os in
+             solaris*)
+             ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
+             ;;
+             esac
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5
+$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; }
+        if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
+               test "x$ax_pthread_special_flags_added" != "xyes"; then :
+  PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
+               ax_pthread_special_flags_added=yes
+fi
 
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
-  # contains only /bin. Note that ksh looks also at the FPATH variable,
-  # so we have to set that as well for the test.
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
-    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
-           || PATH_SEPARATOR=';'
-       }
-fi
-
-# Find out how to test for executable files. Don't use a zero-byte file,
-# as systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
-  ac_executable_p="test -x"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
+$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
+if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_executable_p="test -f"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+int i = PTHREAD_PRIO_INHERIT;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_PTHREAD_PRIO_INHERIT=yes
+else
+  ax_cv_PTHREAD_PRIO_INHERIT=no
 fi
-rm -f conf$$.file
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
-# Extract the first word of "msgfmt", so it can be a program name with args.
-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 ${ac_cv_path_MSGFMT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case "$MSGFMT" in
-  [\\/]* | ?:[\\/]*)
-    ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
-    ;;
-  *)
-    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH; do
-      IFS="$ac_save_IFS"
-      test -z "$ac_dir" && ac_dir=.
-      for ac_exec_ext in '' $ac_executable_extensions; do
-        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
-          echo "$as_me: trying $ac_dir/$ac_word..." >&5
-          if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
-     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
-            ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
-            break 2
-          fi
-        fi
-      done
-    done
-    IFS="$ac_save_IFS"
-  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
-    ;;
-esac
 fi
-MSGFMT="$ac_cv_path_MSGFMT"
-if test "$MSGFMT" != ":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
-$as_echo "$MSGFMT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
+$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
+        if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
+               test "x$ax_pthread_prio_inherit_defined" != "xyes"; then :
+
+$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
+
+               ax_pthread_prio_inherit_defined=yes
+
 fi
 
-  # Extract the first word of "gmsgfmt", so it can be a program name with args.
-set dummy gmsgfmt; ac_word=$2
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+
+        # More AIX lossage: compile with *_r variant
+        if test "x$GCC" != "xyes"; then
+            case $host_os in
+                aix*)
+                case "x/$CC" in #(
+  x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
+    #handle absolute path differently from PATH based program lookup
+                     case "x$CC" in #(
+  x/*) :
+    if as_fn_executable_p ${CC}_r; then :
+  PTHREAD_CC="${CC}_r"
+fi ;; #(
+  *) :
+    for ac_prog in ${CC}_r
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+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 ${ac_cv_path_GMSGFMT+:} false; then :
+if ${ac_cv_prog_PTHREAD_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $GMSGFMT in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$PTHREAD_CC"; then
+  ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_prog_PTHREAD_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6389,1187 +6631,676 @@ done
   done
 IFS=$as_save_IFS
 
-  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
-  ;;
-esac
 fi
-GMSGFMT=$ac_cv_path_GMSGFMT
-if test -n "$GMSGFMT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
-$as_echo "$GMSGFMT" >&6; }
+fi
+PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
+if test -n "$PTHREAD_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
+$as_echo "$PTHREAD_CC" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
+  test -n "$PTHREAD_CC" && break
+done
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+ ;;
+esac ;; #(
+  *) :
+     ;;
+esac
+                ;;
+            esac
+        fi
+fi
 
-    case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
-    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
-    *) MSGFMT_015=$MSGFMT ;;
-  esac
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
 
-  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
-    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
-    *) GMSGFMT_015=$GMSGFMT ;;
-  esac
 
 
 
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
-  # contains only /bin. Note that ksh looks also at the FPATH variable,
-  # so we have to set that as well for the test.
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
-    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
-           || PATH_SEPARATOR=';'
-       }
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test "x$ax_pthread_ok" = "xyes"; then
+
+$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
+
+        :
+else
+        ax_pthread_ok=no
+
 fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
 
-# Find out how to test for executable files. Don't use a zero-byte file,
-# as systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
-  ac_executable_p="test -x"
 else
-  ac_executable_p="test -f"
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+
 fi
-rm -f conf$$.file
 
-# Extract the first word of "xgettext", so it can be a program name with args.
-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 ${ac_cv_path_XGETTEXT+:} false; then :
-  $as_echo_n "(cached) " >&6
+# Check whether --enable-uuidd was given.
+if test "${enable_uuidd+set}" = set; then :
+  enableval=$enable_uuidd; if test "$enableval" = "no"
+then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not building uuidd" >&5
+$as_echo "Not building uuidd" >&6; }
+       UUIDD_CMT="#"
 else
-  case "$XGETTEXT" in
-  [\\/]* | ?:[\\/]*)
-    ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
-    ;;
-  *)
-    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH; do
-      IFS="$ac_save_IFS"
-      test -z "$ac_dir" && ac_dir=.
-      for ac_exec_ext in '' $ac_executable_extensions; do
-        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
-          echo "$as_me: trying $ac_dir/$ac_word..." >&5
-          if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
-     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
-            ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
-            break 2
-          fi
-        fi
-      done
-    done
-    IFS="$ac_save_IFS"
-  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
-    ;;
-esac
+       $as_echo "#define USE_UUIDD 1" >>confdefs.h
+
+       UUIDD_CMT=""
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Building uuidd" >&5
+$as_echo "Building uuidd" >&6; }
 fi
-XGETTEXT="$ac_cv_path_XGETTEXT"
-if test "$XGETTEXT" != ":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
-$as_echo "$XGETTEXT" >&6; }
+
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  $as_echo "#define USE_UUIDD 1" >>confdefs.h
+
+if test -z "$UUID_CMT"
+then
+       UUIDD_CMT=""
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Building uuidd by default" >&5
+$as_echo "Building uuidd by default" >&6; }
+else
+       UUIDD_CMT="#"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling uuidd by default" >&5
+$as_echo "Disabling uuidd by default" >&6; }
 fi
 
-    rm -f messages.po
+fi
 
-    case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
-    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
-    *) XGETTEXT_015=$XGETTEXT ;;
-  esac
 
 
+# Check whether --enable-mmp was given.
+if test "${enable_mmp+set}" = set; then :
+  enableval=$enable_mmp; if test "$enableval" = "no"
+then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling mmp support" >&5
+$as_echo "Disabling mmp support" >&6; }
+else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling mmp support" >&5
+$as_echo "Enabling mmp support" >&6; }
+       $as_echo "#define CONFIG_MMP 1" >>confdefs.h
 
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
-  # contains only /bin. Note that ksh looks also at the FPATH variable,
-  # so we have to set that as well for the test.
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
-    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
-           || PATH_SEPARATOR=';'
-       }
 fi
 
-# Find out how to test for executable files. Don't use a zero-byte file,
-# as systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
-  ac_executable_p="test -x"
 else
-  ac_executable_p="test -f"
-fi
-rm -f conf$$.file
-
-# Extract the first word of "msgmerge", so it can be a program name with args.
-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 ${ac_cv_path_MSGMERGE+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case "$MSGMERGE" in
-  [\\/]* | ?:[\\/]*)
-    ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
-    ;;
-  *)
-    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH; do
-      IFS="$ac_save_IFS"
-      test -z "$ac_dir" && ac_dir=.
-      for ac_exec_ext in '' $ac_executable_extensions; do
-        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
-          echo "$as_me: trying $ac_dir/$ac_word..." >&5
-          if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
-            ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
-            break 2
-          fi
-        fi
-      done
-    done
-    IFS="$ac_save_IFS"
-  test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
-    ;;
-esac
-fi
-MSGMERGE="$ac_cv_path_MSGMERGE"
-if test "$MSGMERGE" != ":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
-$as_echo "$MSGMERGE" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling mmp support by default" >&5
+$as_echo "Enabling mmp support by default" >&6; }
+$as_echo "#define CONFIG_MMP 1" >>confdefs.h
+
+
 fi
 
 
-        test -n "$localedir" || localedir='${datadir}/locale'
-
-
-    test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
-
-
-  ac_config_commands="$ac_config_commands po-directories"
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2 or newer" >&5
-$as_echo_n "checking whether we are using the GNU C Library 2 or newer... " >&6; }
-if ${ac_cv_gnu_library_2+:} false; then :
-  $as_echo_n "(cached) " >&6
+# Check whether --enable-tdb was given.
+if test "${enable_tdb+set}" = set; then :
+  enableval=$enable_tdb; if test "$enableval" = "no"
+then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling tdb support" >&5
+$as_echo "Disabling tdb support" >&6; }
+       TDB_CMT="#"
+       TDB_MAN_COMMENT='.\"'
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ >= 2) && !defined __UCLIBC__
-  Lucky GNU user
- #endif
-#endif
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling tdb support" >&5
+$as_echo "Enabling tdb support" >&6; }
+       $as_echo "#define CONFIG_TDB 1" >>confdefs.h
 
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Lucky GNU user" >/dev/null 2>&1; then :
-  ac_cv_gnu_library_2=yes
-else
-  ac_cv_gnu_library_2=no
+       TDB_CMT=""
+       TDB_MAN_COMMENT=""
 fi
-rm -f conftest*
 
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling mmp support by default" >&5
+$as_echo "Enabling mmp support by default" >&6; }
+$as_echo "#define CONFIG_TDB 1" >>confdefs.h
 
+TDB_CMT=""
+TDB_MAN_COMMENT=""
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2" >&5
-$as_echo "$ac_cv_gnu_library_2" >&6; }
 
-    GLIBC2="$ac_cv_gnu_library_2"
 
 
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-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 ${ac_cv_prog_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  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
-  fi
-done
-  done
-IFS=$as_save_IFS
 
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+# Check whether --enable-bmap-stats was given.
+if test "${enable_bmap_stats+set}" = set; then :
+  enableval=$enable_bmap_stats; if test "$enableval" = "no"
+then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling bitmap statistics support" >&5
+$as_echo "Disabling bitmap statistics support" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling bitmap statistics support" >&5
+$as_echo "Enabling bitmap statistics support" >&6; }
+       $as_echo "#define ENABLE_BMAP_STATS 1" >>confdefs.h
 
 fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-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 ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  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
-  fi
-done
-  done
-IFS=$as_save_IFS
 
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling bitmap statistics support by default" >&5
+$as_echo "Enabling bitmap statistics support by default" >&6; }
+$as_echo "#define ENABLE_BMAP_STATS 1" >>confdefs.h
 
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
 
+fi
 
 
-  CFLAG_VISIBILITY=
-  HAVE_VISIBILITY=0
-  if test -n "$GCC"; then
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5
-$as_echo_n "checking whether the -Werror option is usable... " >&6; }
-    if ${gl_cv_cc_vis_werror+:} false; then :
-  $as_echo_n "(cached) " >&6
+# Check whether --enable-bmap-stats-ops was given.
+if test "${enable_bmap_stats_ops+set}" = set; then :
+  enableval=$enable_bmap_stats_ops; if test "$enableval" = "no"
+then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling additional bitmap statistics" >&5
+$as_echo "Disabling additional bitmap statistics" >&6; }
 else
+               if test "x${enable_bmap_stats}" = "xno"; 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 $? "Error --enable-bmap-stats-ops requires bmap-stats
+See \`config.log' for more details" "$LINENO" 5; }
+fi
 
-      gl_save_CFLAGS="$CFLAGS"
-      CFLAGS="$CFLAGS -Werror"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling additional bitmap statistics" >&5
+$as_echo "Enabling additional bitmap statistics" >&6; }
+       $as_echo "#define ENABLE_BMAP_STATS_OPS 1" >>confdefs.h
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_cc_vis_werror=yes
-else
-  gl_cv_cc_vis_werror=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS="$gl_save_CFLAGS"
 fi
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5
-$as_echo "$gl_cv_cc_vis_werror" >&6; }
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5
-$as_echo_n "checking for simple visibility declarations... " >&6; }
-    if ${gl_cv_cc_visibility+:} false; then :
-  $as_echo_n "(cached) " >&6
 else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling additional bitmap statistics by default" >&5
+$as_echo "Disabling additional bitmap statistics by default" >&6; }
 
-      gl_save_CFLAGS="$CFLAGS"
-      CFLAGS="$CFLAGS -fvisibility=hidden"
-                                    if test $gl_cv_cc_vis_werror = yes; then
-        CFLAGS="$CFLAGS -Werror"
-      fi
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-extern __attribute__((__visibility__("hidden"))) int hiddenvar;
-             extern __attribute__((__visibility__("default"))) int exportedvar;
-             extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
-             extern __attribute__((__visibility__("default"))) int exportedfunc (void);
-             void dummyfunc (void) {}
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_cc_visibility=yes
-else
-  gl_cv_cc_visibility=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS="$gl_save_CFLAGS"
 fi
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5
-$as_echo "$gl_cv_cc_visibility" >&6; }
-    if test $gl_cv_cc_visibility = yes; then
-      CFLAG_VISIBILITY="-fvisibility=hidden"
-      HAVE_VISIBILITY=1
-    fi
-  fi
-
+MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
 
+GETTEXT_PACKAGE=e2fsprogs
+PACKAGE=e2fsprogs
+VERSION="$E2FSPROGS_VERSION"
+VERSION=0.14.1
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_VISIBILITY $HAVE_VISIBILITY
-_ACEOF
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
-$as_echo_n "checking for inline... " >&6; }
-if ${ac_cv_c_inline+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_c_inline=no
-for ac_kw in inline __inline__ __inline; do
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef __cplusplus
-typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
-#endif
-
+#define PACKAGE "$PACKAGE"
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_inline=$ac_kw
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  test "$ac_cv_c_inline" != no && break
-done
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
-$as_echo "$ac_cv_c_inline" >&6; }
 
-case $ac_cv_c_inline in
-  inline | yes) ;;
-  *)
-    case $ac_cv_c_inline in
-      no) ac_val=;;
-      *) ac_val=$ac_cv_c_inline;;
-    esac
-    cat >>confdefs.h <<_ACEOF
-#ifndef __cplusplus
-#define inline $ac_val
-#endif
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
 _ACEOF
-    ;;
-esac
-
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
 
-else
 
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
 
-fi
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5
-$as_echo_n "checking for stdint.h... " >&6; }
-if ${gl_cv_header_stdint_h+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$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 eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-            #include <stdint.h>
-int
-main ()
-{
-uintmax_t i = (uintmax_t) -1; return !i;
-  ;
-  return 0;
-}
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_header_stdint_h=yes
-else
-  gl_cv_header_stdint_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# 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;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5
-$as_echo "$gl_cv_header_stdint_h" >&6; }
-  if test $gl_cv_header_stdint_h = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STDINT_H_WITH_UINTMAX 1
-_ACEOF
-
-  fi
-
-# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
-# 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 ${ac_cv_working_alloca_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <alloca.h>
-int
-main ()
-{
-char *p = (char *) alloca (2 * sizeof (int));
-                         if (p) return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_working_alloca_h=yes
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
 else
-  ac_cv_working_alloca_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
-$as_echo "$ac_cv_working_alloca_h" >&6; }
-if test $ac_cv_working_alloca_h = yes; then
-
-$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
-
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
-$as_echo_n "checking for alloca... " >&6; }
-if ${ac_cv_func_alloca_works+:} false; then :
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $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 ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-#else
-# ifdef _MSC_VER
-#  include <malloc.h>
-#  define alloca _alloca
-# else
-#  ifdef HAVE_ALLOCA_H
-#   include <alloca.h>
-#  else
-#   ifdef _AIX
- #pragma alloca
-#   else
-#    ifndef alloca /* predefined by HP cc +Olibcalls */
-void *alloca (size_t);
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-int
-main ()
-{
-char *p = (char *) alloca (1);
-                                   if (p) return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_func_alloca_works=yes
-else
-  ac_cv_func_alloca_works=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
-$as_echo "$ac_cv_func_alloca_works" >&6; }
-
-if test $ac_cv_func_alloca_works = yes; then
-
-$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
-
-else
-  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
-# that cause trouble.  Some versions do not even contain alloca or
-# contain a buggy version.  If you still want to use their alloca,
-# use ar to extract alloca.o from them instead of compiling alloca.c.
-
-ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
-
-$as_echo "#define C_ALLOCA 1" >>confdefs.h
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       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.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           rm -rf conftest.one conftest.two conftest.dir
+           echo one > conftest.one
+           echo two > conftest.two
+           mkdir conftest.dir
+           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+             test -s conftest.one && test -s conftest.two &&
+             test -s conftest.dir/conftest.one &&
+             test -s conftest.dir/conftest.two
+           then
+             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             break 3
+           fi
+         fi
+       fi
+      done
+    done
+    ;;
+esac
 
+  done
+IFS=$as_save_IFS
 
-{ $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 ${ac_cv_os_cray+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#if defined CRAY && ! defined CRAY2
-webecray
-#else
-wenotbecray
-#endif
+rm -rf conftest.one conftest.two conftest.dir
 
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "webecray" >/dev/null 2>&1; then :
-  ac_cv_os_cray=yes
-else
-  ac_cv_os_cray=no
 fi
-rm -f conftest*
-
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
-$as_echo "$ac_cv_os_cray" >&6; }
-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"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
 
-cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
-_ACEOF
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 
-    break
-fi
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
-  done
-fi
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-{ $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 ${ac_cv_c_stack_direction+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_c_stack_direction=0
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int
-find_stack_direction (int *addr, int depth)
-{
-  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;
-}
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
+  done
+IFS=$as_save_IFS
 
-int
-main (int argc, char **argv)
-{
-  return find_stack_direction (0, argc + !argv + 20) < 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_c_stack_direction=1
-else
-  ac_cv_c_stack_direction=-1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
-$as_echo "$ac_cv_c_stack_direction" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define STACK_DIRECTION $ac_cv_c_stack_direction
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+    # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then :
+  enableval=$enable_nls; USE_NLS=$enableval
+else
+  USE_NLS=yes
 fi
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
 
 
 
-  for ac_header in $ac_header_list
-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
-"
-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
-
-fi
-
-done
 
+      GETTEXT_MACRO_VERSION=0.20
 
 
 
 
-
-
-
-for ac_func in getpagesize
-do :
-  ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
-if test "x$ac_cv_func_getpagesize" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETPAGESIZE 1
-_ACEOF
-
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
-$as_echo_n "checking for working mmap... " >&6; }
-if ${ac_cv_func_mmap_fixed_mapped+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_mmap_fixed_mapped=no
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-/* malloc might have been renamed as rpl_malloc. */
-#undef malloc
-
-/* Thanks to Mike Haertel and Jim Avera for this test.
-   Here is a matrix of mmap possibilities:
-       mmap private not fixed
-       mmap private fixed at somewhere currently unmapped
-       mmap private fixed at somewhere already mapped
-       mmap shared not fixed
-       mmap shared fixed at somewhere currently unmapped
-       mmap shared fixed at somewhere already mapped
-   For private mappings, we should verify that changes cannot be read()
-   back from the file, nor mmap's back from the file at a different
-   address.  (There have been systems where private was not correctly
-   implemented like the infamous i386 svr4.0, and systems where the
-   VM page cache was not coherent with the file system buffer cache
-   like early versions of FreeBSD and possibly contemporary NetBSD.)
-   For shared mappings, we should conversely verify that changes get
-   propagated back to all the places they're supposed to be.
-
-   Grep wants private fixed already mapped.
-   The main things grep needs to know about mmap are:
-   * does it exist and is it safe to write into the mmap'd area
-   * how to use it (BSD variants)  */
-
-#include <fcntl.h>
-#include <sys/mman.h>
-
-#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
-char *malloc ();
-#endif
-
-/* This mess was copied from the GNU getpagesize.h.  */
-#ifndef HAVE_GETPAGESIZE
-# ifdef _SC_PAGESIZE
-#  define getpagesize() sysconf(_SC_PAGESIZE)
-# else /* no _SC_PAGESIZE */
-#  ifdef HAVE_SYS_PARAM_H
-#   include <sys/param.h>
-#   ifdef EXEC_PAGESIZE
-#    define getpagesize() EXEC_PAGESIZE
-#   else /* no EXEC_PAGESIZE */
-#    ifdef NBPG
-#     define getpagesize() NBPG * CLSIZE
-#     ifndef CLSIZE
-#      define CLSIZE 1
-#     endif /* no CLSIZE */
-#    else /* no NBPG */
-#     ifdef NBPC
-#      define getpagesize() NBPC
-#     else /* no NBPC */
-#      ifdef PAGESIZE
-#       define getpagesize() PAGESIZE
-#      endif /* PAGESIZE */
-#     endif /* no NBPC */
-#    endif /* no NBPG */
-#   endif /* no EXEC_PAGESIZE */
-#  else /* no HAVE_SYS_PARAM_H */
-#   define getpagesize() 8192  /* punt totally */
-#  endif /* no HAVE_SYS_PARAM_H */
-# endif /* no _SC_PAGESIZE */
-
-#endif /* no HAVE_GETPAGESIZE */
-
-int
-main ()
-{
-  char *data, *data2, *data3;
-  const char *cdata2;
-  int i, pagesize;
-  int fd, fd2;
-
-  pagesize = getpagesize ();
 
-  /* First, make a file with some known garbage in it. */
-  data = (char *) malloc (pagesize);
-  if (!data)
-    return 1;
-  for (i = 0; i < pagesize; ++i)
-    *(data + i) = rand ();
-  umask (0);
-  fd = creat ("conftest.mmap", 0600);
-  if (fd < 0)
-    return 2;
-  if (write (fd, data, pagesize) != pagesize)
-    return 3;
-  close (fd);
-
-  /* Next, check that the tail of a page is zero-filled.  File must have
-     non-zero length, otherwise we risk SIGBUS for entire page.  */
-  fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600);
-  if (fd2 < 0)
-    return 4;
-  cdata2 = "";
-  if (write (fd2, cdata2, 1) != 1)
-    return 5;
-  data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L);
-  if (data2 == MAP_FAILED)
-    return 6;
-  for (i = 0; i < pagesize; ++i)
-    if (*(data2 + i))
-      return 7;
-  close (fd2);
-  if (munmap (data2, pagesize))
-    return 8;
-
-  /* Next, try to mmap the file at a fixed address which already has
-     something else allocated at it.  If we can, also make sure that
-     we see the same garbage.  */
-  fd = open ("conftest.mmap", O_RDWR);
-  if (fd < 0)
-    return 9;
-  if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
-                    MAP_PRIVATE | MAP_FIXED, fd, 0L))
-    return 10;
-  for (i = 0; i < pagesize; ++i)
-    if (*(data + i) != *(data2 + i))
-      return 11;
-
-  /* Finally, make sure that changes to the mapped area do not
-     percolate back to the file as seen by read().  (This is a bug on
-     some variants of i386 svr4.0.)  */
-  for (i = 0; i < pagesize; ++i)
-    *(data2 + i) = *(data2 + i) + 1;
-  data3 = (char *) malloc (pagesize);
-  if (!data3)
-    return 12;
-  if (read (fd, data3, pagesize) != pagesize)
-    return 13;
-  for (i = 0; i < pagesize; ++i)
-    if (*(data + i) != *(data3 + i))
-      return 14;
-  close (fd);
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_mmap_fixed_mapped=yes
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
 else
-  ac_cv_func_mmap_fixed_mapped=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+  ac_executable_p="test -f"
 fi
+rm -f conf$$.file
 
+# Extract the first word of "msgfmt", so it can be a program name with args.
+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 ${ac_cv_path_MSGFMT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case "$MSGFMT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+    ;;
+esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
-$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
-if test $ac_cv_func_mmap_fixed_mapped = yes; then
-
-$as_echo "#define HAVE_MMAP 1" >>confdefs.h
-
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-rm -f conftest.mmap conftest.txt
-
 
-
-  { $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 ${gt_cv_int_divbyzero_sigfpe+:} false; then :
+  # Extract the first word of "gmsgfmt", so it can be a program name with args.
+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 ${ac_cv_path_GMSGFMT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
+  case $GMSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  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
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-      gt_cv_int_divbyzero_sigfpe=
-      case "$host_os" in
-        macos* | darwin[6-9]* | darwin[1-9][0-9]*)
-          # On Mac OS X 10.2 or newer, just assume the same as when cross-
-          # compiling. If we were to perform the real test, 1 Crash Report
-          # dialog window would pop up.
-          case "$host_cpu" in
-            i[34567]86 | x86_64)
-              gt_cv_int_divbyzero_sigfpe="guessing yes" ;;
-          esac
-          ;;
-      esac
-      if test -z "$gt_cv_int_divbyzero_sigfpe"; then
-        if test "$cross_compiling" = yes; then :
-
-            # Guess based on the CPU.
-            case "$host_cpu" in
-              alpha* | i[34567]86 | x86_64 | m68k | s390*)
-                gt_cv_int_divbyzero_sigfpe="guessing yes";;
-              *)
-                gt_cv_int_divbyzero_sigfpe="guessing no";;
-            esac
-
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-#include <stdlib.h>
-#include <signal.h>
 
-static void
-sigfpe_handler (int sig)
-{
-  /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
-  exit (sig != SIGFPE);
-}
 
-int x = 1;
-int y = 0;
-int z;
-int nan;
+    case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
 
-int main ()
-{
-  signal (SIGFPE, sigfpe_handler);
-/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
-#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
-  signal (SIGTRAP, sigfpe_handler);
-#endif
-/* Linux/SPARC yields signal SIGILL.  */
-#if defined (__sparc__) && defined (__linux__)
-  signal (SIGILL, sigfpe_handler);
-#endif
 
-  z = x / y;
-  nan = y / y;
-  exit (2);
-}
 
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gt_cv_int_divbyzero_sigfpe=yes
-else
-  gt_cv_int_divbyzero_sigfpe=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
 
-      fi
-
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_int_divbyzero_sigfpe" >&5
-$as_echo "$gt_cv_int_divbyzero_sigfpe" >&6; }
-  case "$gt_cv_int_divbyzero_sigfpe" in
-    *yes) value=1;;
-    *) value=0;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define INTDIV0_RAISES_SIGFPE $value
-_ACEOF
-
-
+rm -f conf$$.file
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5
-$as_echo_n "checking for inttypes.h... " >&6; }
-if ${gl_cv_header_inttypes_h+:} false; then :
+# Extract the first word of "xgettext", so it can be a program name with args.
+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 ${ac_cv_path_XGETTEXT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <sys/types.h>
-#include <inttypes.h>
-
-int
-main ()
-{
-uintmax_t i = (uintmax_t) -1; return !i;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_header_inttypes_h=yes
-else
-  gl_cv_header_inttypes_h=no
+  case "$XGETTEXT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+    ;;
+esac
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5
-$as_echo "$gl_cv_header_inttypes_h" >&6; }
-  if test $gl_cv_header_inttypes_h = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_INTTYPES_H_WITH_UINTMAX 1
-_ACEOF
 
-  fi
+    rm -f messages.po
 
+    case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
-$as_echo_n "checking for unsigned long long int... " >&6; }
-if ${ac_cv_type_unsigned_long_long_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_type_unsigned_long_long_int=yes
-     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-  /* For now, do not test the preprocessor; as of 2007 there are too many
-         implementations with broken preprocessors.  Perhaps this can
-         be revisited in 2012.  In the meantime, code should not expect
-         #if to work with literals wider than 32 bits.  */
-      /* Test literals.  */
-      long long int ll = 9223372036854775807ll;
-      long long int nll = -9223372036854775807LL;
-      unsigned long long int ull = 18446744073709551615ULL;
-      /* Test constant expressions.   */
-      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                     ? 1 : -1)];
-      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                     ? 1 : -1)];
-      int i = 63;
-int
-main ()
-{
-/* Test availability of runtime routines for shift and division.  */
-      long long int llmax = 9223372036854775807ll;
-      unsigned long long int ullmax = 18446744073709551615ull;
-      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-              | (llmax / ll) | (llmax % ll)
-              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-              | (ullmax / ull) | (ullmax % ull));
-  ;
-  return 0;
-}
 
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-else
-  ac_cv_type_unsigned_long_long_int=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     fi
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
-$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-
-$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
-
-  fi
-
-
-
-
-  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
-
-    test $ac_cv_type_unsigned_long_long_int = yes \
-      && ac_type='unsigned long long' \
-      || ac_type='unsigned long'
-
-cat >>confdefs.h <<_ACEOF
-#define uintmax_t $ac_type
-_ACEOF
-
-  else
-
-$as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h
-
-  fi
-
-
-  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" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_INTTYPES_H 1
-_ACEOF
 
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
 fi
+rm -f conf$$.file
 
-done
-
-  if test $ac_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 ${gt_cv_inttypes_pri_broken+:} false; then :
+# Extract the first word of "msgmerge", so it can be a program name with args.
+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 ${ac_cv_path_MSGMERGE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <inttypes.h>
-#ifdef PRId32
-char *p = PRId32;
-#endif
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_inttypes_pri_broken=no
-else
-  gt_cv_inttypes_pri_broken=yes
+  case "$MSGMERGE" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
+            ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+    ;;
+esac
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5
-$as_echo "$gt_cv_inttypes_pri_broken" >&6; }
-  fi
-  if test "$gt_cv_inttypes_pri_broken" = yes; then
 
-cat >>confdefs.h <<_ACEOF
-#define PRI_MACROS_BROKEN 1
-_ACEOF
 
-    PRI_MACROS_BROKEN=1
+    if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then
+    MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt'
   else
-    PRI_MACROS_BROKEN=0
+        if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then
+      MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet'
+    else
+                        MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet'
+    fi
   fi
 
 
+    test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
 
 
-
-
-
-  # Check whether --enable-threads was given.
-if test "${enable_threads+set}" = set; then :
-  enableval=$enable_threads; gl_use_threads=$enableval
-else
-  if test -n "$gl_use_threads_default"; then
-       gl_use_threads="$gl_use_threads_default"
-     else
-       case "$host_os" in
-                                                               osf*) gl_use_threads=no ;;
-         cygwin*)
-               case `uname -r` in
-                 1.[0-5].*) gl_use_threads=no ;;
-                 *)         gl_use_threads=yes ;;
-               esac
-               ;;
-         *)    gl_use_threads=yes ;;
-       esac
-     fi
-
-fi
-
-  if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
-    # For using <pthread.h>:
-    case "$host_os" in
-      osf*)
-        # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
-        # groks <pthread.h>. cc also understands the flag -pthread, but
-        # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
-        # 2. putting a flag into CPPFLAGS that has an effect on the linker
-        # causes the AC_LINK_IFELSE test below to succeed unexpectedly,
-        # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
-        CPPFLAGS="$CPPFLAGS -D_REENTRANT"
-        ;;
-    esac
-    # Some systems optimize for single-threaded programs by default, and
-    # need special flags to disable these optimizations. For example, the
-    # definition of 'errno' in <errno.h>.
-    case "$host_os" in
-      aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
-      solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
-    esac
-  fi
-
-
+  ac_config_commands="$ac_config_commands po-directories"
 
 
 
@@ -7610,38 +7341,12 @@ if test "${PATH_SEPARATOR+set}" != set; then
        }
 fi
 
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld" >&5
+$as_echo_n "checking for ld... " >&6; }
+elif test "$GCC" = yes; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
 $as_echo_n "checking for ld used by $CC... " >&6; }
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [\\/]* | ?:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
-      while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
-        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
 elif test "$with_gnu_ld" = yes; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
 $as_echo_n "checking for GNU ld... " >&6; }
@@ -7649,44 +7354,129 @@ 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 ${acl_cv_path_LD+:} false; then :
+if test -n "$LD"; then
+  # Let the user override the test with a path.
+  :
+else
+  if ${acl_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -z "$LD"; then
-  acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$acl_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      acl_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-        test "$with_gnu_ld" != no && break
-        ;;
-      *)
-        test "$with_gnu_ld" != yes && break
-        ;;
+
+    acl_cv_path_LD= # Final result of this test
+    ac_prog=ld # Program to search in $PATH
+    if test "$GCC" = yes; then
+      # Check if gcc -print-prog-name=ld gives a path.
+      case $host in
+        *-*-mingw*)
+          # gcc leaves a trailing carriage return which upsets mingw
+          acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+        *)
+          acl_output=`($CC -print-prog-name=ld) 2>&5` ;;
+      esac
+      case $acl_output in
+        # Accept absolute paths.
+        [\\/]* | ?:[\\/]*)
+          re_direlt='/[^/][^/]*/\.\./'
+          # Canonicalize the pathname of ld
+          acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'`
+          while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do
+            acl_output=`echo $acl_output | sed "s%$re_direlt%/%"`
+          done
+          # Got the pathname. No search in PATH is needed.
+          acl_cv_path_LD="$acl_output"
+          ac_prog=
+          ;;
+        "")
+          # If it fails, then pretend we aren't using GCC.
+          ;;
+        *)
+          # If it is relative, then search for the first ld in PATH.
+          with_gnu_ld=unknown
+          ;;
       esac
     fi
-  done
-  IFS="$acl_save_ifs"
+    if test -n "$ac_prog"; then
+      # Search for $ac_prog in $PATH.
+      acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+      for ac_dir in $PATH; do
+        IFS="$acl_save_ifs"
+        test -z "$ac_dir" && ac_dir=.
+        if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+          acl_cv_path_LD="$ac_dir/$ac_prog"
+          # Check to see if the program is GNU ld.  I'd rather use --version,
+          # but apparently some variants of GNU ld only accept -v.
+          # Break only if it was the GNU/non-GNU ld that we prefer.
+          case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
+            *GNU* | *'with BFD'*)
+              test "$with_gnu_ld" != no && break
+              ;;
+            *)
+              test "$with_gnu_ld" != yes && break
+              ;;
+          esac
+        fi
+      done
+      IFS="$acl_save_ifs"
+    fi
+    case $host in
+      *-*-aix*)
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __powerpc64__ || defined _ARCH_PPC64
+                int ok;
+               #else
+                error fail
+               #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # The compiler produces 64-bit code. Add option '-b64' so that the
+           # linker groks 64-bit object files.
+           case "$acl_cv_path_LD " in
+             *" -b64 "*) ;;
+             *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;;
+           esac
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        ;;
+      sparc64-*-netbsd*)
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __sparcv9 || defined __arch64__
+                int ok;
+               #else
+                error fail
+               #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
 else
-  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+  # The compiler produces 32-bit code. Add option '-m elf32_sparc'
+           # so that the linker groks 32-bit object files.
+           case "$acl_cv_path_LD " in
+             *" -m elf32_sparc "*) ;;
+             *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;;
+           esac
+
 fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        ;;
+    esac
+
 fi
 
-LD="$acl_cv_path_LD"
+  LD="$acl_cv_path_LD"
+fi
 if test -n "$LD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
+  as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 fi
-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 ${acl_cv_prog_gnu_ld+:} false; then :
 
 
 
-  acl_libdirstem=lib
-  acl_libdirstem2=
-  case "$host_os" in
-    solaris*)
-                                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
-$as_echo_n "checking for 64-bit host... " >&6; }
-if ${gl_cv_solaris_64bit+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5
+$as_echo_n "checking 32-bit host C ABI... " >&6; }
+if ${gl_cv_host_cpu_c_abi_32bit+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if test -n "$gl_cv_host_cpu_c_abi"; then
+       case "$gl_cv_host_cpu_c_abi" in
+         i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc)
+           gl_cv_host_cpu_c_abi_32bit=yes ;;
+         x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 )
+           gl_cv_host_cpu_c_abi_32bit=no ;;
+         *)
+           gl_cv_host_cpu_c_abi_32bit=unknown ;;
+       esac
+     else
+       case "$host_cpu" in
+
+         # CPUs that only support a 32-bit ABI.
+         arc \
+         | bfin \
+         | cris* \
+         | csky \
+         | epiphany \
+         | ft32 \
+         | h8300 \
+         | m68k \
+         | microblaze | microblazeel \
+         | nds32 | nds32le | nds32be \
+         | nios2 | nios2eb | nios2el \
+         | or1k* \
+         | or32 \
+         | sh | sh1234 | sh1234elb \
+         | tic6x \
+         | xtensa* )
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
+
+         # CPUs that only support a 64-bit ABI.
+         alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \
+         | mmix )
+           gl_cv_host_cpu_c_abi_32bit=no
+           ;;
+
+         i[34567]86 )
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
+
+         x86_64 )
+           # On x86_64 systems, the C compiler may be generating code in one of
+           # these ABIs:
+           # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
+           # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
+           #   with native Windows (mingw, MSVC).
+           # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
+           # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+#if (defined __x86_64__ || defined __amd64__ \
+                       || defined _M_X64 || defined _M_AMD64) \
+                      && !(defined __ILP32__ || defined _ILP32)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
 
-#ifdef _LP64
-sixtyfour bits
-#endif
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
+else
+  gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         arm* | aarch64 )
+           # Assume arm with EABI.
+           # On arm64 systems, the C compiler may be generating code in one of
+           # these ABIs:
+           # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
+           # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
+           # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
 
 _ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
-  gl_cv_solaris_64bit=yes
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
 else
-  gl_cv_solaris_64bit=no
+  gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f conftest*
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
 
+         hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
+           # On hppa, the C compiler may be generating 32-bit code or 64-bit
+           # code. In the latter case, it defines _LP64 and __LP64__.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __LP64__
+                   int ok;
+                  #else
+                   error fail
+                  #endif
 
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
+else
+  gl_cv_host_cpu_c_abi_32bit=yes
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
-$as_echo "$gl_cv_solaris_64bit" >&6; }
-      if test $gl_cv_solaris_64bit = yes; then
-        acl_libdirstem=lib/64
-        case "$host_cpu" in
-          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
-          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
-        esac
-      fi
-      ;;
-    *)
-      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
-      if test -n "$searchpath"; then
-        acl_save_IFS="${IFS=   }"; IFS=":"
-        for searchdir in $searchpath; do
-          if test -d "$searchdir"; then
-            case "$searchdir" in
-              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
-              */../ | */.. )
-                # Better ignore directories of this form. They are misleading.
-                ;;
-              *) searchdir=`cd "$searchdir" && pwd`
-                 case "$searchdir" in
-                   */lib64 ) acl_libdirstem=lib64 ;;
-                 esac ;;
-            esac
-          fi
-        done
-        IFS="$acl_save_IFS"
-      fi
-      ;;
-  esac
-  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
 
+         ia64* )
+           # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
+           # 32-bit code. In the latter case, it defines _ILP32.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef _ILP32
+                   int ok;
+                  #else
+                   error fail
+                  #endif
 
-  gl_threads_api=none
-  LIBTHREAD=
-  LTLIBTHREAD=
-  LIBMULTITHREAD=
-  LTLIBMULTITHREAD=
-  if test "$gl_use_threads" != no; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5
-$as_echo_n "checking whether imported symbols can be declared weak... " >&6; }
-if ${gl_cv_have_weak+:} false; then :
-  $as_echo_n "(cached) " >&6
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=yes
 else
-  gl_cv_have_weak=no
-              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  gl_cv_host_cpu_c_abi_32bit=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         mips* )
+           # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
+           # at 32.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-extern void xyzzy ();
-#pragma weak xyzzy
-int
-main ()
-{
-xyzzy();
-  ;
-  return 0;
-}
+#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  gl_cv_have_weak=maybe
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
+else
+  gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-       if test $gl_cv_have_weak = maybe; then
-                           if test "$cross_compiling" = yes; then :
-                          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         powerpc* )
+           # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
+           # No need to distinguish them here; the caller may distinguish
+           # them based on the OS.
+           # On powerpc64 systems, the C compiler may still be generating
+           # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
+           # be generating 64-bit code.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __ELF__
-               Extensible Linking Format
-               #endif
+#if defined __powerpc64__ || defined _ARCH_PPC64
+                   int ok;
+                  #else
+                   error fail
+                  #endif
 
 _ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Extensible Linking Format" >/dev/null 2>&1; then :
-  gl_cv_have_weak="guessing yes"
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
 else
-  gl_cv_have_weak="guessing no"
+  gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f conftest*
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
 
+         rs6000 )
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
 
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+         riscv32 | riscv64 )
+           # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
+           # Size of 'long' and 'void *':
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+#if defined __LP64__
+                    int ok;
+                  #else
+                    error fail
+                  #endif
 
-#include <stdio.h>
-#pragma weak fputs
-int main ()
-{
-  return (fputs == NULL);
-}
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_have_weak=yes
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
 else
-  gl_cv_have_weak=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+  gl_cv_host_cpu_c_abi_32bit=yes
 fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
 
-       fi
+         s390* )
+           # On s390x, the C compiler may be generating 64-bit (= s390x) code
+           # or 31-bit (= s390) code.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __LP64__ || defined __s390x__
+                    int ok;
+                  #else
+                    error fail
+                  #endif
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5
-$as_echo "$gl_cv_have_weak" >&6; }
-    if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
-      # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
-      # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY.
-      ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
-  gl_have_pthread_h=yes
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
 else
-  gl_have_pthread_h=no
+  gl_cv_host_cpu_c_abi_32bit=yes
 fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
 
-
-      if test "$gl_have_pthread_h" = yes; then
-        # Other possible tests:
-        #   -lpthreads (FSU threads, PCthreads)
-        #   -lgthreads
-        gl_have_pthread=
-        # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
-        # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
-        # the second one only in libpthread, and lock.c needs it.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <pthread.h>
-int
-main ()
-{
-pthread_mutex_lock((pthread_mutex_t*)0);
-               pthread_mutexattr_init((pthread_mutexattr_t*)0);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  gl_have_pthread=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-        # Test for libpthread by looking for pthread_kill. (Not pthread_self,
-        # since it is defined as a macro on OSF/1.)
-        if test -n "$gl_have_pthread"; then
-          # The program links fine without libpthread. But it may actually
-          # need to link with libpthread in order to create multiple threads.
-          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
-$as_echo_n "checking for pthread_kill in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_kill+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+         sparc | sparc64 )
+           # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
+           # C compiler still generates 32-bit code.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+#if defined __sparcv9 || defined __arch64__
+                   int ok;
+                  #else
+                   error fail
+                  #endif
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_kill ();
-int
-main ()
-{
-return pthread_kill ();
-  ;
-  return 0;
-}
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_pthread_pthread_kill=yes
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
 else
-  ac_cv_lib_pthread_pthread_kill=no
+  gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         *)
+           gl_cv_host_cpu_c_abi_32bit=unknown
+           ;;
+       esac
+     fi
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then :
-  LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
-             # On Solaris and HP-UX, most pthread functions exist also in libc.
-             # Therefore pthread_in_use() needs to actually try to create a
-             # thread: pthread_create from libc will fail, whereas
-             # pthread_create will actually create a thread.
-             case "$host_os" in
-               solaris* | hpux*)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5
+$as_echo "$gl_cv_host_cpu_c_abi_32bit" >&6; }
 
-$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
+  HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit"
 
-             esac
 
-fi
 
-        else
-          # Some library is needed. Try libpthread and libc_r.
-          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
-$as_echo_n "checking for pthread_kill in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_kill+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_kill ();
-int
-main ()
-{
-return pthread_kill ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_pthread_pthread_kill=yes
-else
-  ac_cv_lib_pthread_pthread_kill=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then :
-  gl_have_pthread=yes
-             LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread
-             LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
-fi
 
-          if test -z "$gl_have_pthread"; then
-            # For FreeBSD 4.
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5
-$as_echo_n "checking for pthread_kill in -lc_r... " >&6; }
-if ${ac_cv_lib_c_r_pthread_kill+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF binary format" >&5
+$as_echo_n "checking for ELF binary format... " >&6; }
+if ${gl_cv_elf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lc_r  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+#ifdef __ELF__
+        Extensible Linking Format
+        #endif
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_kill ();
-int
-main ()
-{
-return pthread_kill ();
-  ;
-  return 0;
-}
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_c_r_pthread_kill=yes
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Extensible Linking Format" >/dev/null 2>&1; then :
+  gl_cv_elf=yes
 else
-  ac_cv_lib_c_r_pthread_kill=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then :
-  gl_have_pthread=yes
-               LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r
-               LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r
+  gl_cv_elf=no
 fi
+rm -f conftest*
 
-          fi
-        fi
-        if test -n "$gl_have_pthread"; then
-          gl_threads_api=posix
-
-$as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h
-
-          if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
-            if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
-
-$as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h
-
-              LIBTHREAD=
-              LTLIBTHREAD=
-            fi
-          fi
-        fi
-      fi
-    fi
-    if test -z "$gl_have_pthread"; then
-      if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then
-        gl_have_solaristhread=
-        gl_save_LIBS="$LIBS"
-        LIBS="$LIBS -lthread"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <thread.h>
-#include <synch.h>
 
-int
-main ()
-{
-thr_self();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  gl_have_solaristhread=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-        LIBS="$gl_save_LIBS"
-        if test -n "$gl_have_solaristhread"; then
-          gl_threads_api=solaris
-          LIBTHREAD=-lthread
-          LTLIBTHREAD=-lthread
-          LIBMULTITHREAD="$LIBTHREAD"
-          LTLIBMULTITHREAD="$LTLIBTHREAD"
-
-$as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h
-
-          if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
-
-$as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h
-
-            LIBTHREAD=
-            LTLIBTHREAD=
-          fi
-        fi
-      fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_elf" >&5
+$as_echo "$gl_cv_elf" >&6; }
+  if test $gl_cv_elf; then
+    # Extract the ELF class of a file (5th byte) in decimal.
+    # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
+    if od -A x < /dev/null >/dev/null 2>/dev/null; then
+      # Use POSIX od.
+      func_elfclass ()
+      {
+        od -A n -t d1 -j 4 -N 1
+      }
+    else
+      # Use BSD hexdump.
+      func_elfclass ()
+      {
+        dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "'
+        echo
+      }
     fi
-    if test "$gl_use_threads" = pth; then
-      gl_save_CPPFLAGS="$CPPFLAGS"
+    case $HOST_CPU_C_ABI_32BIT in
+      yes)
+        # 32-bit ABI.
+        acl_is_expected_elfclass ()
+        {
+          test "`func_elfclass | sed -e 's/[   ]//g'`" = 1
+        }
+        ;;
+      no)
+        # 64-bit ABI.
+        acl_is_expected_elfclass ()
+        {
+          test "`func_elfclass | sed -e 's/[   ]//g'`" = 2
+        }
+        ;;
+      *)
+        # Unknown.
+        acl_is_expected_elfclass ()
+        {
+          :
+        }
+        ;;
+    esac
+  else
+    acl_is_expected_elfclass ()
+    {
+      :
+    }
+  fi
 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5
+$as_echo_n "checking for the common suffixes of directories in the library search path... " >&6; }
+if ${acl_cv_libdirstems+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            acl_libdirstem=lib
+     acl_libdirstem2=
+     acl_libdirstem3=
+     case "$host_os" in
+       solaris*)
+                                                      if test $HOST_CPU_C_ABI_32BIT = no; then
+           acl_libdirstem2=lib/64
+           case "$host_cpu" in
+             sparc*)        acl_libdirstem3=lib/sparcv9 ;;
+             i*86 | x86_64) acl_libdirstem3=lib/amd64 ;;
+           esac
+         fi
+         ;;
+       *)
+                                                                                 searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \
+                     | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+         if test $HOST_CPU_C_ABI_32BIT != no; then
+           # 32-bit or unknown ABI.
+           if test -d /usr/lib32; then
+             acl_libdirstem2=lib32
+           fi
+         fi
+         if test $HOST_CPU_C_ABI_32BIT != yes; then
+           # 64-bit or unknown ABI.
+           if test -d /usr/lib64; then
+             acl_libdirstem3=lib64
+           fi
+         fi
+         if test -n "$searchpath"; then
+           acl_save_IFS="${IFS=        }"; IFS=":"
+           for searchdir in $searchpath; do
+             if test -d "$searchdir"; then
+               case "$searchdir" in
+                 */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;;
+                 */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;;
+                 */../ | */.. )
+                   # Better ignore directories of this form. They are misleading.
+                   ;;
+                 *) searchdir=`cd "$searchdir" && pwd`
+                    case "$searchdir" in
+                      */lib32 ) acl_libdirstem2=lib32 ;;
+                      */lib64 ) acl_libdirstem3=lib64 ;;
+                    esac ;;
+               esac
+             fi
+           done
+           IFS="$acl_save_IFS"
+           if test $HOST_CPU_C_ABI_32BIT = yes; then
+             # 32-bit ABI.
+             acl_libdirstem3=
+           fi
+           if test $HOST_CPU_C_ABI_32BIT = no; then
+             # 64-bit ABI.
+             acl_libdirstem2=
+           fi
+         fi
+         ;;
+     esac
+     test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+     test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem"
+     acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3"
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5
+$as_echo "$acl_cv_libdirstems" >&6; }
+      acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'`
+  acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'`
+  acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'`
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5
-$as_echo_n "checking how to link with libpth... " >&6; }
-if ${ac_cv_libpth_libs+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
 
 
 
@@ -8150,14 +7959,16 @@ else
 
     eval additional_includedir=\"$includedir\"
     eval additional_libdir=\"$libdir\"
+    eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+    eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
 
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
 
 
-# Check whether --with-libpth-prefix was given.
-if test "${with_libpth_prefix+set}" = set; then :
-  withval=$with_libpth_prefix;
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then :
+  withval=$with_libiconv_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
     else
@@ -8170,6 +7981,8 @@ if test "${with_libpth_prefix+set}" = set; then :
 
           eval additional_includedir=\"$includedir\"
           eval additional_libdir=\"$libdir\"
+          eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+          eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
 
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
@@ -8177,24 +7990,28 @@ if test "${with_libpth_prefix+set}" = set; then :
       else
         additional_includedir="$withval/include"
         additional_libdir="$withval/$acl_libdirstem"
-        if test "$acl_libdirstem2" != "$acl_libdirstem" \
-           && ! test -d "$withval/$acl_libdirstem"; then
-          additional_libdir="$withval/$acl_libdirstem2"
-        fi
+        additional_libdir2="$withval/$acl_libdirstem2"
+        additional_libdir3="$withval/$acl_libdirstem3"
       fi
     fi
 
 fi
 
-      LIBPTH=
-  LTLIBPTH=
-  INCPTH=
-  LIBPTH_PREFIX=
-      HAVE_LIBPTH=
+  if test "X$additional_libdir2" = "X$additional_libdir"; then
+    additional_libdir2=
+  fi
+  if test "X$additional_libdir3" = "X$additional_libdir"; then
+    additional_libdir3=
+  fi
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  LIBICONV_PREFIX=
+      HAVE_LIBICONV=
   rpathdirs=
   ltrpathdirs=
   names_already_handled=
-  names_next_round='pth '
+  names_next_round='iconv '
   while test -n "$names_next_round"; do
     names_this_round="$names_next_round"
     names_next_round=
@@ -8213,9 +8030,9 @@ fi
         if test -n "$value"; then
           if test "$value" = yes; then
             eval value=\"\$LIB$uppername\"
-            test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
             eval value=\"\$LTLIB$uppername\"
-            test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
           else
                                     :
           fi
@@ -8231,48 +8048,54 @@ fi
             shrext=
           fi
           if test $use_additional = yes; then
-            dir="$additional_libdir"
-                                    if test -n "$acl_shlibext"; then
-              if test -f "$dir/$libname$shrext"; then
-                found_dir="$dir"
-                found_so="$dir/$libname$shrext"
-              else
-                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
-                  ver=`(cd "$dir" && \
-                        for f in "$libname$shrext".*; do echo "$f"; done \
-                        | sed -e "s,^$libname$shrext\\\\.,," \
-                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
-                        | sed 1q ) 2>/dev/null`
-                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
-                    found_dir="$dir"
-                    found_so="$dir/$libname$shrext.$ver"
+            for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do
+              if test "X$found_dir" = "X"; then
+                eval dir=\$$additional_libdir_variable
+                if test -n "$dir"; then
+                                                      if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
                   fi
-                else
-                  eval library_names=\"$acl_library_names_spec\"
-                  for f in $library_names; do
-                    if test -f "$dir/$f"; then
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
                       found_dir="$dir"
-                      found_so="$dir/$f"
-                      break
+                      found_a="$dir/$libname.$acl_libext"
                     fi
-                  done
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
                 fi
               fi
-            fi
-                        if test "X$found_dir" = "X"; then
-              if test -f "$dir/$libname.$acl_libext"; then
-                found_dir="$dir"
-                found_a="$dir/$libname.$acl_libext"
-              fi
-            fi
-            if test "X$found_dir" != "X"; then
-              if test -f "$dir/$libname.la"; then
-                found_la="$dir/$libname.la"
-              fi
-            fi
+            done
           fi
           if test "X$found_dir" = "X"; then
-            for x in $LDFLAGS $LTLIBPTH; do
+            for x in $LDFLAGS $LTLIBICONV; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -8286,7 +8109,7 @@ fi
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
                                     if test -n "$acl_shlibext"; then
-                    if test -f "$dir/$libname$shrext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
                       found_dir="$dir"
                       found_so="$dir/$libname$shrext"
                     else
@@ -8296,14 +8119,14 @@ fi
                               | sed -e "s,^$libname$shrext\\\\.,," \
                               | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
                               | sed 1q ) 2>/dev/null`
-                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
                           found_dir="$dir"
                           found_so="$dir/$libname$shrext.$ver"
                         fi
                       else
                         eval library_names=\"$acl_library_names_spec\"
                         for f in $library_names; do
-                          if test -f "$dir/$f"; then
+                          if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
                             found_dir="$dir"
                             found_so="$dir/$f"
                             break
@@ -8313,7 +8136,7 @@ fi
                     fi
                   fi
                                     if test "X$found_dir" = "X"; then
-                    if test -f "$dir/$libname.$acl_libext"; then
+                    if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
                       found_dir="$dir"
                       found_a="$dir/$libname.$acl_libext"
                     fi
@@ -8331,12 +8154,13 @@ fi
             done
           fi
           if test "X$found_dir" != "X"; then
-                        LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name"
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
             if test "X$found_so" != "X"; then
                                                         if test "$enable_rpath" = no \
                  || test "X$found_dir" = "X/usr/$acl_libdirstem" \
-                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
-                                LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
               else
                                                                                 haveit=
                 for x in $ltrpathdirs; do
@@ -8349,10 +8173,10 @@ fi
                   ltrpathdirs="$ltrpathdirs $found_dir"
                 fi
                                 if test "$acl_hardcode_direct" = yes; then
-                                                      LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
                 else
                   if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
-                                                            LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
                                                             haveit=
                     for x in $rpathdirs; do
                       if test "X$x" = "X$found_dir"; then
@@ -8365,7 +8189,7 @@ fi
                     fi
                   else
                                                                                 haveit=
-                    for x in $LDFLAGS $LIBPTH; do
+                    for x in $LDFLAGS $LIBICONV; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -8381,36 +8205,43 @@ fi
                       fi
                     done
                     if test -z "$haveit"; then
-                      LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir"
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
                     fi
                     if test "$acl_hardcode_minus_L" != no; then
-                                                                                        LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
                     else
-                                                                                                                                                                                LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name"
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
                     fi
                   fi
                 fi
               fi
             else
               if test "X$found_a" != "X"; then
-                                LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a"
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
               else
-                                                LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name"
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
               fi
             fi
                         additional_includedir=
             case "$found_dir" in
               */$acl_libdirstem | */$acl_libdirstem/)
                 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
-                if test "$name" = 'pth'; then
-                  LIBPTH_PREFIX="$basedir"
+                if test "$name" = 'iconv'; then
+                  LIBICONV_PREFIX="$basedir"
                 fi
                 additional_includedir="$basedir/include"
                 ;;
               */$acl_libdirstem2 | */$acl_libdirstem2/)
                 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
-                if test "$name" = 'pth'; then
-                  LIBPTH_PREFIX="$basedir"
+                if test "$name" = 'iconv'; then
+                  LIBICONV_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+              */$acl_libdirstem3 | */$acl_libdirstem3/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'`
+                if test "$name" = 'iconv'; then
+                  LIBICONV_PREFIX="$basedir"
                 fi
                 additional_includedir="$basedir/include"
                 ;;
@@ -8426,7 +8257,7 @@ fi
                   fi
                 fi
                 if test -z "$haveit"; then
-                  for x in $CPPFLAGS $INCPTH; do
+                  for x in $CPPFLAGS $INCICONV; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
@@ -8443,7 +8274,7 @@ fi
                   done
                   if test -z "$haveit"; then
                     if test -d "$additional_includedir"; then
-                                            INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir"
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
                     fi
                   fi
                 fi
@@ -8459,12 +8290,14 @@ fi
                             for dep in $dependency_libs; do
                 case "$dep" in
                   -L*)
-                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
-                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+                    dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then
                       haveit=
-                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
-                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                      if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then
                         if test -n "$GCC"; then
                           case $host_os in
                             linux* | gnu* | k*bsd*-gnu) haveit=yes;;
@@ -8473,28 +8306,7 @@ fi
                       fi
                       if test -z "$haveit"; then
                         haveit=
-                        for x in $LDFLAGS $LIBPTH; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir"
-                          fi
-                        fi
-                        haveit=
-                        for x in $LDFLAGS $LTLIBPTH; do
+                        for x in $LDFLAGS $LIBICONV; do
 
   acl_save_prefix="$prefix"
   prefix="$acl_final_prefix"
   exec_prefix="$acl_final_exec_prefix"
   eval x=\"$x\"
   exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir"
-                          fi
-                        fi
-                      fi
-                    fi
-                    ;;
-                  -R*)
-                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
-                    if test "$enable_rpath" != no; then
-                                                                  haveit=
-                      for x in $rpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        rpathdirs="$rpathdirs $dir"
-                      fi
-                                                                  haveit=
-                      for x in $ltrpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        ltrpathdirs="$ltrpathdirs $dir"
-                      fi
-                    fi
-                    ;;
-                  -l*)
-                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
-                    ;;
-                  *.la)
-                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
-                    ;;
-                  *)
-                                        LIBPTH="${LIBPTH}${LIBPTH:+ }$dep"
-                    LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep"
-                    ;;
-                esac
-              done
-            fi
-          else
-                                                            LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name"
-            LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name"
-          fi
-        fi
-      fi
-    done
-  done
-  if test "X$rpathdirs" != "X"; then
-    if test -n "$acl_hardcode_libdir_separator"; then
-                        alldirs=
-      for found_dir in $rpathdirs; do
-        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
-      done
-            acl_save_libdir="$libdir"
-      libdir="$alldirs"
-      eval flag=\"$acl_hardcode_libdir_flag_spec\"
-      libdir="$acl_save_libdir"
-      LIBPTH="${LIBPTH}${LIBPTH:+ }$flag"
-    else
-            for found_dir in $rpathdirs; do
-        acl_save_libdir="$libdir"
-        libdir="$found_dir"
-        eval flag=\"$acl_hardcode_libdir_flag_spec\"
-        libdir="$acl_save_libdir"
-        LIBPTH="${LIBPTH}${LIBPTH:+ }$flag"
-      done
-    fi
-  fi
-  if test "X$ltrpathdirs" != "X"; then
-            for found_dir in $ltrpathdirs; do
-      LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir"
-    done
-  fi
-
-
-
-
-
-
-    ac_cv_libpth_libs="$LIBPTH"
-    ac_cv_libpth_ltlibs="$LTLIBPTH"
-    ac_cv_libpth_cppflags="$INCPTH"
-    ac_cv_libpth_prefix="$LIBPTH_PREFIX"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5
-$as_echo "$ac_cv_libpth_libs" >&6; }
-  LIBPTH="$ac_cv_libpth_libs"
-  LTLIBPTH="$ac_cv_libpth_ltlibs"
-  INCPTH="$ac_cv_libpth_cppflags"
-  LIBPTH_PREFIX="$ac_cv_libpth_prefix"
-
-  for element in $INCPTH; do
-    haveit=
-    for x in $CPPFLAGS; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-      if test "X$x" = "X$element"; then
-        haveit=yes
-        break
-      fi
-    done
-    if test -z "$haveit"; then
-      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
-    fi
-  done
-
-
-
-
-      HAVE_LIBPTH=yes
-
-
-
-      gl_have_pth=
-      gl_save_LIBS="$LIBS"
-      LIBS="$LIBS $LIBPTH"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <pth.h>
-int
-main ()
-{
-pth_self();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  gl_have_pth=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-      LIBS="$gl_save_LIBS"
-      if test -n "$gl_have_pth"; then
-        gl_threads_api=pth
-        LIBTHREAD="$LIBPTH"
-        LTLIBTHREAD="$LTLIBPTH"
-        LIBMULTITHREAD="$LIBTHREAD"
-        LTLIBMULTITHREAD="$LTLIBTHREAD"
-
-$as_echo "#define USE_PTH_THREADS 1" >>confdefs.h
-
-        if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
-          if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
-
-$as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h
-
-            LIBTHREAD=
-            LTLIBTHREAD=
-          fi
-        fi
-      else
-        CPPFLAGS="$gl_save_CPPFLAGS"
-      fi
-    fi
-    if test -z "$gl_have_pthread"; then
-      case "$gl_use_threads" in
-        yes | windows | win32) # The 'win32' is for backward compatibility.
-          if { case "$host_os" in
-                 mingw*) true;;
-                 *) false;;
-               esac
-             }; then
-            gl_threads_api=windows
-
-$as_echo "#define USE_WINDOWS_THREADS 1" >>confdefs.h
-
-          fi
-          ;;
-      esac
-    fi
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5
-$as_echo_n "checking for multithread API to use... " >&6; }
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5
-$as_echo "$gl_threads_api" >&6; }
-
-
-
-
-
-
-
-
-
-
-
-  if test "$gl_threads_api" = posix; then
-    # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the
-    # pthread_rwlock_* functions.
-    ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include <pthread.h>
-"
-if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then :
-
-$as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h
-
-fi
-
-    # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-      #include <pthread.h>
-int
-main ()
-{
-
-#if __FreeBSD__ == 4
-error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
-#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \
-       && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
-error "No, in Mac OS X < 10.7 recursive mutexes actually don't work."
-#else
-int x = (int)PTHREAD_MUTEX_RECURSIVE;
-return !x;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-$as_echo "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  fi
-  :
-
-
-
-
-
-
-
-
-
-
-
-
-    use_additional=yes
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-
-    eval additional_includedir=\"$includedir\"
-    eval additional_libdir=\"$libdir\"
-
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-
-# Check whether --with-libiconv-prefix was given.
-if test "${with_libiconv_prefix+set}" = set; then :
-  withval=$with_libiconv_prefix;
-    if test "X$withval" = "Xno"; then
-      use_additional=no
-    else
-      if test "X$withval" = "X"; then
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-
-          eval additional_includedir=\"$includedir\"
-          eval additional_libdir=\"$libdir\"
-
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-      else
-        additional_includedir="$withval/include"
-        additional_libdir="$withval/$acl_libdirstem"
-        if test "$acl_libdirstem2" != "$acl_libdirstem" \
-           && ! test -d "$withval/$acl_libdirstem"; then
-          additional_libdir="$withval/$acl_libdirstem2"
-        fi
-      fi
-    fi
-
-fi
-
-      LIBICONV=
-  LTLIBICONV=
-  INCICONV=
-  LIBICONV_PREFIX=
-      HAVE_LIBICONV=
-  rpathdirs=
-  ltrpathdirs=
-  names_already_handled=
-  names_next_round='iconv '
-  while test -n "$names_next_round"; do
-    names_this_round="$names_next_round"
-    names_next_round=
-    for name in $names_this_round; do
-      already_handled=
-      for n in $names_already_handled; do
-        if test "$n" = "$name"; then
-          already_handled=yes
-          break
-        fi
-      done
-      if test -z "$already_handled"; then
-        names_already_handled="$names_already_handled $name"
-                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
-        eval value=\"\$HAVE_LIB$uppername\"
-        if test -n "$value"; then
-          if test "$value" = yes; then
-            eval value=\"\$LIB$uppername\"
-            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
-            eval value=\"\$LTLIB$uppername\"
-            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
-          else
-                                    :
-          fi
-        else
-                              found_dir=
-          found_la=
-          found_so=
-          found_a=
-          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
-          if test -n "$acl_shlibext"; then
-            shrext=".$acl_shlibext"             # typically: shrext=.so
-          else
-            shrext=
-          fi
-          if test $use_additional = yes; then
-            dir="$additional_libdir"
-                                    if test -n "$acl_shlibext"; then
-              if test -f "$dir/$libname$shrext"; then
-                found_dir="$dir"
-                found_so="$dir/$libname$shrext"
-              else
-                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
-                  ver=`(cd "$dir" && \
-                        for f in "$libname$shrext".*; do echo "$f"; done \
-                        | sed -e "s,^$libname$shrext\\\\.,," \
-                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
-                        | sed 1q ) 2>/dev/null`
-                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
-                    found_dir="$dir"
-                    found_so="$dir/$libname$shrext.$ver"
-                  fi
-                else
-                  eval library_names=\"$acl_library_names_spec\"
-                  for f in $library_names; do
-                    if test -f "$dir/$f"; then
-                      found_dir="$dir"
-                      found_so="$dir/$f"
-                      break
-                    fi
-                  done
-                fi
-              fi
-            fi
-                        if test "X$found_dir" = "X"; then
-              if test -f "$dir/$libname.$acl_libext"; then
-                found_dir="$dir"
-                found_a="$dir/$libname.$acl_libext"
-              fi
-            fi
-            if test "X$found_dir" != "X"; then
-              if test -f "$dir/$libname.la"; then
-                found_la="$dir/$libname.la"
-              fi
-            fi
-          fi
-          if test "X$found_dir" = "X"; then
-            for x in $LDFLAGS $LTLIBICONV; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-              case "$x" in
-                -L*)
-                  dir=`echo "X$x" | sed -e 's/^X-L//'`
-                                    if test -n "$acl_shlibext"; then
-                    if test -f "$dir/$libname$shrext"; then
-                      found_dir="$dir"
-                      found_so="$dir/$libname$shrext"
-                    else
-                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
-                        ver=`(cd "$dir" && \
-                              for f in "$libname$shrext".*; do echo "$f"; done \
-                              | sed -e "s,^$libname$shrext\\\\.,," \
-                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
-                              | sed 1q ) 2>/dev/null`
-                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
-                          found_dir="$dir"
-                          found_so="$dir/$libname$shrext.$ver"
-                        fi
-                      else
-                        eval library_names=\"$acl_library_names_spec\"
-                        for f in $library_names; do
-                          if test -f "$dir/$f"; then
-                            found_dir="$dir"
-                            found_so="$dir/$f"
-                            break
-                          fi
-                        done
-                      fi
-                    fi
-                  fi
-                                    if test "X$found_dir" = "X"; then
-                    if test -f "$dir/$libname.$acl_libext"; then
-                      found_dir="$dir"
-                      found_a="$dir/$libname.$acl_libext"
-                    fi
-                  fi
-                  if test "X$found_dir" != "X"; then
-                    if test -f "$dir/$libname.la"; then
-                      found_la="$dir/$libname.la"
-                    fi
-                  fi
-                  ;;
-              esac
-              if test "X$found_dir" != "X"; then
-                break
-              fi
-            done
-          fi
-          if test "X$found_dir" != "X"; then
-                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
-            if test "X$found_so" != "X"; then
-                                                        if test "$enable_rpath" = no \
-                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
-                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
-                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
-              else
-                                                                                haveit=
-                for x in $ltrpathdirs; do
-                  if test "X$x" = "X$found_dir"; then
-                    haveit=yes
-                    break
-                  fi
-                done
-                if test -z "$haveit"; then
-                  ltrpathdirs="$ltrpathdirs $found_dir"
-                fi
-                                if test "$acl_hardcode_direct" = yes; then
-                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
-                else
-                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
-                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
-                                                            haveit=
-                    for x in $rpathdirs; do
-                      if test "X$x" = "X$found_dir"; then
-                        haveit=yes
-                        break
-                      fi
-                    done
-                    if test -z "$haveit"; then
-                      rpathdirs="$rpathdirs $found_dir"
-                    fi
-                  else
-                                                                                haveit=
-                    for x in $LDFLAGS $LIBICONV; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                      if test "X$x" = "X-L$found_dir"; then
-                        haveit=yes
-                        break
-                      fi
-                    done
-                    if test -z "$haveit"; then
-                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
-                    fi
-                    if test "$acl_hardcode_minus_L" != no; then
-                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
-                    else
-                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
-                    fi
-                  fi
-                fi
-              fi
-            else
-              if test "X$found_a" != "X"; then
-                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
-              else
-                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
-              fi
-            fi
-                        additional_includedir=
-            case "$found_dir" in
-              */$acl_libdirstem | */$acl_libdirstem/)
-                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
-                if test "$name" = 'iconv'; then
-                  LIBICONV_PREFIX="$basedir"
-                fi
-                additional_includedir="$basedir/include"
-                ;;
-              */$acl_libdirstem2 | */$acl_libdirstem2/)
-                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
-                if test "$name" = 'iconv'; then
-                  LIBICONV_PREFIX="$basedir"
-                fi
-                additional_includedir="$basedir/include"
-                ;;
-            esac
-            if test "X$additional_includedir" != "X"; then
-                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
-                haveit=
-                if test "X$additional_includedir" = "X/usr/local/include"; then
-                  if test -n "$GCC"; then
-                    case $host_os in
-                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
-                    esac
-                  fi
-                fi
-                if test -z "$haveit"; then
-                  for x in $CPPFLAGS $INCICONV; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                    if test "X$x" = "X-I$additional_includedir"; then
-                      haveit=yes
-                      break
-                    fi
-                  done
-                  if test -z "$haveit"; then
-                    if test -d "$additional_includedir"; then
-                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
-                    fi
-                  fi
-                fi
-              fi
-            fi
-                        if test -n "$found_la"; then
-                                                        save_libdir="$libdir"
-              case "$found_la" in
-                */* | *\\*) . "$found_la" ;;
-                *) . "./$found_la" ;;
-              esac
-              libdir="$save_libdir"
-                            for dep in $dependency_libs; do
-                case "$dep" in
-                  -L*)
-                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
-                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
-                      haveit=
-                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
-                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
-                        if test -n "$GCC"; then
-                          case $host_os in
-                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
-                          esac
-                        fi
-                      fi
-                      if test -z "$haveit"; then
-                        haveit=
-                        for x in $LDFLAGS $LIBICONV; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
-                          fi
-                        fi
-                        haveit=
-                        for x in $LDFLAGS $LTLIBICONV; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
-                          fi
-                        fi
-                      fi
-                    fi
-                    ;;
-                  -R*)
-                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
-                    if test "$enable_rpath" != no; then
-                                                                  haveit=
-                      for x in $rpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        rpathdirs="$rpathdirs $dir"
-                      fi
-                                                                  haveit=
-                      for x in $ltrpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        ltrpathdirs="$ltrpathdirs $dir"
-                      fi
-                    fi
-                    ;;
-                  -l*)
-                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
-                    ;;
-                  *.la)
-                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
-                    ;;
-                  *)
-                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
-                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
-                    ;;
-                esac
-              done
-            fi
-          else
-                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
-            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
-          fi
-        fi
-      fi
-    done
-  done
-  if test "X$rpathdirs" != "X"; then
-    if test -n "$acl_hardcode_libdir_separator"; then
-                        alldirs=
-      for found_dir in $rpathdirs; do
-        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
-      done
-            acl_save_libdir="$libdir"
-      libdir="$alldirs"
-      eval flag=\"$acl_hardcode_libdir_flag_spec\"
-      libdir="$acl_save_libdir"
-      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
-    else
-            for found_dir in $rpathdirs; do
-        acl_save_libdir="$libdir"
-        libdir="$found_dir"
-        eval flag=\"$acl_hardcode_libdir_flag_spec\"
-        libdir="$acl_save_libdir"
-        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
-      done
-    fi
-  fi
-  if test "X$ltrpathdirs" != "X"; then
-            for found_dir in $ltrpathdirs; do
-      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
-    done
-  fi
-
-
-
-
-
-
-
-
-
-
-
-
-          am_save_CPPFLAGS="$CPPFLAGS"
-
-  for element in $INCICONV; do
-    haveit=
-    for x in $CPPFLAGS; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-      if test "X$x" = "X$element"; then
-        haveit=yes
-        break
-      fi
-    done
-    if test -z "$haveit"; then
-      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
-    fi
-  done
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
-$as_echo_n "checking for iconv... " >&6; }
-if ${am_cv_func_iconv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-    am_cv_func_iconv="no, consider installing GNU libiconv"
-    am_cv_lib_iconv=no
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <stdlib.h>
-#include <iconv.h>
-
-int
-main ()
-{
-iconv_t cd = iconv_open("","");
-           iconv(cd,NULL,NULL,NULL,NULL);
-           iconv_close(cd);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  am_cv_func_iconv=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    if test "$am_cv_func_iconv" != yes; then
-      am_save_LIBS="$LIBS"
-      LIBS="$LIBS $LIBICONV"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <stdlib.h>
-#include <iconv.h>
-
-int
-main ()
-{
-iconv_t cd = iconv_open("","");
-             iconv(cd,NULL,NULL,NULL,NULL);
-             iconv_close(cd);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  am_cv_lib_iconv=yes
-        am_cv_func_iconv=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-      LIBS="$am_save_LIBS"
-    fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
-$as_echo "$am_cv_func_iconv" >&6; }
-  if test "$am_cv_func_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
-$as_echo_n "checking for working iconv... " >&6; }
-if ${am_cv_func_iconv_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-                  am_save_LIBS="$LIBS"
-      if test $am_cv_lib_iconv = yes; then
-        LIBS="$LIBS $LIBICONV"
-      fi
-      if test "$cross_compiling" = yes; then :
-
-         case "$host_os" in
-           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
-           *)            am_cv_func_iconv_works="guessing yes" ;;
-         esac
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <iconv.h>
-#include <string.h>
-int main ()
-{
-  int result = 0;
-  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
-     returns.  */
-  {
-    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
-    if (cd_utf8_to_88591 != (iconv_t)(-1))
-      {
-        static const char input[] = "\342\202\254"; /* EURO SIGN */
-        char buf[10];
-        const char *inptr = input;
-        size_t inbytesleft = strlen (input);
-        char *outptr = buf;
-        size_t outbytesleft = sizeof (buf);
-        size_t res = iconv (cd_utf8_to_88591,
-                            (char **) &inptr, &inbytesleft,
-                            &outptr, &outbytesleft);
-        if (res == 0)
-          result |= 1;
-        iconv_close (cd_utf8_to_88591);
-      }
-  }
-  /* Test against Solaris 10 bug: Failures are not distinguishable from
-     successful returns.  */
-  {
-    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
-    if (cd_ascii_to_88591 != (iconv_t)(-1))
-      {
-        static const char input[] = "\263";
-        char buf[10];
-        const char *inptr = input;
-        size_t inbytesleft = strlen (input);
-        char *outptr = buf;
-        size_t outbytesleft = sizeof (buf);
-        size_t res = iconv (cd_ascii_to_88591,
-                            (char **) &inptr, &inbytesleft,
-                            &outptr, &outbytesleft);
-        if (res == 0)
-          result |= 2;
-        iconv_close (cd_ascii_to_88591);
-      }
-  }
-  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
-  {
-    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
-    if (cd_88591_to_utf8 != (iconv_t)(-1))
-      {
-        static const char input[] = "\304";
-        static char buf[2] = { (char)0xDE, (char)0xAD };
-        const char *inptr = input;
-        size_t inbytesleft = 1;
-        char *outptr = buf;
-        size_t outbytesleft = 1;
-        size_t res = iconv (cd_88591_to_utf8,
-                            (char **) &inptr, &inbytesleft,
-                            &outptr, &outbytesleft);
-        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
-          result |= 4;
-        iconv_close (cd_88591_to_utf8);
-      }
-  }
-#if 0 /* This bug could be worked around by the caller.  */
-  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
-  {
-    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
-    if (cd_88591_to_utf8 != (iconv_t)(-1))
-      {
-        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
-        char buf[50];
-        const char *inptr = input;
-        size_t inbytesleft = strlen (input);
-        char *outptr = buf;
-        size_t outbytesleft = sizeof (buf);
-        size_t res = iconv (cd_88591_to_utf8,
-                            (char **) &inptr, &inbytesleft,
-                            &outptr, &outbytesleft);
-        if ((int)res > 0)
-          result |= 8;
-        iconv_close (cd_88591_to_utf8);
-      }
-  }
-#endif
-  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
-     provided.  */
-  if (/* Try standardized names.  */
-      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
-      /* Try IRIX, OSF/1 names.  */
-      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
-      /* Try AIX names.  */
-      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
-      /* Try HP-UX names.  */
-      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
-    result |= 16;
-  return result;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  am_cv_func_iconv_works=yes
-else
-  am_cv_func_iconv_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-      LIBS="$am_save_LIBS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
-$as_echo "$am_cv_func_iconv_works" >&6; }
-    case "$am_cv_func_iconv_works" in
-      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
-      *)   am_func_iconv=yes ;;
-    esac
-  else
-    am_func_iconv=no am_cv_lib_iconv=no
-  fi
-  if test "$am_func_iconv" = yes; then
-
-$as_echo "#define HAVE_ICONV 1" >>confdefs.h
-
-  fi
-  if test "$am_cv_lib_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
-$as_echo_n "checking how to link with libiconv... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
-$as_echo "$LIBICONV" >&6; }
-  else
-            CPPFLAGS="$am_save_CPPFLAGS"
-    LIBICONV=
-    LTLIBICONV=
-  fi
-
-
-
-  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 ${am_cv_proto_iconv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <stdlib.h>
-#include <iconv.h>
-extern
-#ifdef __cplusplus
-"C"
-#endif
-#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
-size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-#else
-size_t iconv();
-#endif
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  am_cv_proto_iconv_arg1=""
-else
-  am_cv_proto_iconv_arg1="const"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
-fi
-
-    am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result:
-         $am_cv_proto_iconv" >&5
-$as_echo "
-         $am_cv_proto_iconv" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define ICONV_CONST $am_cv_proto_iconv_arg1
-_ACEOF
-
-
-  fi
-
-
-
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-$as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-  for ac_header in argz.h inttypes.h limits.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"
-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
-
-fi
-
-done
-
-  for ac_func in getcwd getegid geteuid getgid getuid mempcpy munmap \
-    stpcpy strcasecmp strdup strtoul tsearch uselocale argz_count \
-    argz_stringify argz_next __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"
-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
-
-fi
-done
-
-
-          ac_fn_c_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "#include <stdio.h>
-"
-if test "x$ac_cv_have_decl_feof_unlocked" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "#include <stdio.h>
-"
-if test "x$ac_cv_have_decl_fgets_unlocked" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl
-_ACEOF
-
-
-
-
-                      for ac_prog in bison
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-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 ${ac_cv_prog_INTLBISON+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$INTLBISON"; then
-  ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  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
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-INTLBISON=$ac_cv_prog_INTLBISON
-if test -n "$INTLBISON"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLBISON" >&5
-$as_echo "$INTLBISON" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$INTLBISON" && break
-done
-
-  if test -z "$INTLBISON"; then
-    ac_verc_fail=yes
-  else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5
-$as_echo_n "checking version of bison... " >&6; }
-    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
-    case $ac_prog_version in
-      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
-      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
-         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
-      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
-    esac
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5
-$as_echo "$ac_prog_version" >&6; }
-  fi
-  if test $ac_verc_fail = yes; then
-    INTLBISON=:
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
-$as_echo_n "checking for long long int... " >&6; }
-if ${ac_cv_type_long_long_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_type_long_long_int=yes
-      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
-        if test $ac_cv_type_long_long_int = yes; then
-                                        if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
-                 #ifndef LLONG_MAX
-                 # define HALF \
-                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-                 # define LLONG_MAX (HALF - 1 + HALF)
-                 #endif
-int
-main ()
-{
-long long int n = 1;
-                 int i;
-                 for (i = 0; ; i++)
-                   {
-                     long long int m = n << i;
-                     if (m >> i != n)
-                       return 1;
-                     if (LLONG_MAX / 2 < m)
-                       break;
-                   }
-                 return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_type_long_long_int=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-        fi
-      fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
-$as_echo "$ac_cv_type_long_long_int" >&6; }
-  if test $ac_cv_type_long_long_int = yes; then
-
-$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
-
-  fi
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
-$as_echo_n "checking for wchar_t... " >&6; }
-if ${gt_cv_c_wchar_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stddef.h>
-            wchar_t foo = (wchar_t)'\0';
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_c_wchar_t=yes
-else
-  gt_cv_c_wchar_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
-$as_echo "$gt_cv_c_wchar_t" >&6; }
-  if test $gt_cv_c_wchar_t = yes; then
-
-$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
-
-  fi
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
-$as_echo_n "checking for wint_t... " >&6; }
-if ${gt_cv_c_wint_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-            wint_t foo = (wchar_t)'\0';
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_c_wint_t=yes
-else
-  gt_cv_c_wint_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
-$as_echo "$gt_cv_c_wint_t" >&6; }
-  if test $gt_cv_c_wint_t = yes; then
-
-$as_echo "#define HAVE_WINT_T 1" >>confdefs.h
-
-  fi
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5
-$as_echo_n "checking for intmax_t... " >&6; }
-if ${gt_cv_c_intmax_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <stddef.h>
-#include <stdlib.h>
-#if HAVE_STDINT_H_WITH_UINTMAX
-#include <stdint.h>
-#endif
-#if HAVE_INTTYPES_H_WITH_UINTMAX
-#include <inttypes.h>
-#endif
-
-int
-main ()
-{
-intmax_t x = -1;
-            return !x;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_c_intmax_t=yes
-else
-  gt_cv_c_intmax_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5
-$as_echo "$gt_cv_c_intmax_t" >&6; }
-  if test $gt_cv_c_intmax_t = yes; then
-
-$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h
-
-  fi
-
-
-
-  { $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 ${gt_cv_func_printf_posix+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      if test "$cross_compiling" = yes; then :
-
-          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
-  notposix
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "notposix" >/dev/null 2>&1; then :
-  gt_cv_func_printf_posix="guessing no"
-else
-  gt_cv_func_printf_posix="guessing yes"
-fi
-rm -f conftest*
-
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <stdio.h>
-#include <string.h>
-/* The string "%2$d %1$d", with dollar characters protected from the shell's
-   dollar expansion (possibly an autoconf bug).  */
-static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
-static char buf[100];
-int main ()
-{
-  sprintf (buf, format, 33, 55);
-  return (strcmp (buf, "55 33") != 0);
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gt_cv_func_printf_posix=yes
-else
-  gt_cv_func_printf_posix=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_printf_posix" >&5
-$as_echo "$gt_cv_func_printf_posix" >&6; }
-  case $gt_cv_func_printf_posix in
-    *yes)
-
-$as_echo "#define HAVE_POSIX_PRINTF 1" >>confdefs.h
-
-      ;;
-  esac
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5
-$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; }
-if ${ac_cv_gnu_library_2_1+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
-  Lucky GNU user
- #endif
-#endif
-#ifdef __UCLIBC__
- Lucky user
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Lucky" >/dev/null 2>&1; then :
-  ac_cv_gnu_library_2_1=yes
-else
-  ac_cv_gnu_library_2_1=no
-fi
-rm -f conftest*
-
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
-$as_echo "$ac_cv_gnu_library_2_1" >&6; }
-
-    GLIBC21="$ac_cv_gnu_library_2_1"
-
-
-
-  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" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_STDINT_H 1
-_ACEOF
-
-fi
-
-done
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5
-$as_echo_n "checking for SIZE_MAX... " >&6; }
-if ${gl_cv_size_max+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-    gl_cv_size_max=
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <limits.h>
-#if HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#ifdef SIZE_MAX
-Found it
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Found it" >/dev/null 2>&1; then :
-  gl_cv_size_max=yes
-fi
-rm -f conftest*
-
-    if test -z "$gl_cv_size_max"; then
-                        if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1"        "#include <stddef.h>
-#include <limits.h>"; then :
-
-else
-  size_t_bits_minus_1=
-fi
-
-      if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint"        "#include <stddef.h>"; then :
-
-else
-  fits_in_uint=
-fi
-
-      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
-        if test $fits_in_uint = 1; then
-                              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stddef.h>
-                 extern size_t foo;
-                 extern unsigned long foo;
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  fits_in_uint=0
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-        fi
-                                if test $fits_in_uint = 1; then
-          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
-        else
-          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
-        fi
-      else
-                gl_cv_size_max='((size_t)~(size_t)0)'
-      fi
-    fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5
-$as_echo "$gl_cv_size_max" >&6; }
-  if test "$gl_cv_size_max" != yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define SIZE_MAX $gl_cv_size_max
-_ACEOF
-
-  fi
-
-
-
-
-  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" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_STDINT_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-  for ac_func in $ac_func_list
-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"
-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
-
-fi
-done
-
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5
-$as_echo_n "checking for working fcntl.h... " >&6; }
-if ${gl_cv_header_working_fcntl_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  gl_cv_header_working_fcntl_h=cross-compiling
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-           #include <sys/stat.h>
-           #if HAVE_UNISTD_H
-           # include <unistd.h>
-           #else /* on Windows with MSVC */
-           # include <io.h>
-           # include <stdlib.h>
-           # defined sleep(n) _sleep ((n) * 1000)
-           #endif
-           #include <fcntl.h>
-           #ifndef O_NOATIME
-            #define O_NOATIME 0
-           #endif
-           #ifndef O_NOFOLLOW
-            #define O_NOFOLLOW 0
-           #endif
-           static int const constants[] =
-            {
-              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
-            };
-
-int
-main ()
-{
-
-            int result = !constants;
-            #if HAVE_SYMLINK
-            {
-              static char const sym[] = "conftest.sym";
-              if (symlink ("/dev/null", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              if (unlink (sym) != 0 || symlink (".", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              unlink (sym);
-            }
-            #endif
-            {
-              static char const file[] = "confdefs.h";
-              int fd = open (file, O_RDONLY | O_NOATIME);
-              if (fd < 0)
-                result |= 8;
-              else
-                {
-                  struct stat st0;
-                  if (fstat (fd, &st0) != 0)
-                    result |= 16;
-                  else
-                    {
-                      char c;
-                      sleep (1);
-                      if (read (fd, &c, 1) != 1)
-                        result |= 24;
-                      else
-                        {
-                          if (close (fd) != 0)
-                            result |= 32;
-                          else
-                            {
-                              struct stat st1;
-                              if (stat (file, &st1) != 0)
-                                result |= 40;
-                              else
-                                if (st0.st_atime != st1.st_atime)
-                                  result |= 64;
-                            }
-                        }
-                    }
-                }
-            }
-            return result;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_header_working_fcntl_h=yes
-else
-  case $? in #(
-        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
-        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
-        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
-         *) gl_cv_header_working_fcntl_h='no';;
-        esac
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5
-$as_echo "$gl_cv_header_working_fcntl_h" >&6; }
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOATIME $ac_val
-_ACEOF
-
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOFOLLOW $ac_val
-_ACEOF
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
-$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
-if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  gt_save_LIBS="$LIBS"
-     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <CoreFoundation/CFPreferences.h>
-int
-main ()
-{
-CFPreferencesCopyAppValue(NULL, NULL)
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  gt_cv_func_CFPreferencesCopyAppValue=yes
-else
-  gt_cv_func_CFPreferencesCopyAppValue=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     LIBS="$gt_save_LIBS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
-$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
-  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
-
-$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
-
-  fi
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
-$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
-if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  gt_save_LIBS="$LIBS"
-     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <CoreFoundation/CFLocale.h>
-int
-main ()
-{
-CFLocaleCopyCurrent();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  gt_cv_func_CFLocaleCopyCurrent=yes
-else
-  gt_cv_func_CFLocaleCopyCurrent=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     LIBS="$gt_save_LIBS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
-$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
-  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
-
-$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
-
-  fi
-  INTL_MACOSX_LIBS=
-  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
-    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
-  fi
-
-
-
-
-
-
-
-
-
-
-    case "$enable_silent_rules" in
-    yes) INTL_DEFAULT_VERBOSITY=0;;
-    no)  INTL_DEFAULT_VERBOSITY=1;;
-    *)   INTL_DEFAULT_VERBOSITY=1;;
-  esac
-
-
-  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
-if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
-
-else
-
-$as_echo "#define ptrdiff_t long" >>confdefs.h
-
-
-fi
-
-  for ac_header in features.h stddef.h stdlib.h string.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"
-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
-
-fi
-
-done
-
-  for ac_func in asprintf fwprintf newlocale putenv setenv setlocale \
-    snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb
-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"
-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
-
-fi
-done
-
-
-      ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include <stdio.h>
-"
-if test "x$ac_cv_have_decl__snprintf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL__SNPRINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "_snwprintf" "ac_cv_have_decl__snwprintf" "#include <stdio.h>
-"
-if test "x$ac_cv_have_decl__snwprintf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL__SNWPRINTF $ac_have_decl
-_ACEOF
-
-
-          ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "#include <stdio.h>
-"
-if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
-_ACEOF
-
-
-  case $gt_cv_func_printf_posix in
-    *yes) HAVE_POSIX_PRINTF=1 ;;
-    *) HAVE_POSIX_PRINTF=0 ;;
-  esac
-
-  if test "$ac_cv_func_asprintf" = yes; then
-    HAVE_ASPRINTF=1
-  else
-    HAVE_ASPRINTF=0
-  fi
-
-  if test "$ac_cv_func_snprintf" = yes; then
-    HAVE_SNPRINTF=1
-  else
-    HAVE_SNPRINTF=0
-  fi
-
-  if test "$ac_cv_func_newlocale" = yes; then
-    HAVE_NEWLOCALE=1
-  else
-    HAVE_NEWLOCALE=0
-  fi
-
-  if test "$ac_cv_func_wprintf" = yes; then
-    HAVE_WPRINTF=1
-  else
-    HAVE_WPRINTF=0
-  fi
-
-
-
-  { $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 ${am_cv_langinfo_codeset+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <langinfo.h>
-int
-main ()
-{
-char* cs = nl_langinfo(CODESET); return !cs;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  am_cv_langinfo_codeset=yes
-else
-  am_cv_langinfo_codeset=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
-$as_echo "$am_cv_langinfo_codeset" >&6; }
-  if test $am_cv_langinfo_codeset = yes; then
-
-$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
-
-  fi
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5
-$as_echo_n "checking for LC_MESSAGES... " >&6; }
-if ${gt_cv_val_LC_MESSAGES+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <locale.h>
-int
-main ()
-{
-return LC_MESSAGES
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  gt_cv_val_LC_MESSAGES=yes
-else
-  gt_cv_val_LC_MESSAGES=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5
-$as_echo "$gt_cv_val_LC_MESSAGES" >&6; }
-  if test $gt_cv_val_LC_MESSAGES = yes; then
-
-$as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h
-
-  fi
-
-
-                if test "$enable_shared" = yes; then
-    case "$host_os" in
-      mingw* | cygwin*) is_woe32dll=yes ;;
-      *) is_woe32dll=no ;;
-    esac
-  else
-    is_woe32dll=no
-  fi
-  WOE32DLL=$is_woe32dll
-
-
-      case "$host_os" in
-    mingw* | cygwin*) is_woe32=yes ;;
-    *) is_woe32=no ;;
-  esac
-  WOE32=$is_woe32
-
-  if test $WOE32 = yes; then
-        if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
-set dummy ${ac_tool_prefix}windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_WINDRES+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$WINDRES"; then
-  ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_WINDRES="${ac_tool_prefix}windres"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-WINDRES=$ac_cv_prog_WINDRES
-if test -n "$WINDRES"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5
-$as_echo "$WINDRES" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
+  prefix="$acl_save_prefix"
 
-fi
-if test -z "$ac_cv_prog_WINDRES"; then
-  ac_ct_WINDRES=$WINDRES
-  # Extract the first word of "windres", so it can be a program name with args.
-set dummy windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_WINDRES+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_WINDRES"; then
-  ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_WINDRES="windres"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
+                          if test "X$x" = "X-L$dependency_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$dependency_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$dependency_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
 
-fi
-fi
-ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES
-if test -n "$ac_ct_WINDRES"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5
-$as_echo "$ac_ct_WINDRES" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
 
-  if test "x$ac_ct_WINDRES" = x; then
-    WINDRES=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    WINDRES=$ac_ct_WINDRES
+                          if test "X$x" = "X-L$dependency_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$dependency_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$dependency_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
   fi
-else
-  WINDRES="$ac_cv_prog_WINDRES"
-fi
-
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
   fi
 
-              case "$host_os" in
-    hpux*) LTLIBC="" ;;
-    *)     LTLIBC="-lc" ;;
-  esac
+
 
 
 
@@ -10650,9 +8485,9 @@ $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
 $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
 
   fi
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
-$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
-if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then :
+                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5
+$as_echo_n "checking for CFLocaleCopyPreferredLanguages... " >&6; }
+if ${gt_cv_func_CFLocaleCopyPreferredLanguages+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   gt_save_LIBS="$LIBS"
@@ -10663,29 +8498,30 @@ else
 int
 main ()
 {
-CFLocaleCopyCurrent();
+CFLocaleCopyPreferredLanguages();
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  gt_cv_func_CFLocaleCopyCurrent=yes
+  gt_cv_func_CFLocaleCopyPreferredLanguages=yes
 else
-  gt_cv_func_CFLocaleCopyCurrent=no
+  gt_cv_func_CFLocaleCopyPreferredLanguages=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
-$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
-  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5
+$as_echo "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; }
+  if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
 
-$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
+$as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
 
   fi
   INTL_MACOSX_LIBS=
-  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes \
+     || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
     INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
   fi
 
@@ -10694,9 +8530,6 @@ $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
 
 
 
-    BUILD_INCLUDED_LIBINTL=no
-    USE_INCLUDED_LIBINTL=no
-
   LIBINTL=
   LTLIBINTL=
   POSUB=
@@ -10712,22 +8545,6 @@ $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
     if test "$USE_NLS" = "yes"; then
     gt_use_preinstalled_gnugettext=no
 
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether included gettext is requested" >&5
-$as_echo_n "checking whether included gettext is requested... " >&6; }
-
-# Check whether --with-included-gettext was given.
-if test "${with_included_gettext+set}" = set; then :
-  withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval
-else
-  nls_cv_force_use_gnu_gettext=no
-fi
-
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5
-$as_echo "$nls_cv_force_use_gnu_gettext" >&6; }
-
-      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
-      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
-
 
         if test $gt_api_version -ge 3; then
           gt_revision_test_code='
@@ -10745,43 +8562,318 @@ typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
           gt_expression_test_code=
         fi
 
-        { $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 eval \${$gt_func_gnugettext_libc+:} false; then :
+        { $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 eval \${$gt_func_gnugettext_libc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+
+int
+main ()
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$gt_func_gnugettext_libc=yes"
+else
+  eval "$gt_func_gnugettext_libc=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$gt_func_gnugettext_libc
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+
+
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if ${am_cv_func_iconv+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+           iconv(cd,NULL,NULL,NULL,NULL);
+           iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+             iconv(cd,NULL,NULL,NULL,NULL);
+             iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if ${am_cv_func_iconv_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
+
+                  am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      am_cv_func_iconv_works=no
+      for ac_iconv_const in '' 'const'; do
+        if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+             aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+             *)            am_cv_func_iconv_works="guessing yes" ;;
+           esac
+else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-#include <libintl.h>
-$gt_revision_test_code
-extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;
+#include <iconv.h>
+#include <string.h>
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
 
 int
 main ()
 {
-
-bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+int result = 0;
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 1;
+        iconv_close (cd_utf8_to_88591);
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\263";
+        char buf[10];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 2;
+        iconv_close (cd_ascii_to_88591);
+      }
+  }
+  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304";
+        static char buf[2] = { (char)0xDE, (char)0xAD };
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = 1;
+        char *outptr = buf;
+        size_t outbytesleft = 1;
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+          result |= 4;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        ICONV_CONST char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          result |= 8;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  {
+    /* Try standardized names.  */
+    iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP");
+    /* Try IRIX, OSF/1 names.  */
+    iconv_t cd2 = iconv_open ("UTF-8", "eucJP");
+    /* Try AIX names.  */
+    iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP");
+    /* Try HP-UX names.  */
+    iconv_t cd4 = iconv_open ("utf8", "eucJP");
+    if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1)
+        && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1))
+      result |= 16;
+    if (cd1 != (iconv_t)(-1))
+      iconv_close (cd1);
+    if (cd2 != (iconv_t)(-1))
+      iconv_close (cd2);
+    if (cd3 != (iconv_t)(-1))
+      iconv_close (cd3);
+    if (cd4 != (iconv_t)(-1))
+      iconv_close (cd4);
+  }
+  return result;
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$gt_func_gnugettext_libc=yes"
-else
-  eval "$gt_func_gnugettext_libc=no"
+if ac_fn_c_try_run "$LINENO"; then :
+  am_cv_func_iconv_works=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-eval ac_res=\$$gt_func_gnugettext_libc
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
 
-        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+        test "$am_cv_func_iconv_works" = no || break
+      done
+      LIBS="$am_save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+
+$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+
+
 
 
 
@@ -10799,6 +8891,8 @@ $as_echo "$ac_res" >&6; }
 
     eval additional_includedir=\"$includedir\"
     eval additional_libdir=\"$libdir\"
+    eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+    eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
 
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
@@ -10819,6 +8913,8 @@ if test "${with_libintl_prefix+set}" = set; then :
 
           eval additional_includedir=\"$includedir\"
           eval additional_libdir=\"$libdir\"
+          eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+          eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
 
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
@@ -10826,15 +8922,19 @@ if test "${with_libintl_prefix+set}" = set; then :
       else
         additional_includedir="$withval/include"
         additional_libdir="$withval/$acl_libdirstem"
-        if test "$acl_libdirstem2" != "$acl_libdirstem" \
-           && ! test -d "$withval/$acl_libdirstem"; then
-          additional_libdir="$withval/$acl_libdirstem2"
-        fi
+        additional_libdir2="$withval/$acl_libdirstem2"
+        additional_libdir3="$withval/$acl_libdirstem3"
       fi
     fi
 
 fi
 
+  if test "X$additional_libdir2" = "X$additional_libdir"; then
+    additional_libdir2=
+  fi
+  if test "X$additional_libdir3" = "X$additional_libdir"; then
+    additional_libdir3=
+  fi
       LIBINTL=
   LTLIBINTL=
   INCINTL=
             shrext=
           fi
           if test $use_additional = yes; then
-            dir="$additional_libdir"
-                                    if test -n "$acl_shlibext"; then
-              if test -f "$dir/$libname$shrext"; then
-                found_dir="$dir"
-                found_so="$dir/$libname$shrext"
-              else
-                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
-                  ver=`(cd "$dir" && \
-                        for f in "$libname$shrext".*; do echo "$f"; done \
-                        | sed -e "s,^$libname$shrext\\\\.,," \
-                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
-                        | sed 1q ) 2>/dev/null`
-                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
-                    found_dir="$dir"
-                    found_so="$dir/$libname$shrext.$ver"
+            for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do
+              if test "X$found_dir" = "X"; then
+                eval dir=\$$additional_libdir_variable
+                if test -n "$dir"; then
+                                                      if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
                   fi
-                else
-                  eval library_names=\"$acl_library_names_spec\"
-                  for f in $library_names; do
-                    if test -f "$dir/$f"; then
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
                       found_dir="$dir"
-                      found_so="$dir/$f"
-                      break
+                      found_a="$dir/$libname.$acl_libext"
                     fi
-                  done
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
                 fi
               fi
-            fi
-                        if test "X$found_dir" = "X"; then
-              if test -f "$dir/$libname.$acl_libext"; then
-                found_dir="$dir"
-                found_a="$dir/$libname.$acl_libext"
-              fi
-            fi
-            if test "X$found_dir" != "X"; then
-              if test -f "$dir/$libname.la"; then
-                found_la="$dir/$libname.la"
-              fi
-            fi
+            done
           fi
           if test "X$found_dir" = "X"; then
             for x in $LDFLAGS $LTLIBINTL; do
@@ -10935,7 +9041,7 @@ fi
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
                                     if test -n "$acl_shlibext"; then
-                    if test -f "$dir/$libname$shrext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
                       found_dir="$dir"
                       found_so="$dir/$libname$shrext"
                     else
                               | sed -e "s,^$libname$shrext\\\\.,," \
                               | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
                               | sed 1q ) 2>/dev/null`
-                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
                           found_dir="$dir"
                           found_so="$dir/$libname$shrext.$ver"
                         fi
                       else
                         eval library_names=\"$acl_library_names_spec\"
                         for f in $library_names; do
-                          if test -f "$dir/$f"; then
+                          if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
                             found_dir="$dir"
                             found_so="$dir/$f"
                             break
@@ -10962,7 +9068,7 @@ fi
                     fi
                   fi
                                     if test "X$found_dir" = "X"; then
-                    if test -f "$dir/$libname.$acl_libext"; then
+                    if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
                       found_dir="$dir"
                       found_a="$dir/$libname.$acl_libext"
                     fi
@@ -10984,7 +9090,8 @@ fi
             if test "X$found_so" != "X"; then
                                                         if test "$enable_rpath" = no \
                  || test "X$found_dir" = "X/usr/$acl_libdirstem" \
-                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then
                                 LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
               else
                                                                                 haveit=
@@ -11063,6 +9170,13 @@ fi
                 fi
                 additional_includedir="$basedir/include"
                 ;;
+              */$acl_libdirstem3 | */$acl_libdirstem3/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'`
+                if test "$name" = 'intl'; then
+                  LIBINTL_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
             esac
             if test "X$additional_includedir" != "X"; then
                                                                                                                 if test "X$additional_includedir" != "X/usr/include"; then
                             for dep in $dependency_libs; do
                 case "$dep" in
                   -L*)
-                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
-                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+                    dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then
                       haveit=
-                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
-                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                      if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then
                         if test -n "$GCC"; then
                           case $host_os in
                             linux* | gnu* | k*bsd*-gnu) haveit=yes;;
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
 
-                          if test "X$x" = "X-L$additional_libdir"; then
+                          if test "X$x" = "X-L$dependency_libdir"; then
                             haveit=yes
                             break
                           fi
                         done
                         if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+                          if test -d "$dependency_libdir"; then
+                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }-L$dependency_libdir"
                           fi
                         fi
                         haveit=
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
 
-                          if test "X$x" = "X-L$additional_libdir"; then
+                          if test "X$x" = "X-L$dependency_libdir"; then
                             haveit=yes
                             break
                           fi
                         done
                         if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+                          if test -d "$dependency_libdir"; then
+                                                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$dependency_libdir"
                           fi
                         fi
                       fi
@@ -11243,7 +9359,6 @@ 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 eval \${$gt_func_gnugettext_libintl+:} false; then :
@@ -11257,20 +9372,25 @@ else
 /* end confdefs.h.  */
 
 #include <libintl.h>
-$gt_revision_test_code
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
 extern int _nl_msg_cat_cntr;
 extern
 #ifdef __cplusplus
 "C"
 #endif
 const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
 
 int
 main ()
 {
 
 bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
 
   ;
   return 0;
@@ -11289,20 +9409,25 @@ rm -f core conftest.err conftest.$ac_objext \
 /* end confdefs.h.  */
 
 #include <libintl.h>
-$gt_revision_test_code
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
 extern int _nl_msg_cat_cntr;
 extern
 #ifdef __cplusplus
 "C"
 #endif
 const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
 
 int
 main ()
 {
 
 bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
 
   ;
   return 0;
@@ -11337,25 +9462,6 @@ $as_echo "$ac_res" >&6; }
         fi
 
 
-        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
-                              nls_cv_use_gnu_gettext=yes
-        fi
-      fi
-
-      if test "$nls_cv_use_gnu_gettext" = "yes"; then
-                BUILD_INCLUDED_LIBINTL=yes
-        USE_INCLUDED_LIBINTL=yes
-        LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV $LIBTHREAD"
-        LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV $LTLIBTHREAD"
-        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
-      fi
-
-      CATOBJEXT=
-      if test "$gt_use_preinstalled_gnugettext" = "yes" \
-         || test "$nls_cv_use_gnu_gettext" = "yes"; then
-                CATOBJEXT=.gmo
-      fi
-
 
     if test -n "$INTL_MACOSX_LIBS"; then
       if test "$gt_use_preinstalled_gnugettext" = "yes" \
@@ -11416,57 +9522,28 @@ $as_echo "$LIBINTL" >&6; }
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
 
-      if test "X$x" = "X$element"; then
-        haveit=yes
-        break
-      fi
-    done
-    if test -z "$haveit"; then
-      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
-    fi
-  done
-
-      fi
-
-
-$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
-
-
-$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
-
-    fi
-
-        POSUB=po
-  fi
-
-
-            if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
-      BUILD_INCLUDED_LIBINTL=yes
-    fi
-
-
-
-
-
-        nls_cv_header_intl=
-    nls_cv_header_libgt=
-
-        DATADIRNAME=share
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
 
+      fi
 
-        INSTOBJEXT=.mo
 
+$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
 
-        GENCAT=gencat
 
+$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
 
-        INTLOBJS=
-    if test "$USE_INCLUDED_LIBINTL" = yes; then
-      INTLOBJS="\$(GETTOBJS)"
     fi
 
-
-        INTL_LIBTOOL_SUFFIX_PREFIX=
+        POSUB=po
+  fi
 
 
 
@@ -11584,6 +9661,9 @@ $as_echo "no" >&6; }
 fi
 
 
+
+mkdir_p=$MKDIR_P
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
 $as_echo_n "checking whether ln -s works... " >&6; }
 LN_S=$as_ln_s
@@ -12368,7 +10448,7 @@ fi
 done
 
 fi
-for ac_header in       dirent.h        errno.h         execinfo.h      getopt.h        malloc.h        mntent.h        paths.h         semaphore.h     setjmp.h        signal.h        stdarg.h        stdint.h        stdlib.h        termios.h       termio.h        unistd.h        utime.h         attr/xattr.h    linux/falloc.h  linux/fd.h      linux/major.h   linux/loop.h    net/if_dl.h     netinet/in.h    sys/acl.h       sys/disklabel.h         sys/disk.h      sys/file.h      sys/ioctl.h     sys/key.h       sys/mkdev.h     sys/mman.h      sys/mount.h     sys/prctl.h     sys/resource.h  sys/select.h    sys/socket.h    sys/sockio.h    sys/stat.h      sys/syscall.h   sys/sysctl.h    sys/sysmacros.h         sys/time.h      sys/types.h     sys/un.h        sys/wait.h
+for ac_header in       dirent.h        errno.h         execinfo.h      getopt.h        malloc.h        mntent.h        paths.h         semaphore.h     setjmp.h        signal.h        stdarg.h        stdint.h        stdlib.h        termios.h       termio.h        unistd.h        utime.h         attr/xattr.h    linux/falloc.h  linux/fd.h      linux/fsmap.h   linux/major.h   linux/loop.h    linux/types.h   net/if_dl.h     netinet/in.h    sys/acl.h       sys/disklabel.h         sys/disk.h      sys/file.h      sys/ioctl.h     sys/key.h       sys/mkdev.h     sys/mman.h      sys/mount.h     sys/prctl.h     sys/resource.h  sys/select.h    sys/socket.h    sys/sockio.h    sys/stat.h      sys/syscall.h   sys/sysmacros.h         sys/time.h      sys/types.h     sys/un.h        sys/wait.h      sys/xattr.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"
 
 done
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a dd(1) program that supports iflag=fullblock" >&5
+$as_echo_n "checking for a dd(1) program that supports iflag=fullblock... " >&6; }
+DD=
+for i in dd gdd ; do
+       if "$i" if=/dev/null of=/dev/null count=1 bs=10k 2>/dev/null iflag=fullblock oflag=append ; then
+               DD=$i
+               break
+       fi
+done
+if test -n "$DD" ; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DD" >&5
+$as_echo "$DD" >&6; }
+else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found, using dd" >&5
+$as_echo "not found, using dd" >&6; }
+       DD=dd
+       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No GNU-compatible dd(1) program found, expect some self-test failures." >&5
+$as_echo "$as_me: WARNING: No GNU-compatible dd(1) program found, expect some self-test failures." >&2;}
+fi
+
+
 for ac_header in net/if.h
 do :
   ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "
@@ -13013,12 +11114,13 @@ _ACEOF
 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 ${ac_cv_search_blkid_probe_all+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for blkid_probe_get_topology in -lblkid" >&5
+$as_echo_n "checking for blkid_probe_get_topology in -lblkid... " >&6; }
+if ${ac_cv_lib_blkid_blkid_probe_get_topology+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_func_search_save_LIBS=$LIBS
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lblkid  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -13028,44 +11130,113 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char blkid_probe_all ();
+char blkid_probe_get_topology ();
 int
 main ()
 {
-return blkid_probe_all ();
+return blkid_probe_get_topology ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' blkid; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_blkid_probe_all=$ac_res
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_blkid_blkid_probe_get_topology=yes
+else
+  ac_cv_lib_blkid_blkid_probe_get_topology=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_blkid_probe_all+:} false; then :
-  break
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
-done
-if ${ac_cv_search_blkid_probe_all+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_blkid_blkid_probe_get_topology" >&5
+$as_echo "$ac_cv_lib_blkid_blkid_probe_get_topology" >&6; }
+if test "x$ac_cv_lib_blkid_blkid_probe_get_topology" = xyes; then :
+
+$as_echo "#define HAVE_BLKID_PROBE_GET_TOPOLOGY 1" >>confdefs.h
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for blkid_topology_get_dax in -lblkid" >&5
+$as_echo_n "checking for blkid_topology_get_dax in -lblkid... " >&6; }
+if ${ac_cv_lib_blkid_blkid_topology_get_dax+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lblkid  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char blkid_topology_get_dax ();
+int
+main ()
+{
+return blkid_topology_get_dax ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_blkid_blkid_topology_get_dax=yes
+else
+  ac_cv_lib_blkid_blkid_topology_get_dax=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_blkid_blkid_topology_get_dax" >&5
+$as_echo "$ac_cv_lib_blkid_blkid_topology_get_dax" >&6; }
+if test "x$ac_cv_lib_blkid_blkid_topology_get_dax" = xyes; then :
 
+$as_echo "#define HAVE_BLKID_TOPOLOGY_GET_DAX 1" >>confdefs.h
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for blkid_probe_enable_partitions in -lblkid" >&5
+$as_echo_n "checking for blkid_probe_enable_partitions in -lblkid... " >&6; }
+if ${ac_cv_lib_blkid_blkid_probe_enable_partitions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lblkid  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char blkid_probe_enable_partitions ();
+int
+main ()
+{
+return blkid_probe_enable_partitions ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_blkid_blkid_probe_enable_partitions=yes
 else
-  ac_cv_search_blkid_probe_all=no
+  ac_cv_lib_blkid_blkid_probe_enable_partitions=no
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_blkid_probe_all" >&5
-$as_echo "$ac_cv_search_blkid_probe_all" >&6; }
-ac_res=$ac_cv_search_blkid_probe_all
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_blkid_blkid_probe_enable_partitions" >&5
+$as_echo "$ac_cv_lib_blkid_blkid_probe_enable_partitions" >&6; }
+if test "x$ac_cv_lib_blkid_blkid_probe_enable_partitions" = xyes; then :
+
+$as_echo "#define HAVE_BLKID_PROBE_ENABLE_PARTITIONS 1" >>confdefs.h
 
 fi
 
@@ -13073,7 +11244,7 @@ fi
 if test -n "$DLOPEN_LIB" ; then
    ac_cv_func_dlopen=yes
 fi
-for ac_func in         __secure_getenv         add_key         backtrace       blkid_probe_get_topology        blkid_probe_enable_partitions   chflags         dlopen  fadvise64       fallocate       fallocate64     fchown  fdatasync       fstat64         ftruncate64     futimes         getcwd  getdtablesize   getmntinfo      getpwuid_r      getrlimit       getrusage       jrand48         keyctl  llistxattr      llseek  lseek64         mallinfo        mbstowcs        memalign        mempcpy         mmap    msync   nanosleep       open64  pathconf        posix_fadvise   posix_fadvise64         posix_memalign  prctl   pread   pwrite  pread64         pwrite64        secure_getenv   setmntent       setresgid       setresuid       snprintf        srandom         stpcpy  strcasecmp      strdup  strnlen         strptime        strtoull        sync_file_range         sysconf         usleep  utime   utimes  valloc
+for ac_func in         __secure_getenv         add_key         backtrace       chflags         dlopen  fadvise64       fallocate       fallocate64     fchown  fcntl   fdatasync       fstat64         fsync   ftruncate64     futimes         getcwd  getdtablesize   gethostname     getmntinfo      getpwuid_r      getrlimit       getrusage       jrand48         keyctl  llistxattr      llseek  lseek64         mallinfo        mbstowcs        memalign        mempcpy         mmap    msync   nanosleep       open64  pathconf        posix_fadvise   posix_fadvise64         posix_memalign  prctl   pread   pwrite  pread64         pwrite64        secure_getenv   setmntent       setresgid       setresuid       snprintf        srandom         stpcpy  strcasecmp      strdup  strnlen         strptime        strtoull        sync_file_range         sysconf         usleep  utime   utimes  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"
 
 done
 
-if test -z "$FUSE_CMT"
-then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -losxfuse" >&5
-$as_echo_n "checking for fuse_main in -losxfuse... " >&6; }
-if ${ac_cv_lib_osxfuse_fuse_main+:} false; then :
+if test -z "$FUSE_CMT"
+then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -losxfuse" >&5
+$as_echo_n "checking for fuse_main in -losxfuse... " >&6; }
+if ${ac_cv_lib_osxfuse_fuse_main+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-losxfuse  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fuse_main ();
+int
+main ()
+{
+return fuse_main ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_osxfuse_fuse_main=yes
+else
+  ac_cv_lib_osxfuse_fuse_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_osxfuse_fuse_main" >&5
+$as_echo "$ac_cv_lib_osxfuse_fuse_main" >&6; }
+if test "x$ac_cv_lib_osxfuse_fuse_main" = xyes; then :
+  FUSE_LIB=-losxfuse
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -lfuse" >&5
+$as_echo_n "checking for fuse_main in -lfuse... " >&6; }
+if ${ac_cv_lib_fuse_fuse_main+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfuse  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fuse_main ();
+int
+main ()
+{
+return fuse_main ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_fuse_fuse_main=yes
+else
+  ac_cv_lib_fuse_fuse_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fuse_fuse_main" >&5
+$as_echo "$ac_cv_lib_fuse_fuse_main" >&6; }
+if test "x$ac_cv_lib_fuse_fuse_main" = xyes; then :
+  FUSE_LIB=-lfuse
+else
+  FUSE_CMT="#"
+fi
+
+fi
+
+fi
+if test -z "$FUSE_CMT"
+then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling fuse2fs by default." >&5
+$as_echo "Enabling fuse2fs by default." >&6; }
+fi
+
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for optreset" >&5
+$as_echo_n "checking for optreset... " >&6; }
+if ${ac_cv_have_optreset+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <unistd.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "optreset" >/dev/null 2>&1; then :
+  ac_cv_have_optreset=yes
+else
+  ac_cv_have_optreset=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_optreset" >&5
+$as_echo "$ac_cv_have_optreset" >&6; }
+if test $ac_cv_have_optreset = yes; then
+
+$as_echo "#define HAVE_OPTRESET 1" >>confdefs.h
+
+fi
+
+SEM_INIT_LIB=''
+echo GL_THREADS_API: ${gl_threads_api}
+if test "${gl_threads_api}" != none
+then
+  ac_fn_c_check_func "$LINENO" "sem_init" "ac_cv_func_sem_init"
+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 ${ac_cv_lib_pthread_sem_init+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sem_init ();
+int
+main ()
+{
+return sem_init ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_pthread_sem_init=yes
+else
+  ac_cv_lib_pthread_sem_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+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" = 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 ${ac_cv_lib_rt_sem_init+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-losxfuse  $LIBS"
+LIBS="-lrt  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -13413,36 +11754,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char fuse_main ();
+char sem_init ();
 int
 main ()
 {
-return fuse_main ();
+return sem_init ();
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_osxfuse_fuse_main=yes
+  ac_cv_lib_rt_sem_init=yes
 else
-  ac_cv_lib_osxfuse_fuse_main=no
+  ac_cv_lib_rt_sem_init=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_osxfuse_fuse_main" >&5
-$as_echo "$ac_cv_lib_osxfuse_fuse_main" >&6; }
-if test "x$ac_cv_lib_osxfuse_fuse_main" = xyes; then :
-  FUSE_LIB=-losxfuse
+{ $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" = 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 fuse_main in -lfuse" >&5
-$as_echo_n "checking for fuse_main in -lfuse... " >&6; }
-if ${ac_cv_lib_fuse_fuse_main+:} false; then :
+  { $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 ${ac_cv_lib_posix4_sem_init+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfuse  $LIBS"
+LIBS="-lposix4  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -13452,224 +11795,426 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char fuse_main ();
+char sem_init ();
 int
 main ()
 {
-return fuse_main ();
+return sem_init ();
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_fuse_fuse_main=yes
+  ac_cv_lib_posix4_sem_init=yes
 else
-  ac_cv_lib_fuse_fuse_main=no
+  ac_cv_lib_posix4_sem_init=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fuse_fuse_main" >&5
-$as_echo "$ac_cv_lib_fuse_fuse_main" >&6; }
-if test "x$ac_cv_lib_fuse_fuse_main" = xyes; then :
-  FUSE_LIB=-lfuse
-else
-  FUSE_CMT="#"
+{ $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" = xyes; then :
+  $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h
+
+       SEM_INIT_LIB=-lposix4
+fi
+
 fi
 
 fi
 
 fi
-if test -z "$FUSE_CMT"
-then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling fuse2fs by default." >&5
-$as_echo "Enabling fuse2fs by default." >&6; }
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unified diff option" >&5
+$as_echo_n "checking for unified diff option... " >&6; }
+if diff -u $0 $0 > /dev/null 2>&1 ; then
+   UNI_DIFF_OPTS=-u
+else
+   UNI_DIFF_OPTS=-c
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNI_DIFF_OPTS" >&5
+$as_echo "$UNI_DIFF_OPTS" >&6; }
 
+case "$host_os" in
+linux*)
 
+$as_echo "#define HAVE_EXT2_IOCTLS 1" >>confdefs.h
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for optreset" >&5
-$as_echo_n "checking for optreset... " >&6; }
-if ${ac_cv_have_optreset+:} false; then :
-  $as_echo_n "(cached) " >&6
+       ;;
+esac
+
+    $as_echo_n "checking for mount 'nosuid' option... "
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/mount.h>
+int
+main ()
+{
+void *temp = (void *)(MS_NOSUID); (void) temp;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_MOUNT_NOSUID 1" >>confdefs.h
+
+         ac_cv_mount_nosuid=yes
+         $as_echo "yes"
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <unistd.h>
-
+#include <sys/mount.h>
+int
+main ()
+{
+void *temp = (void *)(MNT_NOSUID); (void) temp;
+  ;
+  return 0;
+}
 _ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "optreset" >/dev/null 2>&1; then :
-  ac_cv_have_optreset=yes
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_MOUNT_NOSUID 1" >>confdefs.h
+
+             ac_cv_mount_nosuid=yes
+             $as_echo "yes"
 else
-  ac_cv_have_optreset=no
+  ac_cv_mount_nosuid=no
+             $as_echo "no"
+
 fi
-rm -f conftest*
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_optreset" >&5
-$as_echo "$ac_cv_have_optreset" >&6; }
-if test $ac_cv_have_optreset = yes; then
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-$as_echo "#define HAVE_OPTRESET 1" >>confdefs.h
+
+    $as_echo_n "checking for mount 'nodev' option... "
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/mount.h>
+int
+main ()
+{
+void *temp = (void *)(MS_NODEV); (void) temp;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_MOUNT_NODEV 1" >>confdefs.h
+
+         ac_cv_mount_nodev=yes
+         $as_echo "yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/mount.h>
+int
+main ()
+{
+void *temp = (void *)(MNT_NODEV); (void) temp;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_MOUNT_NODEV 1" >>confdefs.h
+
+             ac_cv_mount_nodev=yes
+             $as_echo "yes"
+else
+  ac_cv_mount_nodev=no
+             $as_echo "no"
 
 fi
+rm -f core conftest.err conftest.$ac_objext 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" = xyes; then :
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
+# Check whether --enable-lto was given.
+if test "${enable_lto+set}" = set; then :
+  enableval=$enable_lto;
 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 ${ac_cv_lib_pthread_sem_init+:} false; then :
+  enable_lto=no
+fi
+
+if test "$enable_lto" = "yes" || test "$enable_lto" = "probe"; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C compiler supports LTO" >&5
+$as_echo_n "checking if C compiler supports LTO... " >&6; }
+       OLD_CFLAGS="$CFLAGS"
+       OLD_LDFLAGS="$LDFLAGS"
+       LTO_FLAGS="-g -flto -ffat-lto-objects"
+       CFLAGS="$CFLAGS $LTO_FLAGS"
+       LDFLAGS="$LDFLAGS $LTO_FLAGS"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+               lto_cflags=$LTO_FLAGS
+               lto_ldflags=$LTO_FLAGS
+               # Extract the first word of "gcc-ar", so it can be a program name with args.
+set dummy gcc-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 ${ac_cv_path_gcc_ar+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  case $gcc_ar in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_gcc_ar="$gcc_ar" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_gcc_ar="$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
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+gcc_ar=$ac_cv_path_gcc_ar
+if test -n "$gcc_ar"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_ar" >&5
+$as_echo "$gcc_ar" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+               # Extract the first word of "gcc-ranlib", so it can be a program name with args.
+set dummy gcc-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 ${ac_cv_path_gcc_ranlib+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $gcc_ranlib in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_gcc_ranlib="$gcc_ranlib" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_gcc_ranlib="$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
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+gcc_ranlib=$ac_cv_path_gcc_ranlib
+if test -n "$gcc_ranlib"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_ranlib" >&5
+$as_echo "$gcc_ranlib" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+       if test -x "$gcc_ar" && test -x "$gcc_ranlib"; then
+               have_lto=yes
+               AR="${gcc_ar}"
+               RANLIB="${gcc_ranlib}"
+       fi
+       CFLAGS="${OLD_CFLAGS}"
+       LDFLAGS="${OLD_LDFLAGS}"
+
+
+
+fi
+if test "$enable_lto" = "yes" && test "$have_lto" != "yes"; then
+       as_fn_error $? "LTO not supported by compiler." "$LINENO" 5
+fi
+# Check whether --enable-ubsan was given.
+if test "${enable_ubsan+set}" = set; then :
+  enableval=$enable_ubsan;
+else
+  enable_ubsan=no
+fi
+
+if test "$enable_ubsan" = "yes" || test "$enable_ubsan" = "probe"; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C compiler supports UBSAN" >&5
+$as_echo_n "checking if C compiler supports UBSAN... " >&6; }
+       OLD_CFLAGS="$CFLAGS"
+       OLD_LDFLAGS="$LDFLAGS"
+       UBSAN_FLAGS="-fsanitize=undefined"
+       CFLAGS="$CFLAGS $UBSAN_FLAGS"
+       LDFLAGS="$LDFLAGS $UBSAN_FLAGS"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char sem_init ();
 int
 main ()
 {
-return sem_init ();
+
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_pthread_sem_init=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+               ubsan_cflags=$UBSAN_FLAGS
+               ubsan_ldflags=$UBSAN_FLAGS
+               have_ubsan=yes
 else
-  ac_cv_lib_pthread_sem_init=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-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" = xyes; then :
-  $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h
+       CFLAGS="${OLD_CFLAGS}"
+       LDFLAGS="${OLD_LDFLAGS}"
 
-       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 ${ac_cv_lib_rt_sem_init+:} false; then :
-  $as_echo_n "(cached) " >&6
+
+
+fi
+if test "$enable_ubsan" = "yes" && test "$have_ubsan" != "yes"; then
+       as_fn_error $? "UBSAN not supported by compiler." "$LINENO" 5
+fi
+# Check whether --enable-addrsan was given.
+if test "${enable_addrsan+set}" = set; then :
+  enableval=$enable_addrsan;
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lrt  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  enable_addrsan=no
+fi
+
+if test "$enable_addrsan" = "yes" || test "$enable_addrsan" = "probe"; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C compiler supports ADDRSAN" >&5
+$as_echo_n "checking if C compiler supports ADDRSAN... " >&6; }
+       OLD_CFLAGS="$CFLAGS"
+       OLD_LDFLAGS="$LDFLAGS"
+       ADDRSAN_FLAGS="-fsanitize=address"
+       CFLAGS="$CFLAGS $ADDRSAN_FLAGS"
+       LDFLAGS="$LDFLAGS $ADDRSAN_FLAGS"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char sem_init ();
 int
 main ()
 {
-return sem_init ();
+
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_rt_sem_init=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+               addrsan_cflags=$ADDRSAN_FLAGS
+               addrsan_ldflags=$ADDRSAN_FLAGS
+               have_addrsan=yes
 else
-  ac_cv_lib_rt_sem_init=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-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" = xyes; then :
-  $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h
+       CFLAGS="${OLD_CFLAGS}"
+       LDFLAGS="${OLD_LDFLAGS}"
 
-       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 ${ac_cv_lib_posix4_sem_init+:} false; then :
-  $as_echo_n "(cached) " >&6
+
+
+fi
+if test "$enable_addrsan" = "yes" && test "$have_addrsan" != "yes"; then
+       as_fn_error $? "ADDRSAN not supported by compiler." "$LINENO" 5
+fi
+# Check whether --enable-threadsan was given.
+if test "${enable_threadsan+set}" = set; then :
+  enableval=$enable_threadsan;
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lposix4  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  enable_threadsan=no
+fi
+
+if test "$enable_threadsan" = "yes" || test "$enable_threadsan" = "probe"; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C compiler supports THREADSAN" >&5
+$as_echo_n "checking if C compiler supports THREADSAN... " >&6; }
+       OLD_CFLAGS="$CFLAGS"
+       OLD_LDFLAGS="$LDFLAGS"
+       THREADSAN_FLAGS="-fsanitize=thread"
+       CFLAGS="$CFLAGS $THREADSAN_FLAGS"
+       LDFLAGS="$LDFLAGS $THREADSAN_FLAGS"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char sem_init ();
 int
 main ()
 {
-return sem_init ();
+
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_posix4_sem_init=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+               threadsan_cflags=$THREADSAN_FLAGS
+               threadsan_ldflags=$THREADSAN_FLAGS
+               have_threadsan=yes
 else
-  ac_cv_lib_posix4_sem_init=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-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" = xyes; then :
-  $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h
+       CFLAGS="${OLD_CFLAGS}"
+       LDFLAGS="${OLD_LDFLAGS}"
 
-       SEM_INIT_LIB=-lposix4
-fi
 
-fi
 
 fi
-
+if test "$enable_threadsan" = "yes" && test "$have_threadsan" != "yes"; then
+       as_fn_error $? "THREADSAN not supported by compiler." "$LINENO" 5
 fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unified diff option" >&5
-$as_echo_n "checking for unified diff option... " >&6; }
-if diff -u $0 $0 > /dev/null 2>&1 ; then
-   UNI_DIFF_OPTS=-u
-else
-   UNI_DIFF_OPTS=-c
+if test "$have_threadsan" = "yes" && test "$have_addrsan" = "yes"; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ADDRSAN and THREADSAN are not known to work together." >&5
+$as_echo "$as_me: WARNING: ADDRSAN and THREADSAN are not known to work together." >&2;}
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNI_DIFF_OPTS" >&5
-$as_echo "$UNI_DIFF_OPTS" >&6; }
-
-case "$host_os" in
-linux*)
-
-$as_echo "#define HAVE_EXT2_IOCTLS 1" >>confdefs.h
-
-       ;;
-esac
 LINUX_CMT="#"
 CYGWIN_CMT="#"
 UNIX_CMT=
@@ -13685,6 +12230,8 @@ esac
 
 
 
+E2SCRUB_CMT="$LINUX_CMT"
+
 case "$host_os" in
 linux* | gnu* | k*bsd*-gnu)
        if test "$prefix" = NONE -a "$root_prefix" = NONE ; then
@@ -13761,6 +12308,7 @@ else
 fi
 
 fi
+
 { $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 :
@@ -13825,19 +12373,6 @@ if test -n "$WITH_DIET_LIBC" ; then
        INCLUDES="$INCLUDES -D_REENTRANT"
 fi
 
-
-        MKINSTALLDIRS=
-  if test -n "$ac_aux_dir"; then
-    case "$ac_aux_dir" in
-      /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
-      *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
-    esac
-  fi
-  if test -z "$MKINSTALLDIRS"; then
-    MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
-  fi
-
-
 if test $cross_compiling = no; then
    BUILD_CFLAGS="$CFLAGS $CPPFLAGS $INCLUDES -DHAVE_CONFIG_H"
    BUILD_LDFLAGS="$LDFLAGS"
@@ -13850,6 +12385,284 @@ LDFLAGS_SHLIB=${LDFLAGS_SHLIB:-$LDFLAGS}
 
 
 
+
+
+# Check whether --with-udev_rules_dir was given.
+if test "${with_udev_rules_dir+set}" = set; then :
+  withval=$with_udev_rules_dir;
+else
+  with_udev_rules_dir=yes
+fi
+
+if test "x${with_udev_rules_dir}" != "xno"; then :
+
+       if test "x${with_udev_rules_dir}" = "xyes"; then :
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for udev" >&5
+$as_echo_n "checking for udev... " >&6; }
+
+if test -n "$udev_CFLAGS"; then
+    pkg_cv_udev_CFLAGS="$udev_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"udev\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "udev") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_udev_CFLAGS=`$PKG_CONFIG --cflags "udev" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$udev_LIBS"; then
+    pkg_cv_udev_LIBS="$udev_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"udev\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "udev") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_udev_LIBS=`$PKG_CONFIG --libs "udev" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               udev_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "udev" 2>&1`
+        else
+               udev_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "udev" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$udev_PKG_ERRORS" >&5
+
+
+                       with_udev_rules_dir=""
+
+elif test $pkg_failed = untried; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+                       with_udev_rules_dir=""
+
+else
+       udev_CFLAGS=$pkg_cv_udev_CFLAGS
+       udev_LIBS=$pkg_cv_udev_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+                       with_udev_rules_dir="$($PKG_CONFIG --variable=udevdir udev)/rules.d"
+
+fi
+
+fi
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for udev rules dir" >&5
+$as_echo_n "checking for udev rules dir... " >&6; }
+       pkg_udev_rules_dir="${with_udev_rules_dir}"
+       if test -n "${pkg_udev_rules_dir}"; then :
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${pkg_udev_rules_dir}" >&5
+$as_echo "${pkg_udev_rules_dir}" >&6; }
+               have_udev="yes"
+
+else
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+               have_udev="no"
+
+fi
+
+else
+
+       have_udev="disabled"
+
+fi
+
+
+
+
+# Check whether --with-crond_dir was given.
+if test "${with_crond_dir+set}" = set; then :
+  withval=$with_crond_dir;
+else
+  with_crond_dir=yes
+fi
+
+if test "x${with_crond_dir}" != "xno"; then :
+
+       if test "x${with_crond_dir}" = "xyes"; then :
+
+               if test -d "/etc/cron.d"; then :
+  with_crond_dir="/etc/cron.d"
+else
+  have_crond="no"; with_crond_dir=""
+fi
+
+fi
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for system crontab dir" >&5
+$as_echo_n "checking for system crontab dir... " >&6; }
+       crond_dir="${with_crond_dir}"
+       if test -n "${crond_dir}"; then :
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${crond_dir}" >&5
+$as_echo "${crond_dir}" >&6; }
+               have_crond="yes"
+
+else
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+               have_crond="no"
+
+fi
+
+else
+
+       have_crond="disabled"
+
+fi
+
+
+
+
+# Check whether --with-systemd_unit_dir was given.
+if test "${with_systemd_unit_dir+set}" = set; then :
+  withval=$with_systemd_unit_dir;
+else
+  with_systemd_unit_dir=yes
+fi
+
+if test "x${with_systemd_unit_dir}" != "xno"; then :
+
+       if test "x${with_systemd_unit_dir}" = "xyes"; then :
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd" >&5
+$as_echo_n "checking for systemd... " >&6; }
+
+if test -n "$systemd_CFLAGS"; then
+    pkg_cv_systemd_CFLAGS="$systemd_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"systemd\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "systemd") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_systemd_CFLAGS=`$PKG_CONFIG --cflags "systemd" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$systemd_LIBS"; then
+    pkg_cv_systemd_LIBS="$systemd_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"systemd\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "systemd") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_systemd_LIBS=`$PKG_CONFIG --libs "systemd" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               systemd_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "systemd" 2>&1`
+        else
+               systemd_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "systemd" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$systemd_PKG_ERRORS" >&5
+
+
+                       with_systemd_unit_dir=""
+
+elif test $pkg_failed = untried; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+                       with_systemd_unit_dir=""
+
+else
+       systemd_CFLAGS=$pkg_cv_systemd_CFLAGS
+       systemd_LIBS=$pkg_cv_systemd_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+                       with_systemd_unit_dir="$($PKG_CONFIG --variable=systemdsystemunitdir systemd)"
+
+fi
+
+
+fi
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd system unit dir" >&5
+$as_echo_n "checking for systemd system unit dir... " >&6; }
+       systemd_system_unit_dir="${with_systemd_unit_dir}"
+       if test -n "${systemd_system_unit_dir}"; then :
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${systemd_system_unit_dir}" >&5
+$as_echo "${systemd_system_unit_dir}" >&6; }
+               have_systemd="yes"
+
+else
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+               have_systemd="no"
+
+fi
+
+else
+
+       have_systemd="disabled"
+
+fi
+
+
+
 test -d lib || mkdir lib
 test -d include || mkdir include
 test -d include/linux || mkdir include/linux
@@ -13862,7 +12675,7 @@ if test -z "$BLKID_CMT" ; then
        blkid_out_list="lib/blkid/Makefile lib/blkid/blkid.pc \
                lib/blkid/blkid_types.h"
 fi
-for i in MCONFIG Makefile e2fsprogs.spec \
+for i in MCONFIG Makefile \
        util/Makefile util/subst.conf util/gen-tarball util/install-symlink \
        lib/et/Makefile lib/ss/Makefile lib/e2p/Makefile \
        lib/ext2fs/Makefile lib/ext2fs/ext2_types.h \
@@ -13870,8 +12683,7 @@ for i in MCONFIG Makefile e2fsprogs.spec \
        lib/ss/ss.pc lib/et/com_err.pc lib/e2p/e2p.pc lib/ext2fs/ext2fs.pc \
        misc/Makefile ext2ed/Makefile e2fsck/Makefile \
        debugfs/Makefile tests/Makefile tests/progs/Makefile \
-       resize/Makefile doc/Makefile intl/Makefile \
-       intl/libgnuintl.h po/Makefile.in ; do
+       resize/Makefile doc/Makefile po/Makefile.in scrub/Makefile; do
        if test -d `dirname ${srcdir}/$i` ; then
                outlist="$outlist $i"
        fi
@@ -14571,9 +13383,8 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # INIT-COMMANDS
 #
 # Capture the value of obsolete ALL_LINGUAS because we need it to compute
-    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
-    # from automake < 1.5.
-    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS.
+    OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS"
     # Capture the value of LINGUAS because we need it to compute CATALOGS.
     LINGUAS="${LINGUAS-%UNSET%}"
 
@@ -15226,14 +14037,11 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
             if test -n "$OBSOLETE_ALL_LINGUAS"; then
               test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
             fi
-            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
-            # Hide the ALL_LINGUAS assignment from automake < 1.5.
-            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
             POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
           else
             # The set of available languages was given in configure.in.
-            # Hide the ALL_LINGUAS assignment from automake < 1.5.
-            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+            ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS
           fi
           # Compute POFILES
           # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
index 9da7b86..141c4d9 100644 (file)
@@ -11,11 +11,11 @@ dnl This is to figure out the version number and the date....
 dnl
 E2FSPROGS_VERSION=`grep E2FSPROGS_VERSION ${srcdir}/version.h  \
        | awk '{print $3}' | tr \" " " | awk '{print $1}'`
-DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \
-       | tr \" " "`
-E2FSPROGS_DAY=$(echo $DATE | awk -F- '{print $1}' | sed -e '/^[[1-9]]$/s/^/0/')
-MONTH=`echo $DATE | awk -F- '{print $2}'`
-YEAR=`echo $DATE | awk -F- '{print $3}'`
+E2FSPROGS_DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \
+       | tr \" " " | awk '{print $1}'`
+E2FSPROGS_DAY=$(echo $E2FSPROGS_DATE | awk -F- '{print $1}' | sed -e '/^[[1-9]]$/s/^/0/')
+MONTH=`echo $E2FSPROGS_DATE | awk -F- '{print $2}'`
+YEAR=`echo $E2FSPROGS_DATE | awk -F- '{print $3}'`
 
 if expr $YEAR ">" 1900 > /dev/null ; then
        E2FSPROGS_YEAR=$YEAR
@@ -63,6 +63,7 @@ AC_SUBST(E2FSPROGS_MONTH)
 AC_SUBST(E2FSPROGS_DAY)
 AC_SUBST(E2FSPROGS_VERSION)
 AC_SUBST(E2FSPROGS_PKGVER)
+AC_SUBST(E2FSPROGS_DATE)
 dnl
 dnl Use diet libc
 dnl 
@@ -124,8 +125,8 @@ else
 fi
 AC_USE_SYSTEM_EXTENSIONS
 dnl
-dnl Set default values for library extentions.  Will be dealt with after
-dnl parsing configuration opions, which may modify these
+dnl Set default values for library extensions.  Will be dealt with after
+dnl parsing configuration options, which may modify these
 dnl
 LIB_EXT=.a
 STATIC_LIB_EXT=.a
@@ -438,6 +439,27 @@ TEST_IO_CMT=
 )
 AC_SUBST(TEST_IO_CMT)
 dnl
+dnl handle --enable-developer-features
+dnl
+AC_ARG_ENABLE([developer-features],
+[  --enable-developer-features  enable features for use by ext4 developers],
+AH_TEMPLATE([CONFIG_DEVELOPER_FEATURES],
+       [Define to 1 for features for use by ext4 developers])
+if test "$enableval" = "yes"
+then
+       DEV_FEATURES_CMT=
+       AC_DEFINE(CONFIG_DEVELOPER_FEATURES, 1)
+       AC_MSG_RESULT([Enabling ext4 developer features])
+else
+       AC_MSG_RESULT([Disabling ext4 developer features])
+       DEV_FEATURES_CMT="#"
+fi
+,
+AC_MSG_RESULT([Disabling ext4 developer features by default])
+DEV_FEATURES_CMT=
+)
+AC_SUBST(DEV_FEATURES_CMT)
+dnl
 dnl handle --disable-libuuid
 dnl
 PKG_PROG_PKG_CONFIG
@@ -565,6 +587,24 @@ AC_SUBST(PROFILED_LIBBLKID)
 AC_SUBST(DEPPROFILED_LIBBLKID)
 AC_SUBST(BLKID_CMT)
 dnl
+dnl handle --enable-subset
+dnl
+ALL_CMT=
+SUBSET_CMT=
+AC_ARG_ENABLE([subset],
+[  --enable-subset       enable subset-only build],
+if test "$enableval" = "no"
+then
+       SUBSET_CMT=#
+       AC_MSG_RESULT([Disabling subset-only build])
+else
+       ALL_CMT=#
+       AC_MSG_RESULT([Enabling subset-only-build])
+fi
+,)
+AC_SUBST(ALL_CMT)
+AC_SUBST(SUBSET_CMT)
+dnl
 dnl handle --disable-backtrace
 dnl
 AH_TEMPLATE([DISABLE_BACKTRACE], [Define to 1 to disable use of backtrace])
@@ -733,6 +773,30 @@ fi
 dnl
 dnl
 dnl
+AC_ARG_WITH([pthread],
+[  --without-pthread       disable use of pthread support],
+[if test "$withval" = "no"
+then
+       try_pthread=""
+       AC_MSG_RESULT([Disabling pthread support])
+else
+       try_pthread="yes"
+       AC_MSG_RESULT([Testing for pthread support])
+fi]
+,
+try_pthread="yes"
+AC_MSG_RESULT([Try testing for pthread support by default])
+)
+if test "$try_pthread" = "yes"
+then
+AX_PTHREAD
+else
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+AC_SUBST([PTHREAD_CC])
+fi
+dnl
+dnl
+dnl
 AH_TEMPLATE([USE_UUIDD], [Define to 1 to build uuidd])
 AC_ARG_ENABLE([uuidd],
 [  --disable-uuidd         disable building the uuid daemon],
@@ -854,7 +918,7 @@ AC_SUBST(GETTEXT_PACKAGE)
 AC_SUBST(PACKAGE)
 AC_SUBST(VERSION)
 
-AM_GNU_GETTEXT
+AM_GNU_GETTEXT([external])
 dnl
 dnl End of configuration options
 dnl
@@ -862,6 +926,12 @@ AC_SUBST(BINARY_TYPE)
 AC_PROG_MAKE_SET
 CHECK_GNU_MAKE
 AC_PATH_PROG(LN, ln, ln)
+AC_PROG_MKDIR_P
+dnl
+dnl @mkdir_p@ is used by po's Makefile.in
+dnl
+mkdir_p=$MKDIR_P
+AC_SUBST(mkdir_p)
 AC_PROG_LN_S
 AC_PATH_PROG(MV, mv, mv)
 AC_PATH_PROG(CP, cp, cp)
@@ -918,8 +988,10 @@ AC_CHECK_HEADERS(m4_flatten([
        attr/xattr.h
        linux/falloc.h
        linux/fd.h
+       linux/fsmap.h
        linux/major.h
        linux/loop.h
+       linux/types.h
        net/if_dl.h
        netinet/in.h
        sys/acl.h
@@ -938,13 +1010,32 @@ AC_CHECK_HEADERS(m4_flatten([
        sys/sockio.h
        sys/stat.h
        sys/syscall.h
-       sys/sysctl.h
        sys/sysmacros.h
        sys/time.h
        sys/types.h
        sys/un.h
        sys/wait.h
+       sys/xattr.h
 ]))
+dnl Check where to find a dd(1) that supports iflag=fullblock
+dnl and oflag=append
+AC_MSG_CHECKING([for a dd(1) program that supports iflag=fullblock])
+DD=
+for i in dd gdd ; do
+       if "$i" if=/dev/null of=/dev/null count=1 bs=10k 2>/dev/null iflag=fullblock oflag=append ; then
+               DD=$i
+               break
+       fi
+done
+if test -n "$DD" ; then
+       AC_MSG_RESULT([$DD])
+else
+       AC_MSG_RESULT([not found, using dd])
+       DD=dd
+       AC_MSG_WARN([No GNU-compatible dd(1) program found, expect some self-test failures.])
+fi
+AC_SUBST([DD])
+
 AC_CHECK_HEADERS(net/if.h,,,
 [[
 #if HAVE_SYS_TYPES_H
@@ -956,7 +1047,7 @@ AC_CHECK_HEADERS(net/if.h,,,
 ]])
 AC_FUNC_VPRINTF
 dnl Check to see if dirent has member d_reclen. On cygwin those d_reclen
-dnl is not decleared.
+dnl is not declared.
 AC_CHECK_MEMBER(struct dirent.d_reclen,[AC_DEFINE(HAVE_RECLEN_DIRENT, 1,
                       [Define to 1 if dirent has d_reclen])],,
                [#include <dirent.h>])
@@ -1072,11 +1163,19 @@ AC_CHECK_MEMBER(struct sockaddr.sa_len,
        [#include <sys/types.h>
         #include <sys/socket.h>])
 dnl
-dnl This will add -lblkid to the AC_CHECK_FUNCS search if we are using
-dnl the system-provided blkid library
+dnl If we are using the system-provided blkid library, check for
+dnl the functions added after migrating that library to util-linux
 dnl
 if test -n "$BLKID_CMT"; then
-  AC_SEARCH_LIBS([blkid_probe_all], [blkid])
+  AC_CHECK_LIB(blkid, blkid_probe_get_topology,
+                     AC_DEFINE(HAVE_BLKID_PROBE_GET_TOPOLOGY, 1,
+                               [Define to 1 if blkid has blkid_probe_get_topology]))
+  AC_CHECK_LIB(blkid, blkid_topology_get_dax,
+                     AC_DEFINE(HAVE_BLKID_TOPOLOGY_GET_DAX, 1,
+                               [Define to 1 if blkid has blkid_topology_get_dax]))
+  AC_CHECK_LIB(blkid, blkid_probe_enable_partitions,
+                     AC_DEFINE(HAVE_BLKID_PROBE_ENABLE_PARTITIONS, 1,
+                               [Define to 1 if blkid has blkid_probe_enable_partitions]))
 fi
 dnl
 if test -n "$DLOPEN_LIB" ; then
@@ -1086,20 +1185,21 @@ AC_CHECK_FUNCS(m4_flatten([
        __secure_getenv
        add_key
        backtrace
-       blkid_probe_get_topology
-       blkid_probe_enable_partitions
        chflags
        dlopen
        fadvise64
        fallocate
        fallocate64
        fchown
+       fcntl
        fdatasync
        fstat64
+       fsync
        ftruncate64
        futimes
        getcwd
        getdtablesize
+       gethostname
        getmntinfo
        getpwuid_r
        getrlimit
@@ -1235,16 +1335,20 @@ dnl Test for sem_init, and which library it might require:
 dnl
 AH_TEMPLATE([HAVE_SEM_INIT], [Define to 1 if sem_init() exists])
 SEM_INIT_LIB=''
-AC_CHECK_FUNC(sem_init, ,
-  AC_CHECK_LIB(pthread, sem_init,
+echo GL_THREADS_API: ${gl_threads_api}
+if test "${gl_threads_api}" != none
+then
+  AC_CHECK_FUNC(sem_init, ,
+    AC_CHECK_LIB(pthread, sem_init,
        AC_DEFINE(HAVE_SEM_INIT, 1)
        SEM_INIT_LIB=-lpthread,
-  AC_CHECK_LIB(rt, sem_init,
+    AC_CHECK_LIB(rt, sem_init,
        AC_DEFINE(HAVE_SEM_INIT, 1)
        SEM_INIT_LIB=-lrt,
-  AC_CHECK_LIB(posix4, sem_init,
+    AC_CHECK_LIB(posix4, sem_init,
        AC_DEFINE(HAVE_SEM_INIT, 1)
        SEM_INIT_LIB=-lposix4))))dnl
+fi
 AC_SUBST(SEM_INIT_LIB)
 dnl
 dnl Check for unified diff
@@ -1266,6 +1370,131 @@ linux*)
        ;;
 esac
 dnl
+dnl Check the available mount options
+dnl
+AX_CHECK_MOUNT_OPT(nosuid)
+AX_CHECK_MOUNT_OPT(nodev)
+dnl Enable LTO for all packages
+dnl
+AC_ARG_ENABLE([lto],
+[  --enable-lto                  enable link time optimization],,
+enable_lto=no)
+if test "$enable_lto" = "yes" || test "$enable_lto" = "probe"; then
+       AC_MSG_CHECKING([if C compiler supports LTO])
+       OLD_CFLAGS="$CFLAGS"
+       OLD_LDFLAGS="$LDFLAGS"
+       LTO_FLAGS="-g -flto -ffat-lto-objects"
+       CFLAGS="$CFLAGS $LTO_FLAGS"
+       LDFLAGS="$LDFLAGS $LTO_FLAGS"
+       AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
+               [AC_MSG_RESULT([yes])]
+               [lto_cflags=$LTO_FLAGS]
+               [lto_ldflags=$LTO_FLAGS]
+               [AC_PATH_PROG(gcc_ar, gcc-ar,,)]
+               [AC_PATH_PROG(gcc_ranlib, gcc-ranlib,,)],
+               [AC_MSG_RESULT([no])])
+       if test -x "$gcc_ar" && test -x "$gcc_ranlib"; then
+               have_lto=yes
+               AR="${gcc_ar}"
+               RANLIB="${gcc_ranlib}"
+       fi
+       CFLAGS="${OLD_CFLAGS}"
+       LDFLAGS="${OLD_LDFLAGS}"
+       AC_SUBST(have_lto)
+       AC_SUBST(lto_cflags)
+       AC_SUBST(lto_ldflags)
+fi
+if test "$enable_lto" = "yes" && test "$have_lto" != "yes"; then
+       AC_MSG_ERROR([LTO not supported by compiler.])
+fi
+dnl
+dnl Enable UBSAN for all packages
+dnl
+AC_ARG_ENABLE([ubsan],
+[  --enable-ubsan        enable undefined behavior sanitizer],,
+enable_ubsan=no)
+if test "$enable_ubsan" = "yes" || test "$enable_ubsan" = "probe"; then
+       AC_MSG_CHECKING([if C compiler supports UBSAN])
+       OLD_CFLAGS="$CFLAGS"
+       OLD_LDFLAGS="$LDFLAGS"
+       UBSAN_FLAGS="-fsanitize=undefined"
+       CFLAGS="$CFLAGS $UBSAN_FLAGS"
+       LDFLAGS="$LDFLAGS $UBSAN_FLAGS"
+       AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
+               [AC_MSG_RESULT([yes])]
+               [ubsan_cflags=$UBSAN_FLAGS]
+               [ubsan_ldflags=$UBSAN_FLAGS]
+               [have_ubsan=yes],
+               [AC_MSG_RESULT([no])])
+       CFLAGS="${OLD_CFLAGS}"
+       LDFLAGS="${OLD_LDFLAGS}"
+       AC_SUBST(have_ubsan)
+       AC_SUBST(ubsan_cflags)
+       AC_SUBST(ubsan_ldflags)
+fi
+if test "$enable_ubsan" = "yes" && test "$have_ubsan" != "yes"; then
+       AC_MSG_ERROR([UBSAN not supported by compiler.])
+fi
+dnl
+dnl Enable ADDRSAN for all packages
+dnl
+AC_ARG_ENABLE([addrsan],
+[  --enable-addrsan      enable address sanitizer],,
+enable_addrsan=no)
+if test "$enable_addrsan" = "yes" || test "$enable_addrsan" = "probe"; then
+       AC_MSG_CHECKING([if C compiler supports ADDRSAN])
+       OLD_CFLAGS="$CFLAGS"
+       OLD_LDFLAGS="$LDFLAGS"
+       ADDRSAN_FLAGS="-fsanitize=address"
+       CFLAGS="$CFLAGS $ADDRSAN_FLAGS"
+       LDFLAGS="$LDFLAGS $ADDRSAN_FLAGS"
+       AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
+               [AC_MSG_RESULT([yes])]
+               [addrsan_cflags=$ADDRSAN_FLAGS]
+               [addrsan_ldflags=$ADDRSAN_FLAGS]
+               [have_addrsan=yes],
+               [AC_MSG_RESULT([no])])
+       CFLAGS="${OLD_CFLAGS}"
+       LDFLAGS="${OLD_LDFLAGS}"
+       AC_SUBST(have_addrsan)
+       AC_SUBST(addrsan_cflags)
+       AC_SUBST(addrsan_ldflags)
+fi
+if test "$enable_addrsan" = "yes" && test "$have_addrsan" != "yes"; then
+       AC_MSG_ERROR([ADDRSAN not supported by compiler.])
+fi
+dnl
+dnl Enable THREADSAN for all packages
+dnl
+AC_ARG_ENABLE([threadsan],
+[  --enable-threadsan    enable thread sanitizer],,
+enable_threadsan=no)
+if test "$enable_threadsan" = "yes" || test "$enable_threadsan" = "probe"; then
+       AC_MSG_CHECKING([if C compiler supports THREADSAN])
+       OLD_CFLAGS="$CFLAGS"
+       OLD_LDFLAGS="$LDFLAGS"
+       THREADSAN_FLAGS="-fsanitize=thread"
+       CFLAGS="$CFLAGS $THREADSAN_FLAGS"
+       LDFLAGS="$LDFLAGS $THREADSAN_FLAGS"
+       AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
+               [AC_MSG_RESULT([yes])]
+               [threadsan_cflags=$THREADSAN_FLAGS]
+               [threadsan_ldflags=$THREADSAN_FLAGS]
+               [have_threadsan=yes],
+               [AC_MSG_RESULT([no])])
+       CFLAGS="${OLD_CFLAGS}"
+       LDFLAGS="${OLD_LDFLAGS}"
+       AC_SUBST(have_threadsan)
+       AC_SUBST(threadsan_cflags)
+       AC_SUBST(threadsan_ldflags)
+fi
+if test "$enable_threadsan" = "yes" && test "$have_threadsan" != "yes"; then
+       AC_MSG_ERROR([THREADSAN not supported by compiler.])
+fi
+if test "$have_threadsan" = "yes" && test "$have_addrsan" = "yes"; then
+       AC_MSG_WARN([ADDRSAN and THREADSAN are not known to work together.])
+fi
+dnl
 dnl OS-specific uncomment control
 dnl
 LINUX_CMT="#"
@@ -1284,6 +1513,11 @@ AC_SUBST(LINUX_CMT)
 AC_SUBST(CYGWIN_CMT)
 AC_SUBST(UNIX_CMT)
 dnl
+dnl e2scrub only builds on linux
+dnl
+E2SCRUB_CMT="$LINUX_CMT"
+AC_SUBST(E2SCRUB_CMT)
+dnl
 dnl Linux and Hurd places root files in the / by default
 dnl
 case "$host_os" in
@@ -1358,7 +1592,8 @@ else
     libdir=$libdir/$withval
     root_libdir=$root_libdir/$withval
 fi
-)dnl
+)
+dnl
 dnl
 dnl See if -static works.  This could fail if the linker does not
 dnl support -static, or if required external libraries are not available
@@ -1422,7 +1657,6 @@ if test -n "$WITH_DIET_LIBC" ; then
        INCLUDES="$INCLUDES -D_REENTRANT"
 fi
 AC_SUBST(INCLUDES)
-AM_MKINSTALLDIRS
 dnl
 dnl Build CFLAGS
 dnl
@@ -1441,6 +1675,116 @@ LDFLAGS_SHLIB=${LDFLAGS_SHLIB:-$LDFLAGS}
 AC_SUBST(CFLAGS_SHLIB)
 AC_SUBST(CFLAGS_STLIB)
 AC_SUBST(LDFLAGS_SHLIB)
+
+dnl
+dnl Where do udev rules go?
+dnl
+AC_ARG_WITH([udev_rules_dir],
+  [AS_HELP_STRING([--with-udev-rules-dir@<:@=DIR@:>@],
+       [Install udev rules into DIR.])],
+  [],
+  [with_udev_rules_dir=yes])
+AS_IF([test "x${with_udev_rules_dir}" != "xno"],
+  [
+       AS_IF([test "x${with_udev_rules_dir}" = "xyes"],
+         [
+               PKG_CHECK_MODULES([udev], [udev],
+                 [
+                       with_udev_rules_dir="$($PKG_CONFIG --variable=udevdir udev)/rules.d"
+                 ], [
+                       with_udev_rules_dir=""
+                 ])
+         ])
+       AC_MSG_CHECKING([for udev rules dir])
+       pkg_udev_rules_dir="${with_udev_rules_dir}"
+       AS_IF([test -n "${pkg_udev_rules_dir}"],
+         [
+               AC_MSG_RESULT(${pkg_udev_rules_dir})
+               have_udev="yes"
+         ],
+         [
+               AC_MSG_RESULT(no)
+               have_udev="no"
+         ])
+  ],
+  [
+       have_udev="disabled"
+  ])
+AC_SUBST(have_udev)
+AC_SUBST(pkg_udev_rules_dir)
+
+dnl
+dnl Where do cron jobs go?
+dnl
+AC_ARG_WITH([crond_dir],
+  [AS_HELP_STRING([--with-crond-dir@<:@=DIR@:>@],
+       [Install system crontabs into DIR.])],
+  [],
+  [with_crond_dir=yes])
+AS_IF([test "x${with_crond_dir}" != "xno"],
+  [
+       AS_IF([test "x${with_crond_dir}" = "xyes"],
+         [
+               AS_IF([test -d "/etc/cron.d"],
+                 [with_crond_dir="/etc/cron.d"],
+                 [have_crond="no"; with_crond_dir=""])
+         ])
+       AC_MSG_CHECKING([for system crontab dir])
+       crond_dir="${with_crond_dir}"
+       AS_IF([test -n "${crond_dir}"],
+         [
+               AC_MSG_RESULT(${crond_dir})
+               have_crond="yes"
+         ],
+         [
+               AC_MSG_RESULT(no)
+               have_crond="no"
+         ])
+  ],
+  [
+       have_crond="disabled"
+  ])
+AC_SUBST(have_crond)
+AC_SUBST(crond_dir)
+
+dnl
+dnl Where do systemd services go?
+dnl
+AC_ARG_WITH([systemd_unit_dir],
+  [AS_HELP_STRING([--with-systemd-unit-dir@<:@=DIR@:>@],
+       [Install systemd system units into DIR.])],
+  [],
+  [with_systemd_unit_dir=yes])
+AS_IF([test "x${with_systemd_unit_dir}" != "xno"],
+  [
+       AS_IF([test "x${with_systemd_unit_dir}" = "xyes"],
+         [
+               PKG_CHECK_MODULES([systemd], [systemd],
+                 [
+                       with_systemd_unit_dir="$($PKG_CONFIG --variable=systemdsystemunitdir systemd)"
+                 ], [
+                       with_systemd_unit_dir=""
+                 ])
+               m4_pattern_allow([^PKG_(MAJOR|MINOR|BUILD|REVISION)$])
+         ])
+       AC_MSG_CHECKING([for systemd system unit dir])
+       systemd_system_unit_dir="${with_systemd_unit_dir}"
+       AS_IF([test -n "${systemd_system_unit_dir}"],
+         [
+               AC_MSG_RESULT(${systemd_system_unit_dir})
+               have_systemd="yes"
+         ],
+         [
+               AC_MSG_RESULT(no)
+               have_systemd="no"
+         ])
+  ],
+  [
+       have_systemd="disabled"
+  ])
+AC_SUBST(have_systemd)
+AC_SUBST(systemd_system_unit_dir)
+
 dnl
 dnl Make our output files, being sure that we create the some miscellaneous 
 dnl directories
@@ -1457,7 +1801,7 @@ if test -z "$BLKID_CMT" ; then
        blkid_out_list="lib/blkid/Makefile lib/blkid/blkid.pc \
                lib/blkid/blkid_types.h"
 fi
-for i in MCONFIG Makefile e2fsprogs.spec \
+for i in MCONFIG Makefile \
        util/Makefile util/subst.conf util/gen-tarball util/install-symlink \
        lib/et/Makefile lib/ss/Makefile lib/e2p/Makefile \
        lib/ext2fs/Makefile lib/ext2fs/ext2_types.h \
@@ -1465,8 +1809,7 @@ for i in MCONFIG Makefile e2fsprogs.spec \
        lib/ss/ss.pc lib/et/com_err.pc lib/e2p/e2p.pc lib/ext2fs/ext2fs.pc \
        misc/Makefile ext2ed/Makefile e2fsck/Makefile \
        debugfs/Makefile tests/Makefile tests/progs/Makefile \
-       resize/Makefile doc/Makefile intl/Makefile \
-       intl/libgnuintl.h po/Makefile.in ; do
+       resize/Makefile doc/Makefile po/Makefile.in scrub/Makefile; do
        if test -d `dirname ${srcdir}/$i` ; then
                outlist="$outlist $i"
        fi
diff --git a/contrib/Android.bp b/contrib/Android.bp
new file mode 100644 (file)
index 0000000..8bde657
--- /dev/null
@@ -0,0 +1,19 @@
+// Copyright 2017 The Android Open Source Project
+
+subdirs = ["android"]
+
+//########################################################################
+// Build add_ext4_encrypt
+
+cc_binary {
+    name: "add_ext4_encrypt",
+    host_supported: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: ["add_ext4_encrypt.c"],
+    shared_libs: [
+        "libext2fs",
+        "libext2_com_err",
+    ],
+    system_shared_libs: ["libc", "libdl"],
+}
diff --git a/contrib/Android.mk b/contrib/Android.mk
deleted file mode 100644 (file)
index f8d74c3..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-###########################################################################
-# Build fsstress
-#
-fsstress_src_files := \
-       fsstress.c
-
-fsstress_c_includes := 
-
-fsstress_cflags := -O2 -g -W -Wall
-
-fsstress_shared_libraries := 
-
-fsstress_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(fsstress_src_files)
-mke2fs_c_includesLOCAL_CFLAGS := $(fsstress_cflags)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(fsstress_system_shared_libraries)
-LOCAL_MODULE := fsstress
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(fsstress_src_files)
-LOCAL_CFLAGS := $(fsstress_cflags)
-LOCAL_MODULE := fsstress_host
-LOCAL_MODULE_STEM := fsstress
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_HOST_OS := linux
-
-include $(BUILD_HOST_EXECUTABLE)
-
-#########################################################################
-# Build add_ext4_encrypt
-#
-include $(CLEAR_VARS)
-
-add_ext4_encrypt_src_files := \
-       add_ext4_encrypt.c
-
-add_ext4_encrypt_c_includes := \
-       external/e2fsprogs/lib
-
-add_ext4_encrypt_cflags := -O2 -g -W -Wall
-
-add_ext4_encrypt_shared_libraries := \
-       libext2fs \
-       libext2_com_err
-
-add_ext4_encrypt_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(add_ext4_encrypt_src_files)
-LOCAL_C_INCLUDES := $(add_ext4_encrypt_c_includes)
-LOCAL_CFLAGS := $(add_ext4_encrypt_cflags)
-LOCAL_SHARED_LIBRARIES := $(add_ext4_encrypt_shared_libraries)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(add_ext4_encrypt_system_shared_libraries)
-LOCAL_MODULE := add_ext4_encrypt
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(add_ext4_encrypt_src_files)
-LOCAL_C_INCLUDES := $(add_ext4_encrypt_c_includes)
-LOCAL_CFLAGS := $(add_ext4_encrypt_cflags)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(add_ext4_encrypt_shared_libraries))
-LOCAL_MODULE := add_ext4_encrypt_host
-LOCAL_MODULE_STEM := add_ext4_encrypt
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_EXECUTABLE)
-
index d4e7c8c..133fe25 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Basic progam to add ext4 encryption to a file system
+ * Basic program to add ext4 encryption to a file system
  *
  * Copyright 2015, Google, Inc.
  *
diff --git a/contrib/android/Android.bp b/contrib/android/Android.bp
new file mode 100644 (file)
index 0000000..b1fd0da
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright 2017 The Android Open Source Project
+
+//##########################################################################
+// Build e2fsdroid
+
+cc_binary {
+    name: "e2fsdroid",
+    host_supported: true,
+    recovery_available: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: [
+        "e2fsdroid.c",
+        "block_range.c",
+        "fsmap.c",
+        "block_list.c",
+        "base_fs.c",
+        "perms.c",
+        "basefs_allocator.c",
+    ],
+    target: {
+        host: {
+            static_libs: [
+                "libext2_com_err",
+                "libext2_misc",
+                "libext2fs",
+                "libsparse",
+                "libz",
+                "libcutils",
+                "libbase",
+                "libselinux",
+                "libcrypto",
+                "liblog",
+            ],
+            sanitize: {
+                address: false,  // http://b/68387795 - heap overflow in e2fsdroid
+            },
+        },
+        android: {
+            shared_libs: [
+                "libext2fs",
+                "libext2_com_err",
+                "libext2_misc",
+                "libcutils",
+                "libbase",
+                "libselinux",
+                "libcrypto",
+            ],
+        },
+    },
+    stl: "libc++_static",
+}
+
+//##########################################################################
+// Build ext2simg
+
+cc_binary {
+    name: "ext2simg",
+    host_supported: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: ["ext2simg.c"],
+    shared_libs: [
+        "libext2fs",
+        "libext2_com_err",
+        "libsparse",
+        "libz",
+    ],
+}
diff --git a/contrib/android/base_fs.c b/contrib/android/base_fs.c
new file mode 100644 (file)
index 0000000..652317e
--- /dev/null
@@ -0,0 +1,205 @@
+#include "base_fs.h"
+#include <stdio.h>
+
+#define BASE_FS_VERSION "Base EXT4 version 1.0"
+
+struct base_fs {
+       FILE *file;
+       const char *mountpoint;
+       struct basefs_entry entry;
+};
+
+static FILE *basefs_open(const char *file)
+{
+       char *line = NULL;
+       size_t len;
+       FILE *f = fopen(file, "r");
+       if (!f)
+               return NULL;
+
+       if (getline(&line, &len, f) == -1 || !line)
+               goto err_getline;
+
+       if (strncmp(line, BASE_FS_VERSION, strlen(BASE_FS_VERSION)))
+               goto err_header;
+
+       free(line);
+       return f;
+
+err_header:
+       free(line);
+err_getline:
+       fclose(f);
+       return NULL;
+}
+
+static struct basefs_entry *basefs_readline(FILE *f, const char *mountpoint,
+                                           int *err)
+{
+       char *line = NULL, *saveptr1, *saveptr2, *block_range, *block;
+       int offset;
+       size_t len;
+       struct basefs_entry *entry = NULL;
+       blk64_t range_start, range_end;
+
+       if (getline(&line, &len, f) == -1) {
+               if (feof(f))
+                       goto end;
+               goto err_getline;
+       }
+
+       entry = calloc(1, sizeof(*entry));
+       if (!entry)
+               goto err_alloc;
+
+       /*
+        * With BASEFS version 1.0, a typical line looks like this:
+        * /bin/mke2fs 5000-5004,8000,9000-9990
+        */
+       if (sscanf(line, "%ms%n", &entry->path, &offset) != 1)
+               goto err_sscanf;
+       len = strlen(mountpoint);
+       memmove(entry->path, entry->path + len, strlen(entry->path) - len + 1);
+
+       while (line[offset] == ' ')
+               ++offset;
+
+       block_range = strtok_r(line + offset, ",\n", &saveptr1);
+       while (block_range) {
+               block = strtok_r(block_range, "-", &saveptr2);
+               if (!block)
+                       break;
+               range_start = atoll(block);
+               block = strtok_r(NULL, "-", &saveptr2);
+               range_end = block ? atoll(block) : range_start;
+               add_blocks_to_range(&entry->blocks, range_start, range_end);
+               block_range = strtok_r(NULL, ",\n", &saveptr1);
+       }
+end:
+       *err = 0;
+       free(line);
+       return entry;
+
+err_sscanf:
+       free(entry);
+err_alloc:
+       free(line);
+err_getline:
+       *err = 1;
+       return NULL;
+}
+
+static void free_base_fs_entry(void *e)
+{
+       struct basefs_entry *entry = e;
+       if (entry) {
+               free(entry->path);
+               free(entry);
+       }
+}
+
+struct ext2fs_hashmap *basefs_parse(const char *file, const char *mountpoint)
+{
+       int err;
+       struct ext2fs_hashmap *entries = NULL;
+       struct basefs_entry *entry;
+       FILE *f = basefs_open(file);
+       if (!f)
+               return NULL;
+       entries = ext2fs_hashmap_create(ext2fs_djb2_hash, free_base_fs_entry, 1024);
+       if (!entries)
+               goto end;
+
+       while ((entry = basefs_readline(f, mountpoint, &err)))
+               ext2fs_hashmap_add(entries, entry, entry->path,
+                                  strlen(entry->path));
+
+       if (err) {
+               fclose(f);
+               ext2fs_hashmap_free(entries);
+               return NULL;
+       }
+end:
+       fclose(f);
+       return entries;
+}
+
+static void *init(const char *file, const char *mountpoint)
+{
+       struct base_fs *params = malloc(sizeof(*params));
+
+       if (!params)
+               return NULL;
+       params->mountpoint = mountpoint;
+       params->file = fopen(file, "w+");
+       if (!params->file) {
+               free(params);
+               return NULL;
+       }
+       if (fwrite(BASE_FS_VERSION"\n", 1, strlen(BASE_FS_VERSION"\n"),
+                  params->file) != strlen(BASE_FS_VERSION"\n")) {
+               fclose(params->file);
+               free(params);
+               return NULL;
+       }
+       return params;
+}
+
+static int start_new_file(char *path, ext2_ino_t ino EXT2FS_ATTR((unused)),
+                         struct ext2_inode *inode, void *data)
+{
+       struct base_fs *params = data;
+
+       params->entry.path = LINUX_S_ISREG(inode->i_mode) ? path : NULL;
+       return 0;
+}
+
+static int add_block(ext2_filsys fs EXT2FS_ATTR((unused)), blk64_t blocknr,
+                    int metadata, void *data)
+{
+       struct base_fs *params = data;
+
+       if (params->entry.path && !metadata)
+               add_blocks_to_range(&params->entry.blocks, blocknr, blocknr);
+       return 0;
+}
+
+static int inline_data(void *inline_data EXT2FS_ATTR((unused)),
+                      void *data EXT2FS_ATTR((unused)))
+{
+       return 0;
+}
+
+static int end_new_file(void *data)
+{
+       struct base_fs *params = data;
+
+       if (!params->entry.path)
+               return 0;
+       if (fprintf(params->file, "%s%s ", params->mountpoint,
+                   params->entry.path) < 0
+           || write_block_ranges(params->file, params->entry.blocks.head, ",")
+           || fwrite("\n", 1, 1, params->file) != 1)
+               return -1;
+
+       delete_block_ranges(&params->entry.blocks);
+       return 0;
+}
+
+static int cleanup(void *data)
+{
+       struct base_fs *params = data;
+
+       fclose(params->file);
+       free(params);
+       return 0;
+}
+
+struct fsmap_format base_fs_format = {
+       .init = init,
+       .start_new_file = start_new_file,
+       .add_block = add_block,
+       .inline_data = inline_data,
+       .end_new_file = end_new_file,
+       .cleanup = cleanup,
+};
diff --git a/contrib/android/base_fs.h b/contrib/android/base_fs.h
new file mode 100644 (file)
index 0000000..f53f1ed
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef BASE_FS_H
+# define BASE_FS_H
+
+# include "fsmap.h"
+# include "hashmap.h"
+# include "block_range.h"
+
+struct basefs_entry {
+       char *path;
+       struct block_range_list blocks;
+};
+
+extern struct fsmap_format base_fs_format;
+
+struct ext2fs_hashmap *basefs_parse(const char *file, const char *mountpoint);
+
+#endif /* !BASE_FS_H */
diff --git a/contrib/android/basefs_allocator.c b/contrib/android/basefs_allocator.c
new file mode 100644 (file)
index 0000000..5c92ddc
--- /dev/null
@@ -0,0 +1,367 @@
+#include <limits.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "basefs_allocator.h"
+#include "block_range.h"
+#include "hashmap.h"
+#include "base_fs.h"
+
+struct base_fs_allocator {
+       struct ext2fs_hashmap *entries;
+       struct basefs_entry *cur_entry;
+       /* The next expected logical block to allocate for cur_entry. */
+       blk64_t next_lblk;
+       /* Blocks which are definitely owned by a single inode in BaseFS. */
+       ext2fs_block_bitmap exclusive_block_map;
+       /* Blocks which are available to the first inode that requests it. */
+       ext2fs_block_bitmap dedup_block_map;
+};
+
+static errcode_t basefs_block_allocator(ext2_filsys, blk64_t, blk64_t *,
+                                       struct blk_alloc_ctx *ctx);
+
+/*
+ * Free any reserved, but unconsumed block ranges in the allocator. This both
+ * frees the block_range_list data structure and unreserves exclusive blocks
+ * from the block map.
+ */
+static void fs_free_blocks_range(ext2_filsys fs,
+                                struct base_fs_allocator *allocator,
+                                struct block_range_list *list)
+{
+       ext2fs_block_bitmap exclusive_map = allocator->exclusive_block_map;
+
+       blk64_t block;
+       while (list->head) {
+               block = consume_next_block(list);
+               if (ext2fs_test_block_bitmap2(exclusive_map, block)) {
+                       ext2fs_unmark_block_bitmap2(fs->block_map, block);
+                       ext2fs_unmark_block_bitmap2(exclusive_map, block);
+               }
+       }
+}
+
+/*
+ * Free any blocks in the bitmap that were reserved but never used. This is
+ * needed to free dedup_block_map and ensure the free block bitmap is
+ * internally consistent.
+ */
+static void fs_free_blocks_bitmap(ext2_filsys fs, ext2fs_block_bitmap bitmap)
+{
+       blk64_t block = 0;
+       blk64_t start = fs->super->s_first_data_block;
+       blk64_t end = ext2fs_blocks_count(fs->super) - 1;
+       errcode_t retval;
+
+       for (;;) {
+               retval = ext2fs_find_first_set_block_bitmap2(bitmap, start, end,
+                       &block);
+               if (retval)
+                       break;
+               ext2fs_unmark_block_bitmap2(fs->block_map, block);
+               start = block + 1;
+       }
+}
+
+static void basefs_allocator_free(ext2_filsys fs,
+                                 struct base_fs_allocator *allocator)
+{
+       struct basefs_entry *e;
+       struct ext2fs_hashmap_entry *it = NULL;
+       struct ext2fs_hashmap *entries = allocator->entries;
+
+       if (entries) {
+               while ((e = ext2fs_hashmap_iter_in_order(entries, &it))) {
+                       fs_free_blocks_range(fs, allocator, &e->blocks);
+                       delete_block_ranges(&e->blocks);
+               }
+               ext2fs_hashmap_free(entries);
+       }
+       fs_free_blocks_bitmap(fs, allocator->dedup_block_map);
+       ext2fs_free_block_bitmap(allocator->exclusive_block_map);
+       ext2fs_free_block_bitmap(allocator->dedup_block_map);
+       free(allocator);
+}
+
+/*
+ * Build a bitmap of which blocks are definitely owned by exactly one file in
+ * Base FS. Blocks which are not valid or are de-duplicated are skipped. This
+ * is called during allocator initialization, to ensure that libext2fs does
+ * not allocate which we want to re-use.
+ *
+ * If a block was allocated in the initial filesystem, it can never be re-used,
+ * so it will appear in neither the exclusive or dedup set. If a block is used
+ * by multiple files, it will be removed from the owned set and instead added
+ * to the dedup set.
+ *
+ * The dedup set is not removed from fs->block_map. This allows us to re-use
+ * dedup blocks separately and not have them be allocated outside of file data.
+ */
+static void fs_reserve_block(ext2_filsys fs,
+                            struct base_fs_allocator *allocator,
+                            blk64_t block)
+{
+       ext2fs_block_bitmap exclusive_map = allocator->exclusive_block_map;
+       ext2fs_block_bitmap dedup_map = allocator->dedup_block_map;
+
+       if (block >= ext2fs_blocks_count(fs->super))
+               return;
+
+       if (ext2fs_test_block_bitmap2(fs->block_map, block)) {
+               if (!ext2fs_test_block_bitmap2(exclusive_map, block))
+                       return;
+               ext2fs_unmark_block_bitmap2(exclusive_map, block);
+               ext2fs_mark_block_bitmap2(dedup_map, block);
+       } else {
+               ext2fs_mark_block_bitmap2(fs->block_map, block);
+               ext2fs_mark_block_bitmap2(exclusive_map, block);
+       }
+}
+
+static void fs_reserve_blocks_range(ext2_filsys fs,
+                                   struct base_fs_allocator *allocator,
+                                   struct block_range_list *list)
+{
+       blk64_t block;
+       struct block_range *blocks = list->head;
+
+       while (blocks) {
+               for (block = blocks->start; block <= blocks->end; block++)
+                       fs_reserve_block(fs, allocator, block);
+               blocks = blocks->next;
+       }
+}
+
+/*
+ * For each file in the base FS map, ensure that its blocks are reserved in
+ * the actual block map. This prevents libext2fs from allocating them for
+ * general purpose use, and ensures that if the file needs data blocks, they
+ * can be re-acquired exclusively for that file.
+ *
+ * If a file in the base map is missing, or not a regular file in the new
+ * filesystem, then it's skipped to ensure that its blocks are reusable.
+ */
+static errcode_t fs_reserve_blocks(ext2_filsys fs,
+                             struct base_fs_allocator *allocator,
+                             const char *src_dir)
+{
+       int nbytes;
+       char full_path[PATH_MAX];
+       const char *sep = "/";
+       struct stat st;
+       struct basefs_entry *e;
+       struct ext2fs_hashmap_entry *it = NULL;
+       struct ext2fs_hashmap *entries = allocator->entries;
+
+       if (strlen(src_dir) && src_dir[strlen(src_dir) - 1] == '/')
+               sep = "";
+
+       while ((e = ext2fs_hashmap_iter_in_order(entries, &it))) {
+               nbytes = snprintf(full_path, sizeof(full_path), "%s%s%s",
+                       src_dir, sep, e->path);
+               if (nbytes >= sizeof(full_path))
+                       return ENAMETOOLONG;
+               if (lstat(full_path, &st) || !S_ISREG(st.st_mode))
+                       continue;
+               fs_reserve_blocks_range(fs, allocator, &e->blocks);
+       }
+       return 0;
+}
+
+errcode_t base_fs_alloc_load(ext2_filsys fs, const char *file,
+                            const char *mountpoint, const char *src_dir)
+{
+       errcode_t retval = 0;
+       struct base_fs_allocator *allocator;
+
+       allocator = calloc(1, sizeof(*allocator));
+       if (!allocator) {
+               retval = ENOMEM;
+               goto out;
+       }
+
+       retval = ext2fs_read_bitmaps(fs);
+       if (retval)
+               goto err_load;
+
+       allocator->cur_entry = NULL;
+       allocator->entries = basefs_parse(file, mountpoint);
+       if (!allocator->entries) {
+               retval = EIO;
+               goto err_load;
+       }
+       retval = ext2fs_allocate_block_bitmap(fs, "exclusive map",
+               &allocator->exclusive_block_map);
+       if (retval)
+               goto err_load;
+       retval = ext2fs_allocate_block_bitmap(fs, "dedup map",
+               &allocator->dedup_block_map);
+       if (retval)
+               goto err_load;
+
+       retval = fs_reserve_blocks(fs, allocator, src_dir);
+       if (retval)
+               goto err_load;
+
+       /* Override the default allocator */
+       fs->get_alloc_block2 = basefs_block_allocator;
+       fs->priv_data = allocator;
+
+       goto out;
+
+err_load:
+       basefs_allocator_free(fs, allocator);
+out:
+       return retval;
+}
+
+/* Try and acquire the next usable block from the Base FS map. */
+static errcode_t get_next_block(ext2_filsys fs, struct base_fs_allocator *allocator,
+                               struct block_range_list* list, blk64_t *ret)
+{
+       blk64_t block;
+       ext2fs_block_bitmap exclusive_map = allocator->exclusive_block_map;
+       ext2fs_block_bitmap dedup_map = allocator->dedup_block_map;
+
+       if (!list->head)
+               return EXT2_ET_BLOCK_ALLOC_FAIL;
+
+       block = consume_next_block(list);
+       if (block >= ext2fs_blocks_count(fs->super))
+               return EXT2_ET_BLOCK_ALLOC_FAIL;
+       if (ext2fs_test_block_bitmap2(exclusive_map, block)) {
+               ext2fs_unmark_block_bitmap2(exclusive_map, block);
+               *ret = block;
+               return 0;
+       }
+       if (ext2fs_test_block_bitmap2(dedup_map, block)) {
+               ext2fs_unmark_block_bitmap2(dedup_map, block);
+               *ret = block;
+               return 0;
+       }
+       return EXT2_ET_BLOCK_ALLOC_FAIL;
+}
+
+/*
+ * BaseFS lists blocks in logical block order. However, the allocator hook is
+ * only called if a block needs to be allocated. In the case of a deduplicated
+ * block, or a hole, the hook is not invoked. This means the next block
+ * allocation request will be out of sequence. For example, consider if BaseFS
+ * specifies the following (0 being a hole):
+ *     1 2 3 0 4 5
+ *
+ * If the new file has a hole at logical block 0, we could accidentally
+ * shift the entire expected block list as follows:
+ *     0 1 2 0 3 4
+ *
+ * To account for this, we track the next expected logical block in the
+ * allocator. If the current request is for a later logical block, we skip and
+ * free the intermediate physical blocks that would have been allocated. This
+ * ensures the original block assignment is respected.
+ */
+static void skip_blocks(ext2_filsys fs, struct base_fs_allocator *allocator,
+                       struct blk_alloc_ctx *ctx)
+{
+       blk64_t block;
+       struct block_range_list *list = &allocator->cur_entry->blocks;
+       ext2fs_block_bitmap exclusive_map = allocator->exclusive_block_map;
+
+       while (list->head && allocator->next_lblk < ctx->lblk) {
+               block = consume_next_block(list);
+               if (block >= ext2fs_blocks_count(fs->super))
+                       continue;
+               if (ext2fs_test_block_bitmap2(exclusive_map, block)) {
+                       ext2fs_unmark_block_bitmap2(exclusive_map, block);
+                       ext2fs_unmark_block_bitmap2(fs->block_map, block);
+               }
+               allocator->next_lblk++;
+       }
+}
+
+static errcode_t basefs_block_allocator(ext2_filsys fs, blk64_t goal,
+                                       blk64_t *ret, struct blk_alloc_ctx *ctx)
+{
+       errcode_t retval;
+       struct base_fs_allocator *allocator = fs->priv_data;
+       struct basefs_entry *e = allocator->cur_entry;
+       ext2fs_block_bitmap dedup_map = allocator->dedup_block_map;
+
+       if (e && ctx && (ctx->flags & BLOCK_ALLOC_DATA)) {
+               if (allocator->next_lblk < ctx->lblk)
+                       skip_blocks(fs, allocator, ctx);
+               allocator->next_lblk = ctx->lblk + 1;
+
+               if (!get_next_block(fs, allocator, &e->blocks, ret))
+                       return 0;
+       }
+
+       retval = ext2fs_new_block2(fs, goal, fs->block_map, ret);
+       if (!retval) {
+               ext2fs_mark_block_bitmap2(fs->block_map, *ret);
+               return 0;
+       }
+       if (retval != EXT2_ET_BLOCK_ALLOC_FAIL)
+               return retval;
+
+       /* Try to steal a block from the dedup pool. */
+       retval = ext2fs_find_first_set_block_bitmap2(dedup_map,
+               fs->super->s_first_data_block,
+               ext2fs_blocks_count(fs->super) - 1, ret);
+       if (!retval) {
+               ext2fs_unmark_block_bitmap2(dedup_map, *ret);
+               return 0;
+       }
+
+       /*
+        * As a last resort, take any block from our file's list. This
+        * risks bloating the diff, but means we are more likely to
+        * successfully build an image.
+        */
+       while (e->blocks.head) {
+               if (!get_next_block(fs, allocator, &e->blocks, ret))
+                       return 0;
+       }
+       return EXT2_ET_BLOCK_ALLOC_FAIL;
+}
+
+void base_fs_alloc_cleanup(ext2_filsys fs)
+{
+       basefs_allocator_free(fs, fs->priv_data);
+       fs->priv_data = NULL;
+       fs->get_alloc_block2 = NULL;
+}
+
+errcode_t base_fs_alloc_set_target(ext2_filsys fs, const char *target_path,
+       const char *name EXT2FS_ATTR((unused)),
+       ext2_ino_t parent_ino EXT2FS_ATTR((unused)),
+       ext2_ino_t root EXT2FS_ATTR((unused)), mode_t mode)
+{
+       struct base_fs_allocator *allocator = fs->priv_data;
+
+       if (mode != S_IFREG)
+               return 0;
+
+       if (allocator) {
+               allocator->cur_entry = ext2fs_hashmap_lookup(allocator->entries,
+                                                     target_path,
+                                                     strlen(target_path));
+               allocator->next_lblk = 0;
+       }
+       return 0;
+}
+
+errcode_t base_fs_alloc_unset_target(ext2_filsys fs,
+        const char *target_path EXT2FS_ATTR((unused)),
+       const char *name EXT2FS_ATTR((unused)),
+       ext2_ino_t parent_ino EXT2FS_ATTR((unused)),
+       ext2_ino_t root EXT2FS_ATTR((unused)), mode_t mode)
+{
+       struct base_fs_allocator *allocator = fs->priv_data;
+
+       if (!allocator || !allocator->cur_entry || mode != S_IFREG)
+               return 0;
+
+       fs_free_blocks_range(fs, allocator, &allocator->cur_entry->blocks);
+       delete_block_ranges(&allocator->cur_entry->blocks);
+       return 0;
+}
diff --git a/contrib/android/basefs_allocator.h b/contrib/android/basefs_allocator.h
new file mode 100644 (file)
index 0000000..6d1c65e
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef BASE_FS_ALLOCATOR_H
+# define BASE_FS_ALLOCATOR_H
+
+# include <time.h>
+# include <ext2fs/ext2fs.h>
+
+errcode_t base_fs_alloc_load(ext2_filsys fs, const char *file,
+                            const char *mountpoint, const char *src_dir);
+void base_fs_alloc_cleanup(ext2_filsys fs);
+
+errcode_t base_fs_alloc_set_target(ext2_filsys fs, const char *target_path,
+       const char *name, ext2_ino_t parent_ino, ext2_ino_t root, mode_t mode);
+errcode_t base_fs_alloc_unset_target(ext2_filsys fs, const char *target_path,
+       const char *name, ext2_ino_t parent_ino, ext2_ino_t root, mode_t mode);
+
+#endif /* !BASE_FS_ALLOCATOR_H */
diff --git a/contrib/android/block_list.c b/contrib/android/block_list.c
new file mode 100644 (file)
index 0000000..63cc1a2
--- /dev/null
@@ -0,0 +1,89 @@
+#include "block_list.h"
+#include "block_range.h"
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+struct block_list {
+       FILE *f;
+       const char *mountpoint;
+
+       const char *filename;
+       struct block_range_list blocks;
+};
+
+static void *init(const char *file, const char *mountpoint)
+{
+       struct block_list *params = calloc(1, sizeof(*params));
+
+       if (!params)
+               return NULL;
+       params->mountpoint = mountpoint;
+       params->f = fopen(file, "w+");
+       if (!params->f) {
+               free(params);
+               return NULL;
+       }
+       return params;
+}
+
+static int start_new_file(char *path, ext2_ino_t ino EXT2FS_ATTR((unused)),
+                         struct ext2_inode *inode EXT2FS_ATTR((unused)),
+                         void *data)
+{
+       struct block_list *params = data;
+
+       params->filename = LINUX_S_ISREG(inode->i_mode) ? path : NULL;
+       return 0;
+}
+
+static int add_block(ext2_filsys fs EXT2FS_ATTR((unused)), blk64_t blocknr,
+                    int metadata, void *data)
+{
+       struct block_list *params = data;
+
+       if (params->filename && !metadata)
+               add_blocks_to_range(&params->blocks, blocknr, blocknr);
+       return 0;
+}
+
+static int inline_data(void *inline_data EXT2FS_ATTR((unused)),
+                      void *data EXT2FS_ATTR((unused)))
+{
+       return 0;
+}
+
+static int end_new_file(void *data)
+{
+       struct block_list *params = data;
+
+       if (!params->filename || !params->blocks.head)
+               return 0;
+       if (fprintf(params->f, "%s%s ", params->mountpoint,
+                   params->filename) < 0
+           || write_block_ranges(params->f, params->blocks.head, " ")
+           || fwrite("\n", 1, 1, params->f) != 1)
+               return -1;
+
+       delete_block_ranges(&params->blocks);
+       return 0;
+}
+
+static int cleanup(void *data)
+{
+       struct block_list *params = data;
+
+       fclose(params->f);
+       free(params);
+       return 0;
+}
+
+struct fsmap_format block_list_format = {
+       .init = init,
+       .start_new_file = start_new_file,
+       .add_block = add_block,
+       .inline_data = inline_data,
+       .end_new_file = end_new_file,
+       .cleanup = cleanup,
+};
diff --git a/contrib/android/block_list.h b/contrib/android/block_list.h
new file mode 100644 (file)
index 0000000..47041e4
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef BLOCK_LIST_H
+# define BLOCK_LIST_H
+
+# include "fsmap.h"
+
+extern struct fsmap_format block_list_format;
+
+#endif /* !BLOCK_LIST_H */
diff --git a/contrib/android/block_range.c b/contrib/android/block_range.c
new file mode 100644 (file)
index 0000000..0a06882
--- /dev/null
@@ -0,0 +1,80 @@
+#define _GNU_SOURCE
+
+#include "block_range.h"
+#include <stdio.h>
+
+struct block_range *new_block_range(blk64_t start, blk64_t end)
+{
+       struct block_range *range = malloc(sizeof(*range));
+       range->start = start;
+       range->end = end;
+       range->next = NULL;
+       return range;
+}
+
+void add_blocks_to_range(struct block_range_list *list, blk64_t blk_start,
+                        blk64_t blk_end)
+{
+       if (list->head == NULL)
+               list->head = list->tail = new_block_range(blk_start, blk_end);
+       else if (list->tail->end + 1 == blk_start)
+               list->tail->end += (blk_end - blk_start + 1);
+       else {
+               struct block_range *range = new_block_range(blk_start, blk_end);
+               list->tail->next = range;
+               list->tail = range;
+       }
+}
+
+static void remove_head(struct block_range_list *list)
+{
+       struct block_range *next_range = list->head->next;
+
+       free(list->head);
+       if (next_range == NULL)
+               list->head = list->tail = NULL;
+       else
+               list->head = next_range;
+}
+
+void delete_block_ranges(struct block_range_list *list)
+{
+       while (list->head)
+               remove_head(list);
+}
+
+int write_block_ranges(FILE *f, struct block_range *range,
+                                    char *sep)
+{
+       int len;
+       char *buf;
+
+       while (range) {
+               if (range->start == range->end)
+                       len = asprintf(&buf, "%llu%s", range->start, sep);
+               else
+                       len = asprintf(&buf, "%llu-%llu%s", range->start,
+                                      range->end, sep);
+               if (fwrite(buf, 1, len, f) != (size_t)len) {
+                       free(buf);
+                       return -1;
+               }
+               free(buf);
+               range = range->next;
+       }
+
+       len = strlen(sep);
+       if (fseek(f, -len, SEEK_CUR) == -len)
+               return -1;
+       return 0;
+}
+
+blk64_t consume_next_block(struct block_range_list *list)
+{
+       blk64_t ret = list->head->start;
+
+       list->head->start += 1;
+       if (list->head->start > list->head->end)
+               remove_head(list);
+       return ret;
+}
diff --git a/contrib/android/block_range.h b/contrib/android/block_range.h
new file mode 100644 (file)
index 0000000..cf7971e
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef BLOCK_RANGE_H
+# define BLOCK_RANGE_H
+
+# include <sys/types.h>
+# include <ext2fs/ext2fs.h>
+
+struct block_range {
+       blk64_t start;
+       blk64_t end;
+       struct block_range *next;
+};
+
+struct block_range_list {
+       struct block_range *head;
+       struct block_range *tail;
+};
+
+void add_blocks_to_range(struct block_range_list *list, blk64_t blk_start,
+                        blk64_t blk_end);
+void delete_block_ranges(struct block_range_list *list);
+int write_block_ranges(FILE *f, struct block_range *range, char *sep);
+
+/*
+ * Given a non-empty range list, return the next block and remove it from the
+ * list.
+ */
+blk64_t consume_next_block(struct block_range_list *list);
+
+#endif /* !BLOCK_RANGE_H */
diff --git a/contrib/android/e2fsdroid.c b/contrib/android/e2fsdroid.c
new file mode 100644 (file)
index 0000000..f5d24b8
--- /dev/null
@@ -0,0 +1,377 @@
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <getopt.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+#include <ext2fs/ext2fs.h>
+
+#include "perms.h"
+#include "base_fs.h"
+#include "block_list.h"
+#include "basefs_allocator.h"
+#include "create_inode.h"
+
+#ifndef UID_GID_MAP_MAX_EXTENTS
+/*
+ * The value is defined in linux/user_namspace.h.
+ * The value is (arbitrarily) 5 in 4.14 and earlier, or 340 in 4.15 and later.
+ * Here, the bigger value is taken. See also man user_namespace(7).
+ */
+#define UID_GID_MAP_MAX_EXTENTS 340
+#endif
+
+static char *prog_name = "e2fsdroid";
+static char *in_file;
+static char *block_list;
+static char *basefs_out;
+static char *basefs_in;
+static char *mountpoint = "";
+static time_t fixed_time = -1;
+static char *fs_config_file;
+static struct selinux_opt seopt_file[8];
+static int max_nr_opt = (int)sizeof(seopt_file) / sizeof(seopt_file[0]);
+static char *product_out;
+static char *src_dir;
+static int android_configure;
+static int android_sparse_file = 1;
+
+static void usage(int ret)
+{
+       fprintf(stderr, "%s [-B block_list] [-D basefs_out] [-T timestamp]\n"
+                       "\t[-C fs_config] [-S file_contexts] [-p product_out]\n"
+                       "\t[-a mountpoint] [-d basefs_in] [-f src_dir] [-e] [-s]\n"
+                       "\t[-u uid-mapping] [-g gid-mapping] image\n",
+                prog_name);
+       exit(ret);
+}
+
+static char *absolute_path(const char *file)
+{
+       char *ret;
+       char cwd[PATH_MAX];
+
+       if (file[0] != '/') {
+               if (getcwd(cwd, PATH_MAX) == NULL) {
+                       fprintf(stderr, "Failed to getcwd\n");
+                       exit(EXIT_FAILURE);
+               }
+               ret = malloc(strlen(cwd) + 1 + strlen(file) + 1);
+               if (ret)
+                       sprintf(ret, "%s/%s", cwd, file);
+       } else
+               ret = strdup(file);
+       return ret;
+}
+
+static int parse_ugid_map_entry(char* line, struct ugid_map_entry* result)
+{
+       char *token, *token_saveptr;
+       size_t num_tokens;
+       unsigned int *parsed[] = {&result->child_id,
+                                 &result->parent_id,
+                                 &result->length};
+       for (token = strtok_r(line, " ", &token_saveptr), num_tokens = 0;
+            token && num_tokens < 3;
+            token = strtok_r(NULL, " ", &token_saveptr), ++num_tokens) {
+               char* endptr = NULL;
+               unsigned long t = strtoul(token, &endptr, 10);
+               if ((t == ULONG_MAX && errno) || (t > UINT_MAX) || *endptr) {
+                       fprintf(stderr, "Malformed u/gid mapping line\n");
+                       return 0;
+               }
+               *parsed[num_tokens] = (unsigned int) t;
+       }
+       if (num_tokens < 3 || strtok_r(NULL, " ", &token_saveptr) != NULL) {
+               fprintf(stderr, "Malformed u/gid mapping line\n");
+               return 0;
+       }
+       if (result->child_id + result->length < result->child_id ||
+           result->parent_id + result->length < result->parent_id) {
+               fprintf(stderr, "u/gid mapping overflow\n");
+               return 0;
+       }
+       return 1;
+}
+
+/*
+ * Returns 1 if [begin1, begin1+length1) and [begin2, begin2+length2) have
+ * overlapping range. Otherwise 0.
+ */
+static int is_overlapping(unsigned int begin1, unsigned int length1,
+                         unsigned int begin2, unsigned int length2)
+{
+       unsigned int end1 = begin1 + length1;
+       unsigned int end2 = begin2 + length2;
+       return !(end1 <= begin2 || end2 <= begin1);
+}
+
+/*
+ * Verifies if the given mapping works.
+ * - Checks if the number of entries is less than or equals to
+ *   UID_GID_MAP_MAX_EXTENTS.
+ * - Checks if there is no overlapped ranges.
+ * Returns 1 if valid, otherwise 0.
+ */
+static int is_valid_ugid_map(const struct ugid_map* mapping)
+{
+       size_t i, j;
+
+       if (mapping->size > UID_GID_MAP_MAX_EXTENTS) {
+               fprintf(stderr, "too many u/gid mapping entries\n");
+               return 0;
+       }
+
+       for (i = 0; i < mapping->size; ++i) {
+               const struct ugid_map_entry *entry1 = &mapping->entries[i];
+               for (j = i + 1; j < mapping->size; ++j) {
+                       const struct ugid_map_entry *entry2 =
+                               &mapping->entries[j];
+                       if (is_overlapping(entry1->child_id, entry1->length,
+                                          entry2->child_id, entry2->length)) {
+                               fprintf(stderr,
+                                       "Overlapping child u/gid: [%d %d %d],"
+                                       " [%d %d %d]\n",
+                                       entry1->child_id, entry1->parent_id,
+                                       entry1->length, entry2->child_id,
+                                       entry2->parent_id, entry2->length);
+                               return 0;
+                       }
+                       if (is_overlapping(entry1->parent_id, entry1->length,
+                                          entry2->parent_id, entry2->length)) {
+                               fprintf(stderr,
+                                       "Overlapping parent u/gid: [%d %d %d],"
+                                       " [%d %d %d]\n",
+                                       entry1->child_id, entry1->parent_id,
+                                       entry1->length, entry2->child_id,
+                                       entry2->parent_id, entry2->length);
+                               return 0;
+                       }
+               }
+       }
+       return 1;
+}
+
+/*
+ * Parses the UID/GID mapping argument. The argument could be a multi-line
+ * string (separated by '\n', no trailing '\n' is allowed). Each line must
+ * contain exact three integer tokens; the first token is |child_id|,
+ * the second is |parent_id|, and the last is |length| of the mapping range.
+ * See also user_namespace(7) man page.
+ * On success, the parsed entries are stored in |result|, and it returns 1.
+ * Otherwise, returns 0.
+ */
+static int parse_ugid_map(char* arg, struct ugid_map* result)
+{
+       int i;
+       char *line, *line_saveptr;
+       size_t current_index;
+
+       /* Count the number of lines. */
+       result->size = 1;
+       for (i = 0; arg[i]; ++i) {
+               if (arg[i] == '\n')
+                       ++result->size;
+       }
+
+       /* Allocate memory for entries. */
+       result->entries = malloc(sizeof(struct ugid_map_entry) * result->size);
+       if (!result->entries) {
+               result->size = 0;
+               return 0;
+       }
+
+       /* Parse each line */
+       for (line = strtok_r(arg, "\n", &line_saveptr), current_index = 0;
+            line;
+            line = strtok_r(NULL, "\n", &line_saveptr), ++current_index) {
+               if (!parse_ugid_map_entry(
+                       line, &result->entries[current_index])) {
+                       return 0;
+               }
+       }
+
+       return is_valid_ugid_map(result);
+}
+
+int main(int argc, char *argv[])
+{
+       int c;
+       char *p;
+       int flags = EXT2_FLAG_RW;
+       errcode_t retval;
+       io_manager io_mgr;
+       ext2_filsys fs = NULL;
+       struct fs_ops_callbacks fs_callbacks = { NULL, NULL };
+       char *token;
+       int nr_opt = 0;
+       ext2_ino_t inodes_count;
+       ext2_ino_t free_inodes_count;
+       blk64_t blocks_count;
+       blk64_t free_blocks_count;
+       struct ugid_map uid_map = { 0, NULL }, gid_map = { 0, NULL };
+
+       add_error_table(&et_ext2_error_table);
+
+       while ((c = getopt (argc, argv, "T:C:S:p:a:D:d:B:f:esu:g:")) != EOF) {
+               switch (c) {
+               case 'T':
+                       fixed_time = strtoul(optarg, &p, 0);
+                       android_configure = 1;
+                       break;
+               case 'C':
+                       fs_config_file = absolute_path(optarg);
+                       android_configure = 1;
+                       break;
+               case 'S':
+                       token = strtok(optarg, ",");
+                       while (token) {
+                               if (nr_opt == max_nr_opt) {
+                                       fprintf(stderr, "Expected at most %d selinux opts\n",
+                                               max_nr_opt);
+                                       exit(EXIT_FAILURE);
+                               }
+                               seopt_file[nr_opt].type = SELABEL_OPT_PATH;
+                               seopt_file[nr_opt].value = absolute_path(token);
+                               nr_opt++;
+                               token = strtok(NULL, ",");
+                       }
+                       android_configure = 1;
+                       break;
+               case 'p':
+                       product_out = absolute_path(optarg);
+                       android_configure = 1;
+                       break;
+               case 'a':
+                       mountpoint = strdup(optarg);
+                       break;
+               case 'D':
+                       basefs_out = absolute_path(optarg);
+                       break;
+               case 'd':
+                       basefs_in = absolute_path(optarg);
+                       break;
+               case 'B':
+                       block_list = absolute_path(optarg);
+                       break;
+               case 'f':
+                       src_dir = absolute_path(optarg);
+                       break;
+               case 'e':
+                       android_sparse_file = 0;
+                       break;
+               case 's':
+                       flags |= EXT2_FLAG_SHARE_DUP;
+                       break;
+               case 'u':
+                       if (!parse_ugid_map(optarg, &uid_map))
+                               exit(EXIT_FAILURE);
+                       android_configure = 1;
+                       break;
+               case 'g':
+                       if (!parse_ugid_map(optarg, &gid_map))
+                               exit(EXIT_FAILURE);
+                       android_configure = 1;
+                       break;
+               default:
+                       usage(EXIT_FAILURE);
+               }
+       }
+       if (optind >= argc) {
+               fprintf(stderr, "Expected filename after options\n");
+               exit(EXIT_FAILURE);
+       }
+
+       if (android_sparse_file) {
+               io_mgr = sparse_io_manager;
+               if (asprintf(&in_file, "(%s)", argv[optind]) == -1) {
+                       fprintf(stderr, "Failed to allocate file name\n");
+                       exit(EXIT_FAILURE);
+               }
+       } else {
+               io_mgr = unix_io_manager;
+               in_file = strdup(argv[optind]);
+       }
+       retval = ext2fs_open(in_file, flags, 0, 0, io_mgr, &fs);
+       if (retval) {
+               com_err(prog_name, retval, "while opening file %s\n", in_file);
+               return retval;
+       }
+
+       if (src_dir) {
+               ext2fs_read_bitmaps(fs);
+               if (basefs_in) {
+                       retval = base_fs_alloc_load(fs, basefs_in, mountpoint,
+                               src_dir);
+                       if (retval) {
+                               com_err(prog_name, retval, "%s",
+                               "while reading base_fs file");
+                           exit(1);
+                       }
+                       fs_callbacks.create_new_inode =
+                               base_fs_alloc_set_target;
+                       fs_callbacks.end_create_new_inode =
+                               base_fs_alloc_unset_target;
+               }
+               retval = populate_fs2(fs, EXT2_ROOT_INO, src_dir,
+                                     EXT2_ROOT_INO, &fs_callbacks);
+               if (retval) {
+                       com_err(prog_name, retval, "%s",
+                       "while populating file system");
+                   exit(1);
+               }
+               if (basefs_in)
+                       base_fs_alloc_cleanup(fs);
+       }
+
+       if (android_configure) {
+               retval = android_configure_fs(
+                       fs, src_dir, product_out, mountpoint, seopt_file,
+                       nr_opt, fs_config_file, fixed_time, &uid_map, &gid_map);
+               if (retval) {
+                       com_err(prog_name, retval, "%s",
+                               "while configuring the file system");
+                       exit(1);
+               }
+       }
+
+       if (block_list) {
+               retval = fsmap_iter_filsys(fs, &block_list_format, block_list,
+                                          mountpoint);
+               if (retval) {
+                       com_err(prog_name, retval, "%s",
+                               "while creating the block_list");
+                       exit(1);
+               }
+       }
+
+       if (basefs_out) {
+               retval = fsmap_iter_filsys(fs, &base_fs_format,
+                                          basefs_out, mountpoint);
+               if (retval) {
+                       com_err(prog_name, retval, "%s",
+                               "while creating the basefs file");
+                       exit(1);
+               }
+       }
+
+       inodes_count = fs->super->s_inodes_count;
+       free_inodes_count = fs->super->s_free_inodes_count;
+       blocks_count = ext2fs_blocks_count(fs->super);
+       free_blocks_count = ext2fs_free_blocks_count(fs->super);
+
+       retval = ext2fs_close_free(&fs);
+       if (retval) {
+               com_err(prog_name, retval, "%s",
+                               "while writing superblocks");
+               exit(1);
+       }
+
+       printf("Created filesystem with %u/%u inodes and %llu/%llu blocks\n",
+                       inodes_count - free_inodes_count, inodes_count,
+                       blocks_count - free_blocks_count, blocks_count);
+
+       remove_error_table(&et_ext2_error_table);
+       return 0;
+}
diff --git a/contrib/android/ext2simg.c b/contrib/android/ext2simg.c
new file mode 100644 (file)
index 0000000..017e16f
--- /dev/null
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <libgen.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <ext2fs/ext2fs.h>
+#include <et/com_err.h>
+#include <sparse/sparse.h>
+
+struct {
+       int     crc;
+       int     sparse;
+       int     gzip;
+       char    *in_file;
+       char    *out_file;
+       bool    overwrite_input;
+} params = {
+       .crc        = 0,
+       .sparse     = 1,
+       .gzip       = 0,
+};
+
+#define ext2fs_fatal(Retval, Format, ...) \
+       do { \
+               com_err("error", Retval, Format, __VA_ARGS__); \
+               exit(EXIT_FAILURE); \
+       } while(0)
+
+#define sparse_fatal(Format) \
+       do { \
+               fprintf(stderr, "sparse: "Format); \
+               exit(EXIT_FAILURE); \
+       } while(0)
+
+static void usage(char *path)
+{
+       char *progname = basename(path);
+
+       fprintf(stderr, "%s [ options ] <image or block device> <output image>\n"
+                       "  -c include CRC block\n"
+                       "  -z gzip output\n"
+                       "  -S don't use sparse output format\n", progname);
+}
+
+static struct buf_item {
+       struct buf_item     *next;
+       void                *buf[0];
+} *buf_list;
+
+static void add_chunk(ext2_filsys fs, struct sparse_file *s, blk_t chunk_start, blk_t chunk_end)
+{
+       int retval;
+       unsigned int nb_blk = chunk_end - chunk_start;
+       size_t len = nb_blk * fs->blocksize;
+       int64_t offset = (int64_t)chunk_start * (int64_t)fs->blocksize;
+
+       if (params.overwrite_input == false) {
+               if (sparse_file_add_file(s, params.in_file, offset, len, chunk_start) < 0)
+                       sparse_fatal("adding data to the sparse file");
+       } else {
+               /*
+                * The input file will be overwritten, make a copy of
+                * the blocks
+                */
+               struct buf_item *bi = calloc(1, sizeof(struct buf_item) + len);
+               if (buf_list == NULL)
+                       buf_list = bi;
+               else {
+                       bi->next = buf_list;
+                       buf_list = bi;
+               }
+
+               retval = io_channel_read_blk64(fs->io, chunk_start, nb_blk, bi->buf);
+               if (retval < 0)
+                       ext2fs_fatal(retval, "reading block %u - %u", chunk_start, chunk_end);
+
+               if (sparse_file_add_data(s, bi->buf, len, chunk_start) < 0)
+                       sparse_fatal("adding data to the sparse file");
+       }
+}
+
+static void free_chunks(void)
+{
+       struct buf_item *bi;
+
+       while (buf_list) {
+               bi = buf_list->next;
+               free(buf_list);
+               buf_list = bi;
+       }
+}
+
+static struct sparse_file *ext_to_sparse(const char *in_file)
+{
+       errcode_t retval;
+       ext2_filsys fs;
+       struct sparse_file *s;
+       int64_t chunk_start = -1;
+       blk_t first_blk, last_blk, nb_blk, cur_blk;
+
+       retval = ext2fs_open(in_file, 0, 0, 0, unix_io_manager, &fs);
+       if (retval)
+               ext2fs_fatal(retval, "while reading %s", in_file);
+
+       retval = ext2fs_read_block_bitmap(fs);
+       if (retval)
+               ext2fs_fatal(retval, "while reading block bitmap of %s", in_file);
+
+       first_blk = ext2fs_get_block_bitmap_start2(fs->block_map);
+       last_blk = ext2fs_get_block_bitmap_end2(fs->block_map);
+       nb_blk = last_blk - first_blk + 1;
+
+       s = sparse_file_new(fs->blocksize, (uint64_t)fs->blocksize * (uint64_t)nb_blk);
+       if (!s)
+               sparse_fatal("creating sparse file");
+
+       /*
+        * The sparse format encodes the size of a chunk (and its header) in a
+        * 32-bit unsigned integer (UINT32_MAX)
+        * When writing the chunk, the library uses a single call to write().
+        * Linux's implementation of the 'write' syscall does not allow transfers
+        * larger than INT32_MAX (32-bit _and_ 64-bit systems).
+        * Make sure we do not create chunks larger than this limit.
+        */
+       int64_t max_blk_per_chunk = (INT32_MAX - 12) / fs->blocksize;
+
+       /* Iter on the blocks to merge contiguous chunk */
+       for (cur_blk = first_blk; cur_blk <= last_blk; ++cur_blk) {
+               if (ext2fs_test_block_bitmap2(fs->block_map, cur_blk)) {
+                       if (chunk_start == -1) {
+                               chunk_start = cur_blk;
+                       } else if (cur_blk - chunk_start + 1 == max_blk_per_chunk) {
+                               add_chunk(fs, s, chunk_start, cur_blk);
+                               chunk_start = -1;
+                       }
+               } else if (chunk_start != -1) {
+                       add_chunk(fs, s, chunk_start, cur_blk);
+                       chunk_start = -1;
+               }
+       }
+       if (chunk_start != -1)
+               add_chunk(fs, s, chunk_start, cur_blk - 1);
+
+       ext2fs_free(fs);
+       return s;
+}
+
+static bool same_file(const char *in, const char *out)
+{
+       struct stat st1, st2;
+
+       if (access(out, F_OK) == -1)
+               return false;
+
+       if (lstat(in, &st1) == -1)
+               ext2fs_fatal(errno, "stat %s\n", in);
+       if (lstat(out, &st2) == -1)
+               ext2fs_fatal(errno, "stat %s\n", out);
+       return st1.st_ino == st2.st_ino;
+}
+
+int main(int argc, char *argv[])
+{
+       int opt;
+       int out_fd;
+       struct sparse_file *s;
+
+       while ((opt = getopt(argc, argv, "czS")) != -1) {
+               switch(opt) {
+               case 'c':
+                       params.crc = 1;
+                       break;
+               case 'z':
+                       params.gzip = 1;
+                       break;
+               case 'S':
+                       params.sparse = 0;
+                       break;
+               default:
+                       usage(argv[0]);
+                       exit(EXIT_FAILURE);
+               }
+       }
+       if (optind + 1 >= argc) {
+               usage(argv[0]);
+               exit(EXIT_FAILURE);
+       }
+       params.in_file = strdup(argv[optind++]);
+       params.out_file = strdup(argv[optind]);
+       params.overwrite_input = same_file(params.in_file, params.out_file);
+
+       s = ext_to_sparse(params.in_file);
+
+       out_fd = open(params.out_file, O_WRONLY | O_CREAT | O_TRUNC, 0664);
+       if (out_fd == -1)
+               ext2fs_fatal(errno, "opening %s\n", params.out_file);
+       if (sparse_file_write(s, out_fd, params.gzip, params.sparse, params.crc) < 0)
+               sparse_fatal("writing sparse file");
+
+       sparse_file_destroy(s);
+
+       free(params.in_file);
+       free(params.out_file);
+       free_chunks();
+       close(out_fd);
+
+       return 0;
+}
diff --git a/contrib/android/fsmap.c b/contrib/android/fsmap.c
new file mode 100644 (file)
index 0000000..9ee8472
--- /dev/null
@@ -0,0 +1,169 @@
+#include "fsmap.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include "support/nls-enable.h"
+
+struct walk_ext_priv_data {
+       char                    *path;
+       ext2_filsys             fs;
+       struct fsmap_format     *format;
+};
+
+static int walk_block(ext2_filsys fs  EXT2FS_ATTR((unused)), blk64_t *blocknr,
+                     e2_blkcnt_t blockcnt,
+                     blk64_t ref64_blk EXT2FS_ATTR((unused)),
+                     int ref_offset EXT2FS_ATTR((unused)),
+                     void *priv)
+{
+       struct walk_ext_priv_data *pdata = priv;
+       struct fsmap_format *format = pdata->format;
+
+       return format->add_block(fs, *blocknr, blockcnt < 0, format->private);
+}
+
+static errcode_t ino_iter_extents(ext2_filsys fs, ext2_ino_t ino,
+                                 ext2_extent_handle_t extents,
+                                 struct walk_ext_priv_data *pdata)
+{
+       blk64_t block;
+       errcode_t retval;
+       blk64_t next_lblk = 0;
+       int op = EXT2_EXTENT_ROOT;
+       struct ext2fs_extent extent;
+       struct fsmap_format *format = pdata->format;
+
+       for (;;) {
+               retval = ext2fs_extent_get(extents, op, &extent);
+               if (retval)
+                       break;
+
+               op = EXT2_EXTENT_NEXT;
+
+               if ((extent.e_flags & EXT2_EXTENT_FLAGS_SECOND_VISIT) ||
+                   !(extent.e_flags & EXT2_EXTENT_FLAGS_LEAF))
+                       continue;
+
+               for (; next_lblk < extent.e_lblk; next_lblk++)
+                       format->add_block(fs, 0, 0, format->private);
+
+               block = extent.e_pblk;
+               for (; next_lblk < extent.e_lblk + extent.e_len; next_lblk++)
+                       format->add_block(fs, block++, 0, format->private);
+       }
+
+       if (retval == EXT2_ET_EXTENT_NO_NEXT)
+               retval = 0;
+       if (retval) {
+               com_err(__func__, retval, ("getting extents of ino \"%u\""),
+                       ino);
+       }
+       return retval;
+}
+
+static errcode_t ino_iter_blocks(ext2_filsys fs, ext2_ino_t ino,
+                                struct walk_ext_priv_data *pdata)
+{
+       errcode_t retval;
+       struct ext2_inode inode;
+       ext2_extent_handle_t extents;
+       struct fsmap_format *format = pdata->format;
+
+       retval = ext2fs_read_inode(fs, ino, &inode);
+       if (retval)
+               return retval;
+
+       if (!ext2fs_inode_has_valid_blocks2(fs, &inode))
+               return format->inline_data(&(inode.i_block[0]),
+                                          format->private);
+
+       retval = ext2fs_extent_open(fs, ino, &extents);
+       if (retval == EXT2_ET_INODE_NOT_EXTENT) {
+               retval = ext2fs_block_iterate3(fs, ino, BLOCK_FLAG_READ_ONLY,
+                       NULL, walk_block, pdata);
+               if (retval) {
+                       com_err(__func__, retval, _("listing blocks of ino \"%u\""),
+                               ino);
+               }
+               return retval;
+       }
+
+       retval = ino_iter_extents(fs, ino, extents, pdata);
+
+       ext2fs_extent_free(extents);
+       return retval;
+}
+
+static int is_dir(ext2_filsys fs, ext2_ino_t ino)
+{
+       struct ext2_inode inode;
+
+       if (ext2fs_read_inode(fs, ino, &inode))
+               return 0;
+       return S_ISDIR(inode.i_mode);
+}
+
+static int walk_ext_dir(ext2_ino_t dir EXT2FS_ATTR((unused)),
+                       int flags EXT2FS_ATTR((unused)),
+                       struct ext2_dir_entry *de,
+                       int offset EXT2FS_ATTR((unused)),
+                       int blocksize EXT2FS_ATTR((unused)),
+                       char *buf EXT2FS_ATTR((unused)), void *priv_data)
+{
+       errcode_t retval;
+       struct ext2_inode inode;
+       char *filename, *cur_path, *name = de->name;
+       int name_len = de->name_len & 0xff;
+       struct walk_ext_priv_data *pdata = priv_data;
+       struct fsmap_format *format = pdata->format;
+
+       if (!strncmp(name, ".", name_len)
+           || !strncmp(name, "..", name_len)
+           || !strncmp(name, "lost+found", 10))
+               return 0;
+
+       if (asprintf(&filename, "%s/%.*s", pdata->path, name_len, name) < 0)
+               return -ENOMEM;
+
+       retval = ext2fs_read_inode(pdata->fs, de->inode, &inode);
+       if (retval) {
+               com_err(__func__, retval, _("reading ino \"%u\""), de->inode);
+               goto end;
+       }
+       format->start_new_file(filename, de->inode, &inode, format->private);
+       retval = ino_iter_blocks(pdata->fs, de->inode, pdata);
+       if (retval)
+               return retval;
+       format->end_new_file(format->private);
+
+       retval = 0;
+       if (is_dir(pdata->fs, de->inode)) {
+               cur_path = pdata->path;
+               pdata->path = filename;
+               retval = ext2fs_dir_iterate2(pdata->fs, de->inode, 0, NULL,
+                                   walk_ext_dir, pdata);
+               pdata->path = cur_path;
+       }
+
+end:
+       free(filename);
+       return retval;
+}
+
+errcode_t fsmap_iter_filsys(ext2_filsys fs, struct fsmap_format *format,
+                           const char *file, const char *mountpoint)
+{
+       struct walk_ext_priv_data pdata;
+       errcode_t retval;
+
+       format->private = format->init(file, mountpoint);
+       pdata.fs = fs;
+       pdata.path = "";
+       pdata.format = format;
+
+       retval = ext2fs_dir_iterate2(fs, EXT2_ROOT_INO, 0, NULL, walk_ext_dir, &pdata);
+
+       format->cleanup(format->private);
+       return retval;
+}
diff --git a/contrib/android/fsmap.h b/contrib/android/fsmap.h
new file mode 100644 (file)
index 0000000..9f84a71
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef FSMAP_H
+# define FSMAP_H
+
+# ifndef _GNU_SOURCE
+#  define _GNU_SOURCE // asprintf
+# endif
+# include <stdio.h>
+# include <stdint.h>
+# include <stdbool.h>
+# include <sys/types.h>
+# include <ext2fs/ext2fs.h>
+
+struct fsmap_format {
+       void* (* init)(const char *file, const char *mountpoint);
+       int   (* start_new_file)(char *path, ext2_ino_t ino,
+                                struct ext2_inode *inode, void *data);
+       int   (* add_block)(ext2_filsys fs, blk64_t blocknr, int metadata,
+                           void *data);
+       int   (* inline_data)(void *inline_data, void *data);
+       int   (* end_new_file)(void *data);
+       int   (* cleanup)(void *data);
+
+       void *private;
+};
+
+errcode_t fsmap_iter_filsys(ext2_filsys fs, struct fsmap_format *format,
+                           const char *file, const char *mountpoint);
+
+#endif /* !FSMAP_H */
diff --git a/contrib/android/perms.c b/contrib/android/perms.c
new file mode 100644 (file)
index 0000000..9c5ec05
--- /dev/null
@@ -0,0 +1,375 @@
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE //asprintf
+#endif
+#include "perms.h"
+#include "support/nls-enable.h"
+#include <time.h>
+#include <sys/stat.h>
+
+#ifndef XATTR_SELINUX_SUFFIX
+# define XATTR_SELINUX_SUFFIX  "selinux"
+#endif
+#ifndef XATTR_CAPS_SUFFIX
+# define XATTR_CAPS_SUFFIX     "capability"
+#endif
+
+struct inode_params {
+       ext2_filsys fs;
+       char *path;
+       char *filename;
+       char *src_dir;
+       char *target_out;
+       char *mountpoint;
+       fs_config_f fs_config_func;
+       struct selabel_handle *sehnd;
+       time_t fixed_time;
+       const struct ugid_map* uid_map;
+       const struct ugid_map* gid_map;
+       errcode_t error;
+};
+
+static errcode_t ino_add_xattr(ext2_filsys fs, ext2_ino_t ino, const char *name,
+                              const void *value, int value_len)
+{
+       errcode_t retval, close_retval;
+       struct ext2_xattr_handle *xhandle;
+
+       retval = ext2fs_xattrs_open(fs, ino, &xhandle);
+       if (retval) {
+               com_err(__func__, retval, _("while opening inode %u"), ino);
+               return retval;
+       }
+       retval = ext2fs_xattrs_read(xhandle);
+       if (retval) {
+               com_err(__func__, retval,
+                       _("while reading xattrs of inode %u"), ino);
+               goto xattrs_close;
+       }
+       retval = ext2fs_xattr_set(xhandle, name, value, value_len);
+       if (retval) {
+               com_err(__func__, retval,
+                       _("while setting xattrs of inode %u"), ino);
+               goto xattrs_close;
+       }
+xattrs_close:
+       close_retval = ext2fs_xattrs_close(&xhandle);
+       if (close_retval) {
+               com_err(__func__, close_retval,
+                       _("while closing xattrs of inode %u"), ino);
+               return retval ? retval : close_retval;
+       }
+       return retval;
+}
+
+static errcode_t set_selinux_xattr(ext2_filsys fs, ext2_ino_t ino,
+                                  struct inode_params *params)
+{
+       errcode_t retval;
+       char *secontext = NULL;
+       struct ext2_inode inode;
+
+       if (params->sehnd == NULL)
+               return 0;
+
+       retval = ext2fs_read_inode(fs, ino, &inode);
+       if (retval) {
+               com_err(__func__, retval,
+                       _("while reading inode %u"), ino);
+               return retval;
+       }
+
+       retval = selabel_lookup(params->sehnd, &secontext, params->filename,
+                               inode.i_mode);
+       if (retval < 0) {
+               int saved_errno = errno;
+               com_err(__func__, errno,
+                       _("searching for label \"%s\""), params->filename);
+               return saved_errno;
+       }
+
+       retval = ino_add_xattr(fs, ino,  "security." XATTR_SELINUX_SUFFIX,
+                              secontext, strlen(secontext) + 1);
+
+       freecon(secontext);
+       return retval;
+}
+
+/*
+ * Returns mapped UID/GID if there is a corresponding entry in |mapping|.
+ * Otherwise |id| as is.
+ */
+static unsigned int resolve_ugid(const struct ugid_map* mapping,
+                                unsigned int id)
+{
+       size_t i;
+       for (i = 0; i < mapping->size; ++i) {
+               const struct ugid_map_entry* entry = &mapping->entries[i];
+               if (entry->parent_id <= id &&
+                   id < entry->parent_id + entry->length) {
+                       return id + entry->child_id - entry->parent_id;
+               }
+       }
+
+       /* No entry is found. */
+       return id;
+}
+
+static errcode_t set_perms_and_caps(ext2_filsys fs, ext2_ino_t ino,
+                                   struct inode_params *params)
+{
+       errcode_t retval;
+       uint64_t capabilities = 0;
+       struct ext2_inode inode;
+       struct vfs_cap_data cap_data;
+       unsigned int uid = 0, gid = 0, imode = 0;
+
+       retval = ext2fs_read_inode(fs, ino, &inode);
+       if (retval) {
+               com_err(__func__, retval, _("while reading inode %u"), ino);
+               return retval;
+       }
+
+       /* Permissions */
+       if (params->fs_config_func != NULL) {
+               const char *filename = params->filename;
+               if (strcmp(filename, params->mountpoint) == 0) {
+                       /* The root of the filesystem needs to be an empty string. */
+                       filename = "";
+               }
+               params->fs_config_func(filename, S_ISDIR(inode.i_mode),
+                                      params->target_out, &uid, &gid, &imode,
+                                      &capabilities);
+               uid = resolve_ugid(params->uid_map, uid);
+               gid = resolve_ugid(params->gid_map, gid);
+               inode.i_uid = (__u16) uid;
+               inode.i_gid = (__u16) gid;
+               ext2fs_set_i_uid_high(inode, (__u16) (uid >> 16));
+               ext2fs_set_i_gid_high(inode, (__u16) (gid >> 16));
+               inode.i_mode = (inode.i_mode & S_IFMT) | (imode & 0xffff);
+               retval = ext2fs_write_inode(fs, ino, &inode);
+               if (retval) {
+                       com_err(__func__, retval,
+                               _("while writing inode %u"), ino);
+                       return retval;
+               }
+       }
+
+       /* Capabilities */
+       if (!capabilities)
+               return 0;
+       memset(&cap_data, 0, sizeof(cap_data));
+       cap_data.magic_etc = VFS_CAP_REVISION_2 | VFS_CAP_FLAGS_EFFECTIVE;
+       cap_data.data[0].permitted = (uint32_t) (capabilities & 0xffffffff);
+       cap_data.data[1].permitted = (uint32_t) (capabilities >> 32);
+       return ino_add_xattr(fs, ino,  "security." XATTR_CAPS_SUFFIX,
+                            &cap_data, sizeof(cap_data));
+}
+
+static errcode_t set_timestamp(ext2_filsys fs, ext2_ino_t ino,
+                              struct inode_params *params)
+{
+       errcode_t retval;
+       struct ext2_inode inode;
+       struct stat stat;
+       char *src_filename = NULL;
+
+       retval = ext2fs_read_inode(fs, ino, &inode);
+       if (retval) {
+               com_err(__func__, retval,
+                       _("while reading inode %u"), ino);
+               return retval;
+       }
+
+       if (params->fixed_time == -1 && params->src_dir) {
+               /* replace mountpoint from filename with src_dir */
+               if (asprintf(&src_filename, "%s/%s", params->src_dir,
+                       params->filename + strlen(params->mountpoint)) < 0) {
+                       return -ENOMEM;
+               }
+               retval = lstat(src_filename, &stat);
+               if (retval < 0) {
+                       com_err(__func__, errno,
+                               _("while lstat file %s"), src_filename);
+                       goto end;
+               }
+               inode.i_atime = inode.i_ctime = inode.i_mtime = stat.st_mtime;
+       } else {
+               inode.i_atime = inode.i_ctime = inode.i_mtime = params->fixed_time;
+       }
+
+       retval = ext2fs_write_inode(fs, ino, &inode);
+       if (retval) {
+               com_err(__func__, retval,
+                       _("while writing inode %u"), ino);
+               goto end;
+       }
+
+end:
+       free(src_filename);
+       return retval;
+}
+
+static int is_dir(ext2_filsys fs, ext2_ino_t ino)
+{
+       struct ext2_inode inode;
+
+       if (ext2fs_read_inode(fs, ino, &inode))
+               return 0;
+       return S_ISDIR(inode.i_mode);
+}
+
+static errcode_t androidify_inode(ext2_filsys fs, ext2_ino_t ino,
+                                 struct inode_params *params)
+{
+       errcode_t retval;
+
+       retval = set_timestamp(fs, ino, params);
+       if (retval)
+               return retval;
+
+       retval = set_selinux_xattr(fs, ino, params);
+       if (retval)
+               return retval;
+
+       return set_perms_and_caps(fs, ino, params);
+}
+
+static int walk_dir(ext2_ino_t dir EXT2FS_ATTR((unused)),
+                   int flags EXT2FS_ATTR((unused)),
+                   struct ext2_dir_entry *de,
+                   int offset EXT2FS_ATTR((unused)),
+                   int blocksize EXT2FS_ATTR((unused)),
+                   char *buf EXT2FS_ATTR((unused)), void *priv_data)
+{
+       __u16 name_len;
+       errcode_t retval;
+       struct inode_params *params = (struct inode_params *)priv_data;
+
+       name_len = de->name_len & 0xff;
+       if (!strncmp(de->name, ".", name_len)
+           || (!strncmp(de->name, "..", name_len)))
+               return 0;
+
+       if (asprintf(&params->filename, "%s/%.*s", params->path, name_len,
+                    de->name) < 0) {
+               params->error = ENOMEM;
+               return -ENOMEM;
+        }
+
+       if (!strncmp(de->name, "lost+found", 10)) {
+               retval = set_selinux_xattr(params->fs, de->inode, params);
+               if (retval)
+                       goto end;
+       } else {
+               retval = androidify_inode(params->fs, de->inode, params);
+               if (retval)
+                       goto end;
+               if (is_dir(params->fs, de->inode)) {
+                       char *cur_path = params->path;
+                       char *cur_filename = params->filename;
+                       params->path = params->filename;
+                       retval = ext2fs_dir_iterate2(params->fs, de->inode, 0, NULL,
+                                                    walk_dir, params);
+                       if (retval)
+                               goto end;
+                       params->path = cur_path;
+                       params->filename = cur_filename;
+               }
+       }
+
+end:
+       free(params->filename);
+       params->error |= retval;
+       return retval;
+}
+
+errcode_t __android_configure_fs(ext2_filsys fs, char *src_dir,
+                                char *target_out,
+                                char *mountpoint,
+                                fs_config_f fs_config_func,
+                                struct selabel_handle *sehnd,
+                                time_t fixed_time,
+                                const struct ugid_map* uid_map,
+                                const struct ugid_map* gid_map)
+{
+       errcode_t retval;
+       struct inode_params params = {
+               .fs = fs,
+               .src_dir = src_dir,
+               .target_out = target_out,
+               .fs_config_func = fs_config_func,
+               .sehnd = sehnd,
+               .fixed_time = fixed_time,
+               .path = mountpoint,
+               .filename = mountpoint,
+               .mountpoint = mountpoint,
+               .uid_map = uid_map,
+               .gid_map = gid_map,
+               .error = 0
+       };
+
+       /* walk_dir will add the "/". Don't add it twice. */
+       if (strlen(mountpoint) == 1 && mountpoint[0] == '/')
+               params.path = "";
+
+       retval = androidify_inode(fs, EXT2_ROOT_INO, &params);
+       if (retval)
+               return retval;
+
+       retval = ext2fs_dir_iterate2(fs, EXT2_ROOT_INO, 0, NULL, walk_dir,
+                                    &params);
+       if (retval)
+               return retval;
+       return params.error;
+}
+
+errcode_t android_configure_fs(ext2_filsys fs, char *src_dir, char *target_out,
+                              char *mountpoint,
+                              struct selinux_opt *seopts EXT2FS_ATTR((unused)),
+                              unsigned int nopt EXT2FS_ATTR((unused)),
+                              char *fs_config_file, time_t fixed_time,
+                              const struct ugid_map* uid_map,
+                              const struct ugid_map* gid_map)
+{
+       errcode_t retval;
+       fs_config_f fs_config_func = NULL;
+       struct selabel_handle *sehnd = NULL;
+
+       /* Retrieve file contexts */
+#if !defined(__ANDROID__)
+       if (nopt > 0) {
+               sehnd = selabel_open(SELABEL_CTX_FILE, seopts, nopt);
+               if (!sehnd) {
+                       int saved_errno = errno;
+                       com_err(__func__, errno,
+                               _("while opening file contexts \"%s\""),
+                               seopts[0].value);
+                       return saved_errno;
+               }
+       }
+#else
+       sehnd = selinux_android_file_context_handle();
+       if (!sehnd) {
+               com_err(__func__, EINVAL,
+                       _("while opening android file_contexts"));
+               return EINVAL;
+       }
+#endif
+
+       /* Load the FS config */
+       if (fs_config_file) {
+               retval = load_canned_fs_config(fs_config_file);
+               if (retval < 0) {
+                       com_err(__func__, retval,
+                               _("while loading fs_config \"%s\""),
+                               fs_config_file);
+                       return retval;
+               }
+               fs_config_func = canned_fs_config;
+       } else if (mountpoint)
+               fs_config_func = fs_config;
+
+       return __android_configure_fs(fs, src_dir, target_out, mountpoint,
+                                     fs_config_func, sehnd, fixed_time,
+                                     uid_map, gid_map);
+}
diff --git a/contrib/android/perms.h b/contrib/android/perms.h
new file mode 100644 (file)
index 0000000..7987127
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef ANDROID_PERMS_H
+# define ANDROID_PERMS_H
+
+# include "config.h"
+# include <ext2fs/ext2fs.h>
+
+typedef void (*fs_config_f)(const char *path, int dir,
+                           const char *target_out_path,
+                           unsigned *uid, unsigned *gid,
+                           unsigned *mode, uint64_t *capabilities);
+
+/*
+ * Represents a range of UID/GID mapping.
+ * This maps the id in [|parent_id|, |parent_id| + |length|) into
+ * [|child_id|, |child_id| + |length|)
+ */
+struct ugid_map_entry {
+       unsigned int child_id;
+       unsigned int parent_id;
+       unsigned int length;
+};
+
+struct ugid_map {
+       /* The number of elements in |entries|. */
+       size_t size;
+
+       /* An array of entries. If |size| is 0, this is a null pointer. */
+       struct ugid_map_entry* entries;
+};
+
+# ifdef _WIN32
+struct selabel_handle;
+static inline errcode_t android_configure_fs(ext2_filsys fs,
+                                            char *src_dir,
+                                            char *target_out,
+                                            char *mountpoint,
+                                            void *seopts,
+                                            unsigned int nopt,
+                                            char *fs_config_file,
+                                            time_t fixed_time,
+                                            const struct ugid_map* uid_map,
+                                            const struct ugdi_map* gid_map)
+{
+       return 0;
+}
+# else
+#  include <selinux/selinux.h>
+#  include <selinux/label.h>
+#  if defined(__ANDROID__)
+#   include <selinux/android.h>
+#  endif
+#  include <private/android_filesystem_config.h>
+#  include <private/canned_fs_config.h>
+#  include <private/fs_config.h>
+
+errcode_t android_configure_fs(ext2_filsys fs, char *src_dir,
+                              char *target_out,
+                              char *mountpoint,
+                              struct selinux_opt *seopts,
+                              unsigned int nopt,
+                              char *fs_config_file, time_t fixed_time,
+                              const struct ugid_map* uid_map,
+                              const struct ugid_map* gid_map);
+
+# endif
+#endif /* !ANDROID_PERMS_H */
diff --git a/contrib/ext4-ioc.c b/contrib/ext4-ioc.c
new file mode 100644 (file)
index 0000000..42f022d
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Test program to trigger various ext4 ioctl's
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+
+#if (!defined(EXT4_IOC_ALLOC_DA_BLKS) && defined(__linux__))
+#define EXT4_IOC_ALLOC_DA_BLKS         _IO('f', 12)
+#endif
+
+#if (!defined(EXT4_IOC_SWAP_BOOT) && defined(__linux__))
+#define EXT4_IOC_SWAP_BOOT             _IO('f', 17)
+#endif
+
+#if (!defined(EXT4_IOC_PRECACHE_EXTENTS) && defined(__linux__))
+#define EXT4_IOC_PRECACHE_EXTENTS      _IO('f', 18)
+#endif
+
+#if (!defined(EXT4_IOC_CLEAR_ES_CACHE) && defined(__linux__))
+#define EXT4_IOC_CLEAR_ES_CACHE                _IO('f', 40)
+#endif
+
+
+#define EXT4_F_RW      0x0001
+
+struct cmd {
+       const char      *cmd;
+       unsigned long   ioc;
+       int             flags;
+};
+
+struct cmd cmds[] = {
+       { "alloc_da_blks", EXT4_IOC_ALLOC_DA_BLKS, EXT4_F_RW },
+       { "precache", EXT4_IOC_PRECACHE_EXTENTS, 0 },
+       { "swap_boot", EXT4_IOC_SWAP_BOOT, EXT4_F_RW },
+       { "clear_es_cache", EXT4_IOC_CLEAR_ES_CACHE, EXT4_F_RW },
+       { NULL, 0 }
+};
+
+const char *progname;
+
+void usage()
+{
+       struct cmd *p;
+
+       fprintf(stderr, "Usage: %s <cmd> <file>\n\n", progname);
+       fprintf(stderr, "Available commands:\n");
+       for (p = cmds; p->cmd; p++) {
+               fprintf(stderr, "\t%s\n", p->cmd);
+       }
+       exit(1);
+}
+
+int do_single_cmd(const char *fn, struct cmd *p)
+{
+       int     fd;
+       int     oflags = O_RDONLY;
+
+       if (p->flags & EXT4_F_RW)
+               oflags = O_RDWR;
+       fd = open(fn, oflags, 0);
+       if (fd < 0) {
+               perror("open");
+               return 1;
+       }
+       if (ioctl(fd, p->ioc) < 0) {
+               perror("ioctl");
+               return 1;
+       }
+       close(fd);
+       return 0;
+}
+
+int main(int argc, char **argv)
+{
+       int     i, fails = 0;
+       struct cmd *p;
+
+       progname = argv[0];
+       if (argc < 3 || strcmp(argv[1], "help") == 0)
+               usage();
+       for (p = cmds; p->cmd; p++) {
+               if (strcmp(argv[1], p->cmd) == 0)
+                       break;
+       }
+       if (p->cmd == NULL) {
+               fprintf(stderr, "Invalid command: %s\n", argv[1]);
+               usage();
+       }
+       for (i = 2; i < argc; i++)
+               fails += do_single_cmd(argv[i], p);
+       return fails;
+}
index a05b8f2..d4273d8 100644 (file)
@@ -18,7 +18,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
 #ifndef _LARGEFILE_SOURCE
diff --git a/contrib/jbd2-resync.sh b/contrib/jbd2-resync.sh
deleted file mode 100755 (executable)
index 4133b63..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-
-if [ -z "$1" -o -z "$2" ]; then
-       echo "Usage: $0 kernel-file e2fsprogs-file"
-       exit 0
-fi
-
-# Transform a few things to fit the compatibility things defined in jfs_user.h.
-# Use the ext2fs_ endian conversion functions because they truncate oversized
-# inputs (e.g. passing a u32 to cpu_to_be16()) like the kernel versions and
-# unlike the libc6 versions.
-exec sed -e 's/JBD_/JFS_/g' \
-        -e 's/JBD2_/JFS_/g' \
-        -e 's/jbd2_journal_/journal_/g' \
-        -e 's/__be/__u/g' \
-        -e 's/struct kmem_cache/lkmem_cache_t/g' \
-        -e 's/cpu_to_be/ext2fs_cpu_to_be/g' \
-        -e 's/be\([0-9][0-9]\)_to_cpu/ext2fs_be\1_to_cpu/g' \
-        < "$1" > "$2"
diff --git a/debian/.gitignore b/debian/.gitignore
new file mode 100644 (file)
index 0000000..91d8482
--- /dev/null
@@ -0,0 +1 @@
+!patches
index 261dd1a..6e00425 100644 (file)
@@ -1,3 +1,714 @@
+e2fsprogs (1.46.0-1) unstable; urgency=medium
+
+  * New upstream release
+  * Add support for the new fast_commit feature.  (Requires Linux version
+    5.10 or higher)
+  * Add support for the new stable_inodes feature which is needed to
+    support some file system encryption algorithms such as siphash.
+  * Add support for file systems that have both case folding and
+    encryption enabled.  (Requires Linux version 5.10 or higher)
+  * The fuse2fs program now supports the "norecovery" which omits replying
+    the journal and mounts the file system read-only.
+  * Bitmap loading is now done using multiple threads which can speed up
+    debugfs, dumpe2fs, and e2fsck on very large file systems.
+  * E2fsck now will check file names on file systems with case folding
+    enabled to make sure the characters are valid UTF-8 characters.
+    This is done for file systems which enforce strict encodings, and
+    optionally if the extended "check_encoding" option is requested.
+  * E2fsck will properly handle checking for duplicated file names when
+    case folding is enabled.
+  * E2fsck will now find and fix file system corruptions when the encrypted
+    files have a different policy from their containing directory.
+  * The "htree" command in debugfs now displays the metadata checksums for
+    hash tree index blocks.
+  * Fix various bugs where a maliciously corrupted file systems could case
+    e2fsck and other e2fsprogs programs to crash.
+  * Dumpe2fs will print the error code that Linux kernels newer than v5.6
+    will save to indicate the class of error which triggered the ext4_error
+    event.
+  * E2fsprogs programs (in particular, fuse2fs) can now update htree
+    directories without clearing the htree index.
+  * Tune2fs will properly recalculate directory block checksums when
+    clearing the dir_index feature.
+  * Fix a bug in e2fsck directory rehashing which could fail with ENOSPC
+    because it doesn't take into account the space needed for the metadata
+    checksum, and doesn't create a sufficiently deep index tree.
+  * Clarify the e2fsck messages when it resets the directory link count when
+    it is set to the overflow value but it is no longer needed.
+  * Mke2fs now sets the s_overhead_cluster field, so that the kernel doesn't
+    need to calculate it at mount time.  This speeds up mounting very large
+    file systems.
+  * Speed up mke2fs when creating large bigalloc file systems by optimizing
+    ext2fs_convert_subcluster_bitmap().
+  * The filefrag program can now request the kernel to display the extent
+    status cache by using "filefrag -E".  (This requires Linux version 5.4
+    or newer.)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Fri, 29 Jan 2021 16:24:41 -0500
+
+e2fsprogs (1.45.7-1) unstable; urgency=medium
+
+  * New upstream release
+  * Mke2fs will now warn when creating a file system on a DAX-capable
+    device and the block size is incompatible with DAX.
+  * The chattr and lsattr programs now support using the 'x' attribute
+    to set/get dax support on a particular file.
+  * E2fsprogs now supports the gnu.* extended attribute namespace, which
+    allows mke2fs -d to import the gnu.translator extended attributes.
+  * Add support for the simultaneous enablement of the casefold and
+    encryption features, which ext4 supports starting with the v5.5
+    Linux kernel.
+  * Debugfs will now retry opening the superblock if it finds that the
+    superblock has an invalid checksum, since this could happen when
+    opening a mounted file system.
+  * Fix an off-by-one error when validating the depth of an htree which
+    caused e2fsck to potentially fail to notice an invalid htree.
+  * Fix potential buffer overrun in e2fsck when scanning directory blocks
+    in pass 2. (Addresses Google Bug: #158564737)
+  * Fix tune2fs so that it unlocks the MMP block if it can't perform the
+    requested operation.
+  * Fix mke2fs so it can import the contents of a directory using the -d
+    option when it has inode numbers that are greater than 2**32.   Also
+    fix an ommission were the extended attributes on the top-level directory
+    was not getting copied to the root directory.
+  * Fix e4crypt so that the add_key operation uses the explicitly provided
+    salt if it is provided.
+  * Fix resize2fs to prevent it from overflowing the block group descriptors
+    from overflowing the first block group.  (This can only happen when the
+    block size is 1k and the file system is very large.)
+  * Fix debugfs's set_super_value command so it can set 64-bit integer
+    fields, such as s_kbytes_written.
+  * Fix filefrag so that it won't crash if the kernel returns zero for
+    statfs(2)'s device id or if it returns a blocksize of zero the device's
+    blocksize.
+  * Fix a few bad error code returns in the unix and sparse I/O managers.
+  * E2fsck will no longer try to fix duplicate file names in an encrypted
+    directory by mutating the encrypted file name.
+  * Updated and clarified various man pages.
+  * Update the Dutch, Malay, and Serbian translations from the translation
+    project.
+  * Update the Debian policy compliance to 4.5.1
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Fri, 29 Jan 2021 00:19:52 -0500
+
+e2fsprogs (1.45.6-1) unstable; urgency=medium
+
+  * New upstream release
+  * Fixed a number of potential out of bounds memory accesses caused by
+    fuzzed / malicious file systems.
+  * Fix a spurious complaint from e2fsck when a directory which previously
+    had more than 32000 subdirectories has the number of subdirectories
+    drops below 32000.
+  * Improve e2fsck's ability to deal with file systems with a *very* large
+    number of directories.
+  * Debugfs will ignore lines in its command files which start with a
+    comment character ("#").
+  * Fix debugfs so it correctly prints inode numbers > 2**31.
+  * Filefrag now supports very large files (with > 4 billion blocks), as
+    well as block sizes up to 1 GiB.
+  * Mke2fs -d now correctly sets permission with files where the owner
+    permissions are not rwx.
+  * Updated and clarified various man pages
+    (Closes: #953493, #953494, #951808)
+  * Drop as unneeded libattr1-dev as a build dependency (Closes: #953926)
+  * Update the Malay translation from the translation project.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Fri, 20 Mar 2020 23:49:33 -0400
+
+e2fsprogs (1.45.5-2) unstable; urgency=medium
+
+  * Fix com_err support on Hurd, which has POSIX E* error code starting at
+    0x40000000.  Otherwise the regression tests will fail since the
+    expected output for various error cases will not have the correct
+    error text.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Wed, 08 Jan 2020 15:58:44 -0500
+
+e2fsprogs (1.45.5-1) unstable; urgency=medium
+
+  * New upstream release
+  * E2fsck will no longer force a full file system check if time-based
+    forced checks are disabled and the last mount time or last write time in
+    the superblock are in the future.
+  * Fix spurious weekly e-mails when e2scrub_all is run via a cron job
+    on non-systemd systems.  (Closes: #944033)
+  * Remove an unnecessary sleep in e2scrub which could add up to an
+    additional two second delay during the boot up.  Also, avoid
+    trying to reap aborted snapshots if it has been disabled via
+    e2scrub.conf.  (Closes: #948193)
+  * Resize2fs -M's estimates are now more accurate on mounted file systems.
+  * Tune2fs prohibits enabling or disabling the uninit_bg feature on
+    mounted file systems, since this is unsafe.
+  * Fix support of 32-bit uid's and gid's in fuse2fs and in mke2fs -d.
+  * Fix mke2fs's setting bad blocks to bigalloc file systems.
+  * Fix a bug where fuse2fs would incorrectly report the i_blocks fields for
+    bigalloc file systems.
+  * Fix potential crash in e2fsck when rebuilding very large directories on
+    file systems which have the new large_dir feature enable.
+  * Fix FTBFS problem hurd/i386. (Closes: #944649)
+  * Fix CVE-2019-5188: potential a out of bounds write in mutate_name()
+    when checking a maliciously corrupted file systems
+  * Add autopkgtest tests smoke and fuse2fs
+  * Updated and clarified various man pages
+  * Update the debhelper compatibility level to 12
+  * Update the Chinese and Malay translations
+  * Update the Debian policy compliance to 4.4.1
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 07 Jan 2020 09:18:39 -0500
+
+e2fsprogs (1.46~WIP.2019.10.09-1) experimental; urgency=medium
+
+  * Add (minimal) support to enable the fast commit feaure.  This is just
+    enough to enable kernel development work; e2fsck replay of journals
+    with the fast commit feature is *not* available.
+  * E2fsck will now check encryption policies for consistency
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Wed, 09 Oct 2019 20:22:50 -0400
+
+e2fsprogs (1.45.4-1) unstable; urgency=medium
+
+  * New upstream feature
+  * Fix CVE-2019-5094: A maliciously corrupted file systems can trigger
+    buffer overruns in the quota code used by e2fsck.
+  * E2fsck will now check to make sure the casefold flag is only set on
+    directories, and only when the casefold feature is enabled.
+  * E2fsck will not disable the low dtime checks when using a backup
+    superblock where the last mount time is zero to fix a failure in
+    xfstests ext4/007
+  * Fix e2fsck so that when it needs to recreate the root directory, the
+    quota counts are correctly updated
+  * Update the man pages to document the new fsverity feature, and improve
+    the documentation for the casefold and encrypt features
+  * Allow e2scrub_all to work when the VG free space is exactly the
+    snapshot size (Closes: #935009)
+  * Avoid spurious lvm warnings when e2scrub_all is run out of cron on
+    non-systemd systems (Closes: #940240)
+  * Update the Dutch, German, Malay, Spanish, and Vietnamese translations
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 23 Sep 2019 15:31:27 -0400
+
+e2fsprogs (1.45.3-4) unstable; urgency=medium
+
+  * stop using Link Time Optimization; it breaks reproducible builds
+  * skip "make check" if DEB_BUILD_OPTIONS contains nocheck; this is
+    needed for some ports builds to complete successfully (Closes: #933247)
+  * fix e2fsprogs build problems on non-Linux ports
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 06 Aug 2019 15:22:30 -0400
+
+e2fsprogs (1.45.3-3) unstable; urgency=medium
+
+  * Fix Breaks/Replace dependency for logsave (Closes: #932874)
+  * Mark logsave as Multi-Arch: foreign (Closes: #932876)
+  * Fix test bug on the x32 architecture (Closes: #932906)
+  * Fix FTBFS problem on FreeBSD and Hurd since they don't have systemd
+  * Fix blhc problem when running "make check"
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Thu, 25 Jul 2019 15:35:01 -0400
+
+e2fsprogs (1.45.3-2) unstable; urgency=medium
+
+  * Add a hard dependency on logsave to e2fsprogs to fix initramfs issues
+    (Closes: #932855, #932859, #932861, #932881, #932888)
+  * Add check in e2scrub_all.cron so that it doesn't fail if the package
+    is removed, since e2scrub_all.cron is marked as a config file.
+    (Closes: #932622)
+  * Update the Debian policy compliance to 4.4.0
+  * Update Czech, French, German, Polish, Portuguese, Swedish, and
+    Ukrainian translations
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Wed, 24 Jul 2019 12:56:52 -0400
+
+e2fsprogs (1.45.3-1) unstable; urgency=medium
+
+  * New upstream version
+  * Automatic online file system scrubs is now disabled by default.
+    They can be enabled by editing /etc/e2scrub.conf.
+  * fuse2fs is now installed in /usr/bin instead of /usr/sbin
+  * Fix fuse2fs compatibility with fuse3; but specifying the
+    nonempty option may be necessary if fusermount with fuse v2 is in use.
+    See NEWS.gz for more details.
+  * Fixed e2fsck support of file systems using large_dir and inline
+    directories at the same time.
+  * Fixed a bug in e2scrub_all so it correctly handles an LUKS volume
+    stacked on top of an LV.  (Closes: #931387)
+  * Fixed a bug in e2scrub_all so it correctl specifies the volumes to
+    clean up when using "e2scrub_all -r".   (Closes: #931679)
+  * Fixed improper use of positional markers in the Czech, Dutch,
+    German, and Vietnamese translations.  (Closes: #892173)
+  * Remove ancient special-case CFLAGS for Alpha and Powermac platforms
+  * Drop packaging support for Debian Jessie
+  * Use the same build tree for the e2fsprogs udeb package
+  * Restructure rules file to use dh
+  * Only require the udev, systemd, and cron build dependencies when
+    building on Linux. (Closes: #931266)
+  * Move logsave to its own package.  (Closes: #923372)
+  * Update the Czech and Dutch translations
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 14 Jul 2019 21:01:11 -0400
+
+e2fsprogs (1.45.2-1) unstable; urgency=medium
+
+  * New upstream version
+  * When mke2fs asks the user if she should proceed, fall back to the
+    English 'y' or 'Y' characters since there could be a missing
+    translation prompting the use of the English 'y' character.
+    (Closes: #907034)
+  * Fix spurious complaint of blocks beyond i_size for verity files.
+  * Update the Czech, Malay, Polish, Spanish, Swedish, and Ukarainian
+    translations.  Add the new Portuguese translation.  (Closes: #912185)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 27 May 2019 21:46:31 -0400
+
+e2fsprogs (1.45.1-3) unstable; urgency=medium
+
+  * Fix e2scrub_all cron failures (Closes: #929287)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 20 May 2019 21:48:40 -0400
+
+e2fsprogs (1.45.1-2) unstable; urgency=medium
+
+  * Avoid spurious e2scrub_all error messages spamming administrators from
+    cron/systemd timer units when lvm2 is not installed and/or there are
+    no lvm devices present in the system (Closes: #928977, #929186, #929254)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 20 May 2019 11:02:09 -0400
+
+e2fsprogs (1.45.1-1) unstable; urgency=medium
+
+  * New upstream feature
+  * Drop lvm2 from the recommends line (Closes: #924275)
+  * Add the -n flag to the e2scrub and e2scrub_all commands
+  * Teach e2scrub to issue more useful error messages
+  * Update support for the case-folding file system feature to match what
+    finally will be landing in the kernel.
+  * Teach e2scrub_all to skip scrubing a file system if there is not
+    enough free space to create a snapshot.  (Closes: #924301)
+  * Fixed debugfs so it correctly prints ea_in_inode xattr values.
+  * Debugfs now prints non-printing characters using C-style hex escape
+    sequences.
+  * E2fsck now checks the unused portions of the bitmap blocks when the
+    number of blocks/inodes is less than the full blocksize to make sure
+    they are properly set.
+  * Fixed mke2fs's insanely large file system check, so that creating a
+    900TB file system will succeed.
+  * E2scrub now tags its temp snapshot volumes with UDISK_IGNORE to avoid
+    them showing up in GUI's.  (Closes: #926112)
+  * Mark the e2scrub systemd service files to indicate that it requires
+    CAP_SYS_ADMIN and CAP_SYS_RAWIO so e2scrub will get skipped when run
+    in cointainers that don't give root these capabilities.  (Closes: #926138)
+  * E2fsck can now save a problem code log for debugging or monitoring
+    purposes.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 12 May 2019 21:23:25 -0400
+
+e2fsprogs (1.45.0-1) unstable; urgency=medium
+
+  * New upstream feature
+  * tune2fs can now set the file system error bit to force a check at the
+    next fsck by using the extended option "force_fsck".
+  * There is now an e2scrub script which will allow e2fsck to be run
+    on mounted file systems using an LVM device.  There will be a systemd
+    script to automatically run e2scrub on all ext4* file systems where it
+    can be supported.
+  * mke2fs will attempt avoid discarding pre-allocated blocks when
+    initializing a file system on a file.
+  * The fuse2fs command now supports a "fakeroot" option to allow an
+    unprivileged user to fuse2fs to modify rootfs images.
+  * Add initial support for the character set and case-folding file system
+    feature.
+  * Debugfs can now set the inode's checksum field
+  * E2image now accepts the -b and -B options to allow the user to specify
+    the superblock location when creating a raw or qcow2 image.
+  * Update the debhelper compatibility level to 11
+  * Update the Debian policy compliance to 4.3.0
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Wed, 06 Mar 2019 12:55:18 -0500
+
+e2fsprogs (1.44.6-1) unstable; urgency=medium
+
+  * New upstream version
+  * Fix e4defrag overflow problem when files are being created while it is
+    running (Closes: #888899)
+  * Fix e2fsck so it can correctly handle directories > 2 GiB when the
+    largedir feature is enabled.
+  * Fix mke2fs's hugefile creation so it works correctly for certain
+    unfortunately sized disks/partitions.
+  * Fix the libext2fs library to be more robust against
+    invalid/maliciously corrupted block group descriptors.
+  * Fix mke2fs and debugfs so they can correctly copy in files > 2 GiB.
+  * Fix debugfs so its stat command can correct supportly display directory
+    sizes > 2 GiB.
+  * Fix memory leaks in debugfs, mke2fs, and e2freefrag.
+  * Avoid unnecessarily linking badblocks with the libblkid shared library.
+    (Closes: #919958)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 05 Mar 2019 15:10:40 -0500
+
+e2fsprogs (1.44.5-1) unstable; urgency=medium
+
+  * New upstream version
+  * Avoid overflows when tracking the number of files defragged
+    by e4defrag (Closes: #888899)
+  * Fix groff formatting nits in various man pages (Closes: #916188)
+  * Fix location of libext2fs documentation (Closes: #915942)
+  * Fix regression so we are correctly translating Posix ACL's
+    in libext2fs
+  * Use the online free block counts so e2freefrag's percentages
+    are correct
+  * Fix a false warning that tune2fs will take long time to change
+    a UUID if the metadata_csum feature is not enabled
+  * Fix mk_cmds so it works on a non-usrmerge system when e2fsprogs
+    is built on a usrmerge system (Closes: #914087)
+  * E2fsck will avoid offering to set the inline_data feature flag
+    unnecessarily
+  * E4defrag will handle the case where it is running as root and it can't
+    find the file system to open more gracefully (Closes: #907634)
+  * Fix a bug where resize2fs was failing to update the extent tree
+    checksums in an corner case
+  * Fix fuse2fs's command line parsing when options are specified after
+    the target device/image
+  * Fix a bug which could cause e2fsprogs tools to segfault on a corrupted
+    file system where the journal's s_nr_users is impossibly large.
+  * E2image now includes the mmp block (if needed) when creating a
+    metadata-only image.
+  * When e2fsck notices it could optimize an extent tree, it will now ask
+    "Optimize?" instead of "Fix?", which was confusing some users since it
+    implied that something was broken.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sat, 15 Dec 2018 22:46:49 -0500
+
+e2fsprogs (1.44.4-2) unstable; urgency=medium
+
+  * tune2fs fix dereference of freed memory after journal
+  * fix verity support
+  * Generate NEWS.gz for e2fsprogs's package documentation directory
+  * Update Debian policy compliance to 4.2.0
+  * Improve version dependency for libcom-err and ss2 for e2fsprogs
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Wed, 22 Aug 2018 19:30:17 -0400
+
+e2fsprogs (1.44.4-1) unstable; urgency=medium
+
+  * New upstream release
+  * Add basic support for the ext4 verity (fsverity) feature
+  * E2fsck will fix file systems that have both the resize_inode
+    and meta_bg feature enabled
+  * Debugfs's ncheck command will now correctly inodes that have
+    multiple hard links
+  * Remove kilo/kibi rant (Closes: #757831)
+  * Update Danish, Spanish, and Swedish translations
+  * Fix symlink to directory conversions (Closes: #905195)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sat, 18 Aug 2018 20:46:29 -0400
+
+e2fsprogs (1.44.3-1) unstable; urgency=medium
+
+  * New upstream release
+  * Include hashmap.h in the libext2fs2 package
+  * Update debian policy compliance to 4.1.5
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 10 Jul 2018 01:23:17 -0400
+
+e2fsprogs (1.44.3~rc2-1) unstable; urgency=low
+
+  * New upstream release
+  * Debugfs's inode_dump and xattr_dump commands have new options to
+    display the low-level contents of an inode's i_blocks and extra
+    space, and to better be able to debug corrupted extended attributes.
+  * The dumpe2fs command now will show information about the Multi-Mount
+    Protection (MMP) block, if present
+  * E2fsck, dumpe2fs, and debugfs is now much more robust at handling
+    badly (or maliciously) corrupted file systems.
+  * E2fsck will now offer to enable the dir_nlink feature if it is
+    required by the file system
+  * The project id field in the inode is now properly byte-swapped on
+    big-endian systems
+  * E2fsprogs better handles recent kernels which reports old error
+    conditions via the first fsync() after the file is opened
+  * Updated/fixed various man pages
+  * Update Czech, Dutch, Spanish, French, Polish, Swedish, Ukrainian, and
+    Vietnamese translations
+  * Update debian policy compliance to 4.1.4
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 3 Jul 2018 23:31:40 -0400
+
+e2fsprogs (1.44.2-1) unstable; urgency=medium
+
+  * New upstream release
+  * Demote e2fsprogs from Essential: yes to XB-Important: yes
+    (Closes: #474540)
+  * Fix mke2fs to print a more useful/correct error message if
+    ext2fs_close_free() fails at the end of the file system
+    creation process
+  * Improve chattr's man page
+  * Update Polish translation
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 14 May 2018 19:59:27 -0400
+
+e2fsprogs (1.44.1-2) unstable; urgency=medium
+
+  * Fix e2image handling of e2i files on big endian systems
+  * Add sanity checks for inodes containing xattr values to prevent
+    maliciously crafted file systems from causing crashes caused by
+    infinite recursion
+  * Fix e2fsck so that quota usage is adjusted when clearing orphaned
+    inodes
+  * Fix filefrag so that unknown flags returned by FIEMAP won't cause a
+    buffer overrun
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 10 Apr 2018 11:04:36 -0400
+
+e2fsprogs (1.44.1-1) unstable; urgency=medium
+
+  * New upstream release
+  * Fix FTBFS problem on Hurd (Closes: #893590)
+  * Fix e2fsck support of HTree directories on big-endian systems
+  * Fix miscellaneous e2image image handling for file systems with bigalloc
+    and meta_bg features enabled.
+  * Fix orphan list handling of inodes on bigalloc file systems (and other
+    situations where inodes need to be deleted or truncated) in e2fsck.
+  * Update Sweedish translation.
+  * Add Vcs-* headers in Debian packaging (Closes: #887512)
+  * Speed up reading bitmap blocks in debugfs when opening large file
+    systems.
+  * Add clarifications to chattr's man page.  (Closes: #890390)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sat, 24 Mar 2018 15:13:28 -0400
+
+e2fsprogs (1.44.0-1) unstable; urgency=medium
+
+  * New upstream release
+  * Update Czech, Spanish, French, Malay, and Ukrainian translations.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Wed, 07 Mar 2018 14:39:52 -0500
+
+e2fsprogs (1.44.0~rc2-1) experimental; urgency=medium
+
+  * New upstream release
+  * Fix FTBFS problem on Hurd
+  * Improved e2fsck's consistency checking for symlink.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 04 Mar 2018 15:57:21 -0500
+
+e2fsprogs (1.44.0~rc1-1) experimental; urgency=low
+
+  * New upstream release
+  * Add support for the large_dir feature
+  * Add support for the ea_data feature
+  * Resize2fs will not complain about online resizes of bigalloc file
+    systems
+  * Debugfs's ls command will now print the high bits of the mode bits
+  * Fix some corner cases with tune2fs and journal replay
+  * Add support for libreadline.so.7
+  * E2freefrag will now use the GETFSMAP ioctl for mounted file systems
+  * E2fsck is now much faster when scanning extents on bigalloc file systems
+  * Fix various compiler and UBSAN warnings
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 27 Feb 2018 16:56:32 -0500
+
+e2fsprogs (1.43.9-2) unstable; urgency=medium
+
+  * Fix upgrade when there are two installations of a library (for
+    different architectures) that we are transitioning to the new package
+    name.  (Closes: #890590)
+  * Add support for libreadline.so.7 to libss
+  * Fix tune2fs's journal recovery support
+  * Fix tune2fs to require a freshly checked file system if turning off
+    the metadata_csum feature and UUID has been changed.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sat, 24 Feb 2018 20:48:29 -0500
+
+e2fsprogs (1.43.9-1) unstable; urgency=medium
+
+  * Remove some obsolete flags and add document new flags in the chattr
+    man page
+  * Remove misplaced "MNP is unsupported" message from debugfs
+  * Suppress false positive lintian warning about "new essential
+    package" (caused by preparatory work to make the e2fsprogs
+    package no longer essential)
+  * Fixing missing "General" in "GNU General Public License" in
+    copyright files.
+  * Fix whitespace issue in the debian control file
+  * Update the Hungarian translation.
+  * Rename the packages e2fslibs* to libext2fs* and libcomerr2* to
+    libcom-err2* to conform with the standard Debian library package
+    naming conventions.  (Closes: #269569)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Thu, 08 Feb 2018 13:09:49 -0500
+
+e2fsprogs (1.43.8-2) unstable; urgency=medium
+
+  * Update debian policy version to 4.1.3
+  * Mark library packages as priority: optional
+  * Simplify the debian/rules file and don't build e2fsprogs-l10n
+    unnecessarily
+  * Fix FTBFS on big-endian systems (Closes: #886119)
+  * Add support for the build profile: noudeb
+  * Add support for the build profile: pkg.e2fsprogs.no-fuse2fs
+  * Add support for the build profile: pkg.e2fsprogs.no-static-e2fsck
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Wed, 03 Jan 2018 16:18:40 -0500
+
+e2fsprogs (1.43.8-1) unstable; urgency=medium
+
+  * New upstream version
+  * Fix a bug where updated bitmap checks might not be written to disk.
+    (Closes: #883869)
+  * Add missing byte swaps for newly added fields in the superbloc
+  * Fix a potential use after free bug in e2fsck when fixing a corrupted
+    root node in directory hash tree.
+  * Fix a bug in e2fsck where a badly/maliciously corrupted superblock
+    (which is not fixed due to the -n option, for example) can cause a
+    floating point exception when printing the summary statistics.
+    (Closes: #879220)
+  * Fix debugfs's ncheck command so that it correctly prints the inode
+    number when printing an error message.
+  * Fix a bug in e2freefrag where it could print an incorrect free blocks
+    count on a file system with the 64-bit block number feature.
+  * Update the German, Serbian, Spanish, and Ukrainian translations.
+  * Fix a bug where resize2fs's free blocks sanity check could fail with a
+    false positive and refuse to check a file system with the 64-bit block
+    number feature.
+  * Fix and clarify various man pages and documentations.  Also fixed up
+    some random usage texts that were incorrect.  (Closes: #880483)
+  * Add missing copyright file for the e2fsprogs-l10 package.  (Closes:
+    #880207)
+  * Add missing Multi-arch hints (Closes: #881408, #881590, #881591)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 01 Jan 2018 19:44:41 -0500
+
+e2fsprogs (1.43.7-1) unstable; urgency=medium
+
+  * New upstream version
+  * Fix error handling in debugfs, fuse2fs, and tune2fs so errors while
+    replaying the journal will not cause a segfault in some corner cases
+  * Fix resize2fs to avoid it from either failing or corrupting the file
+    system image in certain corner cases when doing an off-line resize
+  * Fix many spelling mistakes in various man pages, code comments, and
+    program messages.
+  * Fix e2fsck and debugfs so that maliciously corrupted file systems will
+    not cause buffer overflows (Closes: #873757, #878104)
+  * Update German translation (Closes: #833514)
+  * Update debian policy version to 4.1.1
+  * Fix FTBFS caused by debhelper/10.9 and references to obsolete packages
+    in the rules file (Closes: #876551)
+  * Promote e2fsprogs-l10n from suggests to recommends (Closes: #873812)
+  * Make e2fsprogs-l10n be arch:all (Closes: #873813)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 16 Oct 2017 01:20:54 -0400
+
+e2fsprogs (1.43.6-1) unstable; urgency=medium
+
+  * New upstream version
+  * Break out the locale files to a separate package (e2fsprogs-l10n) to
+    reduce the size of the e2fsprogs package, since it is an
+    essential/required package.
+  * Remove support for building uuid/blkid packages on pre-Wheezy
+    distributions (which are no longer supported).
+  * Remove support for pre-Multiarch versions of Debian (which are no
+    longer supported).
+  * Fixed the printing of quota inconsistency messages in e2fsck on 32-bit
+    platforms.  Also fixed a bug which caused project quota problems to be
+    labelled as group quota problems.
+  * Fixed a UI problem with yes/no questions when there are fuzzy
+    translation entries which caused some messages to be printed in English
+    and some in the language specified by the locale.  (Closes: #856586)
+  * Fix some out-of-bounds memory accesses in e2fsck caused by (usually
+    maliciously) corrupted file systems.  (Closes: #871539, 871540)
+  * Optimize CPU usage in e2fsck for very large, very fragmented sparse
+    files.
+  * Avoid creating file systems that use project quotas and 128 byte
+    inodes.
+  * Improve tune2fs's message when a file system needs to be checked using
+    e2fsck -f before running certain complex tune2fs operations.  (Closes:
+    #857336)
+  * Improve e2fsck's message when the proceed_delay option in
+    /etc/e2fsck.conf is enabled.  (Closes: #857336)
+  * Fix an LFS bug in e2image.  (Closes: #855246)
+  * Fix portability problem caused by the fact that disks are character
+    mode devices systems with FreeBSD kernels.
+  * Update the Czech, French, Polish, Swedish, and Vietnamese translations.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 29 Aug 2017 00:58:29 -0400
+
+e2fsprogs (1.43.5-1) unstable; urgency=medium
+
+  * New upstream version
+  * Fix ext2fs_sync_device() so it returns the proper error code if the
+    BLKFLSBUF ioctl fails for some reason.
+  * Fix a potential crash in tune2fs when enabling project quota when the
+    file system has no inodes by fixing error handling in the
+    quota_write_inode() in libsupport.
+  * Fix a bug in debugfs's "ls -p" handling which could cause it to print
+    garbage after a file name in a directory entry.
+  * Fix a number of bugs in debugfs, dumpe2fs, e2fsck, tune2fs, and
+    resize2fs where a carefully/maliciously corrupted file systems (found
+    by American Fuzzy Lop) could these programs to crash or hang.
+    (Closes: #868489)
+  * E2fsck no longer issues some harmless bitmap warnings caused by a
+    corrupted file system; since those corruptions will be fixed up by
+    e2fsck later, there's no point issuing these internal warnings.
+  * E2fsck will now notice invalid quota inode numbers, and offer to fix
+    them.
+  * Fix a regression introduced in e2fsprogs 1.43 which broke mke2fs's
+    hugefile creation so that they aren't contiguous.
+  * Fix how backup superblocks are written in big endian systems so they
+    are all correctly byte swapped.
+  * Fixed tune2fs's support for enabling and disabling project quota.
+  * The badblock program now properly handles languages which have
+    multi-column wide character such as Chinese.  (Closes: #860926)
+  * The mke2fs -U option now accepts "null", "clear", "random", or "time"
+    just as tune2fs's -U option.
+  * Fix e2fsck's -E bmap2extent feature (which converts a file to use
+    extents from indirect block maps) so that it handles sparse files
+    correctly.
+  * Fix libext2fs to correctly handle accounting for an external xattr
+    block on bigalloc file systems.
+  * Fix e2fsck to correctly handle quota accounting when deleting files
+    that have multiply-claimed blocks pass 1b.
+  * Fix potential buffer overrun bug in e2fsck when using 128 byte inodes.
+  * E2fsck's extent tree optimization can now be disabled via an
+    command-line extended option or via an e2fsck.conf configuration
+    parameter.
+  * The e2fsck program now properly updates the quota accounting when
+    optimizing the extent tree.
+  * Fix some error handling in e4crypt when operating on keyring ID's.
+  * Fix e2fsck's quota handling when the bigalloc feature is enabled.
+  * The libext2fs file system now uses readahead when opening file systems
+    to speed up opening very large file systems with the meta_bg option.
+  * If e2fsck logging is enabled, e2fsck will report the exit code in the
+    last line of the log file.
+  * Debugfs can now open file systems with a bad superblock checksum, and
+    the show_super_stats command will print the expected checksum.
+  * Fix a regression introduced in e2fsprogs 1.43.4 where tune2fs was not
+    able to correctly enable the quota feature.  (Closes: #855417)
+  * E2fsck will only return an exit status code of 1 if it has fixed a
+    file system corruption.  If it only performed an optimal optimization
+    of internal file system metadata, it will now return 0.
+  * Fix e2fsck so it won't check inode fields of deleted inodes.
+  * Removed a debugging printf in libsupport which could result to some
+    extraneous and confusing output if the user specifies a quota type.
+  * The debugfs logdump command now accepts a new -S option which will
+    cause it to print information about the journal superblock.
+  * Added a missing space in debugfs's ls -l output to separate the size
+    and date fields.
+  * Update the Czech, Danish, Dutch, French, Hungarian, Polish, Serbian,
+    Spanish, Swedish, Ukrainian, and Vietnamese translations. (Closes: #862482)
+  * Update various man pages.  (Closes: #867895, #865584)
+  * Fix various compiler and UBSAN warnings.
+  * Remove obsolete Conflict/Replaces headers in control file (Closes: #866623)
+  * Remove obsolete mips libraries used to build arcboot (Closes: #864144)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Fri, 04 Aug 2017 01:13:34 -0400
+
+e2fsprogs (1.43.4-2) unstable; urgency=medium
+
+  * Re-enable metadata_csum for Debian (which was accidentally disabled
+    for 1.43.4-1)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 31 Jan 2017 19:54:55 -0500
+
 e2fsprogs (1.43.4-1) unstable; urgency=medium
 
   * New upstream version
@@ -44,7 +755,7 @@ e2fsprogs (1.43.3-1) unstable; urgency=medium
   * E2fsck will sanity check and repair the extra isize fields in inodes
     and the superblock.
   * Fix sparc64 crashes when dereferencing unaligned integers in journal
-    blocks when metdata checksums are enabled.
+    blocks when metadata checksums are enabled.
 
  -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 04 Sep 2016 20:41:21 -0400
 
@@ -71,7 +782,7 @@ e2fsprogs (1.43.2-1) unstable; urgency=medium
   * Add a command to debugfs to copy the inode structure from one inode
     to another
   * Fix resize2fs so it will not crash if there is an extended
-    attribute block but it doesn't need to migate any blocks during
+    attribute block but it doesn't need to migrate any blocks during
     an off-line resize
   * Fix a crash when mke2fs or debugfs tries to copy in a directory
     hierarchy containing an empty directory
@@ -82,7 +793,7 @@ e2fsprogs (1.43.2-1) unstable; urgency=medium
   * Fix big endian bugs in the e2undo program
   * Fix debugfs's logdump so command so it can correctly handle journals
     which are larger than 2GB
-  * Add new translations: Hugarian and Serbian
+  * Add new translations: Hungarian and Serbian
   * Update the Catalan, Chinese, Danish, Dutch, French, German, Polish,
     Swedish, Ukrainian translations
 
@@ -220,7 +931,7 @@ e2fsprogs (1.43~WIP.2015.05.18-1) unstable; urgency=low
     enabled by default.
   * The resize2fs command can now convert file systems between 64-bit
     and 32-bit mode.
-  * The new undo file format is much faster/efficent than before
+  * The new undo file format is much faster/efficient than before
   * E2fsck now has readahead support to speed up its behavior on RAID
     arrays.
   * E2fsck can now rebuild/optimize inode extent trees
@@ -321,7 +1032,7 @@ e2fsprogs (1.42.12-1) unstable; urgency=low
   * Dumpe2fs will now complain if extra arguments are given to it.
     (Closes: #758074)
   * Update/clarify various man pages (Closes: #726760)
-  * Update Czech, Dutch, French, Polish, Spanish, Sweedish, Ukrainian,
+  * Update Czech, Dutch, French, Polish, Spanish, Swedish, Ukrainian,
     and Vietnamese translations
 
  -- Theodore Y. Ts'o <tytso@mit.edu>  Fri, 29 Aug 2014 08:50:48 -0400
@@ -349,21 +1060,21 @@ e2fsprogs (1.42.11-1) unstable; urgency=medium
   * Mke2fs will check the kernel version number and not just the sysfs
     feature flag to determine whether it is safe to enable lazy
     inode table initialization, so it won't get faked out if the ext4 is
-    compiled as a mdoule which hasn't happened to be loaded yet.
+    compiled as a module which hasn't happened to be loaded yet.
   * E2fsck will now automatically fix a last mount time or last write time
     which is in the future in preen mode.
   * Mke2fs will now check the file system revision number requested by the
     command line, and reject it if it is too large.
   * If filefrag runs into an error, it will continue processing the rest
-    of the files specified on theommand line, but then exit with an
+    of the files specified on the command line, but then exit with an
     error code.
   * Filefrag now prints some additional new flags (such as
     FIEMAP_EXTENT_ENCODED), and print unknown flags as hex values.
   * Fixed support in filefrag for files with > 2**32 blocks on 32-bit
     platforms.
   * Fixed a file descriptor leak in debugfs when copying files.
-  * Add Esparanto and Ukrainian translations, and update Czech, Dutch,
-    French, German, Italian, Polish, Sweedish, and Vietnamese translations.
+  * Add Esperanto and Ukrainian translations, and update Czech, Dutch,
+    French, German, Italian, Polish, Swedish, and Vietnamese translations.
   * Fixed cross-compilation support.  (Closes: #753375)
   * Update/fix various man pages
 
@@ -412,7 +1123,7 @@ e2fsprogs (1.42.10-1) unstable; urgency=medium
     when the file system has more inodes than the number of seconds
     since January 1, 1970.
   * E2fsck will now check the whole file system if file system problems
-    are detected durings its initial "pass 0" sanity check
+    are detected during its initial "pass 0" sanity check
   * Filefrag now prints the "shared extent" flag which is used by some
     file systems such as btrfs
   * The mke2fs program would previously correctly omit the resize_inode
@@ -421,7 +1132,7 @@ e2fsprogs (1.42.10-1) unstable; urgency=medium
     the user explicitly specifies the file system size.
   * The message printed by logsave is now much less scary (Closes: #468821)
   * Fix spelling typo in the package descriptions
-  * Update Czech, Dutch, French, German, Polish, Spanish, Sweedish, and
+  * Update Czech, Dutch, French, German, Polish, Spanish, Swedish, and
     Vietnamese translations (Closes: #703048)
   * Update/fix various man pages
   * Fix debian/rules compatibility problem with GNU make 4.0
@@ -471,7 +1182,7 @@ e2fsprogs (1.42.9-1) unstable; urgency=low
     system with the uninit_bg feature enabled.
   * E2fsck will properly allocate a new extent tree block in the rare
     case where one is needed when rehashing an extent-mapped directory.
-  * Mke2fs wil now properly set the LARGE_FILE feature when creating a
+  * Mke2fs will now properly set the LARGE_FILE feature when creating a
     journal > 2GB.
   * Debugfs will now correctly handle free a range of inodes using the
     freei command.
@@ -600,7 +1311,7 @@ e2fsprogs (1.42.7-1) unstable; urgency=low
     statistics
   * Document the bigalloc feature in the mke2fs man page.
     (Closes: #669730)
-  * Update Czech, Dutch, French, German, Polish, Sweedish, and
+  * Update Czech, Dutch, French, German, Polish, Swedish, and
     Vietnamese translations
 
  -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 21 Jan 2013 21:52:58 -0500
@@ -726,7 +1437,7 @@ e2fsprogs (1.42.3-1) unstable; urgency=low
     particular, don't rewrite the quota inode unless the quotas are
     inconsistent
   * Optimized reading and writing bitmaps if direct I/O was enabled
-  * Update Czech, Dutch, French, German, Polish, Sweedish, and
+  * Update Czech, Dutch, French, German, Polish, Swedish, and
     Vietnamese translations
   * Fixed incorrect indentation in tune2fs man page
   * Update debian policy compliance to 3.9.3
@@ -851,7 +1562,7 @@ e2fsprogs (1.42~WIP-2011-10-16-1) unstable; urgency=low
   * Don't look at the high 16 bits of i_file_acl if the 64-bit feature
     is not enabled; this fixes a Hurd compatibility field since this is
     used for the high 16 bits of i_mode on Hurd.
-  * Update Sweedish, Polish, French, German, and Czech translations
+  * Update Swedish, Polish, French, German, and Czech translations
 
  -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 16 Oct 2011 22:07:03 -0400
 
@@ -863,7 +1574,7 @@ e2fsprogs (1.42~WIP-2011-10-09-1) unstable; urgency=low
   * Fixed various man pages
   * Fixed 64-bit block numbers in e2fsck's journal replay
   * Fixed mipsel FTBFS that was fixed for mips
-  * Update Sweedish, French, and Czech translations
+  * Update Swedish, French, and Czech translations
   * Convert to debian source 3.0 (quilt) format
 
  -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 09 Oct 2011 22:24:31 -0400
@@ -979,7 +1690,7 @@ e2fsprogs (1.42~WIP-2011-07-02-1) unstable; urgency=low
       if the file system is mounted, so that an escape sequence won't
       cause a false positive.  (Closes: #619859)
   * E2fsck now uses less cpu time in pass 5
-  * E2fsck will no longer segault when a corrupted file system has a bad
+  * E2fsck will no longer segfault when a corrupted file system has a bad
     extent, and removing it leads to a block needing to be deallocated.
   * E2fsck now supports an extended "discard" option which will cause
       e2fsck to attempt discard all unused blocks after a full check
@@ -995,7 +1706,7 @@ e2fsprogs (1.42~WIP-2011-07-02-1) unstable; urgency=low
       extended attributes and with time- and mount count-based file
       system checks disabled.
    * Mke2fs will not set a stride or strip size of one block based on
-       block bevice attributes obtained from sysfs.
+       block device attributes obtained from sysfs.
    * Mke2fs now displays a progress report during the discard process.
    * Mke2fs now handles extreme file system parameters correctly which
        previously caused the inodes per group to drop below 8, leading
@@ -1116,7 +1827,7 @@ e2fsprogs (1.41.12-1) unstable; urgency=low
   * Fixed e2fsck not to ask permission from the user to abort if it's
     going to abort regardless of what the user is going to say...
   * E2fsck can now continue even if it fails to recreate the resize inode
-  * E2fsck will now avoid removing directory entries for inods found in
+  * E2fsck will now avoid removing directory entries for inodes found in
     the unused region of the inode table until after it restarts the fs
     check to avoid removing valid data.
   * E2fsck will now longer try to set the block group checksums if it
@@ -1124,7 +1835,7 @@ e2fsprogs (1.41.12-1) unstable; urgency=low
   * Mke2fs will check both the physical and logical blocksizes of a
     device to better support 4k sector drives.
   * Mke2fs will accept the valid (but rarely useful) flex_bg size of 1
-  * E2fsck will check for cases where the EOFBLOCKS_FL is set whe nit is
+  * E2fsck will check for cases where the EOFBLOCKS_FL is set wheit is
     not needed, and offer to clear it.
   * The com_err library will now only output a CR character if the
     stderr is connected to a tty in raw mode.
@@ -1177,7 +1888,7 @@ e2fsprogs (1.41.10-1) unstable; urgency=low
     clocks.  (Closes: #559776)
   * Fix flex_bg inode table placement algorithm used by mke2fs for
     certain specific file system sizes
-  * Add source lintian overrids for weak-library-dev-dependency
+  * Add source lintian overrides for weak-library-dev-dependency
   * Fix FTBFS problem caused by texi2html changing (again) its output
     location.  (Closes: #552934)
   * Make e2fsck to avoid rehashing directories which can fit in a
@@ -1224,7 +1935,7 @@ e2fsprogs (1.41.10-1) unstable; urgency=low
   * Fix resize2fs to correctly calculate the minimum size needed, when
     flex_bg is enabled, to prevent resize2fs -M from failing.
   * Dumpe2fs now displays more information about the contents of the journal
-  * Make sure the libblkid1 and libblkid1-dbg packags have changelogs
+  * Make sure the libblkid1 and libblkid1-dbg packages have changelogs
   * On low memory systems, e2fsck can print some very scary looking
     error messages.  Clean up them up to avoid user panic.  (Closes: #509529)
   * Enhance blkid to support .ko.gz files in the modules.dep parser
@@ -1253,14 +1964,14 @@ e2fsprogs (1.41.9-1) unstable; urgency=low
     files when using FIBMAP.  (Closes: #540376)
   * Add a filefrag -B option to make it easier to debug the FIBMAP
     support.
-  * Allow e2fsprogs programs to allocate from uninitalized block groups.
+  * Allow e2fsprogs programs to allocate from uninitialized block groups.
   * Add a new program, e2freefrag, which displays information about the
     free space fragmentation in an ext2/3/4 filesystem.
   * E2fsck will now print much fuller information when the last mount
     time or last written time is in the future, since most people can't
     seem to believe their distribution has buggy init scripts, or they
     have a failed CMOS/RTS clock battery.
-  * Update French, Polish, Czech, and Sweedish translation from the
+  * Update French, Polish, Czech, and Swedish translation from the
     Translation Project.
   * Enhance debugfs's 'stat' command to print basic extent information
     for extent-mapped inodes, and add a new command, 'dump_extents'
@@ -1274,7 +1985,7 @@ e2fsprogs (1.41.8-2) unstable; urgency=low
     to fail on ext4 filesystems if the directory needs to shrink by more
     than a block (Closes: #537510)
   * Fixed filefrag for non-extent based files
-  * Fix use of apostrohe's in package descriptions
+  * Fix use of apostrophe's in package descriptions
   * Don't use dietlibc when building for mips and mipsel architectures
 
  -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 20 Jul 2009 09:38:21 -0400
@@ -1284,9 +1995,9 @@ e2fsprogs (1.41.8-1) unstable; urgency=low
   * New upstream release
   * Fix resize2fs bugs when shrinking ext4 filesystems
   * Update debian policy compliance to 3.8.2
-  * Update package descriptions to mention ext3 and ext4 filesytems
+  * Update package descriptions to mention ext3 and ext4 filesystems
       (Closes: #535530)
-  * Update French, Polish, Czech, Indonesian, and Sweedish translation
+  * Update French, Polish, Czech, Indonesian, and Swedish translation
       from the Translation Project.
   * If the resize2fs operation fails, the user will be told to fix up
     the filesystem using e2fsck -fy.
@@ -1310,17 +2021,17 @@ e2fsprogs (1.41.7-1) unstable; urgency=low
     which can cause e2fsck to run out of memory when checking very large
     filesystems using extents.
   * Fix a bug in libext2fs which can cause e2fsck and resize2fs to write
-    uninitalized data into the portion of the inode beyond the first 128
+    uninitialized data into the portion of the inode beyond the first 128
     bytes when operating on extents; potentially corrupting filesystems.
   * The logsave program will now filter out the ^A and ^B characters when
     writing to the console.
   * Update/clarify man pages (Closes: #531385, #523063)
-  * Fix filefrag progam so it correctly checks for errors from the
+  * Fix filefrag program so it correctly checks for errors from the
     fiemap ioctl.
   * Change badblocks to allow block sizes larger than 4k.
   * Fix libext2fs to properly initialize i_extra_size when creating the
     journal and resize inodes.
-  * Resize2fs will now update the journal backup fileds in the
+  * Resize2fs will now update the journal backup fields in the
     superblock if the journal is moved; this avoids an unnecessary full
     fsck after resizing the filesystem.
   * Use the same encoding as the kernel for rec_len == 64k in 64k block
@@ -1588,7 +2299,7 @@ e2fsprogs (1.41.1-1) unstable; urgency=low
     environment variables are set.
   * Fix filefrag's ideal extent calculation (Closes: #458306)
   * Fix postinstall scripts when the user/group is in LDAP (Closes: #497010)
-  * Add Indonesian and update French, Polish, Dutch, German, Sweedish,
+  * Add Indonesian and update French, Polish, Dutch, German, Swedish,
        Czech, and Vietnamese Translations.  (Closes: #313697, #401092)
   * Update/clarified man pages
   * Add dpkg-gensymbols support to track ABI changes to the libraries
@@ -1665,7 +2376,7 @@ e2fsprogs (1.41.0-1) unstable; urgency=medium
     descriptors first.
   * Fix resize2fs to clean up the resize_inode if all of the reserved
     gdt blocks are consumed during an off-line resize.
-  * Enable huge_file, dir_nlink, extra_isize feautres for mke2fs and tune2fs.
+  * Enable huge_file, dir_nlink, extra_isize features for mke2fs and tune2fs.
   * Enable huge_file, dir_nlink, extra_isize, and uninit_bg by default
     in mke2fs.conf.
   * Fix badblocks terminology in man page and program output.
@@ -1755,7 +2466,7 @@ e2fsprogs (1.40.10-1) unstable; urgency=low
 
   * Fix a very rare potential data corruption bug in e2fsck's journal
     replay.
-  * Updated German, Dutch, Sweedish, and Vietnamese translations.
+  * Updated German, Dutch, Swedish, and Vietnamese translations.
   * Force blkid to revalidate a device if its mtime is newer than the
     last validation time in the cache.
 
@@ -1777,7 +2488,7 @@ e2fsprogs (1.40.9-1) unstable; urgency=low
       and meta_bg filesystem features.
   * Use UID/GID ranges from adduser.conf if present, even though we
       don't use adduser to add users/groups.  (Closes: #473179)
-  * Updated German, Czech, Dutch, French, Polish, Sweedish, and
+  * Updated German, Czech, Dutch, French, Polish, Swedish, and
       Vietnamese translations.
   * Update/clarified the mke2fs man page
 
@@ -1799,7 +2510,7 @@ e2fsprogs (1.40.8-1) unstable; urgency=low
   * Fix e2fsck's handling of directory inodes with a corrupt size field.
   * Fully fix a resize2fs bug where extended attributes in large inodes
       could get dropped on big-endian systems.
-  * Update Czech, Dutch, Polish, Sweedish, and Vietnamese translations.
+  * Update Czech, Dutch, Polish, Swedish, and Vietnamese translations.
   * Significantly updated German translation!  Thanks to Philipp Thomas
     from Novell for stepping up to be our new German translation
     maintainer!  (Closes: #302512, #370247, #401092, #412882)
@@ -1813,7 +2524,7 @@ e2fsprogs (1.40.7-1) unstable; urgency=low
   * tune2fs no longer will remove the sparse_super feature, as it is dangerous
   * Update/clarified various man pages
   * Fix bug where large nodes were not getting fully copied when
-      shrinking a fileystem using resize2fs.
+      shrinking a filesystem using resize2fs.
   * Allow mke2fs and tune2fs to manipulate the large_file feature flag
   * Suppress fsck's warning message about an old-style fstab if the
       fstab file is empty.  (Closes: #468176)
@@ -1836,7 +2547,7 @@ e2fsprogs (1.40.7-1) unstable; urgency=low
       used by SELinux.
   * Add support in fsck to ignore mounted filesystems when given the -M option
   * Fix uuidd so it creates the pid file with the correct pid number
-  * Update Czech, Dutch, Polish, Sweedish, and Vietnamese translations
+  * Update Czech, Dutch, Polish, Swedish, and Vietnamese translations
       from the Translation Project.
 
  -- Theodore Y. Ts'o <tytso@mit.edu>  Thu, 28 Feb 2008 22:27:39 -0500
@@ -1876,7 +2587,7 @@ e2fsprogs (1.40.5-1) unstable; urgency=low
   * New upstream release.
   * Mke2fs will now create new filesystems with 256 byte inodes and the
       ext_attr feature flag by default.  This allows for much better
-      future compatibity with ext4 and speeds up extended attributes
+      future compatibility with ext4 and speeds up extended attributes
       even on ext3 filesystems.
   * Teach mke2fs and tune2fs to set a "test_fs" flag, which indicates
       that it is ok to use the filesystem on in-development kernel
@@ -1885,7 +2596,7 @@ e2fsprogs (1.40.5-1) unstable; urgency=low
       number.
   * Add support for detecting HFS+ and ext4/ext4dev filesystems in blkid
   * Fix blkid's ntfs UUID handling so it is compatible with vol_id
-  * Avoid a floating point exception when blkid tries to probe a corrpt
+  * Avoid a floating point exception when blkid tries to probe a corrupt
       reiserfs filesystem.
   * Fix potential overflow problem in e2image if the device name is
       too long.
@@ -2015,8 +2726,8 @@ e2fsprogs (1.40-1) unstable; urgency=low
   * Fix divide-by-zero error in blkid's NTFS proving logic
   * Add new blkid -g option which causes the blkid cache to be garbage
       collected
-  * libblkid: Fix bug which could cuase bid_type to be corrupted
-  * mke2fs: Add santy check to make sure inode_size * num_inodes isn't too big
+  * libblkid: Fix bug which could cause bid_type to be corrupted
+  * mke2fs: Add sanity check to make sure inode_size * num_inodes isn't too big
   * Fix additional Coverity bugs in mke2fs and e2fsck
   * Improve sanity check in e2fsck's algorithm for finding a backup superblock
   * Fix e2fsck get_size logic so that it will work with the Linux floppy
@@ -2050,7 +2761,7 @@ e2fsprogs (1.39+1.40-WIP-2007.04.07+dfsg-2) unstable; urgency=low
       systems
   * Fix blkid library to report the correct UUID from MD superblocks
   * Fix signed vs. unsigned problem in debugfs' setb/testb/freeb commands
-  * Enhance debugfs's date parser so it acccepts integer values
+  * Enhance debugfs's date parser so it accepts integer values
   * Fix e2fsck's pass1c accounting so it doesn't terminate too early
       if a file with multiply claimed blocks is hard linked. or not at
       all if the root directory contains shared blocks
@@ -2080,7 +2791,7 @@ e2fsprogs (1.39+1.40-WIP-2007.04.07+dfsg-2) unstable; urgency=low
 e2fsprogs (1.39+1.40-WIP-2007.04.07+dfsg-1) unstable; urgency=low
 
   * Add libreadline.so.5 support to libss.
-  * Impove badblocks -n/-w exclusive usage message.
+  * Improve badblocks -n/-w exclusive usage message.
   * Add debugging code (via the COMERR_DEBUG env. variable) to the
       com_err library
   * Fix dump_unused segfault in debugfs when a filesystem is not open
@@ -2088,7 +2799,7 @@ e2fsprogs (1.39+1.40-WIP-2007.04.07+dfsg-1) unstable; urgency=low
       (Closes: #413208)
   * Fix memory leak in blkid library.  (Closes: #413661)
   * Let the debugfs lcd command work even if a filesystem is not open
-  * Fix large number of miscellaneous Coveriy bugs.  (None were
+  * Fix large number of miscellaneous Coverity bugs.  (None were
       security-security).
   * Fix e2fsck to clear i_size for special devices with a bogus i_blocks
       field on the first pass.
@@ -2241,10 +2952,10 @@ e2fsprogs (1.38+1.39-WIP-2006.03.29-1) unstable; urgency=low
 
   * Add udeb: lines to the Debian's shlibs files (Closes: #356293)
   * Enhance dumpe2fs to print the size of the journal
-  * Fix e2sprogs so that it is 32-bit clean on x86 platorms.
+  * Fix e2sprogs so that it is 32-bit clean on x86 platforms.
   * Fix mklost+ound so that it creates a full-sized directory on 4k and
     larger block sizes.
-  * Add mke2fs.conf coniguration file to conigure mke2fs's defaults
+  * Add mke2fs.conf configuration file to configure mke2fs's defaults
   * Add devmapper support to the blkid library.
   * E2fsck, resize2fs and mke2fs will now open the filesystem device in
     exclusive mode
@@ -2261,7 +2972,7 @@ e2fsprogs (1.38+1.39-WIP-2006.03.29-1) unstable; urgency=low
   * Enhance e2fsck so it will fix the external journal hint in the
     superblock if it is out of date.
   * Fix debugfs's icheck to correctly report the owner of an EA block
-  * Update Sweedish translation
+  * Update Swedish translation
   * Add a configuration parameter to e2fsck.conf to control whether or not
     filesystem checks are done when the system is running on battery power.
   * Print an explanation when skipping a check due being on battery
@@ -2304,7 +3015,7 @@ e2fsprogs (1.38+1.39-WIP-2005.12.10-2) unstable; urgency=low
     this as a fatal error.  (Closes: #343662, #343645)
   * Move the blkid and uuidgen binaries out of libblkid1 and libuuid1 and
     into the e2fsprogs package to support soname transitions and
-    simulaneous installs of multiarch flavors to coexist.  (It's not worth
+    simultaneous installs of multiarch flavors to coexist.  (It's not worth
     creating two whole new packages for two separate binaries, so we just
     fold them into e2fsprogs.)  (Closes: #330737, #330736)
   * Optionally allow the user to interrupt e2fsck "safely" during a boot
@@ -2320,7 +3031,7 @@ e2fsprogs (1.38+1.39-WIP-2005.12.10-1) unstable; urgency=low
   * Detect if the superblock's last mount time or last write time is in
     the future, and offer to fix it if this is the case (Closes: #327580)
   * Add new debugfs command, set_current_time which sets the time used to
-    update the filesystems's time fields.
+    update the filesystem's time fields.
   * Fix display bug in badblocks -sw when printing the "done" message.
     (Closes: #322231)
   * Improve blkid's FAT/VFAT filesystem detection code so that it can find
@@ -2353,7 +3064,7 @@ e2fsprogs (1.38-2) unstable; urgency=low
   * Fix a compile_et bug which miscount the number of error messages if
     continuations are used in the .et file, and fix compatibility problems
     with MIT Kerberos 1.4
-  * Add extra sanity checks to protect users from unusual cirucmstances
+  * Add extra sanity checks to protect users from unusual circumstances
     where /etc/mtab may not be sane, by checking to see if the device is
     reported busy (works on Linux 2.6) kernels.  (Closes: #319002)
   * Fix use-after-free bug in e2fsck when finishing up the use of the
@@ -2363,7 +3074,7 @@ e2fsprogs (1.38-2) unstable; urgency=low
 
 e2fsprogs (1.38-1.1) unstable; urgency=low
 
-  * NMU for RC bug durring bug squishing party
+  * NMU for RC bug during bug squishing party
   * Fix for changes to texi2html, patch by Matt Kraai
     (Closes: #317862, #320389)
   * version build-depend on texi2html, won't work with older one anymore
@@ -2406,7 +3117,7 @@ e2fsprogs (1.37+1.38-WIP-0509-1) unstable; urgency=low
   * Make the blkid library much more efficient when a new device is added
     on systems with a huge number of disks.
   * Fix handling of the PAGER and SS_READLINE_PATH environment variables
-    in the ss library, and the TEST_IO_* environemnt vaiables for the
+    in the ss library, and the TEST_IO_* environment variables for the
     test_io io_manager, which was accidentally broken in 1.37-1.
   * Fix libblkid's recognition of cramfs filesystems, and add support for
     cramfs labels.
@@ -2564,13 +3275,13 @@ e2fsprogs (1.36rc1-1) unstable; urgency=low
         "4g" on the command line) if the user finds this more convenient
         than specifying a block count.
   * Fix an obscure, hard-to find bug in "e2fsck -S" caused by an inode
-        cache conherency problem.
+        cache coherency problem.
   * Debugfs now supports a new command, set_inode_field, which allows a
         user to manually set a specific inode field more conveniently, as
         well as set entries in the indirect block map.
   * Debugfs's set_super_value command has been enhanced so that the user
         can set most superblock fields, including the date/time fields and
-        some of the more newsly added superblock fields.
+        some of the more newly added superblock fields.
   * E2fsprogs programs now accept an offset to be passed to the file
         specifiers, via the syntax: "/tmp/test.img?offset=1024"
   * E2fsprogs will now accept blocksizes up to 65536; kernel support on
@@ -2648,7 +3359,7 @@ e2fsprogs (1.35-6) unstable; urgency=low
     we need an explict Conflict: sysvinit (<< 2.85-4) header. (Closes: #243829)
   * Update the UUID library man pages
   * Fix a Y8.8888K potential problem with the uuid library
-  * Minor updates to the german translation
+  * Minor updates to the German translation
   * Clarified/corrected the copyright statements of the UUID and blkid
     libraries in the Debian copyright files.
   * Added sanity check to the blkid library so that if current time is
@@ -2674,7 +3385,7 @@ e2fsprogs (1.35-5) unstable; urgency=low
   * Use the DEBUGFS_PAGER environment variable in preference to PAGER
     (Closes: #239547)
   * Added French translation
-  * Be flexible about the name of the ACPI device that cooresponds to
+  * Be flexible about the name of the ACPI device that corresponds to
     the AC adapter (Closes: #242136)
 
  -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 12 Apr 2004 12:38:34 -0400
@@ -2753,7 +3464,7 @@ e2fsprogs (1.34+1.35-WIP-2004.01.31-1) unstable; urgency=medium
     for debugfs (unfortunately, Debian policy says we must use
     /usr/bin/pager even if it results in very annoying behaviour for
     the user since 'less' is used in preference to 'more' unless it is
-    globally overriden via update-alternatives(8).  Oh, well.  Debian
+    globally overridden via update-alternatives(8).  Oh, well.  Debian
     users are encouraged to set DEBUGFS_PAGER to be "more" in their
     dot files to avoid this brain damage).
   * Fix libuuid1-udeb so that it provides libuuid1.  (Closes: #229633)
@@ -2797,7 +3508,7 @@ e2fsprogs (1.34+1.35-WIP-2003.12.07-1) unstable; urgency=medium
   * Fix handling of corrupted indirect blocks in the bad block inode.
   * If the number of mounts until the next forced filesystem check is less
     than 6, mention this to the user.  (Closes: #157194)
-  * E2fsck will try to avoid doing a forced filesystem chcek if a system
+  * E2fsck will try to avoid doing a forced filesystem check if a system
     is running on batteries according to APM or ACPI.  (Closes: #205177)
   * Fix problems in the German translation.  (Closes: #2000086)
   * Updated Swedish translation and added Polish translation.
@@ -2863,7 +3574,7 @@ e2fsprogs (1.34-2) unstable; urgency=low
   * Fix erroneous reference to /usr/share/doc/e2fsprogs/html-info in
     /usr/share/doc-base/libext2fs (Closes: #203157)
   * Explicitly specify the version of libblkid1 needed in
-    e2fsprogs.shlibs.local in order to avoid picking up the wrong depedency.
+    e2fsprogs.shlibs.local in order to avoid picking up the wrong dependency.
     (Closes: #203157)
   * Changed priority of libblkid1-udeb to be standard, not required.
 
@@ -2943,7 +3654,7 @@ e2fsprogs (1.33+1.34-WIP-2003.05.21-1) unstable; urgency=low
 e2fsprogs (1.33-5) unstable; urgency=low
 
   * Clarify blocksize units when displaying messages in resize2fs, and
-    support using suffixes (sectors, kilobytes, megabites, gigabytes)
+    support using suffixes (sectors, kilobytes, megabytes, gigabytes)
     to the size parameter to indicate units.  (Closes: #189814)
   * Fix debugfs core-dumping problem caused by getopt.  (Works around: #192834)
   * Add package dependency to shlibs for comerr to indicate support
@@ -3011,11 +3722,11 @@ e2fsprogs (1.32+1.33-WIP-2003.03.30-3) unstable; urgency=low
 
   * Provide /usr/include/com_err.h, which was previously provided by the
     libkrb5-dev package
-  * Change the sectoin of com_err-dev, ss-dev, uuid-dev, libblkid-dev,
+  * Change the section of com_err-dev, ss-dev, uuid-dev, libblkid-dev,
     e2fslibs-dev to libdevel
   * Add libblkid1-udeb package for the Debian Installer.
   * Use the SS_READLINE_PATH environment variable to control the search
-    for a suitable readine library.
+    for a suitable readline library.
   * Fix bug in mke2fs, which was was incorrectly checking the argument
     to the -g option if the default block size is used.  (Closes: #188319)
   * Update man pages.  (Closes: #188318)
@@ -3038,7 +3749,7 @@ e2fsprogs (1.32+1.33-WIP-2003.03.30-2) unstable; urgency=low
     the block group specific counters quietly.  This is needed for an
     experimental kernel patch which improves SMP scalability by not
     locking the entire filesystem during block or inode allocation; if
-    the filesystem is not unmoutned cleanly, the global counts may not
+    the filesystem is not unmounted cleanly, the global counts may not
     be accurate.
   * Fix a bug in fsck which can cause it to hang trying to access the
     floppy disk if there the floppy drive has filesystem type of
@@ -3101,7 +3812,7 @@ e2fsprogs (1.29-1) unstable; urgency=low
   * Generate udeb package for debian-installer (Martin Sjoegren, Closes:
     #162212).
   * Fixed installation of mkinitrd script (don't use dh_install).  Remove
-    it from the wrong location where it was, in preinst.  Hopefully noone
+    it from the wrong location where it was, in preinst.  Hopefully no one
     noticed.
   * Also have old scripts/e2fsprogs.mkinitrd removed.
   * Bumped Standards-Version to 3.5.6, no change.  3.5.7 will need a bit
@@ -3138,7 +3849,7 @@ e2fsprogs (1.28-3) unstable; urgency=low
 
 e2fsprogs (1.28-2) unstable; urgency=low
 
-  * Fixed my adapation of the mips non-pic build (Closes: #159757).
+  * Fixed my adaption of the mips non-pic build (Closes: #159757).
 
  -- Yann Dirson <dirson@debian.org>  Fri,  6 Sep 2002 00:03:45 +0200
 
@@ -3226,7 +3937,7 @@ e2fsprogs (1.26-2) unstable; urgency=low
 e2fsprogs (1.26-1) unstable; urgency=low
 
   * This uploads fixes 10 bugs, including data-corruption problems, and
-    adds much to the ease of maintainance and problem tracking.  Good
+    adds much to the ease of maintenance and problem tracking.  Good
     choice for woody.
 
   * New upstream release (Closes: #106622, #116975, #118443, #119624,
@@ -3235,7 +3946,7 @@ e2fsprogs (1.26-1) unstable; urgency=low
     trashed external journals needing to be replayed, e2fsck now hides
     visible journal files (data corruption problems when not excluded from
     a backup and then restored) (Closes: #132654).
-  ** Other noticable bugs fixed include: e2fsck null pointer
+  ** Other noticeable bugs fixed include: e2fsck null pointer
     dereferencing, fsck did not finds LVM volumes by UUID or by label,
     largefile support (ie. dealing with filesystems inside 2GB+ files) was
     broken in several programs.
@@ -3420,14 +4131,14 @@ e2fsprogs (1.19+1.20-WIP-0514-1) unstable; urgency=low
     tune2fs.
   * New binary package with statically linked e2fsck, recommending a
     statically linked shell (Closes: #62611).
-  * All deps against e2fsprogs itself now versionned (lintian).
+  * All deps against e2fsprogs itself now versioned (lintian).
   * Updated copyright file (upstream location, packaging copyright notice
     for previous maintainers and for Alcove).
-  * Remove call to dh_testversion, use versionned build-dep instead
+  * Remove call to dh_testversion, use versioned build-dep instead
     (lintian).
   * Support for DEB_BUILD_OPTIONS debug/nostrip for policy 3.2
     compliance.
-  * Use dh_shlibdeps -l instead of setting LD_LIBRARY_PATH explicitely -
+  * Use dh_shlibdeps -l instead of setting LD_LIBRARY_PATH explicitly -
     necessary for new versions of fakeroot, and requires debhelper 3.0.23
     for a fix.  Well finally 3.0.23 is buggy, leave this for later.
   * Avoid to call ldconfig at "make install" time, too costly.
@@ -3459,7 +4170,7 @@ e2fsprogs (1.19-2) unstable; urgency=low
 
   * Clarified libuuid copyright to LGPL-2, excluding LGPL-2.1.
   * Added build-dependency on debhelper (Closes: #67532).
-  * Don't paralelize fsck runs on same drive for hd[efgh] (Closes:
+  * Don't parallelize fsck runs on same drive for hd[efgh] (Closes:
     #59103).
   * Upload pristine source, -1 was erroneously uploaded as a
     debian-specific package.
@@ -3583,7 +4294,7 @@ e2fsprogs (1.14-3) unstable; urgency=low
   * Fail with error message when /dev/null cannot be opened (Fixes:
     Bug#35595).
   * Fixed typo in e2fsck/unix.c (Fixes: Bug#36960).
-  * Added "emeregency help" options summary to e2fsck (Fixes: Bug#11372).
+  * Added "emergency help" options summary to e2fsck (Fixes: Bug#11372).
   * Prepared debian/rules for usr/share/man/.
 
  -- Yann Dirson <dirson@debian.org>  Tue,  1 Jun 1999 23:37:12 +0200
@@ -3608,7 +4319,7 @@ e2fsprogs (1.14-1) unstable; urgency=low
   * Incorporated patches from Gordon Matzigkeit for hurd cross-compilation:
   * - configure.in: Change cross-compile default for sizeof (long
       long) to 8, so that __s64 and __u64 get defined in ext2fs.h.
-      (BUILD_CC): Discover a native compiler if we are cross-compling
+      (BUILD_CC): Discover a native compiler if we are cross-compiling
       (used for util/subst).
     - Include linux/types.h instead of asm/types.h, so that
       non-Linux platforms use the stubbed version provided with this
@@ -3938,7 +4649,7 @@ e2fsprogs (1.02-1) unstable; urgency=low
   * copied "configure" usr_prefix change (see below), into configure.in
   * updated debian.control file, added Pre-Depends field
     created preinst script to check dpkg --assert-predepends
-    tidyed and fixed debian.rules
+    tidied and fixed debian.rules
   * set e2fsck to link shared, as suggested by Bruce Perens in Bug#2332
   * corrected problem in e2fsck error message, Bug#2534
   * added Architecture field
@@ -3967,7 +4678,7 @@ e2fsprogs (0.5b-2) unstable; urgency=low
 e2fsprogs (0.5b-1) unstable; urgency=low
 
   * Made "fsck -t <filesystem-type> <device>" work correctly. Formerly
-    the -t argument was overriden by the filesystem type listed for the
+    the -t argument was overridden by the filesystem type listed for the
     device in /etc/fstab.
   * added Debian GNU/Linux package maintenance system files
 
diff --git a/debian/comerr-dev.postinst b/debian/comerr-dev.postinst
new file mode 100644 (file)
index 0000000..aae743a
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# Abort on error.
+set -e
+
+symlink_match()
+{
+       local SYMLINK="$1"
+       local SYMLINK_TARGET="$2"
+
+       [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \
+       [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ]
+}
+
+SYMLINK=/usr/share/doc/comerr-dev
+SYMLINK_TARGET=libcomerr2
+SYMLINK_TARGET2=libcom-err2
+
+if [ "$1" = "configure" ] && [ -h "${SYMLINK}.dpkg-backup" ]
+then
+    if symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET" ||
+       symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET2"
+    then
+       rm -f "${SYMLINK}.dpkg-backup"
+    fi
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/comerr-dev.postrm b/debian/comerr-dev.postrm
new file mode 100644 (file)
index 0000000..8f9e679
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# Abort on error.
+set -e
+
+symlink_match()
+{
+       local SYMLINK="$1"
+       local SYMLINK_TARGET="$2"
+
+       [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \
+       [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ]
+}
+
+SYMLINK=/usr/share/doc/comerr-dev
+SYMLINK_TARGET=libcomerr2
+SYMLINK_TARGET2=libcom-err2
+
+if [ "$1" = "purge" ] && [ -h "${SYMLINK}.dpkg-backup" ]
+then
+       rm -f "${SYMLINK}.dpkg-backup"
+fi
+if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] &&
+   [ -n "$2" ] && [ ! -e "$SYMLINK" ] && [ -h "${SYMLINK}.dpkg-backup" ]
+then
+    if symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET" ||
+       symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET2"
+    then
+       echo "Restoring backup of $SYMLINK ..."
+       mv "${SYMLINK}.dpkg-backup" "$SYMLINK"
+    fi
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/comerr-dev.preinst b/debian/comerr-dev.preinst
new file mode 100644 (file)
index 0000000..5d8090a
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+# Abort on error.
+set -e
+
+symlink_match()
+{
+       local SYMLINK="$1"
+       local SYMLINK_TARGET="$2"
+
+       [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \
+       [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ]
+}
+
+SYMLINK=/usr/share/doc/comerr-dev
+SYMLINK_TARGET=libcomerr2
+SYMLINK_TARGET2=libcom-err2
+
+if [ "$1" = "install" -o "$1" = "upgrade" ] &&
+   [ -n "$2" ] && [ -h "$SYMLINK" ]
+then
+    if symlink_match "$SYMLINK" "$SYMLINK_TARGET" ||
+       symlink_match "$SYMLINK" "$SYMLINK_TARGET2"
+    then
+       mv -f "$SYMLINK" "${SYMLINK}.dpkg-backup"
+    fi
+fi
+
+#DEBHELPER#
+
+exit 0
index ec63514..48082f7 100644 (file)
@@ -1 +1 @@
-9
+12
diff --git a/debian/control b/debian/control
new file mode 100644 (file)
index 0000000..6d714b4
--- /dev/null
@@ -0,0 +1,216 @@
+Source: e2fsprogs
+Section: admin
+Priority: required
+Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+Build-Depends: gettext, texinfo, pkg-config, libfuse-dev [linux-any kfreebsd-any] <!pkg.e2fsprogs.no-fuse2fs>, debhelper (>= 12.0), dh-exec, libblkid-dev, uuid-dev, m4, udev [linux-any], systemd [linux-any], cron [linux-any]
+Standards-Version: 4.5.1
+Homepage: http://e2fsprogs.sourceforge.net
+Vcs-Browser: https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
+Vcs-Git: https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git -b debian/master
+
+Package: fuse2fs
+Build-Profiles: <!pkg.e2fsprogs.no-fuse2fs>
+Priority: optional
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Architecture: linux-any kfreebsd-any
+Description: ext2 / ext3 / ext4 file system driver for FUSE
+ fuse2fs is a FUSE file system client that supports reading and
+ writing from devices or image files containing ext2, ext3, and ext4
+ file systems.
+
+Package: logsave
+Priority: optional
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Replaces: e2fsprogs (<< 1.45.3-1)
+Breaks: e2fsprogs (<< 1.45.3-1)
+Architecture: any
+Multi-Arch: foreign
+Description: save the output of a command in a log file
+ The logsave program will execute cmd_prog with the specified
+ argument(s), and save a copy of its output to logfile.  If the
+ containing directory for logfile does not exist, logsave will
+ accumulate the output in memory until it can be written out.  A copy
+ of the output will also be written to standard output.
+
+Package: e2fsck-static
+Priority: optional
+Depends: ${misc:Depends}
+Recommends: sash | bash-static | zsh-static | busybox-static
+Architecture: any
+Description: statically-linked version of the ext2/ext3/ext4 filesystem checker
+ This may be of some help to you if your filesystem gets corrupted enough
+ to break the shared libraries used by the dynamically linked checker.
+ .
+ This binary takes much more space than its dynamic counterpart located
+ in e2fsprogs, though.
+ .
+ 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.
+
+Package: e2fsprogs-l10n
+Section: localization
+Priority: optional
+Depends: e2fsprogs (>= ${binary:Version}), e2fsprogs (<< ${binary:Version}+c~), ${misc:Depends}
+Replaces: e2fsprogs (<< 1.43.5-1)
+Architecture: all
+Multi-Arch: foreign
+Description: ext2/ext3/ext4 file system utilities - translations
+ The ext2, ext3 and ext4 file systems are successors of the original ext
+ ("extended") file system. They are the main file system types used for
+ hard disks on Debian and other Linux systems.
+ .
+ This package provides translations for messages for programs found in
+ the 'e2fsprogs' package.
+
+Package: libcomerr2
+Depends: libcom-err2, ${misc:Depends}
+Architecture: any
+Multi-Arch: same
+Priority: optional
+Section: oldlibs
+Description: transitional package to libcom-err2
+ This is a transitional package to libcom-err2. It can safely be removed.
+
+Package: libcom-err2
+Section: libs
+Priority: optional
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Replaces: libcomerr2 (<< 1.43.9-1~)
+Breaks: libcomerr2 (<< 1.43.9-1~)
+Provides: libcomerr2 (= ${binary:Version})
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Description: common error description library
+ libcomerr is an attempt to present a common error-handling mechanism to
+ manipulate the most common form of error code in a fashion that does not
+ have the problems identified with mechanisms commonly in use.
+
+Package: comerr-dev
+Section: libdevel
+Priority: optional
+Depends: libc6-dev | libc-dev, libcom-err2 (= ${mainBinary}), ${misc:Depends}
+Suggests: doc-base
+Replaces: e2fslibs-dev (<< 1.33-2), libkrb5-dev (<< 1.3)
+Architecture: any
+Multi-Arch: same
+Description: common error description library - headers and static libraries
+ libcom_err is an attempt to present a common error-handling mechanism to
+ manipulate the most common form of error code in a fashion that does not
+ have the problems identified with mechanisms commonly in use.
+ .
+ This package contains the development environment for the com_err library.
+
+Package: libss2
+Section: libs
+Priority: optional
+Depends: libcom-err2, ${shlibs:Depends}, ${misc:Depends}
+Replaces: e2fsprogs (<< 1.34-1)
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Description: command-line interface parsing library
+ libss provides a simple command-line interface parser which will
+ accept input from the user, parse the command into an argv argument
+ vector, and then dispatch it to a handler function.
+ .
+ It was originally inspired by the Multics SubSystem library.
+
+Package: ss-dev
+Section: libdevel
+Priority: optional
+Depends: libc6-dev | libc-dev, libss2 (= ${mainBinary}), comerr-dev, ${misc:Depends}
+Architecture: any
+Multi-Arch: same
+Description: command-line interface parsing library - headers and static libraries
+ This package includes a tool that parses a command table to generate
+ a simple command-line interface parser, the include files needed to
+ compile and use it, and the static libs.
+ .
+ It was originally inspired by the Multics SubSystem library.
+ .
+ This package contains the development environment for the ss library.
+
+Package: e2fsprogs-udeb
+Package-Type: udeb
+Section: debian-installer
+Priority: optional
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Architecture: any
+Description: stripped-down versions of e2fsprogs, for debian-installer
+ This package is an e2fsprogs package built for a reduced size, so that
+ it can help to save space in debian-installer.
+ .
+ Don't attempt to install this package, it has no support for a couple of
+ features you surely want.  Anyway it should refuse to install.
+
+Package: e2fslibs
+Depends: libext2fs2, ${misc:Depends}
+Architecture: any
+Multi-Arch: same
+Priority: optional
+Section: oldlibs
+Description: transitional package to libext2fs2
+ This is a transitional package to libext2fs2. It can safely be removed.
+
+Package: e2fslibs-dev
+Depends: libext2fs-dev, ${misc:Depends}
+Architecture: all
+Priority: optional
+Section: oldlibs
+Description: transitional package to libext2fs-dev
+ This is a transitional package to libext2fs-dev. It can safely be removed.
+
+Package: libext2fs2
+Section: libs
+Priority: optional
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Replaces: e2fslibs (<< 1.43.9-1~)
+Breaks: e2fslibs (<< 1.43.9-1~)
+Provides: e2fslibs (= ${binary:Version})
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Description: ext2/ext3/ext4 file system libraries
+ The ext2, ext3 and ext4 file systems are successors of the original ext
+ ("extended") file system. They are the main file system types used for
+ hard disks on Debian and other Linux systems.
+ .
+ This package provides the ext2fs and e2p libraries, for userspace software
+ that directly accesses extended file systems. Programs that use libext2fs
+ include e2fsck, mke2fs, and tune2fs. Programs that use libe2p include
+ dumpe2fs, chattr, and lsattr.
+
+Package: libext2fs-dev
+Section: libdevel
+Priority: optional
+Depends: libc6-dev | libc-dev, comerr-dev, libext2fs2 (= ${binary:Version}), ${misc:Depends}
+Replaces: e2fslibs-dev (<< 1.43.9-1~)
+Breaks: e2fslibs-dev (<< 1.43.9-1~)
+Provides: e2fslibs-dev (= ${binary:Version})
+Suggests: doc-base
+Architecture: any
+Description: ext2/ext3/ext4 file system libraries - headers and static libraries
+ The ext2, ext3 and ext4 file systems are successors of the original ext
+ ("extended") file system. They are the main file system types used for
+ hard disks on Debian and other Linux systems.
+ .
+ This package contains the development environment for the ext2fs and e2p
+ libraries.
+
+Package: e2fsprogs
+XB-Important: yes
+Pre-Depends: ${shlibs:Depends}, ${misc:Depends}, libblkid1, libuuid1
+Depends: logsave
+Multi-Arch: foreign
+Suggests: gpart, parted, fuse2fs, e2fsck-static
+Recommends: e2fsprogs-l10n
+Architecture: any
+Description: ext2/ext3/ext4 file system utilities
+ The ext2, ext3 and ext4 file systems are successors of the original ext
+ ("extended") file system. They are the main file system types used for
+ hard disks on Debian and other Linux systems.
+ .
+ This package contains programs for creating, checking, and maintaining
+ ext2/3/4-based file systems.  It also includes the "badblocks" program,
+ which can be used to scan for bad blocks on a disk or other storage device.
diff --git a/debian/control.in b/debian/control.in
deleted file mode 100644 (file)
index 23b9d58..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-define(MULTIARCH_HEADERS,ifdef(`DO_MULTIARCH',
-Multi-Arch: same
-Pre-Depends: ${misc:Pre-Depends},REMOVE_ME))dnl
-define(UTIL_LINUX_NG_DEFINES,
-ifdef(`UTIL_LINUX_NG', ``libblkid-dev (>= 2.16), uuid-dev (>= 2.16),''))dnl
-Source: e2fsprogs
-Section: admin
-Priority: required
-Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
-Build-Depends: gettext, texinfo, pkg-config, gcc-multilib [mips mipsel], libfuse-dev [linux-any kfreebsd-any], libattr1-dev, debhelper (>= 9.0), UTIL_LINUX_NG_DEFINES m4
-Standards-Version: 3.9.8
-Homepage: http://e2fsprogs.sourceforge.net
-
-ifdef(`FUSE2FS',``
-Package: fuse2fs
-Priority: optional
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Architecture: linux-any kfreebsd-any
-Description: ext2 / ext3 / ext4 file system driver for FUSE
- fuse2fs is a FUSE file system client that supports reading and
- writing from devices or image files containing ext2, ext3, and ext4
- file systems.
-'')dnl
-
-ifdef(`E2FSCK_STATIC',``
-Package: e2fsck-static
-Priority: optional
-Depends: ${misc:Depends}
-Recommends: sash | bash-static | zsh-static | busybox-static | zsh30-static
-Architecture: any
-Description: statically-linked version of the ext2/ext3/ext4 filesystem checker
- This may be of some help to you if your filesystem gets corrupted enough
- to break the shared libraries used by the dynamically linked checker.
- .
- This binary takes much more space than its dynamic counterpart located
- in e2fsprogs, though.
- .
- 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
-Provides: libcomerr-kth-compat
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Replaces: e2fsprogs (<< 1.34-1)
-Architecture: any
-MULTIARCH_HEADERS
-Description: common error description library
- libcomerr is an attempt to present a common error-handling mechanism to
- manipulate the most common form of error code in a fashion that does not
- have the problems identified with mechanisms commonly in use.
-
-Package: comerr-dev
-Section: libdevel
-Priority: extra
-Depends: libc6-dev | libc-dev, libcomerr2 (= ${mainBinary}), ${misc:Depends}
-Suggests: doc-base
-Replaces: e2fslibs-dev (<< 1.33-2), libkrb5-dev (<< 1.3)
-Architecture: any
-Description: common error description library - headers and static libraries
- libcom_err is an attempt to present a common error-handling mechanism to
- manipulate the most common form of error code in a fashion that does not
- have the problems identified with mechanisms commonly in use.
- .
- This package contains the development environment for the com_err library.
-
-Package: libss2
-Section: libs
-Depends: libcomerr2, ${shlibs:Depends}, ${misc:Depends}
-Replaces: e2fsprogs (<< 1.34-1)
-Architecture: any
-MULTIARCH_HEADERS
-Description: command-line interface parsing library
- libss provides a simple command-line interface parser which will
- accept input from the user, parse the command into an argv argument
- vector, and then dispatch it to a handler function.
- .
- It was originally inspired by the Multics SubSystem library.
-
-Package: ss-dev
-Section: libdevel
-Priority: extra
-Depends: libc6-dev | libc-dev, libss2 (= ${mainBinary}), comerr-dev, ${misc:Depends}
-Architecture: any
-Description: command-line interface parsing library - headers and static libraries
- This package includes a tool that parses a command table to generate
- a simple command-line interface parser, the include files needed to
- compile and use it, and the static libs.
- .
- It was originally inspired by the Multics SubSystem library.
- .
- This package contains the development environment for the ss library.
-ifdef(`UTIL_LINUX_NG',,``
-Package: libuuid1
-Section: libs
-Depends: passwd, ${shlibs:Depends}, ${misc:Depends}
-Recommends: uuid-runtime
-Replaces: e2fsprogs (<< 1.34-1)
-Architecture: any
-MULTIARCH_HEADERS
-Description: Universally Unique ID library
- The libuuid library generates and parses 128-bit universally unique
- ids (UUIDs).  A UUID is an identifier that is unique across both
- space and time, with respect to the space of all UUIDs.  A UUID can
- be used for multiple purposes, from tagging objects with an extremely
- short lifetime, to reliably identifying very persistent objects
- across a network.
- .
- See RFC 4122 for more information.  
-
-Package: uuid-runtime
-Section: libs
-Priority: optional
-Depends: passwd, libuuid1 (>> 1.40.3-1), ${shlibs:Depends}, ${misc:Depends}
-Replaces: e2fsprogs (<= 1.40.3-1ubuntu1)
-Architecture: any
-Description: runtime components for the Universally Unique ID library
- The libuuid library generates and parses 128-bit universally unique
- ids (UUIDs).  A UUID is an identifier that is unique across both
- space and time, with respect to the space of all UUIDs.  A UUID can
- be used for multiple purposes, from tagging objects with an extremely
- short lifetime, to reliably identifying very persistent objects
- across a network.
- .
- See RFC 4122 for more information.  
- .
- This package contains the uuidgen program and the uuidd daemon.
- .
- The uuidd daemon is used to generate UUIDs, especially time-based
- UUID’s, in a secure and guaranteed-unique fashion, even in the face
- of large numbers of threads trying to grab UUID’s running on
- different CPU’s. It is used by libuuid as well as the uuidgen
- program.
-
-ifdef(`UDEB_PKGS',``
-Package: libuuid1-udeb
-Package-Type: udeb
-Section: debian-installer
-Priority: optional
-Depends: ${shlibs:Depends}
-Architecture: any
-Description: stripped down universally unique id library, for debian-installer
- libuuid generates and parses 128-bit universally unique ids (UUIDs).
- See RFC 4122 for more information.
- .
- This is a minimal package for debian-installer.
-'')dnl
-
-Package: uuid-dev
-Section: libdevel
-Priority: extra
-Depends: libc6-dev | libc-dev, libuuid1 (= ${mainBinary}), ${misc:Depends}
-Replaces: e2fslibs-dev (<< 1.15)
-Architecture: any
-Description: universally unique id library - headers and static libraries
- libuuid generates and parses 128-bit universally unique ids (UUIDs).
- See RFC 4122 for more information.
- .
- This package contains the development environment for the uuid library.
-
-Package: libblkid1
-Section: libs
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Architecture: any
-Description: block device id library
- The blkid library which allows system programs like fsck and 
- mount to quickly and easily find block devices by filesystem UUID and 
- LABEL.  This allows system administrators to avoid specifying 
- filesystems by hard-coded device names, but via a logical naming 
- system instead.
-
-ifdef(`UDEB_PKGS',``
-Package: libblkid1-udeb
-Package-Type: udeb
-Section: debian-installer
-Priority: optional
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Architecture: any
-Description: stripped down block device id library, for debian-installer
- The blkid library which allows system programs like fsck and 
- mount to quickly and easily find block devices by filesystem UUID and 
- LABEL.  This allows system administrators to avoid specifiying 
- filesystems by hard-coded device names, but via a logical naming 
- system instead.
- .
- This is a minimal package for debian-installer.
-'')dnl
-
-Package: libblkid-dev
-Section: libdevel
-Priority: extra
-Depends: libc6-dev | libc-dev, libblkid1 (= ${binary:Version}), ${misc:Depends}
-Architecture: any
-Description: block device id library - headers and static libraries
- The blkid library which allows system programs like fsck and 
- mount to quickly and easily find block devices by filesystem UUID and 
- LABEL.  This allows system administrators to avoid specifiying 
- filesystems by hard-coded device names, but via a logical naming 
- system instead.
- .
- This package contains the development environment for the blkid library.
-'')dnl
-
-ifdef(`UDEB_PKGS',``
-Package: e2fsprogs-udeb
-Package-Type: udeb
-Section: debian-installer
-Priority: optional
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Architecture: any
-Description: stripped-down versions of e2fsprogs, for debian-installer
- This package is an e2fsprogs package built for a reduced size, so that
- it can help to save space in debian-installer.
- .
- Don'''``t attempt to install this package, it has no support for a couple of
- features you surely want.  Anyway it should refuse to install.
-'')dnl
-
-Package: e2fslibs
-Section: libs
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Replaces: e2fsprogs (<< 1.34-1)
-Provides: libext2fs2, libe2p2
-Architecture: any
-MULTIARCH_HEADERS
-Description: ext2/ext3/ext4 file system libraries
- The ext2, ext3 and ext4 file systems are successors of the original ext
- ("extended") file system. They are the main file system types used for
- hard disks on Debian and other Linux systems.
- .
- This package provides the ext2fs and e2p libraries, for userspace software
- that directly accesses extended file systems. Programs that use libext2fs
- include e2fsck, mke2fs, and tune2fs. Programs that use libe2p include
- dumpe2fs, chattr, and lsattr.
-
-Package: e2fslibs-dev
-Section: libdevel
-Priority: extra
-Depends: libc6-dev | libc-dev, comerr-dev, e2fslibs (= ${binary:Version}), ${misc:Depends}
-Suggests: doc-base
-Provides: ext2fs-dev, e2p-dev
-Replaces: libkrb5-dev (<< 1.3)
-Architecture: any
-Description: ext2/ext3/ext4 file system libraries - headers and static libraries
- The ext2, ext3 and ext4 file systems are successors of the original ext
- ("extended") file system. They are the main file system types used for
- hard disks on Debian and other Linux systems.
- .
- This package contains the development environment for the ext2fs and e2p 
- libraries.
-
-Package: e2fsprogs
-Essential: yes
-ifdef(`UTIL_LINUX_NG',
-``Pre-Depends: ${shlibs:Depends}, ${misc:Depends}, util-linux (>= 2.15~rc1-1)
-'',
-``Pre-Depends: ${shlibs:Depends}, ${misc:Depends}
-'')dnl
-Multi-Arch: foreign
-Suggests: gpart, parted, fuse2fs, e2fsck-static
-Conflicts: dump (<< 0.4b4-4), quota (<< 1.55-8.1), initscripts (<< 2.85-4), sysvinit (<< 2.85-4)
-Replaces: hurd (<= 20040301-1), libblkid1 (<< 1.38+1.39-WIP-2005.12.10-2), libuuid1 (<< 1.38+1.39-WIP-2005.12.10-2)
-Architecture: any
-Description: ext2/ext3/ext4 file system utilities
- The ext2, ext3 and ext4 file systems are successors of the original ext
- ("extended") file system. They are the main file system types used for
- hard disks on Debian and other Linux systems.
- .
- This package contains programs for creating, checking, and maintaining
- ext2/3/4-based file systems.  It also includes the "badblocks" program,
- which can be used to scan for bad blocks on a disk or other storage device.
-ifdef(`USE_DBGSYM',,``
-Package: e2fsprogs-dbg
-Section: debug
-Priority: extra
-Depends: e2fsprogs (= ${binary:Version}), ${misc:Depends}
-Architecture: any
-Description: debugging information for e2fsprogs
- This package includes the debug information useful for debugging e2fsprogs
- and its libraries, contained in the e2fsprogs and e2fsck-static packages.
- The debug information is used for execution tracing and core
- dump analysis.
-'')
-ifdef(`USE_DBGSYM',,ifdef(`UTIL_LINUX_NG',,``
-Package: uuid-runtime-dbg
-Section: debug
-Priority: extra
-Depends: uuid-runtime (= ${binary:Version}), ${misc:Depends}
-Architecture: any
-Description: debugging information for uuid-runtime
- This package includes the debug information useful for debugging the
- uuid runtime programs, contained in the uuid-runtime package.
- The debugging information is used for execution tracing and core
- dump analysis.
-''))dnl
-ifdef(`USE_DBGSYM',,``
-Package: e2fslibs-dbg
-Section: debug
-Priority: extra
-Depends: e2fslibs (= ${binary:Version}), ${misc:Depends}
-Architecture: any
-Description: debugging information for e2fslibs
- This package includes the debug information useful for debugging the
- ext2fs and e2p libraries, contained in the e2fslibs package.  The debug
- information is used for execution tracing and core dump analysis.
-
-Package: libcomerr2-dbg
-Section: debug
-Priority: extra
-Depends: libcomerr2 (= ${binary:Version}), ${misc:Depends}
-Architecture: any
-Description: debugging information for libcomerr2
- This package includes the debug information useful for debugging the
- com_err library, contained in the libcomerr2 package.  The debugging
- information is used for execution tracing and core dump analysis.
-
-Package: libss2-dbg
-Section: debug
-Priority: extra
-Depends: libss2 (= ${binary:Version}), ${misc:Depends}
-Architecture: any
-Description: debugging information for libss2
- This package includes the debug information useful for debugging the
- ss library, contained in the libss2 package.  The debug information
- is used for execution tracing and core dump analysis.
-'')dnl
-ifdef(`USE_DBGSYM',,ifdef(`UTIL_LINUX_NG',,``
-Package: libblkid1-dbg
-Section: debug
-Priority: extra
-Depends: libblkid1 (= ${binary:Version}), ${misc:Depends}
-Architecture: any
-Description: debugging information for libblkid1
- This package includes the debug information useful for debugging the
- blkid library, contained in the libblkid1 package.  The debug
- information is used for execution tracing and core dump analysis.
-
-Package: libuuid1-dbg
-Section: debug
-Priority: extra
-Depends: libuuid1 (= ${binary:Version}), ${misc:Depends}
-Architecture: any
-Description: debugging information for libuuid1
- This package includes the debug information useful for debugging the
- UUID library, contained in the libuuid1 package.  The debug
- information is used for execution tracing and core dump analysis.
-''))dnl
index 82bdc67..b5b5d3f 100644 (file)
@@ -16,7 +16,7 @@ Upstream Author: Theodore Ts'o <tytso@mit.edu>
 Copyright notice:
 
 This package, the EXT2 filesystem utilities, is protected by the GNU
-Public License.
+General Public License.
 
        Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
        2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o
diff --git a/debian/e2fslibs-dev.postinst b/debian/e2fslibs-dev.postinst
new file mode 100644 (file)
index 0000000..def6673
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# Abort on error.
+set -e
+
+symlink_match()
+{
+       local SYMLINK="$1"
+       local SYMLINK_TARGET="$2"
+
+       [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \
+       [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ]
+}
+
+SYMLINK=/usr/share/doc/e2fslibs-dev
+SYMLINK_TARGET=e2fslibs
+
+if [ "$1" = "configure" ] && [ -h "${SYMLINK}.dpkg-backup" ] &&
+   symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET"
+then
+       rm -f "${SYMLINK}.dpkg-backup"
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/e2fslibs-dev.postrm b/debian/e2fslibs-dev.postrm
new file mode 100644 (file)
index 0000000..54841af
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# Abort on error.
+set -e
+
+symlink_match()
+{
+       local SYMLINK="$1"
+       local SYMLINK_TARGET="$2"
+
+       [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \
+       [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ]
+}
+
+SYMLINK=/usr/share/doc/e2fslibs-dev
+SYMLINK_TARGET=e2fslibs
+
+if [ "$1" = "purge" ] && [ -h "${SYMLINK}.dpkg-backup" ]
+then
+    rm -f "${SYMLINK}.dpkg-backup"
+fi
+if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] &&
+   [ -n "$2" ] && [ ! -e "$SYMLINK" ] && [ -h "${SYMLINK}.dpkg-backup" ] &&
+   symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET"
+then
+    echo "Restoring backup of $SYMLINK ..."
+    mv "${SYMLINK}.dpkg-backup" "$SYMLINK"
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/e2fslibs-dev.preinst b/debian/e2fslibs-dev.preinst
new file mode 100644 (file)
index 0000000..b3f9a4b
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# Abort on error.
+set -e
+
+symlink_match()
+{
+       local SYMLINK="$1"
+       local SYMLINK_TARGET="$2"
+
+       [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \
+       [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ]
+}
+
+SYMLINK=/usr/share/doc/e2fslibs-dev
+SYMLINK_TARGET=e2fslibs
+
+if [ "$1" = "install" -o "$1" = "upgrade" ] &&
+   [ -n "$2" ] && [ -h "$SYMLINK" ] &&
+   symlink_match "$SYMLINK" "$SYMLINK_TARGET"
+then
+    mv -f "$SYMLINK" "${SYMLINK}.dpkg-backup"
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/e2fsprogs-l10n.copyright b/debian/e2fsprogs-l10n.copyright
new file mode 100644 (file)
index 0000000..9dbe5c0
--- /dev/null
@@ -0,0 +1,26 @@
+This is the Debian GNU/Linux prepackaged version of the translation
+files of the EXT2 file system utilities.  The EXT2 utilities were
+written by Theodore Ts'o <tytso@mit.edu> and Remy Card
+<card@masi.ibp.fr>.
+
+Sources were obtained from http://sourceforge.net/projects/e2fsprogs
+
+Packaging is Copyright (c) 2003-2006 Theodore Ts'o <tytso@mit.edu>
+             Copyright (c) 1997-2003 Yann Dirson <dirson@debian.org>
+            Copyright (c) 2001 Alcove <http://www.alcove.com/>
+            Copyright (c) 1997 Klee Dienes
+            Copyright (c) 1995-1996 Michael Nonweiler <mrn20@cam.ac.uk>
+
+Upstream Author: Theodore Ts'o <tytso@mit.edu>
+
+Copyright notice:
+
+This package, the EXT2 filesystem utilities, is protected by the GNU
+General Public License.
+
+       Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+       2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o
+
+On Debian GNU systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL-2'.
+
diff --git a/debian/e2fsprogs-l10n.install b/debian/e2fsprogs-l10n.install
new file mode 100644 (file)
index 0000000..3635480
--- /dev/null
@@ -0,0 +1 @@
+usr/share/locale
diff --git a/debian/e2fsprogs-udeb.install b/debian/e2fsprogs-udeb.install
new file mode 100644 (file)
index 0000000..a6d6867
--- /dev/null
@@ -0,0 +1,11 @@
+etc/mke2fs.conf
+lib/*/lib*.so.*
+sbin/badblocks
+sbin/e2fsck
+sbin/mke2fs
+sbin/resize2fs
+sbin/tune2fs
+sbin/e2label
+sbin/e2mmpstatus
+sbin/fsck.ext?
+sbin/mkfs.ext?
diff --git a/debian/e2fsprogs-udeb.lintian-overrides b/debian/e2fsprogs-udeb.lintian-overrides
new file mode 100644 (file)
index 0000000..683a11f
--- /dev/null
@@ -0,0 +1,2 @@
+e2fsprogs-udeb udeb: package-name-doesnt-match-sonames libcom-err2 libe2p2 libext2fs2 libss2
+
index 7af9733..e845566 100644 (file)
@@ -1,2 +1 @@
 README
-RELEASE-NOTES
diff --git a/debian/e2fsprogs.files b/debian/e2fsprogs.files
deleted file mode 100644 (file)
index 37e54da..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-sbin
-usr/bin
-usr/sbin
-usr/share/man
-usr/share/locale
-etc
diff --git a/debian/e2fsprogs.install b/debian/e2fsprogs.install
new file mode 100755 (executable)
index 0000000..8cf07a6
--- /dev/null
@@ -0,0 +1,53 @@
+#!/usr/bin/dh-exec
+sbin/badblocks
+sbin/debugfs
+sbin/dumpe2fs
+sbin/e2fsck
+sbin/e2image
+sbin/e2label
+sbin/e2mmpstatus
+[linux-any] sbin/e2scrub
+[linux-any] sbin/e2scrub_all
+sbin/e2undo
+sbin/fsck.ext?
+sbin/mke2fs
+sbin/mkfs.ext?
+sbin/resize2fs
+sbin/tune2fs
+usr/bin/chattr
+usr/bin/lsattr
+[linux-any] usr/lib/*/e2fsprogs/e2scrub_all_cron
+[linux-any] usr/lib/*/e2fsprogs/e2scrub_fail
+usr/sbin/e2freefrag
+[linux-any] usr/sbin/e4crypt
+[linux-any] usr/sbin/e4defrag
+usr/sbin/filefrag
+usr/sbin/mklost+found
+usr/share/man/man1/chattr.1
+usr/share/man/man1/lsattr.1
+usr/share/man/man5/e2fsck.conf.5
+usr/share/man/man5/ext?.5
+usr/share/man/man5/mke2fs.conf.5
+usr/share/man/man8/badblocks.8
+usr/share/man/man8/debugfs.8
+usr/share/man/man8/dumpe2fs.8
+usr/share/man/man8/e2freefrag.8
+usr/share/man/man8/e2fsck.8
+usr/share/man/man8/e2image.8
+usr/share/man/man8/e2label.8
+usr/share/man/man8/e2mmpstatus.8
+[linux-any] usr/share/man/man8/e2scrub.8
+[linux-any] usr/share/man/man8/e2scrub_all.8
+usr/share/man/man8/e2undo.8
+[linux-any] usr/share/man/man8/e4crypt.8
+[linux-any] usr/share/man/man8/e4defrag.8
+usr/share/man/man8/filefrag.8
+usr/share/man/man8/fsck.ext?.8
+usr/share/man/man8/mke2fs.8
+usr/share/man/man8/mkfs.ext?.8
+usr/share/man/man8/mklost+found.8
+usr/share/man/man8/resize2fs.8
+usr/share/man/man8/tune2fs.8
+etc
+[linux-any] lib/udev/rules.d
+[linux-any] lib/systemd/system
diff --git a/debian/e2fsprogs.lintian-overrides b/debian/e2fsprogs.lintian-overrides
new file mode 100644 (file)
index 0000000..b40d113
--- /dev/null
@@ -0,0 +1 @@
+e2fsprogs: package-supports-alternative-init-but-no-init.d-script
diff --git a/debian/e2fsprogs.postinst.dh9 b/debian/e2fsprogs.postinst.dh9
new file mode 100644 (file)
index 0000000..e7acb0e
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# Abort on error.
+set -e
+
+if [ -x /usr/sbin/update-initramfs -a \
+       -e /etc/initramfs-tools/initramfs.conf ]; then
+    update-initramfs -u
+fi
+
+#DEBHELPER#
+
+# debhelper doesn't know what timers are...
+update_svc() {
+       deb-systemd-helper unmask "$1" >/dev/null || true
+
+       if deb-systemd-helper --quiet was-enabled "$1"; then
+               deb-systemd-helper enable "$1" >/dev/null || true
+       else
+               deb-systemd-helper update-state "$1" >/dev/null || true
+       fi
+}
+update_svc e2scrub_all.timer
+update_svc e2scrub_reap.service
+
+# Start our new services
+if [ -d /run/systemd/system ]; then
+       systemctl --system daemon-reload >/dev/null || true
+       deb-systemd-invoke start e2scrub_all.timer >/dev/null || true
+fi
+
+exit 0
diff --git a/debian/e2fsprogs.postrm.dh9 b/debian/e2fsprogs.postrm.dh9
new file mode 100644 (file)
index 0000000..32cb642
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+update_svc() {
+       deb-systemd-helper mask "$1" >/dev/null || true
+
+       if deb-systemd-helper --quiet was-enabled "$1"; then
+               # Enables the unit on first installation, creates new
+               # symlinks on upgrades if the unit file has changed.
+               deb-systemd-helper disable "$1" >/dev/null || true
+       fi
+}
+
+if [ "$1" != "upgrade" ]; then
+       # Abort on error.
+       set -e
+
+       if [ -x /usr/sbin/update-initramfs -a \
+               -e /etc/initramfs-tools/initramfs.conf ]; then
+           update-initramfs -u
+       fi
+
+       #DEBHELPER#
+
+       # debhelper doesn't know what timers are...
+       update_svc e2scrub_all.timer
+       update_svc e2scrub_reap.service
+
+       # Start our new services
+       if [ -d /run/systemd/system ]; then
+               deb-systemd-invoke stop e2scrub_all.timer >/dev/null || true
+       fi
+fi
+
+exit 0
+
diff --git a/debian/e2fsprogs.shlibs.local b/debian/e2fsprogs.shlibs.local
new file mode 100644 (file)
index 0000000..a99d2a0
--- /dev/null
@@ -0,0 +1,2 @@
+libext2fs 2 libext2fs2 (= ${binary:Version})
+libe2p 2 libext2fs2 (= ${binary:Version})
diff --git a/debian/e2fsprogs.shlibs.local.in b/debian/e2fsprogs.shlibs.local.in
deleted file mode 100644 (file)
index 1f7db5d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-libcom_err 2 libcomerr2 (>= 1.42~WIP-2011-10-05-1)
-libss 2 libss2 (>= 1.34-1)
-ifdef(`UTIL_LINUX_NG',,
-``libuuid 1 libuuid1 (>= 1.34-1)
-libblkid 1 libblkid1 (>= 1.34-1)
-'')dnl
-libext2fs 2 e2fslibs (= ${binary:Version})
-libe2p 2 e2fslibs (= ${binary:Version})
similarity index 62%
rename from debian/fuse2fs.files
rename to debian/fuse2fs.install
index cd37a70..2ed4c3c 100644 (file)
@@ -1,2 +1,2 @@
-/usr/sbin/fuse2fs
+/usr/bin/fuse2fs
 /usr/share/man/man1/fuse2fs.1
diff --git a/debian/gbp.conf b/debian/gbp.conf
new file mode 100644 (file)
index 0000000..c974add
--- /dev/null
@@ -0,0 +1,4 @@
+[DEFAULT]
+pristine-tar = True
+upstream-tag='v%(version)s'
+debian-branch=debian/master
diff --git a/debian/libcom-err2.symbols b/debian/libcom-err2.symbols
new file mode 100644 (file)
index 0000000..1c96fa5
--- /dev/null
@@ -0,0 +1,22 @@
+libcom_err.so.2 libcom-err2 #MINVER#
+* Build-Depends-Package: comerr-dev
+ _et_dynamic_list@Base 1.43.9
+ _et_list@Base 1.43.9
+ add_error_table@Base 1.43.9
+ add_to_error_table@Base 1.43.9
+ com_err@Base 1.43.9
+ com_err_hook@Base 1.43.9
+ com_err_va@Base 1.43.9
+ com_right@Base 1.43.9
+ com_right_r@Base 1.43.9
+ error_message@Base 1.43.9
+ error_table_name@Base 1.43.9
+ et_list_lock@Base 1.43.9
+ et_list_unlock@Base 1.43.9
+ free_error_table@Base 1.43.9
+ init_error_table@Base 1.43.9
+ initialize_error_table_r@Base 1.43.9
+ remove_error_table@Base 1.43.9
+ reset_com_err_hook@Base 1.43.9
+ set_com_err_gettext@Base 1.43.9
+ set_com_err_hook@Base 1.43.9
diff --git a/debian/libcomerr2.symbols b/debian/libcomerr2.symbols
deleted file mode 100644 (file)
index ce3b74a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-libcom_err.so.2 libcomerr2 #MINVER#
- _et_dynamic_list@Base 1.38
- _et_list@Base 1.01
- add_error_table@Base 1.34
- add_to_error_table@Base 1.34
- com_err@Base 1.01
- com_err_hook@Base 1.01
- com_err_va@Base 1.01
- com_right@Base 1.34
- com_right_r@Base 1.41.11
- error_message@Base 1.01
- error_table_name@Base 1.01
- et_list_lock@Base 1.41.2
- et_list_unlock@Base 1.41.2
- free_error_table@Base 1.34
- init_error_table@Base 1.01
- initialize_error_table_r@Base 1.34
- remove_error_table@Base 1.34
- reset_com_err_hook@Base 1.01
- set_com_err_gettext@Base 1.41.99
- set_com_err_hook@Base 1.01
similarity index 65%
rename from debian/e2fslibs-dev.doc-base
rename to debian/libext2fs-dev.doc-base
index 19d04f4..b115117 100644 (file)
@@ -6,5 +6,5 @@ Abstract: The EXT2FS library is designed to allow
 Section: Programming
 
 Format: HTML
-Index: /usr/share/doc/e2fslibs/html-info/libext2fs.html
-Files: /usr/share/doc/e2fslibs/html-info/*.html 
+Index: /usr/share/doc/libext2fs2/html-info/libext2fs.html
+Files: /usr/share/doc/libext2fs2/html-info/*.html 
similarity index 91%
rename from debian/e2fslibs.symbols
rename to debian/libext2fs2.symbols
index 380cacd..7cd7cd8 100644 (file)
@@ -1,16 +1,24 @@
-libe2p.so.2 e2fslibs #MINVER#
+libe2p.so.2 libext2fs2 #MINVER#
+* Build-Depends-Package: libext2fs-dev
  e2p_edit_feature2@Base 1.40.7
  e2p_edit_feature@Base 1.37
  e2p_edit_mntopts@Base 1.37
  e2p_encmode2string@Base 1.43
+ e2p_encoding2str@Base 1.45.1
+ e2p_errcode2str@Base 1.46.0
  e2p_feature2string@Base 1.37
+ e2p_feature_to_string@Base 1.45.6
+ e2p_get_encoding_flags@Base 1.45
  e2p_hash2string@Base 1.37
  e2p_is_null_uuid@Base 1.37
  e2p_jrnl_feature2string@Base 1.41.1
  e2p_jrnl_string2feature@Base 1.41.1
+ e2p_list_journal_super@Base 1.43.5
  e2p_mntopt2string@Base 1.37
  e2p_os2string@Base 1.37
  e2p_percent@Base 1.40
+ e2p_str2encoding@Base 1.45
+ e2p_str2encoding_flags@Base 1.45
  e2p_string2encmode@Base 1.43
  e2p_string2feature@Base 1.37
  e2p_string2hash@Base 1.37
@@ -36,7 +44,8 @@ libe2p.so.2 e2fslibs #MINVER#
  print_fs_state@Base 1.37
  setflags@Base 1.37
  setversion@Base 1.37
-libext2fs.so.2 e2fslibs #MINVER#
+libext2fs.so.2 libext2fs2 #MINVER#
+* Build-Depends-Package: libext2fs-dev
  badblocks_list_add@Base 1.37
  badblocks_list_create@Base 1.37
  badblocks_list_free@Base 1.37
@@ -50,11 +59,13 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_add_exit_fn@Base 1.43
  ext2fs_add_journal_device@Base 1.37
  ext2fs_add_journal_inode2@Base 1.42.9-3~
+ ext2fs_add_journal_inode3@Base 1.46.0
  ext2fs_add_journal_inode@Base 1.37
  ext2fs_adjust_ea_refcount2@Base 1.42
  ext2fs_adjust_ea_refcount3@Base 1.43
  ext2fs_adjust_ea_refcount@Base 1.37
  ext2fs_alloc_block2@Base 1.42
+ ext2fs_alloc_block3@Base 1.44.0~rc1
  ext2fs_alloc_block@Base 1.37
  ext2fs_alloc_generic_bmap@Base 1.42
  ext2fs_alloc_range@Base 1.43
@@ -109,8 +120,11 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_blocks_count_set@Base 1.42
  ext2fs_bmap2@Base 1.41.0
  ext2fs_bmap@Base 1.37
+ ext2fs_calculate_summary_stats@Base 1.46.0
+ ext2fs_casefold_cmp@Base 1.46.0
  ext2fs_check_desc@Base 1.37
  ext2fs_check_directory@Base 1.37
+ ext2fs_check_encoded_name@Base 1.46.0
  ext2fs_check_if_mounted@Base 1.37
  ext2fs_check_mount_point@Base 1.37
  ext2fs_clear_bit64@Base 1.42
@@ -134,6 +148,8 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_copy_dblist@Base 1.37
  ext2fs_copy_generic_bitmap@Base 1.41.0
  ext2fs_copy_generic_bmap@Base 1.42
+ ext2fs_count_blocks@Base 1.46.0
+ ext2fs_count_used_clusters@Base 1.46.0
  ext2fs_crc16@Base 1.41.1
  ext2fs_crc32_be@Base 1.43
  ext2fs_crc32c_le@Base 1.42
@@ -141,6 +157,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_create_icount@Base 1.37
  ext2fs_create_icount_tdb@Base 1.40
  ext2fs_create_inode_cache@Base 1.43
+ ext2fs_create_journal_superblock2@Base 1.46.0
  ext2fs_create_journal_superblock@Base 1.37
  ext2fs_create_resize_inode@Base 1.37
  ext2fs_dblist_count2@Base 1.42
@@ -154,6 +171,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_dblist_iterate@Base 1.37
  ext2fs_dblist_sort2@Base 1.42
  ext2fs_dblist_sort@Base 1.37
+ ext2fs_decode_extent@Base 1.46.0
  ext2fs_default_journal_size@Base 1.40
  ext2fs_descriptor_block_loc2@Base 1.42
  ext2fs_descriptor_block_loc@Base 1.37
@@ -167,13 +185,22 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_dirent_name_len@Base 1.43
  ext2fs_dirent_set_file_type@Base 1.43
  ext2fs_dirent_set_name_len@Base 1.43
+ ext2fs_dirent_swab_in2@Base 1.43
+ ext2fs_dirent_swab_in@Base 1.43
+ ext2fs_dirent_swab_out2@Base 1.43
+ ext2fs_dirent_swab_out@Base 1.43
+ ext2fs_dirhash2@Base 1.45
  ext2fs_dirhash@Base 1.37
  ext2fs_div64_ceil@Base 1.42
  ext2fs_div_ceil@Base 1.40
+ ext2fs_djb2_hash@Base 1.44.3~rc1
  ext2fs_dup_handle@Base 1.37
+ ext2fs_dx_csum@Base 1.46~WIP.2019.10.09
  ext2fs_expand_dir@Base 1.37
  ext2fs_ext_attr_block_csum_set@Base 1.43
  ext2fs_ext_attr_block_csum_verify@Base 1.43
+ ext2fs_ext_attr_block_rehash@Base 1.44.0~rc1
+ ext2fs_ext_attr_hash_entry2@Base 1.44.0~rc1
  ext2fs_ext_attr_hash_entry@Base 1.41.0
  ext2fs_extent_block_csum_set@Base 1.43
  ext2fs_extent_block_csum_verify@Base 1.43
@@ -225,6 +252,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_file_get_lsize@Base 1.37
  ext2fs_file_get_size@Base 1.37
  ext2fs_file_llseek@Base 1.37
+ ext2fs_load_nls_table@Base 1.45.1
  ext2fs_file_lseek@Base 1.37
  ext2fs_file_open2@Base 1.37
  ext2fs_file_open@Base 1.37
@@ -242,6 +270,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_find_first_zero_generic_bmap@Base 1.42.2
  ext2fs_find_first_zero_inode_bitmap2@Base 1.42.2
  ext2fs_find_inode_goal@Base 1.43
+ ext2fs_fix_extents_checksums@Base 1.45
  ext2fs_flush2@Base 1.42
  ext2fs_flush@Base 1.37
  ext2fs_flush_icache@Base 1.37
@@ -282,6 +311,8 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_get_device_size@Base 1.37
  ext2fs_get_dio_alignment@Base 1.42.3
  ext2fs_get_dx_countlimit@Base 1.43
+ ext2fs_get_ea_inode_hash@Base 1.44.0~rc1
+ ext2fs_get_ea_inode_ref@Base 1.44.0~rc1
  ext2fs_get_free_blocks2@Base 1.42
  ext2fs_get_free_blocks@Base 1.37
  ext2fs_get_generic_bitmap_end@Base 1.41.0
@@ -297,6 +328,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_get_inode_bitmap_range@Base 1.41.0
  ext2fs_get_inode_bitmap_start2@Base 1.42
  ext2fs_get_inode_bitmap_start@Base 1.37
+ ext2fs_get_journal_params@Base 1.46.0
  ext2fs_get_library_version@Base 1.37
  ext2fs_get_mem@Base 1.37
  ext2fs_get_memalign@Base 1.41.13
@@ -306,6 +338,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_get_num_dirs@Base 1.37
  ext2fs_get_pathname@Base 1.37
  ext2fs_get_rec_len@Base 1.41.7
+ ext2fs_get_stat_i_blocks@Base 1.45.5
  ext2fs_group_blocks_count@Base 1.42
  ext2fs_group_desc@Base 1.42
  ext2fs_group_desc_csum@Base 1.42.2
@@ -318,6 +351,12 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_group_of_blk2@Base 1.42
  ext2fs_group_of_blk@Base 1.37
  ext2fs_group_of_ino@Base 1.37
+ ext2fs_hashmap_add@Base 1.44.3~rc1
+ ext2fs_hashmap_create@Base 1.44.3~rc1
+ ext2fs_hashmap_free@Base 1.44.3~rc1
+ ext2fs_hashmap_iter_in_order@Base 1.44.3~rc1
+ ext2fs_hashmap_lookup@Base 1.44.3~rc1
+ ext2fs_htree_intnode_maxrecs@Base 1.44.0~rc1
  ext2fs_iblk_add_blocks@Base 1.41.0
  ext2fs_iblk_set@Base 1.41.0
  ext2fs_iblk_sub_blocks@Base 1.41.0
@@ -365,6 +404,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_inode_size_set@Base 1.42.12
  ext2fs_inode_table_loc@Base 1.42
  ext2fs_inode_table_loc_set@Base 1.42
+ ext2fs_is_fast_symlink@Base 1.44.0~rc1
  ext2fs_journal_sb_start@Base 1.42.12
  ext2fs_link@Base 1.37
  ext2fs_llseek@Base 1.37
@@ -402,6 +442,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_namei_follow@Base 1.37
  ext2fs_native_flag@Base 1.37
  ext2fs_new_block2@Base 1.42
+ ext2fs_new_block3@Base 1.44.0~rc1
  ext2fs_new_block@Base 1.37
  ext2fs_new_dir_block@Base 1.37
  ext2fs_new_dir_inline_data@Base 1.43
@@ -444,11 +485,13 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_read_ext_attr3@Base 1.43
  ext2fs_read_ext_attr@Base 1.37
  ext2fs_read_ind_block@Base 1.37
+ ext2fs_read_inode2@Base 1.45
  ext2fs_read_inode@Base 1.37
  ext2fs_read_inode_bitmap@Base 1.37
  ext2fs_read_inode_full@Base 1.37
  ext2fs_remove_exit_fn@Base 1.43
  ext2fs_reserve_super_and_bgd@Base 1.37
+ ext2fs_resize_array@Base 1.45.6
  ext2fs_resize_block_bitmap2@Base 1.42
  ext2fs_resize_block_bitmap@Base 1.37
  ext2fs_resize_generic_bitmap@Base 1.37
@@ -457,6 +500,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_resize_inode_bitmap@Base 1.37
  ext2fs_resize_mem@Base 1.37
  ext2fs_rewrite_to_io@Base 1.37
+ ext2fs_rw_bitmaps@Base 1.46.0
  ext2fs_set_alloc_block_callback@Base 1.41.0
  ext2fs_set_bit64@Base 1.42
  ext2fs_set_bit@Base 1.37
@@ -468,6 +512,8 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_set_data_io@Base 1.37
  ext2fs_set_dir_block2@Base 1.42
  ext2fs_set_dir_block@Base 1.37
+ ext2fs_set_ea_inode_hash@Base 1.44.0~rc1
+ ext2fs_set_ea_inode_ref@Base 1.44.0~rc1
  ext2fs_set_gdt_csum@Base 1.41.0
  ext2fs_set_generic_bitmap_padding@Base 1.41.0
  ext2fs_set_generic_bitmap_range@Base 1.41.0
@@ -487,6 +533,15 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_swab16@Base 1.37
  ext2fs_swab32@Base 1.37
  ext2fs_swab64@Base 1.40
+ ext2fs_swap_ext_attr@Base 1.40
+ ext2fs_swap_ext_attr_entry@Base 1.41
+ ext2fs_swap_ext_attr_header@Base 1.41
+ ext2fs_swap_group_desc2@Base 1.42
+ ext2fs_swap_group_desc@Base 1.37
+ ext2fs_swap_inode@Base 1.37
+ ext2fs_swap_inode_full@Base 1.40
+ ext2fs_swap_mmp@Base 1.42
+ ext2fs_swap_super@Base 1.37
  ext2fs_symlink@Base 1.42.7
  ext2fs_sync_device@Base 1.37
  ext2fs_tdb_append@Base 1.40
@@ -596,6 +651,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_write_ext_attr3@Base 1.43
  ext2fs_write_ext_attr@Base 1.37
  ext2fs_write_ind_block@Base 1.37
+ ext2fs_write_inode2@Base 1.45
  ext2fs_write_inode@Base 1.37
  ext2fs_write_inode_bitmap@Base 1.37
  ext2fs_write_inode_full@Base 1.37
@@ -628,6 +684,8 @@ libext2fs.so.2 e2fslibs #MINVER#
  qcow2_write_raw_image@Base 1.42
  set_undo_io_backing_manager@Base 1.41.0
  set_undo_io_backup_file@Base 1.41.0
+ sparse_io_manager@Base 1.44.0~rc1
+ sparsefd_io_manager@Base 1.44.0~rc1
  test_io_backing_manager@Base 1.37
  test_io_cb_read_blk64@Base 1.41.0
  test_io_cb_read_blk@Base 1.37
similarity index 100%
rename from debian/libss2.files.in
rename to debian/libss2.install
index b6fe40b..74358eb 100644 (file)
@@ -1,4 +1,5 @@
 libss.so.2 libss2 #MINVER#
+* Build-Depends-Package: ss-dev
  _ss_pager_name@Base 1.01
  _ss_table@Base 1.01
  et_ss_error_table@Base 1.35
diff --git a/debian/logsave.install b/debian/logsave.install
new file mode 100644 (file)
index 0000000..dd5b065
--- /dev/null
@@ -0,0 +1,2 @@
+sbin/logsave
+usr/share/man/man8/logsave.8
index c4e0acf..5fbee8a 100755 (executable)
 #! /usr/bin/make -f
-# -*- makefile -*-
-#
-# Invoke each target with `./debian/rules <target>'.  All targets should be
-# invoked with the package root as the current directory.
-#
-# The `binary' target must be run as root, as it needs to install files with
-# specific ownerships.
 
--include debian/rules.custom
+# export DH_VERBOSE=1
 
 export DEB_BUILD_MAINT_OPTIONS ?= hardening=+all
 
+DPKG_EXPORT_BUILDFLAGS = 1
+include /usr/share/dpkg/default.mk
+
 # be paranoid
 export LC_ALL ?= C
 
-# These are used for cross-compiling and for saving the configure script
-# from having to guess our platform (since we know it already)
-DEB_HOST_ARCH          ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
-DEB_BUILD_ARCH         ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
-DEB_HOST_OS            ?= $(shell dpkg-architecture -qDEB_HOST_OS)
-DEB_HOST_GNU_TYPE      ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
-DEB_BUILD_GNU_TYPE     ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
-DEB_HOST_MULTIARCH     ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null)
-
-# Allow distro-specific behaviour
-DISTRO :=$(shell sed -ne '/DISTRIB_ID/s/.*=//p' /etc/lsb-release 2>/dev/null || echo Debian)
-UTIL_LINUX_NG ?= yes
-
-ifeq ($(DEB_BUILD_GNU_SYSTEM), gnu)
+ifeq ($(DEB_HOST_ARCH_OS), hurd)
 SKIP_FUSE2FS=yes
 endif
 
-DH_VERSION := $(shell dpkg-query -W -f '$${Version}' debhelper)
-
-# USE_DBGSYM :=
-USE_DBGSYM ?= $(shell if dpkg --compare-versions $(DH_VERSION) ">=" 9.20160114 ; then echo yes ; fi)
-
-ifeq ($(USE_DBGSYM),yes)
-dh_strip_args = -p$(1) --dbgsym-migration='$(1)-dbg (<= 1.43-1)'
-dh_strip_args2 = -p$(1) --dbgsym-migration='$(2)-dbg (<= 1.43-1)'
-else
-dh_strip_args = -p$(1) --dbg-package=$(1)-dbg
-dh_strip_args2 = -p$(1) --dbg-package=$(2)-dbg
+ifneq ($(filter pkg.e2fsprogs.no-fuse2fs,$(DEB_BUILD_PROFILES)),)
+SKIP_FUSE2FS=yes
 endif
-# find the version for the main package, from changelog file
-MAIN_VERSION = $(shell head -n 1 debian/changelog | cut '-d ' -f 2 | sed 's/[()]//g')
-# find versions for libraries going into their own packages, from their Makefile.in's,
-# and sonames for all libs
+
 COMERR_VERSION ?= $(shell grep ELF_VERSION lib/et/Makefile.in | cut '-d ' -f3)
-COMERR_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/et/Makefile.in | cut '-d ' -f3)
 SS_VERSION ?= $(shell grep ELF_VERSION lib/ss/Makefile.in | cut '-d ' -f3)
-SS_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/ss/Makefile.in | cut '-d ' -f3)
-
-ifneq ($(UTIL_LINUX_NG),yes)
-UUID_VERSION ?= $(shell grep ELF_VERSION lib/uuid/Makefile.in | cut '-d ' -f3)
-UUID_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/uuid/Makefile.in | cut '-d ' -f3)
-
-BLKID_VERSION ?= $(shell grep ELF_VERSION lib/blkid/Makefile.in | cut '-d ' -f3)
-BLKID_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/blkid/Makefile.in | cut '-d ' -f3)
-endif
-
-EXT2FS_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/ext2fs/Makefile.in | cut '-d ' -f3)
-E2P_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/e2p/Makefile.in | cut '-d ' -f3)
-
-package                ?= e2fsprogs
 
 topdir         ?= $(shell pwd)
-debdir         ?= ${topdir}/debian
-tmpdir         ?= ${debdir}/tmp
-udebdir                ?= ${debdir}/e2fsprogs-udeb
-ifneq ($(UTIL_LINUX_NG),yes)
-blkidudebdir   ?= ${debdir}/libblkid1-udeb
-uuidudebdir    ?= ${debdir}/libuuid1-udeb
-endif
-libcomerrdir   ?= ${debdir}/libcomerr${COMERR_SOVERSION}
-comerrdevdir   ?= ${debdir}/comerr-dev
-libcomerrdbgdir        ?= ${debdir}/libcomerr2-dbg
-libssdir       ?= ${debdir}/libss${SS_SOVERSION}
-ssdevdir       ?= ${debdir}/ss-dev
-libssdbgdir    ?= ${debdir}/libss2-dbg
-ifneq ($(UTIL_LINUX_NG),yes)
-libblkiddir    ?= ${debdir}/libblkid${BLKID_SOVERSION}
-libblkiddevdir ?= ${debdir}/libblkid-dev
-libblkiddbgdir ?= ${debdir}/libblkid1-dbg
-libuuiddir     ?= ${debdir}/libuuid${UUID_SOVERSION}
-uuiddevdir     ?= ${debdir}/uuid-dev
-libuuiddbgdir  ?= ${debdir}/libuuid1-dbg
-uuidruntimedir ?= ${debdir}/uuid-runtime
-uuidruntimedbgdir ?= ${debdir}/uuid-runtime-dbg
-endif
-libext2dir     ?= ${debdir}/e2fslibs
-libext2devdir  ?= ${debdir}/e2fslibs-dev
-libext2dbgdir  ?= ${debdir}/e2fslibs-dbg
-maindir                ?= ${debdir}/e2fsprogs
-e2fsckstaticdir        ?= ${debdir}/e2fsck-static
-debugdir       ?= ${debdir}/e2fsprogs-dbg
-stdbuilddir    ?= ${debdir}/BUILD-STD
-mipsbuilddir   ?= ${debdir}/BUILD-MIPS
-mipsbuilddir64 ?= ${debdir}/BUILD-MIPS-64
-# docdir       ?= ${maindir}/usr/share/doc/${package}
-MANDIR         ?= /usr/share/man
-mandir         ?= ${tmpdir}${MANDIR}
-
-UDEB_NAME      ?= $(package)-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb
-UDEB_PRIORITY  ?= $(shell grep '^Package: e2fsprogs-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2)
-
-ifneq ($(UTIL_LINUX_NG),yes)
-BLKID_UDEB_NAME ?= libblkid1-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb
-BLKID_UDEB_PRIORITY ?= $(shell grep '^Package: libblkid1-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2)
-
-UUID_UDEB_NAME ?= libuuid1-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb
-UUID_UDEB_PRIORITY ?= $(shell grep '^Package: libuuid1-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2)
-endif
-
-STAMPSDIR      ?= debian/stampdir
-CFGSTDSTAMP    ?= ${STAMPSDIR}/configure-std-stamp
-CFGBFSTAMP     ?= ${STAMPSDIR}/configure-bf-stamp
-BUILDSTDSTAMP  ?= ${STAMPSDIR}/build-std-stamp
-BUILDBFSTAMP   ?= ${STAMPSDIR}/build-bf-stamp
+tmpdir         ?= ${topdir}/debian/tmp
+udebdir                ?= ${topdir}/debian/e2fsprogs-udeb
+stdbuilddir    ?= ${topdir}/debian/BUILD-STD
 
 INSTALL ?= install
 INSTALL_PROGRAM ?= $(INSTALL) -p -o root -g root -m 0755
 
-#ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
-#INSTALL_PROGRAM += -s
-#endif
-
 ifneq (,$(findstring update-symbols,$(DEB_BUILD_OPTIONS)))
-SYMBOL_LIBS := e2fslibs libcomerr2 libss2
-ifneq ($(UTIL_LINUX_NG),yes)
-SYMBOL_LIBS += libblkid1 libuuid1
-endif
+SYMBOL_LIBS := libext2fs libcomerr2 libss2
 endif
 
-DEFAULT_CFLAGS ?= -g -O2
-DEFAULT_LDFLAGS ?= -Wl,-Bsymbolic-functions
-
-CFLAGS ?= $(shell if dpkg-buildflags > /dev/null 2>&1 ; then \
-       DEB_BUILD_MAINT_OPTIONS=$(DEB_BUILD_MAINT_OPTIONS) \
-       dpkg-buildflags --get CFLAGS; else echo $(DEFAULT_CFLAGS) ; fi)
-LDFLAGS ?= $(shell if dpkg-buildflags > /dev/null 2>&1 ; then \
-       DEB_BUILD_MAINT_OPTIONS=$(DEB_BUILD_MAINT_OPTIONS) \
-       dpkg-buildflags --get LDFLAGS; else echo $(DEFAULT_LDFLAGS) ; fi)
-CPPFLAGS ?= $(shell if dpkg-buildflags > /dev/null 2>&1 ; then \
-       DEB_BUILD_MAINT_OPTIONS=$(DEB_BUILD_MAINT_OPTIONS) \
-       dpkg-buildflags --get CPPFLAGS; fi)
-
-ifeq (${DEB_HOST_ARCH},alpha)
-CFLAGS += -DHAVE_NETINET_IN_H
-else
-CFLAGS += -D__NO_STRING_INLINES
-endif
-
-E2FSCK_STATIC = ${stdbuilddir}/e2fsck/e2fsck.static
-
 CFLAGS_SHLIB = $(CFLAGS)
 CFLAGS_STLIB = $(CFLAGS)
 LDFLAGS_SHLIB = $(LDFLAGS)
 LDFLAGS_STATIC = $(filter-out -fPIE -fpie -pie,$(LDFLAGS))
 
-ifneq ($(SKIP_UDEB),)
-SKIP_BF ?= yes
-endif
-
-ifeq ($(SKIP_BF),yes)
-BUILD_BF =
-bfbuilddir     ?= ${stdbuilddir}
-else
-BUILD_BF = build-bf
-bfbuilddir     ?= ${debdir}/BUILD-BF
-endif
-
-BF_CFLAGS = -Os -fomit-frame-pointer
+BACKTRACE_CONF_FLAGS ?= $(shell if debian/scripts/test-backtrace ; then echo --disable-backtrace ; fi)
 
-ifeq ($(UTIL_LINUX_NG),yes)
-UTIL_CONF_FLAGS ?= --disable-fsck --disable-libblkid \
-                       --disable-libuuid --disable-uuidd
-else
-UTIL_CONF_FLAGS ?= --enable-fsck --enable-libblkid \
-                       --enable-libuuid --enable-uuidd
-endif
-
-ifneq ($(SKIP_FUSE2FS),)
-UTIL_CONF_FLAGS +=  --disable-fuse2fs
-endif
-
-ifneq ($(strip $(DEB_HOST_MULTIARCH)),)
-MULTIARCH_CONF ?= --with-multiarch=$(DEB_HOST_MULTIARCH)
-# This doesn't work yet because gdb and lintian don't expect and/or
-# don't work with /usr/lib/<triplet>/debug
-#USRLIB = /usr/lib/$(DEB_HOST_MULTIARCH)
-USRLIB ?= /usr/lib
-else
-USRLIB ?= /usr/lib
-endif
-
-BACKTRACE_CONF_FLAGS ?= $(shell if ${debdir}/scripts/test-backtrace ; then echo --disable-backtrace ; fi)
-
-COMMON_CONF_FLAGS = --disable-e2initrd-helper --enable-quota \
+COMMON_CONF_FLAGS = --enable-elf-shlibs --disable-ubsan \
+       --disable-addrsan --disable-threadsan --disable-e2initrd-helper \
+       --disable-fsck --disable-libblkid --disable-libuuid --disable-uuidd \
        --infodir=/usr/share/info  --enable-symlink-install \
-       $(MULTIARCH_CONF) $(BACKTRACE_CONF_FLAGS) $(UTIL_CONF_FLAGS)
-
-STD_CONF_FLAGS ?= --enable-elf-shlibs
-
-BF_CONF_FLAGS ?= --enable-elf-shlibs --disable-nls --disable-imager \
-       --disable-testio-debug --disable-uuidd --disable-tls \
-       --disable-tdb --disable-debugfs
+       --with-multiarch=$(DEB_HOST_MULTIARCH) \
+       $(BACKTRACE_CONF_FLAGS) ${EXTRA_CONF_FLAGS}
 
-MIPS_NOPIC_CONF_FLAGS ?= --disable-nls --disable-imager \
-       --disable-uuidd --disable-tls \
-        --disable-resizer # --disable-debugfs
-
-# we can't use those flags at configure time
-MIPS_CFLAGS ?= -G 0 -fno-pic -mno-abicalls
-MIPS_CFLAGS_64 ?= -mabi=64 -G 0 -fno-pic -mno-abicalls
-
-ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
-ifneq (,$(findstring $(DEB_BUILD_ARCH),mips mipsel))
-ismips=ismips
-endif
-endif
-
-M4_ARGS=
-DBG_PACKAGES=
-
-ifeq ($(USE_DBGSYM),yes)
-M4_ARGS+=-DUSE_DBGSYM
-else
-DBG_PACKAGES += -pe2fsprogs-dbg -pe2fslibs-dbg -plibcomerr2-dbg -plibss2-dbg
-M4_ARGS+=-UUSE_DBGSYM
-endif
-
-ifeq ($(UTIL_LINUX_NG),yes)
-M4_ARGS+=-DUTIL_LINUX_NG
-else
-DBG_PACKAGES += -puuid-runtime-dbg -plibuuid1-dbg -plibblkid1-dbg
-M4_ARGS+=-UUTIL_LINUX_NG
-endif
-
-ifneq ($(strip $(DEB_HOST_MULTIARCH)),)
-M4_ARGS+=-DDO_MULTIARCH
-else
-M4_ARGS+=-UDO_MULTIARCH
-endif
-
-ifneq ($(BUILD_E2FSCK_STATIC),no)
-M4_ARGS+=-DE2FSCK_STATIC
-else
-M4_ARGS+=-UE2FSCK_STATIC
-endif
-
-ifeq ($(SKIP_UDEB),)
-INSTALL_UDEB = install-udeb
-M4_ARGS+=-DUDEB_PKGS
-else
-M4_ARGS+=-UUDEB_PKGS
-endif
-
-ifeq ($(SKIP_FUSE2FS),)
-M4_ARGS+=-DFUSE2FS
-else
-M4_ARGS+=-UFUSE2FS
+ifneq ($(SKIP_FUSE2FS),)
+COMMON_CONF_FLAGS +=  --disable-fuse2fs
 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
-
-debian-files: debian/control debian/e2fsprogs.shlibs.local
-ifeq ($(strip $(DEB_HOST_MULTIARCH)),)
-       for i in $(FILES_FIXUP); do \
-               sed -e 's;lib/\*/;lib/;' debian/$$i.in > debian/$$i; \
-       done
-else
-       for i in $(FILES_FIXUP); do cp debian/$$i.in debian/$$i; done
+ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+CC ?= $(DEB_HOST_GNU_TYPE)-gcc
+COMMON_CONF_FLAGS += --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
 endif
 
-mrproper: clean
-       rm debian/control debian/e2fsprogs.shlibs.local
+%:
+       dh $@ -B${stdbuilddir}
 
-debian/control: debian/control.in debian/rules
-       m4 $(M4_ARGS) < debian/control.in | grep -v ^REMOVE_ME$$ > $@
-
-debian/e2fsprogs.shlibs.local: debian/e2fsprogs.shlibs.local.in
-       m4 $(M4_ARGS) < debian/e2fsprogs.shlibs.local.in > $@
-
-${CFGSTDSTAMP}:
-       dh_testdir
-
-       # Make sure we don't try to rebuild the configure scripts
-       find . -name configure | xargs touch
+override_dh_autoreconf:
 
+override_dh_auto_configure:
        mkdir -p ${stdbuilddir}
-ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
        cd ${stdbuilddir} && AWK=/usr/bin/awk \
-               ../../configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS} \
-               ${EXTRA_CONF_FLAGS} CFLAGS="${CFLAGS}" CPPFLAGS="$(CPPFLAGS)" \
-               LDFLAGS="$(LDFLAGS)" CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \
-               CFLAGS_STLIB="$(CFLAGS_STLIB)" \
-               LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \
-               LDFLAGS_STATIC="$(LDFLAGS_STATIC)"
-else
-       cd ${stdbuilddir} && AWK=/usr/bin/awk CC="${DEB_HOST_GNU_TYPE}-gcc" \
-               ../../configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS} \
-               ${EXTRA_CONF_FLAGS} --build=$(DEB_BUILD_GNU_TYPE) \
-               --host=$(DEB_HOST_GNU_TYPE) CFLAGS="${CFLAGS}" \
-               CPPFLAGS="$(CPPFLAGS)" CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \
-               CFLAGS_STLIB="$(CFLAGS_STLIB)" \
-               LDFLAGS="$(LDFLAGS)" \
-               LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \
-               LDFLAGS_STATIC="$(LDFLAGS_STATIC)"
-endif
+               ../../configure ${COMMON_CONF_FLAGS}
 
-  # specially-built MIPS libs
-ifneq ($(ismips),)
-       mkdir -p ${mipsbuilddir} ${mipsbuilddir64}
-       cd ${mipsbuilddir} && AWK=/usr/bin/awk \
-               ../../configure ${COMMON_CONF_FLAGS} \
-               ${MIPS_NOPIC_CONF_FLAGS} CFLAGS="${CFLAGS}" \
-               CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \
-               CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \
-               CFLAGS_STLIB="$(CFLAGS_STLIB)" \
-               LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \
-               LDFLAGS_STATIC="$(LDFLAGS_STATIC)"
-       cd ${mipsbuilddir64} && AWK=/usr/bin/awk \
-               ../../configure ${COMMON_CONF_FLAGS} \
-               ${MIPS_NOPIC_CONF_FLAGS} CFLAGS="${CFLAGS}" \
-               CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \
-               CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \
-               CFLAGS_STLIB="$(CFLAGS_STLIB)" \
-               LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \
-               LDFLAGS_STATIC="$(LDFLAGS_STATIC)"
-endif
-
-       mkdir -p ${STAMPSDIR}
-       touch ${CFGSTDSTAMP}
-
-${CFGBFSTAMP}:
-       dh_testdir
-       rm -f config.cache
-
-       mkdir -p ${bfbuilddir}
-ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
-       cd ${bfbuilddir} && AWK=/usr/bin/awk \
-               ../../configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS} \
-               ${EXTRA_CONF_FLAGS} CFLAGS="${CFLAGS} ${BF_CFLAGS}" \
-               CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \
-               CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \
-               CFLAGS_STLIB="$(CFLAGS_STLIB)" \
-               LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \
-               LDFLAGS_STATIC="$(LDFLAGS_STATIC)"
-else
-       cd ${bfbuilddir} && AWK=/usr/bin/awk CC="${DEB_HOST_GNU_TYPE}-gcc" \
-               ../../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)" \
-               CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \
-               CFLAGS_STLIB="$(CFLAGS_STLIB)" \
-               LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \
-               LDFLAGS_STATIC="$(LDFLAGS_STATIC)"
-endif
-       mkdir -p ${STAMPSDIR}
-       touch ${CFGBFSTAMP}
-
-build-arch: build
-build-indep: build
-build: build-std $(BUILD_BF)
-
-build-std: ${BUILDSTDSTAMP}
-${BUILDSTDSTAMP}: ${CFGSTDSTAMP}
-       dh_testdir
-       if which dh_update_autotools_config > /dev/null 2>&1 ; then \
-               dh_update_autotools_config ;\
-       fi
+override_dh_auto_build:
        $(MAKE) -C ${stdbuilddir} V=1 all
-ifneq ($(BUILD_E2FSCK_STATIC),no)
        $(MAKE) -C ${stdbuilddir}/e2fsck V=1 e2fsck.static
-endif
        if ! test -d debian/orig-gmo ; then \
                mkdir debian/orig-gmo ; \
                mv po/*.gmo po/*.po debian/orig-gmo ; \
@@ -385,211 +76,73 @@ endif
        fi
        $(MAKE) -C ${stdbuilddir}/po V=1 update-gmo
 
-       ( cd ${stdbuilddir}/doc && $(MAKE) V=1 libext2fs.html )
-       ( cd ${stdbuilddir}/lib/et && $(MAKE) V=1 com_err.info com_err.html )
-
-  # specially-built MIPS libs
-ifneq ($(ismips),)
-       $(MAKE) -C ${mipsbuilddir}/util V=1
-       $(MAKE) -C ${mipsbuilddir} V=1 \
-               CFLAGS="${CFLAGS} ${MIPS_CFLAGS}" \
-               LIB_SUBDIRS="lib/et lib/ext2fs" libs
-       $(MAKE) -C ${mipsbuilddir64}/util V=1
-       $(MAKE) -C ${mipsbuilddir64} V=1 \
-               CFLAGS="${CFLAGS} ${MIPS_CFLAGS_64}" \
-               LIB_SUBDIRS="lib/et lib/ext2fs" libs
-endif
-
-       touch ${BUILDSTDSTAMP}
+       $(MAKE) -C ${stdbuilddir}/doc V=1 libext2fs.html
+       $(MAKE) -C ${stdbuilddir}/lib/et V=1 com_err.info com_err.html
+       cat $(shell /bin/ls -1 ./doc/RelNotes/*.txt | tac) | \
+               gzip -9n > ${stdbuilddir}/NEWS.gz
 
-build-bf: ${BUILDBFSTAMP}
-${BUILDBFSTAMP}: ${CFGBFSTAMP}
-       dh_testdir
-       $(MAKE) -C ${bfbuilddir} V=1 libs
-       $(MAKE) -C ${bfbuilddir}/e2fsck V=1 all
-       $(MAKE) -C ${bfbuilddir}/misc V=1 all
-       $(MAKE) -C ${bfbuilddir}/resize V=1 all
-       touch ${BUILDBFSTAMP}
-
-clean:
-       dh_testdir
+override_dh_auto_clean:
        if test -d debian/orig-gmo ; then \
                rm -f po/*.gmo po/*.po ; \
                mv debian/orig-gmo/* po ; \
                rmdir debian/orig-gmo ; \
        fi
-       rm -rf ${STAMPSDIR}
-       [ ! -f ${stdbuilddir}/Makefile ] || $(MAKE) -C ${stdbuilddir} V=1 distclean
-       [ ! -f ${bfbuilddir}/Makefile ] || $(MAKE) -C ${bfbuilddir} V=1 distclean
-       [ ! -f ${staticbuilddir}/Makefile ] || $(MAKE) -C ${staticbuilddir} V=1 distclean
-       rm -rf ${stdbuilddir} ${bfbuilddir} ${staticbuilddir} ${mipsbuilddir} ${mipsbuilddir64}
-       rm -f debian/*.substvars
-       dh_clean
-
-install: cleanup install-std
-
-# This rule allows to factorize the dh_clean between the 2 install rules
-# This must be launched before install-* (if launching them by hand, for
-# exemple) or results are unpredictable
-cleanup:
-       dh_testdir
-       dh_testroot
-       dh_prep
-
-install-std: DH_OPTIONS=
-install-std: build
-       dh_testdir
-       dh_testroot
-       dh_installdirs
+       rm -rf ${stdbuilddir}
 
+override_dh_auto_install:
        mkdir -p ${tmpdir}/sbin
        $(MAKE) -C ${stdbuilddir} V=1 install DESTDIR=${tmpdir} \
                INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true
   # 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
+       ${INSTALL_PROGRAM} ${stdbuilddir}/e2fsck/e2fsck.static ${tmpdir}/sbin
+       (cd debian/tmp/usr/share/man/man8 ; cp e2fsck.8 e2fsck.static.8)
 
-ifeq ($(DEB_BUILD_GNU_SYSTEM), gnu) 
+ifeq ($(DEB_HOST_ARCH_OS), hurd)
        ${INSTALL} -m 0644 misc/mke2fs-hurd.conf ${tmpdir}/etc/mke2fs.conf
 endif
 
-       dh_movefiles
-       test -z "`find ${tmpdir} -type f`"
-
-  # specially-built MIPS libs
-ifneq ($(ismips),)
-       $(INSTALL) -p -m 0644 ${mipsbuilddir}/lib/libext2fs.a \
-               ${debdir}/e2fslibs-dev/usr/lib/libext2fs-nopic.a
-       $(INSTALL) -p -m 0644 ${mipsbuilddir64}/lib/libext2fs.a \
-               ${debdir}/e2fslibs-dev/usr/lib/lib64ext2fs-nopic.a
-endif
-
-install-udeb: DH_OPTIONS=
-install-udeb: build
-       dh_testdir
-       dh_testroot
-
-       $(MAKE) -C ${bfbuilddir} V=1 install-shlibs-libs-recursive DESTDIR=${udebdir} \
-               INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true
-       $(MAKE) -C ${bfbuilddir}/e2fsck V=1 install DESTDIR=${udebdir} \
-               INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true
-       $(MAKE) -C ${bfbuilddir}/misc V=1 install DESTDIR=${udebdir} \
-               INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true
-       $(MAKE) -C ${bfbuilddir}/resize V=1 install DESTDIR=${udebdir} \
-               INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true
-
-       rm -rf ${udebdir}/usr
-       find ${udebdir}/sbin -type f -a ! -name e2fsck \
-               -a ! -name mke2fs -a ! -name tune2fs \
-               -a ! -name resize2fs -a ! -name badblocks -print | xargs rm
-
-       (cd ${udebdir}/sbin; ln -sf e2fsck fsck.ext2 ; \
-               ln -sf e2fsck fsck.ext3 ; ln -sf e2fsck fsck.ext4 ; \
-               ln -sf mke2fs mkfs.ext2 ; ln -sf mke2fs mkfs.ext3 ; \
-               ln -sf mke2fs mkfs.ext4)
-
-ifneq ($(UTIL_LINUX_NG),yes)
-       mkdir -p ${blkidudebdir}/lib
-       mv ${udebdir}/lib/libblkid.* ${blkidudebdir}/lib
-
-       mkdir -p ${uuidudebdir}/lib
-       mv ${udebdir}/lib/libuuid.* ${uuidudebdir}/lib
-endif
-
-binary-indep: 
-  # no arch-independant debs.
-
-binary-arch: DH_OPTIONS= -a
-binary-arch: install $(INSTALL_UDEB)
-       dh_testdir
-       dh_testroot
+override_dh_install:
+       dh_install -p e2fsprogs --sourcedir=${stdbuilddir} NEWS.gz \
+               usr/share/doc/e2fsprogs
+       dh_install
+       dh_missing --fail-missing
 
+override_dh_lintian:
        dh_lintian
+       $(INSTALL) -D -p -m644 debian/e2fsprogs-udeb.lintian-overrides \
+           debian/e2fsprogs-udeb/usr/share/lintian/overrides/e2fsprogs-udeb
 
-  # symlinks to prepare dh_installdocs run
-
-ifneq ($(UTIL_LINUX_NG),yes)
-       mkdir -p ${debdir}/libblkid${BLKID_SOVERSION}/usr/share/doc/libblkid${BLKID_SOVERSION}
-       mkdir -p ${debdir}/libblkid-dev/usr/share/doc
-       ln -sf libblkid${BLKID_SOVERSION} ${debdir}/libblkid-dev/usr/share/doc/libblkid-dev
-endif
-
-       mkdir -p ${debdir}/libss${SS_SOVERSION}/usr/share/doc/libss${SS_SOVERSION}
-       mkdir -p ${debdir}/ss-dev/usr/share/doc
-       ln -sf libss${SS_SOVERSION} ${debdir}/ss-dev/usr/share/doc/ss-dev
-
-       mkdir -p ${debdir}/libcomerr${COMERR_SOVERSION}/usr/share/doc/libcomerr${COMERR_SOVERSION}
-       mkdir -p ${debdir}/comerr-dev/usr/share/doc
-       ln -sf libcomerr${COMERR_SOVERSION} ${debdir}/comerr-dev/usr/share/doc/comerr-dev
-
-ifneq ($(UTIL_LINUX_NG),yes)
-       mkdir -p ${debdir}/libuuid${UUID_SOVERSION}/usr/share/doc/libuuid${UUID_SOVERSION}
-       mkdir -p ${debdir}/uuid-dev/usr/share/doc
-#      ln -sf libuuid${UUID_SOVERSION} ${debdir}/uuid-dev/usr/share/doc/uuid-dev
-endif
-
-       mkdir -p ${debdir}/e2fslibs/usr/share/doc/e2fslibs
-       mkdir -p ${debdir}/e2fslibs-dev/usr/share/doc
-       ln -sf e2fslibs ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs-dev
-
-ifneq ($(UTIL_LINUX_NG),yes)
-       $(INSTALL) -p -m 0644 debian/libblkid.copyright \
-               ${debdir}/libblkid${BLKID_SOVERSION}/usr/share/doc/libblkid${BLKID_SOVERSION}/copyright
-endif
-
-       dh_installdocs -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb
-
+override_dh_installinfo:
   # HTML docs
-       $(INSTALL) -d ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs/html-info/
+       $(INSTALL) -d debian/libext2fs-dev/usr/share/doc/libext2fs2/html-info/
        $(INSTALL) -p -m 0644 ${stdbuilddir}/doc/*.html \
-          ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs/html-info/
-       $(INSTALL) -d ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/html-info/
+          debian/libext2fs-dev/usr/share/doc/libext2fs2/html-info/
+       $(INSTALL) -d debian/comerr-dev/usr/share/doc/comerr-dev/html-info/
        $(INSTALL) -p -m 0644 ${stdbuilddir}/lib/et/*.html \
-          ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/html-info/
+          debian/comerr-dev/usr/share/doc/comerr-dev/html-info/
 
   # texinfo docs
-       mkdir -p ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}
+       mkdir -p debian/comerr-dev/usr/share/doc/comerr-dev
        $(INSTALL) -p -m 0644 ${topdir}/doc/libext2fs.texinfo \
-          ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs/libext2fs.texi
+          debian/libext2fs-dev/usr/share/doc/libext2fs2/libext2fs.texi
        $(INSTALL) -p -m 0644 ${topdir}/lib/et/com_err.texinfo \
-          ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/com_err.texi
+          debian/comerr-dev/usr/share/doc/comerr-dev/com_err.texi
 
-       $(INSTALL) -d ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/examples
+       $(INSTALL) -d debian/comerr-dev/usr/share/doc/comerr-dev/examples
        $(INSTALL) -p -m 0644 lib/ss/ss_err.et \
                ${stdbuilddir}/lib/ext2fs/ext2_err.et \
-               ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/examples
-       $(INSTALL) -d ${debdir}/ss-dev/usr/share/doc/libss${SS_SOVERSION}/examples
+               debian/comerr-dev/usr/share/doc/comerr-dev/examples
+       $(INSTALL) -d debian/ss-dev/usr/share/doc/ss-dev/examples
        $(INSTALL) -p -m 0644 debugfs/debug_cmds.ct \
-               ${debdir}/ss-dev/usr/share/doc/libss${SS_SOVERSION}/examples
+               debian/ss-dev/usr/share/doc/ss-dev/examples
 
        dh_installinfo -pcomerr-dev ${stdbuilddir}/lib/et/com_err.info
-       dh_installinfo -pe2fslibs-dev ${stdbuilddir}/doc/libext2fs.info
+       dh_installinfo -plibext2fs-dev ${stdbuilddir}/doc/libext2fs.info
 
-       dh_installchangelogs
-       dh_fixperms
-       dh_strip $(call dh_strip_args,e2fsprogs)
-ifneq ($(BUILD_E2FSCK_STATIC),no)
-       dh_strip $(call dh_strip_args2,e2fsck-static,e2fsprogs)
-endif
-ifneq ($(ismips),)
-       dh_strip $(call dh_strip_args,e2fslibs) -Xlib64ext2fs-nopic.a
-else
-       dh_strip $(call dh_strip_args,e2fslibs)
-endif
-       dh_strip $(call dh_strip_args,libss${SS_SOVERSION})
-       dh_strip $(call dh_strip_args,libcomerr${COMERR_SOVERSION})
-ifneq ($(UTIL_LINUX_NG),yes)
-       dh_strip $(call dh_strip_args,libblkid${BLKID_SOVERSION})
-       dh_strip $(call dh_strip_args,libuuid${UUID_SOVERSION})
-endif
-       dh_strip
-
-       # dpkg symbol handling
+override_dh_makeshlibs:
        for i in $(SYMBOL_LIBS); \
        do \
                echo "Generating symbols for $$i..."; \
@@ -598,65 +151,28 @@ endif
                patch debian/$$i.symbols < debian/$$i.tmp-patch; \
                /bin/rm debian/$$i.tmp-patch; \
        done
-
-       dh_compress
-
        dh_makeshlibs --add-udeb=e2fsprogs-udeb
-ifeq ($(SKIP_UDEB),)
-ifneq ($(UTIL_LINUX_NG),yes)
-       echo "udeb: libblkid 1 libblkid1-udeb" >> \
-               debian/libblkid1/DEBIAN/shlibs
-       echo "udeb: libuuid 1 libuuid1-udeb" >> debian/libuuid1/DEBIAN/shlibs
-endif
-endif
 
-       dh_installdeb
-       dh_shlibdeps -l${stdbuilddir}/lib
+override_dh_shlibdeps:
        dh_shlibdeps -pe2fsprogs -l${stdbuilddir}/lib \
-               -u"-Ldebian/e2fsprogs.shlibs.local"
-ifeq ($(SKIP_UDEB),)
+               -- -Ldebian/e2fsprogs.shlibs.local
        dh_shlibdeps -pe2fsprogs-udeb -l${stdbuilddir}/lib \
-               -u"-Ldebian/e2fsprogs-udeb.shlibs.local"
-endif
+               -- -Ldebian/e2fsprogs-udeb.shlibs.local
 ifeq ($(SKIP_FUSE2FS),)
        dh_shlibdeps -pfuse2fs -l${stdbuilddir}/lib \
-               -u"-Ldebian/e2fsprogs.shlibs.local"
+               -- -Ldebian/e2fsprogs.shlibs.local
 endif
+       dh_shlibdeps --remaining-packages -l${stdbuilddir}/lib
 
-       dh_gencontrol -Ncomerr-dev -Nss-dev -Nuuid-dev \
-               -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb
-       DH_OPTIONS= dh_gencontrol -pcomerr-dev \
-         -u '-v${COMERR_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}'
-       DH_OPTIONS= dh_gencontrol -pss-dev \
-         -u '-v${SS_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}'
-ifneq ($(UTIL_LINUX_NG),yes)
-       DH_OPTIONS= dh_gencontrol -puuid-dev \
-         -u '-v${UUID_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}'
-endif
-ifeq ($(SKIP_UDEB),)
-       dh_gencontrol   -pe2fsprogs-udeb -- -fdebian/files~
-ifneq ($(UTIL_LINUX_NG),yes)
-       dh_gencontrol   -plibblkid1-udeb -- -fdebian/files~
-       dh_gencontrol   -plibuuid1-udeb -- -fdebian/files~
-endif
-endif
+override_dh_gencontrol:
+       dh_gencontrol -pcomerr-dev -- -v${COMERR_VERSION}-${DEB_VERSION} -VmainBinary=${DEB_VERSION}
+       dh_gencontrol -pss-dev -- -v${SS_VERSION}-${DEB_VERSION} -VmainBinary=${DEB_VERSION}
+       dh_gencontrol --remaining-packages
 
-ifeq ($(SKIP_UDEB),)
-       dpkg-distaddfile $(UDEB_NAME) debian-installer $(UDEB_PRIORITY)
-ifneq ($(UTIL_LINUX_NG),yes)
-       dpkg-distaddfile $(BLKID_UDEB_NAME) debian-installer $(BLKID_UDEB_PRIORITY)
-       dpkg-distaddfile $(UUID_UDEB_NAME) debian-installer $(UUID_UDEB_PRIORITY)
+override_dh_auto_test:
+ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
+       $(MAKE) -C ${stdbuilddir} V=1 check
 endif
-endif
-       dh_md5sums
-       dh_builddeb
-
-binary: binary-indep binary-arch
-
-.PHONY: binary binary-arch binary-indep clean checkroot mrproper \
-       debug_flags debian-files
 
-debug_flags:
-       @echo CFLAGS is $(CFLAGS)
-       @echo LDFLAGS is $(LDFLAGS)
-       @echo CPPFLAGS is $(CPPFLAGS)
+test_printenv:
+       printenv | sort
similarity index 84%
rename from debian/source.lintian-overrides
rename to debian/source/lintian-overrides
index 62988c5..52e733e 100644 (file)
@@ -1,2 +1,2 @@
 e2fsprogs source: weak-library-dev-dependency ss-dev on libss2 (= ${mainBinary})
-e2fsprogs source: weak-library-dev-dependency comerr-dev on libcomerr2 (= ${mainBinary})
+e2fsprogs source: weak-library-dev-dependency comerr-dev on libcom-err2 (= ${mainBinary})
similarity index 100%
rename from debian/ss-dev.files.in
rename to debian/ss-dev.install
diff --git a/debian/ss-dev.postinst b/debian/ss-dev.postinst
new file mode 100644 (file)
index 0000000..bf49c9d
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# Abort on error.
+set -e
+
+symlink_match()
+{
+       local SYMLINK="$1"
+       local SYMLINK_TARGET="$2"
+
+       [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \
+       [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ]
+}
+
+SYMLINK=/usr/share/doc/ss-dev
+SYMLINK_TARGET=libss2
+
+if [ "$1" = "configure" ] && [ -h "${SYMLINK}.dpkg-backup" ] &&
+   symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET"
+then
+       rm -f "${SYMLINK}.dpkg-backup"
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/ss-dev.postrm b/debian/ss-dev.postrm
new file mode 100644 (file)
index 0000000..c625aae
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# Abort on error.
+set -e
+
+symlink_match()
+{
+       local SYMLINK="$1"
+       local SYMLINK_TARGET="$2"
+
+       [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \
+       [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ]
+}
+
+SYMLINK=/usr/share/doc/ss-dev
+SYMLINK_TARGET=libss2
+
+if [ "$1" = "purge" ] && [ -h "${SYMLINK}.dpkg-backup" ]
+then
+    rm -f "${SYMLINK}.dpkg-backup"
+fi
+if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] &&
+   [ -n "$2" ] && [ ! -e "$SYMLINK" ] && [ -h "${SYMLINK}.dpkg-backup" ] &&
+   symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET"
+then
+    echo "Restoring backup of $SYMLINK ..."
+    mv "${SYMLINK}.dpkg-backup" "$SYMLINK"
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/ss-dev.preinst b/debian/ss-dev.preinst
new file mode 100644 (file)
index 0000000..8da566e
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# Abort on error.
+set -e
+
+symlink_match()
+{
+       local SYMLINK="$1"
+       local SYMLINK_TARGET="$2"
+
+       [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \
+       [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ]
+}
+
+SYMLINK=/usr/share/doc/ss-dev
+SYMLINK_TARGET=libss2
+
+if [ "$1" = "install" -o "$1" = "upgrade" ] &&
+   [ -n "$2" ] && [ -h "$SYMLINK" ] &&
+   symlink_match "$SYMLINK" "$SYMLINK_TARGET"
+then
+    mv -f "$SYMLINK" "${SYMLINK}.dpkg-backup"
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/tests/control b/debian/tests/control
new file mode 100644 (file)
index 0000000..e149342
--- /dev/null
@@ -0,0 +1,6 @@
+Tests: smoke
+Depends: e2fsprogs
+
+Tests: fuse2fs
+Depends: fuse2fs, fuse3
+Restrictions: isolation-machine
diff --git a/debian/tests/fuse2fs b/debian/tests/fuse2fs
new file mode 100755 (executable)
index 0000000..8b4e08a
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+TDIR=${AUTOPKGTEST_TMP:-/tmp/fuse_dir}
+LOGDIR=${AUTOPKGTEST_ARTIFACTS:-/tmp/fuse_dir_log}
+IMG=$TDIR/test-image.img
+MNT=$TDIR/mnt
+
+# some autopkgtest environments may not have /etc/mtab and/or /proc/mounts
+EXT2FS_NO_MTAB_OK=yes
+export EXT2FS_NO_MTAB_OK
+
+mkdir -p $LOGDIR $TDIR $MNT
+
+/sbin/mke2fs -E root_owner -q -t ext4 -d e2fsck $IMG 8M
+/sbin/e2label $IMG test
+fuse2fs $IMG $MNT > $LOGDIR/fuse2fs.log 2>&1
+if test $? -ne 0 ; then
+   echo "fuse2fs failed; see $LOGDIR/fuse2fs.log"
+   exit 1
+fi
+diff e2fsck/pass1.c $MNT/pass1.c
+echo foobar > $MNT/testfile
+fusermount -u $MNT > $LOGDIR/fusermount.log 2>&1
+if test $? -ne 0 ; then
+   echo "fusermount failed; see $LOGDIR/fusermount.log"
+   exit 1
+fi
+/sbin/e2fsck -fy $IMG > $LOGDIR/e2fsck.log 2>&1
+if test $? -ne 0 ; then
+   echo "e2fsck failed; see $LOGDIR/e2fsck.log"
+   exit 1
+fi
+contents=$(/sbin/debugfs -R "cat testfile" $IMG 2> $LOGDIR/debugfs.log)
+if test "$contents" != foobar ; then
+   echo "testfile does not contain expected output"
+   exit 1
+fi
diff --git a/debian/tests/smoke b/debian/tests/smoke
new file mode 100755 (executable)
index 0000000..966be96
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+TDIR=${AUTOPKGTEST_TMP:-/tmp/test_dir}
+LOGDIR=${AUTOPKGTEST_ARTIFACTS:-/tmp/test_dir_log}
+IMG=$TDIR/test-image.img
+
+# some autopkgtest environments may not have /etc/mtab and/or /proc/mounts
+EXT2FS_NO_MTAB_OK=yes
+export EXT2FS_NO_MTAB_OK
+
+mkdir -p $LOGDIR $TDIR
+
+/sbin/mke2fs -q -t ext4 -d e2fsck $IMG 8M
+/sbin/e2label $IMG test
+/sbin/e2fsck -fy $IMG > $LOGDIR/e2fsck.1.log 2>&1
+if test $? -ne 0 ; then
+   echo "First e2fsck failed; see $LOGDIR/e2fsck.1.log"
+   exit 1
+fi
+/sbin/resize2fs $IMG 16M > $LOGDIR/resize2fs.log 2>&1
+if test $? -ne 0 ; then
+   echo "Resize2fs failed; see $LOGDIR/e2fsck.1.log"
+   exit 1
+fi
+/sbin/e2fsck -fy $IMG > $LOGDIR/e2fsck.2.log 2>&1
+if test $? -ne 0 ; then
+   echo "Second e2fsck failed; see $LOGDIR/e2fsck.2.log"
+   exit 1
+fi
+/sbin/debugfs -R "dump pass1.c $TDIR/pass1.c" $IMG > $LOGDIR/debugfs.log 2>&1
+diff $TDIR/pass1.c e2fsck/pass1.c
+
index 3d8cc89..a4f047e 100644 (file)
@@ -1,5 +1,5 @@
 
-In order to santize e2fsprogs to be DFSG free, the file
+In order to sanitize e2fsprogs to be DFSG free, the file
 draft-leach-uuids-guids-01.txt has been removed.  It can be obtained
 by downloading e2fsprogs from the upstream sources.  It may also be
 available from other sites on the network, if you do a quick web
@@ -16,7 +16,7 @@ the documentation which has been removed for Debian's DFSG license
 purity shouldn't be denied to Ubuntu users.
 
                                        Theodore Ts'o
-                                       Ocotober 3, 2006
+                                       October 3, 2006
 
 
 
diff --git a/debugfs/Android.bp b/debugfs/Android.bp
new file mode 100644 (file)
index 0000000..b9f299b
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright 2017 The Android Open Source Project
+
+//########################
+// Build the debugfs binary
+
+cc_defaults {
+    name: "debugfs-defaults",
+    defaults: ["e2fsprogs-defaults"],
+    srcs: [
+        "debug_cmds.c",
+        "debugfs.c",
+        "util.c",
+        "ncheck.c",
+        "icheck.c",
+        "ls.c",
+        "lsdel.c",
+        "dump.c",
+        "set_fields.c",
+        "logdump.c",
+        "htree.c",
+        "unused.c",
+        "e2freefrag.c",
+        "filefrag.c",
+        "extent_cmds.c",
+        "extent_inode.c",
+        "zap.c",
+        "quota.c",
+        "xattrs.c",
+        "journal.c",
+        "revoke.c",
+        "recovery.c",
+        "do_journal.c",
+    ],
+    cflags: [
+        "-Wno-unused-variable",
+        "-fno-strict-aliasing",
+        "-DDEBUGFS",
+    ],
+    include_dirs: [
+        "external/e2fsprogs/misc",
+        "external/e2fsprogs/e2fsck"
+    ],
+}
+
+debugfs_libs = [
+    "libext2_misc",
+    "libext2fs",
+    "libext2_blkid",
+    "libext2_uuid",
+    "libext2_ss",
+    "libext2_quota",
+    "libext2_com_err",
+    "libext2_e2p",
+    "libext2_support",
+]
+
+cc_binary {
+    name: "debugfs",
+    host_supported: true,
+    defaults: ["debugfs-defaults"],
+
+    shared_libs: debugfs_libs,
+    system_shared_libs: ["libc", "libdl"],
+}
+
+cc_binary {
+    name: "debugfs_static",
+    static_executable: true,
+    host_supported: true,
+    defaults: ["debugfs-defaults"],
+
+    static_libs: debugfs_libs,
+}
diff --git a/debugfs/Android.mk b/debugfs/Android.mk
deleted file mode 100644 (file)
index 91dc8c3..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-#########################
-# Build the debugfs binary
-
-debugfs_src_files :=  \
-       debug_cmds.c \
-       debugfs.c \
-       util.c \
-       ncheck.c\
-       icheck.c \
-       ls.c \
-       lsdel.c \
-       dump.c \
-       set_fields.c \
-       logdump.c \
-       htree.c \
-       unused.c \
-       e2freefrag.c \
-       filefrag.c \
-       extent_cmds.c \
-       extent_inode.c \
-       zap.c \
-       create_inode.c \
-       quota.c \
-       xattrs.c \
-       journal.c \
-       revoke.c \
-       recovery.c \
-       do_journal.c
-
-debugfs_shared_libraries := \
-       libext2fs \
-       libext2_blkid \
-       libext2_uuid \
-       libext2_ss \
-       libext2_quota \
-       libext2_com_err \
-       libext2_e2p
-
-debugfs_system_shared_libraries := libc
-
-debugfs_static_libraries := \
-       libext2fs \
-       libext2_blkid \
-       libext2_uuid_static \
-       libext2_ss \
-       libext2_quota \
-       libext2_com_err \
-       libext2_e2p
-
-debugfs_system_static_libraries := libc
-
-debugfs_c_includes := \
-       external/e2fsprogs/e2fsck \
-       external/e2fsprogs/misc \
-       external/e2fsprogs/lib
-
-debugfs_cflags := -O2 -g -W -Wall -fno-strict-aliasing -DDEBUGFS
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(debugfs_src_files)
-LOCAL_C_INCLUDES := $(debugfs_c_includes)
-LOCAL_CFLAGS := $(debugfs_cflags)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(debugfs_system_shared_libraries)
-LOCAL_SHARED_LIBRARIES := $(debugfs_shared_libraries)
-LOCAL_MODULE := debugfs
-LOCAL_MODULE_TAGS := optional
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(debugfs_src_files)
-LOCAL_C_INCLUDES := $(debugfs_c_includes)
-LOCAL_CFLAGS := $(debugfs_cflags)
-LOCAL_STATIC_LIBRARIES := $(debugfs_static_libraries) $(debugfs_system_static_libraries)
-LOCAL_FORCE_STATIC_EXECUTABLE := true
-LOCAL_MODULE := debugfs_static
-LOCAL_MODULE_TAGS := optional
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(debugfs_src_files)
-LOCAL_C_INCLUDES := $(debugfs_c_includes)
-LOCAL_CFLAGS := $(debugfs_cflags)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(debugfs_shared_libraries))
-LOCAL_MODULE := debugfs_host
-LOCAL_MODULE_STEM := debugfs
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_EXECUTABLE)
index 3ac80d9..ed4ea8d 100644 (file)
@@ -8,6 +8,7 @@ VPATH = @srcdir@
 top_builddir = ..
 my_dir = debugfs
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
@@ -46,7 +47,7 @@ STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBSS) \
                $(DEPSTATIC_LIBCOM_ERR) $(DEPSTATIC_LIBUUID) \
                $(DEPSTATIC_LIBE2P)
 
-# This nastyness is needed because of jfs_user.h hackery; when we finally
+# This nastiness is needed because of jfs_user.h hackery; when we finally
 # clean up this mess, we should be able to drop it
 LOCAL_CFLAGS = -I$(srcdir)/../e2fsck -DDEBUGFS
 DEPEND_CFLAGS = -I$(srcdir)
@@ -117,8 +118,8 @@ debugfs.8: $(DEP_SUBSTITUTE) $(srcdir)/debugfs.8.in
        $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/debugfs.8.in debugfs.8
 
 installdirs:
-       $(E) "  MKINSTALLDIRS $(root_sbindir) $(man8dir)"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(root_sbindir) \
+       $(E) "  MKDIR_P $(root_sbindir) $(man8dir)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(root_sbindir) \
                $(DESTDIR)$(man8dir)
 
 install: $(PROGS) $(MANPAGES) installdirs
@@ -164,7 +165,7 @@ tst_set_fields: set_fields.c util.c
        $(Q) $(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(SYSLIBS) -DUNITTEST \
                -o tst_set_fields $(srcdir)/set_fields.c $(srcdir)/util.c $(LIBS)
 
-check:: tst_set_fields
+fullcheck check:: tst_set_fields
        $(TESTENV) ./tst_set_fields
 
 # +++ Dependency line eater +++
@@ -180,13 +181,14 @@ debugfs.o: $(srcdir)/debugfs.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h $(top_srcdir)/version.h \
  $(srcdir)/../e2fsck/jfs_user.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
  $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \
- $(top_srcdir)/lib/support/plausible.h
+ $(top_srcdir)/lib/ext2fs/compiler.h $(top_srcdir)/lib/support/plausible.h
 util.o: $(srcdir)/util.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/ss/ss.h \
  $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \
@@ -194,9 +196,10 @@ util.o: $(srcdir)/util.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
  $(top_srcdir)/lib/ext2fs/ext3_extents.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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 ls.o: $(srcdir)/ls.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -204,9 +207,10 @@ ls.o: $(srcdir)/ls.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 ncheck.o: $(srcdir)/ncheck.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -214,9 +218,10 @@ ncheck.o: $(srcdir)/ncheck.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 icheck.o: $(srcdir)/icheck.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -224,9 +229,10 @@ icheck.o: $(srcdir)/icheck.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 lsdel.o: $(srcdir)/lsdel.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -234,9 +240,10 @@ lsdel.o: $(srcdir)/lsdel.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 dump.o: $(srcdir)/dump.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -244,9 +251,10 @@ dump.o: $(srcdir)/dump.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 set_fields.o: $(srcdir)/set_fields.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -254,9 +262,10 @@ set_fields.o: $(srcdir)/set_fields.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 logdump.o: $(srcdir)/logdump.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -264,21 +273,24 @@ logdump.o: $(srcdir)/logdump.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/../e2fsck/jfs_user.h \
  $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h
 htree.o: $(srcdir)/htree.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
  $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 unused.o: $(srcdir)/unused.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -286,17 +298,19 @@ unused.o: $(srcdir)/unused.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 e2freefrag.o: $(srcdir)/../misc/e2freefrag.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.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 \
- $(srcdir)/../misc/e2freefrag.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/e2freefrag.h \
+ $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
  $(top_builddir)/lib/ss/ss_err.h $(srcdir)/../misc/create_inode.h \
  $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
  $(top_srcdir)/lib/support/dqblk_v2.h \
@@ -307,9 +321,10 @@ filefrag.o: $(srcdir)/filefrag.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 extent_inode.o: $(srcdir)/extent_inode.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -317,9 +332,10 @@ extent_inode.o: $(srcdir)/extent_inode.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 zap.o: $(srcdir)/zap.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -327,18 +343,20 @@ zap.o: $(srcdir)/zap.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 create_inode.o: $(srcdir)/../misc/create_inode.c $(top_builddir)/lib/config.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 $(srcdir)/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/nls-enable.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/ext2fs/fiemap.h \
+ $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/nls-enable.h
 xattrs.o: $(srcdir)/xattrs.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/support/cstring.h \
  $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -346,9 +364,10 @@ xattrs.o: $(srcdir)/xattrs.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 quota.o: $(srcdir)/quota.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
@@ -356,9 +375,10 @@ quota.o: $(srcdir)/quota.c $(top_builddir)/lib/config.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 journal.o: $(srcdir)/journal.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/journal.h \
@@ -366,35 +386,39 @@ journal.o: $(srcdir)/journal.c $(top_builddir)/lib/config.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/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
+ $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \
+ $(top_srcdir)/lib/ext2fs/compiler.h
 revoke.o: $(srcdir)/../e2fsck/revoke.c $(srcdir)/../e2fsck/jfs_user.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/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
+ $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \
+ $(top_srcdir)/lib/ext2fs/compiler.h
 recovery.o: $(srcdir)/../e2fsck/recovery.c $(srcdir)/../e2fsck/jfs_user.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/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
+ $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \
+ $(top_srcdir)/lib/ext2fs/compiler.h
 do_journal.o: $(srcdir)/do_journal.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
  $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.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/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 \
- $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h \
  $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h $(srcdir)/journal.h \
- $(srcdir)/../e2fsck/jfs_user.h
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/journal.h $(srcdir)/../e2fsck/jfs_user.h
index e151d43..393c000 100644 (file)
@@ -143,7 +143,7 @@ Before overwriting a file system block, write the old contents of the block to
 an undo file.  This undo file can be used with e2undo(8) to restore the old
 contents of the file system should something go wrong.  If the empty string is
 passed as the undo_file argument, the undo file will be written to a file named
-resize2fs-\fIdevice\fR.e2undo in the directory specified via the
+debugfs-\fIdevice\fR.e2undo in the directory specified via the
 \fIE2FSPROGS_UNDO_DIR\fR environment variable.
 
 WARNING: The undo file cannot be used to recover from a power or system crash.
@@ -179,7 +179,7 @@ This is a list of the commands which
 .B debugfs
 supports.
 .TP
-.BI blocks " filespace"
+.BI blocks " filespec"
 Print the blocks used by the inode
 .I filespec
 to stdout.
@@ -190,16 +190,21 @@ Print or set the physical block number corresponding to the logical block number
 in the inode
 .IR filespec .
 If the
-.I -a
+.I \-a
 flag is specified, try to allocate a block if necessary.
 .TP
-.BI block_dump " [-f filespec] block_num"
+.BI block_dump " '[ -x ] [-f filespec] block_num"
 Dump the filesystem block given by
 .I block_num
 in hex and ASCII format to the console.  If the
-.I -f
+.I \-f
 option is specified, the block number is relative to the start of the given
 .BR filespec .
+If the
+.I \-x
+option is specified, the block is interpreted as an extended attribute
+block and printed to show the structure of extended attribute data
+structures.
 .TP
 .BI cat " filespec"
 Dump the contents of the inode
@@ -226,7 +231,7 @@ Clear the contents of the inode
 .IR filespec .
 .TP
 .BI copy_inode " source_inode destination_inode"
-Copy the conents of the inode structure in
+Copy the contents of the inode structure in
 .I source_inode
 and use it to overwrite the inode structure at
 .IR destination_inode .
@@ -237,8 +242,11 @@ Search the directory
 for
 .IR filename .
 .TP
-.B dirty
+.BI dirty " [-clean]"
 Mark the filesystem as dirty, so that the superblocks will be written on exit.
+Additionally, clear the superblock's valid flag, or set it if
+.I -clean
+is specified.
 .TP
 .BI dump " [-p] filespec out_file"
 Dump the contents of the inode
@@ -290,7 +298,10 @@ not stored in filesystem data structures.   Hence, the values displayed
 may not necessarily by accurate and does not indicate a problem or
 corruption in the file system.)
 .TP
-.BI ea_get " [-f outfile] filespec attr_name"
+.B dump_unused
+Dump unused blocks which contain non-null bytes.
+.TP
+.BI ea_get " [-f outfile]|[-xVC] [-r] filespec attr_name"
 Retrieve the value of the extended attribute
 .I attr_name
 in the file
@@ -302,7 +313,7 @@ List the extended attributes associated with the file
 .I filespec
 to standard output.
 .TP
-.BI ea_set " [-f infile] filespec attr_name attr_value
+.BI ea_set " [-f infile] [-r] filespec attr_name attr_value
 Set the value of the extended attribute
 .I attr_name
 in the file
@@ -402,6 +413,9 @@ If
 .I num
 is specified, also clear num-1 inodes after the specified inode.
 .TP
+.BI get_quota " quota_type id"
+Display quota information for given quota type (user, group, or project) and ID.
+.TP
 .B help
 Print a list of commands understood by
 .BR debugfs .
@@ -415,8 +429,20 @@ showing its tree structure.
 Print a listing of the inodes which use the one or more blocks specified
 on the command line.
 .TP
-.BI inode_dump " filespec"
+.BI inode_dump " [-b]|[-e]|[-x] filespec"
 Print the contents of the inode data structure in hex and ASCII format.
+The
+.I \-b
+option causes the command to only dump the contents of the
+.B i_blocks
+array.  The
+.I \-e
+option causes the command to only dump the contents of the extra inode
+space, which is used to store in-line extended attributes. The
+.I \-x
+option causes the command to dump the extra inode space interpreted and
+extended attributes.  This is useful to debug corrupted inodes
+containing extended attributes.
 .TP
 .BI imap " filespec"
 Print the location of the inode data structure (in the inode table)
@@ -437,7 +463,7 @@ the superblock and block descriptors.
 .BI journal_close
 Close the open journal.
 .TP
-.BI journal_open " [-c] [-v ver] [-j ext_jnl]
+.BI journal_open " [-c] [-v ver] [-f ext_jnl]
 Opens the journal for reading and writing.  Journal checksumming can
 be enabled by supplying \fI-c\fR; checksum formats 2 and 3 can be
 selected with the \fI-v\fR option.  An external journal can be loaded
@@ -469,6 +495,9 @@ process to
 .I directory
 on the native filesystem.
 .TP
+.BI list_quota " quota_type"
+Display quota information for given quota type (user, group, or project).
+.TP
 .BI ln " filespec dest_file"
 Create a link named
 .I dest_file
@@ -476,7 +505,7 @@ which is a hard link to
 .IR filespec .
 Note this does not adjust the inode reference counts.
 .TP
-.BI logdump " [-acsO] [-b block] [-i filespec] [-f journal_file] [output_file]"
+.BI logdump " [-acsOS] [-b block] [-i filespec] [-f journal_file] [output_file]"
 Dump the contents of the ext3 journal.  By default, dump the journal inode as
 specified in the superblock.  However, this can be overridden with the
 .I \-i
@@ -490,6 +519,12 @@ option utilizes the backup information in the superblock to locate the
 journal.
 .IP
 The
+.I \-S
+option causes
+.B logdump
+to print the contents of the journal superblock.
+.IP
+The
 .I \-a
 option causes the
 .B logdump
@@ -498,7 +533,7 @@ The
 .I \-b
 option causes
 .B logdump
-to print all journal records that are refer to the specified block.
+to print all journal records that refer to the specified block.
 The
 .I \-c
 option will print out the contents of all of the data blocks selected by
@@ -570,7 +605,7 @@ to those inodes.  The
 flag will enable checking the file type information in the directory
 entry to make sure it matches the inode's type.
 .TP
-.BI open " [-weficD] [-b blocksize] [-s superblock] [-z undo_file] device"
+.BI open " [-weficD] [-b blocksize] [-d image_filename] [-s superblock] [-z undo_file] device"
 Open a filesystem for editing.  The
 .I -f
 flag forces the filesystem to be opened even if there are some unknown
@@ -578,7 +613,7 @@ or incompatible filesystem features which would normally
 prevent the filesystem from being opened.  The
 .I -e
 flag causes the filesystem to be opened in exclusive mode.  The
-.IR -b ", " -c ", " -i ", " -s ", " -w ", and " -D
+.IR -b ", " -c ", " -d ", " -i ", " -s ", " -w ", and " -D
 options behave the same as the command-line options to
 .BR debugfs .
 .TP
@@ -649,6 +684,10 @@ has value
 Also available as
 .BR set_bg .
 .TP
+.BI set_current_time " time"
+Set current time in seconds since Unix epoch to use when setting filesystem
+fields.
+.TP
 .BI seti " filespec [num]"
 Mark inode
 .I filespec
@@ -691,6 +730,11 @@ can be displayed by using the command:
 Also available as
 .BR ssv .
 .TP
+.B show_debugfs_params
+Display
+.B debugfs
+parameters such as information about currently opened filesystem.
+.TP
 .BI show_super_stats " [-h]"
 List the contents of the super block and the block group descriptors.  If the
 .I -h
@@ -701,6 +745,10 @@ flag is given, only print out the superblock contents. Also available as
 Display the contents of the inode structure of the inode
 .IR filespec .
 .TP
+.B supported_features
+Display filesystem features supported by this version of
+.BR debugfs .
+.TP
 .BI testb " block [count]"
 Test if the block number
 .I block
index 165f924..132c5f9 100644 (file)
@@ -26,6 +26,9 @@ extern char *optarg;
 #include <errno.h>
 #endif
 #include <fcntl.h>
+#ifdef HAVE_SYS_SYSMACROS_H
+#include <sys/sysmacros.h>
+#endif
 
 #include "debugfs.h"
 #include "uuid/uuid.h"
@@ -45,20 +48,28 @@ extern char *optarg;
 int journal_enable_debug = -1;
 #endif
 
+/*
+ * There must be only one definition if we're hooking in extra commands or
+ * chaging default prompt. Use -DSKIP_GLOBDEF for that.
+ */
+#ifndef SKIP_GLOBDEFS
 ss_request_table *extra_cmds;
 const char *debug_prog_name;
-int sci_idx;
+#endif
+int ss_sci_idx;
 
 ext2_filsys    current_fs;
 quota_ctx_t    current_qctx;
 ext2_ino_t     root, cwd;
+int            no_copy_xattrs;
 
 static int debugfs_setup_tdb(const char *device_name, char *undo_file,
                             io_manager *io_ptr)
 {
        errcode_t retval = ENOMEM;
-       char *tdb_dir = NULL, *tdb_file = NULL;
-       char *dev_name, *tmp_name;
+       const char      *tdb_dir = NULL;
+       char            *tdb_file = NULL;
+       char            *dev_name, *tmp_name;
 
        /* (re)open a specific undo file */
        if (undo_file && undo_file[0] != 0) {
@@ -156,13 +167,8 @@ static void open_filesystem(char *device, int open_flags, blk64_t superblock,
                }
        }
 
-       if (catastrophic && (open_flags & EXT2_FLAG_RW)) {
-               com_err(device, 0,
-                       "opening read-only because of catastrophic mode");
-               open_flags &= ~EXT2_FLAG_RW;
-       }
        if (catastrophic)
-               open_flags |= EXT2_FLAG_SKIP_MMP;
+               open_flags |= EXT2_FLAG_SKIP_MMP | EXT2_FLAG_IGNORE_SB_ERRORS;
 
        if (undo_file) {
                retval = debugfs_setup_tdb(device, undo_file, &io_ptr);
@@ -170,10 +176,18 @@ static void open_filesystem(char *device, int open_flags, blk64_t superblock,
                        exit(1);
        }
 
+try_open_again:
        retval = ext2fs_open(device, open_flags, superblock, blocksize,
                             io_ptr, &current_fs);
+       if (retval && (retval == EXT2_ET_SB_CSUM_INVALID) &&
+           !(open_flags & EXT2_FLAG_IGNORE_CSUM_ERRORS)) {
+               open_flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
+               printf("Checksum errors in superblock!  Retrying...\n");
+               goto try_open_again;
+       }
        if (retval) {
-               com_err(device, retval, "while opening filesystem");
+               com_err(debug_prog_name, retval,
+                       "while trying to open %s", device);
                if (retval == EXT2_ET_BAD_MAGIC)
                        check_plausibility(device, CHECK_FS_EXIST, NULL);
                current_fs = NULL;
@@ -184,14 +198,10 @@ static void open_filesystem(char *device, int open_flags, blk64_t superblock,
        if (catastrophic)
                com_err(device, 0, "catastrophic mode - not reading inode or group bitmaps");
        else {
-               retval = ext2fs_read_inode_bitmap(current_fs);
-               if (retval) {
-                       com_err(device, retval, "while reading inode bitmap");
-                       goto errout;
-               }
-               retval = ext2fs_read_block_bitmap(current_fs);
+               retval = ext2fs_read_bitmaps(current_fs);
                if (retval) {
-                       com_err(device, retval, "while reading block bitmap");
+                       com_err(device, retval,
+                               "while reading allocation bitmaps");
                        goto errout;
                }
        }
@@ -214,13 +224,15 @@ errout:
                com_err(device, retval, "while trying to close filesystem");
 }
 
-void do_open_filesys(int argc, char **argv)
+void do_open_filesys(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                    void *infop EXT2FS_ATTR((unused)))
 {
        int     c, err;
        int     catastrophic = 0;
        blk64_t superblock = 0;
        blk64_t blocksize = 0;
-       int     open_flags = EXT2_FLAG_SOFTSUPP_FEATURES | EXT2_FLAG_64BITS; 
+       int     open_flags = EXT2_FLAG_SOFTSUPP_FEATURES | EXT2_FLAG_64BITS |
+               EXT2_FLAG_THREADS;
        char    *data_filename = 0;
        char    *undo_file = NULL;
 
@@ -265,7 +277,11 @@ void do_open_filesys(int argc, char **argv)
                                return;
                        break;
                case 'z':
+#ifdef READ_ONLY
+                       goto print_usage;
+#else
                        undo_file = optarg;
+#endif
                        break;
                default:
                        goto print_usage;
@@ -283,14 +299,16 @@ void do_open_filesys(int argc, char **argv)
 
 print_usage:
        fprintf(stderr, "%s: Usage: open [-s superblock] [-b blocksize] "
-               "[-d image_filename] [-c] [-i] [-f] [-e] [-D] "
-#ifndef READ_ONLY
-               "[-w] "
+#ifdef READ_ONLY
+               "[-d image_filename] [-z undo_file] [-c] [-i] [-f] [-e] [-D] "
+#else
+               "[-d image_filename] [-c] [-i] [-f] [-e] [-D] [-w] "
 #endif
                "<device>\n", argv[0]);
 }
 
-void do_lcd(int argc, char **argv)
+void do_lcd(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+           void *infop EXT2FS_ATTR((unused)))
 {
        if (argc != 2) {
                com_err(argv[0], 0, "Usage: %s %s", argv[0], "<native dir>");
@@ -327,7 +345,8 @@ static void close_filesystem(NOARGS)
        return;
 }
 
-void do_close_filesys(int argc, char **argv)
+void do_close_filesys(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                     void *infop EXT2FS_ATTR((unused)))
 {
        int     c;
 
@@ -355,7 +374,8 @@ void do_close_filesys(int argc, char **argv)
 }
 
 #ifndef READ_ONLY
-void do_init_filesys(int argc, char **argv)
+void do_init_filesys(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                    void *infop EXT2FS_ATTR((unused)))
 {
        struct ext2_super_block param;
        errcode_t       retval;
@@ -415,7 +435,9 @@ static void print_bg_opts(ext2_filsys fs, dgrp_t group, int mask,
        }
 }
 
-void do_show_super_stats(int argc, char *argv[])
+void do_show_super_stats(int argc, char *argv[],
+                        int sci_idx EXT2FS_ATTR((unused)),
+                        void *infop EXT2FS_ATTR((unused)))
 {
        const char *units ="block";
        dgrp_t  i;
@@ -444,9 +466,20 @@ void do_show_super_stats(int argc, char *argv[])
                units = "cluster";
 
        list_super2(current_fs->super, out);
+       if (ext2fs_has_feature_metadata_csum(current_fs->super) &&
+           !ext2fs_superblock_csum_verify(current_fs,
+                                          current_fs->super)) {
+               __u32 orig_csum = current_fs->super->s_checksum;
+
+               ext2fs_superblock_csum_set(current_fs,
+                                          current_fs->super);
+               fprintf(out, "Expected Checksum:        0x%08x\n",
+                       current_fs->super->s_checksum);
+               current_fs->super->s_checksum = orig_csum;
+       }
        for (i=0; i < current_fs->group_desc_count; i++)
                numdirs += ext2fs_bg_used_dirs_count(current_fs, i);
-       fprintf(out, "Directories:              %d\n", numdirs);
+       fprintf(out, "Directories:              %u\n", numdirs);
 
        if (header_only) {
                close_pager(out);
@@ -494,12 +527,14 @@ void do_show_super_stats(int argc, char *argv[])
        close_pager(out);
        return;
 print_usage:
-       fprintf(stderr, "%s: Usage: show_super [-h]\n", argv[0]);
+       fprintf(stderr, "%s: Usage: show_super_stats [-h]\n", argv[0]);
 }
 
 #ifndef READ_ONLY
 void do_dirty_filesys(int argc EXT2FS_ATTR((unused)),
-                     char **argv EXT2FS_ATTR((unused)))
+                     char **argv EXT2FS_ATTR((unused)),
+                     int sci_idx EXT2FS_ATTR((unused)),
+                     void *infop EXT2FS_ATTR((unused)))
 {
        if (check_fs_open(argv[0]))
                return;
@@ -695,7 +730,7 @@ static void dump_extents(FILE *f, const char *prefix, ext2_ino_t ino,
                                continue;
                        }
 
-                       fprintf(f, "%s(ETB%d):%lld",
+                       fprintf(f, "%s(ETB%d):%llu",
                                printed ? ", " : "", info.curr_level,
                                extent.e_pblk);
                        printed = 1;
@@ -758,41 +793,31 @@ static void dump_inline_data(FILE *out, const char *prefix, ext2_ino_t inode_num
                fprintf(out, "%sSize of inline data: %zu\n", prefix, size);
 }
 
-static void dump_fast_link(FILE *out, ext2_ino_t inode_num,
-                          struct ext2_inode *inode, const char *prefix)
+static void dump_inline_symlink(FILE *out, ext2_ino_t inode_num,
+                               struct ext2_inode *inode, const char *prefix)
 {
-       errcode_t retval = 0;
-       char *buf;
+       errcode_t retval;
+       char *buf = NULL;
        size_t size;
 
-       if (inode->i_flags & EXT4_INLINE_DATA_FL) {
-               retval = ext2fs_inline_data_size(current_fs, inode_num, &size);
-               if (retval)
-                       goto out;
-
-               retval = ext2fs_get_memzero(size + 1, &buf);
-               if (retval)
-                       goto out;
+       retval = ext2fs_inline_data_size(current_fs, inode_num, &size);
+       if (retval)
+               goto out;
 
-               retval = ext2fs_inline_data_get(current_fs, inode_num,
-                                               inode, buf, &size);
-               if (retval)
-                       goto out;
-               fprintf(out, "%sFast link dest: \"%.*s\"\n", prefix,
-                       (int)size, buf);
+       retval = ext2fs_get_memzero(size + 1, &buf);
+       if (retval)
+               goto out;
 
-               retval = ext2fs_free_mem(&buf);
-               if (retval)
-                       goto out;
-       } else {
-               size_t sz = EXT2_I_SIZE(inode);
+       retval = ext2fs_inline_data_get(current_fs, inode_num,
+                                       inode, buf, &size);
+       if (retval)
+               goto out;
 
-               if (sz > sizeof(inode->i_block))
-                       sz = sizeof(inode->i_block);
-               fprintf(out, "%sFast link dest: \"%.*s\"\n", prefix, (int) sz,
-                       (char *)inode->i_block);
-       }
+       fprintf(out, "%sFast link dest: \"%.*s\"\n", prefix,
+               (int)size, buf);
 out:
+       if (buf)
+               ext2fs_free_mem(&buf);
        if (retval)
                com_err(__func__, retval, "while dumping link destination");
 }
@@ -820,8 +845,8 @@ void internal_dump_inode(FILE *out, const char *prefix,
        else if (LINUX_S_ISSOCK(inode->i_mode)) i_type = "socket";
        else i_type = "bad type";
        fprintf(out, "%sInode: %u   Type: %s    ", prefix, inode_num, i_type);
-       fprintf(out, "%sMode:  %04o   Flags: 0x%x\n",
-               prefix, inode->i_mode & 0777, inode->i_flags);
+       fprintf(out, "%sMode:  0%03o   Flags: 0x%x\n",
+               prefix, inode->i_mode & 07777, inode->i_flags);
        if (is_large_inode && large_inode->i_extra_isize >= 24) {
                fprintf(out, "%sGeneration: %u    Version: 0x%08x:%08x\n",
                        prefix, inode->i_generation, large_inode->i_version_hi,
@@ -835,30 +860,29 @@ void internal_dump_inode(FILE *out, const char *prefix,
        if (is_large_inode && large_inode->i_extra_isize >= 32)
                fprintf(out, "   Project: %5d", large_inode->i_projid);
        fputs("   Size: ", out);
-       if (LINUX_S_ISREG(inode->i_mode))
+       if (LINUX_S_ISREG(inode->i_mode) || LINUX_S_ISDIR(inode->i_mode))
                fprintf(out, "%llu\n", EXT2_I_SIZE(inode));
        else
-               fprintf(out, "%d\n", inode->i_size);
+               fprintf(out, "%u\n", inode->i_size);
        if (os == EXT2_OS_HURD)
                fprintf(out,
-                       "%sFile ACL: %d    Directory ACL: %d Translator: %d\n",
+                       "%sFile ACL: %u Translator: %u\n",
                        prefix,
-                       inode->i_file_acl, LINUX_S_ISDIR(inode->i_mode) ? inode->i_dir_acl : 0,
+                       inode->i_file_acl,
                        inode->osd1.hurd1.h_i_translator);
        else
-               fprintf(out, "%sFile ACL: %llu    Directory ACL: %d\n",
+               fprintf(out, "%sFile ACL: %llu\n",
                        prefix,
                        inode->i_file_acl | ((long long)
-                               (inode->osd2.linux2.l_i_file_acl_high) << 32),
-                       LINUX_S_ISDIR(inode->i_mode) ? inode->i_dir_acl : 0);
+                               (inode->osd2.linux2.l_i_file_acl_high) << 32));
        if (os != EXT2_OS_HURD)
-               fprintf(out, "%sLinks: %d   Blockcount: %llu\n",
+               fprintf(out, "%sLinks: %u   Blockcount: %llu\n",
                        prefix, inode->i_links_count,
                        (((unsigned long long)
                          inode->osd2.linux2.l_i_blocks_hi << 32)) +
                        inode->i_blocks);
        else
-               fprintf(out, "%sLinks: %d   Blockcount: %u\n",
+               fprintf(out, "%sLinks: %u   Blockcount: %u\n",
                        prefix, inode->i_links_count, inode->i_blocks);
        switch (os) {
            case EXT2_OS_HURD:
@@ -868,7 +892,7 @@ void internal_dump_inode(FILE *out, const char *prefix,
            default:
                frag = fsize = 0;
        }
-       fprintf(out, "%sFragment:  Address: %d    Number: %d    Size: %d\n",
+       fprintf(out, "%sFragment:  Address: %u    Number: %u    Size: %u\n",
                prefix, inode->i_faddr, frag, fsize);
        if (is_large_inode && large_inode->i_extra_isize >= 24) {
                fprintf(out, "%s ctime: 0x%08x:%08x -- %s", prefix,
@@ -919,9 +943,12 @@ void internal_dump_inode(FILE *out, const char *prefix,
                fprintf(out, "Inode checksum: 0x%08x\n", crc);
        }
 
-       if (LINUX_S_ISLNK(inode->i_mode) &&
-           ext2fs_inode_data_blocks(current_fs, inode) == 0)
-               dump_fast_link(out, inode_num, inode, prefix);
+       if (LINUX_S_ISLNK(inode->i_mode) && ext2fs_is_fast_symlink(inode))
+               fprintf(out, "%sFast link dest: \"%.*s\"\n", prefix,
+                       (int)EXT2_I_SIZE(inode), (char *)inode->i_block);
+       else if (LINUX_S_ISLNK(inode->i_mode) &&
+                  (inode->i_flags & EXT4_INLINE_DATA_FL))
+               dump_inline_symlink(out, inode_num, inode, prefix);
        else if (LINUX_S_ISBLK(inode->i_mode) || LINUX_S_ISCHR(inode->i_mode)) {
                int major, minor;
                const char *devnote;
@@ -958,7 +985,8 @@ static void dump_inode(ext2_ino_t inode_num, struct ext2_inode *inode)
        close_pager(out);
 }
 
-void do_stat(int argc, char *argv[])
+void do_stat(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      inode;
        struct ext2_inode * inode_buf;
@@ -978,8 +1006,8 @@ void do_stat(int argc, char *argv[])
                return;
        }
 
-       if (debugfs_read_inode_full(inode, inode_buf, argv[0],
-                                       EXT2_INODE_SIZE(current_fs->super))) {
+       if (debugfs_read_inode2(inode, inode_buf, argv[0],
+                               EXT2_INODE_SIZE(current_fs->super), 0)) {
                free(inode_buf);
                return;
        }
@@ -989,7 +1017,8 @@ void do_stat(int argc, char *argv[])
        return;
 }
 
-void do_dump_extents(int argc, char **argv)
+void do_dump_extents(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                    void *infop EXT2FS_ATTR((unused)))
 {
        struct ext2_inode inode;
        ext2_ino_t      ino;
@@ -1060,7 +1089,8 @@ static int print_blocks_proc(ext2_filsys fs EXT2FS_ATTR((unused)),
        return 0;
 }
 
-void do_blocks(int argc, char *argv[])
+void do_blocks(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+              void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      inode;
 
@@ -1077,7 +1107,8 @@ void do_blocks(int argc, char *argv[])
        return;
 }
 
-void do_chroot(int argc, char *argv[])
+void do_chroot(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+              void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t inode;
        int retval;
@@ -1094,7 +1125,8 @@ void do_chroot(int argc, char *argv[])
 }
 
 #ifndef READ_ONLY
-void do_clri(int argc, char *argv[])
+void do_clri(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t inode;
        struct ext2_inode inode_buf;
@@ -1109,7 +1141,8 @@ void do_clri(int argc, char *argv[])
                return;
 }
 
-void do_freei(int argc, char *argv[])
+void do_freei(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int    len = 1;
        int             err = 0;
@@ -1139,7 +1172,8 @@ void do_freei(int argc, char *argv[])
        ext2fs_mark_ib_dirty(current_fs);
 }
 
-void do_seti(int argc, char *argv[])
+void do_seti(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int    len = 1;
        int             err = 0;
@@ -1170,7 +1204,8 @@ void do_seti(int argc, char *argv[])
 }
 #endif /* READ_ONLY */
 
-void do_testi(int argc, char *argv[])
+void do_testi(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t inode;
 
@@ -1184,7 +1219,8 @@ void do_testi(int argc, char *argv[])
 }
 
 #ifndef READ_ONLY
-void do_freeb(int argc, char *argv[])
+void do_freeb(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        blk64_t block;
        blk64_t count = 1;
@@ -1203,7 +1239,8 @@ void do_freeb(int argc, char *argv[])
        ext2fs_mark_bb_dirty(current_fs);
 }
 
-void do_setb(int argc, char *argv[])
+void do_setb(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        blk64_t block;
        blk64_t count = 1;
@@ -1223,7 +1260,8 @@ void do_setb(int argc, char *argv[])
 }
 #endif /* READ_ONLY */
 
-void do_testb(int argc, char *argv[])
+void do_testb(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        blk64_t block;
        blk64_t count = 1;
@@ -1307,7 +1345,8 @@ static void modify_u32(char *com, const char *prompt,
 }
 
 
-void do_modify_inode(int argc, char *argv[])
+void do_modify_inode(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                    void *infop EXT2FS_ATTR((unused)))
 {
        struct ext2_inode inode;
        ext2_ino_t      inode_num;
@@ -1347,10 +1386,9 @@ void do_modify_inode(int argc, char *argv[])
        modify_u32(argv[0], "Reserved1", decimal_format, &inode.i_reserved1);
 #endif
        modify_u32(argv[0], "File acl", decimal_format, &inode.i_file_acl);
-       if (LINUX_S_ISDIR(inode.i_mode))
-               modify_u32(argv[0], "Directory acl", decimal_format, &inode.i_dir_acl);
-       else
-               modify_u32(argv[0], "High 32bits of size", decimal_format, &inode.i_size_high);
+
+       modify_u32(argv[0], "High 32bits of size", decimal_format,
+                  &inode.i_size_high);
 
        if (os == EXT2_OS_HURD)
                modify_u32(argv[0], "Translator Block",
@@ -1371,7 +1409,7 @@ void do_modify_inode(int argc, char *argv[])
                modify_u8(argv[0], "Fragment size", decimal_format, fsize);
 
        for (i=0;  i < EXT2_NDIR_BLOCKS; i++) {
-               sprintf(buf, "Direct Block #%d", i);
+               sprintf(buf, "Direct Block #%u", i);
                modify_u32(argv[0], buf, decimal_format, &inode.i_block[i]);
        }
        modify_u32(argv[0], "Indirect Block", decimal_format,
@@ -1385,7 +1423,9 @@ void do_modify_inode(int argc, char *argv[])
 }
 #endif /* READ_ONLY */
 
-void do_change_working_dir(int argc, char *argv[])
+void do_change_working_dir(int argc, char *argv[],
+                          int sci_idx EXT2FS_ATTR((unused)),
+                          void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      inode;
        int             retval;
@@ -1402,7 +1442,9 @@ void do_change_working_dir(int argc, char *argv[])
        return;
 }
 
-void do_print_working_directory(int argc, char *argv[])
+void do_print_working_directory(int argc, char *argv[],
+                               int sci_idx EXT2FS_ATTR((unused)),
+                               void *infop EXT2FS_ATTR((unused)))
 {
        int     retval;
        char    *pathname = NULL;
@@ -1491,7 +1533,8 @@ static void make_link(char *sourcename, char *destname)
 }
 
 
-void do_link(int argc, char *argv[])
+void do_link(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        if (common_args_process(argc, argv, 3, 3, "link",
                                "<source file> <dest_name>", CHECK_FS_RW))
@@ -1513,7 +1556,8 @@ static int mark_blocks_proc(ext2_filsys fs, blk64_t *blocknr,
        return 0;
 }
 
-void do_undel(int argc, char *argv[])
+void do_undel(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      ino;
        struct ext2_inode inode;
@@ -1576,7 +1620,8 @@ static void unlink_file_by_name(char *filename)
        return;
 }
 
-void do_unlink(int argc, char *argv[])
+void do_unlink(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+              void *infop EXT2FS_ATTR((unused)))
 {
        if (common_args_process(argc, argv, 2, 2, "link",
                                "<pathname>", CHECK_FS_RW))
@@ -1585,12 +1630,11 @@ void do_unlink(int argc, char *argv[])
        unlink_file_by_name(argv[1]);
 }
 
-void do_copy_inode(int argc, char *argv[])
+void do_copy_inode(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                  void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      src_ino, dest_ino;
-       struct ext2_inode inode;
        unsigned char   buf[4096];
-       int             retval;
 
        if (common_args_process(argc, argv, 3, 3, "copy_inode",
                                "<source file> <dest_name>", CHECK_FS_RW))
@@ -1604,18 +1648,20 @@ void do_copy_inode(int argc, char *argv[])
        if (!dest_ino)
                return;
 
-       if (debugfs_read_inode_full(src_ino, (struct ext2_inode *) buf,
-                                   argv[0], sizeof(buf)))
+       if (debugfs_read_inode2(src_ino, (struct ext2_inode *) buf,
+                               argv[0], sizeof(buf), 0))
                return;
 
-       if (debugfs_write_inode_full(dest_ino, (struct ext2_inode *) buf,
-                                    argv[0], sizeof(buf)))
+       if (debugfs_write_inode2(dest_ino, (struct ext2_inode *) buf,
+                                argv[0], sizeof(buf), 0))
                return;
 }
 
 #endif /* READ_ONLY */
 
-void do_find_free_block(int argc, char *argv[])
+void do_find_free_block(int argc, char *argv[],
+                       int sci_idx EXT2FS_ATTR((unused)),
+                       void *infop EXT2FS_ATTR((unused)))
 {
        blk64_t free_blk, goal, first_free = 0;
        int             count;
@@ -1667,7 +1713,9 @@ void do_find_free_block(int argc, char *argv[])
        printf("\n");
 }
 
-void do_find_free_inode(int argc, char *argv[])
+void do_find_free_inode(int argc, char *argv[],
+                       int sci_idx EXT2FS_ATTR((unused)),
+                       void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      free_inode, dir;
        int             mode;
@@ -1675,7 +1723,7 @@ void do_find_free_inode(int argc, char *argv[])
        char            *tmp;
 
        if (argc > 3 || (argc>1 && *argv[1] == '?')) {
-               com_err(argv[0], 0, "Usage: find_free_inode [dir] [mode]");
+               com_err(argv[0], 0, "Usage: find_free_inode [dir [mode]]");
                return;
        }
        if (check_fs_open(argv[0]))
@@ -1707,7 +1755,8 @@ void do_find_free_inode(int argc, char *argv[])
 }
 
 #ifndef READ_ONLY
-void do_write(int argc, char *argv[])
+void do_write(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        errcode_t       retval;
 
@@ -1720,7 +1769,8 @@ void do_write(int argc, char *argv[])
                com_err(argv[0], retval, 0);
 }
 
-void do_mknod(int argc, char *argv[])
+void do_mknod(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        unsigned long   major, minor;
        errcode_t       retval;
@@ -1764,12 +1814,14 @@ void do_mknod(int argc, char *argv[])
                goto usage;
 
        st.st_rdev = makedev(major, minor);
-       retval = do_mknod_internal(current_fs, cwd, argv[1], &st);
+       retval = do_mknod_internal(current_fs, cwd, argv[1],
+                                  st.st_mode, st.st_rdev);
        if (retval)
                com_err(argv[0], retval, 0);
 }
 
-void do_mkdir(int argc, char *argv[])
+void do_mkdir(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        errcode_t retval;
 
@@ -1787,11 +1839,17 @@ static int release_blocks_proc(ext2_filsys fs, blk64_t *blocknr,
                               e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)),
                               blk64_t ref_block EXT2FS_ATTR((unused)),
                               int ref_offset EXT2FS_ATTR((unused)),
-                              void *private EXT2FS_ATTR((unused)))
+                              void *private)
 {
-       blk64_t block;
+       blk64_t block = *blocknr;
+       blk64_t *last_cluster = (blk64_t *)private;
+       blk64_t cluster = EXT2FS_B2C(fs, block);
+
+       if (cluster == *last_cluster)
+               return 0;
+
+       *last_cluster = cluster;
 
-       block = *blocknr;
        ext2fs_block_alloc_stats2(fs, block, -1);
        return 0;
 }
@@ -1806,8 +1864,9 @@ static void kill_file_by_inode(ext2_ino_t inode)
        if (debugfs_write_inode(inode, &inode_buf, 0))
                return;
        if (ext2fs_inode_has_valid_blocks2(current_fs, &inode_buf)) {
+               blk64_t last_cluster = 0;
                ext2fs_block_iterate3(current_fs, inode, BLOCK_FLAG_READ_ONLY,
-                                     NULL, release_blocks_proc, NULL);
+                                     NULL, release_blocks_proc, &last_cluster);
        }
        printf("\n");
        ext2fs_inode_alloc_stats2(current_fs, inode, -1,
@@ -1815,7 +1874,8 @@ static void kill_file_by_inode(ext2_ino_t inode)
 }
 
 
-void do_kill_file(int argc, char *argv[])
+void do_kill_file(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t inode_num;
 
@@ -1825,7 +1885,8 @@ void do_kill_file(int argc, char *argv[])
        kill_file_by_inode(inode_num);
 }
 
-void do_rm(int argc, char *argv[])
+void do_rm(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+          void *infop EXT2FS_ATTR((unused)))
 {
        int retval;
        ext2_ino_t inode_num;
@@ -1886,7 +1947,8 @@ static int rmdir_proc(ext2_ino_t dir EXT2FS_ATTR((unused)),
        return 0;
 }
 
-void do_rmdir(int argc, char *argv[])
+void do_rmdir(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        int retval;
        ext2_ino_t inode_num;
@@ -1944,7 +2006,9 @@ void do_rmdir(int argc, char *argv[])
 #endif /* READ_ONLY */
 
 void do_show_debugfs_params(int argc EXT2FS_ATTR((unused)),
-                           char *argv[] EXT2FS_ATTR((unused)))
+                           char *argv[] EXT2FS_ATTR((unused)),
+                           int sci_idx EXT2FS_ATTR((unused)),
+                           void *infop EXT2FS_ATTR((unused)))
 {
        if (current_fs)
                printf("Open mode: read-%s\n",
@@ -1954,7 +2018,8 @@ void do_show_debugfs_params(int argc EXT2FS_ATTR((unused)),
 }
 
 #ifndef READ_ONLY
-void do_expand_dir(int argc, char *argv[])
+void do_expand_dir(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t inode;
        int retval;
@@ -1968,7 +2033,8 @@ void do_expand_dir(int argc, char *argv[])
        return;
 }
 
-void do_features(int argc, char *argv[])
+void do_features(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 {
        int     i;
 
@@ -1989,7 +2055,8 @@ void do_features(int argc, char *argv[])
 }
 #endif /* READ_ONLY */
 
-void do_bmap(int argc, char *argv[])
+void do_bmap(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      ino;
        blk64_t         blk, pblk = 0;
@@ -2052,7 +2119,8 @@ void do_bmap(int argc, char *argv[])
        fputc('\n', stdout);
 }
 
-void do_imap(int argc, char *argv[])
+void do_imap(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      ino;
        unsigned long   group, block, block_nr, offset;
@@ -2077,23 +2145,38 @@ void do_imap(int argc, char *argv[])
                block;
        offset &= (EXT2_BLOCK_SIZE(current_fs->super) - 1);
 
-       printf("Inode %d is part of block group %lu\n"
+       printf("Inode %u is part of block group %lu\n"
               "\tlocated at block %lu, offset 0x%04lx\n", ino, group,
               block_nr, offset);
 
 }
 
-void do_idump(int argc, char *argv[])
+void do_idump(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
+       struct ext2_inode_large *inode;
        ext2_ino_t      ino;
        unsigned char   *buf;
        errcode_t       err;
-       int             isize;
+       unsigned int    isize, size, offset = 0;
+       int             c, mode = 0;
 
-       if (common_args_process(argc, argv, 2, 2, argv[0],
-                               "<file>", 0))
+       reset_getopt();
+       while ((c = getopt (argc, argv, "bex")) != EOF) {
+               if (mode || c == '?') {
+                       com_err(argv[0], 0,
+                               "Usage: inode_dump [-b]|[-e] <file>");
+                       return;
+               }
+               mode = c;
+       }
+       if (optind != argc-1)
                return;
-       ino = string_to_inode(argv[1]);
+
+       if (check_fs_open(argv[0]))
+               return;
+
+       ino = string_to_inode(argv[optind]);
        if (!ino)
                return;
 
@@ -2107,17 +2190,41 @@ void do_idump(int argc, char *argv[])
        err = ext2fs_read_inode_full(current_fs, ino,
                                     (struct ext2_inode *)buf, isize);
        if (err) {
-               com_err(argv[0], err, "while reading inode %d", ino);
+               com_err(argv[0], err, "while reading inode %u", ino);
                goto err;
        }
 
-       do_byte_hexdump(stdout, buf, isize);
+       inode = (struct ext2_inode_large *) buf;
+       size = isize;
+       switch (mode) {
+       case 'b':
+               offset = ((char *) (&inode->i_block)) - ((char *) buf);
+               size = sizeof(inode->i_block);
+               break;
+       case 'x':
+       case 'e':
+               if (size <= EXT2_GOOD_OLD_INODE_SIZE) {
+                       com_err(argv[0], 0, "No extra space in inode");
+                       goto err;
+               }
+               offset = EXT2_GOOD_OLD_INODE_SIZE + inode->i_extra_isize;
+               if (offset > size)
+                       goto err;
+               size -= offset;
+               break;
+       }
+       if (mode == 'x')
+               raw_inode_xattr_dump(stdout, buf + offset, size);
+       else
+               do_byte_hexdump(stdout, buf + offset, size);
 err:
        ext2fs_free_mem(&buf);
 }
 
 #ifndef READ_ONLY
-void do_set_current_time(int argc, char *argv[])
+void do_set_current_time(int argc, char *argv[],
+                        int sci_idx EXT2FS_ATTR((unused)),
+                        void *infop EXT2FS_ATTR((unused)))
 {
        __s64 now;
 
@@ -2176,15 +2283,17 @@ static int find_supp_feature(__u32 *supp, int feature_type, char *name)
        return 0;
 }
 
-void do_supported_features(int argc, char *argv[])
+void do_supported_features(int argc, char *argv[],
+                          int sci_idx EXT2FS_ATTR((unused)),
+                          void *infop EXT2FS_ATTR((unused)))
 {
         int    ret;
        __u32   supp[3] = { EXT2_LIB_FEATURE_COMPAT_SUPP,
                            EXT2_LIB_FEATURE_INCOMPAT_SUPP,
                            EXT2_LIB_FEATURE_RO_COMPAT_SUPP };
-       __u32   jrnl_supp[3] = { JFS_KNOWN_COMPAT_FEATURES,
-                                JFS_KNOWN_INCOMPAT_FEATURES,
-                                JFS_KNOWN_ROCOMPAT_FEATURES };
+       __u32   jrnl_supp[3] = { JBD2_KNOWN_COMPAT_FEATURES,
+                                JBD2_KNOWN_INCOMPAT_FEATURES,
+                                JBD2_KNOWN_ROCOMPAT_FEATURES };
 
        if (argc > 1) {
                ret = find_supp_feature(supp, E2P_FS_FEATURE, argv[1]);
@@ -2204,7 +2313,8 @@ void do_supported_features(int argc, char *argv[])
 }
 
 #ifndef READ_ONLY
-void do_punch(int argc, char *argv[])
+void do_punch(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      ino;
        blk64_t         start, end;
@@ -2239,7 +2349,8 @@ void do_punch(int argc, char *argv[])
        }
 }
 
-void do_fallocate(int argc, char *argv[])
+void do_fallocate(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      ino;
        blk64_t         start, end;
@@ -2274,9 +2385,9 @@ void do_fallocate(int argc, char *argv[])
                return;
        }
 }
-#endif /* READ_ONLY */
 
-void do_symlink(int argc, char *argv[])
+void do_symlink(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+               void *infop EXT2FS_ATTR((unused)))
 {
        errcode_t       retval;
 
@@ -2289,9 +2400,12 @@ void do_symlink(int argc, char *argv[])
                com_err(argv[0], retval, 0);
 
 }
+#endif /* READ_ONLY */
 
 #if CONFIG_MMP
-void do_dump_mmp(int argc EXT2FS_ATTR((unused)), char *argv[])
+void do_dump_mmp(int argc EXT2FS_ATTR((unused)), char *argv[],
+                int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 {
        struct mmp_struct *mmp_s;
        unsigned long long mmp_block;
@@ -2344,16 +2458,18 @@ void do_dump_mmp(int argc EXT2FS_ATTR((unused)), char *argv[])
        fprintf(stdout, "check_interval: %d\n", mmp_s->mmp_check_interval);
        fprintf(stdout, "sequence: %08x\n", mmp_s->mmp_seq);
        fprintf(stdout, "time: %lld -- %s", mmp_s->mmp_time, ctime(&t));
-       fprintf(stdout, "node_name: %s\n", mmp_s->mmp_nodename);
-       fprintf(stdout, "device_name: %s\n", mmp_s->mmp_bdevname);
+       fprintf(stdout, "node_name: %.*s\n",
+               EXT2_LEN_STR(mmp_s->mmp_nodename));
+       fprintf(stdout, "device_name: %.*s\n",
+               EXT2_LEN_STR(mmp_s->mmp_bdevname));
        fprintf(stdout, "magic: 0x%x\n", mmp_s->mmp_magic);
        fprintf(stdout, "checksum: 0x%08x\n", mmp_s->mmp_checksum);
-       fprintf(stdout, "MMP is unsupported, please recompile with "
-                       "--enable-mmp\n");
 }
 #else
 void do_dump_mmp(int argc EXT2FS_ATTR((unused)),
-                char *argv[] EXT2FS_ATTR((unused)))
+                char *argv[] EXT2FS_ATTR((unused)),
+                int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 {
        fprintf(stdout, "MMP is unsupported, please recompile with "
                        "--enable-mmp\n");
@@ -2384,6 +2500,10 @@ static int source_file(const char *cmd_file, int ss_idx)
        while (!feof(f)) {
                if (fgets(buf, sizeof(buf), f) == NULL)
                        break;
+               if (buf[0] == '#') {
+                       printf("%s", buf);
+                       continue;
+               }
                cp = strchr(buf, '\n');
                if (cp)
                        *cp = 0;
@@ -2407,13 +2527,14 @@ int main(int argc, char **argv)
        int             retval;
        const char      *usage = 
                "Usage: %s [-b blocksize] [-s superblock] [-f cmd_file] "
-               "[-R request] [-V] ["
+               "[-R request] [-d data_source_device] [-i] [-n] [-D] [-V] ["
 #ifndef READ_ONLY
                "[-w] [-z undo_file] "
 #endif
-               "[-c] device]";
+               "[-c]] [device]";
        int             c;
-       int             open_flags = EXT2_FLAG_SOFTSUPP_FEATURES | EXT2_FLAG_64BITS;
+       int             open_flags = EXT2_FLAG_SOFTSUPP_FEATURES |
+                               EXT2_FLAG_64BITS | EXT2_FLAG_THREADS;
        char            *request = 0;
        int             exit_status = 0;
        char            *cmd_file = 0;
@@ -2425,8 +2546,8 @@ int main(int argc, char **argv)
        const char      *opt_string = "nicR:f:b:s:Vd:D";
 #else
        const char      *opt_string = "niwcR:f:b:s:Vd:Dz:";
-       char            *undo_file = NULL;
 #endif
+       char            *undo_file = NULL;
 #ifdef CONFIG_JBD_DEBUG
        char            *jbd_debug;
 #endif
@@ -2498,9 +2619,11 @@ int main(int argc, char **argv)
                        fprintf(stderr, "\tUsing %s\n",
                                error_message(EXT2_ET_BASE));
                        exit(0);
+#ifndef READ_ONLY
                case 'z':
                        undo_file = optarg;
                        break;
+#endif
                default:
                        com_err(argv[0], 0, usage, debug_prog_name);
                        return 1;
@@ -2511,39 +2634,39 @@ int main(int argc, char **argv)
                                superblock, blocksize, catastrophic,
                                data_filename, undo_file);
 
-       sci_idx = ss_create_invocation(debug_prog_name, "0.0", (char *) NULL,
-                                      &debug_cmds, &retval);
+       ss_sci_idx = ss_create_invocation(debug_prog_name, "0.0", (char *) NULL,
+                                         &debug_cmds, &retval);
        if (retval) {
-               ss_perror(sci_idx, retval, "creating invocation");
+               ss_perror(ss_sci_idx, retval, "creating invocation");
                exit(1);
        }
-       ss_get_readline(sci_idx);
+       ss_get_readline(ss_sci_idx);
 
-       (void) ss_add_request_table (sci_idx, &ss_std_requests, 1, &retval);
+       (void) ss_add_request_table(ss_sci_idx, &ss_std_requests, 1, &retval);
        if (retval) {
-               ss_perror(sci_idx, retval, "adding standard requests");
+               ss_perror(ss_sci_idx, retval, "adding standard requests");
                exit (1);
        }
        if (extra_cmds)
-               ss_add_request_table (sci_idx, extra_cmds, 1, &retval);
+               ss_add_request_table(ss_sci_idx, extra_cmds, 1, &retval);
        if (retval) {
-               ss_perror(sci_idx, retval, "adding extra requests");
+               ss_perror(ss_sci_idx, retval, "adding extra requests");
                exit (1);
        }
        if (request) {
                retval = 0;
-               retval = ss_execute_line(sci_idx, request);
+               retval = ss_execute_line(ss_sci_idx, request);
                if (retval) {
-                       ss_perror(sci_idx, retval, request);
+                       ss_perror(ss_sci_idx, retval, request);
                        exit_status++;
                }
        } else if (cmd_file) {
-               exit_status = source_file(cmd_file, sci_idx);
+               exit_status = source_file(cmd_file, ss_sci_idx);
        } else {
-               ss_listen(sci_idx);
+               ss_listen(ss_sci_idx);
        }
 
-       ss_delete_invocation(sci_idx);
+       ss_delete_invocation(ss_sci_idx);
 
        if (current_fs)
                close_filesystem();
index 4f25850..39bc024 100644 (file)
@@ -25,7 +25,7 @@
 extern ext2_filsys current_fs;
 extern quota_ctx_t current_qctx;
 extern ext2_ino_t      root, cwd;
-extern int sci_idx;
+extern int ss_sci_idx;
 extern ss_request_table debug_cmds, extent_cmds;
 
 extern void reset_getopt(void);
@@ -54,12 +54,12 @@ extern int common_block_args_process(int argc, char *argv[],
                                     blk64_t *block, blk64_t *count);
 extern int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode * inode,
                              const char *cmd);
-extern int debugfs_read_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
-                                  const char *cmd, int bufsize);
+extern int debugfs_read_inode2(ext2_ino_t ino, struct ext2_inode * inode,
+                              const char *cmd, int bufsize, int flags);
 extern int debugfs_write_inode(ext2_ino_t ino, struct ext2_inode * inode,
                               const char *cmd);
-extern int debugfs_write_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
-                                   const char *cmd, int bufsize);
+extern int debugfs_write_inode2(ext2_ino_t ino, struct ext2_inode * inode,
+                               const char *cmd, int bufsize, int flags);
 extern int debugfs_write_new_inode(ext2_ino_t ino, struct ext2_inode * inode,
                                   const char *cmd);
 extern int ext2_file_type(unsigned int mode);
@@ -67,139 +67,144 @@ extern int ext2_file_type(unsigned int mode);
 /* ss command functions */
 
 /* dump.c */
-extern void do_dump(int argc, char **argv);
-extern void do_cat(int argc, char **argv);
-extern void do_rdump(int argc, char **argv);
+extern void do_dump(int argc, char **argv, int sci_idx, void *infop);
+extern void do_cat(int argc, char **argv, int sci_idx, void *infop);
+extern void do_rdump(int argc, char **argv, int sci_idx, void *infop);
 
 /* 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);
+extern void do_extent_open(int argc, char **argv, int sci_idx, void *infop);
+extern void do_extent_close(int argc, char **argv, int sci_idx, void *infop);
+extern void do_current_node(int argc, char **argv, int sci_idx, void *infop);
+extern void do_root_node(int argc, char **argv, int sci_idx, void *infop);
+extern void do_last_leaf(int argc, char **argv, int sci_idx, void *infop);
+extern void do_first_sib(int argc, char **argv, int sci_idx, void *infop);
+extern void do_last_sib(int argc, char **argv, int sci_idx, void *infop);
+extern void do_next_sib(int argc, char **argv, int sci_idx, void *infop);
+extern void do_prev_sib(int argc, char **argv, int sci_idx, void *infop);
+extern void do_next_leaf(int argc, char **argv, int sci_idx, void *infop);
+extern void do_prev_leaf(int argc, char **argv, int sci_idx, void *infop);
+extern void do_next(int argc, char **argv, int sci_idx, void *infop);
+extern void do_prev(int argc, char **argv, int sci_idx, void *infop);
+extern void do_up(int argc, char **argv, int sci_idx, void *infop);
+extern void do_down(int argc, char **argv, int sci_idx, void *infop);
+extern void do_delete_node(int argc, char **argv, int sci_idx, void *infop);
+extern void do_replace_node(int argc, char **argv, int sci_idx, void *infop);
+extern void do_split_node(int argc, char **argv, int sci_idx, void *infop);
+extern void do_insert_node(int argc, char **argv, int sci_idx, void *infop);
+extern void do_set_bmap(int argc, char **argv, int sci_idx, void *infop);
+extern void do_print_all(int argc, char **argv, int sci_idx, void *infop);
+extern void do_fix_parents(int argc, char **argv, int sci_idx, void *infop);
+extern void do_info(int argc, char **argv, int sci_idx, void *infop);
+extern void do_goto_block(int argc, char **argv, int sci_idx, void *infop);
 
 /* htree.c */
-extern void do_htree_dump(int argc, char **argv);
-extern void do_dx_hash(int argc, char **argv);
-extern void do_dirsearch(int argc, char **argv);
+extern void do_htree_dump(int argc, char **argv, int sci_idx, void *infop);
+extern void do_dx_hash(int argc, char **argv, int sci_idx, void *infop);
+extern void do_dirsearch(int argc, char **argv, int sci_idx, void *infop);
 
 /* logdump.c */
-extern void do_logdump(int argc, char **argv);
+extern void do_logdump(int argc, char **argv, int sci_idx, void *infop);
 
 /* lsdel.c */
-extern void do_lsdel(int argc, char **argv);
+extern void do_lsdel(int argc, char **argv, int sci_idx, void *infop);
 
 /* icheck.c */
-extern void do_icheck(int argc, char **argv);
+extern void do_icheck(int argc, char **argv, int sci_idx, void *infop);
 
 /* ncheck.c */
-extern void do_ncheck(int argc, char **argv);
+extern void do_ncheck(int argc, char **argv, int sci_idx, void *infop);
 
 /* set_fields.c */
-extern void do_set_super(int argc, char **);
-extern void do_set_inode(int argc, char **);
-extern void do_set_block_group_descriptor(int argc, char **);
+extern void do_set_super(int argc, char **, int sci_idx, void *infop);
+extern void do_set_inode(int argc, char **, int sci_idx, void *infop);
+extern void do_set_block_group_descriptor(int argc, char **, int sci_idx, void *infop);
 
 /* unused.c */
-extern void do_dump_unused(int argc, char **argv);
+extern void do_dump_unused(int argc, char **argv, int sci_idx, void *infop);
 
 /* debugfs.c */
+extern ss_request_table *extra_cmds;
+extern const char *debug_prog_name;
 extern void internal_dump_inode(FILE *, const char *, ext2_ino_t,
                                struct ext2_inode *, int);
 
-extern void do_dirty_filesys(int argc, char **argv);
-extern void do_open_filesys(int argc, char **argv);
-extern void do_close_filesys(int argc, char **argv);
-extern void do_lcd(int argc, char **argv);
-extern void do_init_filesys(int argc, char **argv);
-extern void do_show_super_stats(int argc, char **argv);
-extern void do_kill_file(int argc, char **argv);
-extern void do_rm(int argc, char **argv);
-extern void do_link(int argc, char **argv);
-extern void do_undel(int argc, char **argv);
-extern void do_unlink(int argc, char **argv);
-extern void do_find_free_block(int argc, char **argv);
-extern void do_find_free_inode(int argc, char **argv);
-extern void do_stat(int argc, char **argv);
-extern void do_dump_extents(int argc, char **argv);
-extern void do_blocks(int argc, char *argv[]);
-
-extern void do_chroot(int argc, char **argv);
-extern void do_clri(int argc, char **argv);
-extern void do_freei(int argc, char **argv);
-extern void do_seti(int argc, char **argv);
-extern void do_testi(int argc, char **argv);
-extern void do_freeb(int argc, char **argv);
-extern void do_setb(int argc, char **argv);
-extern void do_testb(int argc, char **argv);
-extern void do_modify_inode(int argc, char **argv);
-extern void do_list_dir(int argc, char **argv);
-extern void do_change_working_dir(int argc, char **argv);
-extern void do_print_working_directory(int argc, char **argv);
-extern void do_write(int argc, char **argv);
-extern void do_mknod(int argc, char **argv);
-extern void do_mkdir(int argc, char **argv);
-extern void do_rmdir(int argc, char **argv);
-extern void do_show_debugfs_params(int argc, char **argv);
-extern void do_expand_dir(int argc, char **argv);
-extern void do_features(int argc, char **argv);
-extern void do_bmap(int argc, char **argv);
-extern void do_imap(int argc, char **argv);
-extern void do_idump(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_fallocate(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[]);
+extern void do_dirty_filesys(int argc, char **argv, int sci_idx, void *infop);
+extern void do_open_filesys(int argc, char **argv, int sci_idx, void *infop);
+extern void do_close_filesys(int argc, char **argv, int sci_idx, void *infop);
+extern void do_lcd(int argc, char **argv, int sci_idx, void *infop);
+extern void do_init_filesys(int argc, char **argv, int sci_idx, void *infop);
+extern void do_show_super_stats(int argc, char **argv, int sci_idx, void *infop);
+extern void do_kill_file(int argc, char **argv, int sci_idx, void *infop);
+extern void do_rm(int argc, char **argv, int sci_idx, void *infop);
+extern void do_link(int argc, char **argv, int sci_idx, void *infop);
+extern void do_undel(int argc, char **argv, int sci_idx, void *infop);
+extern void do_unlink(int argc, char **argv, int sci_idx, void *infop);
+extern void do_copy_inode(int argc, char *argv[], int sci_idx, void *infop);
+extern void do_find_free_block(int argc, char **argv, int sci_idx, void *infop);
+extern void do_find_free_inode(int argc, char **argv, int sci_idx, void *infop);
+extern void do_stat(int argc, char **argv, int sci_idx, void *infop);
+extern void do_dump_extents(int argc, char **argv, int sci_idx, void *infop);
+extern void do_blocks(int argc, char *argv[], int sci_idx, void *infop);
+
+extern void do_chroot(int argc, char **argv, int sci_idx, void *infop);
+extern void do_clri(int argc, char **argv, int sci_idx, void *infop);
+extern void do_freei(int argc, char **argv, int sci_idx, void *infop);
+extern void do_seti(int argc, char **argv, int sci_idx, void *infop);
+extern void do_testi(int argc, char **argv, int sci_idx, void *infop);
+extern void do_freeb(int argc, char **argv, int sci_idx, void *infop);
+extern void do_setb(int argc, char **argv, int sci_idx, void *infop);
+extern void do_testb(int argc, char **argv, int sci_idx, void *infop);
+extern void do_modify_inode(int argc, char **argv, int sci_idx, void *infop);
+extern void do_list_dir(int argc, char **argv, int sci_idx, void *infop);
+extern void do_change_working_dir(int argc, char **argv, int sci_idx, void *infop);
+extern void do_print_working_directory(int argc, char **argv, int sci_idx, void *infop);
+extern void do_write(int argc, char **argv, int sci_idx, void *infop);
+extern void do_mknod(int argc, char **argv, int sci_idx, void *infop);
+extern void do_mkdir(int argc, char **argv, int sci_idx, void *infop);
+extern void do_rmdir(int argc, char **argv, int sci_idx, void *infop);
+extern void do_show_debugfs_params(int argc, char **argv, int sci_idx, void *infop);
+extern void do_expand_dir(int argc, char **argv, int sci_idx, void *infop);
+extern void do_features(int argc, char **argv, int sci_idx, void *infop);
+extern void do_bmap(int argc, char **argv, int sci_idx, void *infop);
+extern void do_imap(int argc, char **argv, int sci_idx, void *infop);
+extern void do_idump(int argc, char *argv[], int sci_idx, void *infop);
+extern void do_set_current_time(int argc, char **argv, int sci_idx, void *infop);
+extern void do_supported_features(int argc, char **argv, int sci_idx, void *infop);
+extern void do_punch(int argc, char **argv, int sci_idx, void *infop);
+extern void do_fallocate(int argc, char **argv, int sci_idx, void *infop);
+extern void do_symlink(int argc, char **argv, int sci_idx, void *infop);
+
+extern void do_dump_mmp(int argc, char **argv, int sci_idx, void *infop);
+extern void do_set_mmp_value(int argc, char **argv, int sci_idx, void *infop);
+
+extern void do_freefrag(int argc, char **argv, int sci_idx, void *infop);
+extern void do_filefrag(int argc, char *argv[], int sci_idx, void *infop);
 
 /* do_journal.c */
 
-extern void do_journal_write(int argc, char *argv[]);
-extern void do_journal_open(int argc, char *argv[]);
-extern void do_journal_close(int argc, char *argv[]);
-extern void do_journal_run(int argc, char *argv[]);
+extern void do_journal_write(int argc, char *argv[], int sci_idx, void *infop);
+extern void do_journal_open(int argc, char *argv[], int sci_idx, void *infop);
+extern void do_journal_close(int argc, char *argv[], int sci_idx, void *infop);
+extern void do_journal_run(int argc, char *argv[], int sci_idx, void *infop);
 
 /* quota.c */
-extern void do_list_quota(int argc, char *argv[]);
-extern void do_get_quota(int argc, char *argv[]);
+extern void do_list_quota(int argc, char *argv[], int sci_idx, void *infop);
+extern void do_get_quota(int argc, char *argv[], int sci_idx, void *infop);
 
 /* util.c */
 extern __s64 string_to_time(const char *arg);
-errcode_t read_list(char *str, blk64_t **list, size_t *len);
+extern errcode_t read_list(char *str, blk64_t **list, size_t *len);
+extern void do_byte_hexdump(FILE *fp, unsigned char *buf, size_t bufsize);
 
 /* xattrs.c */
 void dump_inode_attributes(FILE *out, ext2_ino_t ino);
-void do_get_xattr(int argc, char **argv);
-void do_set_xattr(int argc, char **argv);
-void do_rm_xattr(int argc, char **argv);
-void do_list_xattr(int argc, char **argv);
+void do_get_xattr(int argc, char **argv, int sci_idx, void *infop);
+void do_set_xattr(int argc, char **argv, int sci_idx, void *infop);
+void do_rm_xattr(int argc, char **argv, int sci_idx, void *infop);
+void do_list_xattr(int argc, char **argv, int sci_idx, void *infop);
+void raw_inode_xattr_dump(FILE *f, unsigned char *buf, unsigned int len);
+void block_xattr_dump(FILE *f, unsigned char *buf, unsigned int len);
 
 /* zap.c */
-extern void do_zap_block(int argc, char **argv);
-extern void do_block_dump(int argc, char **argv);
-extern void do_byte_hexdump(FILE *fp, unsigned char *buf, size_t bufsize);
+extern void do_zap_block(int argc, char **argv, int sci_idx, void *infop);
+extern void do_block_dump(int argc, char **argv, int sci_idx, void *infop);
index 40c473c..c25e894 100644 (file)
@@ -59,7 +59,7 @@ static journal_t *current_journal = NULL;
 static void journal_dump_trans(journal_transaction_t *trans EXT2FS_ATTR((unused)),
                               const char *tag EXT2FS_ATTR((unused)))
 {
-       dbg_printf("TRANS %p(%s): tid=%d start=%llu block=%llu end=%llu "
+       dbg_printf("TRANS %p(%s): tid=%u start=%llu block=%llu end=%llu "
                   "flags=0x%x\n", trans, tag, trans->tid, trans->start,
                   trans->block, trans->end, trans->flags);
 }
@@ -85,10 +85,10 @@ static errcode_t journal_commit_trans(journal_transaction_t *trans)
 
        /* write the descriptor block header */
        commit = (struct commit_header *)bh->b_data;
-       commit->h_magic = ext2fs_cpu_to_be32(JFS_MAGIC_NUMBER);
-       commit->h_blocktype = ext2fs_cpu_to_be32(JFS_COMMIT_BLOCK);
+       commit->h_magic = ext2fs_cpu_to_be32(JBD2_MAGIC_NUMBER);
+       commit->h_blocktype = ext2fs_cpu_to_be32(JBD2_COMMIT_BLOCK);
        commit->h_sequence = ext2fs_cpu_to_be32(trans->tid);
-       if (jfs_has_feature_checksum(trans->journal)) {
+       if (jbd2_has_feature_checksum(trans->journal)) {
                __u32 csum_v1 = ~0;
                blk64_t cblk;
 
@@ -100,12 +100,12 @@ static errcode_t journal_commit_trans(journal_transaction_t *trans)
                }
 
                for (cblk = trans->start; cblk < trans->block; cblk++) {
-                       err = journal_bmap(trans->journal, cblk,
-                                          &cbh->b_blocknr);
+                       err = jbd2_journal_bmap(trans->journal, cblk,
+                                               &cbh->b_blocknr);
                        if (err)
                                goto error;
                        mark_buffer_uptodate(cbh, 0);
-                       ll_rw_block(READ, 1, &cbh);
+                       ll_rw_block(REQ_OP_READ, 0, 1, &cbh);
                        err = cbh->b_err;
                        if (err)
                                goto error;
@@ -114,8 +114,8 @@ static errcode_t journal_commit_trans(journal_transaction_t *trans)
                                        cbh->b_size);
                }
 
-               commit->h_chksum_type = JFS_CRC32_CHKSUM;
-               commit->h_chksum_size = JFS_CRC32_CHKSUM_SIZE;
+               commit->h_chksum_type = JBD2_CRC32_CHKSUM;
+               commit->h_chksum_size = JBD2_CRC32_CHKSUM_SIZE;
                commit->h_chksum[0] = ext2fs_cpu_to_be32(csum_v1);
        } else {
                commit->h_chksum_type = 0;
@@ -133,14 +133,14 @@ static errcode_t journal_commit_trans(journal_transaction_t *trans)
 
        /* Write block */
        jbd2_commit_block_csum_set(trans->journal, bh);
-       err = journal_bmap(trans->journal, trans->block, &bh->b_blocknr);
+       err = jbd2_journal_bmap(trans->journal, trans->block, &bh->b_blocknr);
        if (err)
                goto error;
 
        dbg_printf("Writing commit block at %llu:%llu\n", trans->block,
                   bh->b_blocknr);
        mark_buffer_dirty(bh);
-       ll_rw_block(WRITE, 1, &bh);
+       ll_rw_block(REQ_OP_WRITE, 0, 1, &bh);
        err = bh->b_err;
        if (err)
                goto error;
@@ -161,7 +161,7 @@ static errcode_t journal_add_revoke_to_trans(journal_transaction_t *trans,
                                             blk64_t *revoke_list,
                                             size_t revoke_len)
 {
-       journal_revoke_header_t *jrb;
+       jbd2_journal_revoke_header_t *jrb;
        void *buf;
        size_t i, offset;
        blk64_t curr_blk;
@@ -180,8 +180,8 @@ static errcode_t journal_add_revoke_to_trans(journal_transaction_t *trans,
                return 0;
 
        /* Do we need to leave space at the end for a checksum? */
-       if (journal_has_csum_v2or3(trans->journal))
-               csum_size = sizeof(struct journal_revoke_tail);
+       if (jbd2_journal_has_csum_v2or3(trans->journal))
+               csum_size = sizeof(struct jbd2_journal_block_tail);
 
        curr_blk = trans->block;
 
@@ -190,12 +190,12 @@ static errcode_t journal_add_revoke_to_trans(journal_transaction_t *trans,
        if (bh == NULL)
                return ENOMEM;
        jrb = buf = bh->b_data;
-       jrb->r_header.h_magic = ext2fs_cpu_to_be32(JFS_MAGIC_NUMBER);
-       jrb->r_header.h_blocktype = ext2fs_cpu_to_be32(JFS_REVOKE_BLOCK);
+       jrb->r_header.h_magic = ext2fs_cpu_to_be32(JBD2_MAGIC_NUMBER);
+       jrb->r_header.h_blocktype = ext2fs_cpu_to_be32(JBD2_REVOKE_BLOCK);
        jrb->r_header.h_sequence = ext2fs_cpu_to_be32(trans->tid);
        offset = sizeof(*jrb);
 
-       if (jfs_has_feature_64bit(trans->journal))
+       if (jbd2_has_feature_64bit(trans->journal))
                sz = 8;
        else
                sz = 4;
@@ -206,14 +206,14 @@ static errcode_t journal_add_revoke_to_trans(journal_transaction_t *trans,
                        jrb->r_count = ext2fs_cpu_to_be32(offset);
                        jbd2_revoke_csum_set(trans->journal, bh);
 
-                       err = journal_bmap(trans->journal, curr_blk,
-                                          &bh->b_blocknr);
+                       err = jbd2_journal_bmap(trans->journal, curr_blk,
+                                               &bh->b_blocknr);
                        if (err)
                                goto error;
                        dbg_printf("Writing revoke block at %llu:%llu\n",
                                   curr_blk, bh->b_blocknr);
                        mark_buffer_dirty(bh);
-                       ll_rw_block(WRITE, 1, &bh);
+                       ll_rw_block(REQ_OP_WRITE, 0, 1, &bh);
                        err = bh->b_err;
                        if (err)
                                goto error;
@@ -228,7 +228,7 @@ static errcode_t journal_add_revoke_to_trans(journal_transaction_t *trans,
                        goto error;
                }
 
-               if (jfs_has_feature_64bit(trans->journal))
+               if (jbd2_has_feature_64bit(trans->journal))
                        *((__u64 *)(&((char *)buf)[offset])) =
                                ext2fs_cpu_to_be64(revoke_list[i]);
                else
@@ -241,13 +241,14 @@ static errcode_t journal_add_revoke_to_trans(journal_transaction_t *trans,
                jrb->r_count = ext2fs_cpu_to_be32(offset);
                jbd2_revoke_csum_set(trans->journal, bh);
 
-               err = journal_bmap(trans->journal, curr_blk, &bh->b_blocknr);
+               err = jbd2_journal_bmap(trans->journal, curr_blk,
+                                       &bh->b_blocknr);
                if (err)
                        goto error;
                dbg_printf("Writing revoke block at %llu:%llu\n",
                           curr_blk, bh->b_blocknr);
                mark_buffer_dirty(bh);
-               ll_rw_block(WRITE, 1, &bh);
+               ll_rw_block(REQ_OP_WRITE, 0, 1, &bh);
                err = bh->b_err;
                if (err)
                        goto error;
@@ -284,8 +285,8 @@ static errcode_t journal_add_blocks_to_trans(journal_transaction_t *trans,
                return 0;
 
        /* Do we need to leave space at the end for a checksum? */
-       if (journal_has_csum_v2or3(trans->journal))
-               csum_size = sizeof(struct journal_block_tail);
+       if (jbd2_journal_has_csum_v2or3(trans->journal))
+               csum_size = sizeof(struct jbd2_journal_block_tail);
 
        curr_blk = jdb_blk = trans->block;
 
@@ -303,8 +304,8 @@ static errcode_t journal_add_blocks_to_trans(journal_transaction_t *trans,
                goto error;
        }
        jdb = jdb_buf = bh->b_data;
-       jdb->h_magic = ext2fs_cpu_to_be32(JFS_MAGIC_NUMBER);
-       jdb->h_blocktype = ext2fs_cpu_to_be32(JFS_DESCRIPTOR_BLOCK);
+       jdb->h_magic = ext2fs_cpu_to_be32(JBD2_MAGIC_NUMBER);
+       jdb->h_blocktype = ext2fs_cpu_to_be32(JBD2_DESCRIPTOR_BLOCK);
        jdb->h_sequence = ext2fs_cpu_to_be32(trans->tid);
        jdbt = (journal_block_tag_t *)(jdb + 1);
 
@@ -322,14 +323,14 @@ static errcode_t journal_add_blocks_to_trans(journal_transaction_t *trans,
                if ((char *)jdbt + tag_bytes >
                    (char *)jdb_buf + trans->journal->j_blocksize - csum_size) {
                        jbd2_descr_block_csum_set(trans->journal, bh);
-                       err = journal_bmap(trans->journal, jdb_blk,
+                       err = jbd2_journal_bmap(trans->journal, jdb_blk,
                                           &bh->b_blocknr);
                        if (err)
                                goto error;
                        dbg_printf("Writing descriptor block at %llu:%llu\n",
                                   jdb_blk, bh->b_blocknr);
                        mark_buffer_dirty(bh);
-                       ll_rw_block(WRITE, 1, &bh);
+                       ll_rw_block(REQ_OP_WRITE, 0, 1, &bh);
                        err = bh->b_err;
                        if (err)
                                goto error;
@@ -349,7 +350,7 @@ static errcode_t journal_add_blocks_to_trans(journal_transaction_t *trans,
                jdbt->t_blocknr = ext2fs_cpu_to_be32(block_list[i] & 0xFFFFFFFF);
                jdbt->t_flags = 0;
                if (jdbt != (journal_block_tag_t *)(jdb + 1))
-                       jdbt->t_flags |= ext2fs_cpu_to_be16(JFS_FLAG_SAME_UUID);
+                       jdbt->t_flags |= ext2fs_cpu_to_be16(JBD2_FLAG_SAME_UUID);
                else {
                        memcpy(jdbt + tag_bytes,
                               trans->journal->j_superblock->s_uuid,
@@ -357,26 +358,26 @@ static errcode_t journal_add_blocks_to_trans(journal_transaction_t *trans,
                        tag_bytes += 16;
                }
                if (i == block_len - 1)
-                       jdbt->t_flags |= ext2fs_cpu_to_be16(JFS_FLAG_LAST_TAG);
-               if (*((__u32 *)buf) == ext2fs_cpu_to_be32(JFS_MAGIC_NUMBER)) {
+                       jdbt->t_flags |= ext2fs_cpu_to_be16(JBD2_FLAG_LAST_TAG);
+               if (*((__u32 *)buf) == ext2fs_cpu_to_be32(JBD2_MAGIC_NUMBER)) {
                        *((__u32 *)buf) = 0;
-                       jdbt->t_flags |= ext2fs_cpu_to_be16(JFS_FLAG_ESCAPE);
+                       jdbt->t_flags |= ext2fs_cpu_to_be16(JBD2_FLAG_ESCAPE);
                }
-               if (jfs_has_feature_64bit(trans->journal))
+               if (jbd2_has_feature_64bit(trans->journal))
                        jdbt->t_blocknr_high = ext2fs_cpu_to_be32(block_list[i] >> 32);
                jbd2_block_tag_csum_set(trans->journal, jdbt, data_bh,
                                        trans->tid);
 
                /* Write the data block */
-               err = journal_bmap(trans->journal, curr_blk,
-                                  &data_bh->b_blocknr);
+               err = jbd2_journal_bmap(trans->journal, curr_blk,
+                                       &data_bh->b_blocknr);
                if (err)
                        goto error;
                dbg_printf("Writing data block %llu at %llu:%llu tag %d\n",
                           block_list[i], curr_blk, data_bh->b_blocknr,
                           tag_bytes);
                mark_buffer_dirty(data_bh);
-               ll_rw_block(WRITE, 1, &data_bh);
+               ll_rw_block(REQ_OP_WRITE, 0, 1, &data_bh);
                err = data_bh->b_err;
                if (err)
                        goto error;
@@ -388,13 +389,14 @@ static errcode_t journal_add_blocks_to_trans(journal_transaction_t *trans,
        /* Write out the last descriptor block */
        if (jdbt != (journal_block_tag_t *)(jdb + 1)) {
                jbd2_descr_block_csum_set(trans->journal, bh);
-               err = journal_bmap(trans->journal, jdb_blk, &bh->b_blocknr);
+               err = jbd2_journal_bmap(trans->journal, jdb_blk,
+                                       &bh->b_blocknr);
                if (err)
                        goto error;
                dbg_printf("Writing descriptor block at %llu:%llu\n",
                           jdb_blk, bh->b_blocknr);
                mark_buffer_dirty(bh);
-               ll_rw_block(WRITE, 1, &bh);
+               ll_rw_block(REQ_OP_WRITE, 0, 1, &bh);
                err = bh->b_err;
                if (err)
                        goto error;
@@ -416,15 +418,15 @@ static blk64_t journal_guess_blocks(journal_t *journal, blk64_t data_blocks,
 
        /* Estimate # of revoke blocks */
        bs = journal->j_blocksize;
-       if (journal_has_csum_v2or3(journal))
-               bs -= sizeof(struct journal_revoke_tail);
-       sz = jfs_has_feature_64bit(journal) ? sizeof(__u64) : sizeof(__u32);
+       if (jbd2_journal_has_csum_v2or3(journal))
+               bs -= sizeof(struct jbd2_journal_block_tail);
+       sz = jbd2_has_feature_64bit(journal) ? sizeof(__u64) : sizeof(__u32);
        ret += revoke_blocks * sz / bs;
 
        /* Estimate # of data blocks */
        bs = journal->j_blocksize - 16;
-       if (journal_has_csum_v2or3(journal))
-               bs -= sizeof(struct journal_block_tail);
+       if (jbd2_journal_has_csum_v2or3(journal))
+               bs -= sizeof(struct jbd2_journal_block_tail);
        sz = journal_tag_bytes(journal);
        ret += data_blocks * sz / bs;
 
@@ -504,7 +506,7 @@ static errcode_t journal_write(journal_t *journal,
        errcode_t err;
 
        if (revoke_len > 0) {
-               jfs_set_feature_revoke(journal);
+               jbd2_set_feature_revoke(journal);
                mark_buffer_dirty(journal->j_sb_buffer);
        }
 
@@ -534,7 +536,8 @@ error:
        return err;
 }
 
-void do_journal_write(int argc, char *argv[])
+void do_journal_write(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                     void *infop EXT2FS_ATTR((unused)))
 {
        blk64_t *blist = NULL, *rlist = NULL;
        size_t bn = 0, rn = 0;
@@ -623,8 +626,8 @@ static int count_tags(journal_t *journal, char *buf)
        int                     nr = 0, size = journal->j_blocksize;
        int                     tag_bytes = journal_tag_bytes(journal);
 
-       if (journal_has_csum_v2or3(journal))
-               size -= sizeof(struct journal_block_tail);
+       if (jbd2_journal_has_csum_v2or3(journal))
+               size -= sizeof(struct jbd2_journal_block_tail);
 
        tagp = buf + sizeof(journal_header_t);
 
@@ -633,10 +636,10 @@ static int count_tags(journal_t *journal, char *buf)
 
                nr++;
                tagp += tag_bytes;
-               if (!(tag->t_flags & ext2fs_cpu_to_be16(JFS_FLAG_SAME_UUID)))
+               if (!(tag->t_flags & ext2fs_cpu_to_be16(JBD2_FLAG_SAME_UUID)))
                        tagp += 16;
 
-               if (tag->t_flags & ext2fs_cpu_to_be16(JFS_FLAG_LAST_TAG))
+               if (tag->t_flags & ext2fs_cpu_to_be16(JBD2_FLAG_LAST_TAG))
                        break;
        }
 
@@ -686,11 +689,12 @@ static errcode_t journal_find_head(journal_t *journal)
                /* Skip over each chunk of the transaction looking
                 * either the next descriptor block or the final commit
                 * record. */
-               err = journal_bmap(journal, next_log_block, &bh->b_blocknr);
+               err = jbd2_journal_bmap(journal, next_log_block,
+                                       &bh->b_blocknr);
                if (err)
                        goto err;
                mark_buffer_uptodate(bh, 0);
-               ll_rw_block(READ, 1, &bh);
+               ll_rw_block(REQ_OP_READ, 0, 1, &bh);
                err = bh->b_err;
                if (err)
                        goto err;
@@ -706,7 +710,7 @@ static errcode_t journal_find_head(journal_t *journal)
 
                tmp = (journal_header_t *)bh->b_data;
 
-               if (tmp->h_magic != ext2fs_cpu_to_be32(JFS_MAGIC_NUMBER)) {
+               if (tmp->h_magic != ext2fs_cpu_to_be32(JBD2_MAGIC_NUMBER)) {
                        dbg_printf("JBD2: wrong magic 0x%x\n", tmp->h_magic);
                        goto err;
                }
@@ -727,17 +731,17 @@ static errcode_t journal_find_head(journal_t *journal)
                 * to do with it?  That depends on the pass... */
 
                switch (blocktype) {
-               case JFS_DESCRIPTOR_BLOCK:
+               case JBD2_DESCRIPTOR_BLOCK:
                        next_log_block += count_tags(journal, bh->b_data);
                        wrap(journal, next_log_block);
                        continue;
 
-               case JFS_COMMIT_BLOCK:
+               case JBD2_COMMIT_BLOCK:
                        head_block = next_log_block;
                        next_commit_ID++;
                        continue;
 
-               case JFS_REVOKE_BLOCK:
+               case JBD2_REVOKE_BLOCK:
                        continue;
 
                default:
@@ -779,14 +783,14 @@ static void update_journal_csum(journal_t *journal, int ver)
                printf("Setting csum v%d\n", ver);
                switch (ver) {
                case 2:
-                       jfs_clear_feature_csum3(journal);
-                       jfs_set_feature_csum2(journal);
-                       jfs_clear_feature_checksum(journal);
+                       jbd2_clear_feature_csum3(journal);
+                       jbd2_set_feature_csum2(journal);
+                       jbd2_clear_feature_checksum(journal);
                        break;
                case 3:
-                       jfs_set_feature_csum3(journal);
-                       jfs_clear_feature_csum2(journal);
-                       jfs_clear_feature_checksum(journal);
+                       jbd2_set_feature_csum3(journal);
+                       jbd2_clear_feature_csum2(journal);
+                       jbd2_clear_feature_checksum(journal);
                        break;
                default:
                        printf("Unknown checksum v%d\n", ver);
@@ -796,9 +800,9 @@ static void update_journal_csum(journal_t *journal, int ver)
                journal->j_csum_seed = jbd2_chksum(journal, ~0, jsb->s_uuid,
                                                   sizeof(jsb->s_uuid));
        } else {
-               jfs_clear_feature_csum3(journal);
-               jfs_clear_feature_csum2(journal);
-               jfs_set_feature_checksum(journal);
+               jbd2_clear_feature_csum3(journal);
+               jbd2_clear_feature_csum2(journal);
+               jbd2_set_feature_checksum(journal);
        }
 }
 
@@ -820,7 +824,7 @@ static void update_uuid(journal_t *journal)
        if (!ext2fs_has_feature_64bit(fs->super))
                return;
 
-       if (jfs_has_feature_64bit(journal) &&
+       if (jbd2_has_feature_64bit(journal) &&
            ext2fs_has_feature_64bit(fs->super))
                return;
 
@@ -842,7 +846,7 @@ static void update_64bit_flag(journal_t *journal)
        if (!ext2fs_has_feature_64bit(journal->j_fs_dev->k_fs->super))
                return;
 
-       if (jfs_has_feature_64bit(journal) &&
+       if (jbd2_has_feature_64bit(journal) &&
            ext2fs_has_feature_64bit(journal->j_fs_dev->k_fs->super))
                return;
 
@@ -853,10 +857,11 @@ static void update_64bit_flag(journal_t *journal)
                return;
        }
 
-       jfs_set_feature_64bit(journal);
+       jbd2_set_feature_64bit(journal);
 }
 
-void do_journal_open(int argc, char *argv[])
+void do_journal_open(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                    void *infop EXT2FS_ATTR((unused)))
 {
        int opt, enable_csum = 0, csum_ver = 3;
        journal_t *journal;
@@ -899,7 +904,7 @@ void do_journal_open(int argc, char *argv[])
                        printf("%s: [-c] [-v ver] [-f ext_jnl]\n", argv[0]);
                        printf("-c: Enable journal checksumming.\n");
                        printf("-v: Use this version checksum format.\n");
-                       printf("-j: Load this external journal.\n");
+                       printf("-f: Load this external journal.\n");
                }
        }
 
@@ -910,7 +915,7 @@ void do_journal_open(int argc, char *argv[])
        }
        journal = current_journal;
 
-       dbg_printf("JOURNAL: seq=%d tailseq=%d start=%lu first=%lu "
+       dbg_printf("JOURNAL: seq=%u tailseq=%u start=%lu first=%lu "
                   "maxlen=%lu\n", journal->j_tail_sequence,
                   journal->j_transaction_sequence, journal->j_tail,
                   journal->j_first, journal->j_last);
@@ -926,7 +931,9 @@ void do_journal_open(int argc, char *argv[])
 }
 
 void do_journal_close(int argc EXT2FS_ATTR((unused)),
-                     char *argv[] EXT2FS_ATTR((unused)))
+                     char *argv[] EXT2FS_ATTR((unused)),
+                     int sci_idx EXT2FS_ATTR((unused)),
+                     void *infop EXT2FS_ATTR((unused)))
 {
        if (current_journal == NULL) {
                printf("Journal not open.\n");
@@ -936,7 +943,9 @@ void do_journal_close(int argc EXT2FS_ATTR((unused)),
        ext2fs_close_journal(current_fs, &current_journal);
 }
 
-void do_journal_run(int argc EXT2FS_ATTR((unused)), char *argv[])
+void do_journal_run(int argc EXT2FS_ATTR((unused)), char *argv[],
+                   int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        errcode_t err;
 
index 4d38651..fdd6619 100644 (file)
@@ -144,7 +144,8 @@ static void dump_file(const char *cmdname, ext2_ino_t ino, int fd,
        return;
 }
 
-void do_dump(int argc, char **argv)
+void do_dump(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      inode;
        int             fd;
@@ -208,9 +209,7 @@ static void rdump_symlink(ext2_ino_t ino, struct ext2_inode *inode,
                goto errout;
        }
 
-       /* Apparently, this is the right way to detect and handle fast
-        * symlinks; see do_stat() in debugfs.c. */
-       if (ext2fs_inode_data_blocks2(current_fs, inode) == 0)
+       if (ext2fs_is_fast_symlink(inode))
                strcpy(buf, (char *) inode->i_block);
        else {
                unsigned bytes = inode->i_size;
@@ -324,7 +323,8 @@ static int rdump_dirent(struct ext2_dir_entry *dirent,
        return 0;
 }
 
-void do_rdump(int argc, char **argv)
+void do_rdump(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        struct stat st;
        char *dest_dir;
@@ -368,7 +368,8 @@ void do_rdump(int argc, char **argv)
        }
 }
 
-void do_cat(int argc, char **argv)
+void do_cat(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+           void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      inode;
 
index c7a92a7..6706629 100644 (file)
@@ -64,7 +64,8 @@ static int common_extent_args_process(int argc, char *argv[], int min_argc,
 
 static char *orig_prompt, *extent_prompt;
 
-void do_extent_open(int argc, char *argv[])
+void do_extent_open(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      inode;
        int             ret;
@@ -76,7 +77,7 @@ void do_extent_open(int argc, char *argv[])
 
        if (argc == 1) {
                if (current_ino)
-                       printf("Current inode is %d\n", current_ino);
+                       printf("Current inode is %u\n", current_ino);
                else
                        printf("No current inode\n");
                return;
@@ -106,14 +107,15 @@ void do_extent_open(int argc, char *argv[])
        cp = strchr(extent_prompt, ':');
        if (cp)
                *cp = 0;
-       sprintf(extent_prompt + strlen(extent_prompt), " (extent ino %d): ",
+       sprintf(extent_prompt + strlen(extent_prompt), " (extent ino %u): ",
                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[])
+void do_extent_close(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                    void *infop EXT2FS_ATTR((unused)))
 {
        int ret;
 
@@ -158,72 +160,86 @@ static void generic_goto_node(const char *my_name, int argc,
        dbg_print_extent(0, &extent);
 }
 
-void do_current_node(int argc, char *argv[])
+void do_current_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                    void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("current_node", argc, argv, EXT2_EXTENT_CURRENT);
 }
 
-void do_root_node(int argc, char *argv[])
+void do_root_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("root_node", argc, argv, EXT2_EXTENT_ROOT);
 }
 
-void do_last_leaf(int argc, char *argv[])
+void do_last_leaf(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("last_leaf", argc, argv, EXT2_EXTENT_LAST_LEAF);
 }
 
-void do_first_sib(int argc, char *argv[])
+void do_first_sib(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("first_sib", argc, argv, EXT2_EXTENT_FIRST_SIB);
 }
 
-void do_last_sib(int argc, char *argv[])
+void do_last_sib(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("next_sib", argc, argv, EXT2_EXTENT_LAST_SIB);
 }
 
-void do_next_sib(int argc, char *argv[])
+void do_next_sib(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("next_sib", argc, argv, EXT2_EXTENT_NEXT_SIB);
 }
 
-void do_prev_sib(int argc, char *argv[])
+void do_prev_sib(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("prev_sib", argc, argv, EXT2_EXTENT_PREV_SIB);
 }
 
-void do_next_leaf(int argc, char *argv[])
+void do_next_leaf(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("next_leaf", argc, argv, EXT2_EXTENT_NEXT_LEAF);
 }
 
-void do_prev_leaf(int argc, char *argv[])
+void do_prev_leaf(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("prev_leaf", argc, argv, EXT2_EXTENT_PREV_LEAF);
 }
 
-void do_next(int argc, char *argv[])
+void do_next(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("next", argc, argv, EXT2_EXTENT_NEXT);
 }
 
-void do_prev(int argc, char *argv[])
+void do_prev(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("prev", argc, argv, EXT2_EXTENT_PREV);
 }
 
-void do_up(int argc, char *argv[])
+void do_up(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+          void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("up", argc, argv, EXT2_EXTENT_UP);
 }
 
-void do_down(int argc, char *argv[])
+void do_down(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        generic_goto_node("down", argc, argv, EXT2_EXTENT_DOWN);
 }
 
-void do_delete_node(int argc, char *argv[])
+void do_delete_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        struct ext2fs_extent extent;
        errcode_t       retval;
@@ -245,7 +261,8 @@ void do_delete_node(int argc, char *argv[])
        dbg_print_extent(0, &extent);
 }
 
-void do_replace_node(int argc, char *argv[])
+void do_replace_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                    void *infop EXT2FS_ATTR((unused)))
 {
        const char      *usage = "[--uninit] <lblk> <len> <pblk>";
        errcode_t       retval;
@@ -289,7 +306,8 @@ void do_replace_node(int argc, char *argv[])
        generic_goto_node(NULL, argc, argv, EXT2_EXTENT_CURRENT);
 }
 
-void do_split_node(int argc, char *argv[])
+void do_split_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                  void *infop EXT2FS_ATTR((unused)))
 {
        errcode_t       retval;
 
@@ -305,7 +323,8 @@ void do_split_node(int argc, char *argv[])
        generic_goto_node(NULL, argc, argv, EXT2_EXTENT_CURRENT);
 }
 
-void do_insert_node(int argc, char *argv[])
+void do_insert_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        const char      *usage = "[--after] [--uninit] <lblk> <len> <pblk>";
        errcode_t       retval;
@@ -363,7 +382,8 @@ void do_insert_node(int argc, char *argv[])
        generic_goto_node(NULL, argc, argv, EXT2_EXTENT_CURRENT);
 }
 
-void do_set_bmap(int argc, char **argv)
+void do_set_bmap(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 {
        const char      *usage = "[--uninit] <lblk> <pblk>";
        struct ext2fs_extent extent;
@@ -411,7 +431,8 @@ void do_set_bmap(int argc, char **argv)
        dbg_print_extent(0, &extent);
 }
 
-void do_print_all(int argc, char **argv)
+void do_print_all(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        const char      *usage = "[--leaf-only|--reverse|--reverse-leaf]";
        struct ext2fs_extent    extent;
@@ -462,7 +483,8 @@ void do_print_all(int argc, char **argv)
        }
 }
 
-void do_fix_parents(int argc, char **argv)
+void do_fix_parents(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        errcode_t               retval;
 
@@ -477,7 +499,8 @@ void do_fix_parents(int argc, char **argv)
        }
 }
 
-void do_info(int argc, char **argv)
+void do_info(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        struct ext2fs_extent    extent;
        struct ext2_extent_info info;
@@ -510,7 +533,8 @@ void do_info(int argc, char **argv)
               info.max_uninit_len);
 }
 
-void do_goto_block(int argc, char **argv)
+void do_goto_block(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                  void *infop EXT2FS_ATTR((unused)))
 {
        errcode_t               retval;
        blk64_t                 blk;
index 128598b..961b696 100644 (file)
@@ -260,7 +260,8 @@ static void dir_iterate(ext2_ino_t ino, struct filefrag_struct *fs)
        }
 }
 
-void do_filefrag(int argc, char *argv[])
+void do_filefrag(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 {
        struct filefrag_struct fs;
        struct ext2_inode inode;
index 54e55e2..23a9467 100644 (file)
@@ -44,6 +44,7 @@ static void htree_dump_leaf_node(ext2_filsys fs, ext2_ino_t ino,
        ext2_dirhash_t  hash, minor_hash;
        unsigned int    rec_len;
        int             hash_alg;
+       int             hash_flags = inode->i_flags & EXT4_CASEFOLD_FL;
        int             csum_size = 0;
 
        if (ext2fs_has_feature_metadata_csum(fs->super))
@@ -89,9 +90,10 @@ static void htree_dump_leaf_node(ext2_filsys fs, ext2_ino_t ino,
                }
                strncpy(name, dirent->name, thislen);
                name[thislen] = '\0';
-               errcode = ext2fs_dirhash(hash_alg, name,
-                                        thislen, fs->super->s_hash_seed,
-                                        &hash, &minor_hash);
+               errcode = ext2fs_dirhash2(hash_alg, name, thislen,
+                                         fs->encoding, hash_flags,
+                                         fs->super->s_hash_seed,
+                                         &hash, &minor_hash);
                if (errcode)
                        com_err("htree_dump_leaf_node", errcode,
                                "while calculating hash");
@@ -134,7 +136,7 @@ static void htree_dump_int_block(ext2_filsys fs, ext2_ino_t ino,
 static void htree_dump_int_node(ext2_filsys fs, ext2_ino_t ino,
                                struct ext2_inode *inode,
                                struct ext2_dx_root_info * rootnode,
-                               struct ext2_dx_entry *ent,
+                               struct ext2_dx_entry *ent, __u32 crc,
                                char *buf, int level)
 {
        struct ext2_dx_countlimit       dx_countlimit;
@@ -158,8 +160,11 @@ static void htree_dump_int_node(ext2_filsys fs, ext2_ino_t ino,
        if (ext2fs_has_feature_metadata_csum(fs->super) &&
            remainder == sizeof(struct ext2_dx_tail)) {
                tail = (struct ext2_dx_tail *)(ent + limit);
-               fprintf(pager, "Checksum: 0x%08x\n",
+               fprintf(pager, "Checksum: 0x%08x",
                        ext2fs_le32_to_cpu(tail->dt_checksum));
+               if (tail->dt_checksum != crc)
+                       fprintf(pager, " --- EXPECTED: 0x%08x", crc);
+               fputc('\n', pager);
        }
 
        for (i=0; i < count; i++) {
@@ -197,6 +202,7 @@ static void htree_dump_int_block(ext2_filsys fs, ext2_ino_t ino,
        char            *cbuf;
        errcode_t       errcode;
        blk64_t         pblk;
+       __u32           crc;
 
        cbuf = malloc(fs->blocksize);
        if (!cbuf) {
@@ -214,20 +220,29 @@ static void htree_dump_int_block(ext2_filsys fs, ext2_ino_t ino,
        errcode = io_channel_read_blk64(current_fs->io, pblk, 1, buf);
        if (errcode) {
                com_err("htree_dump_int_block", errcode,
-                       "while  reading block %llu\n", blk);
+                       "while reading block %llu\n", blk);
                goto errout;
        }
 
+       errcode = ext2fs_dx_csum(current_fs, ino,
+                                (struct ext2_dir_entry *) buf, &crc, NULL);
+       if (errcode) {
+               com_err("htree_dump_int_block", errcode,
+                       "while calculating checksum for logical block %llu\n",
+                       (unsigned long long) blk);
+               crc = (unsigned int) -1;
+       }
        htree_dump_int_node(fs, ino, inode, rootnode,
                            (struct ext2_dx_entry *) (buf+8),
-                           cbuf, level);
+                           crc, cbuf, level);
 errout:
        free(cbuf);
 }
 
 
 
-void do_htree_dump(int argc, char *argv[])
+void do_htree_dump(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                  void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      ino;
        struct ext2_inode inode;
@@ -236,6 +251,7 @@ void do_htree_dump(int argc, char *argv[])
        struct          ext2_dx_root_info  *rootnode;
        struct          ext2_dx_entry *ent;
        errcode_t       errcode;
+       __u32           crc;
 
        if (check_fs_open(argv[0]))
                return;
@@ -285,11 +301,19 @@ void do_htree_dump(int argc, char *argv[])
        fprintf(pager, "\t Hash Version: %d\n", rootnode->hash_version);
        fprintf(pager, "\t Info length: %d\n", rootnode->info_length);
        fprintf(pager, "\t Indirect levels: %d\n", rootnode->indirect_levels);
-       fprintf(pager, "\t Flags: %d\n", rootnode->unused_flags);
+       fprintf(pager, "\t Flags: %#x\n", rootnode->unused_flags);
 
-       ent = (struct ext2_dx_entry *) (buf + 24 + rootnode->info_length);
+       ent = (struct ext2_dx_entry *)
+               ((char *)rootnode + rootnode->info_length);
 
-       htree_dump_int_node(current_fs, ino, &inode, rootnode, ent,
+       errcode = ext2fs_dx_csum(current_fs, ino,
+                                (struct ext2_dir_entry *) buf, &crc, NULL);
+       if (errcode) {
+               com_err("htree_dump_int_block", errcode,
+                       "while calculating checksum for htree root\n");
+               crc = (unsigned int) -1;
+       }
+       htree_dump_int_node(current_fs, ino, &inode, rootnode, ent, crc,
                            buf + current_fs->blocksize,
                            rootnode->indirect_levels);
 
@@ -301,18 +325,21 @@ errout:
 /*
  * This function prints the hash of a given file.
  */
-void do_dx_hash(int argc, char *argv[])
+void do_dx_hash(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+               void *infop EXT2FS_ATTR((unused)))
 {
        ext2_dirhash_t hash, minor_hash;
        errcode_t       err;
        int             c;
        int             hash_version = 0;
        __u32           hash_seed[4];
+       int             hash_flags = 0;
+       const struct ext2fs_nls_table *encoding = NULL;
 
        hash_seed[0] = hash_seed[1] = hash_seed[2] = hash_seed[3] = 0;
 
        reset_getopt();
-       while ((c = getopt (argc, argv, "h:s:")) != EOF) {
+       while ((c = getopt(argc, argv, "h:s:ce:")) != EOF) {
                switch (c) {
                case 'h':
                        hash_version = e2p_string2hash(optarg);
@@ -326,6 +353,17 @@ void do_dx_hash(int argc, char *argv[])
                                return;
                        }
                        break;
+               case 'c':
+                       hash_flags |= EXT4_CASEFOLD_FL;
+                       break;
+               case 'e':
+                       encoding = ext2fs_load_nls_table(e2p_str2encoding(optarg));
+                       if (!encoding) {
+                               fprintf(stderr, "Invalid encoding: %s\n",
+                                       optarg);
+                               return;
+                       }
+                       break;
                default:
                        goto print_usage;
                }
@@ -333,13 +371,15 @@ void do_dx_hash(int argc, char *argv[])
        if (optind != argc-1) {
        print_usage:
                com_err(argv[0], 0, "usage: dx_hash [-h hash_alg] "
-                       "[-s hash_seed] filename");
+                       "[-s hash_seed] [-c] [-e encoding] filename");
                return;
        }
-       err = ext2fs_dirhash(hash_version, argv[optind], strlen(argv[optind]),
-                            hash_seed, &hash, &minor_hash);
+       err = ext2fs_dirhash2(hash_version, argv[optind],
+                             strlen(argv[optind]), encoding, hash_flags,
+                             hash_seed, &hash, &minor_hash);
+
        if (err) {
-               com_err(argv[0], err, "while caclulating hash");
+               com_err(argv[0], err, "while calculating hash");
                return;
        }
        printf("Hash of %s is 0x%0x (minor 0x%0x)\n", argv[optind],
@@ -361,7 +401,8 @@ static int search_dir_block(ext2_filsys fs, blk64_t *blocknr,
                            e2_blkcnt_t blockcnt, blk64_t ref_blk,
                            int ref_offset, void *priv_data);
 
-void do_dirsearch(int argc, char *argv[])
+void do_dirsearch(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      inode;
        struct process_block_struct pb;
index 3b9bd14..71164cf 100644 (file)
@@ -53,7 +53,8 @@ static int icheck_proc(ext2_filsys fs EXT2FS_ATTR((unused)),
        return 0;
 }
 
-void do_icheck(int argc, char **argv)
+void do_icheck(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+              void *infop EXT2FS_ATTR((unused)))
 {
        struct block_walk_struct bw;
        struct block_info       *binfo;
index 9997c7c..e8872f0 100644 (file)
@@ -49,7 +49,7 @@ static int bh_count = 0;
 static int ext2fs_journal_verify_csum_type(journal_t *j,
                                           journal_superblock_t *jsb)
 {
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return 1;
 
        return jsb->s_checksum_type == JBD2_CRC32C_CHKSUM;
@@ -73,7 +73,7 @@ static int ext2fs_journal_sb_csum_verify(journal_t *j,
 {
        __u32 provided, calculated;
 
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return 1;
 
        provided = ext2fs_be32_to_cpu(jsb->s_checksum);
@@ -87,7 +87,7 @@ static errcode_t ext2fs_journal_sb_csum_set(journal_t *j,
 {
        __u32 crc;
 
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return 0;
 
        crc = ext2fs_journal_sb_csum(jsb);
@@ -99,7 +99,8 @@ static errcode_t ext2fs_journal_sb_csum_set(journal_t *j,
  * to use the recovery.c file virtually unchanged from the kernel, so we
  * don't have to do much to keep kernel and user recovery in sync.
  */
-int journal_bmap(journal_t *journal, blk64_t block, unsigned long long *phys)
+int jbd2_journal_bmap(journal_t *journal, unsigned long block,
+                     unsigned long long *phys)
 {
 #ifdef USE_INODE_IO
        *phys = block;
@@ -115,13 +116,15 @@ int journal_bmap(journal_t *journal, blk64_t block, unsigned long long *phys)
        }
 
        retval = ext2fs_bmap2(inode->i_fs, inode->i_ino,
-                             &inode->i_ext2, NULL, 0, block, 0, &pblk);
+                             &inode->i_ext2, NULL, 0, (blk64_t) block,
+                             0, &pblk);
        *phys = pblk;
        return (int) retval;
 #endif
 }
 
-struct buffer_head *getblk(kdev_t kdev, blk64_t blocknr, int blocksize)
+struct buffer_head *getblk(kdev_t kdev, unsigned long long blocknr,
+                          int blocksize)
 {
        struct buffer_head *bh;
        int bufsize = sizeof(*bh) + kdev->k_fs->blocksize -
@@ -137,7 +140,7 @@ struct buffer_head *getblk(kdev_t kdev, blk64_t blocknr, int blocksize)
                bh_count++;
 #endif
        jfs_debug(4, "getblk for block %llu (%d bytes)(total %d)\n",
-                 (unsigned long long) blocknr, blocksize, bh_count);
+                 blocknr, blocksize, bh_count);
 
        bh->b_fs = kdev->k_fs;
        if (kdev->k_dev == K_DEV_FS)
@@ -162,14 +165,14 @@ int sync_blockdev(kdev_t kdev)
        return io_channel_flush(io) ? EIO : 0;
 }
 
-void ll_rw_block(int rw, int nr, struct buffer_head *bhp[])
+void ll_rw_block(int rw, int op_flags, int nr, struct buffer_head *bhp[])
 {
        errcode_t retval;
        struct buffer_head *bh;
 
        for (; nr > 0; --nr) {
                bh = *bhp++;
-               if (rw == READ && !bh->b_uptodate) {
+               if (rw == REQ_OP_READ && !bh->b_uptodate) {
                        jfs_debug(3, "reading block %llu/%p\n",
                                  bh->b_blocknr, (void *) bh);
                        retval = io_channel_read_blk64(bh->b_io,
@@ -183,7 +186,7 @@ void ll_rw_block(int rw, int nr, struct buffer_head *bhp[])
                                continue;
                        }
                        bh->b_uptodate = 1;
-               } else if (rw == WRITE && bh->b_dirty) {
+               } else if (rw == REQ_OP_WRITE && bh->b_dirty) {
                        jfs_debug(3, "writing block %llu/%p\n",
                                  bh->b_blocknr,
                                  (void *) bh);
@@ -201,7 +204,7 @@ void ll_rw_block(int rw, int nr, struct buffer_head *bhp[])
                        bh->b_uptodate = 1;
                } else {
                        jfs_debug(3, "no-op %s for block %llu\n",
-                                 rw == READ ? "read" : "write",
+                                 rw == REQ_OP_READ ? "read" : "write",
                                  bh->b_blocknr);
                }
        }
@@ -220,7 +223,7 @@ static void mark_buffer_clean(struct buffer_head *bh)
 void brelse(struct buffer_head *bh)
 {
        if (bh->b_dirty)
-               ll_rw_block(WRITE, 1, &bh);
+               ll_rw_block(REQ_OP_WRITE, 0, 1, &bh);
        jfs_debug(3, "freeing block %llu/%p (total %d)\n",
                  bh->b_blocknr, (void *) bh, --bh_count);
        ext2fs_free_mem(&bh);
@@ -239,7 +242,7 @@ void mark_buffer_uptodate(struct buffer_head *bh, int val)
 void wait_on_buffer(struct buffer_head *bh)
 {
        if (!bh->b_uptodate)
-               ll_rw_block(READ, 1, &bh);
+               ll_rw_block(REQ_OP_READ, 0, 1, &bh);
 }
 
 
@@ -250,6 +253,12 @@ static void ext2fs_clear_recover(ext2_filsys fs, int error)
        /* if we had an error doing journal recovery, we need a full fsck */
        if (error)
                fs->super->s_state &= ~EXT2_VALID_FS;
+       /*
+        * If we replayed the journal by definition the file system
+        * was mounted since the last time it was checked
+        */
+       if (fs->super->s_lastcheck >= fs->super->s_mtime)
+               fs->super->s_lastcheck = fs->super->s_mtime - 1;
        ext2fs_mark_super_dirty(fs);
 }
 
@@ -349,7 +358,7 @@ try_backup_journal:
                        goto try_backup_journal;
                }
                if (EXT2_I_SIZE(&j_inode->i_ext2) / journal->j_blocksize <
-                   JFS_MIN_JOURNAL_BLOCKS) {
+                   JBD2_MIN_JOURNAL_BLOCKS) {
                        retval = EXT2_ET_JOURNAL_TOO_SMALL;
                        goto try_backup_journal;
                }
@@ -369,7 +378,7 @@ try_backup_journal:
                                goto errout;
                }
 
-               journal->j_maxlen = EXT2_I_SIZE(&j_inode->i_ext2) /
+               journal->j_total_len = EXT2_I_SIZE(&j_inode->i_ext2) /
                        journal->j_blocksize;
 
 #ifdef USE_INODE_IO
@@ -383,7 +392,7 @@ try_backup_journal:
 #else
                journal->j_inode = j_inode;
                fs->journal_io = fs->io;
-               retval = (errcode_t)journal_bmap(journal, 0, &start);
+               retval = (errcode_t) jbd2_journal_bmap(journal, 0, &start);
                if (retval)
                        goto errout;
 #endif
@@ -437,7 +446,7 @@ try_backup_journal:
                        retval = EXT2_ET_NO_MEMORY;
                        goto errout;
                }
-               ll_rw_block(READ, 1, &bh);
+               ll_rw_block(REQ_OP_READ, 0, 1, &bh);
                retval = bh->b_err;
                if (retval) {
                        brelse(bh);
@@ -484,7 +493,7 @@ try_backup_journal:
                brelse(bh);
 
                maxlen = ext2fs_blocks_count(&jsuper);
-               journal->j_maxlen = (maxlen < 1ULL << 32) ? maxlen :
+               journal->j_total_len = (maxlen < 1ULL << 32) ? maxlen :
                                    (1ULL << 32) - 1;
                start++;
        }
@@ -548,17 +557,17 @@ static errcode_t ext2fs_journal_load(journal_t *journal)
        journal_superblock_t *jsb;
        struct buffer_head *jbh = journal->j_sb_buffer;
 
-       ll_rw_block(READ, 1, &jbh);
+       ll_rw_block(REQ_OP_READ, 0, 1, &jbh);
        if (jbh->b_err)
                return jbh->b_err;
 
        jsb = journal->j_superblock;
-       /* If we don't even have JFS_MAGIC, we probably have a wrong inode */
-       if (jsb->s_header.h_magic != htonl(JFS_MAGIC_NUMBER))
+       /* If we don't even have JBD2_MAGIC, we probably have a wrong inode */
+       if (jsb->s_header.h_magic != htonl(JBD2_MAGIC_NUMBER))
                return ext2fs_journal_fix_bad_inode(fs);
 
        switch (ntohl(jsb->s_header.h_blocktype)) {
-       case JFS_SUPERBLOCK_V1:
+       case JBD2_SUPERBLOCK_V1:
                journal->j_format_version = 1;
                if (jsb->s_feature_compat ||
                    jsb->s_feature_incompat ||
@@ -567,7 +576,7 @@ static errcode_t ext2fs_journal_load(journal_t *journal)
                        clear_v2_journal_fields(journal);
                break;
 
-       case JFS_SUPERBLOCK_V2:
+       case JBD2_SUPERBLOCK_V2:
                journal->j_format_version = 2;
                if (ntohl(jsb->s_nr_users) > 1 &&
                    uuid_is_null(fs->super->s_journal_uuid))
@@ -580,9 +589,9 @@ static errcode_t ext2fs_journal_load(journal_t *journal)
         * These should never appear in a journal super block, so if
         * they do, the journal is badly corrupted.
         */
-       case JFS_DESCRIPTOR_BLOCK:
-       case JFS_COMMIT_BLOCK:
-       case JFS_REVOKE_BLOCK:
+       case JBD2_DESCRIPTOR_BLOCK:
+       case JBD2_COMMIT_BLOCK:
+       case JBD2_REVOKE_BLOCK:
                return EXT2_ET_CORRUPT_JOURNAL_SB;
 
        /* If we don't understand the superblock major type, but there
@@ -592,25 +601,25 @@ static errcode_t ext2fs_journal_load(journal_t *journal)
                return EXT2_ET_JOURNAL_UNSUPP_VERSION;
        }
 
-       if (JFS_HAS_INCOMPAT_FEATURE(journal, ~JFS_KNOWN_INCOMPAT_FEATURES))
+       if (JBD2_HAS_INCOMPAT_FEATURE(journal, ~JBD2_KNOWN_INCOMPAT_FEATURES))
                return EXT2_ET_UNSUPP_FEATURE;
 
-       if (JFS_HAS_RO_COMPAT_FEATURE(journal, ~JFS_KNOWN_ROCOMPAT_FEATURES))
+       if (JBD2_HAS_RO_COMPAT_FEATURE(journal, ~JBD2_KNOWN_ROCOMPAT_FEATURES))
                return EXT2_ET_RO_UNSUPP_FEATURE;
 
        /* Checksum v1-3 are mutually exclusive features. */
-       if (jfs_has_feature_csum2(journal) && jfs_has_feature_csum3(journal))
+       if (jbd2_has_feature_csum2(journal) && jbd2_has_feature_csum3(journal))
                return EXT2_ET_CORRUPT_JOURNAL_SB;
 
-       if (journal_has_csum_v2or3(journal) &&
-           jfs_has_feature_checksum(journal))
+       if (jbd2_journal_has_csum_v2or3(journal) &&
+           jbd2_has_feature_checksum(journal))
                return EXT2_ET_CORRUPT_JOURNAL_SB;
 
        if (!ext2fs_journal_verify_csum_type(journal, jsb) ||
            !ext2fs_journal_sb_csum_verify(journal, jsb))
                return EXT2_ET_CORRUPT_JOURNAL_SB;
 
-       if (journal_has_csum_v2or3(journal))
+       if (jbd2_journal_has_csum_v2or3(journal))
                journal->j_csum_seed = jbd2_chksum(journal, ~0, jsb->s_uuid,
                                                   sizeof(jsb->s_uuid));
 
@@ -620,9 +629,9 @@ static errcode_t ext2fs_journal_load(journal_t *journal)
        if (jsb->s_blocksize != htonl(journal->j_blocksize))
                return EXT2_ET_CORRUPT_JOURNAL_SB;
 
-       if (ntohl(jsb->s_maxlen) < journal->j_maxlen)
-               journal->j_maxlen = ntohl(jsb->s_maxlen);
-       else if (ntohl(jsb->s_maxlen) > journal->j_maxlen)
+       if (ntohl(jsb->s_maxlen) < journal->j_total_len)
+               journal->j_total_len = ntohl(jsb->s_maxlen);
+       else if (ntohl(jsb->s_maxlen) > journal->j_total_len)
                return EXT2_ET_CORRUPT_JOURNAL_SB;
 
        journal->j_tail_sequence = ntohl(jsb->s_sequence);
@@ -734,7 +743,14 @@ static errcode_t recover_ext3_journal(ext2_filsys fs)
        journal_t *journal;
        errcode_t retval;
 
-       journal_init_revoke_caches();
+       retval = jbd2_journal_init_revoke_record_cache();
+       if (retval)
+               return retval;
+
+       retval = jbd2_journal_init_revoke_table_cache();
+       if (retval)
+               return retval;
+
        retval = ext2fs_get_journal(fs, &journal);
        if (retval)
                return retval;
@@ -743,11 +759,11 @@ static errcode_t recover_ext3_journal(ext2_filsys fs)
        if (retval)
                goto errout;
 
-       retval = journal_init_revoke(journal, 1024);
+       retval = jbd2_journal_init_revoke(journal, 1024);
        if (retval)
                goto errout;
 
-       retval = -journal_recover(journal);
+       retval = -jbd2_journal_recover(journal);
        if (retval)
                goto errout;
 
@@ -757,8 +773,9 @@ static errcode_t recover_ext3_journal(ext2_filsys fs)
        }
 
 errout:
-       journal_destroy_revoke(journal);
-       journal_destroy_revoke_caches();
+       jbd2_journal_destroy_revoke(journal);
+       jbd2_journal_destroy_revoke_record_cache();
+       jbd2_journal_destroy_revoke_table_cache();
        ext2fs_journal_release(fs, journal, 1, 0);
        return retval;
 }
@@ -793,14 +810,14 @@ errcode_t ext2fs_run_ext3_journal(ext2_filsys *fsp)
                kbytes_written = stats->bytes_written >> 10;
 
        ext2fs_mmp_stop(fs);
-       fsname = strdup(fs->device_name);
+       fsname = fs->device_name;
+       fs->device_name = NULL;
        fsflags = fs->flags;
        fsblocksize = fs->blocksize;
        ext2fs_free(fs);
-       retval = ext2fs_open(fsname, fsflags,
-                            0, fsblocksize, io_ptr,
-                            fsp);
-       free(fsname);
+       *fsp = NULL;
+       retval = ext2fs_open(fsname, fsflags, 0, fsblocksize, io_ptr, fsp);
+       ext2fs_free_mem(&fsname);
        if (retval)
                return retval;
 
@@ -824,7 +841,14 @@ errcode_t ext2fs_open_journal(ext2_filsys fs, journal_t **j)
        journal_t *journal;
        errcode_t retval;
 
-       journal_init_revoke_caches();
+       retval = jbd2_journal_init_revoke_record_cache();
+       if (retval)
+               return retval;
+
+       retval = jbd2_journal_init_revoke_table_cache();
+       if (retval)
+               return retval;
+
        retval = ext2fs_get_journal(fs, &journal);
        if (retval)
                return retval;
@@ -833,7 +857,7 @@ errcode_t ext2fs_open_journal(ext2_filsys fs, journal_t **j)
        if (retval)
                goto errout;
 
-       retval = journal_init_revoke(journal, 1024);
+       retval = jbd2_journal_init_revoke(journal, 1024);
        if (retval)
                goto errout;
 
@@ -846,8 +870,9 @@ errcode_t ext2fs_open_journal(ext2_filsys fs, journal_t **j)
        return 0;
 
 errout:
-       journal_destroy_revoke(journal);
-       journal_destroy_revoke_caches();
+       jbd2_journal_destroy_revoke(journal);
+       jbd2_journal_destroy_revoke_record_cache();
+       jbd2_journal_destroy_revoke_table_cache();
        ext2fs_journal_release(fs, journal, 1, 0);
        return retval;
 }
@@ -856,8 +881,9 @@ errcode_t ext2fs_close_journal(ext2_filsys fs, journal_t **j)
 {
        journal_t *journal = *j;
 
-       journal_destroy_revoke(journal);
-       journal_destroy_revoke_caches();
+       jbd2_journal_destroy_revoke(journal);
+       jbd2_journal_destroy_revoke_record_cache();
+       jbd2_journal_destroy_revoke_table_cache();
        ext2fs_journal_release(fs, journal, 0, 0);
        *j = NULL;
 
@@ -869,7 +895,7 @@ void jbd2_commit_block_csum_set(journal_t *j, struct buffer_head *bh)
        struct commit_header *h;
        __u32 csum;
 
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return;
 
        h = (struct commit_header *)(bh->b_data);
@@ -882,29 +908,19 @@ void jbd2_commit_block_csum_set(journal_t *j, struct buffer_head *bh)
 
 void jbd2_revoke_csum_set(journal_t *j, struct buffer_head *bh)
 {
-       struct journal_revoke_tail *tail;
-       __u32 csum;
-
-       if (!journal_has_csum_v2or3(j))
-               return;
-
-       tail = (struct journal_revoke_tail *)(bh->b_data + j->j_blocksize -
-                       sizeof(struct journal_revoke_tail));
-       tail->r_checksum = 0;
-       csum = jbd2_chksum(j, j->j_csum_seed, bh->b_data, j->j_blocksize);
-       tail->r_checksum = ext2fs_cpu_to_be32(csum);
+       jbd2_descr_block_csum_set(j, bh);
 }
 
 void jbd2_descr_block_csum_set(journal_t *j, struct buffer_head *bh)
 {
-       struct journal_block_tail *tail;
+       struct jbd2_journal_block_tail *tail;
        __u32 csum;
 
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return;
 
-       tail = (struct journal_block_tail *)(bh->b_data + j->j_blocksize -
-                       sizeof(struct journal_block_tail));
+       tail = (struct jbd2_journal_block_tail *)(bh->b_data + j->j_blocksize -
+                       sizeof(struct jbd2_journal_block_tail));
        tail->t_checksum = 0;
        csum = jbd2_chksum(j, j->j_csum_seed, bh->b_data, j->j_blocksize);
        tail->t_checksum = ext2fs_cpu_to_be32(csum);
@@ -917,14 +933,14 @@ void jbd2_block_tag_csum_set(journal_t *j, journal_block_tag_t *tag,
        __u32 csum32;
        __be32 seq;
 
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return;
 
        seq = ext2fs_cpu_to_be32(sequence);
        csum32 = jbd2_chksum(j, j->j_csum_seed, (__u8 *)&seq, sizeof(seq));
        csum32 = jbd2_chksum(j, csum32, bh->b_data, bh->b_size);
 
-       if (jfs_has_feature_csum3(j))
+       if (jbd2_has_feature_csum3(j))
                tag3->t_checksum = ext2fs_cpu_to_be32(csum32);
        else
                tag->t_checksum = ext2fs_cpu_to_be16(csum32);
index ee3201a..a94043f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * logdump.c --- dump the contents of the journal out to a file
  *
- * Authro: Stephen C. Tweedie, 2001  <sct@redhat.com>
+ * Author: Stephen C. Tweedie, 2001  <sct@redhat.com>
  * Copyright (C) 2001 Red Hat, Inc.
  * Based on portions  Copyright (C) 1994 Theodore Ts'o.
  *
@@ -33,13 +33,14 @@ extern char *optarg;
 #include "debugfs.h"
 #include "blkid/blkid.h"
 #include "jfs_user.h"
+#include "ext2fs/fast_commit.h"
 #include <uuid/uuid.h>
 
 enum journal_location {JOURNAL_IS_INTERNAL, JOURNAL_IS_EXTERNAL};
 
 #define ANY_BLOCK ((blk64_t) -1)
 
-static int             dump_all, dump_old, dump_contents, dump_descriptors;
+static int             dump_all, dump_super, dump_old, dump_contents, dump_descriptors;
 static blk64_t         block_to_dump, bitmap_to_dump, inode_block_to_dump;
 static unsigned int    group_to_dump, inode_offset_to_dump;
 static ext2_ino_t      inode_to_dump;
@@ -65,6 +66,9 @@ static void dump_metadata_block(FILE *, struct journal_source *,
                                unsigned int, unsigned int, unsigned int,
                                int, tid_t);
 
+static void dump_fc_block(FILE *out_file, char *buf, int blocksize,
+                         int transaction, int *fc_done, int dump_old);
+
 static void do_hexdump (FILE *, char *, int);
 
 #define WRAP(jsb, blocknr)                                     \
@@ -72,7 +76,8 @@ static void do_hexdump (FILE *, char *, int);
                blocknr -= (be32_to_cpu((jsb)->s_maxlen) -      \
                            be32_to_cpu((jsb)->s_first));
 
-void do_logdump(int argc, char **argv)
+void do_logdump(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        int             c;
        int             retval;
@@ -96,6 +101,7 @@ void do_logdump(int argc, char **argv)
        dump_all = 0;
        dump_old = 0;
        dump_contents = 0;
+       dump_super = 0;
        dump_descriptors = 1;
        block_to_dump = ANY_BLOCK;
        bitmap_to_dump = -1;
@@ -103,7 +109,7 @@ void do_logdump(int argc, char **argv)
        inode_to_dump = -1;
 
        reset_getopt();
-       while ((c = getopt (argc, argv, "ab:ci:f:Os")) != EOF) {
+       while ((c = getopt (argc, argv, "ab:ci:f:OsS")) != EOF) {
                switch (c) {
                case 'a':
                        dump_all++;
@@ -133,6 +139,9 @@ void do_logdump(int argc, char **argv)
                case 's':
                        use_sb++;
                        break;
+               case 'S':
+                       dump_super++;
+                       break;
                default:
                        goto print_usage;
                }
@@ -271,7 +280,7 @@ errout:
        return;
 
 print_usage:
-       fprintf(stderr, "%s: Usage: logdump [-acsO] [-b<block>] [-i<filespec>]\n\t"
+       fprintf(stderr, "%s: Usage: logdump [-acsOS] [-b<block>] [-i<filespec>]\n\t"
                "[-f<journal_file>] [output_file]\n", argv[0]);
 }
 
@@ -320,15 +329,15 @@ static int read_journal_block(const char *cmd, struct journal_source *source,
 static const char *type_to_name(int btype)
 {
        switch (btype) {
-       case JFS_DESCRIPTOR_BLOCK:
+       case JBD2_DESCRIPTOR_BLOCK:
                return "descriptor block";
-       case JFS_COMMIT_BLOCK:
+       case JBD2_COMMIT_BLOCK:
                return "commit block";
-       case JFS_SUPERBLOCK_V1:
+       case JBD2_SUPERBLOCK_V1:
                return "V1 superblock";
-       case JFS_SUPERBLOCK_V2:
+       case JBD2_SUPERBLOCK_V2:
                return "V2 superblock";
-       case JFS_REVOKE_BLOCK:
+       case JBD2_REVOKE_BLOCK:
                return "revoke table";
        }
        return "unrecognised type";
@@ -348,6 +357,7 @@ static void dump_journal(char *cmdname, FILE *out_file,
        journal_header_t        *header;
        tid_t                   transaction;
        unsigned int            blocknr = 0;
+       int                     fc_done;
 
        /* First, check to see if there's an ext2 superblock header */
        retval = read_journal_block(cmdname, source, 0, buf, 2048);
@@ -361,7 +371,7 @@ static void dump_journal(char *cmdname, FILE *out_file,
                ext2fs_swap_super(sb);
 #endif
 
-       if ((be32_to_cpu(jsb->s_header.h_magic) != JFS_MAGIC_NUMBER) &&
+       if ((be32_to_cpu(jsb->s_header.h_magic) != JBD2_MAGIC_NUMBER) &&
            (sb->s_magic == EXT2_SUPER_MAGIC) &&
            ext2fs_has_feature_journal_dev(sb)) {
                blocksize = EXT2_BLOCK_SIZE(sb);
@@ -383,8 +393,14 @@ static void dump_journal(char *cmdname, FILE *out_file,
        if (retval)
                return;
 
+       if (dump_super) {
+               e2p_list_journal_super(out_file, jsb_buffer,
+                                      current_fs->blocksize, 0);
+               fputc('\n', out_file);
+       }
+
        jsb = (journal_superblock_t *) jsb_buffer;
-       if (be32_to_cpu(jsb->s_header.h_magic) != JFS_MAGIC_NUMBER) {
+       if (be32_to_cpu(jsb->s_header.h_magic) != JBD2_MAGIC_NUMBER) {
                fprintf(out_file,
                        "Journal superblock magic number invalid!\n");
                return;
@@ -399,7 +415,7 @@ static void dump_journal(char *cmdname, FILE *out_file,
        if (!blocknr) {
                /* Empty journal, nothing to do. */
                if (!dump_old)
-                       return;
+                       goto fc;
                else
                        blocknr = 1;
        }
@@ -409,7 +425,7 @@ static void dump_journal(char *cmdname, FILE *out_file,
                                ((ext2_loff_t) blocknr) * blocksize,
                                buf, blocksize);
                if (retval)
-                       return;
+                       break;
 
                header = (journal_header_t *) buf;
 
@@ -417,10 +433,10 @@ static void dump_journal(char *cmdname, FILE *out_file,
                sequence = be32_to_cpu(header->h_sequence);
                blocktype = be32_to_cpu(header->h_blocktype);
 
-               if (magic != JFS_MAGIC_NUMBER) {
+               if (magic != JBD2_MAGIC_NUMBER) {
                        fprintf (out_file, "No magic number at block %u: "
                                 "end of journal.\n", blocknr);
-                       return;
+                       break;
                }
 
                if (sequence != transaction) {
@@ -428,7 +444,7 @@ static void dump_journal(char *cmdname, FILE *out_file,
                                 "block %u: end of journal.\n",
                                 sequence, transaction, blocknr);
                        if (!dump_old)
-                               return;
+                               break;
                }
 
                if (dump_descriptors) {
@@ -439,19 +455,19 @@ static void dump_journal(char *cmdname, FILE *out_file,
                }
 
                switch (blocktype) {
-               case JFS_DESCRIPTOR_BLOCK:
+               case JBD2_DESCRIPTOR_BLOCK:
                        dump_descriptor_block(out_file, source, buf, jsb,
                                              &blocknr, blocksize,
                                              transaction);
                        continue;
 
-               case JFS_COMMIT_BLOCK:
+               case JBD2_COMMIT_BLOCK:
                        transaction++;
                        blocknr++;
                        WRAP(jsb, blocknr);
                        continue;
 
-               case JFS_REVOKE_BLOCK:
+               case JBD2_REVOKE_BLOCK:
                        dump_revoke_block(out_file, buf, jsb,
                                          blocknr, blocksize,
                                          transaction);
@@ -462,29 +478,136 @@ static void dump_journal(char *cmdname, FILE *out_file,
                default:
                        fprintf (out_file, "Unexpected block type %u at "
                                 "block %u.\n", blocktype, blocknr);
-                       return;
+                       break;
                }
        }
+
+fc:
+       blocknr = be32_to_cpu(jsb->s_maxlen) - jbd2_journal_get_num_fc_blks(jsb) + 1;
+       while (blocknr <= be32_to_cpu(jsb->s_maxlen)) {
+               retval = read_journal_block(cmdname, source,
+                               ((ext2_loff_t) blocknr) * blocksize,
+                               buf, blocksize);
+               if (retval)
+                       return;
+
+               dump_fc_block(out_file, buf, blocksize, transaction, &fc_done,
+                       dump_old);
+               if (!dump_old && fc_done)
+                       break;
+               blocknr++;
+       }
 }
 
 static inline size_t journal_super_tag_bytes(journal_superblock_t *jsb)
 {
        size_t sz;
 
-       if (JSB_HAS_INCOMPAT_FEATURE(jsb, JFS_FEATURE_INCOMPAT_CSUM_V3))
+       if (JSB_HAS_INCOMPAT_FEATURE(jsb, JBD2_FEATURE_INCOMPAT_CSUM_V3))
                return sizeof(journal_block_tag3_t);
 
        sz = sizeof(journal_block_tag_t);
 
-       if (JSB_HAS_INCOMPAT_FEATURE(jsb, JFS_FEATURE_INCOMPAT_CSUM_V2))
+       if (JSB_HAS_INCOMPAT_FEATURE(jsb, JBD2_FEATURE_INCOMPAT_CSUM_V2))
                sz += sizeof(__u16);
 
-       if (JSB_HAS_INCOMPAT_FEATURE(jsb, JFS_FEATURE_INCOMPAT_64BIT))
+       if (JSB_HAS_INCOMPAT_FEATURE(jsb, JBD2_FEATURE_INCOMPAT_64BIT))
                return sz;
 
        return sz - sizeof(__u32);
 }
 
+static void dump_fc_block(FILE *out_file, char *buf, int blocksize,
+       int transaction, int *fc_done, int dump_old)
+{
+       struct ext4_fc_tl       *tl;
+       struct ext4_fc_head     *head;
+       struct ext4_fc_add_range        *add_range;
+       struct ext4_fc_del_range        *del_range;
+       struct ext4_fc_dentry_info      *dentry_info;
+       struct ext4_fc_tail             *tail;
+       struct ext3_extent      *ex;
+
+       *fc_done = 0;
+       fc_for_each_tl(buf, buf + blocksize, tl) {
+               switch (le16_to_cpu(tl->fc_tag)) {
+               case EXT4_FC_TAG_ADD_RANGE:
+                       add_range =
+                               (struct ext4_fc_add_range *)ext4_fc_tag_val(tl);
+                       ex = (struct ext3_extent *)add_range->fc_ex;
+                       fprintf(out_file,
+                               "tag %s, inode %d, lblk %lu, pblk %llu, len %lu\n",
+                               tag2str(tl->fc_tag),
+                               le32_to_cpu(add_range->fc_ino),
+                               le32_to_cpu(ex->ee_block),
+                               le32_to_cpu(ex->ee_start) +
+                               (((__u64) le16_to_cpu(ex->ee_start_hi)) << 32),
+                               le16_to_cpu(ex->ee_len) > EXT_INIT_MAX_LEN ?
+                               le16_to_cpu(ex->ee_len) - EXT_INIT_MAX_LEN :
+                               le16_to_cpu(ex->ee_len));
+                       break;
+               case EXT4_FC_TAG_DEL_RANGE:
+                       del_range =
+                               (struct ext4_fc_del_range *)ext4_fc_tag_val(tl);
+                       fprintf(out_file, "tag %s, inode %d, lblk %d, len %d\n",
+                               tag2str(tl->fc_tag),
+                               le32_to_cpu(del_range->fc_ino),
+                               le32_to_cpu(del_range->fc_lblk),
+                               le32_to_cpu(del_range->fc_len));
+                       break;
+               case EXT4_FC_TAG_LINK:
+               case EXT4_FC_TAG_UNLINK:
+               case EXT4_FC_TAG_CREAT:
+                       dentry_info =
+                               (struct ext4_fc_dentry_info *)
+                                       ext4_fc_tag_val(tl);
+                       fprintf(out_file,
+                               "tag %s, parent %d, ino %d, name \"%s\"\n",
+                               tag2str(tl->fc_tag),
+                               le32_to_cpu(dentry_info->fc_parent_ino),
+                               le32_to_cpu(dentry_info->fc_ino),
+                               dentry_info->fc_dname);
+                       break;
+               case EXT4_FC_TAG_INODE:
+                       fprintf(out_file, "tag %s, inode %d\n",
+                               tag2str(tl->fc_tag),
+                               le32_to_cpu(((struct ext4_fc_inode *)
+                                       ext4_fc_tag_val(tl))->fc_ino));
+                       break;
+               case EXT4_FC_TAG_PAD:
+                       fprintf(out_file, "tag %s\n", tag2str(tl->fc_tag));
+                       break;
+               case EXT4_FC_TAG_TAIL:
+                       tail = (struct ext4_fc_tail *)ext4_fc_tag_val(tl);
+                       fprintf(out_file, "tag %s, tid %d\n",
+                               tag2str(tl->fc_tag),
+                               le32_to_cpu(tail->fc_tid));
+                       if (!dump_old &&
+                               le32_to_cpu(tail->fc_tid) < transaction) {
+                               *fc_done = 1;
+                               return;
+                       }
+                       break;
+               case EXT4_FC_TAG_HEAD:
+                       fprintf(out_file, "\n*** Fast Commit Area ***\n");
+                       head = (struct ext4_fc_head *)ext4_fc_tag_val(tl);
+                       fprintf(out_file, "tag %s, features 0x%x, tid %d\n",
+                               tag2str(tl->fc_tag),
+                               le32_to_cpu(head->fc_features),
+                               le32_to_cpu(head->fc_tid));
+                       if (!dump_old &&
+                               le32_to_cpu(head->fc_tid) < transaction) {
+                               *fc_done = 1;
+                               return;
+                       }
+                       break;
+               default:
+                       *fc_done = 1;
+                       break;
+               }
+       }
+}
+
 static void dump_descriptor_block(FILE *out_file,
                                  struct journal_source *source,
                                  char *buf,
@@ -503,9 +626,9 @@ static void dump_descriptor_block(FILE *out_file,
        offset = sizeof(journal_header_t);
        blocknr = *blockp;
 
-       if (JSB_HAS_INCOMPAT_FEATURE(jsb, JFS_FEATURE_INCOMPAT_CSUM_V3) ||
-           JSB_HAS_INCOMPAT_FEATURE(jsb, JFS_FEATURE_INCOMPAT_CSUM_V2))
-               csum_size = sizeof(struct journal_block_tail);
+       if (JSB_HAS_INCOMPAT_FEATURE(jsb, JBD2_FEATURE_INCOMPAT_CSUM_V3) ||
+           JSB_HAS_INCOMPAT_FEATURE(jsb, JBD2_FEATURE_INCOMPAT_CSUM_V2))
+               csum_size = sizeof(struct jbd2_journal_block_tail);
 
        if (dump_all)
                fprintf(out_file, "Dumping descriptor block, sequence %u, at "
@@ -529,7 +652,7 @@ static void dump_descriptor_block(FILE *out_file,
                tag_block = be32_to_cpu(tag->t_blocknr);
                tag_flags = be16_to_cpu(tag->t_flags);
 
-               if (!(tag_flags & JFS_FLAG_SAME_UUID))
+               if (!(tag_flags & JBD2_FLAG_SAME_UUID))
                        offset += 16;
 
                dump_metadata_block(out_file, source, jsb,
@@ -539,7 +662,7 @@ static void dump_descriptor_block(FILE *out_file,
                ++blocknr;
                WRAP(jsb, blocknr);
 
-       } while (!(tag_flags & JFS_FLAG_LAST_TAG));
+       } while (!(tag_flags & JBD2_FLAG_LAST_TAG));
 
        *blockp = blocknr;
 }
@@ -552,7 +675,7 @@ static void dump_revoke_block(FILE *out_file, char *buf,
                              tid_t transaction)
 {
        int                     offset, max;
-       journal_revoke_header_t *header;
+       jbd2_journal_revoke_header_t *header;
        unsigned long long      rblock;
        int                     tag_size = sizeof(__u32);
 
@@ -560,11 +683,11 @@ static void dump_revoke_block(FILE *out_file, char *buf,
                fprintf(out_file, "Dumping revoke block, sequence %u, at "
                        "block %u:\n", transaction, blocknr);
 
-       if (be32_to_cpu(jsb->s_feature_incompat) & JFS_FEATURE_INCOMPAT_64BIT)
+       if (be32_to_cpu(jsb->s_feature_incompat) & JBD2_FEATURE_INCOMPAT_64BIT)
                tag_size = sizeof(__u64);
 
-       header = (journal_revoke_header_t *) buf;
-       offset = sizeof(journal_revoke_header_t);
+       header = (jbd2_journal_revoke_header_t *) buf;
+       offset = sizeof(jbd2_journal_revoke_header_t);
        max = be32_to_cpu(header->r_count);
 
        while (offset < max) {
index 057e3f6..ae8b2d3 100644 (file)
@@ -54,29 +54,20 @@ static int print_filename(FILE *f, struct ext2_dir_entry *dirent, int options)
        if ((options & ENCRYPT_OPT) && !(options & RAW_OPT)) {
                if (f)
                        return fprintf(f, "<encrypted (%d)>", len);
-               else {
-                       char tmp[1];
-                       return snprintf(tmp, sizeof(tmp),
-                                       "<encrypted (%d)>", len);
-               }
+               else
+                       return snprintf(NULL, 0, "<encrypted (%d)>", len);
        }
        while (len--) {
                ch = *cp++;
-               if (ch > 128) {
+               if (ch < 32 || ch >= 127 || ch == '\\') {
                        if (f)
-                               fputs("M-", f);
-                       ch -= 128;
-                       retlen += 2;
-               }
-               if ((ch < 32) || (ch == 0x7f)) {
+                               fprintf(f, "\\x%02x", ch);
+                       retlen += 4;
+               } else {
                        if (f)
-                               fputc('^', f);
-                       ch ^= 0x40; /* ^@, ^A, ^B; ^? for DEL */
+                               fputc(ch, f);
                        retlen++;
                }
-               if (f)
-                       fputc(ch, f);
-               retlen++;
        }
        return retlen;
 }
@@ -122,7 +113,7 @@ static int list_dir_proc(ext2_ino_t dir EXT2FS_ATTR((unused)),
                                return 0;
                } else
                        memset(&inode, 0, sizeof(struct ext2_inode));
-               fprintf(ls->f,"/%u/%06o/%d/%d/%*s/", ino, inode.i_mode,
+               fprintf(ls->f,"/%u/%06o/%d/%d/%.*s/", ino, inode.i_mode,
                        inode.i_uid, inode.i_gid, thislen, dirent->name);
                if (LINUX_S_ISDIR(inode.i_mode))
                        fprintf(ls->f, "/");
@@ -152,12 +143,8 @@ static int list_dir_proc(ext2_ino_t dir EXT2FS_ATTR((unused)),
                fprintf(ls->f, "(%d)  %5d  %5d   ",
                        ext2fs_dirent_file_type(dirent),
                        inode_uid(inode), inode_gid(inode));
-               if (LINUX_S_ISDIR(inode.i_mode))
-                       fprintf(ls->f, "%5d", inode.i_size);
-               else
                        fprintf(ls->f, "%5llu", EXT2_I_SIZE(&inode));
-               fputs(datestr, ls->f);
-               fputc(' ', ls->f);
+               fprintf(ls->f, " %s ", datestr);
                print_filename(ls->f, dirent, options);
                fputc('\n', ls->f);
        } else {
@@ -190,7 +177,8 @@ static int list_dir_proc(ext2_ino_t dir EXT2FS_ATTR((unused)),
        return 0;
 }
 
-void do_list_dir(int argc, char *argv[])
+void do_list_dir(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 {
        struct ext2_inode inode;
        ext2_ino_t      ino;
@@ -229,7 +217,7 @@ void do_list_dir(int argc, char *argv[])
 
        if (argc > optind+1) {
        print_usage:
-               com_err(0, 0, "Usage: ls [-l] [-d] [-p] file");
+               com_err(0, 0, "Usage: ls [-c] [-d] [-l] [-p] [-r] file");
                return;
        }
 
index 946b268..c0d5890 100644 (file)
@@ -71,7 +71,8 @@ static int lsdel_proc(ext2_filsys fs,
        return 0;
 }
 
-void do_lsdel(int argc, char **argv)
+void do_lsdel(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        struct lsdel_struct     lsd;
        struct deleted_info     *delarray;
index 5d9b5d2..011f26d 100644 (file)
@@ -28,7 +28,7 @@ extern char *optarg;
 struct inode_walk_struct {
        ext2_ino_t              dir;
        ext2_ino_t              *iarray;
-       int                     inodes_left;
+       int                     names_left;
        int                     num_inodes;
        int                     position;
        char                    *parent;
@@ -81,15 +81,17 @@ static int ncheck_proc(struct ext2_dir_entry *dirent,
                                }
                        }
                        putc('\n', stdout);
+                       iw->names_left--;
                }
        }
-       if (!iw->inodes_left)
+       if (!iw->names_left)
                return DIRENT_ABORT;
 
        return 0;
 }
 
-void do_ncheck(int argc, char **argv)
+void do_ncheck(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+              void *infop EXT2FS_ATTR((unused)))
 {
        struct inode_walk_struct iw;
        int                     c, i;
@@ -111,10 +113,8 @@ void do_ncheck(int argc, char **argv)
                        goto print_usage;
                }
        }
-       argc -= optind;
-       argv += optind;
 
-       if (argc < 1) {
+       if (argc <= 1) {
        print_usage:
                com_err(argv[0], 0, "Usage: ncheck [-c] <inode number> ...");
                return;
@@ -122,6 +122,8 @@ void do_ncheck(int argc, char **argv)
        if (check_fs_open(argv[0]))
                return;
 
+       argc -= optind;
+       argv += optind;
        iw.iarray = malloc(sizeof(ext2_ino_t) * argc);
        if (!iw.iarray) {
                com_err("ncheck", ENOMEM,
@@ -130,15 +132,22 @@ void do_ncheck(int argc, char **argv)
        }
        memset(iw.iarray, 0, sizeof(ext2_ino_t) * argc);
 
+       iw.names_left = 0;
        for (i=0; i < argc; i++) {
                iw.iarray[i] = strtol(argv[i], &tmp, 0);
                if (*tmp) {
-                       com_err(argv[0], 0, "Bad inode - %s", argv[i]);
+                       com_err("ncheck", 0, "Bad inode - %s", argv[i]);
                        goto error_out;
                }
+               if (debugfs_read_inode(iw.iarray[i], &inode, *argv))
+                       goto error_out;
+               if (LINUX_S_ISDIR(inode.i_mode))
+                       iw.names_left += 1;
+               else
+                       iw.names_left += inode.i_links_count;
        }
 
-       iw.num_inodes = iw.inodes_left = argc;
+       iw.num_inodes = argc;
 
        retval = ext2fs_open_inode_scan(current_fs, 0, &scan);
        if (retval) {
@@ -182,7 +191,7 @@ void do_ncheck(int argc, char **argv)
                        goto next;
                }
 
-               if (iw.inodes_left == 0)
+               if (iw.names_left == 0)
                        break;
 
        next:
index 0b7c2ee..f792bd7 100644 (file)
@@ -102,7 +102,8 @@ static int list_quota_callback(struct dquot *dq,
        return 0;
 }
 
-void do_list_quota(int argc, char *argv[])
+void do_list_quota(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                  void *infop EXT2FS_ATTR((unused)))
 {
        errcode_t       retval;
        int             type;
@@ -131,7 +132,8 @@ void do_list_quota(int argc, char *argv[])
        }
 }
 
-void do_get_quota(int argc, char *argv[])
+void do_get_quota(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        int             err, type;
        struct quota_handle *qh;
index ff9b7b6..b001579 100644 (file)
@@ -53,6 +53,7 @@ static int array_idx;
 
 #define FLAG_ARRAY     0x0001
 #define FLAG_ALIAS     0x0002  /* Data intersects with other field */
+#define FLAG_CSUM      0x0004
 
 struct field_set_info {
        const char      *name;
@@ -69,14 +70,19 @@ static errcode_t parse_int(struct field_set_info *info, char *field, char *arg);
 static errcode_t parse_string(struct field_set_info *info, char *field, char *arg);
 static errcode_t parse_uuid(struct field_set_info *info, char *field, char *arg);
 static errcode_t parse_hashalg(struct field_set_info *info, char *field, char *arg);
+static errcode_t parse_encoding(struct field_set_info *info, char *field, char *arg);
 static errcode_t parse_time(struct field_set_info *info, char *field, char *arg);
 static errcode_t parse_bmap(struct field_set_info *info, char *field, char *arg);
 static errcode_t parse_gd_csum(struct field_set_info *info, char *field, char *arg);
+static errcode_t parse_inode_csum(struct field_set_info *info, char *field,
+                                 char *arg);
 static errcode_t parse_mmp_clear(struct field_set_info *info, char *field,
                                 char *arg);
 
+#if __GNUC_PREREQ (4, 6) || defined(__clang__)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#endif
 
 static struct field_set_info super_fields[] = {
        { "inodes_count", &set_sb.s_inodes_count, NULL, 4, parse_uint },
@@ -154,7 +160,7 @@ static struct field_set_info super_fields[] = {
        { "usr_quota_inum", &set_sb.s_usr_quota_inum, NULL, 4, parse_uint },
        { "grp_quota_inum", &set_sb.s_grp_quota_inum, NULL, 4, parse_uint },
        { "prj_quota_inum", &set_sb.s_prj_quota_inum, NULL, 4, parse_uint },
-       { "overhead_blocks", &set_sb.s_overhead_blocks, NULL, 4, parse_uint },
+       { "overhead_clusters", &set_sb.s_overhead_clusters, NULL, 4, parse_uint },
        { "backup_bgs", &set_sb.s_backup_bgs[0], NULL, 4, parse_uint,
          FLAG_ARRAY, 2 },
        { "checksum", &set_sb.s_checksum, NULL, 4, parse_uint },
@@ -176,6 +182,7 @@ static struct field_set_info super_fields[] = {
        { "encrypt_pw_salt", &set_sb.s_encrypt_pw_salt, NULL, 16, parse_uuid },
        { "lpf_ino", &set_sb.s_lpf_ino, NULL, 4, parse_uint },
        { "checksum_seed", &set_sb.s_checksum_seed, NULL, 4, parse_uint },
+       { "encoding", &set_sb.s_encoding, NULL, 2, parse_encoding },
        { 0, 0, 0, 0 }
 };
 
@@ -212,12 +219,11 @@ static struct field_set_info inode_fields[] = {
        /* Special case: i_file_acl_high is 2 bytes */
        { "file_acl", &set_inode.i_file_acl, 
                &set_inode.osd2.linux2.l_i_file_acl_high, 6, parse_uint },
-       { "dir_acl", &set_inode.i_dir_acl, NULL, 4, parse_uint, FLAG_ALIAS },
        { "faddr", &set_inode.i_faddr, NULL, 4, parse_uint },
        { "frag", &set_inode.osd2.hurd2.h_i_frag, NULL, 1, parse_uint, FLAG_ALIAS },
        { "fsize", &set_inode.osd2.hurd2.h_i_fsize, NULL, 1, parse_uint },
        { "checksum", &set_inode.osd2.linux2.l_i_checksum_lo, 
-               &set_inode.i_checksum_hi, 2, parse_uint },
+               &set_inode.i_checksum_hi, 2, parse_inode_csum, FLAG_CSUM },
        { "author", &set_inode.osd2.hurd2.h_i_author, NULL,
                4, parse_uint, FLAG_ALIAS },
        { "extra_isize", &set_inode.i_extra_isize, NULL,
@@ -290,7 +296,9 @@ static struct field_set_info mmp_fields[] = {
        { "checksum", &set_mmp.mmp_checksum, NULL, 4, parse_uint },
        { 0, 0, 0, 0 }
 };
+#if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic pop
+#endif
 
 #ifdef UNITTEST
 
@@ -430,7 +438,7 @@ static struct field_set_info *find_field(struct field_set_info *fields,
 
 /*
  * Note: info->size == 6 is special; this means a base size 4 bytes,
- * and secondiory (high) size of 2 bytes.  This is needed for the
+ * and secondary (high) size of 2 bytes.  This is needed for the
  * special case of i_blocks_high and i_file_acl_high.
  */
 static errcode_t parse_uint(struct field_set_info *info, char *field,
@@ -479,10 +487,7 @@ static errcode_t parse_uint(struct field_set_info *info, char *field,
        n = num & mask;
        switch (size) {
        case 8:
-               /* 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;
+               *u.ptr64 = n;
                break;
        case 4:
                *u.ptr32 = n;
@@ -496,13 +501,16 @@ static errcode_t parse_uint(struct field_set_info *info, char *field,
        }
        if (!field2)
                return 0;
-       n = num >> (size*8);
+       n = (size == 8) ? 0 : (num >> (size*8));
        u.ptr8 = (__u8 *) field2;
        if (info->size == 6)
                size = 2;
        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;
@@ -625,6 +633,19 @@ static errcode_t parse_hashalg(struct field_set_info *info,
        return 0;
 }
 
+static errcode_t parse_encoding(struct field_set_info *info,
+                               char *field EXT2FS_ATTR((unused)), char *arg)
+{
+       int     encoding;
+       unsigned char   *p = (unsigned char *) info->ptr;
+
+       encoding = e2p_str2encoding(arg);
+       if (encoding < 0)
+               return parse_uint(info, field, arg);
+       *p = encoding;
+       return 0;
+}
+
 static errcode_t parse_bmap(struct field_set_info *info,
                            char *field EXT2FS_ATTR((unused)), char *arg)
 {
@@ -662,6 +683,67 @@ static errcode_t parse_gd_csum(struct field_set_info *info, char *field,
        return parse_uint(info, field, arg);
 }
 
+static errcode_t parse_inode_csum(struct field_set_info *info, char *field,
+                                 char *arg)
+{
+       errcode_t       retval = 0;
+       __u32           crc;
+       int             is_large_inode = 0;
+
+       if (strcmp(arg, "calc") == 0) {
+               size_t sz = EXT2_INODE_SIZE(current_fs->super);
+               struct ext2_inode_large *tmp_inode = NULL;
+
+               retval = ext2fs_get_mem(sz, &tmp_inode);
+               if (retval)
+                       goto out;
+
+               retval = ext2fs_read_inode_full(current_fs, set_ino,
+                                    (struct ext2_inode *) tmp_inode,
+                                    sz);
+               if (retval)
+                       goto out;
+
+#ifdef WORDS_BIGENDIAN
+               ext2fs_swap_inode_full(current_fs, tmp_inode,
+                                      tmp_inode, 1, sz);
+#endif
+
+               if (sz > EXT2_GOOD_OLD_INODE_SIZE)
+                       is_large_inode = 1;
+
+               retval = ext2fs_inode_csum_set(current_fs, set_ino,
+                                              tmp_inode);
+               if (retval)
+                       goto out;
+#ifdef WORDS_BIGENDIAN
+               crc = set_inode.i_checksum_lo =
+                       ext2fs_swab16(tmp_inode->i_checksum_lo);
+
+#else
+               crc = set_inode.i_checksum_lo = tmp_inode->i_checksum_lo;
+#endif
+               if (is_large_inode &&
+                   set_inode.i_extra_isize >=
+                               (offsetof(struct ext2_inode_large,
+                                         i_checksum_hi) -
+                                EXT2_GOOD_OLD_INODE_SIZE)) {
+#ifdef WORDS_BIGENDIAN
+                       set_inode.i_checksum_lo =
+                               ext2fs_swab16(tmp_inode->i_checksum_lo);
+#else
+                       set_inode.i_checksum_hi = tmp_inode->i_checksum_hi;
+#endif
+                       crc |= ((__u32)set_inode.i_checksum_hi) << 16;
+               }
+               printf("Checksum set to 0x%08x\n", crc);
+       out:
+               ext2fs_free_mem(&tmp_inode);
+               return retval;
+       }
+       return parse_uint(info, field, arg);
+}
+
 static void print_possible_fields(struct field_set_info *fields)
 {
        struct field_set_info *ss;
@@ -720,7 +802,8 @@ static void print_possible_fields(struct field_set_info *fields)
 }
 
 
-void do_set_super(int argc, char *argv[])
+void do_set_super(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        const char *usage = "<field> <value>\n"
                "\t\"set_super_value -l\" will list the names of "
@@ -747,7 +830,8 @@ void do_set_super(int argc, char *argv[])
        }
 }
 
-void do_set_inode(int argc, char *argv[])
+void do_set_inode(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        const char *usage = "<inode> <field> <value>\n"
                "\t\"set_inode_field -l\" will list the names of "
@@ -772,23 +856,28 @@ void do_set_inode(int argc, char *argv[])
        if (!set_ino)
                return;
 
-       if (debugfs_read_inode_full(set_ino,
-                       (struct ext2_inode *) &set_inode, argv[1],
-                                   sizeof(set_inode)))
+       if (debugfs_read_inode2(set_ino,
+                               (struct ext2_inode *) &set_inode, argv[1],
+                               sizeof(set_inode),
+                               (ss->flags & FLAG_CSUM) ?
+                               READ_INODE_NOCSUM : 0))
                return;
 
        if (ss->func(ss, argv[2], argv[3]) == 0) {
-               if (debugfs_write_inode_full(set_ino, 
-                            (struct ext2_inode *) &set_inode,
-                            argv[1], sizeof(set_inode)))
-                       return;
+               debugfs_write_inode2(set_ino,
+                                    (struct ext2_inode *) &set_inode,
+                                    argv[1], sizeof(set_inode),
+                                    (ss->flags & FLAG_CSUM) ?
+                                    WRITE_INODE_NOCSUM : 0);
        }
 }
 
-void do_set_block_group_descriptor(int argc, char *argv[])
+void do_set_block_group_descriptor(int argc, char *argv[],
+                                  int sci_idx EXT2FS_ATTR((unused)),
+                                  void *infop EXT2FS_ATTR((unused)))
 {
        const char *usage = "<bg number> <field> <value>\n"
-               "\t\"set_block_group_descriptor -l\" will list the names of "
+               "\t\"set_block_group -l\" will list the names of "
                "the fields in a block group descriptor\n\twhich can be set.";
        struct field_set_info   *table;
        struct field_set_info   *ss;
@@ -819,7 +908,7 @@ void do_set_block_group_descriptor(int argc, char *argv[])
                return;
        }
 
-       if (common_args_process(argc, argv, 4, 4, "set_block_group_descriptor",
+       if (common_args_process(argc, argv, 4, 4, "set_block_group",
                                usage, CHECK_FS_RW))
                return;
 
@@ -863,7 +952,8 @@ static errcode_t parse_mmp_clear(struct field_set_info *info,
 }
 
 #ifdef CONFIG_MMP
-void do_set_mmp_value(int argc, char *argv[])
+void do_set_mmp_value(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                     void *infop EXT2FS_ATTR((unused)))
 {
        const char *usage = "<field> <value>\n"
                "\t\"set_mmp_value -l\" will list the names of "
@@ -922,7 +1012,9 @@ void do_set_mmp_value(int argc, char *argv[])
 }
 #else
 void do_set_mmp_value(int argc EXT2FS_ATTR((unused)),
-                     char *argv[] EXT2FS_ATTR((unused)))
+                     char *argv[] EXT2FS_ATTR((unused)),
+                     int sci_idx EXT2FS_ATTR((unused)),
+                     void *infop EXT2FS_ATTR((unused)))
 {
        fprintf(stdout, "MMP is unsupported, please recompile with "
                        "--enable-mmp\n");
index 4cb1191..a6b44b5 100644 (file)
@@ -25,7 +25,9 @@ extern char *optarg;
 
 #include "debugfs.h"
 
-void do_dump_unused(int argc EXT2FS_ATTR((unused)), char **argv)
+void do_dump_unused(int argc EXT2FS_ATTR((unused)), char **argv,
+                   int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        blk64_t         blk;
        unsigned char   buf[EXT2_MAX_BLOCK_SIZE];
index bd5de79..fb05e89 100644 (file)
@@ -119,7 +119,7 @@ ext2_ino_t string_to_inode(char *str)
         */
        if ((len > 2) && (str[0] == '<') && (str[len-1] == '>')) {
                ino = strtoul(str+1, &end, 0);
-               if (*end=='>')
+               if (*end=='>' && (ino <= current_fs->super->s_inodes_count))
                        return ino;
        }
 
@@ -128,6 +128,11 @@ ext2_ino_t string_to_inode(char *str)
                com_err(str, retval, 0);
                return 0;
        }
+       if (ino > current_fs->super->s_inodes_count) {
+               com_err(str, 0, "resolves to an illegal inode number: %u\n",
+                       ino);
+               return 0;
+       }
        return ino;
 }
 
@@ -205,7 +210,7 @@ char *time_to_string(__s64 cl)
        const char      *tz;
 
        if (do_gmt == -1) {
-               /* The diet libc doesn't respect the TZ environemnt variable */
+               /* The diet libc doesn't respect the TZ environment variable */
                tz = ss_safe_getenv("TZ");
                if (!tz)
                        tz = "";
@@ -415,12 +420,12 @@ int common_block_args_process(int argc, char *argv[],
        return 0;
 }
 
-int debugfs_read_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
-                       const char *cmd, int bufsize)
+int debugfs_read_inode2(ext2_ino_t ino, struct ext2_inode * inode,
+                       const char *cmd, int bufsize, int flags)
 {
        int retval;
 
-       retval = ext2fs_read_inode_full(current_fs, ino, inode, bufsize);
+       retval = ext2fs_read_inode2(current_fs, ino, inode, bufsize, flags);
        if (retval) {
                com_err(cmd, retval, "while reading inode %u", ino);
                return 1;
@@ -441,15 +446,14 @@ int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode * inode,
        return 0;
 }
 
-int debugfs_write_inode_full(ext2_ino_t ino,
-                            struct ext2_inode *inode,
-                            const char *cmd,
-                            int bufsize)
+int debugfs_write_inode2(ext2_ino_t ino,
+                        struct ext2_inode *inode,
+                        const char *cmd,
+                        int bufsize, int flags)
 {
        int retval;
 
-       retval = ext2fs_write_inode_full(current_fs, ino,
-                                        inode, bufsize);
+       retval = ext2fs_write_inode2(current_fs, ino, inode, bufsize, flags);
        if (retval) {
                com_err(cmd, retval, "while writing inode %u", ino);
                return 1;
@@ -541,10 +545,8 @@ errcode_t read_list(char *str, blk64_t **list, size_t *len)
                        goto err;
                }
                l = realloc(lst, sizeof(blk64_t) * (ln + y - x + 1));
-               if (l == NULL) {
-                       retval = ENOMEM;
-                       goto err;
-               }
+               if (l == NULL)
+                       return ENOMEM;
                lst = l;
                for (; x <= y; x++)
                        lst[ln++] = x;
@@ -558,3 +560,38 @@ err:
        free(lst);
        return retval;
 }
+
+void do_byte_hexdump(FILE *fp, unsigned char *buf, size_t bufsize)
+{
+       size_t          i, j, max;
+       int             suppress = -1;
+
+       for (i = 0; i < bufsize; i += 16) {
+               max = (bufsize - i > 16) ? 16 : bufsize - i;
+               if (suppress < 0) {
+                       if (i && memcmp(buf + i, buf + i - max, max) == 0) {
+                               suppress = i;
+                               fprintf(fp, "*\n");
+                               continue;
+                       }
+               } else {
+                       if (memcmp(buf + i, buf + suppress, max) == 0)
+                               continue;
+                       suppress = -1;
+               }
+               fprintf(fp, "%04o  ", (unsigned int)i);
+               for (j = 0; j < 16; j++) {
+                       if (j < max)
+                               fprintf(fp, "%02x", buf[i+j]);
+                       else
+                               fprintf(fp, "  ");
+                       if ((j % 2) == 1)
+                               fprintf(fp, " ");
+               }
+               fprintf(fp, " ");
+               for (j = 0; j < max; j++)
+                       fprintf(fp, "%c", isprint(buf[i+j]) ? buf[i+j] : '.');
+               fprintf(fp, "\n");
+       }
+       fprintf(fp, "\n");
+}
index 2443518..bd11450 100644 (file)
@@ -117,7 +117,8 @@ out:
        err = ext2fs_xattrs_close(&h);
 }
 
-void do_list_xattr(int argc, char **argv)
+void do_list_xattr(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                  void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t ino;
 
@@ -137,7 +138,8 @@ void do_list_xattr(int argc, char **argv)
        dump_inode_attributes(stdout, ino);
 }
 
-void do_get_xattr(int argc, char **argv)
+void do_get_xattr(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t ino;
        struct ext2_xattr_handle *h;
@@ -146,7 +148,7 @@ void do_get_xattr(int argc, char **argv)
        size_t buflen;
        int i;
        int print_flags = 0;
-       int handle_flags = 0;
+       unsigned int handle_flags = 0;
        errcode_t err;
 
        reset_getopt();
@@ -234,15 +236,15 @@ out2:
                fclose(fp);
 }
 
-void do_set_xattr(int argc, char **argv)
+void do_set_xattr(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                 void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t ino;
        struct ext2_xattr_handle *h;
        FILE *fp = NULL;
        char *buf = NULL;
        size_t buflen;
-       int print_flags = 0;
-       int handle_flags = 0;
+       unsigned int handle_flags = 0;
        int i;
        errcode_t err;
 
@@ -268,7 +270,7 @@ void do_set_xattr(int argc, char **argv)
 
        if (!(fp && optind == argc - 2) && !(!fp && optind == argc - 3)) {
        print_usage:
-               printf("Usage:\t%s <file> <attr> <value>\n", argv[0]);
+               printf("Usage:\t%s [-r] <file> <attr> <value>\n", argv[0]);
                printf("\t%s -f <value_file> [-r] <file> <attr>\n", argv[0]);
                goto out2;
        }
@@ -307,13 +309,6 @@ void do_set_xattr(int argc, char **argv)
        }
 
        err = ext2fs_xattr_set(h, argv[optind + 1], buf, buflen);
-       if (err)
-               goto out;
-
-       err = ext2fs_xattrs_write(h);
-       if (err)
-               goto out;
-
 out:
        ext2fs_xattrs_close(&h);
        if (err)
@@ -325,7 +320,8 @@ out2:
        }
 }
 
-void do_rm_xattr(int argc, char **argv)
+void do_rm_xattr(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t ino;
        struct ext2_xattr_handle *h;
@@ -361,12 +357,147 @@ void do_rm_xattr(int argc, char **argv)
                if (err)
                        goto out;
        }
-
-       err = ext2fs_xattrs_write(h);
-       if (err)
-               goto out;
 out:
        ext2fs_xattrs_close(&h);
        if (err)
                com_err(argv[0], err, "while removing extended attribute");
 }
+
+/*
+ * Return non-zero if the string has a minimal number of non-printable
+ * characters.
+ */
+static int is_mostly_printable(const char *cp, int len)
+{
+       int     np = 0;
+
+       if (len < 0)
+               len = strlen(cp);
+
+       while (len--) {
+               if (!isprint(*cp++)) {
+                       np++;
+                       if (np > 3)
+                               return 0;
+               }
+       }
+       return 1;
+}
+
+static void safe_print(FILE *f, const char *cp, int len)
+{
+       unsigned char   ch;
+
+       if (len < 0)
+               len = strlen(cp);
+
+       while (len--) {
+               ch = *cp++;
+               if (ch > 128) {
+                       fputs("M-", f);
+                       ch -= 128;
+               }
+               if ((ch < 32) || (ch == 0x7f)) {
+                       fputc('^', f);
+                       ch ^= 0x40; /* ^@, ^A, ^B; ^? for DEL */
+               }
+               fputc(ch, f);
+       }
+}
+
+static void dump_xattr_raw_entries(FILE *f, unsigned char *buf,
+                                  unsigned int start, unsigned int len,
+                                  unsigned value_start)
+{
+       struct ext2_ext_attr_entry ent;
+       unsigned int off = start;
+       unsigned int vstart;
+
+       while (off < len) {
+               if ((*(__u16 *) (buf + off)) == 0) {
+                       fprintf(f, "last entry found at offset %u (%04o)\n",
+                               off, off);
+                       break;
+               }
+               if ((off + sizeof(struct ext2_ext_attr_entry)) >= len) {
+                       fprintf(f, "xattr buffer overrun at %u (len = %u)\n",
+                               off, len);
+                       break;
+               }
+#if WORDS_BIGENDIAN
+               ext2fs_swap_ext_attr_entry(&ent,
+                       (struct ext2_ext_attr_entry *) (buf + off));
+#else
+               ent = *((struct ext2_ext_attr_entry *) (buf + off));
+#endif
+               fprintf(f, "offset = %d (%04o), name_len = %u, "
+                       "name_index = %u\n",
+                       off, off, ent.e_name_len, ent.e_name_index);
+               vstart = value_start + ent.e_value_offs;
+               fprintf(f, "value_offset = %d (%04o), value_inum = %u, "
+                       "value_size = %u\n", ent.e_value_offs,
+                       vstart, ent.e_value_inum, ent.e_value_size);
+               off += sizeof(struct ext2_ext_attr_entry);
+               fprintf(f, "name = ");
+               if ((off + ent.e_name_len) >= len)
+                       fprintf(f, "<runs off end>");
+               else
+                       safe_print(f, (char *)(buf + off), ent.e_name_len);
+               fputc('\n', f);
+               if (ent.e_value_size == 0)
+                       goto skip_value;
+               fprintf(f, "value = ");
+               if (ent.e_value_inum)
+                       fprintf(f, "<ino %u>", ent.e_value_inum);
+               else if (ent.e_value_offs >= len ||
+                        (vstart + ent.e_value_size) > len)
+                       fprintf(f, "<runs off end>");
+               else if (is_mostly_printable((char *)(buf + vstart),
+                                       ent.e_value_size))
+                       safe_print(f, (char *)(buf + vstart),
+                                  ent.e_value_size);
+               else {
+                       fprintf(f, "<hexdump>\n");
+                       do_byte_hexdump(f, (unsigned char *)(buf + vstart),
+                                       ent.e_value_size);
+               }
+               fputc('\n', f);
+       skip_value:
+               fputc('\n', f);
+               off += (ent.e_name_len + 3) & ~3;
+       }
+}
+
+void raw_inode_xattr_dump(FILE *f, unsigned char *buf, unsigned int len)
+{
+       __u32 magic = ext2fs_le32_to_cpu(*((__le32 *) buf));
+
+       fprintf(f, "magic = %08x, length = %u, value_start =4 \n\n",
+               magic, len);
+       if (magic == EXT2_EXT_ATTR_MAGIC)
+               dump_xattr_raw_entries(f, buf, 4, len, 4);
+}
+
+void block_xattr_dump(FILE *f, unsigned char *buf, unsigned int len)
+{
+       struct ext2_ext_attr_header header;
+
+#ifdef WORDS_BIGENDIAN
+       ext2fs_swap_ext_attr_header(&header,
+                                   (struct ext2_ext_attr_header *) buf);
+#else
+       header = *((struct ext2_ext_attr_header *) buf);
+#endif
+       fprintf(f, "magic = %08x, length = %u\n", header.h_magic, len);
+       if (header.h_magic != EXT2_EXT_ATTR_MAGIC)
+               return;
+       fprintf(f, "refcount = %u, blocks = %u\n", header.h_refcount,
+               header.h_blocks);
+       fprintf(f, "hash = %08x, checksum = %08x\n", header.h_hash,
+               header.h_checksum);
+       fprintf(f, "reserved: %08x %08x %08x\n\n", header.h_reserved[0],
+               header.h_reserved[1], header.h_reserved[2]);
+
+       dump_xattr_raw_entries(f, buf,
+                              sizeof(struct ext2_ext_attr_header), len, 0);
+}
index 0a1ae9b..f120377 100644 (file)
@@ -25,7 +25,8 @@ extern char *optarg;
 
 #include "debugfs.h"
 
-void do_zap_block(int argc, char *argv[])
+void do_zap_block(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        unsigned long   pattern = 0;
        unsigned char   *buf;
@@ -167,25 +168,29 @@ errout:
        return;
 }
 
-void do_block_dump(int argc, char *argv[])
+void do_block_dump(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        unsigned char   *buf;
        ext2_ino_t      inode;
        errcode_t       errcode;
        blk64_t         block;
        char            *file = NULL;
+       int             xattr_dump = 0;
        int             c, err;
 
        if (check_fs_open(argv[0]))
                return;
 
        reset_getopt();
-       while ((c = getopt (argc, argv, "f:")) != EOF) {
+       while ((c = getopt (argc, argv, "f:x")) != EOF) {
                switch (c) {
                case 'f':
                        file = optarg;
                        break;
-
+               case 'x':
+                       xattr_dump = 1;
+                       break;
                default:
                        goto print_usage;
                }
@@ -193,7 +198,7 @@ void do_block_dump(int argc, char *argv[])
 
        if (argc != optind + 1) {
        print_usage:
-               com_err(0, 0, "Usage: block_dump [-f inode] block_num");
+               com_err(0, 0, "Usage: block_dump [-x] [-f inode] block_num");
                return;
        }
 
@@ -227,38 +232,10 @@ void do_block_dump(int argc, char *argv[])
                goto errout;
        }
 
-       do_byte_hexdump(stdout, buf, current_fs->blocksize);
+       if (xattr_dump)
+               block_xattr_dump(stdout, buf, current_fs->blocksize);
+       else
+               do_byte_hexdump(stdout, buf, current_fs->blocksize);
 errout:
        free(buf);
 }
-
-void do_byte_hexdump(FILE *fp, unsigned char *buf, size_t bufsize)
-{
-       size_t          i, j;
-       int             suppress = -1;
-
-       for (i = 0; i < bufsize; i += 16) {
-               if (suppress < 0) {
-                       if (i && memcmp(buf + i, buf + i - 16, 16) == 0) {
-                               suppress = i;
-                               fprintf(fp, "*\n");
-                               continue;
-                       }
-               } else {
-                       if (memcmp(buf + i, buf + suppress, 16) == 0)
-                               continue;
-                       suppress = -1;
-               }
-               fprintf(fp, "%04o  ", (unsigned int)i);
-               for (j = 0; j < 16; j++) {
-                       fprintf(fp, "%02x", buf[i+j]);
-                       if ((j % 2) == 1)
-                               fprintf(fp, " ");
-               }
-               fprintf(fp, " ");
-               for (j = 0; j < 16; j++)
-                       fprintf(fp, "%c", isprint(buf[i+j]) ? buf[i+j] : '.');
-               fprintf(fp, "\n");
-       }
-       fprintf(fp, "\n");
-}
index 9cb584c..a359453 100644 (file)
@@ -8,6 +8,7 @@ VPATH = @srcdir@
 top_builddir = ..
 my_dir = doc
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
@@ -21,14 +22,14 @@ all:: libext2fs.info libext2fs.dvi libext2fs.html
 
 install-doc-libs: libext2fs.info libext2fs.dvi
        $(Q) $(RM) -rf $(DESTDIR)$(infodir)/libext2fs.info*
-       $(E) "  MKINSTALLDIRS $(infodir)"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(infodir)
+       $(E) "  MKDIR_P $(infodir)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(infodir)
        -$(Q) for i in libext2fs.info* ; do \
                echo "  INSTALL_DATA $(infodir)/$$i" ; \
                $(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i ; \
        done
        $(E) "  GZIP $(infodir)/libext2fs.info*"
-       -$(Q) gzip -9 $(DESTDIR)$(infodir)/libext2fs.info*
+       -$(Q) gzip -9n $(DESTDIR)$(infodir)/libext2fs.info*
 
 uninstall-doc-libs:
        $(RM) -rf $(DESTDIR)$(infodir)/libext2fs.info*
diff --git a/doc/RelNotes/v1.02.txt b/doc/RelNotes/v1.02.txt
new file mode 100644 (file)
index 0000000..27dce52
--- /dev/null
@@ -0,0 +1,25 @@
+E2fsprogs 1.02 (January 16, 1996)
+=================================
+
+Fix to allow e2fsprogs to be compiled on recent 1.3 (pl45+) kernels.
+
+Change e2fsck to print statistics of how many non-contiguous files are
+on the system.  Note that a file which is larger than 8k blocks, it is
+guaranteed to be non-contiguous.
+
+In mke2fs, print a warning message if a user tries to format a whole
+disk (/dev/hda versus /dev/hda1).  If a user really wants to format a
+whole disk, the -F (force) option forces mke2fs to format a whole disk
+as a filesystem.
+
+Fix a bug in fsck where in some cases it might start checking
+partitions in the next pass before it finishes checking partitions in
+the current pass.  This still won't cause two partitions on the same
+disk will be checked, so it's rarely a problem in real life.
+
+Patch lsattr so that it won't hang when checking a named pipe.
+
+Minor compilation fixes:
+       * Fix the order of libraries that were linked in debugfs.
+       * Allow the sources to be compiled with -ansi turned on.
+
diff --git a/doc/RelNotes/v1.03.txt b/doc/RelNotes/v1.03.txt
new file mode 100644 (file)
index 0000000..3e6b25e
--- /dev/null
@@ -0,0 +1,33 @@
+E2fsprogs 1.03 (March 27, 1996)
+===============================
+
+Change the m68k bit numbering for bitmasks to match the bit numbering
+used by all other ext2 implementations.  (This change was requested by
+the m68k kernel development team.)
+
+Support (in-development) filesystem format revision which supports
+(among other things) dynamically sized inodes.
+
+Fixed a bug in the ext2 library so that an intelligent error is
+returned if mke2fs is run with a ridiculously small number of blocks
+for a partition.
+
+Fixed a bug in the ext2 library which required that the device be
+openable in read/write mode in order to determine its size.  This
+caused e2fsck -n to require read/write access when it was not
+previously necessary.
+
+Fixed a bug in e2fsck which caused it to occasionally fail the test
+suite depending on which version of the floating point library it was
+using.
+
+Fixed a bug in e2fsck so that it now halts with a fatal error when
+certain superblock consistency checks fail.  Previously it continued
+running e2fsck, with some potential confusing/damaging consequences.
+
+Added new flag to fsck which allows the root to be checked in parallel
+with other filesystems.  This is not the safest thing in the world to
+do, but some system administrators really wanted it.
+
+Fixed -Wall flames in lib/ss.
+
diff --git a/doc/RelNotes/v1.04.txt b/doc/RelNotes/v1.04.txt
new file mode 100644 (file)
index 0000000..0120c90
--- /dev/null
@@ -0,0 +1,49 @@
+E2fsprogs 1.04 (May 16, 1996)
+=============================
+
+First "official" (1.03 was a limited release only) to support building
+e2fsprogs under Linux 2.0 kernels (as well as late model 1.3 and 1.99
+kernels).
+
+This package includes a RPM specs file, that it can be built using the
+RedHat Package Manager.
+
+E2fsck now prints a hint that if there are lots of incorrectly located
+inode bitmaps, block bitmaps, and inode table blocks, the user might
+want to try using e2fsck -b 8193 first, to see if that fares any
+better.
+
+For ext2 filesystem written with the hurd, debugfs will now print out
+the translator field when printing an inode structure.
+
+Lots of miscellaneous linking/installation cleanups:
+
+  Libraries are now linked using a relative pathname, instead of
+  relying on -L working correct.  It doesn't, in many cases, including
+  current versions of GNU ld.  This guarantees that the build tree is
+  linking with the right libraries, instead of the ones installed in
+  /usr/lib.
+
+  Header files, man pages, and the et/ss shell scripts are now
+  generated using a custom substitution script, instead of relying on
+  the configure script.  This prevents needless recompilation of
+  files; in addition, the custom substitution script is much faster.
+
+  e2fsck may now be linked dynamically, by using the
+  --enable-dynamic-e2fsck flag to configure.  This is not recommended,
+  since it increases e2fsck's dependence on other files, but some
+  people need to save disk space, and other critical programs on their
+  systems were being linked dynamically anyway.
+
+  Programs such as fsck which didn't need to be linked against
+  libext2fs (or mke2fs which didn't need to be linked against libe2p)
+  only link against libraries they actually need.  Otherwise, those
+  programs would require the presence of libraries that otherwise
+  could be removed from a rescue diskette.
+
+  The ss include files are now installed correctly so they can
+  actually be used by another package.
+
+  If the profiling libraries are built, they are now installed on a
+  "make install-libs".
+
diff --git a/doc/RelNotes/v1.05.txt b/doc/RelNotes/v1.05.txt
new file mode 100644 (file)
index 0000000..b1d22c1
--- /dev/null
@@ -0,0 +1,104 @@
+E2fsprogs 1.05 (September 7, 1996)
+==================================
+
+Add support for new fields in the ext2 superblock --- volume name,
+volume UUID, and last mounted field.  Dumpe2fs displays these fields,
+tune2fs and mke2fs allows you to set them.  E2fsck will automatically
+generate a UUID for those volumes that don't have them.  
+
+Put in support for e2fsck to recognize HURD specific ext2 features ---
+most notably, the translator block.  The e2fsprogs tools will now use
+the creator_os field in the superblock to correctly handle different
+OS-specific variants of the ext2 filesystem.
+
+E2fsck now fixes inodes which have a the deletion time set, but which
+have a non-zero i_link_count field by offering to clear the deletion
+time.  Previously e2fsck assumed that the inode was deleted (per 0.3c
+ext2 kernel behavior) and offered to unlink the file.
+
+If e2fsck sets the clean bit, but nothing else, set the exit code
+FSCK_NONDESTRUCT.  After all, e2fsck did fix a filesystem error --- it
+set the filesystem valid bit when it was previously cleared.  :-) This
+was needed to make the HURD fsck driver happy.
+
+If the  user  refuses to attach an  unattached  inode, e2fsck  will no
+longer set the inode's link count.  Otherwise, the  inode would end up
+getting marked as unused, which might cause loss of data later.
+
+Make the message issued by e2fsck when the superblock is corrupt less
+confusing for users.  It now mentions that another reason for the
+"corrupt superblock" message might be that the partition might not be
+an ext2 filesystem at all (it might swap, msdos filesystem, ufs, etc.)
+
+Make the libext2 library more robust so that e2fsck won't coredump on
+an illegal superblock where the blocksize is zero.  (f_crashdisk is
+the test case).
+
+By default, create filesystems where the default checkinterval is 6
+months (180 days).  Linux servers can be robust enough that 20 reboots
+can be a long, long time.
+
+Added configure flag --enable-old-bitops, which forces the bitops to
+use the old (native) bitmask operations.  By default on the sparc
+platform, the standard ext2 bit ordering is now used.
+
+Added a new feature to e2fsck to byte-swap filesystems; this can be
+used to convert old m68k filesystems to use the standard byte-order
+storage for the superblock, inodes, and directory blocks.  This
+function is invoked by using the '-s' option to e2fsck.
+
+Debugfs's "dump" command has been enhanced so that it writes out the
+exact size of the file so that the nulls at the end of the file are
+eliminated.  The command also accept a new "-p" option which will
+attempt to preserve the ownership, permissions, and file
+modification/access times.
+
+Debugfs has two new options, -f and -R.  The -R option allows the user
+to execute a single debugfs command from the command line.  The -f
+option allows the user to specify a "command file" containing debugfs
+commands which will get executed.
+
+Dumpe2fs now pretty prints the check interval, instead of just
+printing the check interval as a number of seconds.
+
+Fix bugs in debugfs: the params command when no filesystem is opened
+no longer causes a core dump.  It is now possible to unlink a file
+when a pathname containing a '/' is specified.
+
+Tune2fs has a new -C option which sets the number of times the
+filesystem has been mounted.
+
+Fix the chattr '-v' option so that it actually works.  Chattr was
+being buggy about the -v option parsing.
+
+Programmers' notes:
+-------------------
+
+The directory lib/uuid contains a set of library routines to generate
+DCE compatible UUIDs.  
+
+Extended ext2fs_namei() to handle symbolic links.  Added new function
+ext2fs_nami_follow() which will follow last symbolic link in the case
+where the pathname points to a sym link.
+
+The ext2fs_block_iterate function will now return the HURD translator
+block, if present.  The new flag BLOCK_FLAG_DATA_ONLY will cause the
+iterator to return data blocks only.  The ext2fs.h file now defines
+constants BLOCK_COUNT_IND, BLOCK_COUNT_DIND, BLOCK_COUNT_TIND, and
+BLOCK_COUNT_TRANSLATOR, which are the magic values passed in the block
+count field of the iterator callback function.
+
+The test script driver now takes an optional second argument, which is
+the test case to be run.  This allows you to run a test case without
+needing to run the entire test suite.
+
+On Linux ELF systems, install the .so files in the correct places
+(/usr/lib).  The .so files must be stored in the same directory as the
+.a files.
+
+Fixed miscellaneous HURD compilation issues with header file being
+included in the right order.
+
+Fixed debugfs so that it resets optind to zero, not one, since setting
+optind to zero is more correct.
+
diff --git a/doc/RelNotes/v1.06.txt b/doc/RelNotes/v1.06.txt
new file mode 100644 (file)
index 0000000..c6b8c92
--- /dev/null
@@ -0,0 +1,51 @@
+E2fsprogs 1.06 (October 7, 1996)
+================================
+
+Fixed serious bug in e2fsck: if the block descriptors are bad, don't
+smash the backup copies in ext2fs_close().  (The problem was that when
+e2fsck -p discovered the problem, while it was closing the filesystem
+and exiting, it was also blowing away the backup superblocks on the
+disk, which was less than friendly.)  We now make it the case that we
+only write out the backup superblock and the back block descriptors if
+the filesystem is completely free from problems.
+
+Fixed a bug in block_interate in the lib/ext2fs library which caused
+e2fsck to fail on GNU Hurd-created filesystems.
+
+Add support for Linux/FT's bootloader, which actually uses
+EXT2_BOOT_LOADER, and sets its mode bits which caused e2fsck to want
+to clear the inode.
+
+Add support for the "A" (no atime update) attribute.  (Note: this
+attribute is not yet in production kernels.)
+
+The test suite is not automatically run when doing a "make all" from
+the top level directory.  Users should manually run "make check" if
+they wish to run the test suite.
+
+Upon a preenhalt(), make the printed message more explicit that
+running e2fsck "MANUALLY" means without the -p or -a options.
+
+In e2fsck, if a disconnected inode is zero-length, offer to clear it
+instead of offering to connect it to lost+found.
+
+In e2fsck, if a filesystem was just unmounted uncleanly, and needs
+e2fsck to be run over it, change e2fsck to explicitly display this
+fact.
+
+For dumpe2fs and e2fsck, cause the -V option to print out which
+version of the ext2fs library is actually getting used.  (This will
+help detect mismatches of using a 1.06 utility with a 1.05 library,
+etc.)
+
+Programmers' notes:
+-------------------
+
+EXT2_SWAP_BYTES was changed to EXT2_FLAG_SWAP_BYTES, which better fits
+the naming convention.
+
+In ext2fs_initialize(), make sure the description for the inode bitmap
+is correctly initialize.
+
+Fixed minor type typo in ext2fs_allocate_generic_bitmap();
+
diff --git a/doc/RelNotes/v1.07.txt b/doc/RelNotes/v1.07.txt
new file mode 100644 (file)
index 0000000..d780c93
--- /dev/null
@@ -0,0 +1,122 @@
+E2fsprogs 1.07 (March 9, 1997)
+==============================
+
+E2fsck is now uses much less memory when checking really large
+filesystems (or rather, filesystems with a large number of inodes).
+Previously a filesystem with 1 million inodes required 4 megabytes of
+memory to store inode count statistics; that storage requirement has
+now been reduced to roughly half a megabyte.
+
+E2fsck can now properly deal with bad blocks appearing inside the
+inode table.  Instead of trying to relocate the inode table (which
+often failed because there wasn't enough space), the inodes in the bad
+block are marked as in use.
+
+E2fsck will automatically try to use the backup superblocks if the
+primary superblocks have a bad magic number or have missing meta-data
+blocks (or meta-data blocks which are out of range).
+
+E2fsck's pass 3 has been made more efficient; most noticeable on
+filesystems with a very large number of directories.
+
+Completely revamped e2fsck's system of printing problem reports.  It
+is now table driven, to make them more easily customizable and
+extendable.  Error messages which can be printed out during preen mode
+are now one line long.
+
+Fixed e2fsck's filesystem swapping code so that it won't try to swap
+fast symbolic links or deleted files.
+
+Fixed e2fsck core dumping when fixing a filesystem which has no
+directories (not even a root directory).
+
+Added a check to e2fsck to make sure that the length of every
+directory entry is a multiple of 4 (since the kernel complains if it
+isn't).
+
+Added a check to e2fsck to make sure that a directory entry isn't a
+link to the root directory, since that isn't allowed.
+
+Added a check to e2fsck to now make sure the '.' and '..' directory
+entries are null terminated, since the 2.0 kernel requires it.
+
+Added check to write_bitmaps() to make sure the superblock doesn't get
+trashed if the inode or block bitmap is marked as being block zero.
+
+Added checking of the new feature set fields in the superblock, to
+avoid dealing with new filesystem features that this package wasn't
+set up to handle.
+
+Fixed a fencepost error in ext2fs_new_block() which would occasionally
+try to allocate a block beyond the end of a filesystem.
+
+When the UUID library picks a random IEEE 802 address (because it
+can't find one from a network card), it sets the multicast bit, to
+avoid conflicting with a legitimate IEEE 802 address.
+
+Mke2fs now sets the root directory's owner to be the real uid of the
+user running mke2fs.  If the real uid is non-zero, it also sets
+the group ownership of the root directory to be the real group-id of
+the user running mke2fs.
+
+Mke2fs now has more intelligent error checking when it is given a
+non-existent device.
+
+When badblocks is given the -vv option, it now updates the block that
+it is currently testing on every block.
+
+Fixed a bug in fsck where it wouldn't modify the PATH environment
+currently correctly if PATH wasn't already set.
+
+Shared libraries now built with dependencies.  This allows the shared
+library files to be used with dlopen(); it also makes the transition
+to libc 6 easier, since ld.so can tell which libc a particular shared
+library expects to use.
+
+Programmer's notes:
+-------------------
+
+Added new abstraction (defined in dblist.c) for maintaining a list of
+blocks which belongs to directories.  This is used in e2fsck and other
+programs which need to iterate over all directories.
+
+Added new functions which test to see if a contiguous range of blocks
+(or inodes) are available.  (ext2fs_*_bitmap_range).
+
+Added new function (ext2_inode_has_valid_blocks) which returns true if
+an inode has valid blocks.  (moved from e2fsck code).
+
+Added new function (ext2fs_allocate_tables) which allocates the
+meta-data blocks as part of initializing a filesystem.  (moved from
+mke2fs code).
+
+Added a new I/O manager for testing purposes.  It will either allow a
+program to intercept I/O requests, or print debugging messages to
+trace the activity of a program using the I/O manager.
+
+The badblocks_list functions now store the bad blocks in a sorted
+order, and use a binary search to speed up badblocks_list_test.
+
+The inode scan function ext2fs_get_next_inode() may now return a soft
+error returns: MISSING_INODE_TABLE and BAD_BLOCK_IN_INODE_TABLE in
+those cases where part of an inode table is missing or there is a bad
+block in the inode table.  
+
+Added a new function (ext2fs_block_iterate2) which adds new arguments to
+the callback function to return a pointer (block and offset) to the
+reference of the block.
+
+Added new function (ext2fs_inode_scan_goto_blockgroup) which allows an
+application to jump to a particular block group while doing an inode
+scan.
+
+The badblocks list functions were renamed from badblocks_* to
+ext2fs_badblocks_*.  Backwards compatibility functions are available
+for now, but programs should be modified to use the new interface.
+
+Some of the library functions were reorganized into separate files to
+reduce the size of some programs which statically link against the
+ext2 library.
+
+Put in some miscellaneous fixes for the Alpha platform.
+
diff --git a/doc/RelNotes/v1.08.txt b/doc/RelNotes/v1.08.txt
new file mode 100644 (file)
index 0000000..f33ead5
--- /dev/null
@@ -0,0 +1,75 @@
+E2fsprogs 1.08 (April 10, 1997)
+===============================
+
+E2fsck 1.07 was very slow when checking very large filesystems with a
+lot of files that had hard links (i.e., news spools).  This was fixed
+by seriously revamping the icount abstraction.  Added a formal test
+suite for the icount abstraction.
+
+Debugfs now has a "-l" option to the "ls" command, which lists the
+inode number, permissions, owner, group, size, and name of the files
+in the directory.
+
+Fix a bug in e2fsck where when a directory had its blocks moved to
+another location during the pass 1b processing, the directory block
+list wasn't updated, so pass 2 wouldn't check (and correct) the
+correct directory block.
+
+E2fsck will now treat inodes which contain blocks which are claimed by
+the filesystem metadata by treating them as multiply claimed blocks.
+This way, the data in those blocks can be copied to a new block during
+the pass 1b--1d processing.
+
+E2fsck will attempt to determine the correct superblock number and
+display it in the diagnostic and warning messages if possible.
+
+Add support for a new (incompatible) feature, "sparse_super".  This
+feature reduces the number of blocks which contain copies of backup
+superblocks and block group descriptors.  (It is only an incompatible
+feature because of a bug in ext2_free_blocks.)  mke2fs and tune2fs now
+support a new -s option; e2fsck will recognize filesystems built with
+this feature turned on.
+
+E2fsck now checks the library to make sure is the correct version,
+using new library functions.  (This helps to diagnose incorrectly
+installed e2fsprogs distributions.)
+
+Dumpe2fs now prints more information; its now prints the the
+filesystem revision number, the filesystem sparse_super feature (if
+present), the block ranges for each block group, and the offset from
+the beginning of the block group.
+
+Mke2fs now distributes the inode and block bitmap blok so that the
+won't be concentrated in one or two disks in RAID/striping setups.
+Also, if the user chooses a 2k or 4k block group, mke2fs will try to
+choose the largest blocks per group that be chosen.  (For 2k blocks,
+you can have up to 16384 blocks/group; for 4k blocks, you can have up
+to 32768 blocks/group.)  Previously mke2fs would not allow
+specification of more than 8192 blocks per group, even if you were
+using a 2k or 4k block group.
+
+Programmer's notes:
+-------------------
+
+Added a new function ext2fs_create_icount2() which takes a "hint"
+argument.  This hint argument presets the icount array with the list
+of inodes which actually need to be in the icount array.  This really
+helps to speed up e2fsck.
+
+Added a new function ext2fs_icount_validate() which checks the rep
+invariant for the icount structure.  This is used mostly for testing.
+
+The error message given when a bad inode number is passed to
+test_generic_bitmap to reflect EXT2FS_TEST_ERROR (instead of
+EXT2FS_UNMARK_ERROR).
+
+Added a new function ext2fs_set_dir_block which sets the block of a
+dblist entry, given the directory inode and blockcnt.
+
+Added a new function ext2fs_get_library_version() which returns the
+current library version, and ext2fs_parse_version_string() which
+returns a version number based on a e2fsprogs version string.
+
+The icount functions will return EINVAL if the passed in inode number
+is out of bounds.
+
diff --git a/doc/RelNotes/v1.09.txt b/doc/RelNotes/v1.09.txt
new file mode 100644 (file)
index 0000000..415de75
--- /dev/null
@@ -0,0 +1,14 @@
+E2fsprogs 1.09 (April 14, 1997)
+===============================
+
+Fixed bug in mke2fs (really in lib/ext2fs/initialize.c) which was
+accidentally introduced in the 1.08 release.  The overhead calculation
+was accidentally removed, which caused ext2fs_initialize() to not
+notice when the filesystem size needed to be adjusted down because
+there wasn't enough space in the last block group.
+
+Fixed bug in version parsing library routine; it was always parsing
+the library version string, instead of using the passed-in string.
+
+Clarified chattr man page.
+
diff --git a/doc/RelNotes/v1.10.txt b/doc/RelNotes/v1.10.txt
new file mode 100644 (file)
index 0000000..1fa0a5e
--- /dev/null
@@ -0,0 +1,56 @@
+E2fsprogs 1.10 (April 24, 1997)
+===============================
+
+Mke2fs once again defaults to creating revision #0 filesystems, since
+people were complaining about breaking compatibility with 1.2 kernels.
+Warning messages were added to the mke2fs and tune2fs man pages that
+the sparse superblock option isn't supported by most kernels yet (1.2
+and 2.0 both don't support parse superblocks.)
+
+Added new flag to mke2fs, -R <raid options>, which allows the user to
+tell mke2fs about the RAID configuration of the filesystem.  Currently
+the only supported raid option is "stride" which specifies the width
+of the RAID stripe.
+
+Fixed bug in e2fsck where pass1b would bomb out if there were any
+blocks marked bad in the inode table.
+
+Fixed rare bug in mke2fs where if the user had a very unlucky number
+of blocks in a filesystem (probability less than .002) the resulting
+filesystem would be corrupt in the last block group.
+
+Fixed bug where if e2fsck tried to allocate a block to fix a
+filesystem corruption problem and the filesystem had no free blocks,
+ext2fs_new_block() would loop forever.
+
+The configure script now checks explicitly to see if "-static" works,
+since that can't be assumed to be true --- RedHat doesn't install
+libc-static by default.
+
+Fixed bug in libext2's block iterator functions where under some
+circumstances, file with holes would cause the bcount parameter to the
+callback function to be incorrect.  This bug didn't affect any of
+e2fsprogs programs, but it was discovered by Paul Mackerras, the
+author of the PPC boot loader.
+
+Removed use of static variables to store the inode cache in libext2fs.
+This caused problems if more than one filesystem was accessed via
+libext2fs (static variables in libraries are generally a bad idea).
+Again, this didn't affect e2fsprogs programs, but it was discovered by
+Paul Mackerras.
+
+Fixed minor bugs and version code drift to assure that e2fsprogs 1.10
+will compile cleanly with 1.2.13 kernels (even with a.out shared
+libraries!)
+
+Programmer's notes:
+-------------------
+
+Added new functions to duplicate an ext2 filesystem handle, and its
+associated substructure.  New functions: ext2fs_dup_handle(),
+ext2fs_copy_dblist(), ext2fs_badblocks_copy(), ext2fs_copy_bitmap().
+Other structures, such as the io_channel and the inode_cache, now have
+a ref count so that they only get freed when they are no longer used
+by any filesystem handle.  (These functions were added as part of the
+development effort for an ext2 resizer).
+
diff --git a/doc/RelNotes/v1.11.txt b/doc/RelNotes/v1.11.txt
new file mode 100644 (file)
index 0000000..33c89d5
--- /dev/null
@@ -0,0 +1,61 @@
+E2fsprogs 1.11 (June 17, 1997)
+==============================
+
+Fixed e2fsck to detect (previously ignored) conflicts between the
+superblock or block group descriptors and block bitmaps, inode
+bitmaps, and inode tables.
+
+Fixed bug in e2fsck so that when the message printed out when a block
+or inode bitmap conflicts with other data, it has the correct group
+number.
+
+Fixed bug in e2fsck and mke2fs where the blocksize wasn't being passed
+to badblocks.  This meant that not all of the filesystem was being
+tested for bad blocks! 
+
+Fixed an array boundary overrun case which cropped up in
+ext2fs_badblocks_list_test when a user tried running "mke2fs -c 
+-b 4096".
+
+Adjusted the number of columns printed by mke2fs when displaying the
+superblock backups to avoid running over 80 columns when making a
+really big filesystem.
+
+Fixed up the man pages for e2fsck, debugfs, badblocks, chattr,
+dumpe2fs, fsck, mke2fs, and tune2fs (typos and other minor grammar
+fixes), thanks to some suggestions from Bill Hawes (whawes@star.net).
+
+Programmer's notes:
+-------------------
+
+Fixed install rule in lib/ss so that ss_err.h is actually getting
+installed.
+
+Fixed bug in ext2fs_copy_bitmap; the destination bitmap wasn't getting
+passed back to the caller.
+
+Fixed bug in ext2fs_inode_scan_goto_blockgroup; it had not been
+setting the current inode number (which meant this function wasn't
+working at all).
+
+Fixed bug in ext2fs_resize_generic_bitmap; it had not be zeroing all
+blocks in the bitmap when increasing the size of the bitmap.
+
+Changed the initial number of blocks allocated by ext2fs_init_dblist()
+to be more realistic.
+
+Added a new function ext2fs_allocate_group_table, which sets up the
+group descriptor information (and allocates inode and block bitmaps,
+and inode tables for a particular group).  The function was created by
+factoring out code form ext2fs_allocate_tables().
+
+Added a new function ext2fs_move_blocks which takes a bitmap of the
+blocks to be moved, and moves them to another location on the
+boardboard.
+
+Make the unix_io channel's io_channel_flush implementation calls sync()
+to to flush the kernel buffers to disk.
+
+Added a new function ext2fs_dblist_count returns the number of
+directory blocks in dblist.
+
diff --git a/doc/RelNotes/v1.12.txt b/doc/RelNotes/v1.12.txt
new file mode 100644 (file)
index 0000000..9a11cd0
--- /dev/null
@@ -0,0 +1,153 @@
+E2fsprogs 1.12 (July 9, 1998)
+==================================
+
+E2fsprogs now works with glibc (at least with the version shipped with
+RedHat 5.0).  The ext2fs_llseek() function should now work even with
+i386 ELF shared libraries and if llseek() is not present.  We also
+explicitly do a configure test to see if (a) llseek is in libc, and
+(b) if llseek is declared in the system header files.  (See standard
+complaints about libc developers don't understand the concept of
+compatibility with previous versions of libc.)
+
+The ext2fs library now writes out the block group number in each of
+the superblock copies.  This makes it easier to automatically
+determine the starting block group of the filesystem when the block
+group information is trashed.
+
+Added support for the EXT2_FEATURE_INCOMPAT_FILETYPE feature,
+which means that e2fsprogs will ignore the high 8 bits of the
+directory entry's name_len field, so that it can be used for other
+purposes.
+
+Added support for the EXT2_FEATURE_RO_COMPAT_LARGE_FILE feature.
+E2fsprogs will now support filesystems with 64-bit sized files.
+
+Added support for the EXT2_FEATURE_COMPAT_DIR_PREALLOC feature.
+
+Added new program "e2label", contributed by Andries Brouwer.  E2label
+provides an easy-to-use interface to modify the filesystem label.
+
+Fixed bug so that lsattr -v works instead of producing a core dump.
+
+Fixed a minor bug in mke2fs so that all groups with bad superblock
+backup blocks are printed (not just the first one).
+
+Mke2fs will check the size of the device, and if the user specifies a
+filesystem size larger than the apparent size of the device it will
+print a warning message and ask if the user wants to proceed.
+
+E2fsck has a new option -C, which sends completion information to the
+specified file descriptor.  For the most part, this is intended for
+programs to use, although -C 0 will print a spinning character to the
+stdout device, which may be useful for users who want to see something
+happening while e2fsck goes about its business.
+
+Fixed a bug in e2fsck which could cause a core dump when it needs to
+expand the /lost+found directory, and sometimes the bitmaps haven't
+been merged in.  Also fixed a related bug where ext2fs_write_dir_block
+was used to write out a non-directory block.  (Which would be bad on a
+non-Intel platform with byte swapping going on.)
+
+Fixed bug in e2fsck where it would print a "programming error" message
+instead of correctly identifying where a bad block was in used when
+the bad block was in a non-primary superblock or block group
+descriptor.  Also fixed a related bug when sparse superblocks are in
+use and there is a bad block where a superblock or block group
+descriptor would have been in a group that doesn't include a
+superblock.
+
+Fixed a bug in e2fsck (really in libext2fs's dblist function) where if
+the block group descriptor table is corrupt, it was possible to try to
+allocate a huge array, fail, and then abort e2fsck.
+ext2fs_get_num_dirs() now sanity checks the block group descriptor,
+and substitutes reasonable values if the descriptors are obviously bogus.
+
+If e2fsck finds a device file which has the immutable flag set and the
+i_blocks beyond the normal device number are non-zero, e2fsck will
+offer to remove it, since it's probably caused by garbage in the inode
+table.
+
+When opening a filesystem, e2fsck specially checks for the EROFS error
+code, and prints a specific error message to the user which is more
+user friendly.
+
+If the filesystem revision is too high, change the e2fsck to print
+that this is either because e2fsck is out of date, or because the
+superblock is corrupt.  
+
+E2fsck now checks for directories that have duplicate '.' and '..'
+entries, and fixes this corruption.
+
+E2fsck no longer forces a sync of the filesystem (with attendant sleep
+calls) at all times.  The ext2fs_flush() function now performs a sync
+only if it needed to write data blocks to disk.
+
+Fixed a minor bug in e2fsck's pass1b's file cloning function, where
+certain errors would not be properly reported.
+
+Updated and expanded a few points in the man pages which users
+complained weren't explicit enough.
+
+Added special case byte-swapping code if compiling on the PowerPC, to
+accommodate the strange big-endian variant of the ext2 filesystem that
+was previously used on the PowerPC port.
+
+
+Programmer's notes:
+-------------------
+
+Removed C++ keywords from the ext2fs libraries so that it could be
+compiled with C++.
+
+E2fsck's internal organization has now been massively reorganized so
+that pass*.c don't have any printf statements.  Instead, all problems
+are reported through the fix_problem() abstraction interface.  E2fsck
+has also been revamped so that it can be called as a library from a
+application.
+
+Added new fileio primitives in libext2fs for reading and writing
+files on an unmounted ext2 filesystem.  This interface is now used by
+debugfs.
+
+Added a new libext2fs function for mapping logical block numbers of
+a file to a physical block number.
+
+Added a new libext2fs function, ext2fs_alloc_block(), which allocates
+a block, zeros it, and updates the filesystem accounting records
+appropriately.
+
+Added a new libext2fs function, ext2fs_set_bitmap_padding(), which
+sets the padding of the bitmap to be all one's.  Used by e2fsck pass 5.
+
+The libext2fs functions now use a set of memory allocation wrapper
+functions: ext2fs_get_mem, ext2fs_free_mem, and ext2fs_resize_mem,
+instead of malloc, free, and resize.  This makes it easier for us to
+be ported to strange environments where malloc, et. al. aren't
+necessarily available.
+
+Change the libext2fs function to return ext2-specific error codes
+(EXT2_DIR_EXISTS and EXT2_DB_NOT_FOUND, for example) instead of using
+and depending on the existence of system error codes (such as EEXIST
+and ENOENT).
+
+Renamed io.h to ext2_io.h to avoid collision with other OS's header
+files.
+
+Add protection against ext2_io.h and ext2fs.h being included multiple
+times.
+
+The types used for memory lengths, etc. have been made more portable.
+In general, the code has been made 16-bit safe.  Added Mark
+Habersack's contributed DOS disk i/o routines.
+
+Miscellaneous portability fixes, including not depending on char's
+being signed.
+
+The io_channel structure has a new element, app_data, which is
+initialized by the ext2fs routines to contain a copy of the filesystem
+handle.
+
+ext2fs_check_directory()'s callback function may now return the error
+EXT2_ET_CALLBACK_NOTHANDLED if it wishes ext2fs_check_directory() to
+really do the checking, despite the presence of the callback function.
+
diff --git a/doc/RelNotes/v1.13.txt b/doc/RelNotes/v1.13.txt
new file mode 100644 (file)
index 0000000..35a69e6
--- /dev/null
@@ -0,0 +1,64 @@
+E2fsprogs 1.13 (December 15, 1998)
+==================================
+
+Fixed a bug in debugfs where an error messages weren't getting printed
+when the ext2 library routines to read inodes returned errors in the
+stat, cmri and rm commands.
+
+Fixed a bug in mke2fs so that if a ridiculous inode ratio parameter is
+provided, it won't create an inode table smaller than the minimum
+number of inodes required for a proper ext2 filesystem.
+
+Fsck now parses the /etc/fstab file directly (instead of using
+getmntent()), so that it can distinguish between a missing pass number
+field and pass number field of zero.  This caused problems for
+diskless workstations where all of the filesystems in /etc/fstab have
+an explicit pass number of zero, and fsck could not distinguish this
+from a /etc/fstab file with missing pass numbers.
+
+E2fsck will create a /lost+found directory if there isn't one in the
+filesystem, since it's safer to create the lost+found directory before
+it's needed.
+
+Fixed e2fsck so that it would detect bogus immutable inodes which
+happen to be sockets and FIFO files, and offer to clear them.
+
+If a filesystem has multiple reasons why it needs to be checked, and
+one of the reasons is that it is uncleanly mounted, e2fsck will print
+that as the reason why the filesystem is being checked.
+
+Cleaned up the output routines of mke2fs so that it doesn't overflow
+an 80 column display when formatting really big filesystems.
+
+Added a sanity check to e2fsck to make sure that file descriptors 0,
+1, 2 are open before opening the hard disk.  This avoids a problem
+where a broken program might exec e2fsck with those file descriptors
+closed, which would cause disastrous results if the kernel returns a
+file descriptor for the block device which is also used by FILE *
+stdout.
+
+Fixed up the e2fsck progress reporting functions so that the values
+reliably reach 100% at the completion of all of the e2fsck passes.
+
+Fixed minor documentation bugs in man pages and usage messages.
+
+Programmer's notes:
+-------------------
+
+Fixed a number of lint warnings in the ext2fs library and potential
+portability problems from other OS's header files that might define
+CPP macros for names like "max" and "min".
+
+ext2fs_badblocks_list_add() has been made more efficient when it needs
+to grow the bad blocks list.
+
+Fixed a bug in e2fsck which caused it to dereference a freed pointer
+just before exiting.
+
+Fixed the substitution process for generating the mk_cmds and compile_et
+scripts so that they will work outside of the build tree.
+
+Add sanity check to e2fsck so that if an internal routine
+(ext2fs_get_dir_info) returns NULL, avoid dereferencing the pointer
+and causing a core dump.  This should never happen, but...
+
diff --git a/doc/RelNotes/v1.14.txt b/doc/RelNotes/v1.14.txt
new file mode 100644 (file)
index 0000000..1653587
--- /dev/null
@@ -0,0 +1,34 @@
+E2fsprogs 1.14 (January 9, 1999)
+================================
+
+Fix the fstab parsing code so that it can handle blank lines and
+comment characters.  Also, missing pass numbers need to be treated as
+zero.
+
+Fixed a bug in e2fsck where under some circumstances (when e2fsck
+needs to restart processing after fixing an egregious inconsistency)
+it would try to access already freed memory.
+
+E2fsck now prints non-printable characters in directory entries and
+pathnames using '^' and 'M-' notation.
+
+Fixed chattr so that it will ignore symbolic links when doing
+recursive descent traversals.  For both chattr and lsattr, no longer
+print the version string unless the -V option is given.
+
+Allow the system administrator to directly specify the number of
+inodes desired in the filesystem, for some special cases where this is
+necessary.
+
+Fix portability problems so that e2fsprogs can be compiled under Linux
+1.2 systems and Solaris systems.
+
+Update the config.guess file with a more recent version that will
+identify newer Linux platforms.
+
+Programmer's notes
+------------------
+
+Ext2fs_read_inode and ext2fs_write_inode will now return an error if
+an inode number of zero is passed to them.
+
diff --git a/doc/RelNotes/v1.15.txt b/doc/RelNotes/v1.15.txt
new file mode 100644 (file)
index 0000000..1b132bb
--- /dev/null
@@ -0,0 +1,122 @@
+E2fsprogs 1.15 (July 18, 1999)
+==============================
+
+Add configuration checks so that e2fsprogs will compile cleanly on
+Linux 2.3 kernels that have renamed i_version to i_generation.
+
+E2fsck now prints a progress/completion bar (and not just a simple
+spinner) if the -C0 option is requested or if it receives a SIGUSR1
+signal.  Fsck will automatically manage the (potentially multiple)
+e2fsck processes to print completion bars if it is given a -C option,
+with the right thing happening if multiple filesystems are being
+checked in parallel.
+
+Mke2fs now has better automatic heuristics to determine the filesystem
+parameters to be used for a particular filesystem.  Added a new option
+-T which allows the user to specify how the filesystem is to be used,
+which helps mke2fs do a better job selecting the filesystem parameters.
+
+Mke2fs now creates revision 1 filesystems by default, and with the
+sparse superblock feature enabled.  The sparse superblock feature is
+not understood by Linux 2.0 kernels, so they will only allow read-only
+mounts of filesystems with this sparse superblocks.
+
+Fix bug where if /dev/null couldn't be opened (should never happen),
+e2fsck would hang in a tight loop.
+
+Make e2fsck handle the case where /lost+found isn't a directory.
+
+E2fsck now uses mallinfo if it exists to get accurate statistics about
+its memory usage.
+
+Fix bug in e2fsck where it wouldn't check to see if a disconnected
+inode had any problems before connecting it to /lost+found.
+
+Add check to e2fsck so it makes sure that total number of inodes in
+the filesystem is a sane number.
+
+Fix fencepost error when clearing an the end of the block bitmap which
+caused the last block in the bitmap not to get cleared.
+
+Cleaned up a number of messages in e2fsck:
+       * The message "Group's #'s copy of the group descriptor..."
+               was fixed so that the correct number would be displayed.
+       * Added missing space in the "disk write-protected" error message
+       * Cleaned up the error message printed when a non-interactive
+               e2fsck needs to abort a check because the filesystem
+               appears to be mounted.
+
+Added a new command-line utility, uuidgen, which will create and print
+a UUID.
+
+Make debugfs's icheck command more robust by checking to make sure an
+inode has valid blocks before iterating over the inode's blocks.
+
+UUID generation now uses a random-based scheme whenever possible to
+prevent potential privacy problems.
+
+Man pages for all of the UUID functions in the library were added.
+
+Fixed bug in fsck so it won't coredump if a filesystem not in
+/etc/fstab is given to it.
+
+Fsck now understands the UUID=xxxx and LABEL=yyyy forms in /etc/fstab
+that most of the other mount utilities understands.
+
+Mke2fs will make a filesystem even if it appears mounted if the force
+option is given.
+
+Dumpe2fs has new command-line options which allow a filesystem expert
+to specify the superblock and blocksize when opening a filesystem.
+This is mainly useful when examining the remains of a toasted
+filesystem.
+
+The badblocks program has been updated to display correctly on disks
+with large block numbers.
+
+The badblocks program no longer gives spurious errors when errors
+occur on non-block boundaries, which is common if the blocksize is
+larger than 1k.
+
+Mke2fs will sync the disk device every MKE2FS_SYNC block groups if the
+MKE2FS_SYNC environment variable is set.  This is to work around a VM
+bug in the 2.0 kernel.  I've heard a report that a RAID user was able
+to trigger it even using a 2.2 kernel, but hopefully it will not be
+needed for most Linux 2.2 users.
+
+Fixed miscellaneous documentation and man pages.
+
+Programmer's notes:
+-------------------
+
+Cleaned up functions such as pass1_get_blocks, pass1_read_inode which
+in e2fsck's pass1.c really should have been static.
+
+The return value of the uuid_compare() function was changed to make it
+match with the conventions used by strcmp, memcmp, and Paul Leach's
+UUID sample document.
+
+The "make depend" process has now been made more automated; it now
+automatically word-wraps the dependencies, and only replaces source
+Makefile.in if there has been a change in the dependencies.  Also, a
+top-level "make depend" now recurses through all the subdirectories
+automatically.
+
+The Makefile in .../util has been changed so that subst is built using
+the native C compiler during a cross-compilation, since the subst
+program is only used during the build process.  Also add an explicit
+rule to build util/subst by cd'ing to the correct directory and
+running Makefile.
+
+The man directories are defined in terms mandir, so that the configure
+script can override the location of the manual pages.
+
+The config files have been updated to recognize new machine types for
+both the i386 and alpha families.
+
+Fsck has been modified so that it will accurately create an
+fsck_instance even when the noexecute flag is set.  This allows for
+accurate debugging of the fsck pass structure.  Also, when the verbose
+flag is given twice, fsck will print debugging information about when
+fsck is waiting for jobs to finish.
+
diff --git a/doc/RelNotes/v1.16.txt b/doc/RelNotes/v1.16.txt
new file mode 100644 (file)
index 0000000..babf0fa
--- /dev/null
@@ -0,0 +1,87 @@
+E2fsprogs 1.16 (October 22, 1999)
+=================================
+
+Fixed a race condition bug in fsck; when printing a progress bar, if
+checking multiple filesystems in parallel, it was possible for fsck to
+send e2fsck a SIGUSR1 signal before e2fsck had installed its signal
+handler, which would cause it to terminate with a signal 10.
+
+E2fsck now properly handles filesystems that have the
+INCOMPAT_FILETYPE feature turned on.  It can be used to convert a
+filesystem into using or not using FILETYPE feature.
+
+E2fsck now properly handles filesystems that have the IMAGIC feature
+turned on (this is used on Linux AFS servers).
+
+The mke2fs program now creates filesystems that have the filetype and
+sparse_superblock features enabled by default, unless it is run on a
+pre-2.2 kernel.  These features are not supported by a pre-2.2 kernel,
+so there is now a new flag -O which allows the user to specify with
+which features she would like to create the filesystem; "mke2fs -O
+none" will create a filesystem compatible with 2.0 kernels.
+
+The tune2fs program now has a -O option which allows the user to set
+and reset "safe" filesystem features.  Currently, the only ones which
+allows to be modified are the filetype and sparse_superblock features.
+Note setting or clearing either feature will require running e2fsck on
+the filesystem afterwards.  (n.b. Clearing the sparse_superblock feature
+requires that there is enough free space on the filesystem for the
+extra superblocks which will be created by e2fsck.)
+
+Debugfs can now set and print filesystem features in the superblock
+using the "features" command.  Dumpe2fs will print out the complete
+set of features when listing the superblock.
+
+Dumpe2fs has new options -f (force) and -h (header-only).
+
+Fixed a bug in e2fsck which could cause the PROGRAMMING ERROR/bonehead
+message to come up.  This could happen when decrementing or
+incrementing a link count could result in an overflow.
+
+Fixed a bug in e2fsck where the block count on the lost+found
+directory would not be properly incremented when the directory was
+expanded to the point where an indirect block needed to be allocated.
+
+E2fsck now makes some additional sanity checks on the superblock to
+avoid crashing or giving a memory allocation error if some of the
+values in the superblock are unreasonable (but the superblock otherwise
+looks valid).
+
+Fixed a bug in e2fsck where a very badly corrupted filesystem might
+require two passes to completely fix the filesystem.  This happened if
+an inode claimed blocks that was part of the filesystem metadata
+(typically, when garbage was written into an inode table or indirect
+block, since this kind of filesystem corruption normally doesn't
+happen otherwise).
+
+On the Alpha, glibc declares st_flags although it isn't actually used;
+the configure script was improved to detect this case so that
+e2fsprogs can avoid using the non-functional stat field.
+
+The manual pages were updated to use a more consistent formatting
+style consistent with standard Unix man pages.  Mke2fs's man page
+added documentation for a few previously undocumented options.
+
+Fixed minor display bugs in tune2fs and mke2fs.
+
+Programmer's notes:
+-------------------
+
+Improved portability of e2fsprogs to non-Unix systems (in particular, NT).
+
+Added features to parse and print feature strings into the e2p library.  
+(e2p_feature2string, e2p_string2feature, e2p_edit_feature).
+
+ext2fs_mkdir() and ext2fs_new_dir_block() now creates directories
+whose directory entries contain proper filetype information if the
+filesystem supports it.
+
+ext2fs_link() now uses the low 3 bits of its flags parameter to pass
+the directory entry filetype information.  This is used to set the
+directory entry filetype information if the filesystem supports it.
+
+Fixed a bug in ext2fs_expand_dir() where the block count in a
+directory's inode would not be properly incremented when the directory
+was expanded to the point where an indirect block needed to be
+allocated.
+
diff --git a/doc/RelNotes/v1.17.txt b/doc/RelNotes/v1.17.txt
new file mode 100644 (file)
index 0000000..21ba194
--- /dev/null
@@ -0,0 +1,32 @@
+E2fsprogs 1.17 (October 26, 1999)
+=================================
+
+Fixed nasty typo in fsck which caused parallelized fsck's to go into an
+infinite loop.
+
+Fixed a bug in fsck where it used strncmp to compare a binary UUID,
+thus potentially causing problems if a binary UUID contained a NULL
+character.
+
+E2fsck now uses stricter checks for directory entries in pass 2:
+zero-length filenames are not allowed; neither are 8 byte long
+directory entries.
+
+The debugfs "dirty" command now clears the filesystem valid bit.
+(Previously this just set the dirty-as-in-needs-writing-out-to-disk
+bit in the in-core superblock image.  The new functionality is more
+what the user expects, and is more useful.)
+
+Added a debugging hook to test parallel fsck; if the environment
+variable FSCK_FORCE_ALL_PARALLEL, then filesystems on the same drive
+will be checked in parallel when they normally would not be.
+
+Programmer's notes:
+-------------------
+
+Fixed some #ifdef's for compilation under the Hurd OS.
+
+Fixed minor W2K compatibility problems.
+
+Fixed some miscellaneous GCC warnings.
+
diff --git a/doc/RelNotes/v1.18.txt b/doc/RelNotes/v1.18.txt
new file mode 100644 (file)
index 0000000..17cc283
--- /dev/null
@@ -0,0 +1,46 @@
+E2fsprogs 1.18 (November 10, 1999)
+==================================
+
+Fix a core dumping bug in e2fsck if an imagic inode is present or
+(more rarely) if the filesystem is badly corrupted enough that e2fsck
+has to restart pass 1 processing.  E2fsck now closes the filesystem
+before freeing a large number of its data structures, so in the case
+of future memory faults, at least the fixed filesystem will be fully
+written out.
+
+If a filesystem doesn't support imagic inodes, and e2fsck discovers an
+imagic inode, it will offer to clear the imagic flag.
+
+E2fsck will now offer to clear the immutable flag on special files
+(device/socket/fifos) when running it in non-preen mode.
+
+E2fsck will now set the filetype when creating /lost+found, and when
+connected orphaned inodes to /lost+found.
+
+Debugfs's ncheck and icheck commands now handles the case where there
+are bad blocks in the inode table without bombing out.
+
+The badblocks list processing code has been made more efficiently for
+appending a large number of (ordered) badblocks to the badblocks list.
+
+Some minor man page updates.
+
+Fsck now allows interactive e2fsck's when using fsck -As (not a common
+mode, but some people like to do this in boot scripts for silly reasons).
+
+Programmer's notes:
+-------------------
+
+The internal e2fsck problem code for PR_2_SPLIT_DOT was fixed to meet
+with the problem code convention.
+
+The badblocks list regression test program has been updated to work
+with previously made API name changes.
+
+The ext2fs_free() command now uses the new badblocks API to avoid
+using the compatibility layer.
+
+Added new regression test cases; the run_e2fsck test script now
+supports the ability for a test case to run a preparatory command
+before running e2fsck.
+
diff --git a/doc/RelNotes/v1.19.txt b/doc/RelNotes/v1.19.txt
new file mode 100644 (file)
index 0000000..1b8bbc6
--- /dev/null
@@ -0,0 +1,180 @@
+E2fsprogs 1.19 (July 13, 2000)
+==============================
+
+Release the resize2fs program since the timeout before it could
+be released under the GPL has finally expired.
+
+Add experimental support needed for the ext2 compression patches.
+This requires compiling e2fsprogs with the --enable-compression flag
+to the configure script.
+
+Added ext3 journalling support.  E2fsck will run the journal (if
+necessary) by temporarily mounting the filesystem.  /sbin/fsck.ext3 is
+installed as a symlink to e2fsck.  Fsck has been taught about ext3,
+and treats it the same as ext2 in terms of the progress bar logic.
+Dumpe2fs will display the superblock journalling information if the
+filesystem has a journal.  The ext2 library will now permit opening an
+ext3 filesystem with the recovery flag set.  This is necessary for
+on-line dump's to work correctly, but there may be issues with this
+working well since ext3 is much less aggressive about syncing blocks to
+the filesystem, since they're safe on the journal.
+
+Tune2fs and e2fsck have been changed to allow the mount_count check to
+be disabled by setting max_mount_count to -1.  (This was already
+supported by the kernel.)
+
+Create a symbolic link for fsck.ext3, since the e2fsprogs utilities
+are used for ext3 as well.
+
+Added internationalization support for e2fsprogs; must be enabled
+by passing --enable-nls to configure.
+
+Always use the provided ext2fs header files to insulate ourselves from
+kernel version changes.  Which include files are used by e2fsprogs
+have also been cleaned up to improve portability.
+
+Limit the number of times that e2fsck updates the progress bar so that
+people who are booting using a 9600 baud console don't get swamped by
+too many updates.
+
+Improved the loop detection algorithm in e2sck's pass #3 so that it is
+much, much faster for large filesystems with a large number of
+directories.
+
+The memory footprint for e2fsck is now slightly smaller than before.
+
+E2fsck now checks if special devices have a non-zero size, and offers
+to clear the size field if it finds such an inode.  
+
+E2fsck now checks if special devices have the append-only flag set,
+and offers to clear the inode.
+
+E2fsck now properly handles some "should never fail" cases during a
+bitmap copy in pass5.
+
+E2fsck now properly prints control characters in filenames as ^A .. ^Z.
+
+E2fsck now calculates the correct location of the backup superblock in
+the case of filesystem blocksizes > 1k.
+
+Fixed a bug in e2fsck's calculation of the number of inodes_per_block
+which normally didn't cause problems under most filesystem parameters,
+but could cause a valid superblock to be rejected in extreme cases.
+Other checks for validating superblock values were made more
+stringent.
+
+Added non-destructive write testing to the badblocks program, courtesy
+of David Beattie.  The badblocks also now has an option to input the
+current set of bad blocks, so that known bad blocks are skipped to
+speed up the badblocks test.  There is also a persistent rescan
+feature which causes badblocks to run until it has completed some
+number of passes without discovering any new bad blocks.
+
+Badblocks now checks to see if the device is mounted and refuses to do
+the tests involving writing to the device if it is mounted.  Also,
+badblocks now allows the number of blocks to be checked to be
+defaulted to the size of the partition.
+
+Fixed a bug in fsck which didn't allow non-root users to be able to
+check filesystems if there were any LABEL= or UUID= entries in
+/etc/fstab.
+
+The Hurd doesn't support the filetype filesystem feature.  The mke2fs
+program now makes sure that for the Hurd, the filetype feature is
+turned off.  E2fsck will check to see if the filetype feature is
+turned on for Hurd filesystems, and offer to turn off the feature.
+
+Mke2fs now has a safety check to make sure the number of blocks do not
+exceed 32 bits even on a 64 bit platform.
+
+Really fixed a bug in fsck to allow "fsck -As" to run interactive
+fsck's.  (For those people who like to do interactive fsck's in the
+/etc/rc scripts!?!)
+
+Debugfs has a few new features: the rdump command, which will do a
+recursive dump of a directory and all of its contents, and the lcd
+command which does a local chdir (much like the ftp command of the
+same name).  In addition, the debugfs program and the open_filesystem
+command now takes three new options: -b and -s, which allows the
+blocksize and superblock location to be specified, and the -c option
+which is used in catastrophic situations where the block group
+descriptors are corrupt.  If the -c option is specified, debugfs will
+skip trying to read in the block and inode bitmaps.
+
+Debugfs's lsdel command was fixed to handle bad blocks in the inode
+table.
+
+A Y2K bug in debugfs's "ls -l" handling was fixed by switching to use
+4 digit years.
+
+General improvements in error messages
+
+  - Mke2fs prints a sane error message if the partition size is zero
+       (usually because the partition table wasn't reread by the
+       kernel due to the partition being busy), instead of "invalid
+       argument passed to ext2 library while initializing superblock".
+
+  - Fsck now prints more self-explanatory message if an invalid UUID=
+       or LABEL= specification is passed to it.
+
+UUID library changed to use the LGPL.
+
+Fixed a bug in the UUID library where very rapid calls to the
+time-based UUID generator could cause duplicate UUID's to be returned.
+This was not a problem for e2fsprogs, but it could be a problem for
+other users of the library.
+
+Make the UUID library more robust in the face of missing or an
+improper /dev/urandom or /dev/random files.
+
+Added some random portability fixes for Solaris.
+
+Some minor man page updates.
+
+Fixed a memory leak in the ss library.
+
+
+Programmer's notes:
+-------------------
+
+We now try to use lseek64 and open64 from the LFS if possible.
+
+The 3rd parameter in e2p's print_flags is now a flags word, instead of
+a boolean option.
+
+The mark and unmark bitmap functions now return the previous state of
+the bit that was being changed, which is useful for some speed
+optimizations.
+
+The following functions have been added to enhance the badblocks list
+handling in libext2fs: ext2fs_write_bb_FILE, ext2fs_read_bb_FILE2, and
+ext2fs_badblocks_equal.
+
+The ext2 header files now have the latest journalling fields to the
+superblock.
+
+The ext2fs_mkdir function in libext2fs now properly backs out of error
+conditions robustly.
+
+Cleaned up makefiles:
+  - to cleanly  compile with the -j flag.
+  - so distclean removes all generated files.
+  - so in case of an error while installing header files, the make aborts.
+
+Fix test_script so that it works correctly when compiling in the
+source directory.
+
+The random UUID generation routine has been made slightly better in
+the case where /dev/random doesn't exist.  (Use of randomly-based UUID
+is still not recommended if /dev/random doesn't exist, however; it's
+better to use the time/ethernet MAC address UUID in this case.)
+
+Clean up the build process so it's more friendly in case of missing
+directories.
+
+The ext2fs header file can now be #include'd into C++ programs.
+
+The e2p.h header file is now installed.
+
+Added workaround to a gawk 3.0.5 bug in lib/ss/mk_cmds.
+
diff --git a/doc/RelNotes/v1.20.txt b/doc/RelNotes/v1.20.txt
new file mode 100644 (file)
index 0000000..c2423ad
--- /dev/null
@@ -0,0 +1,206 @@
+E2fsprogs 1.20 (May 20, 2001)
+=============================
+
+Add support for replaying the ext3 journal purely in user mode,
+including handling the orphaned inode list.  Used code contributed by
+Andreas Dilger, with bug fixes and the orphaned inode handling done
+by Theodore Ts'o.
+
+The mke2fs and tune2fs programs can create or modify a filesystem to
+include an ext3 journal.  Tune2fs also can be used to remove an ext3
+journal from a filesystem.
+
+E2fsck will now check for the existence of a linked list of orphan
+inodes in the superblock, and clear those inodes before starting the
+rest of the filesystem check (but after the journal playback).
+
+E2fsck now validates the file descriptor passed to the -C option,
+which saves against the completion bar getting written to an
+unexpected location, such as the disk being checked.  (Debian
+bug/wishlist #55220)
+
+E2fsck will now bump the filesystem revision number from zero to one
+if any of the compatibility bits are set.
+
+Fixed a bug where a badly corrupted directory on a big endian system
+could cause e2fsck to die with a bus error.  The
+ext2fs_read_dir_block() and ext2fs_process_dir_block() functions in
+the ext2 library now does alignment sanity checks on the rec_len field
+of the directory entry before using it.
+
+The ext2 library has been enhanced to make tune2fs safe to run on
+mounted filesystems.  (Users could usually get away with using tune2fs
+on mounted filesystems before, but with the advent of ext3 and
+journalling, it became important to make tune2fs was *really* safe for
+use even when the filesystem being modified is mounted.)  E2label is
+now implemented by tune2fs using an argv[0] dispatch, so that e2label
+is also now safe for use on mounted filesystems.
+
+Added a new program, e2image, which creates a backup of critical ext2
+filesystem data structures.  The generated image file can be examined
+using dumpe2fs and debugfs.  In the future, e2fsck will be able to use
+the image file to help recover very badly damaged filesystems.
+
+Fixed a number of LFS bugs in e2fsck; very, very large (> 2**42) files
+no longer cause e2fsck to bomb out.  Also treat files > 2GB as being
+large file when deciding whether or not the filesystem has large files.
+
+Fixed lsattr and chattr so that they work correctly on large files.
+(Fixes Debian bug #72690.)
+
+Removed limitation in get_device_size() which imposed a one terabyte
+filesystem limitation.  (Most 2.2 kernels still have a signed int
+problem which cause 1 TB block device limitation.  Fortunately, the
+kernel patches to fix this are much easier than fixing the 2TB
+limitation in the kernel.  :-)
+
+A max_mount_count of zero is now treated as if no mount count were
+set.  (Previously, no mount count was indicated by using -1, and a
+mount count of zero caused e2fsck to always be run.)
+
+Mke2fs supports two new filesystem types largefile and largefile4.
+
+Mke2fs now adds some randomness in s_max_mount_count so that multiple
+filesystems won't be all checked at the same time under normal
+operations.
+
+Fixed bug in the progress bar printing code which could cause e2fsck
+to core dump on an illegal filesystem.
+
+Fixed bug in fsck which could allow more than one instance of e2fsck
+to be printing a progress bar.  (Debian bug #65267)
+
+Fsck using a UUID or a LABEL specifier will work even if devfs is
+compiled into the kernel and not mounted.  If the pathnames in
+/proc/partitions are incorrect, fsck will search /dev for the correct
+device (using the new ext2fs_find_block_device library function).
+Fsck now also checks the RAID devices first so that they are properly
+found when they are in use.  Support has also been added to support
+additional IDE disks and the DAC 960 device names.  (Debian bug #94159)
+
+Fixed a bug in fsck which caused it not deal properly with 16
+byte long filesystem labels.
+
+Fsck's -t option has been made a lot more flexible.  The semantics for
+what happens if a comma-separated list to fsck has been regularized,
+and it is now possible to filter what filesystems will get checked
+based what is in the filesystem's fstab entry's option field.  (Debian
+bug #89483.)
+
+The dumpe2fs program can now print out the group description
+information in hex, and also prints the location of the superblock and
+block group descriptor for those block groups that have them.
+
+Mke2fs now clears the ext2 superblock before it starts creating a
+filesystem, so that the superblock magic number is only written if the
+filesystem creation process successfully completes.
+
+The debugfs program's stat command now pretty-prints the blocks used
+by an inode so that it's more compact and informative.
+
+The debugfs stats command now uses the same libe2p code (which is used
+by dumpe2fs) to print the superblock header information.  This is more
+complete, and it avoids a bit of code duplication.
+
+Added a new debugfs command, set_super_value (ssv) which allows the
+user to set arbitrary superblock fields.
+
+Debugfs was extended to support inode numbers in hex (by prefixing
+them with 0x), and so that modify_inode can set the inode generation
+number.  Also, there is now a new function command called logdump
+which will dump an ext3 journal.
+
+Fixed a bug in debugfs so that quitting out of the pager doesn't kill
+debugfs.
+
+Debugfs's dump command now stops immediately upon reporting a disk
+read error.  (Fixed a bug in ext2fs_file_read library routine which
+caused debugfs not to stop.)  (Debian bug #79163)
+
+On systems with /proc/mounts (mainly Linux systems), /proc/mounts is
+checked before /etc/mtab is used, since /proc/mounts is more likely to
+be accurate.
+
+Added portability fixes for Solaris and Linux/ia64.
+
+Various manual pages were clarified and cleaned up.  (Fixed debian
+bugs #63442, #67446, and #87216)
+
+
+Programmer's notes:
+-------------------
+
+The e2fsck message printer now supports %Iu and %Ig, which will print
+out the inode's user and group owners, respectively.
+
+E2fsprogs now includes its own version of include/linux/ext2_fs.h, so
+that no longer dependent on the system having the correct version of
+the kernel header files.
+
+Added a new function to libext2, ext2fs_find_block_device(), which
+searches the system (i.e., /dev, /devfs, /devices) for a pathname to a
+device given its device number.
+
+Added a new function to libext2, ext2fs_sync_device, which centralizes
+all of the places which might try to use the BLKFLSBUF or FDFLUSH
+ioctls (and usually failing to define them since the system header
+files don't usually do this for us, and we're trying to avoid usage of
+kernel include files now).
+
+Added new utility programs in tests/progs: random_exercise and
+hold_inode.  They aren't built by default; they're useful for
+exercising ext3 filesystem code.
+
+Added a new ext2 filesystem flag, EXT2_FLAG_SUPER_ONLY, which causes
+the filesystem close functions to only update the superblock, and to
+not touch the block group descriptors.  Needed by tune2fs when
+modifying a mounted filesystem.
+
+Got rid of struct ext2fs_sb and replaced it with the standard struct
+ext2_super_block from include/linux/ext2_fs.h.  Note: this may break
+source (but not binary) compatibility of some users of the ext2
+library.  Those applications should just simply do a global search and
+replace of struct ext2fs_sb with struct ext2_super_block, and include
+the new header file <ext2fs/ext2_fs.h> which defines it.
+
+The ino_t type has been renamed ext2_ino_t to protect applications
+that attempt to compile -D_FILE_OFFSET_BITS=64, since this
+inexplicably changes ino_t(!?).  So we use ext2_ino_t to avoid an
+unexpected ABI change.
+
+The Makefiles have been reworked so that "make check" can be run from
+the top-level Makefile.
+
+Fix general gcc -Wall complaints and removed dead code.
+
+Remove use of NOARGS, because we assume everyone does ANSI C these
+days.
+
+Added build-rpm script from sct.
+
+New functions ext2fs_image_{inode,super,bitmap}_{read,write} added 
+to support e2image.
+
+New function ext2fs_flush_icache which must be called if the
+application program modifies the inode table blocks without going
+through ext2fs_write_inode() interface.
+
+New ext2fs_check_mount_point() function, which will return the mount
+point of a device if mounted.
+
+The io_channel abstraction now has an optional interface,
+io_channel_write_range, which allows specific byte ranges to be
+written.  
+
+The unix_io IO channel now supports write-through caching, so that
+journal creation is more efficient.
+
+Added x86 assembly language routines to support byte swapping, to
+reduce executable size.
+
+Fixed bug in the utility program subst so that it's possible to
+replace a substitution variable with a zero-length string.
+
+Fixed numbering e2fsck pass1 problem numbers; an extra zero had
+slipped into some of the problem number.
+
diff --git a/doc/RelNotes/v1.21.txt b/doc/RelNotes/v1.21.txt
new file mode 100644 (file)
index 0000000..c0a56e3
--- /dev/null
@@ -0,0 +1,119 @@
+E2fsprogs 1.21 (June 15, 2001)
+==============================
+
+Added new configure flags which allow a subset e2fsprogs to be built;
+this is most useful for boot floppies, since the resulting shared
+libraries and programs are slimmed down by removing features that
+aren't necessary for a boot floppy.  The new flags that were added
+are: --disable-swapfs, which removes support for byte swapping old
+legacy PPC/68k filesystems, --disable-debugfs, which removes support
+for debugfs from the libext2fs library, --disable-imager, which
+removes support for the e2image program, and --disable-resizer, which
+removes support for resize2fs.
+
+E2fsck now prints the number of mounts or days elapsed since the last
+check when e2fsck is forced to check an otherwise clean filesystem.
+
+Tune2fs now prints an informative message about how often a filesystem
+will be checked when adding a journal to the filesystem, to remind the
+user that he/she may want to adjust those parameters using tune2fs
+-c/-i.
+
+Worked around hurd brain-damage which causes e2fsck to sometimes
+believe a filesystem is the root filesystem based on device numbers
+(since Hurd doesn't have dev_t's, which is arguably a POSIX.1
+violation).
+
+Fixed a bug introduced in 1.20 which caused e2fsck to abort with an
+erroneous error with the -F option was specified.
+
+Fixed a ext3 recovery bug in the revoke handling; synchronized with
+ext3 0.7a.
+
+Fixed two bugs in e2fsck's handling of dup block handling, dealing
+with relatively uncommon edge cases: a directory with an indirect
+block which is claimed by another file, and when the last inode in the
+filesystem has blocks claimed by another file.
+
+E2fsck now checks to see if the i_size field of a fast symlink is too
+big, and offers to clear the symlink if so.
+
+E2fsck now checks to see if i_size_high of special files is non-zero,
+and offers to clear i_size_high.
+
+Fix e2fsck's handling of incompatible journal flags so that the user
+has chance to abort, and then has the option to clear out the journal
+entirely.  (Addresses Debian bug #98527.)
+
+Fixed a bug in fsck which could cause it to core dump if a mix of
+standard and non-standard device names are used in /etc/fstab.
+(Debian bug #100559)
+
+Fixed a bug in debugfs which caused read errors when copying a file to
+not be noticed.
+
+The debugfs set_super_value command can now modify the s_lastcheck field.
+
+Fixed a bug in lsattr and chattr which was accidentally introduced in
+1.20 to support > 2GB files; both lsattr and chattr wasn't reading
+directories correctly because the change modified the layout of struct
+dirent to be incompatible with the libe2p shared library.
+
+Cleaned up the mke2fs manual page and included a discussion about why
+it's good to periodically check the filesystem even when journalling is
+enabled.
+
+Programmer's notes:
+-------------------
+
+Fix general gcc -Wall complaints.
+
+The types needed by the ext2 header files are now provided by
+lib/ext2fs/ext2_types.h, instead of include/asm/types.h.
+
+Integers are now preferred to longs when trying to find a 32-bit type
+in ext2_types.h.  Also, if linux/types.h has already been defined,
+don't try to redefine the types.
+
+Fixed make depend script so that it automatically corrects the
+pathname cleanups performed by make -M, so I don't have to fix them up
+by hand.
+
+Fixed the d_loaddump test case to be more robust, and not depend on
+bash'isms.
+
+Removed debugfs's dependence on pread(), which was accidentally
+introduced in e2fsprogs 1.20
+
+Fixed a performance bug in the libext2fs's icount routine; the size
+estimate of the icount array was incorrectly being calculated.
+
+Removed use of the badblocks compatibility functions in the e2fsprogs
+programs.
+
+Added paranoia code which protects against strange cases where /etc
+isn't on the root filesystem, or if /etc/mtab doesn't exist.
+
+The header file ext2_types.h is now installed.
+
+Autoconf is used to determine when we are on big-endian machines,
+instead of doing run-time tests, to save a few bytes of code.
+
+The ext2fs_mark_generic_bitmap and ext2fs_unmark_generic_bitmap
+functions are no longer inline functions, which saves space and
+doesn't really cost any real performance.
+
+The ext2fs library no longer depends on the e2p library.  (What need
+there was of it --- namely, fsetflags, was coded in-line).
+
+Fixed the makefile so that lib/ext2fs/ext2_types.h is generated even
+when the user is stupid and tries compiling the package using "make
+install" as root.
+
+Miscellaneous code cleanups:
+       * Added missing files from Makefile.in's SRCS file, so that 
+               their dependencies would be properly calculated.
+       * Removed redundant code
+       * Fixed comments in code
+       * Removed no-longer needed argsused #pragma.
+
diff --git a/doc/RelNotes/v1.22.txt b/doc/RelNotes/v1.22.txt
new file mode 100644 (file)
index 0000000..204a0c5
--- /dev/null
@@ -0,0 +1,31 @@
+E2fsprogs 1.22 (June 22, 2001)
+==============================
+
+Fixed a bug in e2fsck's handling of orphan inodes which are special
+files (i.e., block/character device files, named FIFO's, etc.).
+
+Fixed a bug accidentally introduced in e2fsprogs 1.21 which caused
+tune2fs to fail at adding a journal to a mounted filesystem.
+
+Fixed a few big-endian bugs in e2fsprogs
+       * The directory block functions were accidentally reporting
+               some directories as corrupted when they weren't.
+       * If e2fsprogs is compiled --disable-swapfs, the C language 
+               equivalents weren't being included for big-endian platforms.
+               (Fixes Debian bug #101686).
+
+Fixed a Hurd compilation problem.  (Addresses Debian bug #101361)
+
+Programmer's notes:
+-------------------
+
+Use platform independent method of defining the BLKFLSBUF and FDFLUSH
+ioctls, and allow them to be defined for non-i386 platforms.
+
+The uuid.h header file is now protected against multiple inclusions.
+
+E2fsprogs is now being developed using BitKeeper.  Changed the test
+scripts to deal with BK's stripping CR characters from text files,
+and changed the top-level Makefile.in to avoid including BitKeeper
+files when generating the source tarball.
+
diff --git a/doc/RelNotes/v1.23.txt b/doc/RelNotes/v1.23.txt
new file mode 100644 (file)
index 0000000..c62b6f2
--- /dev/null
@@ -0,0 +1,65 @@
+E2fsprogs 1.23 (August 15, 2001)
+================================
+
+Add initial support for extended attributes (EA); e2fsck will
+correctly handle a filesystem with EA's and check the EA blocks for
+corruptions.
+
+E2fsck's symlink sanity checking has been cleaned up.  It now checks
+the i_size value of fast symlinks, and checks for immutable flags
+being set of symlinks, etc.
+
+E2fsck now offers to clear inodes which are special files that have a
+non-zero i_blocks or i_size field.  (The i_size field check was in the
+previous version of the code, but due to a bug it didn't offer to
+clear the inode unless i_size and i_size_high were both non-zero.)
+
+E2image can now create "raw" image files, which only contain the
+filesystem metadata placed in a spare file so that e2fsck, dumpe2fs,
+debugfs, etc., can be run directly on the raw image file.
+
+Add support for the 64-bit block device patches.
+
+Fixed bugs in creating external journals with a 1k blocksize.
+
+Add initial support for external journals (so long as the external
+journal only supports a single filesystem) in e2fsck.
+
+Remove requirement for needing to run fsck on a filesystem after
+removing a journal (either internal or external).
+
+The man pages now document how to create and manage external journals.
+
+Speed up the check of an ext3 filesystems by avoiding a needless flush
+of all of the superblock and block group descriptors.
+
+Speed up creating an internal journal using tune2fs in the case where
+the filesystem has a lot blocks already allocated.
+
+Tune2fs has been fixed to make sure that only error messages go to
+stderr, and normal message go to stdout. (Addresses Debian bug #108555)
+
+Fixed a minor bug in mke2fs; if -O none is passed to mke2fs, it will
+now not set the sparse_super feature.  (Addresses Debian bug #108165)
+
+Add support in fsck for the filesystem type "auto".
+
+Fsck -A will not try to interpret device names for filesystems which
+have a pass number is 0.  (Addresses Debian bug #106696).
+
+Fsck prints a warning message if now valid filesystems are passed to
+it.  (Addresses Debian Bug #107458.)
+
+E2fsck now gives an explicit warning if there filesystem still has
+errors at the end of the run. (Addresses Debian bug #104502)
+
+E2fsck will set the EXT2_ERROR_FS flag if the journal superblock
+reflects an error.  E2fsck will also not run the orphan list if the
+filesystem contains errors, since the orphan list might be corrupted.
+
+E2fsck now prints the number of large files when given the -v option.
+
+Fixed minor memory leaks in e2fsck.
+
+Some minor man pages updates. (Addresses Debian bug #30833, #108174)
+
diff --git a/doc/RelNotes/v1.24.txt b/doc/RelNotes/v1.24.txt
new file mode 100644 (file)
index 0000000..f8fd56c
--- /dev/null
@@ -0,0 +1,38 @@
+E2fsprogs 1.24a (September 2, 2001)
+===================================
+
+Fix brown-paper bug in mke2fs which caused it to segfault when
+printing the version string.
+
+
+E2fsprogs 1.24 (August 30, 2001)
+================================
+
+Revert the BLKGETSIZE64 support, since for some distributions, this
+ioctl has been used by an unofficial kernel patch to update the last
+sector on the disk, and this was causing disk corruption problems as a
+result.
+
+Mke2fs is now more careful about zapping swap space signatures and
+other filesystem/raid superblock magic values so that programs like
+mount who try to use heuristics to determine the filesystem type of a
+partition are less likely to be confused.
+
+E2fsck will no longer complain if the the mode of EXT2_RESIZE_INO is a
+regular file (since Andreas Dilger's on-line resizing tools will set
+its mode bits).
+
+Fixed some minor texinfo, man pages nits for spelling errors,
+texinfo warnings, etc.  (Addresses Debian bug #110621.)
+
+E2fsprogs program no longer print the filesystem version number
+(i.e. 0.5b), since it only confuses people and doesn't serve any real
+purpose.
+
+E2fsck will once again compile under libc5, since it will supply its
+own version of strnlen if necessary.
+
+mke2fs and tune2fs will allow the use of UUID= or LABEL= specifiers
+when specifying the external journal device.  tune2fs will also search
+devices looking for the external journal device when removing it.
+
diff --git a/doc/RelNotes/v1.25.txt b/doc/RelNotes/v1.25.txt
new file mode 100644 (file)
index 0000000..2f3be23
--- /dev/null
@@ -0,0 +1,46 @@
+E2fsprogs 1.25 (September 20, 2001)
+===================================
+
+This is primarily a bug-fix release; no new features were added, but
+there are a number of embarrassing bug fixes and cleanups applied.
+
+Fix a bug mke2fs which causes stack garbage to be written to disk when
+zapping disk sectors.  (This bug could cause mke2fs to core dump for
+some kernels, I suspect with security enhancement patches.)
+
+Remove unneeded #include of <linux/config.h> which was breaking
+building e2fsprogs on the Hurd.  (Addresses Debian bug #112414.)
+
+Updated tune2fs man page to reflect the fact that adding or removing a
+journal doesn't require running e2fsck.
+
+Remove use of AC_REQUIRE from autoconf which had been used to prevent
+AC_CANONICAL_HOST from being called twice; unfortunately this causes
+recent autoconf to bomb out since they don't allow AC_REQUIRE to be
+used outside of autoconf macros.  Fortunately, it doesn't seem to be
+necessary any more, anyway.
+
+E2fsck will now not fall back to an alternate superblock if the user
+specifies the superblock location explicitly on the command-line.
+This allows easier recovery from a situation where the primary
+superblock and block groups are slightly corrupted, but the backup
+superblocks are completely broken.  
+
+Fix problem which caused compile_et and mk_cmds to blow up if
+e2fsprogs was in a directory with a pathname that contained spaces.
+
+We are now more paranoid about checking the entry in /etc/mtab to make
+sure the filesystem is really mounted, since some broken distributions
+(read: Slackware) don't initialize /etc/mtab before checking non-root
+filesystems.  (Slackware also doesn't check the root filesystem
+separately, and reboot if the root filesystem had changes applied to
+it, which is dangerous and broken, but there's nothing I can do about
+that.)
+
+Make UUID library C++ friendly by adding appropriate extern "C"
+declarations and using const in the function declarations.
+
+Fix up the com_err texinfo file so that it can product a valid info
+file (previously, it could only be used to generate paper
+documentation using texinfo.tex).
+
diff --git a/doc/RelNotes/v1.26.txt b/doc/RelNotes/v1.26.txt
new file mode 100644 (file)
index 0000000..0c4609c
--- /dev/null
@@ -0,0 +1,164 @@
+E2fsprogs 1.26 (February 3, 2002)
+=================================
+
+Dumpe2fs will keep going now if the bad block inode can't be read.
+(Previously it stopped with a fatal error.)
+
+E2fsck will now give an opportunity to run the journal even if the
+recovery flag is not set.  This is the default behaviour if e2fsck is
+using a backup superblock, since the needs_recovery flag will never be
+set in the backup superblock copies.
+
+E2fsck now automatically finds the backup superblock/group descriptors
+even when the primary superblock is completely destroyed for 2k and 4k
+filesystems.  (Previously it just guessed/assumed that we were dealing
+with a 1k filesystem in that case, and users had to manually specify
+the backup superblock number.)
+
+Fixed a bug in e2fsck where it dereferences a null pointer when there
+is a problem opening a filesystem in preen mode.
+
+E2fsck now handles external journals correctly; previously it trashed
+the external journal device if the journal needed to be replayed.
+
+Work around ulimit incompatibility problem caused by recent 2.4
+kernels; the unix IO module will automatically try to set any resource
+limits to be infinite on startup.
+
+Fixed a bug in e2fsck where it wasn't allocating a new block or inode
+bitmap if it wasn't present and the blocksize was 2k or 4k.
+ (Addresses Debian Bug #116975)
+
+E2fsck will check and fix botched ext3 V1 to V2 superblock updates by
+clearing the new V2 fields if they do not make sense or if the ext3
+superblock is version 1 superblock.
+
+E2fsck will automatically relocate the ext3 journal from a visible
+file (i.e., /.journal) to an hidden inode if the filesystem has been
+opened read/write.  This allows the users to add a journal while the
+filesystem is mounted, but the next time the system is rebooted, the
+journal file will disappear.  This avoids problems with backups,
+stupid operators with superuser bits, etc.
+
+Fix a bug in fsck where it would not support a filesystem type of
+"auto" if the device was specified in terms of LABEL=xxx or UUID=xxx.
+
+Fsck now supports fstab entries of the form "ext3,ext2".  It will also
+automatically identify reiserfs filesystems.
+
+The number of processes spawned by fsck can now be limited using the
+FSCK_MAX_INST environment variable.
+
+Fsck now searches the LVM proc hierarchy to find logical volumes which
+should be searched for  UUID and label information.
+
+Work around a bug in 2.4.10+ kernels by trying to unset the filesize
+limit if at all possible, when opening a block device.  (The filesize
+limit shouldn't be applied against writes to a block device.)
+
+In mke2fs and e2fsck, specifying the -c option twice will now do
+a read/write test on the disk.  Update the man pages to encourage
+using the -c option, and to discouraging running badblocks separately,
+since users tend to forget to set the blocksize when running 
+badblocks.
+
+Mke2fs now automatically clears the immutable attribute on a
+pre-existing .journal file left over from a previous failed attempt to
+add a journal to an already-mounted filesystem.
+
+Fixed mke2fs's exit codes to consistently indicate when the mke2fs
+operation failed.
+
+Mke2fs now creates the lost+found directory with permissions of 0700,
+so that files that had previously lived in protected directory are
+safe if they get dropped in lost+found and the system administrator
+doesn't deal with immediately.  (Addresses Debian #bug 118443)
+
+Mke2fs and e2fsck (and all programs that use the
+ext2fs_check_if_mounted function) will now properly identify that a
+device is mounted, even in cases where devfs has confused things with
+multiple devices names with the same identity, or if a dim-witted
+system administrator has done something stupid like creating device
+file aliases in their home directory.  Also now checks for swap devices
+by using /proc/swaps.  (Addresses Debian bug #106622)
+
+Added a new option (-T) to tune2fs which sets the time a filesystem
+was last checked.
+
+Speed up e2image when creating sparse raw image files by optimizing
+away excess lseek() system calls.
+
+Fix support of large (> 2GB) files when used as a filesystem in
+mke2fs, tune2fs, debugfs, and findsuper.
+
+Debugfs's stat and icheck commands now properly deals with large (>
+2GB) files.
+
+Debugfs's set_super_value command now prints out the list of valid
+superblock fields which can be set using the command.
+
+Debugfs's rm and kill_file command now updates the superblock free block
+and inode counts, thus keeping the filesystem consistent.
+
+Debugfs's lsdel command now takes an optional argument which allows
+the user to only see the most recently deleted files.
+
+A new command (undel) was added to debugfs which automates
+undeleting a deleted inode and linking it back to a directory.
+
+Debugfs's ls command now takes a new option, -d, which lists 
+deleted directory entries.
+
+Debugfs's testb, freeb, setb, and find_free_block commands now take an
+optional count argument.
+
+Add support for a new ext2 file attribute, EXT2_NOTAIL_FL, which will
+be used to signal that a particular inode should not be eligible for
+tail-merging --- this is needed for programs like LILO.
+
+The findsuper (an unreleased, uninstalled utility program) has been
+improved to add extra validity checks and to add a progress meter.
+(It is still an unsupported program; the officially supported way to
+recover from a trashed partition table is to use gpart; findsuper is
+for wizards only.  :-)
+
+Debugfs was fixed to compile with "configure --disable-swapfs".
+
+Cleaned up various manual pages.   (Addresses Debian bug #119624, #120171)
+
+Added new translation file for Turkish.
+
+Programmer's notes:
+-------------------
+
+Fix general gcc -Wall complaints.
+
+E2fsprogs (mostly) works with the dietlibc.
+
+The programming texinfo file has been expanded to include description
+of additional libext2fs functions.  (Still not completely done, but a
+lot of the more important functions have been documented.)
+
+Added a umask structure to struct_ext2_filsys, which currently only
+modifies the behaviour of ext2fs_mkdir(), but if we add any file
+creation functions to libext2fs, we should also make sure they respect
+the umask setting.
+
+The build-rpm script was fixed to be a bit more safe.
+
+The tests' Makefile now has a way of automating test case creation 
+for e2fsck, using "make testnew".
+
+Created a new function, ext2fs_dir_iterate2 which passes more
+information to the callback function (identical to the one used by
+ext2fs_dblist_dir_iterate).  The directory iterator functions take a
+new flag, DIRENT_FLAG_INCLUDE_REMOVED, which will return deleted
+directory entries.  If the directory entry is deleted, the callback
+function will be called with the entry parameter set to
+DIRENT_DELETED_FILE.
+  
+Added new functions, ext2fs_inode_alloc_stats and
+ext2fs_block_alloc_stats, which takes updates block/inode allocation
+statistics in the bitmaps, block group descriptors, and superblock
+when inodes or blocks are allocated or deallocated.
+
diff --git a/doc/RelNotes/v1.27.txt b/doc/RelNotes/v1.27.txt
new file mode 100644 (file)
index 0000000..fc302af
--- /dev/null
@@ -0,0 +1,60 @@
+E2fsprogs 1.27 (March 8, 2002)
+==============================
+
+The warning messages for mke2fs now go to standard error.
+
+Fixed to make sure "make check" runs all of the test programs with
+LD_LIBRARY_PATH set, so that we test the libraries in the build tree.
+
+The mke2fs program checks the boot sector for the BSD disk label, and
+avoids erasing it if it is there.
+
+Fixed a bug in e2fsck which caused it to core dump if the journal
+inode was missing when it was supposed to be there.
+
+E2fsck now prints ranges in pass 5 when printing deltas for the block
+and inode bitmaps.
+
+Debugfs's "ls -l" command now will print out the file type information
+in the directory entry.
+
+Create man pages and hard links for fsck.ext3 and mkfs.ext3.  If
+mke2fs is invoked as mkfs.ext3, create the filesystem with a journal.
+
+Debugfs can now examine the experimental directory indexing
+information.
+
+Fixed bug in debugfs which caused it to core dump if modify_inode is
+called without an open filesystem.
+
+The debugfs lsdel command now runs its output through a pager first.
+
+When installing manual pages, remove the compressed manual pages first.
+
+Synchronized with Debian's packaging information for e2fsprogs-1.26-1.
+
+Fix the 2.4 resource limitation workaround introduced in 1.26 which
+actually broke things on mips32, sparc32, and Alpha platforms.
+
+Updated the I18N code so that calls to setlocate(LC_CTYPE, 0) are made
+(which is required by the newer libintl libraries).
+
+Programmer's notes:
+-------------------
+
+Fixed various gcc -Wall complaints.
+
+Fixed a few memory leaks in the e2fsck journalling code, and in the
+ismounted code checking for a swap device.
+
+Add new inode I/O abstraction interface which exports an inode as
+an I/O object.
+  
+Exported ext2_file_flush as a public interface.
+  
+In ext2_file_write, we now mark the buffer void * argument as a const, since ext2_file_write doesn't modify the buffer.
+
+Lots of small random portability fixes to make e2fsprogs build under
+AIX --- even without the 5L compatibility toolkit, and even using the
+uber-crippled AIX native C compiler.
+
diff --git a/doc/RelNotes/v1.28.txt b/doc/RelNotes/v1.28.txt
new file mode 100644 (file)
index 0000000..4463996
--- /dev/null
@@ -0,0 +1,146 @@
+E2fsprogs 1.28 (August 31, 2002)
+================================
+
+Add support for the Hashed-Tree Directory Indexing to e2fsck.  Support
+for setting the htree flag is not included yet, although it can be
+manually turned on via the debugfs program.
+
+Clarified e2fsck error message which is printed when it cannot find
+sufficient contiguous block when relocating filesystem metadata.
+
+Added support for building an EVMS plugin module for ext2/3.  This
+module is substantially the same as the EVMS module shipping with EVMS
+1.1, with one or two bugfixes.  E2fsprogs can also build this plugin
+for use with EVMS 1.0 (which did not include the ext2 plugin module),
+if the configure --enable-old-evms flag is given.
+
+Fsck will search through EVMS volumes when trying to resolve
+filesystem specifications such as LABEL=xxx or UUID=xxx.
+  
+Added a new utility program, /sbin/findfs, which will return
+filesystem specifications such as LABEL=xxx or UUID=xxx, and prints
+the device name.
+
+Update and clarified various man pages. (addresses Debian Bug #145044,
+#146437, #131350, #151990, #144621, #141938)
+
+If there are no filesystems specified on fsck's command line, fsck now
+treat that as if the -As options were given.  Previously it would
+simply do nothing.  (Addresses Debian Bug #153102)
+
+Mke2fs no longer treats a failure to be able to clear the MD signature
+at the end of the filesystem as a fatal error.  (Addresses Debian Bug
+#155007)
+
+The e2p library functions (which are used by lsattr and chattr) now
+double check to make sure the file is a regular file or directory
+before attempting to use the ext2 ioctls.  Some device drivers
+unfortunately respond to the ext2 ioctl's with unknown behaviour.
+(Addresses Debian Bug #152029).
+
+The extended attribute handling has been updated to correspond with
+the latest V2 bestbits ACL code.
+
+Fixed bug in e2fsck which caused it to not clear the dtime field when
+processing truncated inodes on the orphan list.  This could cause data
+loss(!) if a filesystem is rebooted before a truncate has been
+committed.
+
+E2fsck now uses red/black trees in pass1b, which removes some O(n**2)
+algorithms.  This makes e2fsck much faster in the case of severely
+corrupted filesystems where a large number of blocks are claimed by a
+large number of inodes.  (Thanks to the 2.5 IDE device driver for
+inspiring this work.)
+
+Resize2fs has been significantly sped up when shrinking and expanding
+a filesystem by a very small number of blocks (for example, when EVMS
+is converting a partition to be an EVMS legacy volume).
+
+Added a new option to e2fsck, -D, which will optimize or compress all
+of the directories in the filesystem.
+
+E2fsck now catches SIGINT and SIGTERM to make sure it will can
+properly clean up and only exit at safe points.  Fsck will pass
+SIGINT/SIGTERM to its child processes, and wait until they have all
+exited before it exits.
+
+The uuid parsing code in the uuid library now properly complains when
+an illegally formatted uuid is presented to it.  (Addresses Debian bug
+#152891)
+
+Restrict use of the 2.4 setrlimit ABI f*ckup to kernels between 2.4.10
+and 2.4.17, since the workaround can cause problems when using a 2.4
+kernel with an old version of glibc built with the 2.2 headers.
+
+Fixed a bug in mke2fs where it wasn't properly clearing the initial
+superblock used by other filesystems.  (Addresses Debian bug #147256.)
+
+Added support for the synchronous directory feature written by Andrew
+Morton.
+
+The debugfs program can delete directories using the rmdir command.
+
+Add support for 8k and 16k filesystems (for systems with page sizes
+that are greater or equal to 8k or 16k, respectively).  Note that
+these filesystems can not be mounted on x86 systems, or other systems
+with only 4k page sizes, due to limitations in the current Linux VM
+code.
+
+Resize2fs requires that the filesystem state be valid and have no
+errors; otherwise, e2fsck -f must be run first.  (Previously it simply
+required that the last fsck time be greater than the last mount time.)
+
+Configure now defaults the man pages directory to /usr/share/man on
+Linux systems.
+
+E2fsck now offers to truncate inodes which contain too many blocks (so
+that i_blocks would overflow.  Also fixed handling of large sparse
+files.
+
+E2fsck now more completely checks for symlink validity, including
+requiring NULL termination and length checks.
+
+E2fsck will offer to try forcing a disk write to remap a bad block
+after finding a read error when reading a filesystem metadata block.
+
+Fixed a bug in debugfs which caused the -b and -s options to crash
+debugfs, as well as breaking the testb, setb, and clearb functions.
+
+Added a bmap command to debugfs which calculates the logical to
+physical block mapping for a particular inode.
+
+Fixed a bug in code which checked to see if a device was mounted which
+sometimes (rarely) failed in the case of a plain file.
+
+Fixed a bug in resize2fs where when it reported an error, it would
+print a message erroneously indicating that the filesystem had been
+resized before it aborted.
+
+When resizing a plain file which is smaller than the requested size,
+resize2fs will attempt to extended the file so that programs like
+e2fsck will not complain that the file is too small.
+
+Resize2fs will print the actual new size of the filesystem when it is
+finished resizing.
+
+Fixed a bug in debugfs where "ls -l" would report incorrect file type
+information on big-endian systems.
+
+
+Programmer's notes:
+-------------------
+
+Fixed collisions with C++ reserved words.
+
+Added portability fixes for building e2fsprogs on the HURD and AIX.
+
+Added the ext2ed program for creation of test cases.  (ext2ed has many
+limitations and bugs which make it unsuitable for production use.)
+
+The ext2fs_read_dir_block2 and ext2fs_write_dir_block now take a new
+flag, EXT2_DIRBLOCK_V2_STRUCT, which will will reverse when the
+name_len field is byte swapped on big-endian machines, since in the
+V2 structure, name_len is a char field which is doesn't need to be
+byte swapped --- except if an old-style kernel had byte-swapped the
+name_len field as part of the V1 structure.
+  
diff --git a/doc/RelNotes/v1.29.txt b/doc/RelNotes/v1.29.txt
new file mode 100644 (file)
index 0000000..8a060eb
--- /dev/null
@@ -0,0 +1,31 @@
+E2fsprogs 1.29 (September 24, 2002)
+===================================
+
+Fixed a bug in e2fsck which could corrupt a directory when optimizing
+it (via the -D option) or rebuilding the hash tree index with a 1 in
+512 probability, due to a fence post error.
+
+Fixed a bug in the LVM support code which caused LABEL='xxx' not to
+work correctly.
+
+Mke2fs now enables the directory indexing flag by default.  (Since
+this is a compatible feature flag, it's safe to do so.)
+
+Tune2fs will support setting the directory indexing feature flag.  It
+will automatically set up the default hash algorithm and hash seed
+fields in the superblock.
+
+If the bone-headed user enters the root filesystem twice in
+/etc/fstab, the -R option which skips the root filesystem will skip
+all of them.  (Addresses Debian bug #159423).  Note!  This is not a
+precedent for dealing intelligently with any other kind of doubled
+entry in /etc/fstab!
+
+
+Programmer's notes: 
+-------------------
+
+Removed perror declaration in lib/et/internal.h.  All modern systems
+can be expected to define perror() these days.  Besides, the lib/et
+code wasn't using perror at all anyway.  :-)
+
diff --git a/doc/RelNotes/v1.30.txt b/doc/RelNotes/v1.30.txt
new file mode 100644 (file)
index 0000000..36b2f14
--- /dev/null
@@ -0,0 +1,122 @@
+E2fsprogs 1.30 (October 31, 2002)
+=================================
+
+When resizing a filesystem, and inodes need to moved, resize2fs will
+update the inode's ctime field, and the mtime field of the containing
+directories, so that incremental backups using dump/restore will work
+correctly.
+
+In order to avoid spurious errors, e2fsck will check the last
+superblock write time to determine whether or not it can safely use
+the LOW_DTIME checks to determine if there are inodes on the orphan
+inode linked list that had somehow gotten disconnected.  (Addresses
+Sourceforge bug #620980)
+
+Partition in /proc/partitions that being with the string "lvm" are
+considered real partitions even if they do not end with a number.
+
+Fixed a bug in the the uuid generation function, where if /dev/urandom
+is not present, but /dev/random is, and there isn't sufficient
+entropy, the get_random_byte function could spin a loop forever.
+
+E2fsck, mke2fs, etc. will now reliably notice when image files are
+mounted using the loopback interface.  (Addresses Sourceforge bug
+#619119)
+
+When flushing buffers (as is done by badblocks, for example) check to
+see if the BLKFLSBUF ioctl succeeds, and if so, avoid using the
+FDFLUSH ioctl which causes the MD device driver which causes confusing
+syslog messages about obsolete ioctl messages.  (Addresses Sourceforge
+bug #545832).
+
+Debugfs's write command now checks to see if the destination filename
+exists before creating it.  (Addresses Sourceforge bug #478195.)
+
+When installing man pages, search for compressed man pages using all
+commonly used compression extensions (i.e., .Z, .gz, .bz2, etc.)
+
+Fixed a bug in fsck where multiple filesystems specified on the
+command were not being checked in parallel due to a logic bug
+introduced to support the FSCK_MAX_INST environment variable.
+
+We have added a new superblock field, s_mkfs_time, which indicates
+when a filesystem was created.  It is set via mke2fs, and printed out
+by dumpe2fs, but is not actually touched by the kernel.
+
+Dumpe2fs has been made more robust by not aborting if there is an
+error reading the block/inode bitmaps; instead it will still print out
+the location of the block/inode bitmaps and inode table.
+
+Add support for the an alternative block group descriptor layout which
+allows for on-line resizing without needing to prepare the filesystem
+in advance.  (This is the incompat feature flag meta_bg.)
+
+Add support for storing default mount options in the superblock, so
+that the filesystem can be mounted with specific mount options without
+needing to specify them on the mount command line or in the /etc/fstab
+file.
+
+Add support for a new inode flag, which is to be used for indicating
+the top of directory hierarchies for the Orlov block allocator.
+
+Fix e2fsck so that if it creates the lost+found directory, it does so
+with the more appropriate permissions of 0700.  Also change
+mklost+found so that it also creates the directory 0700.
+
+Fixed format bug in e2fsck if NLS is in use.
+  
+Add a German translation for e2fsprogs's NLS support.
+
+Fixed e2fsck so that it more handles BAD_BLOCK_IN_INODE_TABLE even at
+the beginning of the inode table.  This won't matter much, since if
+there is a bad block at the beginning of the inode table, the root
+directory won't be available.  But at least e2fsck won't crash in this
+case.
+
+Fixed endian problems in the htree code for e2fsck and debugfs.
+  
+When byte-swapping a filesystem on a PPC architecture, byte-swap the
+bitmaps since the historical big-endian ext2 variant had byte-swapped
+bitmaps, and the ext2fs library assumes this.  This fixes the
+regression test suite on PPC machines.
+
+Fix e2image so that it handles a bad block in the inode table
+appropriately.
+
+E2fsck now uses a more sophisticated algorithm to salvage corrupted
+directories that recovers more information in the corrupted directory
+block.
+
+E2fsck now performs additional consistency checks on indexed (HTREE)
+directories.
+
+Fix a bug where e2fsck might get confused about whether a completely
+empty directory block is an empty leaf block or an interior htree
+node.  This could cause e2fsck to get confused into think that a valid
+indexed directory was corrupted.
+
+E2fsck no longer creates an empty directory entry at the end of a
+directory block when optimizing a directory.  This would cause some
+earlier versions of the dxdir kernel code to corrupt the directory
+when attempting to split a node containing an empty directory entry.
+
+E2fsck could sometimes in rare circumstances leave the indexed flag
+set after a small directory was optimized by compressing it instead of
+indexing it.  (This should never happen in real life, since
+directories that small wouldn't have been indexed, but better safe
+than sorry.)
+
+E2fsck now only updates the master superblock in all cases.  This
+slightly shortens its run time.
+
+Ext2ed can deal with directory entries of length 0; previously it
+would get stuck in an infinite loop.
+
+Fsck now has support for reiserfs volumes when parsing LABEL= and UUID=
+specifiers.  (Sourceforge patch #613447)
+
+Badblocks will now work correctly on read-only devices such as
+CD-ROM's.  (Sourceforge patch #600451)
+
+Updated and clarified man pages.  (Addresses Debian bug #167108)
+
diff --git a/doc/RelNotes/v1.31.txt b/doc/RelNotes/v1.31.txt
new file mode 100644 (file)
index 0000000..fcc55ac
--- /dev/null
@@ -0,0 +1,39 @@
+E2fsprogs 1.31 (November 8, 2002)
+=================================
+
+Update EVMS ext2fsim plugin with EVMS 1.2.  (We still support
+compiling the fsim plugin with EVMS 1.0 and 1.1.)  Add better error
+handling for child process that die unexpectedly.  Add a hack to force
+mkfs to create filesystems that won't cause problems with hardware
+that has 2k or 4k minimum blocksize requirements.  Read from child
+processes in non-blocking mode, so that the GUI continues to update.
+
+Fix e2fsck so that it returns the appropriate exit code when the root
+filesystem has been changed, so that system's rc scripts will be told that 
+the system needs to be rebooted.
+
+Fix a bug in ext2fs_flush/ext2fs_close; when the MASTER_SB_ONLY flag
+was set, some of the descriptor blocks that should have been written
+out were getting skipped.
+
+Changed e2fsck to force out changes to the backup copies of the
+superblock and block group descriptors when important changes are made
+to those data structures.
+
+Fix a bug where e2fsck could erroneously mark a filesystem as being
+clean if a check of dirty filesystem is interrupted with a ^C.  (Bug
+introduced in e2fsprogs 1.28.)
+
+If journal debugging is enabled using --enable-jbd-debug, the debugging
+level is now set via the E2FSCK_JBD_DEBUG environment variable.
+
+If byteswapping support is disabled using configure --disable-swapfs,
+skip the tests which depend on byte-swapping, so that "make check"
+won't bomb out.
+
+Lsattr will now display the indexed directory flag.  Also, some of
+the more esoteric compression flags are suppressed unless compression
+support has been enabled.
+
+Update man pages.
+
diff --git a/doc/RelNotes/v1.32.txt b/doc/RelNotes/v1.32.txt
new file mode 100644 (file)
index 0000000..15af94d
--- /dev/null
@@ -0,0 +1,14 @@
+E2fsprogs 1.32 (November 9, 2002)
+=================================
+
+Fixed a bug in the Unix I/O routines which caused needless writebacks
+of clean blocks from the unix_io cache (they were erroneously marked
+as being dirty, so they were getting written back to disk before
+getting evicted from the disk cache).  This was harmless, but it
+significantly slowed down e2fsck.
+
+Made some other minor optimizations to the Unix I/O routines to save a
+small amount of CPU time.
+
+Updated internationalization files.
+
diff --git a/doc/RelNotes/v1.33.txt b/doc/RelNotes/v1.33.txt
new file mode 100644 (file)
index 0000000..d0f1742
--- /dev/null
@@ -0,0 +1,142 @@
+E2fsprogs 1.33 (April 21, 2003)
+===============================
+
+Added a new utility program, logsave, which captures the output of a
+command in a log file, even if the containing directory hasn't been
+mounted yet (in which case the it saves the output in memory until it
+can write out the logfile).  This is useful for capturing the
+output of fsck during the boot sequence.
+
+Fixed some portability problems that were causing problems under
+the Cygwin32 environment.
+
+Mke2fs now interprets a negative number to the -b option as a minimum
+block size.
+
+Fixed a bug in mke2fs which was incorrectly checking the argument to
+the -g option if the default block size was used.  (Addresses Debian
+bug #188319)
+
+Fsck now explicitly ignores tmpfs and devpts, and it will complain if
+it can not find filesystem checkers for jfs, reseirfs, and xfs.
+
+E2fsck now updates the global free block and inode counters from the
+block group specific counters quietly.  This is needed for an
+experimental patch which eliminates locking the entire filesystem when
+allocating blocks or inodes; if the filesystem is not unmounted
+cleanly, the global counts may not be accurate.
+
+Imported bug fixes to the EVMS plugin from the EVMS 2.0 tree.  (EVMS
+2.0 is not yet supported; this only pulled in the bug fixes: fixed
+possible hangs caused by bugs in calling waitpid, and not setting the
+pipe to non-blocking mode; also fixed a file descriptor leak; made
+sure all functions call log entry/exit functions.)
+
+Badblocks now flushes its output file as bad blocks are discovered.
+
+The uuid library is now more paranoid about assuming the correctness
+of the /dev/random device; it mixes in a stream of bytes from
+random/srandom, just in case.
+
+Update Debian files to reflect the fact that I am now the Debian
+maintainer of e2fsprogs.  Other various Debian-specific packaging
+cleanups.
+
+Move the source tarball generation functions from the top-level
+makefile to the util/gen-tarball script.  
+
+Updated the Turkish .po translation file.
+
+Added Heimdal and MIT krb5 extensions to the com_err library to make
+it more compatible with com_err libraries from those distributions.
+
+Changed dumpe2fs to always display the superblock fields relating to
+the journalling and/or directory indexing feature even if those
+features are not enabled.
+
+Updated and clarify copyright statement vis-a-vis alpha releases of
+e2fsprogs.
+
+The ss library will now try to dynamically link to the readline
+library and use it if it is present in the system.  This means that
+the debugfs program now has line editing and history features.  The
+SS_READLINE_PATH environment variable is used to find a readline or
+readline-compatible library.
+
+E2fsck now finds most duplicate filenames (all when rebuilding all
+directories via the -D option) and offers to delete or rename
+duplicate filenames/directory entries.  (Addresses Debian Bug #176814).
+
+Fix bug in e2image.  When writing out a raw image file, include data
+blocks from symlinks that do not store the symlink within the inode.
+
+Fix bug in resize2fs which incorrectly moved the block and inode
+bitmaps for sparse superblock filesystems and incorrectly marked
+blocks as in use.  (Addresses Debian bug #174766)
+Added a new shared library, the blkid library, which efficiently
+allows fsck, mke2fs, e2fsck, and tune2fs to be able to look up LABEL
+and UUID filesystem specifiers without needing to search all of the
+devices in the system.  Instead, the device is looked up in a cache
+file, and then verified to make sure the blkid cache is correct.
+
+Tune2fs and e2label will accept LABEL=xxx and UID=yyy specifiers for
+the device name, using the blkid library.  (Addresses Debian bugs
+#166048, #179671)
+
+Fsck now supports backslash escapes in /etc/fstab so that \040 can be
+used for spaces in device labels.
+
+Removed 32-bit limitations for debugfs's dump command.
+
+If the user specifies a large number of inodes, Mke2fs will
+automatically adjust the number of blocks per group to find a valid
+set of filesystem parameters.
+
+Add workaround to detect broken MD devices where when some of the
+underlying devices are marked read-only, writes to the MD device are
+silently dropped.  E2fsck will detect if there is an attempt to run
+the journal twice, and abort with an error if this is the case.
+(Addresses IBM Bugzilla bug #1226)
+
+E2fsck will print an error if more than one of the -p/-a, -n or -y
+options are specified.
+
+E2fsck will fix HTREE corruptions in preen mode, without stopping the
+boot process.  This is needed because the 2.4 ext2 filesystem
+accidentally had the INDEX_FL backwards compatibility code removed.
+
+Mke2fs no longer creates filesystems with the dir_index flag set by
+default; the user has to specifically request it.
+
+Update and clarified various man pages. (Addresses Debian bugs
+#173612, #175233, #175113, and #170497, #185945, #188318)
+
+Created man page for the mk_cmds program (from the libss library).
+
+Programmer's notes: 
+-------------------
+
+Fix various gcc -Wall nits.
+
+Fixed a lot of portability problems that caused e2fsprogs not to build
+successfully under Solaris and Apple/Darwin.
+
+Fixed a Makefile dependency to allow building e2fsprogs using parallel
+make jobs.
+
+Changes to create a subset distribution which consists only of the
+et, ss, uuid, and blkid libraries.  The configure script and top-level
+makefile were changed to support working with a subset distribution.
+
+Removed EXT2_FEATURE_RO_COMPAT_BTREE_DIR mention of since it's not
+actually used, and might people who are looking for
+EXT2_FEATURE_COMPAT_DIR_INDEX, which is in use.
+
+Updated debian files to fix a number of Lintian warnings.
+
+Updated config.guess and config.sub with newer versions from the FSF.
+
+Removed unnecessary libraries from being linked into the fsck, lsattr, 
+chattr, and blkid executables.
+
diff --git a/doc/RelNotes/v1.34.txt b/doc/RelNotes/v1.34.txt
new file mode 100644 (file)
index 0000000..f61095c
--- /dev/null
@@ -0,0 +1,130 @@
+E2fsprogs 1.34 (July 25, 2003)
+===============================
+
+Fixed a bug introduced in E2fsprogs 1.30 which caused fsck to spin in
+a tight loop while waiting for a child fsck to exit in some cases.
+This burns CPU times which slows down the low-level filesystem check.
+
+Added code to mke2fs to assure that the default block size for a
+filesystem is at least as big as the sector size of the device, if it
+can be determined.
+
+Changed mke2fs and resize2fs to round the default size of a filesystem
+to be an even multiple of the VM pagesize in order to avoid a Linux
+kernel bug introduced when the storage of the buffer cache was moved
+into the page cache.
+
+Mke2fs will warn the user when creating a filesystem with journalling
+and a blocksize greater than 4096.  (Addresses Debian bug #193773)
+
+Fixed a bug in resize2fs which caused it to fail on filesystems with a
+non-empty bad block list.  Resize2fs now discards any blocks on the
+badblock list which are no longer part of the filesystem as the result
+of a filesystem shrink.  (Note: this means that shrinking and then
+enlarging a filesystem is no longer a reversible operation;
+information about bad blocks in the part of the filesystem which is to
+be chopped off will be lost.)
+
+Changed resize2fs so the user can use prefixes to specify the units of
+the new filesystem size (sectors, kilobytes, megabytes, or gigabytes),
+and to make the error and informational messages explicitly display
+the blocksize used by the filesystem, in order to avoid confusion.
+(Addresses Debian bug: #189814)
+
+Added a new debugfs command, dump_unused, which dumps the contents of
+all unused blocks to stdout.  (Useful as an emergency try-to-find
+deleted data command.)
+
+Added a new debugfs command, imap, which prints the location of a
+specified inode in the inode table.
+
+Fixed a bug in the badblocks program which caused it to use one bit of
+randomness in its non-destructive read/write test, instead of using a
+full 8 bits of randomness.
+
+Added a new option (-t) to badblocks, which allows the user to control
+the test pattern(s) used when checking a disk.
+
+The blkid probe function now more correctly detects UDF filesystems.
+
+Fixed a bug in the blkid library which caused it to not update its
+cache if a filesystem changes from having a label to not having a
+label.
+
+Fixed a bug in the blkid library which could avoid an infinite loop
+in blkid_find_dev_with_tag() if /proc is not mounted and there the
+/etc/blkid.tab file has not yet been created.
+
+Fixed the badblocks program so that the destructive read/write test
+honors the -c option, and to use O_DIRECT when possible to avoid
+thrashing the system block buffer cache.
+
+Fixed various NLS issues.
+ - Added Czech and Swedish translations
+ - Removed testing NYC translation
+ - Fixed NLS support for message abbreviations in e2fsck
+ - Remove de-utf.po, since we shouldn't have two versions using different
+       charset encodings.
+ - Used ngettext() (abbreviated with the macro P_(str1, str2, n)) to
+       simplify the statistics reporting in e2fsck.
+
+Changed configure.in so that its defaults for *BSD systems no longer
+build an fsck wrapper, and not to install in /usr/local by default.
+
+Fixed some minor spelling errors/typo's in e2fsck and the configure
+script.
+
+Fixed various Debian packaging issues (see debian/changelog). 
+
+Updated and clarified man pages.  (Addresses Debian Bug #195616)
+
+Programmer's notes: 
+-------------------
+
+Fix gcc -Wall nitpicks.
+
+Updated gettext implementation used by e2fsprogs to 0.11.5, and enable
+NLS support by default.  (Added partial workaround for gettext/Darwin
+incompatibility problems.)
+
+Added full MIT KRB5 and Himdall compatibility support to the com_err
+library and the compile_et program.  (Addresses Debian bug #191900)
+
+Added the blkid_known_fstype() function to the blkid library, which
+returns true if it is passed a filesystem type which is recognized by
+the blkid probing functions.
+
+Improved the documentation for the blkid library.
+
+Added the ext2fs_get_device_sectsize() function the the ext2fs library, which
+returns the hardware sector size of a device, if it is available.
+
+Added a dependency in the blkid library's .so file to the uuid
+library, since the former uses the latter.  (Addresses Debian bug
+#194094)
+
+Added --with-diet-libc and --disable-evms to the configure script.
+
+Fixed a minor memory leak in the badblocks program.
+
+Fixed a portability problem in tune2fs --- not all systems have strptime().
+
+Fixed a portability problem in debugfs with the use of getopt() more
+than once.  Old-style BSD, new-style BSD, and Linux C libraries all do
+things differently.
+
+Add support Windows support to ext2fs_get_device_size().
+
+Added (normally disabled) debugging code to the Unix I/O manager which
+causes it to disable all userspace caching if the NO_IO_CACHE is
+defined.
+
+Changed the test I/O manager so it can always be linked into e2fsck,
+mke2fs, and tune2fs if enabled via --enable-test-io-debug to the
+configure script.  The test I/O manager will only print any debugging
+information if the TEST_IO_FLAGS or TEST_IO_BLOCK environment
+variables are set, which specifies which I/O operations are logged and
+a block number to watch, respectively.  The log messages are sent to
+stderr by default, unless a filename is specified via the
+TEST_IO_LOGFILE environment variable.
+
diff --git a/doc/RelNotes/v1.35.txt b/doc/RelNotes/v1.35.txt
new file mode 100644 (file)
index 0000000..2a4c520
--- /dev/null
@@ -0,0 +1,166 @@
+E2fsprogs 1.35 (February 28, 2004) 
+==================================
+
+E2fsck has a new -k option, which in conjunction with the -c options,
+preserves the existing badblocks list.
+
+Cleaned up e2fsck's preen-mode messages during the passes 1b, 1c, and 1d.
+
+E2fsprogs will now deal correctly with symlinks that contain
+extended attribute information, which can be created using SE Linux.
+(Addresses Debian Bug #232328)
+                                                                               
+Remove a double longjmp into an invalid stack frame bug in e2fsck.
+(This was during an abort sequence, which normally worked on Linux and
+caused a core dump on other operating systems.)
+
+Fix NLS bug in e2fsck, by avoiding trying to expand an empty string
+(the NLS library will replace "" with the .po header information).
+Fix a bug in mke2fs which caused -T largefile or -T largefile4 to core
+dump due to a division by zero error.  (Addresses Debian bug #207082)
+
+Fixed a bug in e2fsck which caused it to incorrectly fix a filesystem
+when reconnecting a directory requires creating a lost+found
+directory.  (Addresses Debian bug #219640).
+
+Fixed a bug where e2fsck would bomb out if a journal needed to be
+replayed when using an alternate superblock.
+E2fsck will give an extra grace period before actually forcing a check
+if the laptop is running on battery.  The next time fsck runs while
+the system is on the AC mains, or after the grace period is exceeded,
+the filesystem will be checked.  (Addresses Debian bug #205177)
+
+E2fsck will inform the user when there are 5 or fewer mounts before a
+filesystem check will be forced.  (Addresses Debian bug #157194)
+
+Fix e2fsck's handling of corrupted indirect blocks in the bad block.
+We now correctly handle the case where there is an overlap between a
+block group descriptor or a superblock and a bad block indirect block.
+In the case where the indirect block is corrupted, we now suggest
+"e2fsck -c".
+
+Fix byte swap bugs in e2fsck that caused the journal backup location 
+in the superblock and symlinks created by SE Linux to be cleared
+by e2fsck on big-endian machines.  (Addresses Debian bug #228723)
+
+E2fsck -c now replaces the current list of bad blocks with the ones
+found by badblocks.
+
+Fix bugs in e2fsck and tune2fs which could cause a core dump if a
+non-existent LABEL or UUID specifier is to e2fsck or tune2fs.
+
+Fix a potential bug in e2fsck which could cause it to core dump when
+trying to print the location of the backup superblock.
+
+Protect against a potential core dump in e2fsck when printing a
+message about backup superblocks.
+
+Add support for backing up the journal inode location in the
+superblock.  E2fsck will automatically save the journal information in
+the superblock if it is not there already, and will use it if the
+journal inode appears to be corrupted.  ext2fs_add_journal_inode()
+will also save the backup information, so that new filesystems created
+by mke2fs and filesystems that have journals added via tune2fs will
+also have journal location written to the superblock as well.
+Debugfs's logdump command has been enhanced so that it can use the
+journal information in the superblock.
+
+E2fsck will now update all superblocks when moving the journal inode.
+  
+Shrink the size of the e2fsck executable by moving some initialized
+variables to the BSS segment.
+
+E2fsck will avoid printing the ^A and ^B characters which bracket the
+progress bar when stdout and stdin are a tty device instead of a pipe
+to another program.  (Addresses Debian bug #204137)
+
+Debugfs's mkdir command will automatically expand the directory if
+necessary.  (Addresses Debian Bug: #217892)
+Fixed a bug in debugfs so that copying a file from /dev/null uses the
+correct mode bits.  (Addresses Debian Bug: #217456)
+If the environment variables DEBUFS_PAGER and PAGER are not set,
+debugfs now searches for the appropriate pager to use, beginning with
+/usr/bin/pager, and then falling back to 'more' and 'less'.
+(Addresses Debian bug #221977)
+
+Debugfs will now support 2.6 device numbers where the major or minor
+number may be larger than 255.  (Addresses Sourceforge bug #865289)
+Fix debugging printf in resize2fs.  (Addresses Debian Bug #271605)
+
+Chattr now stops processing options when it sees '--'.  (Addresses
+Debian bug #225188)
+
+Fix regression tests so they work correctly when e2fsprogs is compiled
+with configure --disable-htree.
+
+Fix bug in uuid library when there is no network card and the library
+is generating a time-based uuid.  The random MAC address was not
+correctly generated to be a multicast address.
+Add compile_et extensions from Heimdall that were missed the first time
+around.
+
+Fix bug in badblocks when using O_DIRECT; we need to make sure that
+we're reading from an offset which is page aligned.  For read-only and
+read-write tests, we try to recover after an error so that we can
+continue reading on page-aligned boundaries.  (Addresses Debian Bug
+#203713)
+  
+Badblocks now checks 64 blocks at a time instead of 16.  (Addresses
+Debian bug #232240)
+Updated and clarified various man pages.  (Addresses Debian Bug
+#206845, #222606, #214920, #232406)
+
+Updated and fixed translations.   (Addresses Debian bugs #200086, #214633)
+
+Fixed various Debian packaging issues (see debian/changelog).
+
+Programmer's notes: 
+-------------------
+
+Fixed a build problem so that e2fsprogs would compile with the
+--enable-profile option to configure selected.  (Addresses Sourceforge
+bug #811408)
+Fixed C++ problems with the ext2fs.h header.  (Addresses Red Hat
+Bugzilla Bug #112448)
+                                                                               
+Centralize code which calculates the location of the superblock
+and block group descriptors so that it is in a single library routine.
+
+Added two new functions, ext2fs_file_open2() and
+ext2fs_inode_io_intern2() which take a pointer to an inode structure.
+
+Fix compile_et to output the correct prototype for
+initialize_xxx_err_table_r() in the header file.  (Addresses Debian
+bug #204332)
+
+In the lib/et makefile, make sure com_err.info is deleted on "make clean".
+  
+Fix 64-bit warnings in e2fsprogs pass1b by using inttypes.h if
+present.  This is for when we try stuffing an int into void * pointer.
+
+Fix type-punning which can cause gcc 3.x to miscompile code by getting
+confused about pointer aliasing.  ext2fs_getmem(), ext2fs_free_mem(),
+and ext2fs_resize_mem() all now take a 'void *' instead of a 'void
+**'.  The EVMS code uses an ugly union approach since we don't want to
+modify the EVMS interfaces. 
+
+Make sure all Makefiles use $(MAKE) rather than hardcoded "make", to
+aid build process on systems can use invoke GNU make as "gmake".
+
+Added regression testing for mke2fs.
+
+Fixed gcc -Wall nitpicks.
+
+Fixed various compiler warnings.
+
+Add portability fixes for FreeBSD and for using fsctl under Darwin to
+support ext2 ioctl's.
+
diff --git a/doc/RelNotes/v1.36.txt b/doc/RelNotes/v1.36.txt
new file mode 100644 (file)
index 0000000..912bad2
--- /dev/null
@@ -0,0 +1,302 @@
+E2fsprogs 1.36 (February 4, 2005)
+=================================
+
+All of the patches that were applied to Fedora Core 3's
+e2fsprogs-1.35-11.2 have been integrated, although sometimes with a
+lot of bug fixes first.  Users of Fedora Core 3 are strongly
+encouraged to upgrade to e2fsprogs 1.36 as soon as possible.
+
+Add support for filesystem with the online resizing via resize inode
+feature.  Fixed numerous bugs from the Fedora patches.  The Fedora
+patches also didn't bother to do any consistency checking on the
+resize inode, or add any tests to the regression test suite.  The "-R
+resize=4g" option to mke2fs was a no-op in the Fedora patches, despite
+being listed in mke2fs's usage message.  All of these shortcomings
+have been corrected.
+
+E2fsck can also also fix filesystems trashed by Fedora's resize2fs
+program.  In order to do this, the user must run the commands:
+
+       debugfs -w /dev/hdXXX -R "features ^resize_inode"
+        e2fsck -f /dev/hdXXX
+
+Optionally, the ext2prepare command can be used to re-enable online
+resizing after the filesystem has been fixed.
+
+The fsck program will now accept an optional filedescriptor argument
+to the -C option.  (The Fedora version of this patch would sometimes
+cause fsck to ignore a parameter on fsck's command line in some rare
+cases, sigh.)
+
+Make sure e2fsprogs doesn't write garbage into the reserved portion of
+large inodes.
+
+Make sure resize2fs releases the blocks belonging to the old inode
+table blocks when moving the inode table.  (Addresses Debian Bug:
+#290894)
+
+Skip the r_resize_inode test if resize2fs is not compiled (due to
+configure --disable-resizer)
+
+E2fsck now checks the summary filesystem accounting information, and
+if any of the information is obviously wrong, it will force a full
+filesystem check.  (Addresses Debian Bug #291571)
+
+Fix e2fsck to not complain when the resize_inode feature is enabled,
+s_reserved_gdt_blocks is zero, and there is no DIND block allocated in
+the resize inode.
+
+Fix e2fsck to note delete symlinks that contain an extended attribute
+after the ext_attr feature flag has been cleared.  (Addresses Red Hat
+Bugzilla #146284).
+
+Add new utility program, copy_sparse.c, which is very useful
+for dealing with large sparse files (such as e2image files).
+
+Add support for jnl_blocks[] for debugfs's set_super_value.
+
+Fix filefrag so that it works correctly with sparse files.
+
+Filefrag -v will print first and last blocks.
+
+Add interpretation of OS Creator values for FreeBSD and Lites in mke2fs
+and dumpe2fs.
+
+Add mke2fs support so that it can support filesystems larger than 4TB
+automatically, by retrying with a 4k blocksize if the device size is
+too big to be expressed using a 1k blocksize.  (Addresses Sourceforge
+bug #1106631)
+
+Change blkid to test for NTFS first because Windows sometimes doesn't
+clear enough of the partition to confuse the probing routines into
+thinking the old filesystem type is still valid.  (Addresses Debian
+Bug #291990)
+
+Add support for swap partition label and uuid's in the blkid library.
+
+Add support to the blkid library to recognize Oracle ASM volumes.
+
+Make blkid -t display all devices that match the specified criteria,
+not just the first one, and work more consistently when the blkid
+cache file is not available or set to /dev/null.  (Addresses Debian
+Bug #290530 and #292425)
+
+Badblocks will now correctly display block numbers greater than
+999,999,999 in its progress display.
+
+The tune2fs program will not allow the user from setting a ridiculous
+number of reserved blocks which would cause e2fsck to assume the
+superblock was corrupt.  E2fsck's standards for what is a ridiculous
+number of reserved block has also been relaxed to 50% of the blocks in
+the filesystem.
+
+The blkid library will return vfat in preference to msdos, and ext3 in
+preference to ext2 (if the journalling flag is set) so that mount will
+do the right thing.  (Addresses Debian bug #287455)
+  
+Mke2fs will now use the -E option for extended options; the old -R
+(raid options) option is still accepted for backwards compatibility.
+Fix a double-free problem in resize2fs.  (Red Hat Bugzilla #132707)
+
+Mke2fs will now accept a size in megabytes, gigabytes, and other units
+(via "32m" or "4g" on the command line) if the user finds this more
+convenient than specifying a block count.
+
+Fix an obscure, hard-to find bug in "e2fsck -S" caused by an inode
+cache coherency problem.
+
+Debugfs now supports a new command, set_inode_field, which allows a
+user to manually set a specific inode field more conveniently, as well
+as set entries in the indirect block map.
+
+Debugfs's set_super_value command has been enhanced so that the user
+can set most superblock fields, including the date/time fields and
+some of the more newly added superblock fields.
+
+E2fsprogs programs now accept an offset to be passed to the file
+specifiers, via the syntax: "/tmp/test.img?offset=1024".
+
+E2fsprogs programs will now accept blocksizes up to 65536; kernel
+support on the x86 doesn't exist for now, but it can be useful on
+other architectures with page sizes greater than 4k.  There are 2.6
+kernel patches out there which enable this, but they are of this
+writing still experimental.
+
+The e2image command now takes the -s option which will scramble
+directory entries for raw image files.
+
+Fix a file descriptor leak in the filefrag program.
+
+Make sure e2fsck doesn't crash when /proc/acpi/ac_adapter is not
+present.
+
+Fix bug in debugfs where kill_file would lead to errors when deleting
+devices and symlinks.  (Sourceforge Bugs #954741 and #957244)
+
+Fix bug in the blkid library when detecting the ocfs1 filesystem 
+
+Remove obsolete EVMS 1.x and a.out DLL support.
+
+E2fsck will attempt to recover from a journal containing illegal blocks.
+
+Fixed two potential ordering constraint problems in e2fsck which might
+cause the filesystem to be corrupted if e2fsck is interrupted during a
+(extremely narrow) race window.  Thanks to Junfeng Yang from the
+Stanford Metacompilation group for pointing this out.
+
+Fixed bug in e2fsck where it would not accurately detect whether or
+not the system is running on adaptor if the ACPI device representing
+the AC adapter didn't correspond to the what was used on IBM
+Thinkpads.
+
+Change e2fsck to accept directories greater than 32MB.
+
+Fix e2fsck so that a checkinterval of zero disables a time-based check
+of the filesystem.
+
+Debugfs will check the DEBUGFS_PAGER environment variable in preference
+to the PAGER environment variable.  (Addresses Debian Bug #239547)
+
+Tune2fs will not mark rewrite the superblock if the feature bitmasks 
+are not modified.
+
+The debugfs program will set the filetype information when creating a
+link.
+
+Add debugfs -d option to use a separate source of data blocks when
+reading from an e2image file.
+
+Add e2image -I option which allows the e2image metadata to be
+installed into a filesystem.
+
+Fixed bug in the badblocks program which caused "done" to always
+appear in English even when a translation was available.  (Addresses
+Debian Bug #252836)
+
+The blkid program has a new option -o which controls the output format
+of the blkid program; this is makes blkid more convenient to use in
+shell scripts.
+
+Fix a minor bug in uuid library, which was not using the full 14 bits
+of clock sequence when generating UUID's.
+
+Fix a Y8.8888K problem in the uuid library.
+
+Logsave now creates a new session id for itself to avoid getting
+killed by init when transitioning between init levels.
+
+Change the licensing of the UUID library to be the 3-clause BSD-style
+license; this allows Apple to use the uuid library in Darwin.
+
+Add ocfs and ocfs2 probe support into the blkid library.
+
+Fix a memory and file descriptor leak in the blkid library.
+
+The blkid library will revalidate the device if the system time is
+earlier than last verification time of the device, since that
+indicates that the system time is probably not trustworthy.
+
+The blkid library will override the default location of the blkid.tab
+file by the BLKID_FILE environment variable, if it is available.
+
+Change the getsize functions to use the BLKGETSIZE64 ioctl on Linux 2.6.
+
+Add various portability fixes for lame new versions of glibc, Darwin
+and GNU/KFreeBSD, as well as removing XSI:ism's.  (Addresses Debian
+Bugs #239934, #264630, #269044, #255589, #289133)
+
+Add support for Windows 9x/NT under Cygwin.
+
+Updated and clarified various man pages.  (Addresses Debian Bugs #236383,
+       #241940, #238741, #242995, #256669, #268148, #256760, #273679)
+
+Updated and fixed translations.   (Addresses Debian bugs #244105, #262836)
+
+Update the rpm spec files so that it works better with Fedora core 2
+and RH9.
+
+Fixed various Debian packaging issues (see debian/changelog).  In
+particular, fixed the Debian initrd scripts.  (#241183, #248050,
+#253595, #247775)
+
+
+Programmer's notes: 
+-------------------
+
+Fixed various gcc -Wall warnings.
+
+The uuid library now has new functions uuid_unparse_upper() and
+uuid_unparse_lower() which forces the case of the hex digits to be
+upper case, or lower case.
+
+The build process has been sped up by enhancing the subst program
+to update the modtime on the generated files even when the generated
+file hasn't changed.
+
+The uuid library now uses C99 stdint.h types instead of custom types.
+
+Updated config.guess and config.sub with newer versions from the FSF.
+
+Removed out of date .cvsignore files from the source distribution.
+
+The ext2fs_unlink() function will return an error if both the name and
+inode number are unspecified, to avoid doing something surprising
+(such as unconditionally deleting the first directory entry).
+Directory entries are now deleted by coalescing them with the previous
+directory entry if possible, to avoid directory fragmentation.  This
+is not an issue with the e2fsprogs suite, but may be a problem for
+some of the users of libext2fs, such as e2tools.
+
+Add support for version numbers of the form "1.36-rc1".
+
+Fix build of mke2fs.static.
+
+Add basic ext2fs library support for large (EA in inode) inodes.
+
+The test_io mechanism can now abort after n reads or writes to a
+particular block.  The block is specified by TEST_IO_BLOCK environment
+variable, and the read/write count by the TEST_IO_READ_ABORT and
+TEST_IO_WRITE_ABORT environment variables.  The block data is now only
+dumped if the 0x10 bit is set in TEST_IO_FLAGS.
+
+UUID_DEFINE() in the uuid library now creates a static variable, with
+__attribute__ ((unused)) if we are using GCC, so that UUID_DEFINE can
+be used in header files.
+
+Add support for the install-strip and install-shlibs-strip targets, as
+suggested by the GNU coding guidelines.  "make install" no longer
+strips the binaries which are installed.
+
+Remove support for the --enable-old-bitops configure option which was
+only for very old sparc systems.
+
+Remove support for --enable-clear-htree; this was only needed during
+the early development of the htree patch.
+
+Use Linux-kernel-style makefile output so it is easier to see compiler
+warnings.
+
+Update gettext files to version 0.14.1.
+
+Update to use autoconf 2.5x.
+
+Improved support for compiling e2fsprogs under dietlibc.
+
+Make e2fsprogs portable to Solaris and FreeBSD systems.
+
+Add blkid_verify(), blkid_get_library_version(), and
+blkid_parse_version_string() functions to the blkid library.
+
+Add pkg-config files for e2fsprogs's libraries.
+
+Fix "make uninstall" to so that it removes everything that is installed.
+
+Add a configure --enable-maintainer-mode option which enables the
+makefile rules to rebuild the configure script from configure.in, and
+to rebuild the .gmo files in po directory.
+
+Drop the sparc assembly bitwise operations; it's less efficient
+than the GCC 3.4 compile code and triggers compiler warnings on
+sparc64.  Thanks to Matthias Andree for his analysis and suggestions.
+(Addresses Debian Bug #232326)
+
diff --git a/doc/RelNotes/v1.37.txt b/doc/RelNotes/v1.37.txt
new file mode 100644 (file)
index 0000000..2b2646b
--- /dev/null
@@ -0,0 +1,55 @@
+E2fsprogs 1.37 (March 21, 2005)
+===============================
+
+Add support for checking the validity of Extended Attributes stored in
+inodes to e2fsck.
+
+Add support for dumping the contents of large inodes to debugfs,
+including the extended attributes stored in inodes.
+
+Fix mke2fs, e2fsck, debugfs, and the ext2fs_mkdir function so that
+when we create a new inode we make sure that the extra information in
+the inode (any extra fields in a large inode and any ea-in-inode
+information) is initialized correctly.  This can take place when
+mke2fs creates the root and lost+found directory, when e2fsck creates
+a new root inode or a new lost+found directory, and when the user uses
+the debugfs write, mknod, or mkdir commands.  Otherwise, the newly
+create inode could inherit garbage (or old EA information) from a
+previously deleted inode.
+
+Fixed a bug in e2fsck so it would notice if a file with an extended
+attribute block was exactly 2**32 blocks, such that i_blocks wrapped
+to zero.
+
+Added support to filefrag to detect files which are using the new
+experimental file extents format, and use the non-ext2 algorithm in
+that case.  Fixed a bug to avoid reporting a false discontinuity if
+there is one or more unallocated blocks at the beginning of a file.
+
+Duplicated a check for noticing whether or not the number of blocks
+(given a certain blocksize) is greater than 2**32 when the
+BLKGETSIZE64 ioctl is not available to ext2fs_get_device_size().  This
+allows mke2fs to automatically use a larger blocksize when creating a
+filesystem on a very large device when run on systems that do not
+support BLKGETSIZE64.
+
+Fix the I18N build which was broken in e2fsprogs 1.36 because the
+build system had been switched to treat the .gmo files as shipped
+files (for backwards compatibility with systems that have older GNU
+I18N tools installed), but the gen_tarball.in script was still
+removing the .gmo files from the official source distribution.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs ##296769, #299341)
+
+Programmer's notes:
+-------------------
+
+Added new functions to the e2p library which convert between a string
+and os_type: e2p_os2string() and e2p_string2os(), and used them to
+make the generated binaries more compact.
+
+Fixed a compile-time error on Darwin systems.
+
+Cleaned up the lib/ext2fs Makefile slightly.
+
diff --git a/doc/RelNotes/v1.38.txt b/doc/RelNotes/v1.38.txt
new file mode 100644 (file)
index 0000000..d8ab030
--- /dev/null
@@ -0,0 +1,138 @@
+E2fsprogs 1.38 (June 30, 2005)
+==============================
+
+Fix blkid's test programs (built with "make check") compile correctly
+even without "configure --enable-blkid-debug".
+
+Fix ia64 core dump bug caused by e2fsprogs running afoul of C99 strict
+type aliasing rules on newer gcc compilers.  (Addresses Red Hat
+Bugzilla ##161183.)
+
+Fix com_err library to make it more compatible with recent changes
+made to the com_err library in MIT Kerberos V5 version 1.4.
+(Addresses Sourceforge Bug #1150146)
+
+General cleanup of messages printed by e2fsprogs programs for grammar,
+consistency, and to make life easier for translators.  Fixed a few
+strings containing English that had not been marked as needing
+translations.  Removed strings that do not need to be translated, to
+make life easier for translators.
+
+Mke2fs and badblocks will take advantage of a feature in Linux 2.6 to
+test to see if a device appears to be in use instead of just relying
+on /proc/mounts and /etc/mtab.  (Addresses Debian Bug #308594).
+
+Fix portability problem in the filefrag program affecting platforms
+where the size of an integer is smaller than the size of a long.
+(Addresses Debian Bug #309655)
+
+Mke2fs will now use a larger journal by default for filesystems
+greater than 4GB.  (128 MB instead of 32MB).
+
+Mke2fs will refuse to create filesystems greater than 2**31-1 blocks,
+unless forced.  This is to avoid signed vs. unsigned kernel bugs in
+block numbers that still need to be fixed.
+
+The blkid program has a new option which will more efficiently search
+for device when it is known (or expected) that only one matching
+device will be found in the system, such as when doing a lookup by
+UUID.
+
+Debian's e2fsprogs-specific initrd fragment will avoid including
+unnecessary libraries into the initrd ramdisk by unsetting LD_PRELOAD
+and LD_LIBRARY_PATH, and filtering out libraries found in
+/etc/ld.so.preload.  (Addresses Debian Bug: #304003)
+
+Fixed a potential portability issue in the blkid programs for
+architectures where the char type is unsigned.  (Addresses Sourceforge
+Bug: #1180585)
+
+Fix a bug in filefrag so that it doesn't falsely count an extra
+discontinuity when the first block found is an indirect block.
+(Addresses Debian Bug #307607).
+
+Fix blkid's recognition of cramfs filesystems, and enhance it to be
+able to handle cramfs labels.
+
+Fix debugfs's stat command to not core dump when a filesystem is not
+open.
+
+Fix e2fsck's handling of error conditions caused by the resize inode
+claiming blocks that are also used by other inodes, a filesystem
+corruption which was commonly caused by a bug in Fedora Core 3's
+resize2fs program.
+
+Fixed bug in filefrag which caused it to fail on non-ext2/3
+filesystems.  (Addresses Debian Bug: #303509)
+
+If the superblock last mount time indicates that the system clock may
+not be accurate, then e2fsck will omit checking inodes' deletion time
+field for indications of a potential corrupted orphaned inode list.
+(Previously e2fsck only omitted these LOW_DTIME checks when the
+superblock's last write time looked insane.)
+
+Fixed a IA64 core dump bug in the e2p library which affected dumpe2fs.
+(Addresses Debian bug #302200)
+
+Make the blkid library more paranoid about being run from setgid
+programs, and to use __secure_getenv() from libc if it is available.
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.
+(Addresses Debian Bugs: #304591, #304592, #304594, #304597, #304593
+and Sourceforge Bug: #1189803)
+
+Updated and fixed translations.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.
+
+Programmer's notes:
+-------------------
+
+Ext2fs_set_bit(), ext2fs_clear_bit(), and ext2fs_test_bit( have been
+changed to take an unsigned int for the bit number.  Negative bit
+numbers were never allowed (and didn't make any sense), so this should
+be a safe change.  This is needed to allow safe use of block numbers
+greater than or equal to 2**31.
+
+The compile_et program will avoid recreating generated foo_err.c and
+foo_err.h files if no changes are necessary.  The compile_et program
+will also atomically replace these files to avoid a potential parallel
+build race problem on SMP systems.  (Addresses Sourceforge Bug:
+#1157933)
+
+Added a new function to the blkid library, blkid_probe_all_new(),
+which only probes newly added disk devices, and change
+blkid_find_dev_with_tag() to use this function so that when a
+requested tag is not found, devices that were previously not checked
+are searched before searching all devices in the system.
+
+Added new functions to the blkid library, blkid_dev_set_search() and
+blkid_dev_has_tag().
+
+E2fsck's problem strings can now use @m and @n as abbreviations for
+"multiply-claimed" and "invalid", respectively.
+
+The e2fsprog.pot file now has an explanation of how the @-expansion
+and %-expansion works, and strings in e2fsck/problem.c which contain @
+characters now have comments in e2fsprogs.pot with the @-expansion to
+make life easier for translators.
+
+Fixed missing return values in the ext2fs library which could cause it
+to return random garbage in certain error conditions.
+
+Allow the current time to be overridden via the E2FSCK_TIME environment
+variable for use in regression tests.
+
+The test script driver program now exits with a non-zero status if
+there any of its test that it ran failed.
+
+Fixed problems with parabuilds on SMP systems.  (Addresses Sourceforge
+Bug: #1157933)
+
+Fixed "make check" so that it compiles correctly even when e2fsprogs'
+header files have not be installed in the system include directories.
+(Addresses Sourceforge Bug: #1180572)
+
+Fixed gcc -Wall nits.
+
diff --git a/doc/RelNotes/v1.39.txt b/doc/RelNotes/v1.39.txt
new file mode 100644 (file)
index 0000000..f7c4e9d
--- /dev/null
@@ -0,0 +1,248 @@
+E2fsprogs 1.39 (May 29, 2006) 
+=============================
+
+Fix 32-bit cleanliness in e2fsprogs so that we can support filesystems
+between 2**31 and 2**32 blocks.
+
+Change mke2fs to use /etc/mke2fs.conf as a configuration file to
+configure the filesystem features, blocksize, and inode_ratio for
+different filesystem types.
+
+Mke2fs will now create filesystems hash trees and on-line resizing
+enabled by default, based on the new /etc/mke2fs.conf file.
+
+The e2fsprogs tools (resize2fs, e2fsck, mke2fs) will open the
+filesystem device node in exclusive mode to prevent accidents by
+system administrators.  In the case of resize2fs and mke2fs, it will
+only use exclusive mode if the filesystem is not mounted.
+
+Fixed a bug in mke2fs which caused it to to fail when creating the
+resize inode for large filesystems.  (Addresses Debian Bug #346580)
+
+When allocating space for the RAID filesystems with the stride
+parameter, mke2fs will now place each portion of the group's inode
+table right up after the superblock (if present) in order to minimize
+fragmentation of the free space.
+
+Speed up mke2fs and e2fsck by writing inode and block bitmaps more
+efficiently by writing the inode and block bitmaps in one pass, thus
+reducing the number of disk seeks required.
+
+Add support for on-line resizing to resize2fs.
+
+Fix blkid library so that logic to determine whether or not a device's
+cached information in /etc/blkid.tab needs to be verified or not
+doesn't get confused by a system clock which is insane (for example,
+if the battery is dead on a Macintosh running PPC Linux.  (Addresses
+Red Hat Bug: #182188)
+
+The blkid library will now store the UUID of the external journal used
+by ext3 filesystems, so that in the future, the userspace mount binary
+can use this to find the location of the external journal and pass
+this information to the kernel.
+
+E2fsck will now consult a configuration file, /etc/e2fsck.conf to
+control how various options should be handled.  See the e2fsck.conf
+man page for more details.   (Addresses Debian Bug: #150295)
+
+E2fsck now prints an explanatory message when delaying a filesystem
+check when the system is running on battery.  (Addresses Debian Bug:
+#350306)
+
+E2fsck will detect if the superblock's last mount field or last write
+field is in the future, and offer to fix if so.  (Addresses Debian Bug
+#327580) These problems will be fixed automatically in preen mode
+since Debian's boot sequence bogusly doesn't set the time correctly
+until potentially very late in the bootup process, and this can cause
+false positives which will cause users' systems to fail to boot.
+(Addresses Debian Bugs #343662 and #343645)
+
+E2fsck now checks to see if the superblock hint for the location of
+the external journal is incorrect, and if so, offer to update it.
+(Addresses Debian Bug: #355644)
+
+Fix e2fsck from segfaulting on disconnected inodes that contain one or
+more extended attributes.  (Addresses Debian Bug: #316736, #318463)
+
+E2fsck will stop and print a warning if the user tries running a
+read/write badblocks test on a read-only mounted root filesystem.
+
+Fix a memory leak in e2fsck's error paths.  (Thanks to Michael
+C. Thompson for pointing these out; they were originally found using
+Coverity.)
+
+When resizing a file containing a filesystem, resize2fs will expand or
+truncate a file as necessary.  (Addresses Debian Bug: #271607)
+
+Resize2fs will now automatically determine the RAID stride parameter that
+had been used to create the filesystem, and use that for newly created
+block groups.   The RAID stride parameter may also be manually specified
+on the command line using the new -S option to resize2fs.
+
+Fix mke2fs so that it correctly creates external journals on
+big-endian machines (such as a S/390).  
+
+Fix a bug in the e2p library which could cause dumpe2fs to (rarely)
+fail to print out the journal or hash seed UUID.  (Thanks to Guillaume
+Chambraud for pointing this out.)
+
+Dumpe2fs will now print the size of the journal (if present).
+
+Fix debugfs's set_inode_field command so it can properly set the frag,
+fsize, uid_high, gid_high, and author fields in the inode instead of
+silently failing, and so that setting the i_size actually sets i_size
+correctly.
+
+Add a new debugfs command, set_current_time, which sets fs->now so
+that regression test suites can repeatedly modify the filesystem's
+last_write fields.
+
+Fix a bug in debugfs's icheck which would incorrectly report the owner
+of an extended attribute block.
+
+Fix the debugfs commands htree_dump, dx_hash, and list_dir so they print a
+print a usage message when an illegal option character is given.
+
+Fix debugfs's dump_unsued command on filesystems with a 64k blocksize
+so it won't core dump.  (Addresses SourceForge bug #1424311)
+
+Fix mklost+found so that it creates a full-sized directory on
+filesystems with larger block sizes.
+
+Fix a file descriptor leak in blkid library.
+
+Fix a display bug in "badblocks -sv" so that the done message properly
+clears the block number at the end of the test.  (Addresses Debian Bug
+#322231)
+
+Allow fractional percentages to the -m option in mke2fs and tune2fs
+(Addresses Debian Bug: #80205)
+
+Use fstat/fstat64 in getsize.c if the the target is a regular file,
+instead of attempting to do a binary search.  Fix some fd leaks in
+error cases.
+
+Add support for device mapper library to the blkid library to ensure
+that the "best" (i.e., leaf) device is probed by the blkid library.
+
+Fix the blkid library so that it notices when an ext2 filesystem is
+upgraded to ext3.
+
+Improve the blkid's library VFAT/FAT detection; it now understands
+labels stored in the root directory, and is more paranoid about
+checking the FAT superblock values.
+
+Fixed a fd leak in the uuid library which was causing problems for the
+LVM tools.  (Addresses Debian Bug: #345832)
+
+Add support for the reiser4 and software suspend partitions to the
+blkid library.  Also add support for extract the label from iso9660
+filesystems.
+
+Fix a compile_et bug which miscount the number of error messages if
+continuations are used in the .et file.
+
+Add extra sanity checks to protect users from unusual circumstances
+where /etc/mtab may not be sane, by checking to see if the device is
+reported busy (works on Linux 2.6) kernels.  (Addresses Debian Bug
+#319002)
+
+Updated French, Dutch, Polish, and Swedish translations.  (Addresses Debian
+Bug: #343149, #341911, #300871, #316604, #316782, #330789)
+
+Fix use-after-free bug in e2fsck when finishing up the use of the
+e2fsck context structure.
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages and
+documentation.  (Addresses Debian Bugs: #329859, #322188, #316811,
+#312515, #351268, #357951, #347295, #316040, #368392, #368393, #368394,
+#368179)
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs #317862, #320389, #290429, #310950,
+#310428, #330737, #330736, #329074, #356293, #360046, #366017, #364516,
+#362544, #362970)
+
+
+Programmer's notes:
+-------------------
+
+Update config.guess and config.sub to latest version (2006-02-23) from
+FSF.
+
+Fix asm_types.h type conflicts on AMD 64 platforms.  (Addresses Debian
+Bugs: #360661, #360317)
+
+Fixed the Makefile so that they work correctly on newer versions of
+GNU make (i.e., 3.81).
+
+Add valgrind support to the regression test suites, and eliminate
+false positives from valgrind.
+
+Add a regression test suite for the blkid library.
+
+Fix a fencepost error in resize2fs caught by valgrind.  
+
+Fix compiler warnings about missing memcpy prototypes.
+
+We no longer have the sparc assembly code in the header file any more,
+so we shouldn't set _EXT2_HAVE_HAS_BITOPS_ for the sparc.  This would
+break compiles on the sparc architectures when using gcc.
+
+In the libext2fs library, add the new field fs->now which if non-zero
+is used instead of the system time when setting various filesystem
+fields (last modified time, last write time, etc.)
+
+Fix gcc 4.01 complaints by adding a missing #include <string.h> to
+ext2fs.h which is needed since the inline functions use memcpy().
+(Addresses Sourceforge Bug #1251062)
+
+Use BUILD_CFLAGS and BUILD_LDFLAGS instead of CFLAGS and LDFLAGS in
+the build system when building files in the util directory which are
+needed during the build process.  This avoids potential problems when
+cross-compiling and some of the options specified in CFLAGS or LDFLAGS
+are not recognized as valid by the host compiler.  (Addresses
+Sourceforge Bug #1261547)
+
+Clean up the blkid library by making the superblock and generic i/o
+functions to be more generic.  Clean up interface to the probe
+function, and fix memory leak.  Finally, remove an unneeded reference
+to probe.h in the lib/blkid/resolve.c
+
+Add an ext2fs_read_bb_FILE regression test to confirm proper detection
+of invalid block #'s.
+
+The x86 asm constraints for ext2fs_{set/clear}_bit have been fixed to
+indicate that the the function read/writes the memory location.
+
+Fix various gcc -Wall complaints.
+
+Add a dependency to make sure that the subdirectories are created
+before creating all of the object files, in order to address parallel
+build problem in the library Makefiles.  (Addresses Sourceforge Bug:
+#1261553)
+
+Add $(LDFLAGS) to the command line argument when generating an ELF or
+Solaris shared library, to allow cross-compile and other builds that
+might need to specify -L paths to needed libraries.  (Addresses
+Sourceforge Bug #1261549)
+
+Add a new feature, EXT2_FEATURE_COMPAT_LAZY_BG, which is initially
+intended for testing purposes.  It allows an ext2/ext3 developer to
+create very large filesystems using sparse files where most of the
+block groups are not initialized and so do not require much disk
+space.  Eventually it could be used as a way of speeding up mke2fs and
+e2fsck for large filesystem, but that would be best done by adding an
+RO_COMPAT extension to the filesystem to allow the inode table to be
+lazily initialized on a per-block basis, instead of being entirely
+initialized or entirely unused on a per-blockgroup basis.
+
+Fix backwards compatibility so e2fsprogs will better compile on Linux
+2.0.35 systems.
+
+Make test scripts more robust against locale-related environment variables
+
+Fix type warning problem with sizeof() in ext2fs_open2().
+
+Fix type warning problem with time_t in debugfs.
+
diff --git a/doc/RelNotes/v1.40.txt b/doc/RelNotes/v1.40.txt
new file mode 100644 (file)
index 0000000..08608d2
--- /dev/null
@@ -0,0 +1,1043 @@
+E2fsprogs 1.40.11 (June 17, 2008)
+=================================
+
+Mke2fs, tune2fs, and resize2fs now use floating point to calculate the
+percentage of reserved blocks.  (Addresses Debian Bug: #452639)
+
+Updated Spanish and Catalan translations.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs: #483962, #483023)
+
+Add detection for ZFS volumes to the libblkid library.
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.
+(Addresses Debian Bug: #486463)
+
+Programmer's notes:
+-------------------
+
+Fix marginal C code in probe_lvm2() function to the blkid library more
+portable for older compilers.
+
+Fix build problems on MacOS X.  (Addresses Sourceforge Bug: #1972473)
+
+Fix ext2fs_swap{16,32,64} functions so they can be used by external
+applications on big-endian machines.  (Addresses Debian Bug: #484879)
+    
+
+E2fsprogs 1.40.10 (May 21, 2008)
+================================
+
+When deciding whether or not to revalidate a blkid cache entry, if the
+device's mtime is newer than the last time the cached entry was
+validated, force a revalidation.
+
+Fix a potential data corruption bug in e2fsck in the journal replay.
+The chances of this is happening is extremely remote, especially the
+default data=ordered or data=writeback modes.  However, if a block
+which has been journalled starts with the first four bytes 0xc03b3998,
+when e2fsck replays the journal, those four bytes will be replaced
+with zero's.  Fortunately, it is highly, highly unlikely for e2fsck
+metadata to begin with those fatal 4 byte sequence, and unless
+data=ordered mode is in use, data blocks are never journalled.
+
+Updated German, Dutch, Swedish, and Vietnamese translations.
+
+Programmer's notes:
+-------------------
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.
+
+Remove default sizes of types when cross compiling, since autoconf
+2.50 can figure this out automatically now.
+
+
+E2fsprogs 1.40.9 (April 27, 2008)
+=================================
+
+SuSE's security team audited uuidd and came up with a few minor
+issues.  None of them are serious given that uuidd runs setuid as a
+unprivileged user which has no special access other than libuuid
+directory, but it's good to get them fixed.
+
+One additional fix in ext2fs_swap_inode_full() needed for resize2fs to
+work correctly with in-inode extended attributes.
+
+Updated German, Czech, Dutch, French, Polish, Swedish, and Vietnamese
+translations.
+
+Debugfs will avoid using a pager if the standard output is not a tty.
+
+Fix debugfs and tune2fs to correctly handle daylight savings time when
+parsing a time string.
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.
+
+Fix fsck completion bars when multiple filesystems were being checked
+in parallel.  (Addresses Debian Bug: #432865, Addresses Launchpad Bug:
+#203323, Addresses Sourceforge Bug: #1926023)
+
+Fix fsck so that progress information is sent back correctly when
+multiple filesystems are being check and the output of fsck is being
+redirected to a file descriptor.  Also, include the device name (w/o
+spaces) in the progress information sent back via a file descriptor.
+(Addresses Launchpad Bug: #203323, Addresses Sourceforge Bug:
+#1926023)
+
+Teach fsck to treat "ext4" and "ext4dev" as ext* filesystems.
+
+If logsave receives a SIGTERM or SIGINT signal, it will now pass that
+signal to its child process.
+
+Fix mke2fs's creation of are resize inode when there is a non-standard
+s_first_data_block setting.
+
+Fix bug in blkid when run by an unprivileged user; most devices were
+not reported correctly.  9Addresses Launchpad Bug: #220275)
+
+Mke2fs will not allow the logically incorrect combination of
+resize_inode and meta_bg, which had previously caused mke2fs to create
+a corrupt filesystem.
+
+Fix fsck in German locales so that a 'j' means yes.
+(Addresses Sourceforge Bug: #1947683)
+
+
+Programmer's notes:
+-------------------
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.
+
+Update valgrind options in test_script to work with valgrind 3.2.3
+
+Update texinfo.tex to a much newer version from the FSF.
+
+Remove bashism for configure script and from the lib/ss Makefile.
+Addresses Sourceforge Bug: 1921969
+
+Fix some silently broken tests: m_no_opt, m_meta_bg, and m_raid_opt.
+
+Fix build system so that if texinfo is not installed, it won't print a
+(harmless) error message.
+
+
+E2fsprogs 1.40.8 (March 13, 2008)
+=================================
+
+Fixed e2image -I so it works on image files which are larger than 2GB.
+
+Fixed e2fsck's handling of directory inodes with a corrupt size field.  If
+the size is larger than the number of blocks found in the inode, don't
+try to allocate extra empty blocks at the end of the directory to make
+up the difference; there's no point to doing that.  In addition, if
+the size is not a multiple of a blocksize, always fix it.
+
+E2fsck handled a pass 2 "should never happen error" by not giving
+enough information and then core dumping.  Unfortunately, it was all
+too easy to trigger the "should never happen" situation if a
+directory's inode size was not correct.  This has been fixed, but
+e2fsck has also been taught how to handle this situation more
+gracefully, by simply removing the inode hash tree information, so
+that it can be rebuilt again after e2fsck's pass 3.  (Addresses
+Launchpad Bug: #129395)
+
+Resize2fs had a bug resizing large inodes with extended attributes
+that was fixed in 1.40.6; unfortunately, it turned out it wasn't fixed
+completely on big-endian systems such as PowerPC.  The bug should be
+completely fixed now.  Yay for regression test suites.  (Addresses Red
+Hat Bugzilla: #434893)
+    
+Updated German, Czech, Dutch, Polish, Swedish, and Vietnamese
+translations.  Many thanks to Philipp Thomas from Novell for stepping
+up to become the new German translation maintainer!  (Addresses Debian
+Bugs: #302512, #370247, #401092, #412882).
+
+When e2fsck is clearing a corrupt inode's HTREE directory information,
+make it clear that it is just clearing the HTREE information, not the
+entire inode.
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.  
+
+Programmer's notes
+------------------
+
+Add new functions, ext2fs_dblist_get_last() and
+ext2fs_dblist_drop_last(), which allows the caller to examine the last
+directory block entry added to the list, and to drop if it necessary.
+
+Fixed a portability problem in libblkid with DJGPP.
+
+Fix an obvious typo in an "internal error" message in e2fsck.  Thanks
+to Philipp Thomas for pointing this out.
+
+If the info files are not built, change "make install" so it doesn't
+fail with an error code.
+
+
+E2fsprogs 1.40.7 (February 28, 2008)
+====================================
+
+Remove support for clearing the SPARSE_SUPER feature from tune2fs, and
+depreciate the -s option, since it can result in filesystems which
+e2fsck can't fix easily.  There are very good reasons for wanting to
+disable sparse_super; users who wants to turn off sparse_super can use
+debugfs.  (Addresses Sourceforge Bug: #1840286)
+    
+Add missing options to mke2fs's usage message.  (Addresses Sourceforge
+Bug: #1751393)
+    
+Fix bug in resize2fs when large (greater than 128 byte) inodes are
+moved when a filesystem is shrunk; it was only moving the first 128
+bytes, so extended attributes were not getting moved.  (Addresses Red
+Hat Bugzilla: #434893)
+
+E2fsck now prints an explicit message when the bad block inode is
+updated, to avoid confusion about why the filesystem was modified.
+(Addresses Sourceforge Bug: #756460)
+    
+Allow mke2fs and tune2fs manipulate the large_file feature.
+Previously we just let the kernel and e2fsck do this automatically,
+but e2fsck will no longer automatically clear the large_file feature.
+It still isn't really necessary to worry about this feature flag
+explicitly, but some users seem to care.  (Addresses Red Hat Bugzilla:
+#258381)
+    
+Suppress message about an old-style fstab if the fstab file is empty.
+(Addresses Debian Bug: #468176)
+    
+Fix (really minor) bug in debugfs's find_free_block so it avoids
+reporting a free block more than once if there are too few free blocks
+in the filesystem.  (Addresses Sourceforge Bug: #1096315)
+    
+Change e2fsck to no longer clear the LARGE_FILES feature flag
+automatically, when there are no more > 2GB files in the filesystem.
+It's been almost a decade since there have been kernels that don't
+support this flag, and e2fsck clears it quietly without telling the
+user why the filesystem has been changed.
+    
+Fix bug which could cause libblkid to seg fault if a device mapper
+volume disappears while it is being probed.  (Addresses RedHat
+Bugzilla: #433857)
+    
+Enhance e2fsck's reporting of unsupported filesystem feature flags.
+(Addresses Sourceforge Feature Request: #1175808)
+    
+Fix option syntax in dumpe2fs for explicit superblock and blocksize
+parameters.  What was currently documented in the man page has been
+broken for some time, due to getopt() implementation changes.  The
+option syntax has been changed to one which is can be more portable
+supported and which is consistent with the format for extended options
+in mke2fs and tune2fs.  (Addresses Sourceforge Bug: #1830994)
+    
+Add support to tune2fs to clear the resize_inode feature.  This
+requires an fsck afterwards.  (Addresses Red Hat Bugzilla: #167816)
+
+Teach blkid to detect LVM2 physical volumes.  (Addresses Red Hat
+Bugzilla: #409321)
+
+Add support for setting RAID stride and stripe-width via mke2fs and
+tune2fs.  Teach dumpe2fs to print the RAID parameters.
+
+Add support for setting new superblock fields to debugfs's
+set_super_value.
+
+Add support for printing "mostly-printable" extended attributes in
+Debugfs.
+
+Add support for the -M option to fsck, which causes it to ignore
+mounted filesystem.
+
+Fix uuidd so that it creates the pid file with the correct pid number.
+(Addresses Sourceforge Bug: #1893244)
+
+Fix various gcc -Wall warnings.
+
+Update Czech, Dutch, Polish, Swedish, and Vietnamese translations
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.  
+(Addresses Sourceforge Patch: #1399325)
+
+
+Programmer's notes:
+-------------------
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bug: #466929)
+
+Add new flag EXT2_FLAG_NONFREE_ON_ERROR ext2fs_open2() which returns a
+partially filled-in filesystem object on an error, so that e2fsck can
+print more intelligent error messages.
+    
+Add a new function e2p_edit_feature2() which allows the caller to
+specify which feature flags are OK to set or clear, and which returns
+more specific information about feature flags which are not allowed to
+be set/cleared.
+    
+Set the C locale in the test_script driver since it uses [A-Za-z].
+(Addresses Sourceforge Bug: #1890526)
+
+Use fcntl locking instead of lockf in libuuid since Cygwin doesn't
+support lockf().
+
+Change configure.in to avoid using the 'dc' command unless it is
+absolutely needed. (i.e., when using parsing a WIP-style version
+number)  (Addresses Sourceforge Bug: #1893024)
+
+Add portability checks to support compilation under DJGPP.
+
+Update to the latest samba tdb code before the LGPLv3 change, which
+fixes a realloc() leak on failure.
+
+Fix memory leak in ext2fs_alloc_block().
+
+Fix makefile dependency issues for various install targets.
+(Addresses-Sourceforge-Patches: #1903484, #1903466, #1903456)
+    
+Improve descriptions for the r_move_itable and r_resize_inode tests.
+
+
+E2fsprogs 1.40.6 (February 9, 2008)
+===================================
+
+Add support for returning labels for UDF filesystems in the blkid
+library.
+
+Fix bug in the blkid library where cached filesystems was not being
+flushed when opening USB devices returned the error ENOMEDIUM.
+(Addresses Debian Bug: #463787)
+
+Added logic to the blkid library to automatically choose whether a
+filesystem should be mounted as ext4 or ext4dev, as appropriate.
+
+Allow tune2fs to set and clear the test_fs flag on ext4 filesystems.
+
+Fix a bug in e2fsck which caused it to core dump if e2fsprogs had been
+configured with --enable-jbd-debug.
+
+Document the BLKID_FILE environment variable in the libblkid man page
+
+Programmer's Notes:
+-------------------
+
+Update e2fsprogs translation template and Vietnamese and Czech translations
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs: #436058)
+
+Don't try to create $DESTDIR/etc/init.d as part of make install as we
+don't install the init.d script (and it's not the recommended way to
+start uuidd anyway).  (Addresses Sourceforge Bug: #1885085)
+
+Use thread local storage to fix a theoretical race condition if two
+threads try to format an unknown error code at the same time in the
+com_err library.
+
+
+E2fsprogs 1.40.5 (January 27, 2008)
+===================================
+
+Fix a potential overflow big in e2image if the device name is too
+long.
+
+Mke2fs will now create new filesystems with 256 byte inodes and the
+ext_attr feature flag by default.  This allows for much better future
+compatibility with ext4 and speeds up extended attributes even on ext3
+filesystems.
+
+Teach e2fsck to ignore certain "safe" filesystem features which are
+set automatically by the kernel.  Having the kernel set features
+automagically behind the user's back is a bad idea, and we should try
+to break the kernel of this habit, especially for the newer ext4
+feature flags.  But for now, we will try to avoid needless full checks
+which can annoy users who are doing fresh installs.
+
+Add support in tune2fs and mke2fs for making a filesystem as being "ok
+to be used with test kernel code".  This will be needed for using test
+filesystems with the latest ext4 kernel code.
+
+Change e2fsck -fD so that it sorts non-htree directories by inode
+numbers instead of by name, since that optimizes performances much
+more significantly.  (Addresses-Sourceforge-Feature-Request: #532439)
+
+If e2image fills the disk, fix it so it exits right away instead of
+spewing large numbers of error messages.
+(Addresses-Sourceforge-Feature-Request: #606508)
+
+If ftruncate64() is not available for resize2fs, let it use ftrucate()
+instead, but have it check to see if the size would get truncated, and
+skip calling ftruncate in that case.
+
+Add support for detecting HFS+ filesystems in the blkid library.
+
+Add support in the blkid library for ext4/ext4dev filesystems.
+
+Fix a bug in blkid where it could die on a floating point exception
+when presented with a corrupt reiserfs image.
+
+Fix blkid's handling of ntfs UUID's so that leading zeros are printed
+such that UUID string is a fixed length.
+
+Add sample python bindings for the uuid library to the contrib
+directory.  (Addresses-Sourceforge-Patches: #778817)
+
+Fix debugfs's 'lsdel' command so it uses ext2fs_block_iterate2 so it
+will work with large files.  (Addresses Sourceforge Feature Request:
+#1257500 and Sourceforge Support Request: #1253511)
+    
+Allow the debugfs 'undel' command to undelete an inode without linking
+it to a specific destination directory, since this might require
+allocating blocks that could overwrite some yet-to-be-recovered
+deleted files.  (Addresses-Sourceforge-Feature-Request: #967141)
+
+Update Swedish translation from the Translation Project.
+
+Programmer's Notes:
+-------------------
+
+Fix configure handling of --sbindir (which should rarely be used, but
+someone did complain, so let's fix it).  (Addresses Sourceforge Bug:
+#498381)
+
+Updated e2fsprogs.spec file to include a new uuidd package
+
+Use pkg-config to determine where to find the devmapper library so we
+can find out where it is located on different distributions.
+
+Fix Makefile race so that "make -j3 distclean" works correctly
+
+Fix portability problems on non-Linux/non-Hurd/non-Masix systems,
+especially on MacOS X systems.  (Addresses Sourceforge Bugs: #1861633,
+#1819034, #1863819)
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs: #459403, #459475, #459614)
+
+Remove the --enable-dynamic-static configure option, and build e2fsck
+dynamically by default.  If the user wants e2fsck.static, he/she will
+need to build it via "make -C e2fsck e2fsck.static"
+
+Fix various build warnings due to missing prototypes.
+(Addresses Sourceforge Patch: #1861663, #1861659)
+
+
+E2fsprogs 1.40.4 (December 31, 2007)
+====================================
+
+Improve time-based UUID generation.  A new daemon uuidd, is started
+automatically by libuuid if necessary.  This daemon is setuid to allow
+updates to /var/lib/libuuid, so the clock sequence number can be
+stored and so if the clock is set backwards, it can be detected.
+(Addresses Sourceforge Bug: #1529672, Addresses Red Hat Bugzilla:
+#233471)
+
+Filter out the NEEDS_RECOVERY feature flag when writing out the backup
+superblocks.  This avoids e2fsck from concluding that a full
+filesystem check is required before backing up the superblock due to
+changes in the feature flags.  (Addresses Debian Bug: #454926)
+
+Fix fsck to only treat the '#' character as a comment at the beginning
+of the line in /etc/fstab.  Otherwise fstabs for the fuse filesystem
+will cause fsck to issue an bogus warning message.
+(Addresses Gentoo bug: #195405, Addresses Sourceforge bug: #1826147)
+
+Format control characters and characters with the high eighth bit set
+when printing the contents of the blkid cache, to prevent filesystems
+with garbage labels from sending escape sequences to the user's screen
+that might, for example place it in graphics mode.  (Addresses Ubuntu
+Bug: #78087)
+
+Fix sign-extension problem on 64-bit systems in in the com_err
+library.  (Addresses Sourceforge Bug: #1809658)
+
+Avoid division by zero error when probing an invalid FAT filesystem in
+the blkid library.  (Addresses Sourceforge Bug: #1831627)
+
+Update Dutch, Polish, and Vietnamese translations from the Translation
+Project.  Remove the Rwandan translation upon advice of the
+Translation Project.
+
+Programmer's Notes:
+-------------------
+
+Fix the libss "make check" regression test so that it works if the
+current directory is not in the user's path or if the libss shared
+library is not installed.  (Addresses Sourceforge Bug: #1848974)
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.
+(Addresses Debian Bugs: #444883, #441872)
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs: #437720, #451172, #458017)
+
+Fix build failure on non-Linux/non-Hurd/non-Masix systems.
+(Addresses Sourceforge Bug: #1859778)
+
+Fix Hurd portability issues.  (Addresses Debian Bug: #437720)
+
+
+E2fsprogs 1.40.3 (December 5, 2007)
+===================================
+
+Fix a potential security vulnerability where an untrusted filesystem
+can be corrupted in such a way that a program using libext2fs will
+allocate a buffer which is far too small.  This can lead to either a
+crash or potentially a heap-based buffer overflow crash.  No known
+exploits exist, but main concern is where an untrusted user who
+possesses privileged access in a guest Xen environment could corrupt a
+filesystem which is then accessed by the pygrub program, running as
+root in the dom0 host environment, thus allowing the untrusted user to
+gain privileged access in the host OS.  Thanks to the McAfee AVERT
+Research group for reporting this issue.  (Addresses CVE-2007-5497.)
+
+Fix heuristics in blkid which could cause a disk without partitions to
+be incorrectly skipped when a loopback device is present.  (Addresses
+Red Hat Bugzilla #400321.)
+
+Fix e2image so that in raw mode it does not create an image file which
+is one byte too large.
+
+Change mke2fs's usage message so it recommends the preferred -E option
+instead of the deprecated -R option.
+
+Enhance the blkid library so it will recognize squashfs filesystems.
+(Addresses Red Hat Bugzilla #305151.)
+
+Enhance e2fsck so it will force the backup superblocks to be backed up
+if the filesystem is consistent and key constants have been changed
+(i.e., by an on-line resize) or by e2fsck in the course of its
+operations.
+
+Enhance blkid's detection of FAT filesystems; so that USB disks with
+only a single bootable partition will not get missed.
+
+E2fsck will no longer mark a filesystem as invalid if it has time
+errors (i.e., if superblock mount time or last write time is in the
+future) and the user refuses to fix the problem.
+
+The Ubuntu init scripts don't properly set the system time correctly
+from hardware clock if the hardware clock is configured to tick local
+time instead of GMT time.  Work around this as best as we can by
+providing an option, buggy_init_scripts, in /etc/e2fsck.conf which can
+be set on Ubuntu systems.  (Addresses Debian Bug #441093, and Ubuntu
+Bug #131201.)
+
+Fix fsck to ignore /etc/fstab entries for bind mounts.  (Addresses Red
+Hat Bugzilla #151533.)
+
+Fix e2fsck so that if the superblock is corrupt, but still looks
+vaguely like an ext2/3/4 superblock, that it automatically tries to
+fall back to the backup superblock, instead of failing with a hard
+error.
+
+Make the e2fsprogs program more robust so that they will not crash
+when opening a corrupt filesystem where s_inode_size is zero.
+
+Change e2fsck so it uses sscanf() instead of atoi() so it non-numeric
+arguments are detected as such and the parse error is reported to the
+user.   (Addresses Debian Bug #435381.)
+
+Change e2fsck so it will not complain if a file has blocks reallocated
+up to the next multiple of a system's page size.
+
+Fix bug in ext2fs_check_desc() which will cause e2fsck to complain
+about (valid) filesystems where the inode table extends to the last
+block of the block group.  (Addresses Red Hat Bugzilla #214765.)
+
+Fix a bug in ext2fs_initialize() which causes mke2fs to fail while
+allocating inode tables for some relatively rare odd disk sizes.
+(Addresses Red Hat Bugzilla #241767.)
+
+Add Catalan translation and update Dutch and Swedish translations
+from the Translation Project.
+
+Fix big-endian byte-swapping bug in ext2fs_swap_inode_full().  We
+still had an issue when trying to figure out whether we need to
+byte-swap fast symlinks that contained extended attributes.
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.
+(Addresses SourceForge Bug #1821333.)
+
+
+Programmer's Notes:
+-------------------
+
+Fix mke2fs tests to avoid needing any significant ^M (CR) characters
+
+Add "make check" to the RPM spec file
+
+Fix "make install" and 'make uninstall" in misc/Makefile.in so that it
+works correctly when the prefix is not the root directory.
+
+Fix the resize2fs tests, r_move_itable and r_resize_inode, so they
+clean up after themselves by deleting the test.img temporary file
+after completing the test.
+
+Fixed a corner case bug ext2fs_unlink() when trying to delete the
+first directory entry in a directory block and the last directory
+entry in the previous directory block is not in use.  Fortunately
+ext2fs_unlink() is only used by debugfs and e2fsck, and in e2fsck in
+places where it is extremely unlikely to run into this corner case.
+
+Fix missing dependency which would cause parallel builds to fail.
+(Addresses Sourceforge Bug #1842331.)
+
+Fix a build error on newer gcc caused by lib/ext2fs/ismounted.c
+calling open(O_CREATE) with a missing mode parameter.
+
+Fix the test_ss.c in lib/ss so it can be used as an example
+application program for the library as well as a regression test
+suite.
+
+Fix ext2fs_dblist_dir_iterate() so that error codes and abort codes
+are properly passed back up through the call stack.
+
+E2fsprogs 1.40.2 (July 12, 2007)
+================================
+
+A recent change to e2fsck_add_dir_info() to use tdb files to check
+filesystems with a very large number of filesystems had a typo which
+caused us to resize the wrong data structure.  This would cause a
+array overrun leading to malloc pointer corruptions and segfaults.
+Since we normally can very accurately predict how big the the dirinfo
+array needs to be, this bug only got triggered on very badly corrupted
+filesystems.
+
+Fix a bug in e2fsck which caused it to incorrectly salvage
+directories when the last entry's rec_len is bogusly too big.  This
+resulted in a nonsense filesystem corruption to be reported, and
+required a second run of e2fsck to fully fix up the directory.
+
+Update tune2fs man page to include more discussion of reserved blocks
+(Addresses Launchpad bug #47817)
+
+Update Turkish, Polish, Dutch, and Vietnamese PO files from the
+Translation Project
+    
+
+E2fsprogs 1.40.1 (July 7, 2007)
+===============================
+
+Fix bug which could cause libblkid to loop forever.  When revalidating
+a partition where there is obsolete information in /etc/blkid.tab, we
+end up freeing a the type tag without clearing dev->bid_type, causing
+blkid_verify() to loop forever.  (Addresses Debian Bug: #432052)
+    
+The Turkish translation has a bug in it where it has the translation
+of "E@e '%Dn' in %p (%i)" to "E@E".  This causes @E to be expanded at
+@E, recursively, forever, until the stack fills up and e2fsck core
+dumps.  We fix this by making e2fsck stop @-expansions after a
+recursive depth of 10, which is far more than we need.
+(Addresses Sourceforge Bug: #1646081)
+    
+Compile the default mke2fs.conf into mke2fs program.  People are
+getting surprised by mke2fs creating filesystems with different
+defaults than earlier versions of mke2fs if mke2fs.conf is not
+present.  So we now create a built in version of mke2fs.conf file
+which is used by mke2fs if the /etc/mke2fs.conf is not present.
+(Addresses SourceforgeBug: #1745818)
+
+Improve the config/parse_types.sh helper script.  Fix a potential
+security problem if e2fsprogs is built as root (as Gentoo does!).  In
+addition fix the script and how it is called from the configure script
+so that it does the right thing when cross-compiling.  (Fixes Gentoo
+bug: #146903)
+    
+Update Vietnamese, French, and Dutch PO files from the Translation
+Project.  Also created a new e2fsprogs.pot file for translator.
+    
+Fix bogus strip permission errors when building under Debian.  When
+building the e2fsprogs dpkg's, the dh_strip command emits a large
+number of error messages caused by the permissions not being right.
+So run dh_fixperms before running dh_strip.
+
+Programmer's Notes:
+-------------------
+
+Add new function: profile_set_default().  This function sets the value
+of the pseudo file "<default>".  If the file "<default>" had
+previously been passed to profile_init(), then def_string parameter
+will be parsed and used as the profile information for the "<default>"
+file.
+    
+Fix mk_cmds's error reporting so that it is unambiguous that it is the
+mk_cmds script which is generating the error.  (Obviates Gentoo patch:
+e2fsprogs-1.32-mk_cmds-cosmetic.patch)
+    
+Fix the test suite to use LC_ALL instead of LANG.  LC_ALL is the "high
+priority" environment variable that overrides all others, where as
+LANG is the lowest priority environment variable.  If LC_ALL is set, it
+doesn't matter whether LANG, LANGUAGE, LC_COLLATE, LC_MESSAGES, and
+the all the rest are set.  This will assure that the locale when
+running the test suites is the "C" locale.  (Obviates Gentoo patch:
+e2fsprogs-1.38-tests-locale.patch)
+    
+
+E2fsprogs 1.40 (June 29, 2007)
+==============================
+
+Fix divide by zero error in blkid's NTFS probing logic.
+
+Add new blkid -g option which causes the blkid cache to be garbage
+collected.
+
+Fix a bug in libblkid which could cause the internal field bid_type to
+become corrupted.  Fortunately bid_type isn't used much, and bid_label
+and bid_uuid is only used by debugging code, so the impact of this bug
+was very minor.
+
+Mke2fs will now store the RAID stride value when a filesystem is
+created with a requested RAID stride, and then use it automatically in
+resize2fs.
+
+Mke2fs has a sanity check added to make sure (inode_size * num_inodes)
+isn't too big.  In some cases Lustre users have tried specifying an
+inode size of 4096 bytes, while keeping an inode ratio of one inode
+per 4096 bytes.  
+
+Improve sanity check in e2fsck's algorithm for finding a backup
+superblock, so that it won't accidentally find a superblock that was
+located in the journal, and then later reject it as being not a valid
+backup superblock.
+
+Fix e2fsck get_size logic so that it will work with the Linux floppy
+driver.  The Linux floppy driver is a bit different from the other
+block device drivers, in that if the device has been opened with
+O_EXCL, it disallows another open(), even if the second open() does
+not have the O_EXCL flag.  (Addresses Debian Bug: #410569)
+
+Fix error checking of badblock's last-block and start-block arguments.
+(Addresses Debian Bug: #416477)
+
+Fix e2fsck so that it doesn't overwrite the backup superblocks when
+recovering a journal until the master superblock has been confirmed as
+being sane.
+
+Change the blkid library to be much more paranoid about concluding
+that a partition contains an NTFS filesystem, and fetch the UUID and
+LABEL information from NTFS filesystems.  (Addresses Launchpad Bug:
+#110138)
+
+Factor out the code which sets the default journal size and move it
+into libext2fs.
+
+Enhance e2fsck so it will recreate the ext3 journal if the original
+journal inode was cleared to due it being corrupt after finishing the
+filesystem check.
+
+Fix e2fsck so that it updates the journal inode if it is corrupted and
+the backup journal information from the superblock was successfully
+used to recover the filesystem.
+
+Fix e2fsck so that it checks all of the blocks in the journal inode
+for validity.  The original code only checked the direct blocks to
+make sure the journal inode was sane.  Unfortunately, if some or all
+of the indirect or doubly indirect blocks were corrupted, this would
+not be caught.
+
+Add support in blkid to detect LUKS encrypted partitions.
+
+Add extra sanity checks for extended attributes in the case where the
+size is zero but the offset is very large.
+
+Fix byte-swapping issues for large inodes in ext2fs_read_inode_full()
+and ext2fs_get_next_inode_full().
+
+Clarify the copyright licenses used by the various libraries in
+the top-level COPYING  file (Red Hat Bugzilla: 166058)
+
+Make mke2fs's defaults when /etc/mke2fs.conf doesn't exist more sane.
+
+Fix mke2fs and debugfs to support large (> 16 bit) uid's and gid's.
+
+Remove check in e2fsck which requires EA's in inodes to be sorted;
+they don't need to be sorted, and e2fsck was previously wrongly
+clearing unsorted EA's stored in the inode structure.
+
+Allow mke2fs or tune2fs to create a substantially larger journal (up
+to 10,240,000 blocks).
+
+Fix MD superblock detection, and make sure the correct UUID is
+reported from the MD superblock.
+
+Fix a signed vs. unsigned bug in debugfs.
+
+Enhance debugfs's date parser so that it accepts integer values.
+
+Fix e2fsck's pass1c accounting so it doesn't terminate too early if a
+file with multiply claimed blocks is hard linked. or not at all if the
+root directory contains shared blocks
+
+Enhance debugfs so it can modify the block group descriptors using the
+command set_block_group_descriptor.
+
+Improve e2fsck's reporting of I/O errors so it's clearer what it was
+trying to do when an error happens
+
+Fix a bug in in how e2fsprogs byte swaps inodes containing fast
+symlinks that have extended attributes.  (Addresses Red Hat Bugzilla:
+#232663 and LTC Bugzilla: #27634)
+
+Fix potential file descriptor leak in ext2fs_get_device_size() in an
+error case.
+
+Add libreadline.so.5 support to libss.
+
+Improve badblocks -n/-w exclusive usage message.
+
+Fix dump_unused segfault in debugfs when a filesystem is not open
+
+Fix memory leak in blkid library.  (Addresses Debian Bug: #413661)
+
+Allow the debugfs lcd command to work w/o a filesystem being open.
+(Addresses LTC Bugzilla #27513)
+
+Fix e2fsck to clear i_size for special devices with a bogus i_blocks
+field on the first pass.
+
+Fix e2fsck to set the file type of the '..' entry when connecting
+a directory to lost+found.  (Addresses Lustre Bug: #11645)
+
+Enhance e2fsck to recover directories whose modes field were corrupted
+to look like special files.  This is probably only useful in
+artificial test cases, but it will be useful if we ever do the "inodes
+in directory" idea for ext4.
+
+Allow debugfs to dump (and rdump) > 2GB files.  (Addresses Debian Bug:
+#412614)
+
+Fix resize2fs parsing of size parameter (in sector units).  This was
+actually a bug in libe2p's parse_num_blocks() function.  When handling
+the 's' suffix, it was ignoring the blocksize information passed in
+from the caller and always interpreting the number in terms of a 1k
+blocksize.  (Addresses Debian Bug: #408298)
+
+There was a floating point precision error which could cause e2fsck to
+loop forever on really big filesystems with a large inode count.
+(Addresses Debian Bug: #411838)
+
+Fix memory leak in ext2fs_write_new_inode()
+
+Add support for using a scratch files directory to reduce e2fsck's
+memory utilization on really big filesystems.  This uses the TDB
+library.  See the [scratch_files] section of the e2fsck.conf man page
+for more details.
+
+Fixed type-punning bug which caused dumpe2fs to crash on the Arm
+platform (Addresses Debian Bug: #397044)
+
+Add explanatory message to badblocks that -n and -w are mutually exclusive
+(Addresses Debian Bug: #371869)
+
+Allow debugfs and dumpe2fs to support fs features under development.
+
+Add support for the new flag EXT2_FLAG_SOFTSUPP_FEATURES flag to
+ext2fs_open() , which allows application to open filesystems with features
+which are currently only partially supported by e2fsprogs.
+
+Allow unix_io to support offsets greater than 2G (Addresses
+SourceForge Bug: #1547922)
+
+Fixed overflow and signed/unsigned problems caused by the number of
+blocks or inodes exceeding 2**31 or being close to 2**32-1.
+
+Add support for unsigned directory hash calculations with hints in the
+superblock to fix cross-architectural portability for htree
+directories with filenames where the high 8th bit is set.  (Addresses
+Debian: #389772)
+
+Fix resize2fs so that it gives user-intelligible error messages if the
+filesystem or the kernel does not support on-line resizing.
+(Addresses Debian Bug: #380548)
+
+Require mke2fs -F -F for really dangerous operations, since -F is
+needed for less dangerous operations such as creating filesystems
+images in regular files, or creating filesystems on whole block
+devices.  These relatively innocuous usages should NOT be confused
+with running mke2fs on an apparently-mounted or in-use filesystem.
+
+Allow the default inode size to be specified into the mke2fs.conf
+file.
+
+Make the smallest default journal size is big enough so that on-line
+resizing should always work.
+
+Fix silly spelling error in e2fsck.  (Addresses SourceForge bug:
+#1531372)
+
+Fix debugfs coredump when lsdel is run without an open filesystem
+(Addresses Debian Bug: #378335)
+
+Fix debugfs display bug us that bytes that have the high bit set are
+displayed as "ec" instead of "ffffffec".
+
+Add support in lsattr so it will display the EXT4_EXTENTS_FL flag.
+
+Device mapper scanning wasn't working in the blkid library because the
+pathnames had an extra "/dev" when they were being probed.
+
+Add GFS/GFS2 support to the blkid library.
+
+Fix blkid support of empty FAT filesystem labels.
+
+Avoid recursing forever (or for a long time) when the blkid library
+searches for a device and there are symlinks to directories in /dev.
+
+Avoid unaligned halfword access in blkid when accessing FAT
+superblocks, as this will cause Sparc/Solaris systems to throw a
+SIGBUS error.
+
+The latest devmapper libraries requires pthreads, add -lpthreads to
+the static link libraries for e2fsck.static if devmapper is enabled.
+(Addresses Debian bug: #388718)
+
+Improve the (non-installed, for experts only) findsuper program by
+printing the uuid and label from the superblocks, as well as the
+starting and ending offsets of the filesystem given the information in
+the superblock.  Omit by default printing superblocks that are likely
+found in located in an ext3 journal unless an explicit -j option is
+given.
+
+Updated Spanish, French and Dutch translations and added Catalan
+translation.  (Addresses Debian bug: #411562)
+
+Use FreeBSD's DIOCGMEDIASIZE and DIOCGDINFO ioctls if available when
+determining a partition's size, since binary searching to determine
+the device doesn't work on FreeBSD.
+
+Documentation about UUID's is available in enough places, and it's
+awkward to deal with debian-legal's insanities.  So I'm caving in the
+"more-lunatic-than-RMS" wing of Debian by removing RFC-4122 so we
+don't have do the dfsg tarball.  Also remove the rule that only tried
+to install RFC-4122 on Ubuntu, since Ubuntu seems to want to fetch
+e2fsprogs exclusively from Debian.  (Addresses Debian Bug: #407107)
+
+Fix the info-dir line so that the menu name does not contain a .info
+prefix.  First of all, it's ugly, secondly, it causes the install-info
+command to fail to remove the com_err info file from the
+/usr/share/info/dir file when the comerr-dev package is removed and
+purged.  (Addresses Debian Bug: #401711)
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.
+(Addresses Debian Bug: #369761, #373004, #379695)
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs #389554, #390664, #413208, #419605,
+#408352, #415560, #399155)
+
+
+Programmer's notes:
+-------------------
+
+E2fsck now supports the %It expansion when printing a problem report.
+It will print the type of the inode in the problem context.
+
+Fix misc/Makefile.in so that it builds even if e2fsck hasn't been built yet
+(Addresses Sourceforge Bug: #1565561)
+
+Remove unused variables and other lint/gcc -Wall cleanups
+
+Add check to ext2fs_get_device_size() so it will return EFBIG for for
+filesystems contained in regular files where the filesystem image size
+is returned by stat64().
+
+Set local environment variables to C so mk_cmds and compile_et always
+work.  (Addresses SourceForge Bug: #1532177)
+
+Added the 64-bit byte swapping function ext2fs_swab64().
+
+Added two new helper functions to prevent 2**31/2**32-1 overflow
+problems: ext2fs_div_ceil() and e2p_percent().
+
+Create new ext2fs library inline functions ext2fs_group_first_block()
+and ext2fs_group_last_block() in order to calculate the starting and
+ending blocks in a block group.
+
+Create the generated files read-only to remind developers not to edit them.
+
+Add support for autoconf 2.60 (with backwards compatibility for older
+versions of autoconf).
+
+Added an "make rpm" target to top-level Makefile
+
+Added various FreeBSD portability fixes.
+
+Exclude mercurial files from the RPM build tree to speed up copy/build.
+
+Use root_sysconfdir to define the locations of mke2fs.conf and
+e2fsck.conf instead of using a hard-coded /etc pathname.
+
+Prevent e2fsck.h and ext2_ext_attr.h from getting included multiple times.
+
+Fixed "make clean" in blkid's Makefile.in file from removing tst_*.c files.
+
+If diff -u is supported, use it to report test failures.
+
+Updates/improvements to RPM spec file
+
+Add on-disk format definitions for the following new features:
+EXT4_FEATURE_RO_COMPAT_HUGE_FILE, EXT4_FEATURE_RO_COMPAT_GDT_CSUM,
+EXT4_FEATURE_RO_COMPAT_DIR_NLINK, EXT4_FEATURE_INCOMPAT_64BIT,
+EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE
+
+Add a new make target "checked-failed" in the tests directory which
+reruns any failed tests
+
+Update draft-leach-uuids-guids-01.txt with rfc4122.txt
+
+Fix miscellaneous bugs reported by Coverity: Dead code, potential nul
+pointer dereferences, memory leaks, etc.  None were security-critical
+problems.
+
+Fix up usage and decrement error messages in the test_icount program
+
+Add debugging code to the com_err library; if the environment variable
+COMERR_DEBUG is set to 1, print out debugging messages as error tables
+are added and removed from the com_err library.  If the
+COMERR_DEBUG_FILE environment variable is set (and the process is not
+setuid) the debugging messages may be redirected to a file.
+
+Change all of the e2fsprogs programs to use the newer add_error_table()
+and remove_error_table() interfaces instead of the much older
+initialize_*_error_table() function.
+
+Add TDB support into the ext2fs library.  This allows us to have a
+guaranteed library we can count on always being present so we can
+store data in an on-disk database.
+
+Add support for using TDB to store the icount data, so we don't run out
+of memory when checking really large filesystems.
+
+Change the regression test suite so that it skips empty test directories.
+
+Define the l_i_iversion field in ext2_inode.  The l_i_version field is
+now defined from the old l_i_reserved1 field in the ext2 inode.  This
+field will be used to store high 32 bits of the 64-bit inode version
+number.
+
+Add Makefile production rule for e2fsprogs.spec in case it gets
+deleted.
+
+Add new function profile_get_uint() to allow for a clean way to fetch
+unsigned integers from the context.
+
+Add test to make sure the ext2 superblock structure is 1024 bytes.
+
+Fix typo in name of f_dup4 regression test
+
+Add new function blkid_gc_cache() which performs a garbage collection
+pass on the /etc/blkid.tab file.
+
+The ext2fs_open() function now sets EXT2_FLAG_MASTER_SB_ONLY.  In
+general, only e2fsck (after the filesystem is clean), tune2fs, and
+resize2fs should change the backup superblocks by default.  Most
+callers of ext2fs_open() should not be touching any superblock fields
+which require the backups to be touched.
+
+Add new function to libext2fs, ext2fs_default_journal_size(), which
+returns the default journal size.
+
diff --git a/doc/RelNotes/v1.41.txt b/doc/RelNotes/v1.41.txt
new file mode 100644 (file)
index 0000000..e36e35d
--- /dev/null
@@ -0,0 +1,1594 @@
+E2fsprogs 1.41.14 (December 22, 2010)
+=====================================
+
+Fix spurious complaint in mke2fs where it would complain if the file
+system type "default" is not defined in mke2fs.conf.
+
+The resize2fs program will no longer clear the resize_inode feature
+when the number reserved group descriptor blocks reaches zero.  This
+allows for subsequent shrinks of the file system to work cleanly for
+flex_bg file systems.
+
+The resize2fs program now handles devices which are exactly 16T;
+previously it would give an error saying that the file system was too
+big.
+
+E2fsck (and the libext2fs library) will not use the extended rec_len
+encoding for file systems whose block size is less than 64k, for
+consistency with the kernel.
+
+Programming notes
+-----------------
+
+E2fsprogs 1.41.13 would not compile on big-endian systems.  This has
+been fixed.  (Addresses Sourceforge Bug: #3138115)
+
+The ext2fs_block_iterator2() function passed an incorrect ref_offset
+to its callback function in the case of sparse files.  (Addresses
+Sourceforge Bug: #3081087)
+    
+Fix some type-punning warnings generated by newer versions of gcc.
+
+
+E2fsprogs 1.41.13 (December 13, 2010)
+=====================================
+
+E2fsck now supports the extended option "-E journal_only", which
+causes it to only do a journal replay.  This is useful for scripts
+that want to first replay the journal and then check to see if it
+contains errors.
+
+E2fsck will now support UUID= and LABEL= specifiers for the -j option
+(which specifies where to find the external journal).  (Addresses
+Debian Bug #559315)
+
+E2fsck now has support for the problems/<problem code>/force_no
+configuration option in e2fsck.conf, which forces a problem to not be
+fixed.
+
+Dumpe2fs will now avoid printing large negative offsets for the bitmap
+blocks and instead print a message which is a bit more helpful for
+flex_bg file systems.
+
+Mke2fs will now check the file system type (specified with the -t
+option) to make sure it is defined in the mke2fs.conf file; if it is
+not, it will print an error and abort.  If the usage type (specified
+with the -T option) is not defined in mke2fs.conf, mke2fs will print a
+warning but will continue.  (Addresses Debian Bug #594609)
+
+Clarified error message from resize2fs clarifying that on-line
+shrinking is not supported at all.  (Addresses Debian Bug #599786)
+    
+Fix an e2fsck bug that could cause a PROGRAMMING BUG error to be
+displayed.  (Addresses Debian Bug #555456)
+
+E2fsck will open the external journal in exclusive mode, to prevent
+the journal from getting truncated while it is in use due to a user
+accidentally trying to run e2fsck on a snapshotted file system volume.
+(Addresses Debian Bug #587531)
+
+Fix a bug in e2fsck so it has the correct test for the EOFBLOCKS_FL
+flag.
+
+The tune2fs program can now set the uninit_bg feature without
+requiring an fsck.
+
+The tune2fs, dumpe2fs, and debugfs programs now support the new ext4
+default mount options settings which were added in 2.6.35.
+
+The e2fsck and dumpe2fs programs now support the new ext4 superblock
+fields which track where and when the first and most recent file
+system errors occurred.  These fields are displayed by dumpe2fs and
+cleared by e2fsck.  These new superblock fields were added in 2.6.36.
+
+Debugfs now uses a more concise format for listing extents in its
+stat command.  This format also includes the interior extent tree
+blocks, which previously was missing from stat's output for
+extent-based files.
+
+Debugfs has a new option, -D, which will request Direct I/O access of
+the file system.
+
+Mke2fs will skip initializing the inode table if a device supports
+discard and the discard operation will result in zero'ed blocks.
+
+Badblocks will now correctly backspace over UTF-8 characters when
+displaying its progress bar.  (Addresses Gentoo Bug #309909; Addresses
+Debian Bugs #583782 and #587834)
+
+E2freefrag will now display the total number of free extents.
+
+Resize2fs -P no longer requires a freshly checked filesystem before
+printing the minimum resize size.
+
+Fixed a floating point precision error in a binary tree search routine
+that can lead to seg fault in e2fsck and resize2fs.
+
+Fixed a bug in e2fsck where if both the original and backup superblock
+are invalid in some way, e2fsck will fail going back to the original
+superblock because it didn't close the backup superblock first, and
+the exclusive open prevented the file system from being reopened.
+
+Fixed a big in e2freefrag which caused getopt parsing to fail on
+architectures with unsigned chars.  (Addresses Gentoo Bug: #299386)
+
+Clarified an mke2fs error message so a missed common in an -E option
+(i.e., mke2fs -t ext4 -E stride=128 stripe-width=512 /dev/sda1")
+results in a more understandable explanation to the user.
+
+Mke2fs now displays the correct valid inode ratio range when
+complaining about an invalid inode ratio specified by the user.
+
+Mke2fs now understands the extended option "discard" and "nodiscard",
+and the older option -K is deprecated.  The default of whether
+discards are enabled by default can be controlled by the mke2fs.conf
+file.
+
+Mke2fs's handling of logical and physical sector sizes has been
+improved to reflect the fact that there will be some SSD's with 8k and
+16k physical sectors arriving soon.  Mke2fs will no longer force block
+size to be the physical sector size, since there will be devices where
+the physical sector size is larger than the system's page size, and
+hence larger than the maximal supported block size.  In addition, if
+the minimal and optimal io size are not exported by the device, and
+the physical sector size is larger than the block size, the physical
+sector size will be used to set the Raid I/O optimization hints in the
+superblock.
+
+E2fsck will now display a better, more specific error message when the
+user enters a typo'ed device name, instead of blathering on about
+alternate superblocks.
+
+Fixed various Debian Packaging Issues
+
+Updated/clarified man pages (Addresses Debian Bugs: #580236, #594004,
+#589345, #591083; Addresses Launchpad Bug: #505719)
+
+Update the Chinese, Chzech, Dutch, French, Germany, Indonesian,
+Polish, Swedish, and Vietnamese translations.
+
+
+Programmer's Notes
+------------------
+
+Fix a dependency definition for the static and profiled blkid
+libraries which could cause compile failures in some configurations.
+(Addresses Debian Bug: #604629)
+    
+Add support for Direct I/O in the Unix I/O access layer.
+
+Fixed a memory leak in the Unix I/O layer when changing block sizes.
+
+Fixed minor memory leaks in mke2fs.
+
+Added a new function to the ext2fs library, ext2fs_get_memalign().
+
+The tst_super_size test program will check to make sure the superblock
+fields are correctly aligned and will print them out so they can be
+manually checked for correctness.
+
+Fixed some makefile dependencies for test programs in lib/ext2fs.
+
+Reserved the feature flags and superblock fields needed for the Next3
+snapshot feature.
+
+Reserved the feature flags for EXT4_FEATURE_INCOMPAT_DIRDATA and
+EXT4_INCOMPAT_EA_INODE.
+
+
+E2fsprogs 1.41.12 (May 17, 2010)
+================================
+
+Mke2fs now gives a correct error message if the external journal
+device is not found.  (Addresses Red Hat Bug #572935)
+
+Resize2fs -P will now refuse to print a minimum size if the file
+system is not clean.  Previously it would go ahead and print a minimum
+size anyway, which might not be correct, leading to user confusion.
+
+E2fsck now tests for extents that begin at physical block 0 and
+rejects them as invalid.  (Addresses Google Bug: #2573806)
+    
+Fixed a bug in e2fsck which could cause it to crash when trying to
+remove an invalid extent and the block bitmaps hadn't yet been loaded.
+(Addresses SourceForge Bug: #2971800)
+    
+E2fsck now will completely skip time-based checks if the system clock
+looks insane or the option broken_system_clock is set in
+/etc/e2fsck.conf.
+
+E2fsck would previously report an i_blocks corruption for a 4T file
+created using posix_fallocate; this bug has been fixed.
+
+E2fsck will now correctly mark a sparse journal as invalid and will
+delete and recreate the journal to address the problem.
+
+E2fsck would previously incorrectly ask the user whether she would
+like to abort the file system check after finding a problem --- and
+then abort regardless of the user's answer.  This is annoying, and
+has been fixed.
+
+E2fsck can now continue even if it fails to recreate the resize
+inode; previously it would just abort the file system check
+altogether.
+
+E2fsck could potentially remove directory entries for inodes found in
+the unused region of the inode table; this would generally happen on
+ext4 file systems that do not use journalling.  This bug has been fixed
+by not clearing these directory entries once it has been established
+that bg_unused_inodes may not be trustworthy; once pass #2 has been
+completed, e2fsck will restart the file system check from the
+beginning, and then it will be safe to delete any directory entries
+pointing to inodes that appear to be deleted.  (Addresses Google Bug:
+#2642165)
+    
+E2fsck will not try to set the block group checksums if the user
+cancels the fsck with a control-C.  It's a bad idea to set the
+checksums if e2fsck hasn't been completed, and it often results an the
+error message, "Inode bitmap not loaded while setting block group
+checksum info".  (Addresses Launchpad Bug: #582035)
+
+The mke2fs program now queries the kernel for the physical as well as
+the logical sector size, and will not allow a blocksize below the
+logical, and will strongly encourage a blocksize at least as big as
+the physical blocksize.  This is needed for 4k sector drives that
+emulate 512 byte sector sizes.
+
+Mke2fs will now allow a flex_bg size of 1.  This is unusual, and
+rarely needed, but it is a legal value.
+
+E2fsck will check for cases where the EOFBLOCKS_FL is set when it is
+not needed, and offer to clear it; this is a sign of a kernel bug, but
+more importantly, some released kernels may crash when this situation
+is encountered on ext4 file systems.  (Addresses Google Bug: #2604224)
+    
+E2fsck will use the EOFBLOCKS_FL flag exclusively to check whether
+i_size is correct.  (Kernels starting with 2.6.34 will set
+EOFBLOCKS_FL.)
+
+The com_err library will now only output ^M (a CR character) when the
+tty is in raw mode.
+
+Update the Czech, Chinese, Dutch, French, Germany, Indonesian, Polish,
+and Vietnamese translations.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs: #571247, #563487)
+
+
+Programmer's Notes
+------------------
+
+The regression test suite now uses its own mke2fs.conf file, so that
+downstream distributions want change the mke2fs.conf file which is
+distributed in the RPM or dpkg file, without worrying about screwing
+up the regression test results.
+
+Always build namei.o so that building with configure --disable-debugfs
+works correctly.  Long-term, if we care about reduced e2fsprogs
+builds, we need a more general solution for deciding what .o files are
+needed for a particular build.  Given that install floppies are going
+(gone?) the way the dodo bird, we probably don't care, though.
+(Addresses Sourceforge Bug: #2911433)
+
+Add configure options --enable-symlink-build and
+--enable-symlink-install, which allow e2fsprogs be built using
+symlinks instead of hard links, and to be installed using symlinks
+instead of hard links, respectively.  It is useful when the file
+system where the build is taking place, or the file system where
+e2fsprogs is installed, can't handle hard links for some reason.
+(Addresses Sourceforge Bug: #1436294)
+
+Fixed compile warning in mke2fs.c.
+
+    
+E2fsprogs 1.41.11 (March 14, 2010)
+==================================
+
+E2fsck will no longer give a fatal error and abort if the physical
+device has been resized beyond 2**32 blocks.  (Addresses Launchpad
+Bug: #521648)
+
+Debugfs has a bug fixed so that "logdump -b <blk>" now properly shows
+the allocation status of the block <blk>.  (Addresses Debian Bug:
+#564084)
+    
+E2fsck now prints a much more emphatic and hopefully scary message
+when a file system is detected as mounted while doing a read/write
+check of the filesystem.  Hopefully this will dissuade users from
+thinking, "surely that message doesn't apply to *me*" :-(
+
+E2fsck -n will now always open the file system read-only.  We now
+disallow certain combination of options which previously were manual
+exceptions; this is bad because it causes users to think they are
+smarter than they really are.  So "-n -c", "-n -l", "-n -L", and "-n
+-D" are no longer supported.  (Addresses Launchpad Bug: #537483)
+    
+In e2fsprogs 1.41.10, mke2fs would ask for confirmation to proceed if
+it detected a badly aligned partition.  Unfortunately, this broke some
+distribution installation scripts, so it now just prints the warning
+message and proceeds.  (Addresses Red Hat Bug: #569021. Addresses
+Launchpad Bug: #530071)
+    
+Mke2fs would take a long time to create very large journal files for
+ext4.  This was caused by a bug in ext2fs_block_iterate2(), which is
+now fixed.
+
+E2fsck now understands the EOFBLOCKS_FL flag which will be used in
+2.6.34 kernels to make e2fsck not complain about blocks deliberately
+fallocated() beyond an inode's i_size.
+
+E2fsprogs 1.41.10 introduced a regression (in commit b71e018) where
+e2fsck -fD can corrupt non-indexed directories when are exists one or
+more file names which alphabetically sort before ".".  This can happen
+with ext2 filesystems or for small directories (take less than a lock)
+which contain filenames that begin with a space or some other
+punctuation mark.  (Addresses Debian Bug: #573923, Addresses Launchpad
+Bug: #525114)
+
+
+Programmer's Notes
+------------------
+
+Add new test, f_rehash_dir, which checks to make sure e2fsck -D works
+correctly.
+
+The libcom_err function now has support for Heimdal's com_right_r
+function().  (Addresses Sourceforge Bug: #2963865, Addresses Debian
+Bug: #558910)
+
+
+E2fsprogs 1.41.10 (February 7, 2010)
+====================================
+
+Fix resize2fs bug which causes it to access invalid memory.
+
+Add libss support for libreadline.so.6.
+    
+Fix e2fsck's check for extent-mapped directory with an incorrect file
+type.
+
+Add new e2fsck.conf configuration option, default/broken_system_clock
+to support systems with broken CMOS hardware clocks.  Also, since too
+many distributions seem to have broken virtualization scripts now,
+e2fsck will by default accept dates which are off by up to 24 hours by
+default.  (Addresses Debian Bugs: #559776, #557636)
+
+Fix a bug where mke2fs may not use the best placement of the inode
+table when there is only room for a single block group in the last
+flex_bg.
+
+E2fsck is now smarter when it needs to allocate blocks in the course
+of fixing file system problems.  This reduces the number of spurious
+differences found in pass #5.
+
+E2fsck will no longer rehash directories which fit in a single
+directory block.
+
+E2fsck now correctly handles holes in extent-mapped directories (i.e.,
+sparse directories which use extents).
+
+Fix big-endian problems with ext2fs_bmap() and ext2fs_bmap2().
+
+Fix a bug in filefrag where on platforms which can allow file systems
+with 8k blocks, that it doesn't core dump when it sees a file system
+with 8k block sizes.  (Thanks to Mikulas Patocka for pointing this
+out.)
+
+E2fsck will correctly fix directories that are have an inaccurate
+i_size as well as other problems in a single pass, instead of
+requiring two e2fsck runs before the file system is fully fixed.
+
+Fix e2fsck so it will correctly find and detect duplicate directory
+entries for non-indexed directories.  ( Addresses Sourceforge Bug:
+#2862551)
+    
+Mke2fs will use BLKDISCARD to pre-discard all blocks on an SSD or
+thinly-provisioned storage device.  This can be disabled using the -K
+option.
+
+Enhance libext2fs so it works around bug in Linux version 2.6.19
+and earlier where the /proc/swaps file was missing the header on
+the first line.
+
+Fix bug in Linux version 2.6.19 and earlier where the /proc/swaps file
+was missing the header on the first line.
+
+Fix some big-endian bugs in e2fsck and libext2fs.
+
+Fix resize2fs so it works correctly on file systems with external
+journals instead of failing early with the error "Illegal inode
+number".
+
+Fix libss so that it does not seg fault when using a readline library
+which does not supply a readline_shutdown() function.
+
+Updated dumpe2fs's usage message so it correctly gives the right
+arguments summary for "-o superblock=<num>" and "-o blocksize=<num>".
+(Addresses Launchpad Bug: #448099)
+   
+Teach libext2fs to ignore the high 32 bits of the i_blocks field
+when huge_file file system feature is set, but the inode does not
+have the HUGE_FILE_FL flag set.
+
+Fix e2fsck's handling of 64-bit i_blocks fields.
+
+E2fsck will now print "Illegal indirect block", "Illegal
+double-indirect block", etc., instead of "Illegal block #-1" or
+"Illegal block #-2", etc.  This makes it easier for users to
+understand what has gone wrong.  (Addresses SourceForge Bug: #2871782)
+
+Mke2fs now will obtain get device topology information from blkid and
+use it to populate the superblock stride and stripe sizes.  It will
+also warn if the block device is misaligned
+
+Fix file descriptor leaks in fsck and debugfs.  (Addresses Novell Bug:
+##524526)
+
+Fix the libext2fs library code to round up the bitmap size to a 4-byte
+boundary, to prevent spurious seg faults caused by the x86
+architecture.  This doesn't affect Linux systems, but was a major
+problem on a number of *BSD systems.  (Addresses Sourceforge Bug:
+#2328708)
+
+Fix resize2fs's minimum size required for a file system so it doesn't
+fail when "resize2fs -M" is run.  (Addresses RedHat Bugzilla: #519131)
+    
+Dumpe2fs now prints summary information about the contents of the
+journal.
+    
+Avoid printing scary error messages when e2fsck starts running
+problems on low-memory systems, as it tends to panic and mislead the
+user.  (Addresses Debian Bug: #509529)
+
+Fix blkid's modules.dep parser so it handles compressed (.ko.gz)
+modules files.  (Address Red Hat Bug: #518572)
+    
+Fix tune2fs so it can add a journal when an extent-enabled file system
+is mounted.  (Addresses Launchpad bug: #416648)
+
+Update Czech, Indonesian, Polish and Vietnamese translations (from the
+Translation Project).
+    
+Update/clarify man pages.  (Addresses Sourceforge Bug: #2822186)
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs: #540111)
+
+Programmer's Notes
+------------------
+
+The configure script supports the --with-cc, --with-ccopts, and
+--with-ldopts options.  Instead, the more standard use of CC=,
+CCFLAGS=, and LDFLAGS= in the configure command line is used instead.
+Also, --with-ld, which never worked, was also removed.
+(Addresses Sourceforge Bug: #2843248)
+
+The in-tree header files are only used if the in-tree uuid or blkid
+libraries are used.  Otherwise, use the system-provided uuid or blkid
+header files if using the system-provided libraries.
+
+Fix some build failures caused by --disable-* configure options.
+
+Work around a bug in autoconf 2.64.
+
+
+E2fsprogs 1.41.9 (August 22, 2009)
+==================================
+
+Fix a bug in e2fsck routines for reallocating an inode table which
+could cause it to loop forever on an ext4 filesystem with the FLEX_BG
+filesystem feature with a relatively rare (and specific) filesystem
+corruption.  This fix causes e2fsck to try to find space for a new
+portion of the inode table in the containing flex_bg, and if that
+fails, the new portion of the inode table will be allocated in any
+free space available in the filesystem.
+
+Make e2fsck less annoying by only asking for permission to relocate a
+block group's inode table once, instead of for every overlapping
+block.  Similarly, only ask once to recompute the block group
+checksums, instead of once for each corrupted block group's checksum.
+
+Fix filefrag to avoid print the extent header if the FIEMAP ioctl is
+not present, and it needs to fall back to using the FIBMAP ioctl.
+
+Fix filefrag to correctly print the number of extents for zero-length
+files.  (Addresses Debian Bug: #540376)
+
+Filefrag now has a -B option which forces the use of the FIBMAP ioctl
+to more easily debug the FIBMAP code.
+
+Fixed filefrag for non-extent based files.
+
+Add a new program, e2freefrag, which displays information about the
+free space fragmentation in an ext2/3/4 filesystem.
+
+Fix inode resizing via tune2fs -I so that it works correctly in the
+face of non-empty bad blocks inodes, and if the filesystem was
+formatted using the "mke2fs -E stride=N" option for RAID arrays.
+
+Fix regression in ext2fs_extent_set_bmap() caused e2fsck -fD to fail
+and corrupt large directories if the directory needs to shrink by more
+than one block.  (Addresses Debian Bug: #537510)
+    
+Fix e2fsck's buggy_init_scritps=1 so that the if the last write and/or
+last mount times are in the future, they are corrected even if
+buggy_init_scripts is set.  This is needed because otherwise resize2fs
+will refuse to resize the filesystem, even after running "e2fsck -f".
+(Addresses Launchpad bug: #373409)
+
+E2fsck will now print much fuller information when the last mount time
+or last written time is in the future, since most people can't seem to
+believe their distribution has buggy init scripts, or they have a
+failed CMOS/RTS clock battery.
+
+Enhance dumpe2fs to dump the extent information via the 'stat'
+command, and more detailed extent information via the new command
+'dump_extents'.
+    
+Update French, Polish, Czech, and Swedish translations from the
+Translation Project.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.
+
+Programmer's Notes
+------------------
+
+Fixed miscellaneous gcc -Wall warnings.
+
+Fixed memory leak in error path in ext2fs_block_iterate2()
+
+Fixed non-Linux build of the intl directory by adding support for the
+E/Q/V macros.
+
+The bitmap read/write functions now treat uninitialized bitmaps as
+unallocated; this fixes a number of problems in all e2fsprogs for ext4
+filesystems when there is a need to allocate new blocks or inodes, and
+there aren't any free blocks or inodes in the already-used block
+groups.
+
+Improve ext2fs_extent_set_bmap() to avoid creating new extents which
+get inserted into the extent tree when they are not needed.
+    
+
+E2fsprogs 1.41.8 (July 11, 2009)
+================================
+
+Fix resize2fs's online resizing, fixing a regression which in
+e2fpsrogs 1.41.7.   (Addresses Debian Bug: #535452)
+
+Fix potential filesystem corruptions caused by using resize2fs to
+shrinking ext4 filesystems with extents enabled.  (Addresses Red Hat
+Bug: #510379)
+
+Optimize uuid_generate() to avoid running uuidd if it is not setuid or
+setgid and the currently running program doesn't have write access to
+the uuidd work directory.
+
+Add safety checks (for non-Linux systems) so that uuidd isn't run with
+file descriptors 0, 1, and 2 closed; and if they are closed, uuidd
+will be careful not to close the file descriptor for its unix domain
+socket when it detaches itself from the controlling tty.  Also add
+safety checks so that if the unix domain socket between the uuid
+library and uuidd program is closed for any reason, both the library
+and the uuidd will return an appropriate error code instead of looping
+in an infinite loop.
+
+The e2croncheck script, which creates an LVM snapshot and then checks
+the ext3/4 filesystem via the LVM snapshot, has been added to the
+contrib directory.
+
+Fix the filefrag program for files that have more than 144 extents.
+
+Update French, Polish, Czech, Indonesian, and Swedish translations from
+the Translation Project.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bug #535530)
+
+Update/clarify man pages.
+
+Programmer's Notes
+------------------
+
+Fix compilation problem when configured with --disable-uuid.
+
+Don't build uuidgen if configured with --disable-uuid.
+
+Add the new library function ext2fs_test_inode_bitmap_range(), and
+optimized ext2fs_test_block_bitmap_range(), which will be needed for
+future optimizations for e2fsck.
+
+Fix makefile dependencies for libcom_err so that the Makefiles work
+well on non-GNU make program.  (Addresses Sourceforge Patches: #2813809)
+
+Enhance the build system so that the full set of commands executed by
+the Makefiles are displayed, instead of the Linux kernel summary
+output, if the build was configured with --enable-verbose-makecmds, or
+if GNU make is in use and the V variable is non-null, i.e., via "make
+V=1".
+
+
+E2fsprogs 1.41.7 (June 29, 2009)
+================================
+
+Fix a bug in libext2fs which can cause e2fsck and resize2fs to write
+uninitialized data into the portion of the inode beyond the first 128
+bytes when operating on inodes mapped via extents; potentially
+corrupting filesystems.
+
+Fix memory leaks in e2fsprogs, including a very large memory leak
+which can cause e2fsck to run out of memory when checking very large
+filesystems using extents.
+
+The logsave program will now filter out the ^A and ^B characters when
+writing to the console.
+
+Harden ext2fs_validate_entry() so that lsdel will not read beyond the
+end of the block even if the directory block is corrupted.
+
+Fix debugfs from core dumping if the logdump command fails to open the
+output file.
+
+Enhance badblocks to print the currently tested block number when
+interrupted with ^C.
+
+Fix lsattr to exit with a non-zero status when it encounters errors.
+(Addresses RedHat Bugzilla #489841)
+
+Fix e2fsprogs to use the same encoding for rec_len in 64k (and larger)
+filesystems as the kernel when encoding rec_len >= 64k.  For 64k
+filesystems (currently all that is supported by e2fsprogs, this is
+only a minor corner case).
+
+Resize2fs will now update the journal backup fields in the superblock
+if the journal is moved; this avoids an unnecessary full fsck after
+resizing the filesystem.  (Addresses RedHat Bugzilla: #505339)
+    
+Fix libext2fs to properly initialize i_extra_size when creating the
+journal and resize inodes.
+
+Change badblocks to allow block sizes larger than 4k.
+
+Fix the filefrag program so it correctly checks for errors from the
+fiemap ioctl.
+
+Update Chinese and Czech translation from the Translation Project.
+
+Clean up various man pages.  (Addresses Debian Bug #531385 and #523063)
+
+
+Programmer's Notes
+------------------
+
+Add --disable-libuuid option to configure which uses an in-system
+installed version of libuuid; the private version is enabled by
+default.
+
+Add --valgrind-leakcheck option to the test_script program which runs
+valgrind with the appropriate options to find memory leaks.
+
+
+E2fsprogs 1.41.6 (May 30, 2009)
+===============================
+
+Fix a critical regression in e2fsck introduced version 1.41.5 which
+can undo updates to the block group descriptors after a journal replay.
+
+If e2fsck receives an I/O error while replaying the journal, prompt
+the user whether they want to ignore the error or not; if e2fsck is
+run in preen mode, force fsck to abort the preen pass.
+
+Fix a bug which would cause e2fsck to core dump if the filesystem
+contains a corrupt extent header, and the user declines to clear the
+inode.  (Addresses Sourceforge Bug: #2791794)
+    
+Fix e2fsck to restart only once in the case of multiple block groups
+which inodes in use that are in the uninitialized part of the block
+group's inode table.
+
+To reduce user confusion, if the /etc/mtab file is missing
+ext2fs_check_mount_point and ext2fs_check_if_mounted will return a
+new, explicit error code to indicate this case.  This will cause
+e2fsck to give a clearer error message when the user is using buggy
+rescue CD's that don't properly set up /etc/mtab.  (Addresses Debian
+Bug: #527859)
+    
+Fix e2fsck so that if the primary group descriptors are corrupted, but
+the backup superblock is entirely invalid, to go back to using (and
+fixing) the primary group descriptors instead of completely giving up
+on the filesystem.  (Addresses Debian Bug: #516820)
+    
+Change e2fsck to not abort a preen pass if an inode is found to have
+i_file_acl_hi non-zero.  Ext3 filesystems don't care, and newer
+kernels (post 2.6.29) will ignore this field.  So let's fix it
+automatically during the preen pass instead of forcing the user to fix
+this up manually.  (Addresses Debian Bug: #526524)
+    
+Add resource tracking for e2fsck passes 1b through 1d.
+
+Speed up e2fsck by eliminating unnecessary journal checks if the
+filesystem is already mounted and doesn't need recovery (since the
+kernel would have run the journal when the filesystem was mounted.)
+Also speed up e2fsck by avoiding unnecessary block group descriptor
+updates in ext2fs_close().
+
+Add support to chattr to migrate inodes from using direct/indirect
+blocks to extents.
+
+Avoid corrupting the filesystem if there is an attempt to shrink a
+filesystem using resize2fs smaller than possible by making
+ext2fs_set_bmap() more careful not to delete the old block until the
+new block can be inserted.  In addition, fix a bug in how the minimum
+size of the filesystem (plus a safety margin) is calculated, and
+modify resize2fs to refuse to shrink the filesystem below that minimum
+size without the force flag.
+
+Teach blkid to try to figure out DM device names using take advantage
+of information in sysfs when running on kernels (2.6.29 and later)
+which provide this information in /sys/block/dm-<N>/dm/name; this is
+much faster than scanning for the device number in /dev/mapper.
+
+Fix blkid to prefer /dev/mapper/<name> device names instead of the
+private /dev/dm-X names.
+
+Add an -a option to debugfs's close_filesys command which writes any
+changes to the superblock or block group descriptors to all of the
+backup superblock locations.
+    
+Add support to the filefrag program to use the FIEMAP ioctl.
+
+Update Chinese translation from the Translation Project.
+
+Clean up various man pages.  (Addresses Red Hat Bugzilla: #502971 and
+Launchpad Bug: #381854)
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bug #506064)
+
+
+Programmer's Notes
+------------------
+
+Add test code to make sure e2fsck's problem.c doesn't have two problem
+codes assigned to duplicate values.
+
+Avoid using a hard-coded path for /bin/rm in block's test_probe.in.
+(Addresses Sourceforge Bug: #2780205)
+
+Clean up e2fsck by removing #ifdef RESOURCE_TRACK by adding an empty
+function declaration for init_resource_track() and
+print_resource_track() when RESOURCE_TRACK is not defined.
+
+The test code which is used to build the tst_csum program has been
+moved from from tst_csum.c into csum.c under an #ifdef DEBUG to to
+avoid compile problems caused by not having a prototype for
+ext2fs_group_desc_csum().  (Addresses Sourceforge Bug #2484331)
+
+Update the config.guess and config.sub file to the latest from the
+FSF, to allow e2fsprogs to build on the avr32 platform.  (Addresses
+Debian Bug: #528330)
+
+Add a new function, ext2fs_extent_open2(), which behaves like
+pext2fs_extent_open(), but uses the user-supplied inode structure
+when opening an extent instead of reading the inode from disk.
+
+
+E2fsprogs 1.41.5 (April 23, 2009)
+=================================
+
+Fix a number of filesystem corruption bugs in resize2fs when growing
+or shrinking ext4 filesystems off-line (i.e., when the ext4 filesystem
+is not mounted).
+
+Debugfs can now set i_file_acl_high via the set_inodes_field command,
+and print a 64-bit file acl.  This is useful for debugging filesystem
+corruptions where the high bits of i_file_acl_high are set.  E2fsck
+will detect and fix non-zero i_file_acl_high on 32-bit filesystems
+since some Linux kernel versions pay attention to this field even when
+they shouldn't.
+
+Speed up e2fsck when checking clean filesystems by avoiding
+unnecessary block reads, and coalescing the block group descriptor
+blocks so they are read using a single read operation.
+
+The libuuid library will now close all file descriptors before running
+uuidd.  This avoids problems when the calling program has open sockets
+which then never get closed because uuidd is a long-running helper
+daemon.  (Addresses Launchpad bug: #305057)
+
+In order to avoid unnecessary full filesystem checks by e2fsck after
+an on-line resize, e2fsck will ignore the NEEDS_RECOVERY flag set on
+the backup superblocks.  (Addresses Red Hat Bugzilla: #471925)
+
+Mke2fs will avoid trying to create the journal when run in
+superblock-only mode (mke2fs -S), since the left-over journal in the
+inode table will cause mke2fs to fail.
+
+Fix a bug in libext2fs functions that check to see if a particular
+device or filesystem image is mounted, which would cause these
+functions to report that a file identical to the (relative) pathname
+used by a pseudo-filesystem was mounted when in fact it was not.
+
+Update Czech translation from the Translation Project.
+
+Add Chinese (simplified) translation from the Translation Project.
+
+Fix support for external journals (which was broken in e2fsprogs
+1.41.4).
+
+Fix a regression in debugfs where the "stat" command when no
+filesystem was open would cause debugfs to crash with a segmentation
+violation.
+
+Starting in the 2.6.29 linux kernel, the ext4 filesystem driver can be
+used to support filesystems without a journal.  Update the blkid
+library so it understands this.
+
+The blkid library will remove an entry from the blkid cache
+representing the entire disk if partitions are found, since presumably
+the device previously had no partition table, but has now transitioned
+to using a partition table.
+
+Add a check to mke2fs and tune2fs that the argument to the -m option
+(which specifies the reserved ratio) must be greater than zero.
+(Addresses Debian Bug: #517015)
+
+Add support for tracking the number kilobytes written to the
+filesystem via the superblock field s_kbytes_written.  It will be
+updated by the kernel as well as by e2fsprogs programs which write to
+the filesystem.  This is useful for tracking the wear to filesystems
+on Solid State Drives.
+
+Fix compatibility issue in the libext2fs info file and makeinfo
+version 4.12.  (Addresses Red Hat Bugzilla: #481620)
+
+Update/clarify man pages.  (Addresses Debian Bug: #515693, #365619)
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details. (Addresses Debian Bug: #506279)
+
+Programmer's Notes
+------------------
+
+Fix Hurd compilation problem in e2fsck and tune2fs (Addresses Debian
+Bug: #521602)
+
+Fix various gcc compilation warnings and other programming cleanups.
+(Addresses Red Hat Bugzilla: #486997)
+
+Add support for building the blkid command statically.
+
+Add support for disabling the built-in blkid library in favor of a
+system-installed blkid implementation via the configure option
+--disable-libblkid.
+
+
+E2fsprogs 1.41.4 (January 27, 2009)
+===================================
+
+Fixed a bug which could sometimes cause blkid to return an exit value
+of zero for a non-existent device (Addresses Debian Bug: #502541)
+
+Blkid will now recognize ext3 filesystems that have the test_fs flag
+set as ext3 filesystems.
+
+The blkid library will now recognize btrfs filesystems and swap
+devices currently used by user-level software suspend.
+
+Tune2fs now updates the block group checksums when changing the UUID
+to avoid causing e2fsck to complain vociferously at the next reboot.
+
+Tune2fs's inode size resizing algorithms have been fixed so it is not
+vastly inefficient for moderate-to-large filesystems, due to some
+O(n**2) and O(n*m) algorithms that didn't scale well at all.
+
+Fix tune2fs's inode resizing algorithm so it will not corrupt
+filesystems laid out for RAID filesystems; in addition, tune2fs will
+refuse to change the inode size for filesystems that have the flex_bg
+feature enabled.  (This is a limitation in the current implementation
+of tune2fs -I.)
+
+E2fsprogs 1.41 broke debugfs's logdump command for normal ext3/4
+filesystems with 32-bit block numbers, when the headers for 64-bit
+block numbers was added.  This regression has been fixed.
+
+Debugfs's ncheck command has been fixed to avoid printing garbage
+characters at the end of file names.
+
+Fix resize2fs for ext4 filesystems.  Some blocks that that need moving
+when shrinking filesystems with uninit_bg feature would not be moved.
+In addition, blocks and inode table blocks were not being correctly
+freed when shrinking filesystems with the flex_bg feable, which caused
+resize2fs -M to fail.  Finally, when blocks are moved, make sure the
+uninitialized flag in extents is preserved.
+
+Fix bug which caused dumpe2fs to abort with an error if run on a
+filesystem that contained an external journal.
+
+Some distributions used "mke3fs" as an alias for "mkfs.ext3"; check
+for this in argv[0] to provide better legacy support for these
+distributions.  This is a practice that should NOT be continued,
+however.
+
+Mke2fs now has a new option -U, which allows the user to specify the
+UUID that should be used for the new filesystem.
+
+Mke2fs will treat devices that are exactly 16TB as if they were 16TB
+minus one block.  This allows users who have read that ext3 supports
+up to 16TB filesystems and who create a 16TB LVM to not get confused,
+since the true limit is really 16TB minus one block.
+
+E2fsck will no longer abort an fsck run if block group has an errant
+INODE_UNINIT flag.
+
+E2fsck now distinguishes between fragmented directories and fragmented
+files in verbose mode statistics and in the fragcheck report.
+
+Fix a bug in e2fsck which caused it double count non-contiguous
+extent-based inodes.
+
+E2fsck will leave some slack space when repacking directories to allow
+room for a few directory entries to be added without causing leaf
+nodes to be split right away.
+
+Fix a bug which caused e2fsck to crash when it comes across a
+corrupted interior node in an extent tree with the error message:
+"Error1: Corrupt extent header on inode XXXXXX"
+
+E2fsck problem descriptions involving the journal are no longer
+referred to as "ext3" problems, since ext4 filesystems also have
+journals.
+
+Fix a long-standing bug in e2fsck which would cause it to crash when
+replying journals for filesystems with block sizes greater than 8k.
+
+Update Catalan translation from the Translation Project.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details. (Addresses Debian Bugs: #503057, #502323, #511207)
+
+Programmer's Notes
+------------------
+
+Fix build of e2fsck.profiled, and add support for building profiled
+binaries in the misc directory if configured with --enable-profile.
+
+The ext2fs_open() function now performs more sanity checks on the
+superblock to avoid potential divide by zero errors by other parts of
+library.
+
+The ext2fs_read_inode_full() function now has a safety check to avoid
+a segmentation fault on corrupted filesystems.
+
+The ext2fs_new_inode() function now has a sanity check so that if the
+s_first_inode field in the superblock is insane, it will return
+EXT2_ET_INODE_ALLOC_FAIL instead of returning an invalid inode number.
+
+To avoid segmentation faults, ext2fs_block_alloc_stats() and
+ext2fs_inode_alloc_stats() now validates the passed inode or block
+number to avoid overrunning an array boundary.
+
+Various signed/unsigned errors for variables containing block numbers
+have been fixed.
+
+Accommodations for gcc's stupidity in not realizing that constant
+strings that do not contain a '%' character are safe to use in format
+strings have been made so that distributions that want to compile
+e2fsprogs with -Werror=format-security have an easier time doing so.
+
+Added a new 64-bit getsize interface, ext2fs_get_device_size2().
+
+Added the utility make-sparse.c to the contrib directory.
+
+The ext2fs_block_iterate2() function now reflects errors from
+ext2fs_extent_set_bmap() to the caller, if the callback tries to
+change a block on an extent-based file, and ext2fs_extent_set_bmap()
+fails for some reason (for example, there isn't enough disk space to
+split a node and expand the extent tree.
+
+The ext2fs_block_iterate2() function will preserve the uninit flag in
+extents when the callback function modifies a block in an extent-based
+file.
+
+E2fsck will now flag filesystems that have an insane s_first_ino field
+in their superblock, and attempt to use a backup superblock to repair
+the filesystem.
+
+
+E2fsprogs 1.41.3 (October 12, 2008)
+===================================
+
+E2fsck has been fixed so it prints the correct inode number for
+uinit_bg related problems.
+
+E2fsck will now offer to clear the test_fs flag if the ext4 filesystem
+is available on linux.  This can be disabled via a configuration
+option in /etc/e2fsck.conf.
+
+Fix a file descriptor leak in libblkid when checking to see if an ext4
+or ext4dev module exists.
+
+Fix a bug in e2fsck where in preen mode, if there are disk I/O errors
+while trying to close a filesystem can lead to infinite loops.
+(Addresses Red Hat Bugzilla #465679)
+    
+Fix a bug in resize2fs where passing in a bogus new size of 0 blocks
+will cause resize2fs to drop into an infinite loop.  (Addresses Red
+Hat Bugzilla: #465984)
+    
+Add a check in the Unix I/O functions in libext2fs so that when a
+device is opened read/write, return an error if the device is
+read-only using the BLKROGET ioctl.
+
+Fix debugfs's ncheck command so that it prints all of the names of
+hardlinks in the same directory.
+
+Fix a bug in libblkid so it correctly detects whether the ext4 and
+ext4dev filesystems are available, so that the ext4dev->ext4
+fallback code works correctly.
+
+Programmer's Notes
+------------------
+
+Fix a parallel build problem by making sure util/subst is built before
+trying to build the lib/et directory.  (Addresses Sourceforge Bug:
+#2143281)
+
+Updated "make depend" information for crc16.o
+    
+
+E2fsprogs 1.41.2 (October 2, 2008)
+==================================
+
+Fix e2fsck's automatic blocksize detection.  This fixes a regression
+from e2fsprogs 1.40.7 which caused e2fsck to fail if the user
+specifies a block number using the -b option if the blocksize option
+isn't also specified using -B.  Unfortunately, users very commonly
+invoke e2fsck using "e2fsck -b 32768 /dev/hdXXX" to use the backup
+superblock; in fact e2fsck will often suggest this kind of command
+line.  Oops.
+
+Enhance the debugfs's "ncheck" command so it will print all of the
+pathnames for the specified inodes.  (Previously, in some cases ncheck
+might not print a pathname for an inode at all if some of the other
+inodes had multiple hard links.)
+
+Enhance debugfs's "hash" command so the hash seed can be specified via
+a command-line option.  In addition, allow the hash algorithm to be
+specified by name instead of just by number.
+
+Fix e2fsck so that we don't accidentally print the translation file's
+header when asking the user a custom question so there is no prompt
+defined for a particular problem record.  For example, the question
+"Run journal anyway" will get the PO header tacked on because e2fsck
+erroneously passed the null string to _().  (Addresses Launchpad Bug:
+#246892)
+
+Enhance badblocks so that it can test a normal file which is greater
+than 2GB.
+
+Enhance the badblocks command so that it displays the time and
+percentage complete when in verbose mode.  (Addresses Debian Bug:
+#429739)
+
+Fix a potential memory leak in a error handling path in debugfs's
+ncheck function.
+
+Fix a potential memory corruption problem if a memory allocation fails
+in resize2fs.
+
+Fix the usage message for debugfs's logdump command to be consistent
+with its man manpage.
+
+Update Polish, French, Vietnamese, Dutch, Indonesian, German, Czech,
+and Swedish translations from the Translation Project.
+
+Add documentation for the file I/O functions to the libext2fs.texinfo
+file.  (Addresses Debian Bug: #484877)
+    
+Update and clarified various man pages.  (Addresses Launchpad Bug
+#275272; Addresses Debian Bugs: #498100, #498101, #498102, #498103)
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details. (Addresses Debian Bug: #497619)
+
+Programmer's Notes
+------------------
+
+Fix a potential file descriptor leak in libcom_err by setting the
+close-on-exec flag for a fd used for debugging.  (Addresses Red Hat
+Bugzilla #464689)
+
+Fix a potential race in libcom_err by using sem_post/sem_init.  SuSE
+has been carrying a patch for a long time to prevent a largely
+theoretical race condition if a multi-threaded application adds and
+removes error tables in multiple threads.  Unfortunately SuSE's
+approach breaks compatibility by forcing applications to link and
+compile with the -pthread option; using pthread mutexes has
+historically been problematic.  We fix this by using sem_post/sem_init
+instead.
+
+Fix e2fsprogs-libs build failure due to 'subs' target.  (Addresses
+Sourceforge Bug: #2087502)
+
+Avoid linking e2initrd_helper, debugfs, blkid, and fsck with unneeded
+libraries when using ELF shared libraries.
+
+Fix ELF shared library when building on systems that don't already
+have the e2fsprogs shared libraries already installed.  (Addresses
+Sourceforge Bug: #2088537)
+
+Fix the pkg-config files so they work correctly when linking with
+static libraries and fix the include directory so programs don't have
+to use #include <ext2fs/ext2fs.h>, but can use #include <ext2fs.h>
+instead.  (Addresses Sourceforge Bug: #2089537)
+    
+Make sure ext2fs_swab64() is compiled for all platforms, and not just
+for x86.  (Addresses Debian Bug: #497515)
+    
+Remove the unused ext2fs_find_{first,ext}_bit_set() functions for all
+non-x86 platforms.  (They had been removed for x86 earlier.)
+
+Fix diet libc compilation support, which had bitrotted due to lack of
+TLC.  Fixing this improves general portability.
+
+When installing the link library when using ELF shared libraries,
+avoid using absolute pathnames if the link library and the shared
+library are installed in the same directory.  (Addresses Sourceforge
+Bug: #1782913)
+
+Fix gen-tarball so it will work even if the top-level directory has
+been renamed to something other than "e2fsprogs".  Also make
+gen-tarball print the size of the resulting tar.gz file.
+
+
+E2fsprogs 1.41.1 (September 1, 2008)
+====================================
+
+Many people are forgetting to update their mke2fs.conf file, and this
+causes ext3, ext4, and ext4dev filesystems won't get created with the
+proper features enabled.  We address this in two ways.  First, mke2fs
+will issue a warning if there is not definition for an ext3, ext4, or
+ext4dev filesystem and the user is trying to create such a filesystem
+type.  Secondly, when installing from a source build, "make install"
+will provide basic configuration file handling for /etc/mke2fs.conf.
+If it exists, and does not mention ext4dev, it will be moved aside to
+/etc/mke2fs.conf.e2fpsrogs-old and the new /etc/mke2fs.conf file will
+be installed.  If the existing /etc/mke2fs.conf file does mention
+ext4dev, then "make install" will install official mke2fs.conf file as
+/etc/mke2fs.conf.e2fsprogs-new and issue a message to the user that
+they should look to see if any changes need to be merged.
+
+The mke2fs program will now create the journal in the middle of the
+filesystem, since this minimizes seek times on average for fsync-heavy
+workloads.  In addition, mke2fs will now create journals using extents
+for filesystems that support them.  This results in a more efficient
+encoding for the journal since it eliminates the need for using
+indirect blocks.
+
+The mke2fs program will avoid allocating an extra block to the
+journal.  (Addresses Sourceforge Bug: #1483791)
+
+Mke2fs will correctly enforce the prohibition against features
+(specifically read-only features) in revision 0 filesystems.  (Thanks
+to Benno Schulenberg for noticing this problem.)
+
+Mke2fs previously would occasionally create some slightly non-optimally
+placed inode tables; this bug has been fixed.
+
+The mke2fs and tune2fs programs now print the correct usage message
+describing the maximum journal size.  (Addresses Debian Bug: #491620)
+
+Add support for setting the default hash algorithm used in b-tree
+directories in tune2fs (from a command-line option) or mke2fs (via
+mke2fs.conf).  In addition, change the default hash algorithm to
+half_md4, since it is faster and better.
+
+The blkid library will now recognize MacOS hfsx filesystems, and
+correctly extract the label and uuid for hfs, hfsx, and hfsplus
+filesystems.  (Addresses Sourceforge Feature Requests: #2060292)
+
+The blkid library has improved detection of JFS and HPFS filesystems.
+(Addresses Launchpad Bug: #255255)
+
+The blkid library is now much more efficiently handling devicemapper
+devices, mainly by no longer using the devicemapper library.  This can
+speed up access for systems with a large number of device mapper
+devices.
+
+Blkid had a number of cache validation bugs in libblkid that have been
+fixed.   (Addresses Debian Bug: #493216)
+
+Resize2fs will now properly close out the "updating inode references"
+progress bar so there is a newline printed before printing the final
+"resize is successful" message.
+
+Resize2fs will now correctly handle filesystems with extents and/o
+uninitialized block groups correctly when file/directory blocks need
+to relocated (i.e., when shrinking a filesystem or if the resize_inode
+is not present).  To support this, the ext2fs library now supports
+initializing inode and block bitmaps that are not yet initialized when
+allocating them using ext2fs_new_block() and ext2fs_new_inode().  In
+addition, e2fs_block_iterate2() can now support changing the location
+of interior nodes of an extent tree, and ext2fs_extent_set_bmap() has
+been optimized to avoid creating unnecessary new extents when updating
+the location of blocks in the extent tree.  This will also help out
+e2fsck's recovery of obscurely corrupted filesystems with extents,
+when blocks are claimed by multiple inodes.
+
+Add support for on-line resizing ext4 filesystem with the flex_bg
+filesystem feature.  The method for doing so is not optimal, but to do
+a better job will require kernel support.
+
+E2fsprogs 1.41.0 introduced a bug in libext2fs which caused e2image and
+debugfs programs to not be able to read e2image files; the signed
+vs. unsigned bug in the code which read bitmaps from the e2image has
+been fixed.   (Addresses Debian Bug: #495830)
+
+Resize2fs is now correctly managing the directory in-use counts when
+shrinking filesystems and directory inodes needed to be moved from one
+block group to another.  This bug has been around since e2fsprogs
+1.26, and is largely harmless, but does cause a filesystem corruption
+which will be flagged by e2fsck after the filesystem has been shrunk.
+E2fsck will no longer issue spurious complaints about the inode size
+caused by very large extent-based files, and by blocks reallocated
+using fallocate() with the FALLOC_FL_KEEP_SIZE option.  (Addresses
+Kernel Bugzilla: #11341)
+
+Mke2fs will now set the creation timestamp on the lost+found directory
+and the root directory.  (More generally, all new inodes created using
+the ext2fs library will correctly set the creation timestamp.)
+
+E2fsck now correctly calculates ind/dind/tind statistics in the
+presence of extent-based files.  In addition, "e2fsck -v" will report
+statistics of the depth of extent trees in the filesystem.  E2fsck can
+also give an inode fragmentation report using "e2fsck -E fragcheck"
+which can be useful when debugging the kernel block allocation
+routines.
+
+Fix support for empty directory blocks in ext4 filesystems with 64k
+blocksize filesystems.
+
+E2fsck will now print the depth of corrupt htree directories.
+
+Debugfs's htree command now correctly understands extent-based
+directories.  It will also print out the minor hash as well as the
+major hash.
+
+Debugfs has a new command which will print the supported features of
+e2fsprogs, to enable scripts to know whether the installed version of
+e2fsprogs can support a specific feature.
+
+Debugfs will now write files using extents for filesystems that
+support them.
+
+The error message printed by "tune2fs -I" if the inode size was too
+small was rather confusing, so it has been improved.  Also, we won't
+try to create an undo log until we know that command-line-specified
+parameters such as "tune2fs -I <inode size>" are valid.
+
+Given some filesystems found "in the wild" that had non-zero block
+group checksums even though the uninit_bg/gdt_sum feature was not
+enabled, e2fsck would issue spurious error messages.  Teach
+ext2fs_group_desc_csum_verify() to ignore the block group checksum
+entirely if the feature flag is not set.  (Addresses Debian Bug:
+#490637)
+
+The blkid program will now print out a user-friendly listing of all of
+the block devices in the system and what they contain when given the
+-L option.  (Addresses Debian Bug: #490527)
+
+The filefrag program now has a more accurate calculation for the
+number of ideal extents.  (Addresses Debian Bug: #458306)
+
+The test I/O manager is now enabled by default, but its overhead is
+only incurred when it would be enabled via the TEST_IO_FLAGS or
+TEST_IO_BLOCK environment variables.
+
+Typographical errors in various program strings and usage messages
+have been fixed; most of these were pointed out by the e2fsprogs
+message catalog translators.  (Thanks, translators!)
+
+Update and clarified various man pages, as well as some typographical
+errors in the libext2fs texinfo file.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.
+
+Add Indonesian and update French, Polish, Dutch, German, Swedish,
+Czech, and Vietnamese Translations.  (Addresses Debian Bugs: #313697,
+#401092)
+
+Programmer's Notes
+------------------
+
+Fix portability problem with the badblocks group; for systems that
+don't have nanosleep(), try using usleep() instead.
+
+The "make check" target in the e2fsck directory now sets
+LD_LIBRARY_PATH before running the various e2fsck internal library
+regression tests.
+
+The crc32 regression test in the e2fsck library is now portable to
+greater variety of environments, including big-endian systems and
+when cross-building e2fsprogs for embedded systems.  (Addresses
+Sourceforge Bug: #2019287)
+
+The ext2fs_extent_set_bmap() had some bugs when setting the first
+block in a file, or when replacing a single block extent.  Those cases
+fortunately were came up relatively rarely when e2fsck was checking
+files, but caused some problems when resize2fs was shrinking
+extent-based files.
+
+Fix a potential core-dumping bug in libe2p's iterate_on_dir()
+function.
+
+Various ext2fs library functions --- ext2fs_block_iterate2(),
+ext2fs_initialize() and ext2fs_extent_open() --- now correctly free
+allocated memory to avoid memory leaks in all of their error return
+paths.
+
+Ext2ed was failing to build because masix support had been removed in
+the rest of e2fsprogs, so ext2ed no longer has masix support, either.
+
+The configure script now respects the LDFLAGS environment variable if
+it is set when configure is called.  (Addresses Sourceforge Feature
+Request: #1937287)
+
+Libuuid is now more portable to the Windows platform.  (Addresses
+Sourceforge Feature Request: #1937287)
+
+The configure script now uses AC_MSG_{RESULT,WARN,ERROR} instead of
+bare echo commands so that configure flags such as --quiet work
+correctly.  (Addresses Sourceforge Patches: #2058794)
+
+A few uses of sprintf have been removed from the ext2fs library to
+make life easier for bootloaders with a limited libc environment.
+(Addresses Sourceforge Bug: #2049120)
+
+The ext2fs_read_inode() checks the validity of the inode number passed
+to it earlier, to avoid doing some needless work when it would fail
+anyway.
+
+The ext2fs_open() checks the validity of the blocksize parameter
+passed to it earlier, to avoid doing some needless work when it would
+fail anyway.
+
+Disable a very annoying automatic "%.sh -> %" GNU make rule in the
+top-level Makefile.  That automatic rule is used to better support
+SCCS, but it caused problems for a particular niche distribution which
+likes to use configure.sh files to store the configure options used to
+build a package.  Unfortunately GNU make will use the configure.sh to
+replace the configure script, resulting in a self-inflicted fork bomb
+leading to an out-of-memory crash.
+
+To support old GNU C compilers don't use C99/C++ comments, but only
+K&R style comments, and don't try to use __builtin_expect if __GNUC__
+is less than 3.  (__builtin_expect is only supported for gcc versions
+2.96 and up, and it's tricky to check for gcc 2.95 vs gcc 2.96; since
+this is an optimization, we only try to use __builtin_expect for gcc 3
+and up.)
+
+In e2fsck's crc routines, make sure we use WORDS_BIGENDIAN instead of
+__LITTLE_ENDIAN, which are only defined by glibc's header files and
+hence isn't portable.
+
+For the convenience for some distributions that need a static tune2fs,
+the Makefile for misc/ now has a tune2fs.static target.
+
+The ext2fs_block_iterate2() function now supports BLOCK_FLAG_APPEND
+for extent-based files
+
+The ext2fs_bmap() function now supports BMAP_ALLOC for extent-based
+files.
+
+All source files no longer have any trailing white space.
+
+The io_channel_read_blk64() and io_channel_write_blk64() functions are
+now functions instead of C preprocessor macros to provide better
+forward compatibility.
+
+The e2fpsrogs translation template now expands the @x abbreviation.
+
+Various namespace leakages in libblkid, libe2p, and libext2fs have
+been fixed.
+
+Fix a parallel build problem in e2fsprogs.
+
+E2fsprogs is now more portable to Solaris.
+  * blkid no longer assumes that the TIOCGSIZE and TIOCGWINSZ ioctl's
+    are always present.
+  * Scripts do not assume that /bin/true is always in /bin
+  * Don't use __FUNCTION__ since Solaris's C99 doesn't support it.
+  * Flush stdio handles before calling setbuf(), since Solaris will
+    discard any pending output to the stream.
+  * Define _XOPEN_SOURCE to 600 since Solaris's header files are very
+    picky about which C compiler can be used for SUSv3 conformance.
+    Use of C99 is not compatible with SUSv2 (_XOPEN_SOURCE=500),
+    and C89 is not compatible with SUSv3 (_XOPEN_SOURCE=600).
+    Since we need some SUSv3 functions, consistently use SUSv3 so
+    that e2fsprogs will build on Solaris using c99.
+  * Solaris C99 does not support varargs C preprocessor macros
+  * Solaris header files pollute the C namespace if in/netinet.h
+    is included, which conflicts with e2fsprogs' use of the kmem_cache_t
+    typedef.
+  * Solaris ships with a pathetically ancient shell in /bin/sh so we
+    avoid the use of various more advanced shell constructs such as $().
+
+The "make rpm" command will now take some extra configure options from
+the build environment without needing to patch the source tree.
+
+The ext2fs_add_dir_block() function will now grow the dblist more
+aggressively as an optimization to avoid copying the array too often.
+
+The e2fsck_write_bitmaps() will write the block and inode bitmaps
+together instead of in two passes.
+
+
+E2fsprogs 1.41 (July 10, 2008)
+==============================
+
+Add support for ext4 filesystem features, in particular extents,
+uninit_bg, flex_bg, huge_file, and dir_nlink features.  Also add
+support for checking journal checksums.  Debugfs will print new
+superblock and inode fields that were defined for ext4.  For example,
+the nanosecond and i_version fields of an inode, and the
+s_min_extra_isize and s_wanted_extra_isize fields from the superblock.
+Note: Resize2fs doesn't currently support the combination of flex_bg
+and !resize_inode.  (Addresses Debian Bug: #388452, #425477)
+
+Tune2fs can support migrating a filesystem from using 128 byte inodes
+to 256 byte inodes, so it can take advantage of the full features of
+ext4.
+
+Add support for "undo" support.  E2fsck and mke2fs can optionally
+record an undo log which can replayed by the program e2undo.
+
+E2fsck could damage a filesystem by trying to relocate inode tables
+due to corrupted block group descriptors, where the attempted inode
+table relocation would do far more harm than good.  E2fsck has been
+fixed to detect this these sorts of corrupted block group descriptors
+much earlier in e2fsck processing, so it can try to use the backup
+superblock and block group descriptors first.  This should be a much
+better strategy for recovering these types of corrupted filesystems.
+(Addresses Sourceforge Bug: #1840291)
+
+E2fsck will display a more understandable message when the last check
+field in the superblock is in the future.  (Addresses Debian Bug:
+#446005).
+
+E2fsck now performs more extensive and careful checks of extended
+attributes stored in the inode.
+
+Enhance mke2fs to print a more explanatory error message when
+ext2fs_get_device_size() returns EFBIG.  (Addresses Debian Bug:
+#488663)
+
+Fix mke2fs to use a default block size of 4k when formatting an
+external journal device.  This is done by using a fixed filesystem
+type list that consists only of the single filesystem type "journal"
+when looking up configuration keys in /etc/mke2fs.conf.  (Addresses
+Debian Bug: #488663)
+
+Speed up how mke2fs writes the journal data blocks by writing the disk
+blocks in larger chunks.
+
+Fix blkid handling of stale devices.  Fix a bug which could cause a
+core dump while garbage collecting the blkid cache, and assure that
+blkid_find_dev_with_tag() never returns a non-existent device.  Also,
+if a filesystem is found at a new /dev location, eliminate any
+duplicate stale entries which can not be verified.
+(Addresses Debian Bugs: #487758, #487783)
+    
+Add more paranoid checks for LVM volumes and swap partitions in
+blkid's probe function, to reduce the chances of false positives.
+
+The mke2fs program now has a much more sophisticated system for
+controlling configuration parameters of a newly created filesystem
+based on a split filesystem and usage type system.  The -t option to
+mke2fs was a deprecated alias to -c; it now specifies a filesystem
+type (ext2, ext3, ext4, etc.), while the -T option can now be a comma
+separated usage list.  The filesystem type information and type
+information is used to extract configuration parameters from the
+/etc/mke2fs.conf file.
+
+The mke2fs program will no longer complain and request the -f option
+when the user tries to create a filesystem with greater than 2**31
+blocks.
+
+When creating a filesystem for the GNU Hurd use a fs-type of Hurd and
+adjust the mke2fs.conf file so filesystems for the Hurd are created
+with a blocksize of 4096 and inode size of 128, which is all it knows
+how to handle.  (Addresses Debian Bug: #471977)
+    
+Mke2fs will always make sure that lost+found always has at least 2
+blocks, even for filesystems with very large blocksizes (i.e., 64kb).
+
+Resize2fs will now print the minimum needed filesystem size if given
+the -P option, and will resize the filesystem to the smallest possible
+size if given the -M option.
+
+Fix resize2fs to clean up the resize_inode if all of the reserved gdt
+blocks are consumed during an off-line resize.
+
+The "ls" command in debugfs now supports the -p option, which causes
+it to quote the filenames so that spaces or tabs in directory entries
+are easily visible.  (Addresses Red Hat Bugzilla: #149480; Addresses
+Sourceforge Feature Request: #1201667)
+
+Fix a potential off-by-one buffer overflow in the fs_device_name in an
+e2image file.
+
+The chattr program will return a non-zero exit code in case of
+failures, and error messages can be suppressed with the -f option.
+(Addresses Red Hat Bugzilla: #180596)
+
+Fix a bug in badblocks which caused it to overrun an array and likely
+crash if more than 8 test patterns are specified using the -t option.
+(Addresses Debian Bug: #487298)
+    
+Add support to badblocks to limit how quickly it reads from the disk
+drive (so it can be used for background scrubbing), and so it will
+abort after finding a given number of errors.
+
+Remove support for the legacy big-endian filesystem format which only
+existed on extremely long-dead PowerPC kernels almost a decade ago.
+
+Remove MASIX support from e2fsprogs.
+
+Add I/O statistics reporting to e2fsck.
+
+Update Vietnamese, Polish, French, Spanish, German, Catalan, Dutch,
+Czech translations.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs: #487443, #487675, #490003)
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.
+(Addresses Debian Bugs: #393313, #487849, #440983, #440981)
+
+Programmer's Notes
+------------------
+
+Factor out bitmap code in preparation for adding 64-bit new-style
+bitmaps.
+
+Fix gcc -Wall warnings
+
+Fix the pkg-config files so that private libraries are specified in
+"Libs.private:".
+
+Fix the libext2fs.texinfo manual so it builds with modern versions of
+texinfo.
+
+Silence the makefile from showing the awk command used to build the
+
+Clean up the badblocks group so to make it more portable and robust.
+
+Avoid using predictable filenames in /tmp in blkid's regression test
+suite.  Also remove bashism's in the regression test script.
+
+If the configure script is given --with-diet-libc, don't use thread
+local storage, since diet libc doesn't support TLS.  (Addresses
+Sourceforge Bug: #2000654)
+    
+Fix the blkid regression test suite to tolerate older versions of
+mkswap that don't support the -U option.
+
+A few library routines have been converted to support 64-bit block
+numbers; in particular, the I/O manager functions, the test_io,
+inode_io, and unix_io managers have all be converted to support 64-bit
+operation.
+
+Debugfs can now be extended for use by test programs.  See
+lib/ext2fs/extents.c for an example for how it can be used.  The test
+program links against the debugfs object files, and provides
+additional commands by defining an auxiliary libss command table.
+
+The lazy_bg filesystem feature, which was only used by developer's
+testing, has been removed since it has been largely supplanted by
+uninit_bg.  This also simplifies the code.
+
diff --git a/doc/RelNotes/v1.42.txt b/doc/RelNotes/v1.42.txt
new file mode 100644 (file)
index 0000000..f0d2dd2
--- /dev/null
@@ -0,0 +1,1690 @@
+E2fsprogs 1.42.13 (May 17, 2015)
+================================
+
+Fixed a potential buffer overflow while closing a file system in
+libext2fs.  (CVE-2015-1572, Addresses Debian Bug: #778948)
+
+Fixed a bug which could cause e2fsck to corrupt Hurd file systems.
+(Addresses Debian Bug: #760275)
+
+Fixed a deadlock which occurs when using systemd and e2fsck.conf's
+logging feature.  (Addresses Debian Bug: #775234)
+
+Fixed a bug which could cause programs using libext2's inode table
+scanning functions from crashing on certain corrupted file systems.
+(Addresses Debian Bug: #773795)
+
+Fixed dumpe2fs so it won't crash if the user doesn't specify a block
+device (file system).  (Addresses Debian Bug: #764293)
+
+Fixed e2fsck so if it notices unexpected HTREE blocks in pass 2, it
+will report the correct directory inode containing the inconsistency.
+
+If e2fsck fails to grow the dir_info structure due realloc(3) not
+having enough memory, it will now fail with explanatory message
+instead of staggering on failing with a confusing internal error
+messages.
+
+The tune2fs program will zero out the superblock journal backup
+information when removing a journal from a file system.
+
+The mke2fs program now enables the large_file feature by default.
+
+Fixed a bug which could cause badblocks to crash if there are millions
+and millions of bad blocks.
+
+Fixed some use-after-free bug in resize2fs and e2fsck.
+
+Fixed a memory leak in tune2fs.
+
+Fixed some bigendian bugs that had crept into both indirect and extent
+handling inside libext2fs.
+
+Updated/fixed various man pages.
+
+Update Esperanto, German, and Spanish translations.  Added Danish
+translation.
+
+Programmer's Notes
+------------------
+
+Fixed coverity, sparse, gcc -Wall, and clang warnings/nits.
+
+Clean up some build system problems (build failures with various
+configure options, fix Posix portability issues, etc.)
+
+The functions ext2fs_inode_alloc_stats[2]() and
+ext2fs_block_alloc_stats[2]() now check the inode and block numbers
+passed to them, to avoid crashes caused by buggy callers.
+
+The libext2fs directory iterator will now check for an invalid
+directory entry length instead of possibly walking off the end of the
+directory buffer.
+
+
+E2fsprogs 1.42.12 (August 25, 2014)
+===================================
+
+Fix various e2fsck bugs when trying to repair bigalloc file systems.
+
+E2fsck can now repair a file system with an overly large
+s_first_meta_bg field, which had previously caused all e2fsprogs
+programs to crash when trying to open such a file system.
+
+Fix e2fsck so that it can correctly fix a number of rare file system
+corruptions that were discovered when using a file system fuzzer.
+
+Fix e2fsck so it does not try to write back block group descriptors if
+they have not been modified.
+
+Mke2fs program will now place metadata blocks in the last flex_bg so
+they are contiguous.  This reduces free space fragmentation in a
+freshly created file system, as well as allowing mke2fs commands which
+request extremely large flex_bg size to succeed.
+
+Mke2fs now creates hugefiles more efficiently (with fewer extent tree
+blocks).
+
+Fix a 32/64-bit overflow bug that could cause resize2fs to loop
+forever. (Addresses-Launchpad-Bug: #1321958)
+
+The resize2fs program will now use much less memory when resizing very
+large file systems.
+
+Fix a bug which could cause resize2fs to get confused and produce a
+corrupted file system when shrinking a file system that had been
+previously expanded and converted to use the meta_bg file system
+format, but which no longer needs to use the meta_bg file system
+format any longer.  This typically happened with large (> 16TB) file
+systems.  (Addresses Debian Bug: #756922)
+
+The e4defrag program will now defrag backwards-allocated files.
+
+Fix tune2fs updating UUID's when manipulating file systems with
+external journals (both the file system and journal UUID).
+
+Fix tune2fs so it can remove an external journal for file systems with
+a 1k block size.
+
+Add a new debugfs command, "inode_dump", which prints the inode in hex
+and ASCII format.
+
+The debugfs's "set_inode_field" will now automatically allocate blocks
+for indirect blocks and extent tree blocks.
+
+Fix debugfs's "set_inode_field" so can properly handle
+"block[IND|DIND|TIND]".
+
+The debugfs "rdump" command will now take multiple source arguments.
+
+Fixed a double close(2) bug in "rdump" and "rdump -p".
+
+Fix debugfs's argument parsing for the freefrag command.
+
+Fix filefrag to properly handle using the FIBMAP ioctl (with -B).
+(Addresses Launchpad Bug: #1356496)
+
+Clarified messages that were confusing users in debugfs, e2fsck,
+mke2fs, and resize2fs (Addresses Debian Bugs: #758029, #757543,
+#757544)
+
+Dumpe2fs will now complain if extra arguments are given to it.
+(Addresses Debian Bug: #758074)
+
+Updated/fixed various man pages.  (Addresses-Debian-Bug: #726760)
+
+Update Czech, Dutch, French, Polish, Spanish, Swedish, Ukrainian, and
+Vietnamese translations.
+
+Programmer's Notes
+------------------
+
+The Unix I/O layer will now use pread[64]/pwrite[64] to reduce the
+number of system calls issued.
+
+Fixed profiled build.
+
+The libext2fs library will now more efficiently split an extent tree
+index block when appending to an end of a file.
+
+Fixed free block accounting for 64-bit file systems.
+
+Add a new function ext2s_inode_size_set() which takes care of all of
+the required feature flag modifications.
+
+The regression tests no longer require the presence of the md5sum
+program.
+
+Fix build failure on MIPS platforms on Debian (Addresses Debian Bug:
+#754605)
+
+Fix various Coverity warnings (#1225003, #1229243, #1252003)
+
+
+E2fsprogs 1.42.11 (July 9, 2014)
+================================
+
+Add support so that mke2fs can create hugefiles so that they are
+aligned relative to the beginning of the disk, instead of relative to
+the beginning of the partition, using the mke2fs.conf configuration
+parameter "hugefiles_align_disk".
+
+Fix a bug which causes e2fsck to abort a journal replay on a file
+system with bigalloc enabled.  (Addresses Debian Bug: #744953)
+
+Add sanity checks so that mke2fs will refuse insanely large flex_bg
+counts specified by the -G option.  Insanely large flex_bg sizes can
+result in a file system which can't be unmounted, or with extremely
+pessimal metadata layouts.
+
+The mke2fs program will provide a better metadata layout for
+moderately large (but believable) flex_bg counts, such as 133,072.
+
+The mke2fs program will also check the kernel version number to
+determine whether the lazy_itable_init option is supported, so that
+lazy inode table initialization can be used even if the ext4 is
+compiled as a module which isn't loaded at the time that mke2fs is
+run.
+
+Add description of ext4's mount options to the ext4 section 5 man
+page.
+
+Improve the chattr man page and clean up the chattr usage message.
+
+E2fsck will now automatically fix a last mount time or last write time
+which is in the future in preen mode, instead of aborting the fsck
+check.
+
+Mke2fs will now check the file system revision number requested by the
+command line, and reject it if it is too large.  A file system with an
+unsupported revision number will not be accepted by any of the other
+file system tools, and this command line option is rarely used, so
+let's try to help the user not shoot their own foot off.
+
+The debugfs program can now set the error count and associated
+first_error and last_error fields in the superblock using the
+set_super_value command.
+
+Resize2fs will not try to calculate the minimum size of a file system
+if it contains errors.  Otherwise a very badly corrupted file system
+image can cause the minimum size calculation to loop forever.  Since
+resize2fs will not allow a file system marked as containing errors to
+be resized.  It's pointless to calculate the minimum size, so just
+skip it.
+
+Fixed a typo in one of mke2fs's error message.
+
+If filefrag runs into an error, it will continue processing the rest
+of the files specified on the command line, but then exit with an
+error code.
+
+Filefrag now prints some additional new flags (such as
+FIEMAP_EXTENT_ENCODED), and print unknown flags as hex values.
+
+Fixed support in filefrag for files with > 2**32 blocks on 32-bit
+platforms.
+
+Fixed a file descriptor leak in debugfs when copying files.
+
+Fixed a regression introduced in 1.42.10 which caused mke2fs to fail
+to create file systems larger than 2GB on 32-bit platforms.
+(Addresses Red Hat Bugzilla: #1099892, Debian Bug: #752107)
+
+Add Esperanto and Ukrainian translations, and update Czech, Dutch,
+French, German, Italian, Polish, Swedish, and Vietnamese
+translations.
+
+Fixed various compiler warnings.
+
+
+Programmer's Notes
+------------------
+
+The gcc "-checker" option has been long deprecated, so remove support
+from e2fsprogs.  It was causing a few people to be confused when they
+tried enabling the configure option.
+
+Update to the latest version of the config.status and config.rpath
+files, as well as newer versions of the autoconf files in aclocal.m4.
+Also, move the e2fsprogs-specific macros to acinclude.m4, which allows
+people who want to use autoreconf to do so.
+
+Make the use of strptime() function in debugfs to be more portable to
+fix regression test failures for FreeBSD and MacOS.
+
+A few miscellaneous changes designed to make life easier for
+translators.
+
+Fix the f_quota test and some Makefile dependencies if quota support
+is not enabled.
+
+Fix cross-compilation support, which got broken in 1.42.10.
+(Addresses Debian Bug: #753375)
+
+Delete lib/ext2_types.h on a make clean, and build it as necessary.
+
+Add a debug program used for libext2fs unit tests.
+
+Clean up the tests so that it avoids using GNU-specific behaviour in
+mktemp.  Make sure the temporary files are cleaned up if the tests are
+interrupted.
+
+Add a new ext2fs_close_free() helper function which automatically
+takes care of freeing the ext2_filsys structure even if ext2fs_close()
+returns an error.
+
+
+E2fsprogs 1.42.10 (May 18, 2014)
+================================
+
+Mke2fs now creates file systems in regular files (which is very often
+used when maintaining virtual machine images) without requiring the
+user to use the force option.  In addition, the mke2fs output has been
+made much less verbose and only displays information that users will
+be more likely to find useful by default.
+
+Mke2fs now will ask the user to confirm that they want to continue
+before wiping out a pre-existing file system, partition table, or LVM
+physical volume.
+
+Mke2fs now has the ability to create file systems where all the
+metadata is located at the very beginning of the device.  This can be
+useful for flash devices which have SLC flash at the beginning of the
+disk, for FAT compatibility, for example.  As part of this, mke2fs and
+tune2fs can control the location of the data blocks used by the
+journal inode.  In addition, the new sparse_super2 feature allows for
+even fewer (anywhere from zero to two) backup superblocks.
+
+Mke2fs now uses much less CPU when allocating the blocks used for very
+large file systems.
+
+Mke2fs can now support creating a file system at an offset.  This can
+be useful when creating a disk image for virtual machines (Addresses
+Debian Bug: #497984)
+
+Previously, e2fsck had a number of very serious bugs when checking a
+file system which used the new the quota file system option (where the
+quota inodes were stored in hidden inodes) and the quota inode was
+inconsistent with the actual usage data.  This problem was documented
+in https://ext4.wiki.kernel.org/index.php/Quota.  These problems have
+been fixed in 1.42.10, so the quota should be safe to use with
+e2fsprogs 1.42.10.
+
+Fixed in a bug in resize2fs which could cause shrink operation fail in
+the unlikely situation when the inode table needs to be moved to a
+location before the current location.
+
+Resize2fs now has a much more accurate (and less conservative)
+estimation of how far the file system can be shrunk.  This allows a
+mostly empty filesystem which is a few terabytes, to be shrunk to a
+few megabytes in a single resize2fs -M operation.
+
+E2fsck will now force a full file system check if there are any file
+system inconsistencies detected in the super block.
+
+The filefrag program will now display the shared extent flag, which is
+used by file systems such as btrfs.
+
+If the number of inodes in the file systems is larger than the time
+that file system was created (as measured by the number of seconds
+since January 1, 1970) e2fsck would print a scary (but otherwise
+harmless) warning of file system corruption for each inode in the
+orphan list.  This false positive has been fixed.
+
+The e4defrag program has been fixed so it will no longer refuse with
+filesystem with the 64-bit or the bigalloc feature enabled.
+
+The logsave program will print a much less scary message which could
+lead users to believe something has gone very wrong with e2fsck exits
+with a non-zero exit status (since this is normal after e2fsck has
+automatically fixed a file system corruption during a preen
+operation).   (Addresses Debian Bug: #468821)
+
+When creating a file system which is larger than 16TB, the
+resize_inode option must be disabled -- since the resize_inode simply
+doesn't support reserving metadata block numbers which is larger than
+32 bits.  The mke2fs program does this automatically if the file
+system size is determined automatically.  It will now also do this if
+the file size is specified explicitly.
+
+Fixed bugs associated with resize2fs and shrinking bigalloc file
+systems.
+
+The e2fsck program will no longer try to add a UUID on a mounted file
+system with checksums enabled, since this could leave the file system
+checksums broken.
+
+Tune2fs will allow the removal of an external journal from file system
+which is marked as needing the journal replayed when the force ("-f")
+option is given twice.  (Addresses Debian Bug: #559301)
+
+Tune2fs will no longer support enabling sparse_super if the meta_bg
+file system feature is enabled, since it could result in data loss.
+In practice, all modern file systems have sparse_super is enabled, so
+it's not worth trying to change how tune2fs handles enabling the
+sparse_super feature.
+
+Fixed support for 1k block file systems with the meta_bg feature.
+
+When the superblock is corrupt, e2fsck can't figure out the location
+of the alternate superblock.  Unfortunately, the routine that
+calculates the location of the alternate superblock uses 8193 if it
+can't figure this out, so the message printed by e2fsck always
+suggests using "e2fsck -b 8193".  This message has been fixed to
+suggest both the superblock location of 8193 and and 32768.
+(Addresses Debian Bug: #719185)
+
+The lookback mount detection code that was introduced in 1.42.9 wasn't
+actually compiled in due to an autoconf oops, so it's fixed now in
+1.42.10.  (Addresses Debian Bug: #497984)
+    
+A bug introduced in 1.42.9 would cause debugfs to print two error
+messages if it found an error while parsing a user-supplied block
+number.  This has been fixed in 1.42.10.
+
+Update Czech, Dutch, French, German, Polish, Spanish, Swedish, and
+Vietnamese translations.  (Addresses Debian Bug: #703048)
+
+Updated/fixed various man pages.  (Addresses Debian Bugs: #719189,
+#719184)
+
+Fixed various Debian Packaging Issues.  (Addresses Debian Bug: #718725)
+
+
+Programmer's Notes
+------------------
+
+Fixed a lot of coverity, sparse, gcc -Wall, and clang warnings/nits.
+
+Allow the location of pkg-config files to be specified independent of
+the libdir location via a makefile variable.
+
+Fixed parse-types.sh not to complain when cross-compiling and the
+sizes of types are different between the target architecture and the
+architecture of the build system
+
+Allow the regression test suite to work correctly on systems which do
+not have the "truncate" or "mksawp" programs.
+
+Allow e2fsck to build correctly on systems (such as Android) that do
+not have the signal.h file.
+
+E2fsprogs now has code coverage testing which can be enabled using
+"configure --enable-gcov".
+
+The libe2p.h header file can now be used included by C++ programs.
+
+The profile/config file used by e2fsck and mke2fs will interpret
+numbers with a leading 0 character to mean that they should be
+interpreted as an octal integer.
+
+The extent handling functions in libext2fs have been improved so they
+have proper rollback when there is an error splitting an extent.  Also
+fix a number of bugs when punching holes in files, and fix an
+off-by-one bug when inserting an extent into an empty inode.
+
+The libext2fs library now handles the support of BLOCK_UNINIT by
+clearing the portion of block bitmap when it is loaded, instead of
+when it is used.  This reduces the chances of bugs, and and simplifies
+the code.  It also means that debugfs will properly show that blocks
+in uninitialized block groups as being unused when using the testb
+command.
+
+The e4defrag program will try to use fadvise64 or posix_fadvise64() if
+it is present, which allows 64-bit offsets on 32-bit systems.
+
+
+E2fsprogs 1.42.9 (December 28, 2013)
+====================================
+
+Mke2fs will detect an attempt to create a file system on a loop
+mounted file and complain without the -FF option.  Also fixed mke2fs
+so it allows the creation of a file system on a mounted device with
+two -F options, as documented in the man page, instead of three -F
+options.
+
+Fixed a large number of bugs in resize2fs, e2fsck, debugfs, and
+libext2fs to correctly handle bigalloc and 64-bit file systems.  There
+were many corner cases that had not been noticed in previous uses of
+these file systems, since they are not as common.  Some of the bugs
+could cause file system corruption or data loss, so users of 64-bit or
+bigalloc file systems are strongly urged to upgrade to e2fsprogs
+1.42.9.
+
+The tune2fs program will now not allow changing the uuid on a mounted
+file system which has the uninit_bg feature enabled.  This avoids a
+nasty race where the kernel and tune2fs are both retrying rewrite the
+group descriptors at the same time, with different ideas about what
+the UUID should be.
+
+When e2fsck is rehashing an extent-mapped directory, it's possible
+(although very rare) that an extent block will need to be allocated;
+fix e2fsck to make sure that the block gets marked as used.
+
+Mke2fs will now properly set the LARGE_FILE feature when creating a
+journal >= 2GB --- which can happen when using 64k block size.
+
+Fixed debugfs so that its freei command will correctly handle a request
+to free a range of consecutive inodes.
+
+Fixed 2fsck so it will not erroneously complain that an external journal
+is invalid if it is exactly 2**32 blocks.
+
+Fixed e2fsck so it won't try checking for, and adding, a missing
+lost+found directory when running in read-only mode.
+
+Fixed e2image so that progress information won't get leaked to stdout.
+(Addresses Red Hat Bugzilla: #1327329)
+
+Fixed e2image to avoid some buffer overruns which would cause it to when
+creating a "standard (non-raw, non-qcow2) image file.  Standard
+e2image files are actually very rarely used, so we didn't notice when
+the changes to enable the qcow2 format broke this e2image mode.
+
+Fixed mke2fs so that the extended option "-E resize=NNN" will not turn
+on the resize_inode feature when the meta_bg feature is set, since
+these two features can not be set at the same time.
+
+Fixed tune2fs so that when it disables the quota feature, it updates all
+of the backup superblocks.
+
+Fixed dumpe2fs that would cause it to abort when run using an image file
+when trying to print the journal information (which is not present in
+an e2image created image file).
+
+Fixed a potential integer overflow in e2reefrag.
+(Addresses-Debian-Bug: #718205)
+
+Enhance debugfs so that when copying a sparse file from a native file
+system into the file system image using the "write" command, it will
+create a sparse file into the destination file system.
+
+Enhanced debugfs so it can support a command line which is up to 8k
+long.
+
+E2image will refuse (unless the -f option is specified to force the
+issue) to create a raw or qcow image using a mounted file system,
+unless the -f option is specified to force the issue.
+
+E2image has been optimized for using it to efficiently copy a file
+system by only copying the allocated blocks, by using the options -ra.
+New options (-o and -O) have been added so that a source and
+destination offset can be given.  The -p option will print progress
+information so the user will know how far along the copy is going.
+And finally, the new option -c is useful for updating a file system on
+an SSD, by avoiding unnecessary writes.  E2image can also shift a file
+system image by doing an in place move.
+
+Fix a regression introduced in 1.42.8 which would cause e2fsck to
+erroneously report uninitialized extents past the EOF (as determined by
+i_size) to be invalid.
+
+Fixed resize2fs so under a corner case when an inode has a complex
+extent tree, it will not corrupt an interior node in the extent tree.
+
+Fixed resize2fs which would sometimes corrupt a file system when
+shrinking a file system to a minimum size using resize2fs -M.
+(Addresses Debian Bug: #660793)
+
+Fixed resize2fs so that it will relocate inode table blocks if this
+becomes necessary when shrinking the file system.
+
+Fixed resize2fs and e2fsck so they will not crash when hit a failure
+while operating on a file system with the MMP feature enabled.
+
+Fixed a bug in debugfs which caused it create an invalid inode when
+trying to write a zero-length file.
+
+E2fsck will no longer crash if it tries to delete an invalid
+extent-mapped symlink.
+
+E2fsck will no longer crash if it comes across an directory which is
+larger than 2GB (which is not allowed in valid file systems).
+
+Fixed debugfs's help texts to fully document all options and otherwise
+be more helpful.
+
+Updated/fixed various man pages.  (Addresses Debian Bugs: #586218,
+#669730, #698076)
+
+Fixed various Debian Packaging Issues (#698879, #721365)
+
+
+Programmer's Notes
+------------------
+
+Fix sparse, gcc -Wall and clang nits.
+
+Update config.{guess,sub} to the latest version
+
+Fixed various memory and file descriptor leaks on various error paths,
+as well as some missing error return checks, which were found using
+Coverity.
+
+Run sparse against source files when building e2fsprogs with 'make
+C=1'.  If instead C=2, it configures basic ext2 types for bitwise
+checking with sparse, which can help find the (many many) spots where
+conversion errors are (possibly) happening.
+
+Allow the regression test to be run in chrooted environments where
+/etc/mtab might be missing.
+
+The ext2fs_punch() function, which was introduced in 1.42, was broken
+in many ways, but this was never noticed since it wasn't used for
+anything significant.  Some of the bugs include failing when trying to
+punch a completely sparse file, failing when punching an extent-mapped
+inode when the starting block was at the beginning of the inode, and
+not being able to punch a single block (where start_blk == end_block).
+It also didn't handle being passed an invalid, too-large ending block
+number, and didn't handle properly terminate at the right place when
+operating on an indirect-mapped inode.
+
+Fixed some minor typo's in the error catalog for libext2fs.
+
+Fixed ext2fs_file_set_size2() so that if it truncates an inode by
+setting the file size, to zero the rest of the block to the end of the
+file, so that if an ext4 FUSE driver tries to extended the file, that
+we don't avoid stale data from being returned.
+
+Fixed ext2fs_bmap() to disallow clients from trying to map or set
+logical blocks which are larger than what an extent-mapped or indirect
+block-mapped inode can allow.
+
+If debugfs (or some userspace program using libext2fs) creates a file
+which is larger than 2GB, make sure the large_file feature flag gets
+set.
+
+Fix a bug in ext2fs_link() where if there is multiple empty slots in the
+directory which are large enough, the directory entry could get
+inserted more than once in the directory.
+
+If quota support is disabled (which is the default), make sure that
+all traces of the quota support is removed from usage messages, man
+pages, and tune2fs must not be able to enable the quota file system
+feature.  (Addresses Red Hat Bugzilla: #1010709)
+
+The ext2fs_file_write() now updates i_size on a successful write,
+instead of only updating i_size wen the file is closed via
+ext2fs_file_close().
+
+Added a shell script, populate-extfs.sh which uses debugfs to populate
+an ext2/3/4 file system image from a given directory.  It is similar
+to the genext2fs program, but it supports ext3 and ext4 file system.
+
+Add changes to the libext2fs library to support block group
+descriptors larger than 64 bytes (for future compatibility).
+
+Fixed an off-by-one bug in ext2fs_file_set_size2() so that it will not
+leave an extra block in the file when truncating the file down to
+size.
+
+The html version info pages are now built using makeinfo --html
+instead of the unmaintained and now-obsolete texi2html program.
+
+
+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 deprecated (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, Swedish, 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 wrong 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)
+================================
+
+Fixed a bug with mke2fs where if there is only 8 inodes per block
+group, the calculation of the number of uninitialized inodes in the
+first block group would go negative.  This resulted in "mke2fs -N 256
+-t ext4 /tmp/foo.img 256m" trying to write so many blocks that /tmp
+would run out of space.  (Addresses Sourceforge Bug: #3528892)
+
+Fixed a bug in how e2fsck would uniquify directory entry names.
+(AddressesSourceforge Bug: #3540545)
+
+Previously, e2fsck would only allow a mounted file system to be
+checked if it was the root file system and it was mounted read-only.
+Now it will allow any file system mounted read-only to be checked if
+the -f option is specified.  This makes it easier to test how e2fsck
+handles checking file systems which are mounted without having to test
+on the root file system.
+
+Fixed a problem if e2fsck where if the root file system is mounted
+read-only, e2fsck would not clear an error indication in the journal
+superblock.  Combined with a kernel bug, this would cause the e2fsck
+to check the file system after every single boot.
+
+The e4defrag program can now handle device symlinks, such as
+/dev/mapper/testvg-testlv, instead of insisting on a less
+human-friendly name such as /dev/dm-2.  (Addresses Red Hat Bugzilla:
+#707209)
+
+Fixed filefrag so it will not crash with a segfault on files from a
+virtual file system such as /proc.  (e.g., "filefrag
+/proc/partitions")
+
+Fixed filefrag so that it correctly reports the number of extents.
+(Addresses Red Hat Bugzilla: #840848)
+
+Fixed a file descriptor leak in logsave which could cause it to hang.
+(Addresses Debian Bug: #682592)
+
+Fixed e2fsck so that the file system is marked as containing an error
+if the user chooses not to fix the quota usage information.
+
+Fixed tune2fs so that it correctly removes the quota feature when the
+last quota inode is removed.
+
+Fix tune2fs so that after removing a quota inode, the block bitmap is
+updated; otherwise, e2fsck would complain after running 'tune2fs -O
+^quota <dev>'.
+
+Fix tune2fs so that when converting a file system from using legacy
+quota files to the new quota file system feature with hidden quota
+files, the accounting for these files is handled correctly so that
+e2fsck doesn't complain.
+
+Improved e2fsck's verbose reporting statistics, and allow the more
+verbose reporting to be enabled via /etc/e2fsck.conf.
+
+Fixed various Debian Packaging Issues (Addresses Debian Bug #678395)
+
+Updated/fixed various man pages.  (Addresses Debian Bugs: #680114)
+
+
+Programmer's Notes
+------------------
+
+Fixed portability problems on other operating systems (e.g., Hurd and
+FreeBsd) caused by the attempted inclusion of <sys/quota.h>.
+
+Make sure that shared libraries link with the shared libraries built
+in the build tree, instead of the system provided libraries.
+Previously, libraries and executables were linked with the system
+libraries if present, and possibly using static archives instead of
+shared libraries.  This was also problematic since if libext2fs.so is
+linked with a static libcom_err.a from system, the build system would
+attempt to link without -lpthread.  (Addresses Sourceforge Bug:
+#3542572)
+
+
+E2fsprogs 1.42.4 (June 12, 2012)
+================================
+
+Fixed more 64-bit block number bugs (which could end up corrupting
+file systems!) in e2fsck, debugfs, and libext2fs.
+
+Fixed e2fsck's handling of the journal's s_errno field.  E2fsck was
+not properly propagating the journal's s_errno field to the superblock
+field; it was not checking this field if the journal had already been
+replayed, and if the journal *was* being replayed, the "error bit"
+wasn't getting flushed out to disk.
+
+Fixed a false positive complaint by e2fsck if all of the extents in
+the last extent tree block are uninitialized and located after the end
+of the file as defined by i_size.
+
+The dumpe2fs will now display the journal's s_errno field if it is
+non-zero, and it will also display the journal's 64-bit feature flag
+if present.
+
+Fix e2fsck so that it always opens the device file in exclusive mode
+when it might need to modify the file system, and never if the -n
+option is specified.  (Previously, there were a few corner cases where
+it might get things wrong in either direction.)
+
+E2fsck now correctly truncates or deallocates extent-mapped inodes on
+the orphan list.  The root cause was a bug in libext2fs's block
+iterator which could end up skipping an extent when the last block in
+an extent is removed, causing the current extent to be removed from
+the extent tree.
+
+E2fsck now correctly sets the global free block and inode counts when
+truncating or removing inodes on the orphan list in preen mode.
+Previously, it would leave these values would be set incorrectly,
+which is largely a cosmetic issue since the kernel no longer pays
+attention to those fields, but it can cause spurious complaints in
+subsequent e2fsck runs.
+
+Fix i_blocks accounting when the libext2fs library needs to add or
+remove an extent tree block  on bigalloc file systems.
+
+The lsattr and chattr programs now support the No_COW flag for the
+benefit of btrfs.
+
+Debugfs now interprets date strings of the form @ddd as ddd seconds
+after the beginning of the epoch.  This is handy when setting an inode
+number into the d_time field when debugging orphan list handling.
+
+Fix a precedence bug with built-in quota support which might result in
+e2fsck paying attention to the quota inode field even if the built-in
+quota feature flag is not set.  Fortunately, in practice that
+superblock field should be zero for non-built-in quota file systems,
+so it's unlikely this bug would have caused problems.
+
+Updated/fixed various man pages.  (Addresses Debian Bugs: #674453,
+#674694)
+
+Programmer's Notes
+------------------
+
+The regression test suite can now run the integration tests in the
+tests directory in parallel, via "make -jN check".
+
+Add new test, f_zero_extent_length which tests e2fsck's handling of
+the case where all of the extents in the last extent tree block are
+uninitialized extents after i_size.
+
+Add a new test, f_jnl_errno, which checks handling of an error
+indication set in the journal superblock.
+
+Fix the test f_jnl_64bit so that it properly checks e2fsck's handling
+of a 64-bit journal.
+
+Add two tests, f_orphan_indirect_inode and f_orphan_extent_inode which
+tests e2fsck's handling of orphan inodes in preen mode, and truncation
+of extent inodes on the orphan list.
+
+Fixed more OS X portability issues.
+
+
+E2fsprogs 1.42.3 (May 14, 2012)
+===============================
+
+Fix a bug in the Unix I/O manager which could cause corruption of file
+systems with more than 16TB when e2fsprogs is compiled in 32-bit mode
+(i.e., when unsigned long is 32-bits).  Also fix a bug which caused
+dumpe2fs to incorrectly display block numbers > 32-bits.
+
+Improve the support for integrated quota files (where quota is a first
+class supported feature using hidden files in the ext4 file system).
+Previously the quota file was getting rewritten even when it was not
+necessary, and e2fsck would erroneously try to hide quota files which
+were already hidden.
+
+Quiet complaints in e2fsck when the total free blocks or inodes are
+incorrect in the superblock after an system crash, since we don't
+update nor depend on the superblock summaries at each commit boundary.
+
+Fixed a regression introduced in 1.42.2 which would cause applications
+outside of e2fsprogs which did not pass the EXT2_FLAG_64BIT (and so
+would were still using the legacy 32-bit bitmaps) to crash.  This was
+due to missing 32-bit compat code in side the function
+ext2fs_find_first_zero_generic_bmap().  (Addresses Red Hat Bugzilla:
+#808421)
+    
+Fix a bug which would cause mke2fs to fail creating the journal if
+/etc/mtab and /proc/mounts are missing.  (Addresses Sourceforge Bug:
+#3509398)
+    
+Updated/fixed various man pages.
+
+Update Czech, Dutch, French, German, Polish, Swedish, and Vietnamese
+translations
+
+Fixed various Debian Packaging issues.
+
+
+Programmer's Notes
+------------------
+
+Change the nonsensically wrong types in the function signature of the
+inline function ext2fs_find_first_zero_block_bitmap2().  This was
+caused by a cut and paste error; fortunately no code in e2fsprogs used
+this inline function, and there are any users of this functions
+outside of e2fsprogs.
+
+Add support for systems which have valloc(), but which do have
+posix_memalign() nor memalign() (such as MacOS 10.5).
+
+Refactor and clean up the allocation of aligned buffers for Direct I/O
+support.  Previously some allocations were requesting a greater
+alignment factor that what was strictly necessary.  Also optimize
+reading and writing bitmaps using Direct I/O when the size of the
+bitmap did not fully cover the file system blocksize.
+
+Reserve the codepoints for the INCOMPAT features LARGEDATA and
+INLINEDATA.
+
+Improved the regression test suite by adding some new integration
+tests (f_jnl_32bit, f_jnl_64bit) which detect breakage of the on-disk
+jbd2 format, as well as f_eofblocks which tests the new handling of
+uninitialized and initialized blocks beyond i_size.  Also add a new
+unit test which verifies 32-bit bitmaps support and the new
+find_first_zero primitives.
+
+Add a few dependencies to fix parallel (make -j) builds.
+
+Removed bash'isms which were breaking the regression test suite on
+systems where /bin/sh is not bash.
+
+The config.guess and config.sub have been updated to the 2012-02-10
+version.
+    
+Fix a portability problem caused by assuming the present of mntent.h
+means that setmntent() exists.  Instead, explicitly test for this in
+the configure script.
+
+If the sys/signal.h header file does not exist, don't try to include
+it, since it's not available on all systems.
+
+Add support for systems that do not support getpwuid_r()
+    
+The configure script now supports a new option,
+--enable-relative-symlinks, which will install relative symlinks for
+the ELF shared library files.  (Addresses Sourceforge Bug: #3520767).
+    
+When building BSD shared libraries make sure the LDFLAGS variable is
+passed to the linker.  Fixing this allows, for example, e2fsprogs to
+be built in 32-bit mode on Mac OS X Lion (Addresses Sourceforge Bug:
+#3517272)
+    
+Fix gcc -Wall nitpicks
+
+
+E2fsprogs 1.42.2 (March 27, 2012)
+=================================
+
+The resize2fs program uses much less CPU and is much faster for very
+large file systems.  (Addresses Debian Bug: #663237)
+
+The seti and freei commands in debugfs can now take an optional length
+argument to set and clear a contiguous range of inodes.
+
+E2fsck will now make explicit checks for the EOFBLOCKS_FL, since we
+plan to remove support for it from the kernel file system driver.  It
+really wasn't very useful and was causing more problems than it
+solves.  Since e2fsck will complain if inodes that should have
+EOFBLOCKS_FL do not have the flag set, we are going to remove this
+check from e2fsprogs first, and then only remove the flag from the
+kernel much later.
+
+The mke2fs program can now use direct I/O via "mke2fs -D".  This will
+slow down the mke2fs, but it makes it more polite on a loaded server
+by limiting the amount of memory that gets dirtied by mke2fs when it
+is using buffered I/O.
+
+E2fsck was needlessly closing and re-opening the file system as a side
+effect of adding Multiple Mount Protection (MMP).  This isn't
+necessary for non-MMP file systems, so drop it.
+
+Print errors returned by ext2fs_open2() and ext2fs_check_desc() so we
+can more easily diagnose memory allocation failures caused by
+insufficient memory.  E2fsck will now abort if there are memory
+allocation failures when the file system is initially opened and
+during the block group descriptor checks.  (Addresses Google Bug:
+#6208183)
+
+If there are incorrect block group checks, e2fsck will now report the
+incorrect and corrected checksum values.
+
+The e2fsck program can now write log files containing the details of
+the problems that were found and fixed directly, via configuration
+parameters in /etc/e2fsck.conf.
+
+Added the ability to limit the number of messages reported by e2fsck
+for a given problem type.  This avoids a potential bottleneck if there
+is a serial console which can cause a boot sequence to take a long
+time if e2fsck needs to report many, many file system errors.
+
+The dumpe2fs, debugfs, and tune2fs now use rbtree bitmaps, which cause
+them to use much less memory for large file systems.
+
+The dumpe2fs program will now print the expected block group checksum
+if it is incorrect.  This helps to diagnose problems caused by
+incorrect block group checksums.
+
+E2fsck now checks for extents with a zero length, since the kernel
+will oops if it comes across such a corrupted data structure.  (See
+https://bugzilla.kernel.org/show_bug.cgi?id=42859)
+
+E2fsck has a number of bugs relating to discard that have been fixed.
+(1) Fixed a bug which could cause e2fsck to discard portions of the
+inode table which were actually in use.  (2) E2fsck will now avoid
+using discard if the block device doesn't zero data on discard, since
+otherwise this could cause problems if the file system gets corrupted
+in the future.  (3) E2fsck will now avoid using discard when it is run
+in read-only mode.  (4) Fixed a bug which caused e2fsck to not issue
+discards in the last block group.
+
+E2fsck's CPU utilization in pass 5 has been optimized, which will
+speed up e2fsck slightly.
+
+E2image will now skip copying uninitialized bitmap and inode table
+blocks.
+
+Fixed mke2fs -S so it does not corrupt the first block group's
+information.
+
+E2fsck will now check the new sysfs interface to determine if we are
+using the battery or AC mains.  (Addresses SourceForge Bug: #3439277)
+
+Updated/fixed various man pages.  (Addresses Debian Bug: #665427)
+
+Fixed various Debian Packaging issues.  (Addresses Debian Bug: #665885)
+
+Programmer's Notes
+------------------
+
+Fixed various portability issues for non-Linux systems, particularly
+MacOS X, as well as Linux systems running with the just-released glibc
+2.15.
+
+Fix file descriptor leak in ext2fs_close() if the file system with
+uninit_bg is opened read/only with a backup superblock.  (Addresses
+SourceForge Bug: #3444351)
+
+Fixed an invalid return in a non-void function in the quota code.
+(Addresses SourceForge Bug: #3468423)
+
+Fixed the debian rules file so that the calls to dpkg-buildflags works
+when the shell is dash.
+
+The debian package build now uses V=1 so that there is more
+information about potential build failures in debian build logs.
+
+If the uninit flags get cleared by functions such as
+ext2fs_new_inode() or ext2fs_new_block2(), we now make sure the
+superblock is marked dirty and the block group descriptor checksum is
+updated if necessary.
+
+The debian rules file will now try to load debian/rules.custom of it
+exists.  This file can skip various builds for speed reasons if there
+is no need for the e2fsck-static or udeb packages.  Available
+customizations in the rules file includes SKIP_STATIC=yes,
+SKIP_BF=yes, and SKIP_DIETLIBC=yes.
+
+In addition, if the file misc/mke2fs.conf.custom.in exists in the
+source tree, it will be used instead of the standard misc.conf file in
+the upstream sources.  This makes it easier for Debian-derived systems
+to distribute a custom mke2fs.conf file without having to worry about
+merge issues if future versions of e2fsprogs makes changes in the
+upstream default version of mke2fs.conf.
+
+
+E2fsprogs 1.42.1 (February 17, 2012)
+===================================
+
+The mke2fs and e2fsck now use significantly less memory when creating
+or checking very large file systems.  This was enabled by adding
+extent-based bitmaps which are stored using a red-block tree, since
+block and inode allocations tend to be contiguous.
+
+The command mke2fs -S is used as a last ditch recovery command to
+write new superblock and block group descriptors, but _not_ to destroy
+the inode table in hopes of recovering from a badly corrupted file
+system.  So if the uninit_bg feature is enabled, mke2fs -S will now
+set the unused inodes count field to zero.  Otherwise, e2fsck -fy
+after using mke2fs -S would leave the file system completely empty.
+
+Since mke2fs recognizes mke3fs in argv[0] to mean "mkfs.ext3", also
+honor "mke4fs" to work the same as "mke2fs.ext4", since RHEL5 has
+installed an mke2fs binary using that name.
+
+The usage and help messages for the -G, -t and -T options in mke2fs
+have been fixed.
+
+If e2fsck needs to use the backup group descriptors, the
+ext2fs_open2() function clears the UNINIT bits to ensure all of the
+inodes in the file systems get scanned.  However, the code which reset
+the UNINIT flags did not also recalculate the checksum, which produced
+many spurious (and scary) e2fsck messages.  This has been fixed by
+resetting checksums when the UNINIT bits are cleared.
+
+Relax a check in e2fsck which required that the block bitmap to be
+initialized when the inode bitmap is in use.  This will allow us to
+eventually eliminate code from the kernel which forcibly initialized
+the block bitmap when the inode bitmap is first used, requiring an
+extra journal credit and disk write.  (Addresses Google Bug: #5944440)
+    
+Make sure rdebugfs (which may be installed setuid or setgid disk) does
+not honor environment variables if euid != uid or egid != gid.
+
+Debugfs's ncheck command has been optimized and now is much more
+robust with faced with corrupted file systems.  The ncheck command
+also now has a -c option which will verify the file type information
+in the directory entry to see if matches the inode's mode bits.  This
+is extremely useful when trying to use debugsfs to determine which
+parts of the file system metadata can be trusted.
+
+E2image will try to use ftruncate64() to set the i_size for raw
+images, instead of writing a single null byte.  This avoid allocating
+an extra block to the raw image, for those file systems and/or
+operating systems that support this.  (Linux does.)  In addition, fix
+a logic bug that caused the file to not be properly extended if the
+size of the last hole was exactly an multiple of a megabyte.
+
+Fixed a bug in resize2fs where for 1k and 2k file systems, where
+s_first_data_block is non-zero, this wasn't taken into account when
+calculate the minimum file system size for use with the -M option.
+
+Fixed the badblocks program to honor the -s flag when in read-only -t
+mode.  (Addresses Debian Bug #646629)
+
+Update Czech, Dutch, French, Polish, and Swedish translations from the
+Translation Project.
+
+Fixed various Debian Packaging issues so that dpkg-buildflags is used
+if present, which allows e2fsprogs to be built with security hardening
+flags.  (Addresses Debian Bugs: #654457)
+
+Programmer's Notes
+------------------
+
+Fix a bug in ext2fs_clear_generic_bmap() when used for 32-bit bitmaps.
+This was only an issue for programs compiled against e2fsprogs 1.41
+that manipulate bitmaps directly.  (Addresses Sourceforge Bugs:
+#3451486)
+
+The libext2fs library now uses sysconf() to fetch the page size, instead
+of the deprecated getpagesize().
+
+The ext2fs_get_pathname() function will return a partial path if an a
+directory in the path is not a directory, displaying it as an inode
+number in angle brackets instead of giving up and displaying an error.
+This is much more helpful when a user is trying to debug a corrupted
+file system.
+
+Codepoints for the RO_COMPAT_REPLICA feature has been reserved.
+
+Added a new library function, ext2fs_file_get_inode_num(), for use by
+fuse2fs.
+
+Fixed a bug in ext2fs_file_set_size2() so that when it is truncating a
+file, it actually works.
+
+The block iterator now properly honors the BLOCK_ABORT flag for
+extent-based flags.  Previously, it didn't, which generally made code
+be less efficient, but it could cause bugs in ext2fs_link(), for
+example, by causing it to insert multiple directory entries.
+
+Fixed an (harmless other than causing a compiler warning) use of an
+uninitialized variable in e2fsck's MMP code.
+
+
+E2fsprogs 1.42 (November 29, 2011)
+==================================
+
+This release of e2fsprogs has support for file systems > 16TB.  Online
+resize requires kernel support which will hopefully be in Linux
+version 3.2.  Offline support is not yet available for > 16TB file
+systems, but will be coming.
+
+This release of e2fsprogs has support for clustered allocation.  This
+reduces the number of block (now cluster) bitmaps by allocating and
+deallocating space in contiguous power-of-2 collections of blocks,
+which are called clustered.  This is a file system level feature,
+called 'bigalloc', which must be enabled when the file system is
+initially formatted.  It is not backwards compatible with older
+kernels.
+
+Added support for the Multi-Mount Protection (MMP) feature.
+
+E2fsck more efficiently uses scratch files for really big file
+systems.  (This is a feature that has to be turned on explicitly; see
+[scratch_files] in the e2fsck.conf man page.)
+
+Fix a bug in e2fsck where if the free blocks and inodes counts are
+incorrect, e2fsck would fix them without printing an error message.
+This would cause a "*** FILE SYSTEM WAS MODIFIED ***" message without
+any explanation of what was fixed.
+
+E2fsck will no longer attempt to clone an extended attribute block in
+pass1b handling if the file system does not support extended
+attributes.
+
+E2fsck will be more careful accidentally asking the user to continue
+if the file system is mounted, so that an escape sequence won't cause
+a false positive.  (Addresses Debian Bug: #619859)
+
+E2fsck now uses less cpu time in pass 5 when large portions of the
+bitmaps are uninitialized.
+
+E2fsck will no longer segfault when a corrupted file system has a bad
+extent, and removing it leads to a block needing to be deallocated.
+(Addresses SourceForge Bug: #2971800)
+
+E2fsck will catch termination signals (segfaults, bus errors, sigfpe)
+and print debugging information to make it easier to find potential
+problems.
+
+E2fsck will check to see if the bad block inode looks insane, and will
+skip trying to use if it certain fields which should be zero look
+non-zero.  This is to avoid a corrupted bad block inode causing e2fsck
+to get confused and do more harm than good.
+
+If e2fsck modifies certain superblock fields which the kernel doesn't
+look at, it will now mark the superblock as dirty without marking the
+file system as changed.  This avoids signaling the init scripts that
+a reboot is necessary, since the kernel isn't going to look at those
+fields, so it won't care if they have been changed.
+
+Fixed a bug in the libext2fs library (in the binary search routine of
+the icount abstraction) that could (very, very rarely) cause e2fsck to
+die in the middle of pass 1 or pass 2 processing.
+
+E2fsck will not try to do a discard operation if the -n option was
+specified on the command line.
+
+E2fsck now supports an extended "discard" option which will cause
+e2fsck to attempt discard all unused blocks after a full, successful
+file system check.
+
+E2fsck will check for the bad block inode to make sure it looks sane
+before trusting it, to avoid causing more harm than good to the file
+system.
+
+E2fsck now returns additional status bits in its exit code if it
+aborts early in the e2fsck run.
+
+E2fsck now correctly calculates the maximum file size in the case of
+the huge_file file system feature enabled without extents.
+
+The mke2fs and e2fsck programs now tries to use the punch hole command
+as a "discard" when operating on normal files.
+
+The e2image program now supports the qcow2 format, which is a more
+efficient way of capturing file system dumps.
+
+Mke2fs now supports the [devices] stanza in mke2fs.conf which allows
+per-device defaults to be specified in the configuration file.
+
+Mke2fs now supports the reserved_ratio relation in the [defaults] and
+[fs_types] section in mke2fs.conf.
+
+Mke2fs now creates extent-mapped directories for the root and
+lost+found directories.
+
+Mke2fs will skip zero'ing the journal if the extended option
+"lazy_journal_init" is specified.  This can save a lot of time, but it
+does add a small amount of risk if the system crashes before the
+journal is overwritten entirely once.  It is especially useful for
+testing.
+
+Mke2fs will now create file systems that enable user namespace
+extended attributes and with time- and mount count-based file
+system checks disabled.
+
+Mke2fs will not set a stride or strip size of one block based on block
+device attributes obtained from sysfs.
+
+Mke2fs now displays a progress report during the discard process.
+
+Mke2fs now handles extreme file system parameters correctly which
+previously caused the inodes per group to drop below 8, leading to a
+segfault.  (The inodes per group must be a multiple of 8, but the code
+didn't correctly deal with an inodes per group count less than 8.)
+
+Mke2fs and tune2fs previously would give an error if the user tried
+setting the stride and stripe-width parameters to zero; but this is
+necessary to disable the stride and stripe-width settings.  So allow
+setting these superblock fields to zero.  (Addresses Google Bug:
+#4988557)
+
+Mke2fs now gives a warning if the auto-detected block size exceeds the
+system's page size.
+
+If the enable_periodic_fsck option is false in /etc/mke2fs.conf (which
+is the default), mke2fs will now set the s_max_mnt_count superblock
+field to -1, instead of 0.  Kernels older then 3.0 will print a
+spurious message on each mount then they see a s_max_mnt_count set to
+0, which will annoy users.  (Addresses Debian Bug: #632637)
+    
+The default mke2fs.conf now has entries for "big" and "huge", which
+are needed for very big file systems.
+
+The resize2fs program now has support for a new online resize ioctl
+that can support file systems > 16TB, once it arrives in v3.x kernels.
+
+Fixed bug which caused resize2fs to fail when shrinking an empty file
+system down to its minimal size.  (Addresses Sourceforge Bug #3404051)
+
+Fixed tune2fs's mount options parsing.  (Addresses Debian Bug: #641667)
+
+Allow tune2fs to remove external journals if the device can not be
+found.
+
+Debugfs's icheck will now correctly find inodes which use the
+searched-for block as an extended attribute block.
+
+Debugfs now has a new "punch" command which remove blocks from the
+middle of an inode.
+
+Debugfs now has a new "e2freefrag" command which analyzes the free
+space fragmentation of the file system, using the same code as the
+e2freefrag program.
+
+Debugfs now has a "filefrag" command which displays information about
+a file's fragmentation.
+
+Add support to build a metadata-only, read-only, stripped-down version
+of debugfs called rdebugfs.
+
+Fixed a potential stack overrun bug in debugfs.
+
+The badblocks program now correctly recovers from I/O errors when
+direct I/O is being used.  The badblocks command now also supports a
+-B option which forces the use of buffered I/O, and the -v option will
+provide a more detailed breakdown of read, write, and failed
+comparison errors.
+
+Added e4defrag tool which uses the EXT4_IOC_MOVE_EXT ioctl.
+
+Added support for journals larger than 2GB.
+
+Support using both hard links and symlinks when installing e2fsprogs.
+
+Add overflow checking to tune2fs -i's fsck interval, which must fit in
+a 32-bit field.
+
+The debugfs command now has a new 'blocks' command which prints out
+data blocks of a particular inode in a format which is useful for
+scripting.
+
+Filefrag will report 0 extents correctly in verbose mode.  (Addresses
+RedHat Bugzilla: #653234)
+
+Filefrag has been fixed so its -v report prints the correct expected
+block number (previously there had been an off-by-one error).  In
+addition, it will now display the number of contiguous extents when -v
+is not specified.  This makes it consistent with the number of extents
+printed when the -v option was specified.  In addition, the number of
+contiguous extents is far more interesting/useful than the number of
+physical extents for very large files.  (Addresses Debian Bug:
+#631498, #644792)
+    
+Logsave's usage message has been fixed.  (Addresses Debian Bug:
+#619788)
+
+Avoid an infinite loop in ext2fs_find_block_device() if there are
+symlink loops in /dev caused by a buggy udev.
+
+Added a useful "fallocate" program to the contrib directory.
+
+Fixed an ABI compatibility problem in libext2fs which broke the dump
+program.  Also added back some macros which dump needed so it could
+compile against the latest version of ext2_fs.h (Addresses Debian Bug:
+#636418)
+
+Fixed parsing of MNTOPT_ options for tune2fs and debugfs (Addresses
+Debian Bug: #641667)
+
+Added internationalization support for libcom_err error table strings.
+
+Fixed various spelling mistakes found in various output strings found
+by I18N translators.
+
+Update translations: French, Chinese, Germany, Indonesian, Swedish,
+Vietnamese, Polish, Dutch, Czech.  (Addresses Debian Bugs: #520985,
+#620659)
+
+Fixed various Debian Packaging issues.  (Addresses Debian Bugs:
+#614662, #632169, #641838, #627535, #629355)
+
+Updated/clarified man pages.  (Addresses Debian Bugs: #639411,
+#642193, #634883)
+
+Programmer's Notes
+------------------
+
+Initial support for quota as an integrated feature, where the quota
+files are hidden system files that are automatically maintained by
+e2fsck is present, although disabled by default.  It must be enabled
+by using the configure option --enable-quota.
+
+Reserved the on-disk fields for the metadata checksum and snapshot
+features, which are currently in development.
+
+The ext2fs library now has the new functions ext2fs_punch(),
+ext2fs_get_memzero() and ext2fs_file_get_inode().
+
+The ext2fs library now has support for calculating the crc32c checksum
+(via the new functions ext2fs_crc32c_be and ext2fs_crc32c_le).
+
+The I/O manager now supports the discard operation.
+
+Reserved file system code points for new 1st class quota feature.
+
+Shortened the compilation lines by moving the autoconf defines to
+a config.h header file.
+
+Fixed a potential free of an uninitialized pointer in
+ext2fs_update_bb_inode().
+
+Fixed miscellaneous gcc -Wall and coverity warnings.
+
+Fixed portability issues for Mac OS X, Hurd, and FreeBSD.
+
+Fixed a build failure when OMIT_COM_ERR is defined.
+
+Improved error checking and fixed memory leaks caused by error return
+paths.
+
+Add ext2fs_flush2() and ext2fs_close2() which takes a flag to allow
+the fsync() to be skipped.
+
+Added a test for extent-mapped journals by mke2fs and tune2fs.
+
+Added a test for creating a large (over 4GB) journal using mke2fs.
+
+Added a test to make sure the inode size remains constant.
+
+The regression test script now prints the list of which tests failed.
+
+The regression test system now uses /tmp for its scratch files, which
+is often a tmpfs mounted file system and hence much faster.
+
+The i_e2image test was fixed so it works with valgrind.
+
+Tests that rely on debugfs are now skipped if debugfs wasn't built.
+
+Fixed the dependencies for "make check" so all required dependencies
+are built before running the regression tests.
+
+A link to com_err.h is installed in $(includedir) during a "make install".
+
+The po/*.gmo files are automatically rebuilt if they are missing or
+out of date.  This helps out Debian packaging.
+
+Allow ext2fs_get_memalign() to compile on systems that don't have
+posix_memalign().
+
+Fixed a namespace leak in libext2fs (tdb_null).
+
diff --git a/doc/RelNotes/v1.43.0.txt b/doc/RelNotes/v1.43.0.txt
new file mode 100644 (file)
index 0000000..cf0602e
--- /dev/null
@@ -0,0 +1,234 @@
+E2fsprogs 1.43 (May 17, 2016)
+=============================
+
+Add support for the ext4 metadata checksum, checksum seed, inline
+data, encryption, project quota, and read-only features.
+
+Support for the very old, experimental, and never-added-to-mainline
+compression feature has been removed.
+
+Mke2fs will now create file systems with the metadata_csum and 64bit
+features enabled by default.
+
+The mke2fs program will now support multiple -O options (instead of
+just ignoring all but the last -O option).
+
+Mke2fs will now correctly determine the size of a file system and
+handle the discard operation correctly when the "-E offset=NNN" is
+used.  (Addresses Debian Bug: #803629)
+
+The tune2fs program will ask the user for confirmation before starting
+dangerous operations if the terminal is available, and it will replay
+the journal if necessary.
+
+Add an ext2/3/4 FUSE server
+
+Debugfs can now modify extended attributes and journal transactions.
+
+Debugfs now can properly display and set extended timestamps.
+
+E2fsck will offer to fix extended timestamps that were incorrectly
+encoded by older kernels.
+
+Fix miscellaneous MMP bugs in debugfs.
+
+Fix sparse_super2 bugs in mke2fs and resize2fs.
+
+Fix or improve offset support in mke2fs, e2undo, and libext2fs.
+
+The resize2fs command can now convert file systems between 64-bit and
+32-bit mode.
+
+Fix potential out-of-bounds memory access in resize2fs when doing a
+large off-line file system grow operation.
+
+We now use a new e2undo file format which is much more efficient and
+faster than the old tdb-based scheme.  Since it so much faster,
+e2fsck, tune2fs, debugfs, and resize2fs now also can support using
+creating an undo file.
+
+The mke2fs command can now set the error behavior when initializing
+the file system (so the administrator doesn't have to issue a separate
+tune2fs -e command).
+
+Teach mke2fs to parse a human-readable argument for -i option.
+
+Teach mke2fs to automatically handle creating file systems > 500T by
+automatically enable the meta_bg feature.
+
+Mke2fs will now prompt for user verification before rewriting a file
+system's superblock using the -S option.
+
+Mke2fs no longer complains if the user tries to create a file system
+using the entire block device (e.g., without using a partition).  The
+minor number convention is not used by all block devices, and it's
+quite normal in some circumstances to create a file system on /dev/sdc
+instead of /dev/sdc1.
+
+Fix an "mke2fs -d" bug which could create inodes with invalid
+extended attribute blocks
+
+E2fsck is now much more paranoid about not freeing or corrupting
+critical metadata blocks, such as inode table blocks, even if
+corrupted indirect blocks or extent trees point at these blocks.
+
+E2fsck now prints block ranges in pass1b instead of listing all of the
+blocks exhaustively.
+
+E2fsck will try to expand the root directory if the lost+found can't
+be linked to the root directory.  Also, offer to use the root
+directory if lost+found can't be created.
+
+E2fsck is now more paranoid handling corrupted extent trees as well as
+corrupted journals.
+
+E2fsck can now rebuild extent trees, either (a) to optimize them, (b)
+to recover from a corrupted extent tree, or (c) to convert
+block-mapped inodes to use extents.
+
+E2fsck now has a readahead mechanism which can significantly speed its
+performance, especially on RAID arrays.
+
+E2fsck now has a "yes to all" option which the user can give if she is
+tired of answering 'y' to a very large number of questions.
+
+E2fsck will now ignore the badblocks inode if the contents of the
+badblocks inode indicate that the portion inode table containing the
+badblocks inode is bad.  (We must go deeper...)
+
+E2fsck can now correctly fix directory with holes on bigalloc file
+systems.
+
+E2fsck will now check for extent mapped inodes with no extent header
+and clear them if found.
+
+E2fsck now checks to make sure the extended attribute header doesn't
+result in the xattr extending beyond the bounds of the inode
+
+Fixed a bug in e2fsck to avoid overrunning a buffer containing jbd2
+revoke records if the journal is corrupted.
+
+Fixed a bug in e2fsck which could cause it loop forever if a special
+inode has too many invalid block mappings.
+
+Fixed a bug in e2fsck which could cause pass1b/c/d processing to get
+confused if an attempt to allocate a block can't find any free space
+in the file system.
+
+E2fsck will no longer try to force rewrite blocks located beyond the
+file system.
+
+The e2fsck program will no longer update the quota inodes when it is
+interrupted.
+
+Fix a bug which in rare cases would cause e2fsck -fD to corrupt an
+extent-mapped directory.
+
+Fixed a bug in resize2fs which could lead to resize2fs crashing or a
+corrupted file system if the file system is almost completely full
+when trying grow a file system and we need to allocate blocks to grow
+the block group descriptors.
+
+Fixed a bug in resize2fs which could cause it to get fooled trying to
+determine the RAID array's stride when flex_bg is enabled.
+
+Fix resize2fs bug that could leave block allocation bitmaps
+uninitialized.
+
+The dumpe2fs output has been improved so it is cleaner and always fits
+within 80 columns.  Also added a more easily machine-parsable output
+of dumpe2fs.
+
+The mke2fs program can now pre-populate a file system from a directory
+hierarchy using the -d option.
+
+The mke2fs program now skips zeroing inode table blocks if they were
+already zeroed using the discard feature.
+
+Check to make sure file system features which can not be supported by
+HURD are not enabled if the file system is created to be
+HURD-compatible.
+
+Added a new e2fuzz command that will fuzz an ext4 image for testing
+purposes.
+
+The debugfs logdump command can now deal with 64-bit revoke tables
+correctly.  Also, "logdump -O" will print the old log contents (before
+the journal was replayed).
+
+The debugfs bmap command can now be used to set or allocate a physical
+block.
+
+Fixed a bug so "filefrag -B -e -v" does not return a separate entry
+for each block.
+
+The filefrag program now accounts for holes in sparse files created by
+the file punch operation as an expected/optimal mapping.
+
+The file I/O functions now correctly handle inodes containing
+uninitialized blocks.
+
+Fix a bug in tune2fs so that removing uninit_bg feature on a bigalloc
+file system won't result in corrupted block bitmaps.
+
+Updated/fixed various man pages.  (Addresses Debian Bug: #798425)
+
+
+Programmer's Notes
+------------------
+
+Fixed coverity, sparse, gcc -Wall, and clang warnings/nits.
+
+Added Android build files so that e2fsprogs can be built in the
+Android source tree.
+
+Reduce the use of libc functions in libext2fs that may not be present
+in the boot loader environment, at least for those functions that are
+needed by boot loaders such as yaboot.
+
+Developers can now override the debugging and optimization flags by
+redefining the CFLAGS makefile macro.
+
+The libext2fs library now has support for fallocate.
+
+The mke2fs command will now ask the user for confirmation if block
+device or image file contains an existing file system image, and
+stdout and stdin are connected to a tty.
+
+The libext2fs library now picks a more intelligent goal block when
+doing block allocations.
+
+The libext2fs library will now automatically set the BLOCK_UNINT flag
+if all of the blocks in a block group are free, to speed up future
+e2fsck and dumpe2fs operations on the file system.
+
+Add two new functions ext2fs_new_range() and ext2fs_alloc_range() to
+libext2fs.
+
+The ext2fs_zero_blocks() command will use FALLOC_FL_ZERO_RANGE for
+file-based images.
+
+The ext2fs_bmap() function supports new flags BMAP_UNINIT and
+BMAP_ZERO.
+
+The ext2fs_new_block2() function will now call the alloc_block hook
+before checking fs->block_map.
+
+Support for the MMP feature can now be disabled at compile time.
+
+Added support to manipulate extended attributes to libext2fs.
+
+Added a lot of new regression tests.
+
+Added endian annotations so it's possible to scan e2fsprogs for endian
+problems using a static code analyzer.
+
+Fixed memory leaks in libext2fs.
+
+The e2fsck jbd2 handling code has been resynced with the 3.16 kernel.
+There is now a script in the contrib directory which automates most of
+the resync process.
+
+The build system will now run cppcheck (a static code analysis tool)
+via "make C=1"
+
diff --git a/doc/RelNotes/v1.43.1.txt b/doc/RelNotes/v1.43.1.txt
new file mode 100644 (file)
index 0000000..9c27c13
--- /dev/null
@@ -0,0 +1,80 @@
+E2fsprogs 1.43.1 (June 8, 2016)
+===============================
+
+Fixed e2fsck so that it would correctly update the project quota usage
+when deleting a corrupted and inode, and fixed mke2fs so it wouldn't
+dereference memory beyond the small inode structure (which was wrong,
+but worked mostly by accident unless hardening or some security malloc
+was in use).
+
+Fixed a large number of FreeBSD portability problems.  (To build on
+FreeBSD, however, we still need to use GNU Make and redirect dd to use
+GNU dd.)
+
+The configure script now supports --enable-hardening, which enables
+stack protection, fortify, read-only relocation tables, immediate
+dynamic symbol binding, and text segment ASLR (if the kernel has
+userspace ASLR support enabled) by enabling position independent
+executable code.  (Distributions who want to do their own special
+thing can set CFLAGS, CFLAGS_SHLIB, CLFAGS_STLIB, LDFLAGS,
+LDFLAGS_SHLIB and LDFLAGS_STATIC as appropriate.)
+
+The configure script now supports --disable-tdb since on 64-bit
+systems, it's much faster to just enable additional swap space.  The
+scratch_files feature in e2fsck.conf is mostly only useful on 32-bit
+systems.
+
+Fixed the Direct I/O fallback codepath in the Unix I/O manager so that
+read/modify/write worked correctly.  Fortunately in practice (with the
+exception of the Undo handler when running on FreeBSD) used this buggy
+codepath. so file systems weren't getting corrupted.
+
+Mke2fs will now warn if the user provides a label which is too long.
+(Addresses Debian Bug: #791630)
+
+Debugfs's rdump command now works correctly when dumping the root
+directory of a file system.  (Addresses Debian Bug: #766125)
+
+Fixed a bug in debugfs so it would correctly calculate a block group's
+checksum field field on 64-bit systems.
+
+E2fsck now has a much more understandable error message when the
+journal superblock is corrupt and the user declines to fix it.
+(Addresses Debian Bug: #768162)
+
+Fixed support of extended timestamps on 64-bit systems.
+
+Updated/fixed various man pages.  (Addresses Debian Bugs: #766379,
+#761144, #770750, #428361, #766127)
+
+Fixed various Debian Packaging Issues.  (Addresses Debian Bug: #825868)
+
+
+Programming notes
+-----------------
+
+Fixed coverity, sparse, gcc -Wall, and clang warnings/nits.
+
+Fixed Android build makefiles (which was missing a newly added file in
+lib/support).
+
+In general, checks on s_creator_os have been removed in favor of
+feature flag specific checks; if there is something that can't be
+checked via the presence of a feature flag, we will simply check
+whether the creator OS is *not* EXT2_OS_HURD which is the one
+operating system where there has been extensive abuse of the
+s_creator_os flag.
+
+The libmagic library has been suppressed when running the regression
+test suite to avoid false test failures caused by differences between
+versions of libmagic (and/or the magic number database).
+
+The tests/test_script program now accepts the --failed option, which
+will run those tests that had previously failed.
+
+Fixed tests build on those systems which require LDFLAGS to be set.
+
+Fixed the regression test suite so it will properly filter out version
+numbers with two components (such as 1.43) from log files before
+comparing them with the expected golden output.
+
diff --git a/doc/RelNotes/v1.43.2.txt b/doc/RelNotes/v1.43.2.txt
new file mode 100644 (file)
index 0000000..dafc1f2
--- /dev/null
@@ -0,0 +1,72 @@
+E2fsprogs 1.43.2 (September 1, 2016)
+====================================
+
+Fix resize2fs so it will not crash if there is an extended attribute
+block but it doesn't need to migrate any blocks during an off-line
+resize
+
+Fix a crash when mke2fs or debugfs tries to copy in a directory
+hierarchy containing an empty directory
+
+Mke2fs will now use a larger journal by default for filesystems
+greater than 128 GB.  (1GB instead of 128 MB.)
+
+Fix an alignment bug in e2fsck which caused sparc64 architectures to
+crash when replaying the journal on file systems with a 64-bit block
+number.
+
+Clarify the message printed by tune2fs message when the user needs to
+run e2fsck so it's clear that the -f flag to e2fsck is needed to
+force a full e2fsck scan.  (Addresses Debian Bug: #828022)
+
+Fix a bug in e2fsck caused by a power failure during e2fsck's journal
+replay could leave the file system in a state where if the file system
+is mounted without doing a full e2fsck scan, the file system could get
+corrupted
+
+Fix the logic in e2fsck which decides when to repair legacy negative
+timestamp encodings.
+
+Add a command to debugfs to copy the inode structure from one inode to
+another.
+
+Fix a typo in debugfs's stat command when printing out the dtime field
+on file systems with an extended timestamp.
+
+Fix big endian bugs in the e2undo program.  (Addresses Red Hat Bug
+#1344636)
+
+Debugfs's logdump can now properly handle journals larger than 2GB.
+
+Avoid installing the man page for fuse2fs if it has not been built.
+
+Update the Catalan, Chinese, Danish, Dutch, French, German, Polish,
+Swedish, Ukrainian translations and added new translations for
+Hungarian and Serbian.
+
+
+Programming notes
+-----------------
+
+Fix portability problems in fuse2fs.  Previously it wouldn't build on
+systems with older glibc versions where clock_gettime() is only
+available in the librt library, and if libintl is not bundled into the
+C library.
+
+Remove complicated logic which caused a static code analyzer to flag a
+false positive.  (A static code analyzer also found a valid bug in
+deciding when to repair a legacy negative timestamp encoding, so
+eliminating false positives is important.)
+
+Fixed a bug where the ext2fs library cloud provoke when a
+extfs2_zero_blocks() is used (via fallocation, initializing a file
+system, uninitialized uninitialized inode table blocks) after a
+different file system which also used ext2fs_zero_blocks().
+
+Enable the unix_io manager in the ext2fs library so it can accept the
+use of a file descriptor.  This is helpful in cases where the file
+descriptor comes from temporary file created using O_TMPFILE, or
+passed in from a unix domain socket.
+
+Fix a Windows64 portability bug.
+
diff --git a/doc/RelNotes/v1.43.3.txt b/doc/RelNotes/v1.43.3.txt
new file mode 100644 (file)
index 0000000..6b902cb
--- /dev/null
@@ -0,0 +1,27 @@
+E2fsprogs 1.43.3 (September 4, 2016)
+====================================
+
+Fix e2fsck's handling of timestamps on 32-bit systems.
+
+E2fsck will now check, and if necessary repair the extra isize fields
+in the inode and superblock.
+
+Fix crashes on architectures such as sparc64 that are sensitive to
+unaligned pointer dereferences in the journal recovery code when
+journal checksums are enabled.
+
+Programming notes
+-----------------
+
+Support reproducible builds by not capturing the build directory into
+the mk_cmds and compile_et scripts.  Also fix debian build rules to
+ensure build reproducibility.
+
+Fix debian build rules to ensure build reproducibility and to avoid
+hiding the linker flags for e2fsck.static so the build hardening log
+scanner can properly audit the build.
+
+Fix compatibility with FreeBSD's pmake and teach the configure script
+to force the creation of pmake-compatible Makefiles if the
+FORCE_NATIVE_MAKE environment variable is set to a non-empty value.
+
diff --git a/doc/RelNotes/v1.43.4.txt b/doc/RelNotes/v1.43.4.txt
new file mode 100644 (file)
index 0000000..7b3f33d
--- /dev/null
@@ -0,0 +1,71 @@
+E2fsprogs 1.43.4 (January 31, 2017)
+===================================
+
+Fix e2fsck to require that the system.data extended attribute is
+always present even for files smaller than 60 bytes, to be consistent
+with the kernel.
+
+Fix a bug which was causing mke2fs -d and fuse2fs to improperly handle
+Posix ACL's.
+
+Fix a bug which could cause mke2fs -d to fail if there is an
+zero-length file in source directory tree.
+
+Clarify the default for the "proceed?" question printed by mke2fs and
+tune2fs.  (Addresses Debian Bug: #852727)
+
+Debugfs will now display project quota information.
+
+Debugfs's do_set_xattr now uses C strings to parse extended attribute
+values, and will print the extended attributes using either C strings
+or hex bytes when using debugfs's do_get_xattr command.  It will now
+allow developers to see the contents of the system.data extended
+attribute.
+
+Fix a bug in mke2fs where I/O errors weren't getting properly reported
+to the user.
+
+Fix multiblock writes in the unaligned Direct I/O fallback code.
+(Which is rarely needed on Linux systems, but which is required on
+Freebsd systems.)
+
+Make sure the default mke2fs.conf file includes the uninit_bg feature
+flag.  (Which was accidentally dropped in v1.43).
+
+Fix a bug in resize2fs when operating on very large file systems which
+have a block size different from the VM page size.
+
+If the reported device size is absurdly large, mke2fs will now report
+an error instead looping forever or crashing.
+
+Fix various Coverity warnings and other memory leaks in fuse2fs and
+extended attribute manipulation functions.
+
+Replace a test file but which had a "non-commercial use-only"
+copyright permission file with a newer version from the Cyrus imapd
+package which now has a 4-clause BSD license, which was making some
+lawyers nervous, even though the test file in question was only used
+in lib/et's regression testing and was never included in any compiled
+binary.  (Addresses Debian Bug: #840733)
+
+Stop installing mkfs.ext4dev and fsck.ext4dev
+
+Update Chinese, Czech, Polish, Serbian, and Spanish translations and
+add the Finnish and Malay translation.  (Addresses-Debian-Bug: #774379)
+
+Update various man pages (Addresses-Debian-Bug: #852726)
+
+Programming notes
+-----------------
+
+Fix more FreeBSD-11 compatibility bugs, including some unmasked by
+FreeBSD 11-rc2.
+
+Fix the Mac build.
+
+Fix build failure on RHEL 5.x systems caused by an old version of
+libmagic.
+
+Fix a number of bugs reported by ASAN that can cause some (mostly
+harmless) memory dereferences beyond allocated memory.
+
diff --git a/doc/RelNotes/v1.43.5.txt b/doc/RelNotes/v1.43.5.txt
new file mode 100644 (file)
index 0000000..c8a5084
--- /dev/null
@@ -0,0 +1,133 @@
+E2fsprogs 1.43.5 (August 4, 2017)
+=================================
+
+Fix a bug which could cause e2fsck to loop forever when rebuilding an
+encrypted directory with entries with identical prefixes up to an
+embedded NUL character.
+
+Fix build when configured with --disable-threads or --enable-profile.
+
+Fix ext2fs_sync_device() so it returns the proper error code if the
+BLKFLSBUF ioctl fails for some reason.
+
+Fix a potential crash in tune2fs when enabling project quota when the
+file system has no inodes by fixing error handling in the
+quota_write_inode() in libsupport.
+
+Fix a bug in debugfs's "ls -p" handling which could cause it to print
+garbage after a file name in a directory entry.
+
+Fix a number of bugs in debugfs, dumpe2fs, e2fsck, tune2fs, and
+resize2fs where a carefully/maliciously corrupted file systems (found
+by American Fuzzy Lop) could these programs to crash or hang.
+(Addresses Debian Bug #868489)
+
+E2fsck no longer issues some harmless bitmap warnings caused by a
+corrupted file system; since those corruptions will be fixed up by
+e2fsck later, there's no point issuing these internal warnings.
+
+E2fsck will now notice invalid quota inode numbers, and offer to fix
+them.
+
+Fix a regression introduced in e2fsprogs 1.43 which broke mke2fs's
+hugefile creation so that they aren't contiguous.  (Addresses Google
+Bugs 62791459 and 638037607)
+
+Fix how backup superblocks are written in big endian systems so they
+are all correctly byte swapped.
+
+Fixed tune2fs's support for enabling and disabling project quota.
+
+The badblock program now properly handles languages which have
+multi-column wide character such as Chinese.  (Addresses Debian Bug:
+#860926)
+
+The mke2fs -U option now accepts "null", "clear", "random", or "time"
+just as tune2fs's -U option.
+
+Fix e2fsck's -E bmap2extent feature (which converts a file to use
+extents from indirect block maps) so that it handles sparse files correctly.
+
+Fix libext2fs to correctly handle accounting for an external xattr
+block on bigalloc file systems.
+
+Fix e2fsck to correctly handle quota accounting when deleting files
+that have multiply-claimed blocks pass 1b.
+
+Fix potential buffer overrun bug in e2fsck when using 128 byte inodes.
+(Addresses Google Bug 37326362).
+
+E2fsck's extent tree optimization can now be disabled via an
+command-line extended option or via an e2fsck.conf configuration
+parameter.
+
+The e2fsck program now properly updates the quota accounting when
+optimizing the extent tree.  (Addresses Google Bug 36391645)
+
+Fix some error handling in e4crypt when operating on keyring ID's.
+
+Fix e2fsck's quota handling when the bigalloc feature is enabled.
+
+The libext2fs file system now uses readahead when opening file systems
+to speed up opening very large file systems with the meta_bg option.
+
+If e2fsck logging is enabled, e2fsck will report the exit code in the
+last line of the log file.
+
+Debugfs can now open file systems with a bad superblock checksum, and
+the show_super_stats command will print the expected checksum.
+
+Fix a regression introduced in e2fsprogs 1.43.4 where tune2fs was not
+able to correctly enable the quota feature.  (Addresses Debian Bug
+#855417)
+
+E2fsck will only return an exit status code of 1 if it has fixed a
+file system corruption.  If it only performed an optimal optimization
+of internal file system metadata, it will now return 0.
+
+Fix e2fsck so it won't check inode fields of deleted inodes.  This was
+mostly harmless, but the addition of a check in 1.43.4 to enforce the
+requirement that inline data inodes have a system.data attribute
+caused a regression in xfstests generic/079.  Fix this and a number of
+other checks which could lead to false positive reports of file system
+corruption.
+
+Removed a debugging printf in libsupport which could result to some
+extraneous and confusing output if the user specifies a quota type.
+
+The debugfs logdump command now accepts a new -S option which will
+cause it to print information about the journal superblock.
+
+Added a missing space in debugfs's ls -l output to separate the size
+and date fields.
+
+Update the Czech, Danish, Dutch, French, Hungarian, Polish, Serbian,
+Spanish, Swedish, Ukrainian, and Vietnamese translations.
+
+Update various man pages.  (Addresses Debian Bugs #867895 and #865584)
+
+Fix various compiler and UBSAN warnings.
+
+Fixed various Debian Packaging Issues.  (Addresses Debian Bugs
+#864144 and #866623)
+
+
+Programming notes
+-----------------
+
+The blkid library can now recognize exfat file systems.
+
+Add new test, j_recover_csum3_64bit, which checks to make sure we
+correctly recovering 64-bit journals using the v3 checksum format.
+
+Fix portability assumption in tests; don't depend on the existence of
+/dev/stdin.
+
+Fix portability with newer versions of glibc and with Cygwin builds on
+Windows 8 and Windows 10.
+
+Clean up the comments in problem.c match the message that will
+actually be printed.
+
+Removed an unused an obsolete header file.
+
diff --git a/doc/RelNotes/v1.43.6.txt b/doc/RelNotes/v1.43.6.txt
new file mode 100644 (file)
index 0000000..1050d5e
--- /dev/null
@@ -0,0 +1,70 @@
+E2fsprogs 1.43.6 (August 29, 2017)
+==================================
+
+Fix printing of quota inconsistency messages on 32-bit platforms in
+e2fsck.  Also fix a bug which cause project quota problems to be
+labelled as group quota problems.
+
+Fix UI problems caused by fuzzy translations such that some messages
+are in English and some are in the foreign language, and it's not
+obvious to user how to answer yes/no questions.  (Addresses Debian
+Bug: #856586).
+
+Fix some out-of-bounds memory accesses in e2fsck caused by (usually
+maliciously) corrupted file systems.  (Addresses Debian Bugs: #871539,
+#871540)
+
+Optimize CPU usage in e2fsck for very large, very fragmented sparse
+files.
+
+Add an optional mode in e2fsck which trades off additional memory for
+CPU time when processing file systems that are heavily hard-linked.
+(This can be a very large amount of memory, so this feature is
+disabled for now.  How to automatically determine when it would be
+helpful to enable this optimization, and when it is _safe_ to enable
+this optimization is still a bit of a research problem.)
+
+The mke2fs program will automatically upsize the inode size to 256 if
+it is not explicitly specified on command-line and the default inode
+size is not large enough to support the project quota feature
+requested by the user.  If the inode size is explicitly specified to
+be 128 bytes, and the project quota is enabled mke2fs will fail since
+with an error explaining that project id's can't be supported when the
+inode size is < 256 bytes.
+
+The tune2fs program will not allow the project feature or project
+quotas to be enabled in the inode size is 128 bytes.
+
+The tune2fs program now prints a more understandable message explaining
+that the file system needs to be checked using e2fsck -f before
+running certain complex tune2fs operations.  (Addresses Debian Bug:
+#857336)
+
+If the proceed_delay option is enabled in /etc/e2fsck.conf, the message
+indicating that user can wait N seconds to proceed was ambiguous.
+That message has been made more clear.  (Addresses Debian Bug:
+#857336)
+
+Fix LFS bug which caused e2image to fail to create regular e2image
+files which are larger than 2 GiB on 32-bit platforms.  (Addresses
+Debian Bug: #855246)
+
+Fix FreeBSD portability problem caused by the fact that they no longer
+use block devices.  (Disks are character mode devices.)
+
+Update the Czech, French, Polish, Swedish, and Vietnamese translations.
+
+Fixed various Debian Packaging Issues.
+
+
+Programming notes
+-----------------
+
+Avoid changing the blkid cache when running tests.  (Normally the
+blkid cache is not writable by the user running tests, but...)
+
+The tar file generation process will now create reproducible
+artifacts.
+
+Removed legacy entries for ext4dev in the default mke2fs.conf file.
+
diff --git a/doc/RelNotes/v1.43.7.txt b/doc/RelNotes/v1.43.7.txt
new file mode 100644 (file)
index 0000000..55e434f
--- /dev/null
@@ -0,0 +1,29 @@
+E2fsprogs 1.43.7 (October 16, 2017)
+===================================
+
+Fix the error handling code in debugfs, fuse2fs and tune2fs so errors
+trying to replay the journal won't accidentally result in a seg fault
+if reopening the file system after the journal replay fails for some
+reason.
+
+Fix resize2fs to avoid it from either failing or corrupting the file
+system image in certain corner cases when doing an off-line resize.
+
+Fix many spelling mistakes in various man pages, code comments, and
+program messages.
+
+Fix e2fsck and debugfs so that maliciously corrupted file systems will
+not cause buffer overflows.  (Addresses Debian Bugs: #873757, #878104)
+
+Update German translation.  (Addresses Debian Bug: #833514)
+
+Fixed various Debian Packaging Issues.  (Addresses Debian Bugs:
+#873812, #873813, #876551)
+
+Programming notes
+-----------------
+
+Test descritions have been shorted to fit in 80 columns.
+
+Fix various tests to avoid leaving temp files in /tmp.
+
diff --git a/doc/RelNotes/v1.43.8.txt b/doc/RelNotes/v1.43.8.txt
new file mode 100644 (file)
index 0000000..cb26a16
--- /dev/null
@@ -0,0 +1,48 @@
+E2fsprogs 1.43.8 (January 1, 2018)
+==================================
+
+Fix a bug where updated bitmap checks might not be written to disk.
+(Addresses Debian Bug: #883869)
+
+Some newly added fields in the superblocks were not getting byte
+swapped (which were not noticed since big endian systems are amazingly
+unpopular).  Fix them and compile-time checks to avoid this class of
+bugs from happening in the future.  (Lustre Bug #9309)
+
+Fix a potential use after free bug in e2fsck when fixing a corrupted
+root node in directory hash tree.
+
+Fix a bug in e2fsck where a badly/maliciously corrupted superblock
+(which is not fixed due to the -n option, for example) can cause a
+floating point exception when printing the summary statistics.
+(Addresses Debian Bug: #879220)
+
+Fix debugfs's ncheck command so that it correctly prints the inode
+number when printing an error message.
+
+Fix a bug in e2freefrag where it could print an incorrect free blocks
+count on a file system with the 64-bit block number feature.
+
+Update the German, Serbian, Spanish, and Ukrainian translations.
+
+Fix a bug where resize2fs's free blocks sanity check could fail with a
+false positive and refuse to check a file system with the 64-bit block
+number feature.
+
+Fix and clarify various man pages and documentations.  Also fixed up
+some random usage texts that were incorrect.  (Addresses Debian Bugs:
+#880483)
+
+Fixed various Debian Packaging Issues.  (Addresses Debian Bugs: #880207,
+#881408, #881590, #881591)
+
+Programming notes
+-----------------
+
+Fix various compiler warnings.
+
+Clean up Makefile output.
+
+Fix compatibility problems with glibc 2.27 casued by a collision with
+copy_file_range().
+
diff --git a/doc/RelNotes/v1.43.9.txt b/doc/RelNotes/v1.43.9.txt
new file mode 100644 (file)
index 0000000..6dbe0db
--- /dev/null
@@ -0,0 +1,15 @@
+E2fsprogs 1.43.9 (February 8, 2018)
+===================================
+
+Remove the huge file flag from libe2p (and hence from chattr/lsattr),
+since it was never made visible by the kernel.  Remove the description
+of some compression related flags, and add a description of the
+encrypted file flag, and the project hierarchy flag.
+
+Remove a misplaced "MNP is unsupported" message from debugfs.
+
+Fix a build failure in lib/ext2fs/swapfs.c on big-endian systems.
+(Addresses Debian Bug #886119)
+
+Fix various Debian packaging issues.  (Addresses Debian Bug #269569).
+
diff --git a/doc/RelNotes/v1.44.0.txt b/doc/RelNotes/v1.44.0.txt
new file mode 100644 (file)
index 0000000..59cd802
--- /dev/null
@@ -0,0 +1,82 @@
+E2fsprogs 1.44.0 (March 7, 2018)
+================================
+
+Updates/Fixes since v1.43.9:
+
+UI and Features
+---------------
+
+E2fsprogs now supports the large_dir (INCOMPAT_LARGEDIR) feature.  This
+feature allows larger directories to be created, both with directory
+sizes over 2GB and and a maximum htree depth of 3 instead of the
+current limit of 2.  These features are needed in order to exceed
+the currently limit of approximately 10M entries in a single
+directory for 4KB blocksize (~100k for 1KB).
+
+E2fsprogs now supports the ea_inode (INCOMPAT_EA_INODE) feature, which
+stores large extended attributes in an external inode instead of a
+single data block.  This is backwards compatible with a Lustre file
+system feature, but it has been extended to support deduplicating
+extended attribute values which are used in multiple inodes.
+
+The metadata_csum feature (RO_COMPAT_METADATA_CSUM) is now enabled by
+default by mke2fs.
+
+The resize2fs program will no longer complain about resizing bigalloc
+file systems as being dangerous when doing an on-line resize (since this
+is purely a kernel feature).
+
+Debugfs's ls command will now print the high bits of the inode's mode
+bits.
+
+Fixes
+-----
+
+Fixed some potential buffer overrun bugs in the blkid library and in the
+fsck program.
+
+There were some corner cases which tune2fs wouldn't correctly handle
+when operating on a file system which was not cleanly mounted and thus
+required running the journal because it could be modified.  Tune2fs will
+now run the journal before trying to change the superblock, and if the
+file system needs to be checked after the journal has been replayed, it
+will require it before proceeding.  Also if the file system is busy (for
+example, because it is in use by Lustre), but is not present in the
+/proc/mounts or /etc/mtab, tune2fs will not try to replay the journal,
+since this could do real damage if it the file system is being actively
+modified by the kernel.
+
+The libss library (used by debugfs) now supports the version 7 of the
+libreadline shared library.
+
+The e2freefrag program will use the GETFSMAP ioctl if it is available
+and the file system is mounted, so that the free space statistics will
+be more accurate.
+
+The consistency checks for symlinks (especially for encrypted and inline
+data file sytems) in e2fsck are now much more careful/stringent.  Also
+fixed a bug where creating a symlink using ext2fs_symlink() which was
+exactly 60 bytes long when inline data was enabled would result in a
+missing system.data xattr.
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Mke2fs now uses io_channel_flush() instead of sync() for the sync_kludge
+feature.
+
+E2fsprogs now uses i_size as the primary way of determining whether a
+symlink is a fast symlink.
+
+Fix various compiler and UBSAN warnings.
+
+Long running test are now skipped with "make check" and only run when
+"make fullcheck".  The test runner will warn when potentially long
+running tests are being run via "make check".
+
+E2fsck is now much faster for bigalloc file systems when scanning
+extents for bigalloc file systems.  (Addresses Google Bug #36886699)
+
+Update Czech, Spanish, French, Malay, and Ukrainian translations.
+
diff --git a/doc/RelNotes/v1.44.1.txt b/doc/RelNotes/v1.44.1.txt
new file mode 100644 (file)
index 0000000..4503c92
--- /dev/null
@@ -0,0 +1,48 @@
+E2fsprogs 1.44.1 (March 24, 2018)
+================================
+
+Updates/Fixes since v1.44.0:
+
+Fixes
+-----
+
+E2fsprogs 1.44.0 introduced a regression introduced which caused e2fsck
+to fail to support HTree directories on big-endian systems.  Fix how we
+read block numbers for internal htree nodes.
+
+Removed a potential memory leak from fsck.
+
+E2image now correctly creates e2image files for bigalloc file systems.
+
+Dumpe2fs and debugfs now correctly support e2image files for file
+systems that have the meta_bg option enabled.
+
+E2fsck and debugfs now correctly handle delete inodes (including
+processing the orphaned inode list in the case of e2fsck) for bigalloc
+file systems.  (Addresses Google Bug: #73795618)
+
+Portability fixes for GNU Hurd.  (Addresses Debian Bug: #893590)
+
+Portability fixes for building in some cross-build environments.
+
+Portability fixes for MacOS 10.6.8.
+
+Add clarifications to chattr's man page.  (Addresses Debian Bug:
+#890390)
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Debugfs now reads allocation bitmaps much more efficiently when opening
+a file system.
+
+Update Swedish translation file.
+
+Add Vcs-* fields to debian packaging.  (Addresses Debian Bug: #887512)
+
+Fix some test failures on GNU Hurd caused by a different default block
+size.
+
+Add new regression tests.
+
diff --git a/doc/RelNotes/v1.44.2.txt b/doc/RelNotes/v1.44.2.txt
new file mode 100644 (file)
index 0000000..7b5c774
--- /dev/null
@@ -0,0 +1,53 @@
+E2fsprogs 1.44.2 (May 14, 2018)
+===============================
+
+Updates/Fixes since v1.44.1:
+
+Fixes
+-----
+
+E2fsck now prints a warning message if broken_system_clock is set in
+e2fsck.conf and this causes the check interval to be ignored so it is
+clear to the user.
+
+Fix e2image handling of e2i files on big endian systems
+
+Add sanity checks for inodes containing xattr values to prevent
+maliciously crafted file systems from causing crashes caused by infinite
+recursion from causing e2fsck and debugfs to crash.
+
+Fix e2fsck so that quota usage is adjusted when clearing orphaned
+inodes.
+
+Fix filefrag so that unknown flags returned by FIEMAP won't cause a
+buffer overrun.
+
+Fix mke2fs to print a more useful/correct error message if
+ext2fs_close_free() at the end of the file system creation process.
+
+Improve chattr's man page.
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Demote e2fsprogs in debian packaging from Essential: yes to
+XB-Important: yes (Addresses Debian Bug #474540)
+
+Fix intl/Makefile so it uses @AR@ instead of a hard-coded 'ar' (which
+matters when cross compiling).
+
+Update Polish translation file.
+
+Fix the address of the FSF in various GPL/LGPL copyright licenses.
+
+Clean up the i_bitmaps test so it doesn't leave temporary files behind.
+
+Remove use of /dev/stdin in the regression tests since not all systems
+have /dev/stdin.
+
+Fix the f_bigalloc_badinode and f_bigalloc_orphan_list regression tests
+so they uses mke2fs and ebugfs from the build tree.  They may not exist
+in the users PATH, and if they not or if they are extremely
+old/obsolete, those tests would fail.
+
diff --git a/doc/RelNotes/v1.44.3.txt b/doc/RelNotes/v1.44.3.txt
new file mode 100644 (file)
index 0000000..e68032c
--- /dev/null
@@ -0,0 +1,106 @@
+E2fsprogs 1.44.3 (July 10, 2018)
+================================
+
+Updates/Fixes since v1.44.2:
+
+UI and Features
+---------------
+
+The debugfs inode_dump command can now print a hex dump of the i_block
+array and the extra space in the inode, as a convenience to someone
+investigating a corrupted inode.
+
+The debugfs block_dump and inode_dump command can now print low-level
+dump of extended attribute data structures in the block or inode.
+
+The dumpe2fs command can now print out information in the Multi-Mount
+Protection (MMP) block.  This is also available as e2mmpstatus command
+for compatibility with the Lustre utilities.
+
+The debugfs command can now operate on some file systems with
+corrupted superblocks so they can be fixed.  This includes file
+systems with a corrupted inodes count field and file systems where not
+all of the allocation bitmaps have valid locations or are not
+readable.
+
+
+Fixes
+-----
+
+The inode's project ID is now properly byte-swapped on big-endian
+systems.
+
+E2fsprogs now ignores s_desc_size for file systems that do not have
+the 64-bit feature set.  This makes it more consistent with the
+kernel, so it can now operate on file systems that the kernel is
+willing to mount.  
+
+E2fsck now considers device inodes with the extents flag as corrupt
+and offer to clear them.
+
+E2fsck more properly handles cases where s_inodes_count is corrupted.
+
+E2fsck no longer spews large number of errors when the superblock
+badly corrupted (restoring its behavior pre-1.43).
+
+E2fsck will now offer to set the dir_nlink feature if it is not set
+and file system requires the dir_nlink feature because there are too
+many subdirectories in a directory.
+
+E2fsck will no longer loop infinitely due to a maliciously crafted
+file system which has a fully uninitialized inode table in the first
+block group.
+
+E2fsck will no longer hang if the last block in the file system is a
+fixed-metadata block.  (Very rare, but could happen.)
+
+E2fsck no longer allows initialized blocks to exist past i_size.  This
+is something the Linux implementation of ext4 has never done (and should
+never do).
+
+While replaying the journal in e2fsck, certain errors would previously
+cause e2fsck to print a non-sensical error message (e.g., "Unknown code
+____ 251 while recovering journal").  This has been fixed.
+
+In cases where more than 75% of the block group will be used for group
+descriptor table, mke2fs would previously create an invalid file
+system with both the meta_bg and resize_inode features enabled.  It
+will now disable the resize_inode feature.
+
+The mke2fs program now properly creates a file system which is exactly
+1 << 32 blocks.  Previously the s_inodes_count field would overflow,
+and the file system would be created with a minimal number of inodes.
+
+Recent kernels will report errors on a file or block device which
+occurred before the file or block device was opened via fsync() or
+close().  This will cause e2fsck to incorrectly report a failure.  Work
+around this by calling fsync() immediately after the file or block
+device is opened in the unix_io layer, and throwing away the error.
+
+Filefrag will no longer ignore errors returned by fsync.
+
+Debugfs will no longer print spurious checksum errors when failing to
+open a file system for unrelated reasons.
+
+Updated/fixed various man pages.  (Addresses Launchpad Bug: #1743553)
+
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Synchronized changes from Android's AOSP e2fsprogs tree.
+
+Debugfs's mknod command now works correctly on some 32-bit systems where
+previously it had a portability problem caused by some object files
+being compiled with LFS, and some without.  This fixes some regression
+test failures on 32-bit MIPS (for example).
+
+Various clean ups, portability, and performance improvements to
+e2fsprogs's regression test framework.
+
+Fixed Coverity, sparse, gcc -Wall, and clang warnings/nits.
+
+Update Czech, Dutch, Spanish, French, Polish, Swedish, Ukrainian, and
+Vietnamese translations.
+
diff --git a/doc/RelNotes/v1.44.4.txt b/doc/RelNotes/v1.44.4.txt
new file mode 100644 (file)
index 0000000..db130c6
--- /dev/null
@@ -0,0 +1,60 @@
+E2fsprogs 1.44.4 (August 18, 2018)
+==================================
+
+Updates/Fixes since v1.44.3:
+
+UI and Features
+---------------
+
+Add basic support for the ext4 verity feature (aka fsverity).  It is a
+read-only compatibility feature which uses Merkle trees to add
+functionality much like dm-verity on a per-file basis.  For this release
+we simply allow e2fsck to accept file systems with the verity feature
+enable (no special handling is needed) and mke2fs to create file systems
+with the verity feature.
+
+
+Fixes
+-----
+
+E2fsck will now properly repair a file system that has both the
+resize_inode and meta_bg features enabled simultaneously (which is never
+supposed to happen, but it could happen in versions of mke2fs before
+1.44.3 when it was given parameters where more than 75% of the block
+group was used for group descriptor tables).
+
+Avoid a floating point exception crash when libblkid tries probing a
+maliciously corrupted HFS+ superblock.
+
+Debugfs's ncheck command now properly will handle inodes that have
+multiple hard links.
+
+On platforms that don't supply strdup, the replacement function for
+strdup() had a bug which would cause it to crash if it was used.
+(Fortunately this only happens if the [scratch_files] feature in e2fsck
+is used.)
+
+Fixed support for devices which have non-512 byte block sizes on Apple
+Darwin.
+
+E2fsprogs 1.44.3 would fail to compile on very old versions of gcc.
+This is now fixed.
+
+Update and clarify man pages.  (Addresses Debian Bug: #757831)
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Synchronized changes from Android's AOSP e2fsprogs tree.
+
+Instead of building the subset e2fsprogs-libs tar file, add a new
+configure option, --enable-subset.  This along with other changes (such
+as dropping obsolete files that aren't shipped as part of
+e2fsprogs-X.YY.tar.gz) allows us to be able to build the tarball using
+the "git archive" command.
+
+Fixed various debian packaging issues (Addresses Debian Bug: #905195)
+
+Update Danish, Spanish, and Swedish translations.
+
diff --git a/doc/RelNotes/v1.44.5.txt b/doc/RelNotes/v1.44.5.txt
new file mode 100644 (file)
index 0000000..0cda992
--- /dev/null
@@ -0,0 +1,77 @@
+E2fsprogs 1.44.5 (December 15, 2018)
+====================================
+
+Updates/Fixes since v1.44.4:
+
+UI and Features
+---------------
+
+When e2fsck notices it could optimize an extent tree, it will now ask
+"Optimize?" instead of "Fix?", which was confusing some users since it
+implied that something was broken.
+
+
+Fixes
+-----
+
+Use 64-bit counters to track the number of files that are defragmented
+using in e4defrag, to avoid overflows when more than 2**32 files are
+defragmented.  (Addresses Debian Bug: #888899)
+
+Correctly translate Posix ACL's.  This was a regression introduced in
+v1.44.   (Addresses Launchpad Bug: #1807288)
+
+Use the online free block counts so e2freefrag's percentages are
+correct.
+
+Fix a false warning that tune2fs will take long time to change a UUID if
+the metadata_csum feature is not enabled.
+
+E2fsck will only offer to set the inline_data feature flag when the
+inline flag is set on the inode, *and* the system.data xattr is present.
+
+E4defrag will handle the case where it is running as root and it can't
+find the file system to open more gracefully.  (Addresses Debian Bug:
+#907634)
+
+Fix a bug where resize2fs was failing to update the extent tree
+checksums in an corner case.  (Addresses Launchpad Bug: #1798562)
+
+Fix fuse2fs's command line parsing when options are specified after the
+target device/image.
+
+Fix a bug which could cause e2fsprogs tools to segfault on a corrupted
+file system where the journal's s_nr_users is impossibly large.
+
+E2image now includes the mmp block (if needed) when creating a
+metadata-only image.
+
+Fix various Verity handling bugs which made it completely unusable in
+e2fsprogs 1.44.4.
+
+Fix a bug in tune2fs where it would dereference of freed memory after
+replaying the journal.
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Synchronized changes from Android's AOSP e2fsprogs tree.
+
+Fix groff formatting nits in various man pages.  (Addresses Debian Bug:
+#916188)
+
+Fixed various debian packaging issues (Addresses Debian Bug: #915942)
+
+Adjusted the copyright license for lib/blkid/version.c to be LGPL (and
+consistent with the rest of files in that directory).
+
+Fix various clang warnings.
+
+Fix "make install" when configure was run with --enable-subset.
+
+Make sure the regression tests clean up their tmpfile if the test script
+exits.
+
+Fix build failures on non-glibc systems.
+
diff --git a/doc/RelNotes/v1.44.6.txt b/doc/RelNotes/v1.44.6.txt
new file mode 100644 (file)
index 0000000..6c9e08f
--- /dev/null
@@ -0,0 +1,48 @@
+E2fsprogs 1.44.6 (March 5, 2019)
+================================
+
+Updates/Fixes since v1.44.5:
+
+Fixes
+-----
+
+If files are created while e4defrag is running, it's quite possible for
+succeed_cnt to be larger than total_count, in which case the number of
+failures (calculated via total_count - succeed_cnt) will overflow and
+become a very large unsigned number.  (Addresses Debian Bug: #888899)
+
+Fix e2fsck so it can correctly handle directories > 2 GiB when the
+largedir feature is enabled.
+
+Fix mke2fs's hugefile creation so that we correctly reserve enough
+metadata blocks for a given file system size.  Otherwise for certain
+unfortunately sized disks/partitions, the hugefile creation would fail.
+(Addresses Google Bug: 123239032)
+
+Fix the libext2fs library to be more robust against invalid block group
+descriptors to prevent e2fsprogs from crashing (or possibly being
+p0wned) by maliciously modified file systems.  (Addresses Google Bugs:
+119171089, 119929050)
+
+Fix mke2fs and debugfs so they can correctly copy in files > 2 GiB.
+
+Fix debugfs so its stat command can correct supportly display directory
+sizes > 2 GiB.
+
+Fix memory leaks in debugfs, mke2fs, and e2freefrag.
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Synchronized changes from Android's AOSP e2fsprogs tree.
+
+Avoid unnecessarily linking badblocks with the libblkid shared library.
+(Addresses Debian Bug: #919958)
+
+Stop depending on the debugfs binary for test data, since depending on
+the compiler, there might be sufficient aligned zero bytes that the
+resulting file(s) created by test cases could have unexpected sparse
+blocks, leading to test failures.   (Addresses Google Bug: #122085761)
+
+Fixed various debian packaging issues.
diff --git a/doc/RelNotes/v1.45.0.txt b/doc/RelNotes/v1.45.0.txt
new file mode 100644 (file)
index 0000000..d92c11b
--- /dev/null
@@ -0,0 +1,40 @@
+E2fsprogs 1.45.0 (March 6, 2019)
+================================
+
+Updates/Fixes since v1.44.6:
+
+UI and Features
+---------------
+
+Tune2fs can now set the file system error bit to force a check at the
+next fsck by using the extended option "force_fsck".
+
+E2fsprogs now has an e2scrub script which will allow e2fsck to be run on
+volumes that are mounted on an LVM device.  The e2scrub_all will find
+all ext* file systems and run them using e2scrub (if possible).
+
+Mke2fs will attempt to use ZERO_RANGE before PUNCH_HOLE so that we don't
+lose allocated blocks in preallocated files.
+
+The fuse2fs command now supports a "fakeroot" option to allow an
+unprivileged user to fuse2fs to modify rootfs images.
+
+Add initial support for setting the character set encoding and case
+folding file system feature.  We don't have support to validate file
+names as being valid for a given character set encoding yet, but this
+will allow compatibility for this feature when the kernel support
+lands.  This includes support in lsattr and chattr to understanding the
+casefold attribute flag.
+
+Debugfs can now set the inode's checksum field to test support for
+inodes with bad inode checksums.
+
+E2image now accepts the -b and -B options to allow the user to specify
+the superblock location when creating a raw or qcow2 image.
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Add support for building e2fsprogs using Link Time Optimization (LTO),
+UBSAN, Address Sanitizer, or Thread Sanitizer.
diff --git a/doc/RelNotes/v1.45.1.txt b/doc/RelNotes/v1.45.1.txt
new file mode 100644 (file)
index 0000000..d8ae0bc
--- /dev/null
@@ -0,0 +1,81 @@
+E2fsprogs 1.45.1 (May 12, 2019)
+===============================
+
+Updates/Fixes since v1.45.0:
+
+UI and Features
+---------------
+
+Teach the e2scrub and e2scub_all commands the -n option, which prints
+what these commands would do.
+
+Finalize the casefold support so it is synchronized with what we
+actually shipped in the kernel.  This includes updating to Unicode 12.1,
+dropping ASCII casefolding support, and switching from NFKD to NFD.  The
+the ext4 feature name also changed from fname_encoding to casefold.
+Add support for casefold to dumpe2fs and debugfs.
+
+Debugfs now prints non-printable characters using C-style hex escape
+sequences (e.g., "\xc1" instead of M-A).  The old scheme printed
+filenames in an ambiguous way, which complicated using debugfs for ext4
+encryption regression tests.
+
+E2fsck now checks to make sure that all unused bits in the block
+allocation bitmaps are set; if there are some unset bits in the block
+bitmaps for file systems where the blocks_per_group is less than
+8*blocksize (not the default), this can confuse the kernel's multi-block
+allocator and return a bogus free extent.  E2fsprogs guarantees this
+when it writes out the bitmap blocks, but it's possible that file system
+blocks could have gotten corrupted since the last time e2fsprogs wrote
+out the bitmap blocks.
+
+E2fsck now has support write out a problem code log which can provide
+more debugging and monitoring information.  This can be configured using
+/etc/e2fsck.conf.
+
+
+Fixes
+-----
+
+Teach e2scrub and e2scrub to give more intelligible error messages when
+the lvm2 and util-linux packages are not installed, or if the commands
+are not run as root.
+
+Teach e2scrub_all to skip trying to run e2scrub on a logical volume if
+its volume group did not have enough space to create a snapshot.
+(Addresses Debian Bug: #924301)
+
+E2scrub will tag its snapshots with UDISK_IGNORE so they do not show up
+in GUI's.   (Addresses Debian Bug: #926112)
+
+Mark the e2scrub service files to indicate that CAP_SYS_ADMIN and
+CAP_SYS_RAWIO are required.  This avoids errors when e2scrub is run an
+container where root does not have these capabilities.  (Addresses
+Debian Bug: #926138)
+
+Fix mke2fs's check for absurdly large disks.  Previously check was 2^10
+too small, so mke2fs would fail when trying to format a 900TB file
+system.
+
+Fixed debugfs so it correctly prints ea_in_inode xattr values.
+
+Fixed various casefold bugs.
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Synchronized changes from Android's AOSP e2fsprogs tree.
+
+Fix autoheader warnings caused by a missing template in AC_CHECK_LIB.
+
+Fix the the "make install-strip" command.
+
+Dropped utf8_* and nls_* symbols from the libext2fs shared library, to
+avoid namespace contamination.
+
+Fix the f_valid_ea_in_inode test so actually tests the ea_in_inode
+feature.
+
+Fixed various debian packaging issues.  (Addresses Debian Bug: #924275)
+
diff --git a/doc/RelNotes/v1.45.2.txt b/doc/RelNotes/v1.45.2.txt
new file mode 100644 (file)
index 0000000..43126de
--- /dev/null
@@ -0,0 +1,30 @@
+E2fsprogs 1.45.2 (May 27, 2019)
+===============================
+
+Updates/Fixes since v1.45.1:
+
+Fixes
+-----
+
+Fixed various problems with how e2scrub_all is run from cron, when not
+all of the required packages are installed, or there are no LVM devices
+on the system.  (Addresses Debian Bug: #929186, #929287, #928977)
+
+When mke2fs asks the user if she should proceed, fall back to the
+English 'y' or 'Y' characters since there could be a missing translation
+prompting the use of the English 'y' character.  (Addresses Debian Bug:
+#907034)
+
+Fix spurious complaint of blocks beyond i_size for verity files.
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Fixed various debian packaging issues.
+
+Fixed "make install" failure when the cron.d directory does not exist.
+
+Update the Czech, Malay, Polish, Spanish, Swedish, and Ukarainian
+translations.  Add the new Portuguese translation.
+
diff --git a/doc/RelNotes/v1.45.3.txt b/doc/RelNotes/v1.45.3.txt
new file mode 100644 (file)
index 0000000..8d34aad
--- /dev/null
@@ -0,0 +1,65 @@
+E2fsprogs 1.45.3 (July 14, 2019)
+================================
+
+Updates/Fixes since v1.45.2:
+
+UI and Features
+---------------
+
+Whether or not automatic online scrubs will be run is now controlled by
+a setting in /etc/e2scrub.conf.  To enable automatic online scrubs,
+uncomment out the line containing "periodic_e2scrub=1".
+
+The fuse2fs program is now installed in /usr/bin instead of /usr/sbin,
+since it does not require root privileges.
+
+Fuse2fs now works with if fusermount from FUSE V3 is installed.
+However, in order to provide this compatibility, if you are using a
+fusermount from FUSE v2, and you want to mount on top of a non-empty
+directory, you will need to specify -o nonempty explicitly.  FUSE V3
+always allows mounting on top of non-empty directories, and will fail if
+the user or fuse2fs passes the nonempty option.
+
+
+Fixes
+-----
+
+Fixed a bug which caused e2fsck to improperly handle file systems that
+enabled both the large_dir and inline directories at the same time.
+
+E2scrub_all now correctly handles an encrypted (LUKS) ext[234] file
+system stacked on top of an LVM volume.  (Addresses Debian Bug: #931387)
+
+Fixed a bug in "E2scrub_all -r" where it was incorrectly specifying
+which volume needed to have its e2scrub snapshot cleaned up.  (Addresses
+Debian Bug: #931679)
+
+Fixed the Czech, Dutch, German, and Vietnamese translations which
+improperly used positional markers which broke a few translated e2fsck
+problem descriptions.  (Addresses Debian Bug: #892173)
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Fixed various debian packaging issues.  (Addresses Debian Bug: #931266,
+#923372)
+
+Fixed error checking for calls to posix_{memalign,fadvise}.
+
+Add regression test for checking a file system using fs-verity.
+
+Various regression test cleanups.
+
+Fixed various compiler warnings.
+
+Added xgettext markers to fix incorrectly marked strings in the
+e2fsprogs translations template file as being c-style printf strings
+when in fact they aren't.
+
+Added utility script which generates the release tarfile using git
+archive.
+
+Update the Czech, Dutch, and Portuguese translations from the
+Translation Project.
+
diff --git a/doc/RelNotes/v1.45.4.txt b/doc/RelNotes/v1.45.4.txt
new file mode 100644 (file)
index 0000000..acdd361
--- /dev/null
@@ -0,0 +1,50 @@
+E2fsprogs 1.45.4 (September 23, 2019)
+=====================================
+
+Updates/Fixes since v1.45.3:
+
+Fixes
+-----
+
+A maliciously corrupted file systems can trigger buffer overruns in the
+quota code used by e2fsck.  (Addresses CVE-2019-5094)
+
+E2fsck now checks to make sure the casefold flag is only set on
+directories, and only when the casefold feature is enabled.
+
+E2fsck will not disable the low dtime checks when using a backup
+superblock where the last mount time is zero.  This fixes a failure in
+xfstests ext4/007.
+
+Fix e2fsck so that when it needs to recreate the root directory, the
+quota counts are correctly updated.
+
+Fix e2scrub_all cron script so it checks to make sure e2scrub_all
+exists, since the crontab and cron script might stick around after the
+e2fsprogs package is removed.  (Addresses Debian Bug: #932622)
+
+Fix e2scrub_all so that it works when the free space is exactly the
+snapshot size.  (Addresses Debian Bug: #935009)
+
+Avoid spurious lvm warnings when e2scrub_all is run out of cron on
+non-systemd systems (Addresses Debian Bug: #940240)
+
+Update the man pages to document the new fsverity feature, and improve
+the documentation for the casefold and encrypt features.
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Fixed various debian packaging issues.  (Addresses Debian Bug: #933247,
+#932874, #932876, #932855, #932859, #932861, #932881, #932888)
+
+Fix false positive test failure in f_pre_1970_date_encoding on 32-bit
+systems with a 64-bit time_t.  (Addresses Debian Bug: #932906)
+
+Fixed various compiler warnings.  (Addresses Google Bug #118836063)
+
+Update the Czech, Dutch, French, German, Malay, Polish, Portuguese,
+Spanish, Swedish, Ukrainian, and Vietnamese translations from the
+Translation Project.
+
diff --git a/doc/RelNotes/v1.45.5.txt b/doc/RelNotes/v1.45.5.txt
new file mode 100644 (file)
index 0000000..70cef96
--- /dev/null
@@ -0,0 +1,88 @@
+E2fsprogs 1.45.5 (January 7, 2020)
+==================================
+
+Updates/Fixes since v1.45.4:
+
+Fixes
+-----
+
+E2fsck will no longer force a full file system check if time-based
+forced checks are disabled and the last mount time or last write time in
+the superblock are in the future.
+
+Fix a potential out of bounds write when checking a maliciously
+corrupted file system.  This is probably not exploitable on 64-bit
+platforms, but may be exploitable on 32-bit binaries depending on how
+the compiler lays out the stack variables.  (Addresses CVE-2019-5188)
+
+Fixed spurious weekly e-mails when e2scrub_all is run via a cron job
+on non-systemd systems.  (Addresses Debian Bug: #944033)
+
+Remove an unnecessary sleep in e2scrub which could add up to an
+additional two second delay during the boot up.  Also, avoid trying
+to reap aborted snapshots if it has been disabled via e2scrub.conf.
+(Addresses Debian Bug: #948193)
+
+If a mischievous system administrator mounts a pseudo-file system such
+as tmpfs with a device name that duplicates another mounted file system,
+this could potentially confuse resize2fs when it needs to find the mount
+point of a mounted file system.  (Who would have guessed?)  Add some
+sanity checking so that we can make libext2fs more robust against such
+insanity, at least on Linux.  (GNU HURD doesn't support st_rdev.)
+
+Tune2fs now prohibits enabling or disabling uninit_bg if the file system
+is mounted, since this could result in the file system getting
+corrupted, and there is an unfortunate AskUbuntu article suggesting this
+as a way to modify a file system's UUID on a live file system.  (Ext4
+now has a way to do this safely, using the metadata_csum_seed feature,
+which was added in the 4.4 Linux kernel.)
+
+Fix potential crash in e2fsck when rebuilding very large directories on
+file systems which have the new large_dir feature enable.
+
+Fix support of 32-bit uid's and gid's in fuse2fs and in mke2fs -d.
+
+Fix mke2fs's setting bad blocks to bigalloc file systems.
+
+Fix a bug where fuse2fs would incorrectly report the i_blocks fields for
+bigalloc file systems.
+
+Resize2fs's minimum size estimates (via resize2fs -M) estimates are now
+more accurate when run on mounted file systems.
+
+Fixed potential memory leak in read_bitmap() in libext2fs.
+
+Fixed various UBsan failures found when fuzzing file system images.
+(Addresses Google Bug: #128130353)
+
+Updated and clarified various man pages.
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Speed up e2fsck on file systems with a very large number of inodes
+caused by repeated calls to gettext().
+
+The inode_io io_manager can now support files which are greater than
+2GB.
+
+The ext2_off_t and ext2_off64_t are now signed types so that
+ext2fs_file_lseek() and ext2fs_file_llseek() can work correctly.
+
+Reserve codepoint for the fast_commit feature.
+
+Fixed various Debian packaging issues.
+
+Fix portability problems for Illumous and on hurd/i386 (Addresses Debian
+Bug: #944649)
+
+Always compile the ext2fs_swap_* functions even on little-endian
+architectures, so that debian/libext2fs.symbols can be consistent across
+architectures.
+
+Synchronized changes from Android's AOSP e2fsprogs tree.
+
+Updated config.guess and config.sub with newer versions from the FSF.
+
+Update the Chinese and Malay translations from the translation project.
diff --git a/doc/RelNotes/v1.45.6.txt b/doc/RelNotes/v1.45.6.txt
new file mode 100644 (file)
index 0000000..ac822bf
--- /dev/null
@@ -0,0 +1,62 @@
+E2fsprogs 1.45.6 (March 20, 2020)
+==================================
+
+Updates/Fixes since v1.45.5:
+
+UI and Features
+---------------
+
+Debugfs will ignore lines in its command files which start with a
+comment character ("#").
+
+
+Fixes
+-----
+
+Fixed a number of potential out of bounds memory accesses caused by
+fuzzed / malicious file systems.  (Addresses Google Bug: #147849134)
+
+Fix a spurious complaint from e2fsck when a directory which previously
+had more than 32000 subdirectories has the number of subdirectories
+drops below 32000.
+
+Fix an ismounted check when an LVM device is renamed while the device is
+mounted.
+
+Mke2fs -d now correctly sets permission with files where the owner
+permissions are not rwx.
+
+Improve e2fsck's ability to deal with file systems with very large
+number of directories, such that various data structures take more than
+2GiB of memory.  Use better structure packing to improve the memory
+efficiency of these data structures.
+
+Fix debugfs so it correctly prints inode numbers > 2**31.
+
+Filefrag now supports very large files (with > 4 billion blocks), as
+well as block sizes up to 1 GiB.
+
+Updated and clarified various man pages.  (Addresses Debian Bugs:
+#953493, #953494, #951808)
+
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Reserved the error code EXT2_ET_NO_GDESC (which will be used in
+e2fsprogs v1.46+)
+
+Added a thread-safe variant of e2p_feature2string(),
+e2p_feature_to_string() to the libe2p library.
+
+Fixed portability problems caused by gcc 10.
+
+Fixed portability problem in libcom_err with GNU Hurd.
+
+Fixed various Debian packaging issues.  (Addresses-Debian-Bug: #953926)
+
+Synchronized changes from Android's AOSP e2fsprogs tree.
+
+Update the Malay translation from the translation project.
+
diff --git a/doc/RelNotes/v1.45.7.txt b/doc/RelNotes/v1.45.7.txt
new file mode 100644 (file)
index 0000000..2a16776
--- /dev/null
@@ -0,0 +1,96 @@
+E2fsprogs 1.45.7 (January 28, 2021)
+==================================
+
+Updates/Fixes since v1.45.6:
+
+UI and Features
+---------------
+
+Mke2fs will now warn when creating a file system on a DAX-capable device
+and the block size is incompatible with DAX.
+
+The chattr and lsattr programs now support using the 'x' attribute to
+set/get dax support on a particular file.
+
+E2fsprogs now supports the gnu.* extended attribute namespace, which
+allows mke2fs -d to import the gnu.translator extended attributes.
+
+Add support for the simultaneous enablement of the casefold and
+encryption features, which ext4 supports starting with the v5.5 Linux
+kernel.
+
+
+Fixes
+-----
+
+When trying to run debugfs on a mounted file system, it's possible for
+the superblock to be read in an inconsistent state; debugfs will now
+retry the open in the hopes that it will succeed.
+
+Fix an off-by-one error when validating the depth of an htree which
+caused e2fsck to potentially fail to notice an invalid htree.
+
+Fix potential buffer overrun in e2fsck when scanning directory blocks in
+pass 2. (Addresses Google Bug: #158564737)
+
+Fix tune2fs so that it unlocks the MMP block if it can't perform the
+requested operation.
+
+Fix mke2fs so it can import the contents of a directory using the -d
+option when it has inode numbers that are greater than 2**32.   Also fix
+an ommission were the extended attributes on the top-level directory was
+not getting copied to the root directory.
+
+Fix e4crypt so that the add_key operation uses the explicitly provided
+salt if it is provided.
+
+Fix resize2fs to prevent it from overflowing the block group descriptors
+from overflowing the first block group.  (This can only happen when the
+block size is 1k and the file system is very large.)
+
+Fix debugfs's set_super_value command so it can set 64-bit integer
+fields, such as s_kbytes_written.
+
+Fix filefrag so that it won't crash if the kernel returns zero for
+statfs(2)'s device id or if it returns a blocksize of zero the device's
+blocksize.  This only happens with kernel bugs, but filefrag shouldn't
+crash when the kernel returns an unexpected value.
+
+Fix a few bad error code returns in the unix and sparse I/O managers.
+(These errors rarely happen in real life; these were find thanks to a
+static code checker.)
+
+E2fsck will no longer try to fix duplicate file names in an encrypted
+directory by mutating the file name since that will cause the decrypted
+file name to be gibberish, or to contain invalid characters.
+
+Updated and clarified various man pages.
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+The misc/mke2fs.conf.in script now properly escaping of double quotes
+when incorporating the mke2fs.conf into the default_profile.c file.  The
+upstream version of the mke2fs.conf.in file doesn't have any double
+quotes, but this allows a customized distribution of e2fsprogs to have
+double quotes in its default mke2fs profile.
+
+Speeded up mkfs.ext3 by batching calls to ext2fs_zero_blocks when
+zeroing the blocks for an indirect-block mapped journal inode.
+
+Fixed portability problem for implementations of grep which don't
+support extended regexp's without the -E option.
+
+Fix various compiler and Coverity warnings.
+
+Fixed portability issue which caused a build failure when mkdir -p is
+not thread safe; in that case, the Makefiles would not find the
+install_sh replacement script.
+
+Fixed various Debian packaging issues.
+
+Synchronized changes from Android's AOSP e2fsprogs tree.
+
+Update the Dutch, Malay, and Serbian translations from the translation
+project.
diff --git a/doc/RelNotes/v1.46.0.txt b/doc/RelNotes/v1.46.0.txt
new file mode 100644 (file)
index 0000000..ded84e2
--- /dev/null
@@ -0,0 +1,108 @@
+E2fsprogs 1.46.0 (January 29, 2021)
+===================================
+
+Updates/Fixes since v1.45.7:
+
+UI and Features
+---------------
+
+E2fsprogs now supports the fast_commit (COMPAT_FAST_COMMIT) feature.
+This feature, first available in Linux version 5.10, adds a fine-grained
+journalling which improves the latency of the fsync(2) system call.  It
+should also improve the performance of ext4 file systems exported via
+NFS.
+
+E2fsprogs now supports the stable_inodes (COMPAT_STABLE_INODES) feature.
+This needed to support the siphash file system encryption algorithm,
+which calculates the initial vector (IV) for encryption based on the
+UUID and the inode number.  This means that we can't renumber inodes
+(for example, when shrinking a file system) and the UUID can't be
+changed without breaking the ability to decrypt the encryption.
+
+E2fsprogs now supports file systems which have both file system
+encryption and the casefold feature enabled.  This requires Linux
+version 5.10.
+
+E2fsck now will check file names on file systems with case folding
+enabled to make sure the characters are valid UTF-8 characters.  This is
+done for file systems which enforce strict encodings, and optionally if
+the extended "check_encoding" option is requested.
+
+The fuse2fs program now supports the "-o norecovery" option, which will
+suppress any journal replay that might be necessary, and mounts the file
+system read-only.
+
+E2fsck will now find and fix file system corruptions when the encrypted
+files have a different policy from their containing directory.
+
+The "htree" command in debugfs now displays the metadata checksums for
+hash tree index blocks.
+
+Dumpe2fs will print the error code that Linux kernels newer than v5.6
+will save to indicate the class of error which triggered the ext4_error
+event.
+
+E2fsprogs programs (in particular, fuse2fs) can now update htree
+directories without clearing the htree index.
+
+Mke2fs now sets the s_overhead_cluster field, so that the kernel doesn't
+need to calculate it at mount time.  This speeds up mounting very large
+file systems.
+
+
+Fixes
+-----
+
+E2fsck will properly handle checking for duplicated file names when case
+folding is enabled.
+
+Fix various bugs where a maliciously corrupted file systems could case
+e2fsck and other e2fsprogs programs to crash.
+
+Tune2fs will properly recalculate directory block checksums when
+clearing the dir_index feature.
+
+Fix a bug in e2fsck directory rehashing which could fail with ENOSPC
+because it doesn't take into account the space needed for the metadata
+checksum, and doesn't create a sufficiently deep index tree.
+
+Clarify the e2fsck messages when it resets the directory link count when
+it is set to the overflow value but it is no longer needed.
+
+The filefrag program can now request the kernel to display the extent
+status cache by using "filefrag -E".  (This requires Linux version 5.4
+or newer.)
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+Speed up mke2fs when creating large bigalloc file systems by optimizing
+ext2fs_convert_subcluster_bitmap().
+
+Bitmap blocks are now read using multiple threads (for systems with
+pthread support).  This speeds up dumpe2fs, e2fsck, and debugfs for very
+large file systems.
+
+The dumpe2fs and tune2fs will now avoiding to read the block group
+descriptors when they are not needed, which speeds up these program when
+operating on very large file systems.
+
+Drop use of the sysctl(2) system call, which is deprecated in Linux.
+
+Add support for "configure --enable-developer-features" which enables
+features only meant for developer.  The first such feature is "e2fsck -E
+clear_all_uninit_bits", which clears the uninitialized bit on all
+extents for all inodes.  Note that this can end up exposing uninitialized
+data to userspace, and should only used in very specialized situations.
+
+The e2fsck/revoke.c and e2fsck/recovery.c files are now kept idential
+with the fs/jbd2 versions of these files in the kernel.
+
+Fix various compiler and Coverity warnings.
+
+Update to use gettext 0.19.8.  This also removes the built-in "intl"
+directory as this is now considered deprecated by gettext.  This means
+that if the system doesn't have gettext installed on the build system,
+we will simply disable NLS support.
+
index 9a66f48..86a6800 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo    @c -*-texinfo-*-
 @c %**start of header
 @setfilename libext2fs.info
-@settitle The EXT2FS Library (version 1.43.4)
+@settitle The EXT2FS Library (version 1.46.0)
 @synindex tp fn
 @comment %**end of header
 
@@ -60,8 +60,8 @@ by the author.
 
 @title The EXT2FS Library
 @subtitle The EXT2FS Library
-@subtitle Version 1.43.4
-@subtitle January 2017
+@subtitle Version 1.46.0
+@subtitle January 2021
 
 @author by Theodore Ts'o
 
@@ -101,7 +101,7 @@ by the Foundation.
 
 @top The EXT2FS Library
 
-This manual documents the EXT2FS Library, version 1.43.4.
+This manual documents the EXT2FS Library, version 1.46.0.
 
 @menu
 * Introduction to the EXT2FS Library::  
@@ -146,7 +146,7 @@ There are two functions which create a filesystem handle,
 @code{ext2fs_open} and @code{ext2fs_initialize}.  
 
 The filesystem can also be closed using @code{ext2fs_close}, and any
-changes to the superblock and group descripts can be written out to disk
+changes to the superblock and group descriptors can be written out to disk
 using @code{ext2fs_flush}.
 
 @menu
@@ -164,7 +164,7 @@ using @code{ext2fs_flush}.
 
 Most libext2fs functions take a filesystem handle of type
 @code{ext2_filsys}.  A filesystem handle is created either by opening
-an existing function using @code{ext2fs_open}, or by initializing a new
+an existing filesystem using @code{ext2fs_open}, or by initializing a new
 filesystem using @code{ext2fs_initialize}.
 
 @deftypefun errcode_t ext2fs_open (const char *@var{name}, int @var{flags}, int @var{superblock}, int @var{block_size}, io_manager @var{manager}, ext2_filsys *@var{ret_fs})
@@ -183,10 +183,10 @@ image.
 
 The @var{block_size} parameter specifies the block size used by the
 filesystem.  Normally this is determined automatically from the
-filesystem uperblock.  If @var{block_size} is non-zero, it must match
+filesystem superblock.  If @var{block_size} is non-zero, it must match
 the block size found in the superblock, or the error
 @code{EXT2_ET_UNEXPECTED_BLOCK_SIZE} will be returned.  The
-@var{block_size} parameter is also used to help fund the superblock when
+@var{block_size} parameter is also used to help find the superblock when
 @var{superblock} is non-zero.
 
 The @var{flags} argument contains a bitmask of flags which control how
@@ -472,7 +472,7 @@ via @var{got}.
 @deftypefun errcode_t ext2fs_file_write (ext2_file_t @var{file}, const void *@var{buf}, unsigned int @var{nbytes}, unsigned int *@var{written})
 Write @var{wanted} bytes of data from the buffer @var{buf} to the
 current file position of @var{file}.  The number of bytes that was 
-actually written is returned via @var{got}.
+actually written is returned via @var{written}.
 @end deftypefun
 
 @c ----------------------------------------------------------------------
@@ -625,7 +625,7 @@ The @var{flags} parameter controls how the iterator will function:
 @table @samp
 
 @item BLOCK_FLAG_HOLE
-This flag indiciates that the interator function should be called on
+This flag indicates that the interator function should be called on
 blocks where the block number is zero (also known as ``holes''.)  It is
 also known as BLOCK_FLAG_APPEND, since it is also used by functions
 such as ext2fs_expand_dir() to add a new block to an inode.
@@ -633,7 +633,7 @@ such as ext2fs_expand_dir() to add a new block to an inode.
 @item BLOCK_FLAG_DEPTH_TRAVERSE
 This flag indicates that the iterator function for the
 indirect, doubly indirect, etc. blocks should be called after all
-of the blocks containined in the indirect blocks are processed.
+of the blocks contained in the indirect blocks are processed.
 This is useful if you are going to be deallocating blocks from an
 inode.
 
@@ -739,20 +739,20 @@ contain valid block entries.
 
 @deftypefun errcode_t ext2fs_read_dir_block (ext2_filsys @var{fs}, blk_t @var{block}, void *@var{buf})
 
-This function reads a directory block, performing any necessary
+This function reads a directory block, performing
 byte swapping if necessary.
 @end deftypefun
 
 @deftypefun errcode_t ext2fs_write_dir_block (ext2_filsys @var{fs}, blk_t @var{block}, void *@var{buf})
 
-This function writes a directory block, performing any necessary
+This function writes a directory block, performing
 byte swapping if necessary.
 @end deftypefun
 
 @deftypefun errcode_t ext2fs_new_dir_block (ext2_filsys @var{fs}, ext2_ino_t @var{dir_ino}, ext2_ino_t @var{parent_ino}, char **@var{block})
 
 This function creates a new directory block in @var{block}.  If
-@var{dir_ino} is non-zero, then @var{dir_info} and @var{parent_ino} is used
+@var{dir_ino} is non-zero, then @var{dir_ino} and @var{parent_ino} are used
 to initialize directory entries for @file{.} and @file{..}, respectively.
 @end deftypefun
 
@@ -1157,7 +1157,7 @@ trying to turn an inode number into a pathname.
 
 @deftypefun errcode_t ext2fs_init_dblist (ext2_filsys @var{fs}, ext2_dblist *@var{ret_dblist})
 
-Creates a dblist data structure and return it in @var{ret_dblist}.
+Creates a dblist data structure and returns it in @var{ret_dblist}.
 @end deftypefun
 
 @deftypefun void ext2fs_free_dblist (ext2_dblist @var{dblist})
@@ -1175,7 +1175,7 @@ in block @var{blk}.
 @deftypefun errcode_t ext2fs_set_dir_block (ext2_dblist @var{dblist}, ext2_ino_t @var{ino}, blk_t @var{blk}, int @var{blockcnt})
 
 Change an entry in the dblist data structure; this changes the location
-of block number @var{blockcnt} of directory indoe @var{ino} to be block
+of block number @var{blockcnt} of directory inode @var{ino} to be block
 @var{blk}. 
 @end deftypefun
 
@@ -1208,12 +1208,12 @@ the inode is referenced according to the inode structure.
 This abstraction is designed to be extremely efficient for storing this
 sort of information, by taking advantage of the following properties of
 inode counts, namely (1) inode counts are very often zero (because
-the inode is currrently not in use), and (2) many files have a inode
+the inode is currently not in use), and (2) many files have a inode
 count of 1 (because they are a file which has no additional hard links).
 
 @deftypefun errcode_t ext2fs_create_icount2 (ext2_filsys @var{fs}, int @var{flags}, int @var{size}, ext2_icount_t @var{hint}, ext2_icount_t *@var{ret})
 
-Creates an icount stucture for a filesystem @var{fs}, with initial space
+Creates an icount structure for a filesystem @var{fs}, with initial space
 for @var{size} inodes whose count is greater than 1.  The @var{flags}
 parameter is either 0 or @code{EXT2_ICOUNT_OPT_INCREMENT}, which
 indicates that icount structure should be able to increment inode counts
@@ -1234,7 +1234,7 @@ Frees an icount structure.
 
 @deftypefun errcode_t ext2fs_icount_fetch (ext2_icount_t @var{icount}, ext2_ino_t @var{ino}, __u16 *@var{ret})
 
-Returns in @var{ret} fetches the count for a particular inode @var{ino}.
+Returns in @var{ret} the count for a particular inode @var{ino}.
 @end deftypefun
 
 @deftypefun errcode_t ext2fs_icount_increment (ext2_icount_t @var{icount}, ext2_ino_t @var{ino}, __u16 *@var{ret})
diff --git a/e2fsck/Android.bp b/e2fsck/Android.bp
new file mode 100644 (file)
index 0000000..603e2ed
--- /dev/null
@@ -0,0 +1,81 @@
+// Copyright 2017 The Android Open Source Project
+
+//########################
+// Build the e2fsck binary
+
+cc_defaults {
+    name: "e2fsck-defaults",
+    defaults: ["e2fsprogs-defaults"],
+    srcs: [
+        "e2fsck.c",
+        "super.c",
+        "pass1.c",
+        "pass1b.c",
+        "pass2.c",
+        "pass3.c",
+        "pass4.c",
+        "pass5.c",
+        "logfile.c",
+        "journal.c",
+        "recovery.c",
+        "revoke.c",
+        "badblocks.c",
+        "util.c",
+        "unix.c",
+        "dirinfo.c",
+        "dx_dirinfo.c",
+        "ehandler.c",
+        "problem.c",
+        "message.c",
+        "ea_refcount.c",
+        "quota.c",
+        "rehash.c",
+        "region.c",
+        "sigcatcher.c",
+        "readahead.c",
+        "extents.c",
+        "encrypted_files.c",
+    ],
+    cflags: [
+        "-Wno-sign-compare",
+        "-fno-strict-aliasing",
+    ],
+}
+
+e2fsck_libs = [
+    "libext2fs",
+    "libext2_blkid",
+    "libext2_com_err",
+    "libext2_uuid",
+    "libext2_quota",
+    "libext2_e2p",
+]
+
+cc_binary {
+    name: "e2fsck",
+    host_supported: true,
+    vendor_ramdisk_available: true,
+    defaults: ["e2fsck-defaults"],
+
+    shared_libs: e2fsck_libs,
+    system_shared_libs: ["libc", "libdl"],
+    required: ["badblocks"],
+}
+
+cc_binary {
+    name: "e2fsck_static",
+    static_executable: true,
+    defaults: ["e2fsck-defaults"],
+
+    static_libs: e2fsck_libs,
+}
+
+cc_binary {
+    name: "e2fsck_ramdisk",
+    stem: "e2fsck",
+    static_executable: true,
+    ramdisk: true,
+    defaults: ["e2fsck-defaults"],
+    system_shared_libs: [],
+    static_libs: e2fsck_libs,
+}
diff --git a/e2fsck/Android.mk b/e2fsck/Android.mk
deleted file mode 100644 (file)
index 604eaa1..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-#########################
-# Build the e2fsck binary
-
-e2fsck_src_files :=  \
-       e2fsck.c \
-       super.c \
-       pass1.c \
-       pass1b.c \
-       pass2.c \
-       pass3.c \
-       pass4.c \
-       pass5.c \
-       logfile.c \
-       journal.c \
-       recovery.c \
-       revoke.c \
-       badblocks.c \
-       util.c \
-       unix.c \
-       dirinfo.c \
-       dx_dirinfo.c \
-       ehandler.c \
-       problem.c \
-       message.c \
-       ea_refcount.c \
-       quota.c \
-       rehash.c \
-       region.c \
-       sigcatcher.c \
-       readahead.c \
-       extents.c
-
-e2fsck_shared_libraries := \
-       libext2fs \
-       libext2_blkid \
-       libext2_uuid \
-       libext2_quota \
-       libext2_com_err \
-       libext2_e2p
-
-e2fsck_system_shared_libraries := libc
-
-e2fsck_static_libraries := \
-       libext2fs \
-       libext2_blkid \
-       libext2_uuid_static \
-       libext2_quota \
-       libext2_com_err \
-       libext2_e2p
-
-e2fsck_system_static_libraries := libc
-
-e2fsck_c_includes :=
-
-e2fsck_cflags := -O2 -g -W -Wall -fno-strict-aliasing
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(e2fsck_src_files)
-LOCAL_C_INCLUDES := $(e2fsck_c_includes)
-LOCAL_CFLAGS := $(e2fsck_cflags)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(e2fsck_system_shared_libraries)
-LOCAL_SHARED_LIBRARIES := $(e2fsck_shared_libraries)
-LOCAL_MODULE := e2fsck
-LOCAL_MODULE_TAGS := optional
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(e2fsck_src_files)
-LOCAL_C_INCLUDES := $(e2fsck_c_includes)
-LOCAL_CFLAGS := $(e2fsck_cflags)
-LOCAL_STATIC_LIBRARIES := $(e2fsck_static_libraries) $(e2fsck_system_static_libraries)
-LOCAL_FORCE_STATIC_EXECUTABLE := true
-LOCAL_MODULE := e2fsck_static
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(e2fsck_src_files)
-LOCAL_C_INCLUDES := $(e2fsck_c_includes)
-LOCAL_CFLAGS := $(e2fsck_cflags)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(e2fsck_shared_libraries))
-LOCAL_MODULE := e2fsck_host
-LOCAL_MODULE_STEM := e2fsck
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_EXECUTABLE)
index fa135b6..eb4cfde 100644 (file)
@@ -15,7 +15,7 @@ Deleted inodes from old ext2fs code (inodes with dtime set but
 non-zero link count) are detected, and the user is given the
 opportunity to clear them.
 
-The last bit in the last group of the block bitmap badding was not
+The last bit in the last group of the block bitmap padding was not
 being checked; now fixed.
 
 The free_blocks and free_inodes count in the last group weren't being
index cee6a42..f4ae5ea 100644 (file)
@@ -8,6 +8,7 @@ VPATH = @srcdir@
 top_builddir = ..
 my_dir = e2fsck
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
@@ -63,7 +64,7 @@ OBJS= unix.o e2fsck.o super.o pass1.o pass1b.o pass2.o \
        dx_dirinfo.o ehandler.o problem.o message.o quota.o recovery.o \
        region.o revoke.o ea_refcount.o rehash.o \
        logfile.o sigcatcher.o $(MTRACE_OBJ) readahead.o \
-       extents.o
+       extents.o encrypted_files.o
 
 PROFILED_OBJS= profiled/unix.o profiled/e2fsck.o \
        profiled/super.o profiled/pass1.o profiled/pass1b.o \
@@ -74,7 +75,8 @@ PROFILED_OBJS= profiled/unix.o profiled/e2fsck.o \
        profiled/recovery.o profiled/region.o profiled/revoke.o \
        profiled/ea_refcount.o profiled/rehash.o \
        profiled/logfile.o profiled/sigcatcher.o \
-       profiled/readahead.o profiled/extents.o
+       profiled/readahead.o profiled/extents.o \
+       profiled/encrypted_files.o
 
 SRCS= $(srcdir)/e2fsck.c \
        $(srcdir)/super.c \
@@ -103,12 +105,15 @@ SRCS= $(srcdir)/e2fsck.c \
        $(srcdir)/logfile.c \
        $(srcdir)/quota.c \
        $(srcdir)/extents.c \
+       $(srcdir)/encrypted_files.c \
        $(MTRACE_SRC)
 
 all:: profiled $(PROGS) e2fsck $(MANPAGES) $(FMANPAGES)
 
 @PROFILE_CMT@all:: e2fsck.profiled
 
+all-static:: e2fsck.static
+
 e2fsck: $(OBJS)  $(DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(LD) $(ALL_LDFLAGS) $(RDYNAMIC) -o e2fsck $(OBJS) $(LIBS) 
@@ -133,7 +138,7 @@ tst_problem: $(srcdir)/problem.c $(srcdir)/problem.h $(LIBEXT2FS) \
                $(srcdir)/problem.c -DUNITTEST $(LIBEXT2FS) $(LIBCOM_ERR) \
                $(LIBINTL) $(SYSLIBS)
 
-tst_refcount: ea_refcount.c $(DEPLIBCOM_ERR)
+tst_refcount: ea_refcount.c $(DEPLIBCOM_ERR) $(LIBEXT2FS)
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_refcount $(srcdir)/ea_refcount.c \
                $(ALL_CFLAGS) $(ALL_LDFLAGS) -DTEST_PROGRAM \
@@ -144,13 +149,13 @@ tst_logfile: $(srcdir)/logfile.c
        $(Q) $(CC) -o tst_logfile $(srcdir)/logfile.c \
                $(ALL_CFLAGS) $(ALL_LDFLAGS) -DTEST_PROGRAM $(SYSLIBS)
 
-tst_region: region.c $(DEPLIBCOM_ERR)
+tst_region: region.c $(LIBEXT2FS) $(DEPLIBCOM_ERR)
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_region $(srcdir)/region.c \
                $(ALL_CFLAGS) $(ALL_LDFLAGS) -DTEST_PROGRAM \
-               $(LIBCOM_ERR) $(SYSLIBS)
+               $(LIBEXT2FS) $(LIBCOM_ERR) $(SYSLIBS)
 
-check:: tst_refcount tst_region tst_problem
+fullcheck check:: tst_refcount tst_region tst_problem
        $(TESTENV) ./tst_refcount
        $(TESTENV) ./tst_region
        $(TESTENV) ./tst_problem
@@ -187,8 +192,8 @@ e2fsck.conf.5: $(DEP_SUBSTITUTE) $(srcdir)/e2fsck.conf.5.in
        $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2fsck.conf.5.in e2fsck.conf.5
 
 installdirs:
-       $(E) "  MKINSTALLDIRS $(root_sbindir) $(man8dir)"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(root_sbindir) \
+       $(E) "  MKDIR_P $(root_sbindir) $(man8dir)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(root_sbindir) \
                $(DESTDIR)$(man8dir) $(DESTDIR)$(man5dir)
 
 install: $(PROGS) $(MANPAGES) $(FMANPAGES) installdirs
@@ -267,136 +272,180 @@ e2fsck.o: $(srcdir)/e2fsck.c $(top_builddir)/lib/config.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h
 super.o: $(srcdir)/super.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h
 pass1.o: $(srcdir)/pass1.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(srcdir)/problem.h
 pass1b.o: $(srcdir)/pass1b.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/et/com_err.h \
  $(srcdir)/e2fsck.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/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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h \
- $(top_srcdir)/lib/support/dict.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h $(top_srcdir)/lib/support/dict.h
 pass2.o: $(srcdir)/pass2.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h \
- $(top_srcdir)/lib/support/dict.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h $(top_srcdir)/lib/support/dict.h
 pass3.o: $(srcdir)/pass3.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h
 pass4.o: $(srcdir)/pass4.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h
 pass5.o: $(srcdir)/pass5.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h
 journal.o: $(srcdir)/journal.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/jfs_user.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h \
- $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h $(srcdir)/problem.h
-recovery.o: $(srcdir)/recovery.c $(srcdir)/jfs_user.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(srcdir)/problem.h
+recovery.o: $(srcdir)/recovery.c $(srcdir)/jfs_user.h \
+ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \
+ $(srcdir)/e2fsck.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/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h \
- $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h
-revoke.o: $(srcdir)/revoke.c $(srcdir)/jfs_user.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(top_srcdir)/lib/ext2fs/kernel-jbd.h
+revoke.o: $(srcdir)/revoke.c $(srcdir)/jfs_user.h \
+ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \
+ $(srcdir)/e2fsck.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/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h \
- $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(top_srcdir)/lib/ext2fs/kernel-jbd.h
 badblocks.o: $(srcdir)/badblocks.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/et/com_err.h \
  $(srcdir)/e2fsck.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/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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h
 util.o: $(srcdir)/util.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h
 unix.o: $(srcdir)/unix.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 \
@@ -404,139 +453,200 @@ unix.o: $(srcdir)/unix.c $(top_builddir)/lib/config.h \
  $(srcdir)/e2fsck.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
  $(top_srcdir)/lib/ext2fs/ext3_extents.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h \
- $(top_srcdir)/version.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h $(srcdir)/jfs_user.h \
+ $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/version.h
 dirinfo.o: $(srcdir)/dirinfo.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(top_srcdir)/lib/ext2fs/tdb.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(top_srcdir)/lib/ext2fs/tdb.h
 dx_dirinfo.o: $(srcdir)/dx_dirinfo.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h
 ehandler.o: $(srcdir)/ehandler.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h
 problem.o: $(srcdir)/problem.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h \
- $(srcdir)/problemP.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h $(srcdir)/problemP.h
 message.o: $(srcdir)/message.c $(top_builddir)/lib/config.h \
- $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.h \
+ $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/support/quotaio.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/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h
 ea_refcount.o: $(srcdir)/ea_refcount.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h
 rehash.o: $(srcdir)/rehash.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h
 readahead.o: $(srcdir)/readahead.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h
 region.o: $(srcdir)/region.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h
 sigcatcher.o: $(srcdir)/sigcatcher.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h
 logfile.o: $(srcdir)/logfile.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h
 quota.o: $(srcdir)/quota.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h
 extents.o: $(srcdir)/extents.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/problem.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h
+encrypted_files.o: $(srcdir)/encrypted_files.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.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/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(srcdir)/problem.h $(top_srcdir)/lib/ext2fs/rbtree.h
diff --git a/e2fsck/Makefile.pq b/e2fsck/Makefile.pq
deleted file mode 100644 (file)
index 18a3cd3..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-TOPSRC=..
-LIBNAME=E2FSCK.LIB
-OBJFILE=E2FSCK.LST
-
-OBJS= e2fsck.obj super.obj pass1.obj pass2.obj pass3.obj \
-       pass4.obj pass5.obj dirinfo.obj
-
-!include $(TOPSRC)\powerquest\MCONFIG
-
index b29f7e9..49d624c 100644 (file)
@@ -17,8 +17,8 @@
 #include <ext2fs/tdb.h>
 
 struct dir_info_db {
-       int             count;
-       int             size;
+       ext2_ino_t      count;
+       ext2_ino_t      size;
        struct dir_info *array;
        struct dir_info *last_lookup;
 #ifdef CONFIG_TDB
@@ -28,7 +28,7 @@ struct dir_info_db {
 };
 
 struct dir_info_iter {
-       int     i;
+       ext2_ino_t      i;
 #ifdef CONFIG_TDB
        TDB_DATA        tdb_iter;
 #endif
@@ -46,7 +46,7 @@ static void e2fsck_put_dir_info(e2fsck_t ctx, struct dir_info *dir);
 static void setup_tdb(e2fsck_t ctx, ext2_ino_t num_dirs)
 {
        struct dir_info_db      *db = ctx->dir_info;
-       unsigned int            threshold;
+       ext2_ino_t              threshold;
        errcode_t               retval;
        mode_t                  save_umask;
        char                    *tdb_dir, uuid[40];
@@ -130,12 +130,12 @@ static void setup_db(e2fsck_t ctx)
 void e2fsck_add_dir_info(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent)
 {
        struct dir_info         *dir, *old_array;
-       int                     i, j;
+       ext2_ino_t              i, j;
        errcode_t               retval;
        unsigned long           old_size;
 
 #ifdef DIRINFO_DEBUG
-       printf("add_dir_info for inode (%lu, %lu)...\n", ino, parent);
+       printf("add_dir_info for inode (%u, %u)...\n", ino, parent);
 #endif
        if (!ctx->dir_info)
                setup_db(ctx);
@@ -149,7 +149,7 @@ void e2fsck_add_dir_info(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent)
                                           &ctx->dir_info->array);
                if (retval) {
                        fprintf(stderr, "Couldn't reallocate dir_info "
-                               "structure to %d entries\n",
+                               "structure to %u entries\n",
                                ctx->dir_info->size);
                        fatal_error(ctx, 0);
                        ctx->dir_info->size -= 10;
@@ -204,13 +204,13 @@ void e2fsck_add_dir_info(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent)
 static struct dir_info *e2fsck_get_dir_info(e2fsck_t ctx, ext2_ino_t ino)
 {
        struct dir_info_db      *db = ctx->dir_info;
-       int                     low, high, mid;
+       ext2_ino_t low, high, mid;
 
        if (!db)
                return 0;
 
 #ifdef DIRINFO_DEBUG
-       printf("e2fsck_get_dir_info %d...", ino);
+       printf("e2fsck_get_dir_info %u...", ino);
 #endif
 
 #ifdef CONFIG_TDB
@@ -235,7 +235,7 @@ static struct dir_info *e2fsck_get_dir_info(e2fsck_t ctx, ext2_ino_t ino)
                ret_dir_info.dotdot = buf->dotdot;
                ret_dir_info.parent = buf->parent;
 #ifdef DIRINFO_DEBUG
-               printf("(%d,%d,%d)\n", ino, buf->dotdot, buf->parent);
+               printf("(%u,%u,%u)\n", ino, buf->dotdot, buf->parent);
 #endif
                free(data.dptr);
                return &ret_dir_info;
@@ -246,10 +246,10 @@ static struct dir_info *e2fsck_get_dir_info(e2fsck_t ctx, ext2_ino_t ino)
                return db->last_lookup;
 
        low = 0;
-       high = ctx->dir_info->count-1;
+       high = ctx->dir_info->count - 1;
        if (ino == ctx->dir_info->array[low].ino) {
 #ifdef DIRINFO_DEBUG
-               printf("(%d,%d,%d)\n", ino,
+               printf("(%u,%u,%u)\n", ino,
                       ctx->dir_info->array[low].dotdot,
                       ctx->dir_info->array[low].parent);
 #endif
@@ -257,7 +257,7 @@ static struct dir_info *e2fsck_get_dir_info(e2fsck_t ctx, ext2_ino_t ino)
        }
        if (ino == ctx->dir_info->array[high].ino) {
 #ifdef DIRINFO_DEBUG
-               printf("(%d,%d,%d)\n", ino,
+               printf("(%u,%u,%u)\n", ino,
                       ctx->dir_info->array[high].dotdot,
                       ctx->dir_info->array[high].parent);
 #endif
@@ -265,12 +265,13 @@ static struct dir_info *e2fsck_get_dir_info(e2fsck_t ctx, ext2_ino_t ino)
        }
 
        while (low < high) {
-               mid = (low+high)/2;
+               /* sum may overflow, but result will fit into mid again */
+               mid = (unsigned long long)(low + high) / 2;
                if (mid == low || mid == high)
                        break;
                if (ino == ctx->dir_info->array[mid].ino) {
 #ifdef DIRINFO_DEBUG
-                       printf("(%d,%d,%d)\n", ino,
+                       printf("(%u,%u,%u)\n", ino,
                               ctx->dir_info->array[mid].dotdot,
                               ctx->dir_info->array[mid].parent);
 #endif
@@ -294,7 +295,7 @@ static void e2fsck_put_dir_info(e2fsck_t ctx EXT2FS_NO_TDB_UNUSED,
 #endif
 
 #ifdef DIRINFO_DEBUG
-       printf("e2fsck_put_dir_info (%d, %d, %d)...", dir->ino, dir->dotdot,
+       printf("e2fsck_put_dir_info (%u, %u, %u)...", dir->ino, dir->dotdot,
               dir->parent);
 #endif
 
@@ -326,8 +327,10 @@ void e2fsck_free_dir_info(e2fsck_t ctx)
                if (ctx->dir_info->tdb)
                        tdb_close(ctx->dir_info->tdb);
                if (ctx->dir_info->tdb_fn) {
-                       unlink(ctx->dir_info->tdb_fn);
-                       free(ctx->dir_info->tdb_fn);
+                       if (unlink(ctx->dir_info->tdb_fn) < 0)
+                               com_err("e2fsck_free_dir_info", errno,
+                                       _("while freeing dir_info tdb file"));
+                       ext2fs_free_mem(&ctx->dir_info->tdb_fn);
                }
 #endif
                if (ctx->dir_info->array)
@@ -410,7 +413,7 @@ struct dir_info *e2fsck_dir_info_iter(e2fsck_t ctx, struct dir_info_iter *iter)
                return 0;
 
 #ifdef DIRINFO_DEBUG
-       printf("iter(%d, %d, %d)...", ctx->dir_info->array[iter->i].ino,
+       printf("iter(%u, %u, %u)...", ctx->dir_info->array[iter->i].ino,
               ctx->dir_info->array[iter->i].dotdot,
               ctx->dir_info->array[iter->i].parent);
 #endif
index c7b6056..caca3e3 100644 (file)
  * entry.  During pass1, the passed-in parent is 0; it will get filled
  * in during pass2.
  */
-void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino, int num_blocks)
+void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino, struct ext2_inode *inode,
+                      int num_blocks)
 {
        struct dx_dir_info *dir;
-       int             i, j;
+       ext2_ino_t      i, j;
        errcode_t       retval;
        unsigned long   old_size;
 
@@ -40,7 +41,7 @@ void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino, int num_blocks)
                                           &ctx->dx_dir_info);
                if (retval) {
                        fprintf(stderr, "Couldn't reallocate dx_dir_info "
-                               "structure to %d entries\n",
+                               "structure to %u entries\n",
                                ctx->dx_dir_info_size);
                        fatal_error(ctx, 0);
                        ctx->dx_dir_info_size -= 10;
@@ -72,10 +73,10 @@ void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino, int num_blocks)
        dir->ino = ino;
        dir->numblocks = num_blocks;
        dir->hashversion = 0;
+       dir->casefolded_hash = !!(inode->i_flags & EXT4_CASEFOLD_FL);
        dir->dx_block = e2fsck_allocate_memory(ctx, num_blocks
                                       * sizeof (struct dx_dirblock_info),
                                       "dx_block info array");
-
 }
 
 /*
@@ -84,7 +85,7 @@ void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino, int num_blocks)
  */
 struct dx_dir_info *e2fsck_get_dx_dir_info(e2fsck_t ctx, ext2_ino_t ino)
 {
-       int     low, high, mid;
+       ext2_ino_t low, high, mid;
 
        low = 0;
        high = ctx->dx_dir_info_count-1;
@@ -96,7 +97,8 @@ struct dx_dir_info *e2fsck_get_dx_dir_info(e2fsck_t ctx, ext2_ino_t ino)
                return &ctx->dx_dir_info[high];
 
        while (low < high) {
-               mid = (low+high)/2;
+               /* sum may overflow, but result will fit into mid again */
+               mid = (unsigned long long)(low + high) / 2;
                if (mid == low || mid == high)
                        break;
                if (ino == ctx->dx_dir_info[mid].ino)
@@ -114,8 +116,8 @@ struct dx_dir_info *e2fsck_get_dx_dir_info(e2fsck_t ctx, ext2_ino_t ino)
  */
 void e2fsck_free_dx_dir_info(e2fsck_t ctx)
 {
-       int     i;
        struct dx_dir_info *dir;
+       ext2_ino_t i;
 
        if (ctx->dx_dir_info) {
                dir = ctx->dx_dir_info;
@@ -135,7 +137,7 @@ void e2fsck_free_dx_dir_info(e2fsck_t ctx)
 /*
  * Return the count of number of directories in the dx_dir_info structure
  */
-int e2fsck_get_num_dx_dirinfo(e2fsck_t ctx)
+ext2_ino_t e2fsck_get_num_dx_dirinfo(e2fsck_t ctx)
 {
        return ctx->dx_dir_info_count;
 }
@@ -143,10 +145,10 @@ int e2fsck_get_num_dx_dirinfo(e2fsck_t ctx)
 /*
  * A simple interator function
  */
-struct dx_dir_info *e2fsck_dx_dir_info_iter(e2fsck_t ctx, int *control)
+struct dx_dir_info *e2fsck_dx_dir_info_iter(e2fsck_t ctx, ext2_ino_t *control)
 {
        if (*control >= ctx->dx_dir_info_count)
                return 0;
 
-       return(ctx->dx_dir_info + (*control)++);
+       return ctx->dx_dir_info + (*control)++;
 }
index 915273d..019a34e 100644 (file)
@@ -1,7 +1,7 @@
 .\" -*- nroff -*-
 .\" Copyright 1993, 1994, 1995 by Theodore Ts'o.  All Rights Reserved.
 .\" This file may be copied under the terms of the GNU Public License.
-.\" 
+.\"
 .TH E2FSCK 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
 e2fsck \- check a Linux ext2/ext3/ext4 file system
@@ -41,7 +41,7 @@ e2fsck \- check a Linux ext2/ext3/ext4 file system
 .I device
 .SH DESCRIPTION
 .B e2fsck
-is used to check the ext2/ext3/ext4 family of file systems.   
+is used to check the ext2/ext3/ext4 family of file systems.
 For ext3 and ext4 filesystems that use a journal, if the system has been
 shut down uncleanly without any errors, normally, after replaying the
 committed transactions  in the journal, the file system should be
@@ -51,7 +51,7 @@ will normally replay the journal and exit, unless its superblock
 indicates that further checking is required.
 .PP
 .I device
-is a block device (e.g., 
+is a block device (e.g.,
 .IR /dev/sdc1 )
 or file containing the file system.
 .PP
@@ -59,18 +59,18 @@ Note that in general it is not safe to run
 .B e2fsck
 on mounted filesystems.  The only exception is if the
 .B \-n
-option is specified, and 
-.BR \-c , 
+option is specified, and
+.BR \-c ,
 .BR \-l ,
 or
 .B -L
-options are 
+options are
 .I not
 specified.   However, even if it is safe to do so, the results printed by
 .B e2fsck
-are not valid if the filesystem is mounted.   If 
+are not valid if the filesystem is mounted.   If
 .B e2fsck
-asks whether or not you should check a filesystem which is mounted, 
+asks whether or not you should check a filesystem which is mounted,
 the only correct answer is ``no''.  Only experts who really know what
 they are doing should consider answering this question in any other way.
 .PP
@@ -88,56 +88,56 @@ Enter will proceed with the default response, which is printed before the
 question mark.  Pressing Control-C terminates e2fsck immediately.
 .SH OPTIONS
 .TP
-.B \-a 
-This option does the same thing as the 
+.B \-a
+This option does the same thing as the
 .B \-p
 option.  It is provided for backwards compatibility only; it is
-suggested that people use 
-.B \-p 
+suggested that people use
+.B \-p
 option whenever possible.
 .TP
 .BI \-b " superblock"
 Instead of using the normal superblock, use an alternative superblock
-specified by 
+specified by
 .IR superblock .
 This option is normally used when the primary superblock has been
-corrupted.  The location of the backup superblock is dependent on the
-filesystem's blocksize.  For filesystems with 1k blocksizes, a backup
-superblock can be found at block 8193; for filesystems with 2k
-blocksizes, at block 16384; and for 4k blocksizes, at block 32768.  
+corrupted.  The location of backup superblocks is dependent on the
+filesystem's blocksize, the number of blocks per group, and features
+such as
+.BR sparse_super .
 .IP
-Additional backup superblocks can be determined by using the 
-.B mke2fs 
-program using the 
+Additional backup superblocks can be determined by using the
+.B mke2fs
+program using the
 .B \-n
-option to print out where the superblocks were created.   The 
-.B \-b 
-option to 
-.BR mke2fs ,
-which specifies blocksize of the filesystem must be specified in order
-for the superblock locations that are printed out to be accurate.
+option to print out where the superblocks exist, supposing
+.B mke2fs
+is supplied with arguments that are consistent with the filesystem's layout
+(e.g. blocksize, blocks per group,
+.BR sparse_super ,
+etc.).
 .IP
-If an alternative superblock is specified and  
+If an alternative superblock is specified and
 the filesystem is not opened read-only, e2fsck will make sure that the
-primary superblock is updated appropriately upon completion of the 
+primary superblock is updated appropriately upon completion of the
 filesystem check.
 .TP
 .BI \-B " blocksize"
-Normally, 
+Normally,
 .B e2fsck
 will search for the superblock at various different
 block sizes in an attempt to find the appropriate block size.
-This search can be fooled in some cases.  This option forces 
+This search can be fooled in some cases.  This option forces
 .B e2fsck
 to only try locating the superblock at a particular blocksize.
-If the superblock is not found, 
-.B e2fsck 
+If the superblock is not found,
+.B e2fsck
 will terminate with a fatal error.
 .TP
 .B \-c
-This option causes 
-.B e2fsck 
-to use 
+This option causes
+.B e2fsck
+to use
 .BR badblocks (8)
 program to do a read-only scan of the device in order to find any bad
 blocks.  If any bad blocks are found, they are added to the bad block
@@ -148,9 +148,9 @@ using a non-destructive read-write test.
 .BI \-C " fd"
 This option causes
 .B e2fsck
-to write completion information to the specified file descriptor 
-so that the progress of the filesystem 
-check can be monitored.  This option is typically used by programs 
+to write completion information to the specified file descriptor
+so that the progress of the filesystem
+check can be monitored.  This option is typically used by programs
 which are running
 .BR e2fsck .
 If the file descriptor number is negative, then absolute value of
@@ -158,7 +158,7 @@ the file descriptor will be used, and the progress information will be
 suppressed initially.  It can later be enabled by sending the
 .B e2fsck
 process a SIGUSR1 signal.
-If the file descriptor specified is 0, 
+If the file descriptor specified is 0,
 .B e2fsck
 will print a completion bar as it goes about its business.  This requires
 that e2fsck is running on a video console or terminal.
@@ -194,14 +194,14 @@ directory, which e2fsck normally does not enforce for performance reasons.
 .TP
 .BI \-E " extended_options"
 Set e2fsck extended options.  Extended options are comma
-separated, and may take an argument using the equals ('=') sign.  The 
+separated, and may take an argument using the equals ('=') sign.  The
 following options are supported:
 .RS 1.2i
 .TP
 .BI ea_ver= extended_attribute_version
 Set the version of the extended attribute blocks which
 .B e2fsck
-will require while checking the filesystem.  The version number may 
+will require while checking the filesystem.  The version number may
 be 1 or 2.  The default extended attribute version format is 2.
 .TP
 .BI journal_only
@@ -226,6 +226,32 @@ option may prevent you from further manual data recovery.
 Do not attempt to discard free blocks and unused inode blocks. This option is
 exactly the opposite of discard option. This is set as default.
 .TP
+.BI no_optimize_extents
+Do not offer to optimize the extent tree by eliminating unnecessary
+width or depth.  This can also be enabled in the options section of
+.BR /etc/e2fsck.conf .
+.TP
+.BI optimize_extents
+Offer to optimize the extent tree by eliminating unnecessary
+width or depth.  This is the default unless otherwise specified in
+.BR /etc/e2fsck.conf .
+.TP
+.BI inode_count_fullmap
+Trade off using memory for speed when checking a file system with a
+large number of hard-linked files.  The amount of memory required is
+proportional to the number of inodes in the file system.  For large file
+systems, this can be gigabytes of memory.  (For example, a 40TB file system
+with 2.8 billion inodes will consume an additional 5.7 GB memory if this
+optimization is enabled.)  This optimization can also be enabled in the
+options section of
+.BR /etc/e2fsck.conf .
+.TP
+.BI no_inode_count_fullmap
+Disable the
+.B inode_count_fullmap
+optimization.  This is the default unless otherwise specified in
+.BR /etc/e2fsck.conf .
+.TP
 .BI readahead_kb
 Use this many KiB of memory to pre-fetch metadata in the hopes of reducing
 e2fsck runtime.  By default, this is set to the size of two block groups' inode
@@ -240,6 +266,24 @@ Convert block-mapped files to extent-mapped files.
 Only fix damaged metadata; do not optimize htree directories or compress
 extent trees.  This option is incompatible with the -D and -E bmap2extent
 options.
+.TP
+.BI check_encoding
+Force verification of encoded filenames in case-insensitive directories.
+This is the default mode if the filesystem has the strict flag enabled.
+.TP
+.BI unshare_blocks
+If the filesystem has shared blocks, with the shared blocks read-only feature
+enabled, then this will unshare all shared blocks and unset the read-only
+feature bit. If there is not enough free space then the operation will fail.
+If the filesystem does not have the read-only feature bit, but has shared
+blocks anyway, then this option will have no effect. Note when using this
+option, if there is no free space to clone blocks, there is no prompt to
+delete files and instead the operation will fail.
+.IP
+Note that unshare_blocks implies the "-f" option to ensure that all passes
+are run. Additionally, if "-n" is also specified, e2fsck will simulate trying
+to allocate enough space to deduplicate. If this fails, the exit code will
+be non-zero.
 .RE
 .TP
 .B \-f
@@ -247,8 +291,8 @@ Force checking even if the file system seems clean.
 .TP
 .B \-F
 Flush the filesystem device's buffer caches before beginning.  Only
-really useful for doing 
-.B e2fsck 
+really useful for doing
+.B e2fsck
 time trials.
 @JDEV@.TP
 @JDEV@.BI \-j " external-journal"
@@ -256,35 +300,35 @@ time trials.
 @JDEV@found.
 .TP
 .BI \-k
-When combined with the 
+When combined with the
 .B \-c
 option, any existing bad blocks in the bad blocks list are preserved,
 and any new bad blocks found by running
-.BR badblocks (8) 
+.BR badblocks (8)
 will be added to the existing bad blocks list.
 .TP
 .BI \-l " filename"
-Add the block numbers listed in the file specified by 
+Add the block numbers listed in the file specified by
 .I filename
 to the list of bad blocks.  The format of this file is the same as the
-one generated by the 
+one generated by the
 .BR badblocks (8)
 program.  Note that the block numbers are based on the blocksize
-of the filesystem.  Hence, 
+of the filesystem.  Hence,
 .BR badblocks (8)
 must be given the blocksize of the filesystem in order to obtain correct
-results.  As a result, it is much simpler and safer to use the 
+results.  As a result, it is much simpler and safer to use the
 .B -c
-option to 
+option to
 .BR e2fsck ,
 since it will assure that the correct parameters are passed to the
 .B badblocks
 program.
 .TP
 .BI \-L " filename"
-Set the bad blocks list to be the list of blocks specified by 
+Set the bad blocks list to be the list of blocks specified by
 .IR filename .
-(This option is the same as the 
+(This option is the same as the
 .B \-l
 option, except the bad blocks list is cleared before the blocks listed
 in the file are added to the bad blocks list.)
@@ -294,7 +338,7 @@ Open the filesystem read-only, and assume an answer of `no' to all
 questions.  Allows
 .B e2fsck
 to be used non-interactively.  This option
-may not be specified at the same time as the 
+may not be specified at the same time as the
 .B \-p
 or
 .B \-y
@@ -305,14 +349,14 @@ Automatically repair ("preen") the file system.  This option will cause
 .B e2fsck
 to automatically
 fix any filesystem problems that can be safely fixed without human
-intervention.  If 
+intervention.  If
 .B e2fsck
 discovers a problem which may require the system administrator
-to take additional corrective action, 
+to take additional corrective action,
 .B e2fsck
 will print a description of the problem and then exit with the value 4
 logically or'ed into the exit code.  (See the \fBEXIT CODE\fR section.)
-This option is normally used by the system's boot scripts.  It may not 
+This option is normally used by the system's boot scripts.  It may not
 be specified at the same time as the
 .B \-n
 or
@@ -336,10 +380,10 @@ Verbose mode.
 Print version information and exit.
 .TP
 .B \-y
-Assume an answer of `yes' to all questions; allows 
+Assume an answer of `yes' to all questions; allows
 .B e2fsck
 to be used non-interactively.  This option
-may not be specified at the same time as the 
+may not be specified at the same time as the
 .B \-n
 or
 .B \-p
@@ -378,26 +422,26 @@ is the sum of the following conditions:
 \      128\    \-\ Shared library error
 .br
 .SH SIGNALS
-The following signals have the following effect when sent to 
+The following signals have the following effect when sent to
 .BR e2fsck .
 .TP
 .B SIGUSR1
 This signal causes
 .B e2fsck
-to start displaying a completion bar or emitting progress information.  
-(See discussion of the 
+to start displaying a completion bar or emitting progress information.
+(See discussion of the
 .B \-C
 option.)
 .TP
 .B SIGUSR2
 This signal causes
-.B e2fsck 
+.B e2fsck
 to stop displaying a completion bar or emitting progress information.
 .SH REPORTING BUGS
 Almost any piece of software will have bugs.  If you manage to find a
-filesystem which causes 
+filesystem which causes
 .B e2fsck
-to crash, or which 
+to crash, or which
 .B e2fsck
 is unable to repair, please report it to the author.
 .PP
@@ -405,10 +449,10 @@ Please include as much information as possible in your bug report.
 Ideally, include a complete transcript of the
 .B e2fsck
 run, so I can see exactly what error messages are displayed.  (Make sure
-the messages printed by 
-.B e2fsck 
+the messages printed by
+.B e2fsck
 are in English; if your system has been
-configured so that 
+configured so that
 .BR e2fsck 's
 messages have been translated into another language, please set the the
 .B LC_ALL
@@ -416,38 +460,43 @@ environment variable to
 .B C
 so that the transcript of e2fsck's output will be useful to me.)
 If you
-have a writable filesystem where the transcript can be stored, the 
+have a writable filesystem where the transcript can be stored, the
 .BR script (1)
 program is a handy way to save the output of
 .B e2fsck
 to a file.
 .PP
-It is also useful to send the output of 
+It is also useful to send the output of
 .BR dumpe2fs (8).
-If a specific inode or inodes seems to be giving 
-.B e2fsck 
+If a specific inode or inodes seems to be giving
+.B e2fsck
 trouble, try running the
 .BR debugfs (8)
-command and send the output of the 
+command and send the output of the
 .BR stat (1u)
-command run on the relevant inode(s).  If the inode is a directory, the 
+command run on the relevant inode(s).  If the inode is a directory, the
 .B debugfs
 .I dump
 command will allow you to extract the contents of the directory inode,
 which can sent to me after being first run through
-.BR uuencode (1).  
+.BR uuencode (1).
 The most useful data you can send to help reproduce
 the bug is a compressed raw image dump of the filesystem, generated using
 .BR e2image (8).
-See the 
+See the
 .BR e2image (8)
 man page for more details.
 .PP
-Always include the full version string which 
+Always include the full version string which
 .B e2fsck
 displays when it is run, so I know which version you are running.
+.SH ENVIRONMENT
+.TP
+.BI E2FSCK_CONFIG
+Determines the location of the configuration file (see
+.BR e2fsck.conf (5)).
 .SH AUTHOR
-This version of 
+This version of
 .B e2fsck
 was written by Theodore Ts'o <tytso@mit.edu>.
 .SH SEE ALSO
index 5184a17..51fc2a9 100644 (file)
@@ -37,7 +37,7 @@ errcode_t e2fsck_allocate_context(e2fsck_t *ret)
 
        time_env = getenv("E2FSCK_TIME");
        if (time_env)
-               context->now = strtoul(time_env, NULL, 0);
+               context->now = (time_t) strtoull(time_env, NULL, 0);
        else {
                context->now = time(0);
                if (context->now < 1262322000) /* January 1 2010 */
@@ -75,6 +75,10 @@ errcode_t e2fsck_reset_context(e2fsck_t ctx)
                ext2fs_free_block_bitmap(ctx->block_found_map);
                ctx->block_found_map = 0;
        }
+       if (ctx->inode_casefold_map) {
+               ext2fs_free_block_bitmap(ctx->inode_casefold_map);
+               ctx->inode_casefold_map = 0;
+       }
        if (ctx->inode_link_info) {
                ext2fs_free_icount(ctx->inode_link_info);
                ctx->inode_link_info = 0;
@@ -98,6 +102,18 @@ errcode_t e2fsck_reset_context(e2fsck_t ctx)
                ea_refcount_free(ctx->refcount_extra);
                ctx->refcount_extra = 0;
        }
+       if (ctx->ea_block_quota_blocks) {
+               ea_refcount_free(ctx->ea_block_quota_blocks);
+               ctx->ea_block_quota_blocks = 0;
+       }
+       if (ctx->ea_block_quota_inodes) {
+               ea_refcount_free(ctx->ea_block_quota_inodes);
+               ctx->ea_block_quota_inodes = 0;
+       }
+       if (ctx->ea_inode_refs) {
+               ea_refcount_free(ctx->ea_inode_refs);
+               ctx->ea_inode_refs = 0;
+       }
        if (ctx->block_dup_map) {
                ext2fs_free_block_bitmap(ctx->block_dup_map);
                ctx->block_dup_map = 0;
@@ -126,6 +142,7 @@ errcode_t e2fsck_reset_context(e2fsck_t ctx)
                ext2fs_u32_list_free(ctx->dirs_to_hash);
                ctx->dirs_to_hash = 0;
        }
+       destroy_encrypted_file_info(ctx);
 
        /*
         * Clear the array of invalid meta-data flags
@@ -142,9 +159,9 @@ errcode_t e2fsck_reset_context(e2fsck_t ctx)
                ext2fs_free_mem(&ctx->invalid_inode_table_flag);
                ctx->invalid_inode_table_flag = 0;
        }
-       if (ctx->encrypted_dirs) {
-               ext2fs_u32_list_free(ctx->encrypted_dirs);
-               ctx->encrypted_dirs = 0;
+       if (ctx->casefolded_dirs) {
+               ext2fs_u32_list_free(ctx->casefolded_dirs);
+               ctx->casefolded_dirs = 0;
        }
        if (ctx->inode_count) {
                ext2fs_free_icount(ctx->inode_count);
@@ -200,6 +217,16 @@ void e2fsck_free_context(e2fsck_t ctx)
        if (ctx->log_fn)
                free(ctx->log_fn);
 
+       if (ctx->logf)
+               fclose(ctx->logf);
+
+       if (ctx->problem_log_fn)
+               free(ctx->problem_log_fn);
+
+       if (ctx->problem_logf) {
+               fputs("</problem_log>\n", ctx->problem_logf);
+               fclose(ctx->problem_logf);
+       }
        ext2fs_free_mem(&ctx);
 }
 
index 1848bdb..48ad0fd 100644 (file)
@@ -1,26 +1,26 @@
 .\" -*- nroff -*-
 .\" Copyright 2006 by Theodore Ts'o.  All Rights Reserved.
 .\" This file may be copied under the terms of the GNU Public License.
-.\" 
+.\"
 .TH e2fsck.conf 5 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
 e2fsck.conf \- Configuration file for e2fsck
 .SH DESCRIPTION
 .I e2fsck.conf
-is the configuration file for 
-.BR e2fsck (8).  
-It controls the default behavior of 
+is the configuration file for
+.BR e2fsck (8).
+It controls the default behavior of
 .BR e2fsck (8)
 while it is checking ext2, ext3, or ext4 filesystems.
 .PP
 The
 .I e2fsck.conf
-file uses an INI-style format.  Stanzas, or top-level sections, are 
-delimited by square braces: [ ].  Within each section, each line 
+file uses an INI-style format.  Stanzas, or top-level sections, are
+delimited by square braces: [ ].  Within each section, each line
 defines a relation, which assigns tags to values, or to a subsection,
-which contains further relations or subsections.   
+which contains further relations or subsections.
 .\" Tags can be assigned multiple values
-An example of the INI-style format used by this configuration file 
+An example of the INI-style format used by this configuration file
 follows below:
 .P
        [section1]
@@ -49,26 +49,32 @@ follows below:
 .br
        }
 .P
-Comments are delimited by a semicolon (';') or a hash ('#') character 
-at the beginning of the comment, and are terminated by the end of 
+Comments are delimited by a semicolon (';') or a hash ('#') character
+at the beginning of the comment, and are terminated by the end of
 line character.
 .P
 Tags and values must be quoted using double quotes if they contain
-spaces.  Within a quoted string, the standard backslash interpretations 
-apply: "\en" (for the newline character), 
-"\et" (for the tab character), "\eb" (for the backspace character), 
+spaces.  Within a quoted string, the standard backslash interpretations
+apply: "\en" (for the newline character),
+"\et" (for the tab character), "\eb" (for the backspace character),
 and "\e\e" (for the backslash character).
 .P
-The following stanzas are used in the 
+The following stanzas are used in the
 .I e2fsck.conf
 file.  They will be described in more detail in future sections of this
 document.
-.TP 
+.TP
 .I [options]
-This stanza contains general configuration parameters for 
+This stanza contains general configuration parameters for
 .BR e2fsck 's
 behavior.
 .TP
+.I [defaults]
+Contains relations which define the default parameters used by
+.BR e2fsck (8).
+In general, these defaults may be overridden by command-line options
+provided by the user.
+.TP
 .I [problems]
 This stanza allows the administrator to reconfigure how e2fsck handles
 various filesystem inconsistencies.
@@ -77,12 +83,12 @@ various filesystem inconsistencies.
 @TDB_MAN_COMMENT@This stanza controls when e2fsck will attempt to use
 @TDB_MAN_COMMENT@scratch files to reduce the need for memory.
 .SH THE [options] STANZA
-The following relations are defined in the 
+The following relations are defined in the
 .I [options]
 stanza.
 .TP
 .I allow_cancellation
-If this relation is set to a boolean value of true, then if the user 
+If this relation is set to a boolean value of true, then if the user
 interrupts e2fsck using ^C, and the filesystem is not explicitly flagged
 as containing errors, e2fsck will exit with an exit status of 0 instead
 of 32.  This setting defaults to false.
@@ -135,16 +141,16 @@ we changed the default, we also renamed this boolean relation to
 .IR accept_time_fudge.
 .TP
 .I clear_test_fs_flag
-This boolean relation controls whether or not 
+This boolean relation controls whether or not
 .BR e2fsck (8)
 will offer to clear
 the test_fs flag if the ext4 filesystem is available on the system.  It
 defaults to true.
-.TP 
+.TP
 .I defer_check_on_battery
-This boolean relation controls whether or not the interval between 
-filesystem checks (either based on time or number of mounts) should 
-be doubled if the system is running on battery.  This setting defaults to 
+This boolean relation controls whether or not the interval between
+filesystem checks (either based on time or number of mounts) should
+be doubled if the system is running on battery.  This setting defaults to
 true.
 .TP
 .I indexed_dir_slack_percentage
@@ -157,10 +163,21 @@ the average fill ratio of directories can be maintained at a
 higher, more efficient level.  This relation defaults to 20
 percent.
 .TP
+.I inode_count_fullmap
+If this boolean relation is true, trade off using memory for speed when
+checking a file system with a large number of hard-linked files.  The
+amount of memory required is proportional to the number of inodes in the
+file system.  For large file systems, this can be gigabytes of memory.
+(For example a 40TB file system with 2.8 billion inodes will consume an
+additional 5.7 GB memory if this optimization is enabled.)  This setting
+defaults to false.
+.TP
 .I log_dir
 If the
 .I log_filename
-relation contains a relative pathname, then the log file will be placed
+or
+.I problem_log_filename
+relations contains a relative pathname, then the log file will be placed
 in the directory named by the
 .I log_dir
 relation.
@@ -169,17 +186,17 @@ relation.
 This relation contains an alternate directory that will be used if the
 directory specified by
 .I log_dir
-is not available or is not writeable.
+is not available or is not writable.
 .TP
 .I log_dir_wait
 If this boolean relation is true, them if the directories specified by
 .I log_dir
 or
 .I log_dir_fallback
-are not available or are not yet writeable, e2fsck will save the output
+are not available or are not yet writable, e2fsck will save the output
 in a memory buffer, and a child process will periodically test to see if
 the log directory has become available after the boot sequence has
-mounted the requiste file system for reading/writing.  This implements the
+mounted the requested file system for reading/writing.  This implements the
 functionality provided by
 .BR logsave (8)
 for e2fsck log files.
@@ -205,6 +222,20 @@ of that type are squelched.  This can be useful if the console is slow
 (i.e., connected to a serial port) and so a large amount of output could
 end up delaying the boot process for a long time (potentially hours).
 .TP
+.I no_optimize_extents
+If this boolean relation is true, do not offer to optimize the extent
+tree by reducing the tree's width or depth.  This setting defaults to false.
+.TP
+.I problem_log_filename
+This relation specifies the file name where a log of problem codes
+found by e2fsck be written.  The filename may contain various
+percent-expressions (%D, %T, %N,
+etc.) which will be expanded so that the file name for the log file can
+include things like date, time, device name, and other run-time
+parameters.  See the
+.B LOGGING
+section for more details.
+.TP
 .I readahead_mem_pct
 Use this percentage of memory to try to read in metadata blocks ahead of the
 main e2fsck thread.  This should reduce run times, depending on the speed of
@@ -237,16 +268,29 @@ If this boolean relation is true, e2fsck will run as if the option
 .B -v
 is always specified.  This will cause e2fsck to print some additional
 information at the end of each full file system check.
+.SH THE [defaults] STANZA
+The following relations are defined in the
+.I [defaults]
+stanza.
+.TP
+.I undo_dir
+This relation specifies the directory where the undo file should be
+stored.  It can be overridden via the
+.B E2FSPROGS_UNDO_DIR
+environment variable.  If the directory location is set to the value
+.IR none ,
+.B e2fsck
+will not create an undo file.
 .SH THE [problems] STANZA
 Each tag in the
-.I [problems] 
+.I [problems]
 stanza names a problem code specified with a leading "0x" followed by
-six hex digits.   
+six hex digits.
 The value of the tag is a subsection where the relations in that
-subsection override the default treatment of that particular problem 
+subsection override the default treatment of that particular problem
 code.
 .P
-Note that inappropriate settings in this stanza may cause 
+Note that inappropriate settings in this stanza may cause
 .B e2fsck
 to behave incorrectly, or even crash.  Most system administrators should
 not be making changes to this section without referring to source code.
@@ -258,13 +302,13 @@ This relation allows the message which is printed when this filesystem
 inconsistency is detected to be overridden.
 .TP
 .I preen_ok
-This boolean relation overrides the default behavior controlling 
+This boolean relation overrides the default behavior controlling
 whether this filesystem problem should be automatically fixed when
 .B e2fsck
 is running in preen mode.
 .TP
 .I max_count
-This integer relation overrides the 
+This integer relation overrides the
 .I max_count_problems
 parameter (set in the options section) for this particular problem.
 .TP
@@ -274,18 +318,18 @@ whether or not the filesystem will be marked as inconsistent if the user
 declines to fix the reported problem.
 .TP
 .I no_default
-This boolean relation overrides whether the default answer for this 
+This boolean relation overrides whether the default answer for this
 problem (or question) should be "no".
-.TP 
+.TP
 .I preen_nomessage
-This boolean relation overrides the default behavior controlling 
+This boolean relation overrides the default behavior controlling
 whether or not the description for this filesystem problem should
 be suppressed when
 .B e2fsck
 is running in preen mode.
 .TP
 .I no_nomsg
-This boolean relation overrides the default behavior controlling 
+This boolean relation overrides the default behavior controlling
 whether or not the description for this filesystem problem should
 be suppressed when a problem forced not to be fixed, either because
 .B e2fsck
@@ -303,6 +347,13 @@ of 'should this problem be fixed?'.  The
 option even overrides the
 .B -y
 option given on the command-line (just for the specific problem, of course).
+.TP
+.I not_a_fix
+This boolean option, it set to true, marks the problem as
+one where if the user gives permission to make the requested change,
+it does not mean that the file system had a problem which has since
+been fixed.  This is used for requests to optimize the file system's
+data structure, such as pruning an extent tree.
 @TDB_MAN_COMMENT@.SH THE [scratch_files] STANZA
 @TDB_MAN_COMMENT@The following relations are defined in the
 @TDB_MAN_COMMENT@.I [scratch_files]
@@ -316,7 +367,7 @@ option given on the command-line (just for the specific problem, of course).
 @TDB_MAN_COMMENT@.TP
 @TDB_MAN_COMMENT@.I numdirs_threshold
 @TDB_MAN_COMMENT@If this relation is set, then in-memory data structures
-@TDB_MAN_COMMENT@be used if the number of directories in the filesystem
+@TDB_MAN_COMMENT@will be used if the number of directories in the filesystem
 @TDB_MAN_COMMENT@are fewer than amount specified.
 @TDB_MAN_COMMENT@.TP
 @TDB_MAN_COMMENT@.I dirinfo
@@ -393,7 +444,7 @@ The name of the user running e2fsck.
 .B %U
 This percent expression does not expand to anything, but it signals that
 any following date or time expressions should be expressed in UTC time
-instead of the local timzeone.
+instead of the local timezone.
 .TP
 .B %y
 The last two digits of the current year (00..99)
@@ -444,7 +495,7 @@ no more than 16 instances of each type of file system corruption.
 .SH FILES
 .TP
 .I /etc/e2fsck.conf
-The configuration file for 
+The configuration file for
 .BR e2fsck (8).
 .SH SEE ALSO
 .BR e2fsck (8)
index f356810..b5b16f0 100644 (file)
@@ -68,6 +68,7 @@
 #endif
 
 #include "support/quotaio.h"
+#include "ext2fs/fast_commit.h"
 
 /*
  * Exit codes used by fsck-type programs
@@ -104,11 +105,12 @@ struct dir_info {
  * directories which contain a hash tree index.
  */
 struct dx_dir_info {
-       ext2_ino_t              ino;            /* Inode number */
-       int                     numblocks;      /* number of blocks */
-       int                     hashversion;
-       short                   depth;          /* depth of tree */
-       struct dx_dirblock_info *dx_block;      /* Array of size numblocks */
+       ext2_ino_t              ino;            /* Inode number */
+       short                   depth;          /* depth of tree (15 bits) */
+       __u8                    hashversion;
+       __u8                    casefolded_hash:1;
+       blk_t                   numblocks;      /* number of blocks in dir */
+       struct dx_dirblock_info *dx_block;      /* Array of size numblocks */
 };
 
 #define DX_DIRBLOCK_ROOT       1
@@ -119,9 +121,10 @@ struct dx_dir_info {
 
 struct dx_dirblock_info {
        int             type;
-       blk64_t         phys;
        int             flags;
+       blk64_t         phys;
        blk64_t         parent;
+       blk64_t         previous;
        ext2_dirhash_t  min_hash;
        ext2_dirhash_t  max_hash;
        ext2_dirhash_t  node_min_hash;
@@ -133,6 +136,8 @@ struct dx_dirblock_info {
 #define DX_FLAG_FIRST          4
 #define DX_FLAG_LAST           8
 
+struct encrypted_file_info;
+
 #define RESOURCE_TRACK
 
 #ifdef RESOURCE_TRACK
@@ -169,6 +174,11 @@ struct resource_track {
 #define E2F_OPT_DISCARD                0x2000
 #define E2F_OPT_CONVERT_BMAP   0x4000 /* convert blockmap to extent */
 #define E2F_OPT_FIXES_ONLY     0x8000 /* skip all optimizations */
+#define E2F_OPT_NOOPT_EXTENTS  0x10000 /* don't optimize extents */
+#define E2F_OPT_ICOUNT_FULLMAP 0x20000 /* use an array for inode counts */
+#define E2F_OPT_UNSHARE_BLOCKS  0x40000
+#define E2F_OPT_CLEAR_UNINIT   0x80000 /* Hack to clear the uninit bit */
+#define E2F_OPT_CHECK_ENCODING  0x100000 /* Force verification of encoded filenames */
 
 /*
  * E2fsck flags
@@ -218,6 +228,31 @@ typedef struct e2fsck_struct *e2fsck_t;
 
 #define MAX_EXTENT_DEPTH_COUNT 5
 
+/*
+ * This strucutre is used to manage the list of extents in a file. Placing
+ * it here since this is used by fast_commit.h.
+ */
+struct extent_list {
+       blk64_t blocks_freed;
+       struct ext2fs_extent *extents;
+       unsigned int count;
+       unsigned int size;
+       unsigned int ext_read;
+       errcode_t retval;
+       ext2_ino_t ino;
+};
+
+/* State structure for fast commit replay */
+struct e2fsck_fc_replay_state {
+       struct extent_list fc_extent_list;
+       int fc_replay_num_tags;
+       int fc_replay_expected_off;
+       int fc_current_pass;
+       int fc_cur_tag;
+       int fc_crc;
+       __u16 fc_super_state;
+};
+
 struct e2fsck_struct {
        ext2_filsys fs;
        const char *program_name;
@@ -226,14 +261,16 @@ struct e2fsck_struct {
        char *io_options;
        FILE    *logf;
        char    *log_fn;
+       FILE    *problem_logf;
+       char    *problem_log_fn;
        int     flags;          /* E2fsck internal flags */
        int     options;
-       int     blocksize;      /* blocksize */
+       unsigned blocksize;     /* blocksize */
        blk64_t use_superblock; /* sb requested by user */
        blk64_t superblock;     /* sb used to open fs */
        blk64_t num_blocks;     /* Total number of blocks */
-       blk64_t free_blocks;
-       ino_t   free_inodes;
+       blk64_t free_blocks;
+       ext2_ino_t free_inodes;
        int     mount_flags;
        int     openfs_flags;
        blkid_cache blkid;      /* blkid cache */
@@ -252,6 +289,7 @@ struct e2fsck_struct {
        ext2fs_inode_bitmap inode_bb_map; /* Inodes which are in bad blocks */
        ext2fs_inode_bitmap inode_imagic_map; /* AFS inodes */
        ext2fs_inode_bitmap inode_reg_map; /* Inodes which are regular files*/
+       ext2fs_inode_bitmap inode_casefold_map; /* Inodes which are casefolded */
 
        ext2fs_block_bitmap block_found_map; /* Blocks which are in use */
        ext2fs_block_bitmap block_dup_map; /* Blks referenced more than once */
@@ -267,6 +305,17 @@ struct e2fsck_struct {
        ext2_refcount_t refcount_extra;
 
        /*
+        * Quota blocks and inodes to be charged for each ea block.
+        */
+       ext2_refcount_t ea_block_quota_blocks;
+       ext2_refcount_t ea_block_quota_inodes;
+
+       /*
+        * ea_inode references from attr entries.
+        */
+       ext2_refcount_t ea_inode_refs;
+
+       /*
         * Array of flags indicating whether an inode bitmap, block
         * bitmap, or inode table is invalid
         */
@@ -300,9 +349,9 @@ struct e2fsck_struct {
        /*
         * Indexed directory information
         */
-       int             dx_dir_info_count;
-       int             dx_dir_info_size;
-       struct dx_dir_info *dx_dir_info;
+       ext2_ino_t              dx_dir_info_count;
+       ext2_ino_t              dx_dir_info_size;
+       struct dx_dir_info      *dx_dir_info;
 
        /*
         * Directories to hash
@@ -310,6 +359,11 @@ struct e2fsck_struct {
        ext2_u32_list   dirs_to_hash;
 
        /*
+        * Encrypted file information
+        */
+       struct encrypted_file_info *encrypted_files;
+
+       /*
         * Tuning parameters
         */
        int process_inode_size;
@@ -371,7 +425,7 @@ struct e2fsck_struct {
        int ext_attr_ver;
        profile_t       profile;
        int blocks_per_page;
-       ext2_u32_list encrypted_dirs;
+       ext2_u32_list casefolded_dirs;
 
        /* Reserve blocks for root and l+f re-creation */
        blk64_t root_repair_block, lnf_repair_block;
@@ -393,6 +447,9 @@ struct e2fsck_struct {
 
        /* Undo file */
        char *undo_file;
+
+       /* Fast commit replay state */
+       struct e2fsck_fc_replay_state fc_replay_state;
 };
 
 /* Data structures to evaluate whether an extent tree needs rebuilding. */
@@ -456,32 +513,51 @@ extern int e2fsck_dir_info_get_dotdot(e2fsck_t ctx, ext2_ino_t ino,
                                      ext2_ino_t *dotdot);
 
 /* dx_dirinfo.c */
-extern void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino, int num_blocks);
+extern void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino,
+                             struct ext2_inode *inode, int num_blocks);
 extern struct dx_dir_info *e2fsck_get_dx_dir_info(e2fsck_t ctx, ext2_ino_t ino);
 extern void e2fsck_free_dx_dir_info(e2fsck_t ctx);
-extern int e2fsck_get_num_dx_dirinfo(e2fsck_t ctx);
-extern struct dx_dir_info *e2fsck_dx_dir_info_iter(e2fsck_t ctx, int *control);
+extern ext2_ino_t e2fsck_get_num_dx_dirinfo(e2fsck_t ctx);
+extern struct dx_dir_info *e2fsck_dx_dir_info_iter(e2fsck_t ctx,
+                                                  ext2_ino_t *control);
 
 /* ea_refcount.c */
-extern errcode_t ea_refcount_create(int size, ext2_refcount_t *ret);
+typedef __u64 ea_key_t;
+typedef __u64 ea_value_t;
+
+extern errcode_t ea_refcount_create(size_t size, ext2_refcount_t *ret);
 extern void ea_refcount_free(ext2_refcount_t refcount);
-extern errcode_t ea_refcount_fetch(ext2_refcount_t refcount, blk64_t blk, int *ret);
+extern errcode_t ea_refcount_fetch(ext2_refcount_t refcount, ea_key_t ea_key,
+                                  ea_value_t *ret);
 extern errcode_t ea_refcount_increment(ext2_refcount_t refcount,
-                                      blk64_t blk, int *ret);
+                                      ea_key_t ea_key, ea_value_t *ret);
 extern errcode_t ea_refcount_decrement(ext2_refcount_t refcount,
-                                      blk64_t blk, int *ret);
-extern errcode_t ea_refcount_store(ext2_refcount_t refcount,
-                                  blk64_t blk, int count);
-extern blk_t ext2fs_get_refcount_size(ext2_refcount_t refcount);
+                                      ea_key_t ea_key, ea_value_t *ret);
+extern errcode_t ea_refcount_store(ext2_refcount_t refcount, ea_key_t ea_key,
+                                  ea_value_t count);
+extern size_t ext2fs_get_refcount_size(ext2_refcount_t refcount);
 extern void ea_refcount_intr_begin(ext2_refcount_t refcount);
-extern blk64_t ea_refcount_intr_next(ext2_refcount_t refcount, int *ret);
+extern ea_key_t ea_refcount_intr_next(ext2_refcount_t refcount,
+                                     ea_value_t *ret);
 
 /* ehandler.c */
 extern const char *ehandler_operation(const char *op);
 extern void ehandler_init(io_channel channel);
 
-/* extents.c */
+/* encrypted_files.c */
+
 struct problem_context;
+int add_encrypted_file(e2fsck_t ctx, struct problem_context *pctx);
+
+#define NO_ENCRYPTION_POLICY           ((__u32)-1)
+#define CORRUPT_ENCRYPTION_POLICY      ((__u32)-2)
+#define UNRECOGNIZED_ENCRYPTION_POLICY ((__u32)-3)
+__u32 find_encryption_policy(e2fsck_t ctx, ext2_ino_t ino);
+
+void destroy_encryption_policy_map(e2fsck_t ctx);
+void destroy_encrypted_file_info(e2fsck_t ctx);
+
+/* extents.c */
 errcode_t e2fsck_rebuild_extents_later(e2fsck_t ctx, ext2_ino_t ino);
 int e2fsck_ino_will_be_rebuilt(e2fsck_t ctx, ext2_ino_t ino);
 void e2fsck_pass1e(e2fsck_t ctx);
@@ -492,6 +568,9 @@ errcode_t e2fsck_should_rebuild_extents(e2fsck_t ctx,
                                        struct problem_context *pctx,
                                        struct extent_tree_info *eti,
                                        struct ext2_extent_info *info);
+errcode_t e2fsck_read_extents(e2fsck_t ctx, struct extent_list *extents);
+errcode_t e2fsck_rewrite_extent_tree(e2fsck_t ctx,
+                                    struct extent_list *extents);
 
 /* journal.c */
 extern errcode_t e2fsck_check_ext3_journal(e2fsck_t ctx);
@@ -504,6 +583,7 @@ extern void set_up_logging(e2fsck_t ctx);
 
 /* quota.c */
 extern void e2fsck_hide_quota(e2fsck_t ctx);
+extern void e2fsck_validate_quota_inodes(e2fsck_t ctx);
 
 /* pass1.c */
 extern errcode_t e2fsck_setup_icount(e2fsck_t ctx, const char *icount_name,
@@ -522,10 +602,6 @@ extern void e2fsck_intercept_block_allocations(e2fsck_t ctx);
 /* pass2.c */
 extern int e2fsck_process_bad_inode(e2fsck_t ctx, ext2_ino_t dir,
                                    ext2_ino_t ino, char *buf);
-extern int get_filename_hash(ext2_filsys fs, int encrypted, int version,
-                            const char *name, int len,
-                            ext2_dirhash_t *ret_hash,
-                            ext2_dirhash_t *ret_minor_hash);
 
 /* pass3.c */
 extern int e2fsck_reconnect_file(e2fsck_t ctx, ext2_ino_t inode);
@@ -574,7 +650,7 @@ int check_backup_super_block(e2fsck_t ctx);
 void check_resize_inode(e2fsck_t ctx);
 
 /* util.c */
-extern void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned int size,
+extern void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned long size,
                                    const char *description);
 extern int ask(e2fsck_t ctx, const char * string, int def);
 extern int ask_yn(e2fsck_t ctx, const char * string, int def);
@@ -586,7 +662,7 @@ extern void log_err(e2fsck_t ctx, const char *fmt, ...)
 extern void e2fsck_read_bitmaps(e2fsck_t ctx);
 extern void e2fsck_write_bitmaps(e2fsck_t ctx);
 extern void preenhalt(e2fsck_t ctx);
-extern char *string_copy(e2fsck_t ctx, const char *str, int len);
+extern char *string_copy(e2fsck_t ctx, const char *str, size_t len);
 extern int fs_proc_check(const char *fs_name);
 extern int check_for_modules(const char *fs_name);
 #ifdef RESOURCE_TRACK
@@ -618,7 +694,8 @@ extern blk64_t get_backup_sb(e2fsck_t ctx, ext2_filsys fs,
                           const char *name, io_manager manager);
 extern int ext2_file_type(unsigned int mode);
 extern int write_all(int fd, char *buf, size_t count);
-void dump_mmp_msg(struct mmp_struct *mmp, const char *msg);
+void dump_mmp_msg(struct mmp_struct *mmp, const char *fmt, ...)
+       E2FSCK_ATTR((format(printf, 2, 3)));
 errcode_t e2fsck_mmp_update(ext2_filsys fs);
 
 extern void e2fsck_set_bitmap_type(ext2_filsys fs,
@@ -646,4 +723,7 @@ unsigned long long get_memory_size(void);
 extern void e2fsck_clear_progbar(e2fsck_t ctx);
 extern int e2fsck_simple_progress(e2fsck_t ctx, const char *label,
                                  float percent, unsigned int dpynum);
+
+#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
+
 #endif /* _E2FSCK_H */
index fcfaf49..aa5d7d7 100644 (file)
  * checked, its bit is set in the block_ea_map bitmap.
  */
 struct ea_refcount_el {
-       blk64_t ea_blk;
-       int     ea_count;
+       /* ea_key could either be an inode number or block number. */
+       ea_key_t        ea_key;
+       ea_value_t      ea_value;
 };
 
 struct ea_refcount {
-       blk_t           count;
-       blk_t           size;
-       blk_t           cursor;
+       size_t          count;
+       size_t          size;
+       size_t          cursor;
        struct ea_refcount_el   *list;
 };
 
@@ -46,29 +47,27 @@ void ea_refcount_free(ext2_refcount_t refcount)
        ext2fs_free_mem(&refcount);
 }
 
-errcode_t ea_refcount_create(int size, ext2_refcount_t *ret)
+errcode_t ea_refcount_create(size_t size, ext2_refcount_t *ret)
 {
        ext2_refcount_t refcount;
        errcode_t       retval;
        size_t          bytes;
 
-       retval = ext2fs_get_mem(sizeof(struct ea_refcount), &refcount);
+       retval = ext2fs_get_memzero(sizeof(struct ea_refcount), &refcount);
        if (retval)
                return retval;
-       memset(refcount, 0, sizeof(struct ea_refcount));
 
        if (!size)
                size = 500;
        refcount->size = size;
-       bytes = (size_t) (size * sizeof(struct ea_refcount_el));
+       bytes = size * sizeof(struct ea_refcount_el);
 #ifdef DEBUG
-       printf("Refcount allocated %d entries, %d bytes.\n",
+       printf("Refcount allocated %zu entries, %zu bytes.\n",
               refcount->size, bytes);
 #endif
-       retval = ext2fs_get_mem(bytes, &refcount->list);
+       retval = ext2fs_get_memzero(bytes, &refcount->list);
        if (retval)
                goto errout;
-       memset(refcount->list, 0, bytes);
 
        refcount->count = 0;
        refcount->cursor = 0;
@@ -92,14 +91,14 @@ static void refcount_collapse(ext2_refcount_t refcount)
 
        list = refcount->list;
        for (i = 0, j = 0; i < refcount->count; i++) {
-               if (list[i].ea_count) {
+               if (list[i].ea_value) {
                        if (i != j)
                                list[j] = list[i];
                        j++;
                }
        }
 #if defined(DEBUG) || defined(TEST_PROGRAM)
-       printf("Refcount_collapse: size was %d, now %d\n",
+       printf("Refcount_collapse: size was %zu, now %d\n",
               refcount->count, j);
 #endif
        refcount->count = j;
@@ -111,11 +110,11 @@ static void refcount_collapse(ext2_refcount_t refcount)
  *     specified position.
  */
 static struct ea_refcount_el *insert_refcount_el(ext2_refcount_t refcount,
-                                                blk64_t blk, int pos)
+                                                ea_key_t ea_key, int pos)
 {
        struct ea_refcount_el   *el;
        errcode_t               retval;
-       blk_t                   new_size = 0;
+       size_t                  new_size = 0;
        int                     num;
 
        if (refcount->count >= refcount->size) {
@@ -141,8 +140,8 @@ static struct ea_refcount_el *insert_refcount_el(ext2_refcount_t refcount,
        }
        refcount->count++;
        el = &refcount->list[pos];
-       el->ea_count = 0;
-       el->ea_blk = blk;
+       el->ea_key = ea_key;
+       el->ea_value = 0;
        return el;
 }
 
@@ -153,7 +152,7 @@ static struct ea_refcount_el *insert_refcount_el(ext2_refcount_t refcount,
  *     and we can't find an entry, create one in the sorted list.
  */
 static struct ea_refcount_el *get_refcount_el(ext2_refcount_t refcount,
-                                             blk64_t blk, int create)
+                                             ea_key_t ea_key, int create)
 {
        int     low, high, mid;
 
@@ -163,11 +162,11 @@ retry:
        low = 0;
        high = (int) refcount->count-1;
        if (create && ((refcount->count == 0) ||
-                      (blk > refcount->list[high].ea_blk))) {
+                      (ea_key > refcount->list[high].ea_key))) {
                if (refcount->count >= refcount->size)
                        refcount_collapse(refcount);
 
-               return insert_refcount_el(refcount, blk,
+               return insert_refcount_el(refcount, ea_key,
                                          (unsigned) refcount->count);
        }
        if (refcount->count == 0)
@@ -175,18 +174,18 @@ retry:
 
        if (refcount->cursor >= refcount->count)
                refcount->cursor = 0;
-       if (blk == refcount->list[refcount->cursor].ea_blk)
+       if (ea_key == refcount->list[refcount->cursor].ea_key)
                return &refcount->list[refcount->cursor++];
 #ifdef DEBUG
-       printf("Non-cursor get_refcount_el: %u\n", blk);
+       printf("Non-cursor get_refcount_el: %u\n", ea_key);
 #endif
        while (low <= high) {
                mid = (low+high)/2;
-               if (blk == refcount->list[mid].ea_blk) {
+               if (ea_key == refcount->list[mid].ea_key) {
                        refcount->cursor = mid+1;
                        return &refcount->list[mid];
                }
-               if (blk < refcount->list[mid].ea_blk)
+               if (ea_key < refcount->list[mid].ea_key)
                        high = mid-1;
                else
                        low = mid+1;
@@ -201,69 +200,72 @@ retry:
                        if (refcount->count < refcount->size)
                                goto retry;
                }
-               return insert_refcount_el(refcount, blk, low);
+               return insert_refcount_el(refcount, ea_key, low);
        }
        return 0;
 }
 
-errcode_t ea_refcount_fetch(ext2_refcount_t refcount, blk64_t blk,
-                               int *ret)
+errcode_t ea_refcount_fetch(ext2_refcount_t refcount, ea_key_t ea_key,
+                           ea_value_t *ret)
 {
        struct ea_refcount_el   *el;
 
-       el = get_refcount_el(refcount, blk, 0);
+       el = get_refcount_el(refcount, ea_key, 0);
        if (!el) {
                *ret = 0;
                return 0;
        }
-       *ret = el->ea_count;
+       *ret = el->ea_value;
        return 0;
 }
 
-errcode_t ea_refcount_increment(ext2_refcount_t refcount, blk64_t blk, int *ret)
+errcode_t ea_refcount_increment(ext2_refcount_t refcount, ea_key_t ea_key,
+                               ea_value_t *ret)
 {
        struct ea_refcount_el   *el;
 
-       el = get_refcount_el(refcount, blk, 1);
+       el = get_refcount_el(refcount, ea_key, 1);
        if (!el)
                return EXT2_ET_NO_MEMORY;
-       el->ea_count++;
+       el->ea_value++;
 
        if (ret)
-               *ret = el->ea_count;
+               *ret = el->ea_value;
        return 0;
 }
 
-errcode_t ea_refcount_decrement(ext2_refcount_t refcount, blk64_t blk, int *ret)
+errcode_t ea_refcount_decrement(ext2_refcount_t refcount, ea_key_t ea_key,
+                               ea_value_t *ret)
 {
        struct ea_refcount_el   *el;
 
-       el = get_refcount_el(refcount, blk, 0);
-       if (!el || el->ea_count == 0)
+       el = get_refcount_el(refcount, ea_key, 0);
+       if (!el || el->ea_value == 0)
                return EXT2_ET_INVALID_ARGUMENT;
 
-       el->ea_count--;
+       el->ea_value--;
 
        if (ret)
-               *ret = el->ea_count;
+               *ret = el->ea_value;
        return 0;
 }
 
-errcode_t ea_refcount_store(ext2_refcount_t refcount, blk64_t blk, int count)
+errcode_t ea_refcount_store(ext2_refcount_t refcount, ea_key_t ea_key,
+                           ea_value_t ea_value)
 {
        struct ea_refcount_el   *el;
 
        /*
         * Get the refcount element
         */
-       el = get_refcount_el(refcount, blk, count ? 1 : 0);
+       el = get_refcount_el(refcount, ea_key, ea_value ? 1 : 0);
        if (!el)
-               return count ? EXT2_ET_NO_MEMORY : 0;
-       el->ea_count = count;
+               return ea_value ? EXT2_ET_NO_MEMORY : 0;
+       el->ea_value = ea_value;
        return 0;
 }
 
-blk_t ext2fs_get_refcount_size(ext2_refcount_t refcount)
+size_t ext2fs_get_refcount_size(ext2_refcount_t refcount)
 {
        if (!refcount)
                return 0;
@@ -276,9 +278,8 @@ void ea_refcount_intr_begin(ext2_refcount_t refcount)
        refcount->cursor = 0;
 }
 
-
-blk64_t ea_refcount_intr_next(ext2_refcount_t refcount,
-                               int *ret)
+ea_key_t ea_refcount_intr_next(ext2_refcount_t refcount,
+                               ea_value_t *ret)
 {
        struct ea_refcount_el   *list;
 
@@ -286,10 +287,10 @@ blk64_t ea_refcount_intr_next(ext2_refcount_t refcount,
                if (refcount->cursor >= refcount->count)
                        return 0;
                list = refcount->list;
-               if (list[refcount->cursor].ea_count) {
+               if (list[refcount->cursor].ea_value) {
                        if (ret)
-                               *ret = list[refcount->cursor].ea_count;
-                       return list[refcount->cursor++].ea_blk;
+                               *ret = list[refcount->cursor].ea_value;
+                       return list[refcount->cursor++].ea_key;
                }
                refcount->cursor++;
        }
@@ -309,11 +310,11 @@ errcode_t ea_refcount_validate(ext2_refcount_t refcount, FILE *out)
                return EXT2_ET_INVALID_ARGUMENT;
        }
        for (i=1; i < refcount->count; i++) {
-               if (refcount->list[i-1].ea_blk >= refcount->list[i].ea_blk) {
+               if (refcount->list[i-1].ea_key >= refcount->list[i].ea_key) {
                        fprintf(out,
-                               "%s: list[%d].blk=%llu, list[%d].blk=%llu\n",
-                               bad, i-1, refcount->list[i-1].ea_blk,
-                               i, refcount->list[i].ea_blk);
+                               "%s: list[%d].ea_key=%llu, list[%d].ea_key=%llu\n",
+                               bad, i-1, refcount->list[i-1].ea_key, i,
+                               refcount->list[i].ea_key);
                        ret = EXT2_ET_INVALID_ARGUMENT;
                }
        }
@@ -370,8 +371,9 @@ int main(int argc, char **argv)
 {
        int     i = 0;
        ext2_refcount_t refcount;
-       int             size, arg;
-       blk64_t         blk;
+       size_t          size;
+       ea_key_t        ea_key;
+       ea_value_t      arg;
        errcode_t       retval;
 
        while (1) {
@@ -383,10 +385,10 @@ int main(int argc, char **argv)
                        retval = ea_refcount_create(size, &refcount);
                        if (retval) {
                                com_err("ea_refcount_create", retval,
-                                       "while creating size %d", size);
+                                       "while creating size %zu", size);
                                exit(1);
                        } else
-                               printf("Creating refcount with size %d\n",
+                               printf("Creating refcount with size %zu\n",
                                       size);
                        break;
                case BCODE_FREE:
@@ -395,43 +397,46 @@ int main(int argc, char **argv)
                        printf("Freeing refcount\n");
                        break;
                case BCODE_STORE:
-                       blk = (blk_t) bcode_program[i++];
+                       ea_key = (size_t) bcode_program[i++];
                        arg = bcode_program[i++];
-                       printf("Storing blk %llu with value %d\n", blk, arg);
-                       retval = ea_refcount_store(refcount, blk, arg);
+                       printf("Storing ea_key %llu with value %llu\n", ea_key,
+                              arg);
+                       retval = ea_refcount_store(refcount, ea_key, arg);
                        if (retval)
                                com_err("ea_refcount_store", retval,
-                                       "while storing blk %llu", blk);
+                                       "while storing ea_key %llu", ea_key);
                        break;
                case BCODE_FETCH:
-                       blk = (blk_t) bcode_program[i++];
-                       retval = ea_refcount_fetch(refcount, blk, &arg);
+                       ea_key = (size_t) bcode_program[i++];
+                       retval = ea_refcount_fetch(refcount, ea_key, &arg);
                        if (retval)
                                com_err("ea_refcount_fetch", retval,
-                                       "while fetching blk %llu", blk);
+                                       "while fetching ea_key %llu", ea_key);
                        else
-                               printf("bcode_fetch(%llu) returns %d\n",
-                                      blk, arg);
+                               printf("bcode_fetch(%llu) returns %llu\n",
+                                      ea_key, arg);
                        break;
                case BCODE_INCR:
-                       blk = (blk_t) bcode_program[i++];
-                       retval = ea_refcount_increment(refcount, blk, &arg);
+                       ea_key = (size_t) bcode_program[i++];
+                       retval = ea_refcount_increment(refcount, ea_key, &arg);
                        if (retval)
                                com_err("ea_refcount_increment", retval,
-                                       "while incrementing blk %llu", blk);
+                                       "while incrementing ea_key %llu",
+                                       ea_key);
                        else
-                               printf("bcode_increment(%llu) returns %d\n",
-                                      blk, arg);
+                               printf("bcode_increment(%llu) returns %llu\n",
+                                      ea_key, arg);
                        break;
                case BCODE_DECR:
-                       blk = (blk_t) bcode_program[i++];
-                       retval = ea_refcount_decrement(refcount, blk, &arg);
+                       ea_key = (size_t) bcode_program[i++];
+                       retval = ea_refcount_decrement(refcount, ea_key, &arg);
                        if (retval)
                                com_err("ea_refcount_decrement", retval,
-                                       "while decrementing blk %llu", blk);
+                                       "while decrementing ea_key %llu",
+                                       ea_key);
                        else
-                               printf("bcode_decrement(%llu) returns %d\n",
-                                      blk, arg);
+                               printf("bcode_decrement(%llu) returns %llu\n",
+                                      ea_key, arg);
                        break;
                case BCODE_VALIDATE:
                        retval = ea_refcount_validate(refcount, stderr);
@@ -444,10 +449,11 @@ int main(int argc, char **argv)
                case BCODE_LIST:
                        ea_refcount_intr_begin(refcount);
                        while (1) {
-                               blk = ea_refcount_intr_next(refcount, &arg);
-                               if (!blk)
+                               ea_key = ea_refcount_intr_next(refcount, &arg);
+                               if (!ea_key)
                                        break;
-                               printf("\tblk=%llu, count=%d\n", blk, arg);
+                               printf("\tea_key=%llu, count=%llu\n", ea_key,
+                                      arg);
                        }
                        break;
                case BCODE_COLLAPSE:
index a3bfd46..7aea7b6 100644 (file)
@@ -44,12 +44,11 @@ empty_dir_info init_empty_dir(e2fsck_t ctx)
        empty_dir_info  edi;
        errcode_t       retval;
 
-       edi = malloc(sizeof(struct empty_dir_info_struct));
-       if (!edi)
+       edi = e2fsck_allocate_memzero(ctx, sizeof(struct empty_dir_info_struct),
+                                     "empty dir info");
+       if (retval)
                return NULL;
 
-       memset(edi, 0, sizeof(struct empty_dir_info_struct));
-
        retval = ext2fs_init_dblist(ctx->fs, &edi->empty_dblist);
        if (retval)
                goto errout;
@@ -83,7 +82,7 @@ void free_empty_dirblock(empty_dir_info edi)
                ext2fs_free_inode_bitmap(edi->dir_map);
 
        memset(edi, 0, sizeof(struct empty_dir_info_struct));
-       free(edi);
+       ext2fs_free_mem(&edi);
 }
 
 void add_empty_dirblock(empty_dir_info edi,
@@ -182,13 +181,14 @@ void process_empty_dirblock(e2fsck_t ctx, empty_dir_info edi)
        if (!edi)
                return;
 
-       edi->block_buf = malloc(ctx->fs->blocksize * 3);
+       retval = ext2f_get_mem(ctx, ctx->fs->blocksize * 3,
+                              &edi->block_buf);
 
        if (edi->block_buf) {
                (void) ext2fs_dblist_iterate2(edi->empty_dblist,
                                              fix_directory, &edi);
        }
-       free(edi->block_buf);
+       ext2fs_free_mem(&edi->block_buf);
        free_empty_dirblock(edi);
 }
 
diff --git a/e2fsck/encrypted_files.c b/e2fsck/encrypted_files.c
new file mode 100644 (file)
index 0000000..16be2d6
--- /dev/null
@@ -0,0 +1,458 @@
+/*
+ * encrypted_files.c --- save information about encrypted files
+ *
+ * Copyright 2019 Google LLC
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+/*
+ * e2fsck pass 1 (inode table scan) creates a map from inode number to
+ * encryption policy for all encrypted inodes.  But it's optimized so that the
+ * full xattrs aren't saved but rather only 32-bit "policy IDs", since usually
+ * many inodes share the same encryption policy.  This requires also maintaining
+ * a second map, from policy to policy ID.  See add_encrypted_file().
+ *
+ * We also use run-length encoding to save memory when many adjacent inodes
+ * share the same encryption policy, which is often the case too.
+ *
+ * e2fsck pass 2 (directory structure check) uses the inode => policy ID map to
+ * verify that all regular files, directories, and symlinks in encrypted
+ * directories use the directory's encryption policy.
+ */
+
+#include "config.h"
+
+#include "e2fsck.h"
+#include "problem.h"
+#include "ext2fs/rbtree.h"
+
+#define FSCRYPT_KEY_DESCRIPTOR_SIZE    8
+#define FSCRYPT_KEY_IDENTIFIER_SIZE    16
+#define FS_KEY_DERIVATION_NONCE_SIZE   16
+
+struct fscrypt_context_v1 {
+       __u8 version;
+       __u8 contents_encryption_mode;
+       __u8 filenames_encryption_mode;
+       __u8 flags;
+       __u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
+       __u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+};
+
+struct fscrypt_context_v2 {
+       __u8 version;
+       __u8 contents_encryption_mode;
+       __u8 filenames_encryption_mode;
+       __u8 flags;
+       __u8 __reserved[4];
+       __u8 master_key_identifier[FSCRYPT_KEY_IDENTIFIER_SIZE];
+       __u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+};
+
+/* On-disk format of encryption xattr */
+union fscrypt_context {
+       __u8 version;
+       struct fscrypt_context_v1 v1;
+       struct fscrypt_context_v2 v2;
+};
+
+struct fscrypt_policy_v1 {
+       __u8 version;
+       __u8 contents_encryption_mode;
+       __u8 filenames_encryption_mode;
+       __u8 flags;
+       __u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
+};
+
+struct fscrypt_policy_v2 {
+       __u8 version;
+       __u8 contents_encryption_mode;
+       __u8 filenames_encryption_mode;
+       __u8 flags;
+       __u8 __reserved[4];
+       __u8 master_key_identifier[FSCRYPT_KEY_IDENTIFIER_SIZE];
+};
+
+/* The encryption "policy" is the fscrypt_context excluding the nonce. */
+union fscrypt_policy {
+       __u8 version;
+       struct fscrypt_policy_v1 v1;
+       struct fscrypt_policy_v2 v2;
+};
+
+/* A range of inodes which share the same encryption policy */
+struct encrypted_file_range {
+       ext2_ino_t              first_ino;
+       ext2_ino_t              last_ino;
+       __u32                   policy_id;
+};
+
+/* Information about the encrypted files which have been seen so far */
+struct encrypted_file_info {
+       /*
+        * Map from inode number to encryption policy ID, implemented as a
+        * sorted array of inode ranges, each of which shares the same policy.
+        * Inodes are added in order of increasing inode number.
+        *
+        * Freed after pass 2.
+        */
+       struct encrypted_file_range     *file_ranges;
+       size_t                          file_ranges_count;
+       size_t                          file_ranges_capacity;
+
+       /*
+        * Map from encryption policy to encryption policy ID, for the unique
+        * encryption policies that have been seen so far.  next_policy_id is
+        * the next available ID, starting at 0.
+        *
+        * Freed after pass 1.
+        */
+       struct rb_root          policies;
+       __u32                   next_policy_id;
+};
+
+/* Entry in encrypted_file_info::policies */
+struct policy_map_entry {
+       union fscrypt_policy    policy;
+       __u32                   policy_id;
+       struct rb_node          node;
+};
+
+static int cmp_fscrypt_policies(e2fsck_t ctx, const union fscrypt_policy *a,
+                               const union fscrypt_policy *b)
+{
+       if (a->version != b->version)
+               return (int)a->version - (int)b->version;
+
+       switch (a->version) {
+       case 1:
+               return memcmp(a, b, sizeof(a->v1));
+       case 2:
+               return memcmp(a, b, sizeof(a->v2));
+       }
+       fatal_error(ctx, "Unhandled encryption policy version");
+       return 0;
+}
+
+/* Read an inode's encryption xattr. */
+static errcode_t read_encryption_xattr(e2fsck_t ctx, ext2_ino_t ino,
+                                      void **value, size_t *value_len)
+{
+       struct ext2_xattr_handle *h;
+       errcode_t retval;
+
+       retval = ext2fs_xattrs_open(ctx->fs, ino, &h);
+       if (retval)
+               return retval;
+
+       retval = ext2fs_xattrs_read(h);
+       if (retval == 0)
+               retval = ext2fs_xattr_get(h, "c", value, value_len);
+
+       ext2fs_xattrs_close(&h);
+       return retval;
+}
+
+/*
+ * Convert an fscrypt_context to an fscrypt_policy.  Returns 0,
+ * CORRUPT_ENCRYPTION_POLICY, or UNRECOGNIZED_ENCRYPTION_POLICY.
+ */
+static __u32 fscrypt_context_to_policy(const void *xattr, size_t xattr_size,
+                                      union fscrypt_policy *policy_u)
+{
+       const union fscrypt_context *ctx_u = xattr;
+
+       if (xattr_size < 1)
+               return CORRUPT_ENCRYPTION_POLICY;
+       switch (ctx_u->version) {
+       case 0:
+               return CORRUPT_ENCRYPTION_POLICY;
+       case 1: {
+               struct fscrypt_policy_v1 *policy = &policy_u->v1;
+               const struct fscrypt_context_v1 *ctx = &ctx_u->v1;
+
+               if (xattr_size != sizeof(*ctx))
+                       return CORRUPT_ENCRYPTION_POLICY;
+               policy->version = ctx->version;
+               policy->contents_encryption_mode =
+                       ctx->contents_encryption_mode;
+               policy->filenames_encryption_mode =
+                       ctx->filenames_encryption_mode;
+               policy->flags = ctx->flags;
+               memcpy(policy->master_key_descriptor,
+                      ctx->master_key_descriptor,
+                      sizeof(policy->master_key_descriptor));
+               return 0;
+       }
+       case 2: {
+               struct fscrypt_policy_v2 *policy = &policy_u->v2;
+               const struct fscrypt_context_v2 *ctx = &ctx_u->v2;
+
+               if (xattr_size != sizeof(*ctx))
+                       return CORRUPT_ENCRYPTION_POLICY;
+               policy->version = ctx->version;
+               policy->contents_encryption_mode =
+                       ctx->contents_encryption_mode;
+               policy->filenames_encryption_mode =
+                       ctx->filenames_encryption_mode;
+               policy->flags = ctx->flags;
+               memcpy(policy->__reserved, ctx->__reserved,
+                      sizeof(policy->__reserved));
+               memcpy(policy->master_key_identifier,
+                      ctx->master_key_identifier,
+                      sizeof(policy->master_key_identifier));
+               return 0;
+       }
+       }
+       return UNRECOGNIZED_ENCRYPTION_POLICY;
+}
+
+/*
+ * Read an inode's encryption xattr and get/allocate its encryption policy ID,
+ * or alternatively use one of the special IDs NO_ENCRYPTION_POLICY,
+ * CORRUPT_ENCRYPTION_POLICY, or UNRECOGNIZED_ENCRYPTION_POLICY.
+ *
+ * Returns nonzero only if out of memory.
+ */
+static errcode_t get_encryption_policy_id(e2fsck_t ctx, ext2_ino_t ino,
+                                         __u32 *policy_id_ret)
+{
+       struct encrypted_file_info *info = ctx->encrypted_files;
+       struct rb_node **new = &info->policies.rb_node;
+       struct rb_node *parent = NULL;
+       void *xattr;
+       size_t xattr_size;
+       union fscrypt_policy policy;
+       __u32 policy_id;
+       struct policy_map_entry *entry;
+       errcode_t retval;
+
+       retval = read_encryption_xattr(ctx, ino, &xattr, &xattr_size);
+       if (retval == EXT2_ET_NO_MEMORY)
+               return retval;
+       if (retval) {
+               *policy_id_ret = NO_ENCRYPTION_POLICY;
+               return 0;
+       }
+
+       /* Translate the xattr to an fscrypt_policy, if possible. */
+       policy_id = fscrypt_context_to_policy(xattr, xattr_size, &policy);
+       ext2fs_free_mem(&xattr);
+       if (policy_id != 0)
+               goto out;
+
+       /* Check if the policy was already seen. */
+       while (*new) {
+               int res;
+
+               parent = *new;
+               entry = ext2fs_rb_entry(parent, struct policy_map_entry, node);
+               res = cmp_fscrypt_policies(ctx, &policy, &entry->policy);
+               if (res < 0) {
+                       new = &parent->rb_left;
+               } else if (res > 0) {
+                       new = &parent->rb_right;
+               } else {
+                       /* Policy already seen.  Use existing ID. */
+                       policy_id = entry->policy_id;
+                       goto out;
+               }
+       }
+
+       /* First time seeing this policy.  Allocate a new policy ID. */
+       retval = ext2fs_get_mem(sizeof(*entry), &entry);
+       if (retval)
+               goto out;
+       policy_id = info->next_policy_id++;
+       entry->policy_id = policy_id;
+       entry->policy = policy;
+       ext2fs_rb_link_node(&entry->node, parent, new);
+       ext2fs_rb_insert_color(&entry->node, &info->policies);
+out:
+       *policy_id_ret = policy_id;
+       return retval;
+}
+
+static int handle_nomem(e2fsck_t ctx, struct problem_context *pctx,
+                       size_t size_needed)
+{
+       pctx->num = size_needed;
+       fix_problem(ctx, PR_1_ALLOCATE_ENCRYPTED_INODE_LIST, pctx);
+       /* Should never get here */
+       ctx->flags |= E2F_FLAG_ABORT;
+       return 0;
+}
+
+static int append_ino_and_policy_id(e2fsck_t ctx, struct problem_context *pctx,
+                                   ext2_ino_t ino, __u32 policy_id)
+{
+       struct encrypted_file_info *info = ctx->encrypted_files;
+       struct encrypted_file_range *range;
+
+       /* See if we can just extend the last range. */
+       if (info->file_ranges_count > 0) {
+               range = &info->file_ranges[info->file_ranges_count - 1];
+
+               if (ino <= range->last_ino) {
+                       /* Should never get here */
+                       fatal_error(ctx,
+                                   "Encrypted inodes processed out of order");
+               }
+
+               if (ino == range->last_ino + 1 &&
+                   policy_id == range->policy_id) {
+                       range->last_ino++;
+                       return 0;
+               }
+       }
+       /* Nope, a new range is needed. */
+
+       if (info->file_ranges_count == info->file_ranges_capacity) {
+               /* Double the capacity by default. */
+               size_t new_capacity = info->file_ranges_capacity * 2;
+
+               /* ... but go from 0 to 128 right away. */
+               if (new_capacity < 128)
+                       new_capacity = 128;
+
+               /* We won't need more than the filesystem's inode count. */
+               if (new_capacity > ctx->fs->super->s_inodes_count)
+                       new_capacity = ctx->fs->super->s_inodes_count;
+
+               /* To be safe, ensure the capacity really increases. */
+               if (new_capacity < info->file_ranges_capacity + 1)
+                       new_capacity = info->file_ranges_capacity + 1;
+
+               if (ext2fs_resize_mem(info->file_ranges_capacity *
+                                       sizeof(*range),
+                                     new_capacity * sizeof(*range),
+                                     &info->file_ranges) != 0)
+                       return handle_nomem(ctx, pctx,
+                                           new_capacity * sizeof(*range));
+
+               info->file_ranges_capacity = new_capacity;
+       }
+       range = &info->file_ranges[info->file_ranges_count++];
+       range->first_ino = ino;
+       range->last_ino = ino;
+       range->policy_id = policy_id;
+       return 0;
+}
+
+/*
+ * Handle an inode that has EXT4_ENCRYPT_FL set during pass 1.  Normally this
+ * just finds the unique ID that identifies the inode's encryption policy
+ * (allocating a new ID if needed), and adds the inode number and its policy ID
+ * to the encrypted_file_info so that it's available in pass 2.
+ *
+ * But this also handles:
+ * - If the inode doesn't have an encryption xattr at all, offer to clear the
+ *   encrypt flag.
+ * - If the encryption xattr is clearly corrupt, tell the caller that the whole
+ *   inode should be cleared.
+ * - To be future-proof: if the encryption xattr has an unrecognized version
+ *   number, it *might* be valid, so we don't consider it invalid.  But we can't
+ *   do much with it, so give all such policies the same ID,
+ *   UNRECOGNIZED_ENCRYPTION_POLICY.
+ *
+ * Returns -1 if the inode should be cleared, otherwise 0.
+ */
+int add_encrypted_file(e2fsck_t ctx, struct problem_context *pctx)
+{
+       struct encrypted_file_info *info = ctx->encrypted_files;
+       ext2_ino_t ino = pctx->ino;
+       __u32 policy_id;
+
+       /* Allocate the encrypted_file_info if needed. */
+       if (info == NULL) {
+               if (ext2fs_get_memzero(sizeof(*info), &info) != 0)
+                       return handle_nomem(ctx, pctx, sizeof(*info));
+               ctx->encrypted_files = info;
+       }
+
+       /* Get a unique ID for this inode's encryption policy. */
+       if (get_encryption_policy_id(ctx, ino, &policy_id) != 0)
+               return handle_nomem(ctx, pctx, 0 /* unknown size */);
+       if (policy_id == NO_ENCRYPTION_POLICY) {
+               if (fix_problem(ctx, PR_1_MISSING_ENCRYPTION_XATTR, pctx)) {
+                       pctx->inode->i_flags &= ~EXT4_ENCRYPT_FL;
+                       e2fsck_write_inode(ctx, ino, pctx->inode, "pass1");
+               }
+               return 0;
+       } else if (policy_id == CORRUPT_ENCRYPTION_POLICY) {
+               if (fix_problem(ctx, PR_1_CORRUPT_ENCRYPTION_XATTR, pctx))
+                       return -1;
+               return 0;
+       }
+
+       /* Store this ino => policy_id mapping in the encrypted_file_info. */
+       return append_ino_and_policy_id(ctx, pctx, ino, policy_id);
+}
+
+/*
+ * Find the ID of an inode's encryption policy, using the information saved
+ * earlier.
+ *
+ * If the inode is encrypted, returns the policy ID or
+ * UNRECOGNIZED_ENCRYPTION_POLICY.  Else, returns NO_ENCRYPTION_POLICY.
+ */
+__u32 find_encryption_policy(e2fsck_t ctx, ext2_ino_t ino)
+{
+       const struct encrypted_file_info *info = ctx->encrypted_files;
+       size_t l, r;
+
+       if (info == NULL)
+               return NO_ENCRYPTION_POLICY;
+       l = 0;
+       r = info->file_ranges_count;
+       while (l < r) {
+               size_t m = l + (r - l) / 2;
+               const struct encrypted_file_range *range =
+                       &info->file_ranges[m];
+
+               if (ino < range->first_ino)
+                       r = m;
+               else if (ino > range->last_ino)
+                       l = m + 1;
+               else
+                       return range->policy_id;
+       }
+       return NO_ENCRYPTION_POLICY;
+}
+
+/* Destroy ctx->encrypted_files->policies */
+void destroy_encryption_policy_map(e2fsck_t ctx)
+{
+       struct encrypted_file_info *info = ctx->encrypted_files;
+
+       if (info) {
+               struct rb_root *policies = &info->policies;
+
+               while (!ext2fs_rb_empty_root(policies)) {
+                       struct policy_map_entry *entry;
+
+                       entry = ext2fs_rb_entry(policies->rb_node,
+                                               struct policy_map_entry, node);
+                       ext2fs_rb_erase(&entry->node, policies);
+                       ext2fs_free_mem(&entry);
+               }
+               info->next_policy_id = 0;
+       }
+}
+
+/* Destroy ctx->encrypted_files */
+void destroy_encrypted_file_info(e2fsck_t ctx)
+{
+       struct encrypted_file_info *info = ctx->encrypted_files;
+
+       if (info) {
+               destroy_encryption_policy_map(ctx);
+               ext2fs_free_mem(&info->file_ranges);
+               ext2fs_free_mem(&info);
+               ctx->encrypted_files = NULL;
+       }
+}
index bdb62c3..9d17e44 100644 (file)
@@ -31,6 +31,7 @@ int main(int argc, char **argv)
        int     nblocks, blocksize;
        int     fd;
        char    *block;
+       errcode_t retval;
        int     ret;
 
        if (argc != 4)
@@ -45,13 +46,12 @@ int main(int argc, char **argv)
                exit(1);
        }
 
-       block = malloc(blocksize);
-       if (block == 0) {
+       retval = ext2fs_get_memzero(blocksize, &block);
+       if (retval) {
                fprintf(stderr, _("Couldn't allocate block buffer (size=%d)\n"),
                        blocksize);
                exit(1);
        }
-       memset(block, 0, blocksize);
 
        fd = open(filename, O_RDWR);
        if (fd < 0) {
@@ -78,5 +78,6 @@ int main(int argc, char **argv)
                perror("read");
                exit(1);
        }
-       exit(0);
+       ext2fs_free_mem(&block);
+       return(0);
 }
index c4167e1..600dbc9 100644 (file)
@@ -58,16 +58,6 @@ int e2fsck_ino_will_be_rebuilt(e2fsck_t ctx, ext2_ino_t ino)
        return ext2fs_test_inode_bitmap2(ctx->inodes_to_rebuild, ino);
 }
 
-struct extent_list {
-       blk64_t blocks_freed;
-       struct ext2fs_extent *extents;
-       unsigned int count;
-       unsigned int size;
-       unsigned int ext_read;
-       errcode_t retval;
-       ext2_ino_t ino;
-};
-
 static errcode_t load_extents(e2fsck_t ctx, struct extent_list *list)
 {
        ext2_filsys             fs = ctx->fs;
@@ -171,7 +161,8 @@ static int find_blocks(ext2_filsys fs, blk64_t *blocknr, e2_blkcnt_t blockcnt,
                                             list->count - 1;
                blk64_t end = last->e_len + 1;
 
-               if (last->e_pblk + last->e_len == *blocknr &&
+               if (last->e_lblk + last->e_len == (__u64) blockcnt &&
+                   last->e_pblk + last->e_len == *blocknr &&
                    end < (1ULL << 32)) {
                        last->e_len++;
 #ifdef DEBUG
@@ -205,60 +196,40 @@ static int find_blocks(ext2_filsys fs, blk64_t *blocknr, e2_blkcnt_t blockcnt,
        return 0;
 }
 
-static errcode_t rebuild_extent_tree(e2fsck_t ctx, struct extent_list *list,
-                                    ext2_ino_t ino)
+errcode_t rewrite_extent_replay(e2fsck_t ctx, struct extent_list *list,
+                                      struct ext2_inode_large *inode)
 {
-       struct ext2_inode       inode;
        errcode_t               retval;
        ext2_extent_handle_t    handle;
        unsigned int            i, ext_written;
        struct ext2fs_extent    *ex, extent;
+       blk64_t                 start_val, delta, blkcount;
 
-       list->count = 0;
-       list->blocks_freed = 0;
-       list->ino = ino;
-       list->ext_read = 0;
-       e2fsck_read_inode(ctx, ino, &inode, "rebuild_extents");
-
-       /* Skip deleted inodes and inline data files */
-       if (inode.i_links_count == 0 ||
-           inode.i_flags & EXT4_INLINE_DATA_FL)
-               return 0;
-
-       /* Collect lblk->pblk mappings */
-       if (inode.i_flags & EXT4_EXTENTS_FL) {
-               retval = load_extents(ctx, list);
-               if (retval)
-                       goto err;
-               goto extents_loaded;
-       }
-
-       retval = ext2fs_block_iterate3(ctx->fs, ino, BLOCK_FLAG_READ_ONLY, 0,
-                                      find_blocks, list);
-       if (retval)
-               goto err;
-       if (list->retval) {
-               retval = list->retval;
-               goto err;
-       }
-
-extents_loaded:
        /* Reset extent tree */
-       inode.i_flags &= ~EXT4_EXTENTS_FL;
-       memset(inode.i_block, 0, sizeof(inode.i_block));
+       inode->i_flags &= ~EXT4_EXTENTS_FL;
+       memset(inode->i_block, 0, sizeof(inode->i_block));
 
        /* Make a note of freed blocks */
-       retval = ext2fs_iblk_sub_blocks(ctx->fs, &inode, list->blocks_freed);
+       quota_data_sub(ctx->qctx, inode, list->ino,
+                      list->blocks_freed * ctx->fs->blocksize);
+       retval = ext2fs_iblk_sub_blocks(ctx->fs, EXT2_INODE(inode),
+                                       list->blocks_freed);
        if (retval)
-               goto err;
+               return retval;
 
        /* Now stuff extents into the file */
-       retval = ext2fs_extent_open2(ctx->fs, ino, &inode, &handle);
+       retval = ext2fs_extent_open2(ctx->fs, list->ino, EXT2_INODE(inode),
+                                       &handle);
        if (retval)
-               goto err;
+               return retval;
 
        ext_written = 0;
+
+       start_val = ext2fs_get_stat_i_blocks(ctx->fs, EXT2_INODE(inode));
+
        for (i = 0, ex = list->extents; i < list->count; i++, ex++) {
+               if (ex->e_len == 0)
+                       continue;
                memcpy(&extent, ex, sizeof(struct ext2fs_extent));
                extent.e_flags &= EXT2_EXTENT_FLAGS_UNINIT;
                if (extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT) {
@@ -282,35 +253,131 @@ extents_loaded:
                }
 
 #ifdef DEBUG
-               printf("W: ino=%d pblk=%llu lblk=%llu len=%u\n", ino,
+               printf("W: ino=%d pblk=%llu lblk=%llu len=%u\n", list->ino,
                                extent.e_pblk, extent.e_lblk, extent.e_len);
 #endif
                retval = ext2fs_extent_insert(handle, EXT2_EXTENT_INSERT_AFTER,
                                              &extent);
                if (retval)
-                       goto err2;
+                       goto err;
                retval = ext2fs_extent_fix_parents(handle);
                if (retval)
-                       goto err2;
+                       goto err;
                ext_written++;
        }
 
+       delta = ext2fs_get_stat_i_blocks(ctx->fs, EXT2_INODE(inode)) -
+               start_val;
+       if (delta)
+               quota_data_add(ctx->qctx, inode, list->ino, delta << 9);
+
 #if defined(DEBUG) || defined(DEBUG_SUMMARY)
        printf("rebuild: ino=%d extents=%d->%d\n", ino, list->ext_read,
               ext_written);
 #endif
-       e2fsck_write_inode(ctx, ino, &inode, "rebuild_extents");
+       e2fsck_write_inode(ctx, list->ino, EXT2_INODE(inode),
+                               "rebuild_extents");
 
-err2:
-       ext2fs_extent_free(handle);
 err:
+       ext2fs_extent_free(handle);
        return retval;
 }
 
+errcode_t e2fsck_rewrite_extent_tree(e2fsck_t ctx, struct extent_list *list)
+{
+       struct ext2_inode_large inode;
+       blk64_t blk_count;
+       errcode_t err;
+
+       memset(&inode, 0, sizeof(inode));
+       ext2fs_read_inode_full(ctx->fs, list->ino, EXT2_INODE(&inode),
+                               sizeof(inode));
+
+       /* Skip deleted inodes and inline data files */
+       if (inode.i_flags & EXT4_INLINE_DATA_FL)
+               return 0;
+
+       err = rewrite_extent_replay(ctx, list, &inode);
+       if (err)
+               return err;
+
+       err = ext2fs_count_blocks(ctx->fs, list->ino, EXT2_INODE(&inode),
+                                 &blk_count);
+       if (err)
+               return err;
+       ext2fs_iblk_set(ctx->fs, EXT2_INODE(&inode), blk_count);
+       ext2fs_write_inode_full(ctx->fs, list->ino, EXT2_INODE(&inode),
+               sizeof(inode));
+
+       return 0;
+}
+
+errcode_t e2fsck_read_extents(e2fsck_t ctx, struct extent_list *extents)
+{
+       struct ext2_inode_large inode;
+       errcode_t               retval;
+
+       extents->extents = NULL;
+       extents->count = 0;
+       extents->blocks_freed = 0;
+       extents->ext_read = 0;
+       extents->size = NUM_EXTENTS;
+       retval = ext2fs_get_array(NUM_EXTENTS, sizeof(struct ext2fs_extent),
+                                 &extents->extents);
+       if (retval)
+               return -ENOMEM;
+
+       retval = ext2fs_read_inode(ctx->fs, extents->ino, EXT2_INODE(&inode));
+       if (retval)
+               goto err_out;
+
+       retval = load_extents(ctx, extents);
+       if (!retval)
+               return 0;
+err_out:
+       ext2fs_free_mem(&extents->extents);
+       extents->size = 0;
+       extents->count = 0;
+       return retval;
+}
+
+static errcode_t rebuild_extent_tree(e2fsck_t ctx, struct extent_list *list,
+                                    ext2_ino_t ino)
+{
+       struct ext2_inode_large inode;
+       errcode_t               retval;
+
+       list->count = 0;
+       list->blocks_freed = 0;
+       list->ino = ino;
+       list->ext_read = 0;
+       e2fsck_read_inode_full(ctx, ino, EXT2_INODE(&inode), sizeof(inode),
+                              "rebuild_extents");
+
+       /* Skip deleted inodes and inline data files */
+       if (inode.i_links_count == 0 ||
+           inode.i_flags & EXT4_INLINE_DATA_FL)
+               return 0;
+
+       /* Collect lblk->pblk mappings */
+       if (inode.i_flags & EXT4_EXTENTS_FL) {
+               retval = load_extents(ctx, list);
+               if (retval)
+                       return retval;
+               return rewrite_extent_replay(ctx, list, &inode);
+       }
+
+       retval = ext2fs_block_iterate3(ctx->fs, ino, BLOCK_FLAG_READ_ONLY, 0,
+                                      find_blocks, list);
+
+       return retval || list->retval ||
+               rewrite_extent_replay(ctx, list, &inode);
+}
+
 /* Rebuild the extents immediately */
 static errcode_t e2fsck_rebuild_extents(e2fsck_t ctx, ext2_ino_t ino)
 {
-       struct extent_list      list;
+       struct extent_list list = { 0 };
        errcode_t err;
 
        if (!ext2fs_has_feature_extents(ctx->fs->super) ||
@@ -319,9 +386,8 @@ static errcode_t e2fsck_rebuild_extents(e2fsck_t ctx, ext2_ino_t ino)
                return 0;
 
        e2fsck_read_bitmaps(ctx);
-       memset(&list, 0, sizeof(list));
-       err = ext2fs_get_mem(sizeof(struct ext2fs_extent) * NUM_EXTENTS,
-                               &list.extents);
+       err = ext2fs_get_array(NUM_EXTENTS, sizeof(struct ext2fs_extent),
+                              &list.extents);
        if (err)
                return err;
        list.size = NUM_EXTENTS;
@@ -337,7 +403,7 @@ static void rebuild_extents(e2fsck_t ctx, const char *pass_name, int pr_header)
 #ifdef RESOURCE_TRACK
        struct resource_track   rtrack;
 #endif
-       struct extent_list      list;
+       struct extent_list      list = { 0 };
        int                     first = 1;
        ext2_ino_t              ino = 0;
        errcode_t               retval;
@@ -357,10 +423,11 @@ static void rebuild_extents(e2fsck_t ctx, const char *pass_name, int pr_header)
        clear_problem_context(&pctx);
        e2fsck_read_bitmaps(ctx);
 
-       memset(&list, 0, sizeof(list));
-       retval = ext2fs_get_mem(sizeof(struct ext2fs_extent) * NUM_EXTENTS,
-                               &list.extents);
        list.size = NUM_EXTENTS;
+       retval = ext2fs_get_array(sizeof(struct ext2fs_extent),
+                                 list.size, &list.extents);
+       if (retval)
+               return;
        while (1) {
                retval = ext2fs_find_first_set_inode_bitmap2(
                                ctx->inodes_to_rebuild, ino + 1,
@@ -505,6 +572,9 @@ errcode_t e2fsck_should_rebuild_extents(e2fsck_t ctx,
        if (eti->force_rebuild)
                goto rebuild;
 
+       if (ctx->options & E2F_OPT_NOOPT_EXTENTS)
+               return 0;
+
        extents_per_block = (ctx->fs->blocksize -
                             sizeof(struct ext3_extent_header)) /
                            sizeof(struct ext3_extent);
index 75877f3..1babf41 100644 (file)
 /*
  * Pull in the definition of the e2fsck context structure
  */
+#include "config.h"
 #include "e2fsck.h"
 #endif
 
+#if __STDC_VERSION__ < 199901L
+# if __GNUC__ >= 2 || _MSC_VER >= 1300
+#  define __func__ __FUNCTION__
+# else
+#  define __func__ "<unknown>"
+# endif
+#endif
+
 struct buffer_head {
 #ifdef DEBUGFS
        ext2_filsys     b_fs;
@@ -42,7 +51,7 @@ struct buffer_head {
        unsigned int    b_dirty:1;
        unsigned int    b_uptodate:1;
        unsigned long long b_blocknr;
-       char            b_data[1024];
+       char            b_data[4096];
 };
 
 struct inode {
@@ -72,9 +81,9 @@ struct kdev_s {
 #define buffer_req(bh) 1
 #define do_readahead(journal, start) do {} while (0)
 
-typedef struct {
+typedef struct kmem_cache {
        int     object_length;
-} lkmem_cache_t;
+} kmem_cache_t;
 
 #define kmem_cache_alloc(cache, flags) malloc((cache)->object_length)
 #define kmem_cache_free(cache, obj) free(obj)
@@ -83,6 +92,13 @@ typedef struct {
 #define kmalloc(len, flags) malloc(len)
 #define kfree(p) free(p)
 
+static inline void *kmalloc_array(unsigned n, unsigned size, int flags)
+{
+       if (n && (~0U)/n < size)
+               return NULL;
+       return malloc(n * size);
+}
+
 #define cond_resched() do { } while (0)
 
 #define __init
@@ -97,9 +113,12 @@ typedef struct {
  * functions.
  */
 #ifdef NO_INLINE_FUNCS
-extern lkmem_cache_t *do_cache_create(int len);
-extern void do_cache_destroy(lkmem_cache_t *cache);
+extern kmem_cache_t *do_cache_create(int len);
+extern void do_cache_destroy(kmem_cache_t *cache);
 extern size_t journal_tag_bytes(journal_t *journal);
+extern __u32 __hash_32(__u32 val);
+extern __u32 hash_32(__u32 val, unsigned int bits);
+extern __u32 hash_64(__u64 val, unsigned int bits);
 #endif
 
 #if (defined(E2FSCK_INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS))
@@ -121,10 +140,9 @@ extern size_t journal_tag_bytes(journal_t *journal);
 #endif /* __STDC_VERSION__ >= 199901L */
 #endif /* E2FSCK_INCLUDE_INLINE_FUNCS */
 
-
-_INLINE_ lkmem_cache_t *do_cache_create(int len)
+_INLINE_ kmem_cache_t *do_cache_create(int len)
 {
-       lkmem_cache_t *new_cache;
+       kmem_cache_t *new_cache;
 
        new_cache = malloc(sizeof(*new_cache));
        if (new_cache)
@@ -132,21 +150,49 @@ _INLINE_ lkmem_cache_t *do_cache_create(int len)
        return new_cache;
 }
 
-_INLINE_ void do_cache_destroy(lkmem_cache_t *cache)
+_INLINE_ void do_cache_destroy(kmem_cache_t *cache)
 {
        free(cache);
 }
 
+/* generic hashing taken from the Linux kernel */
+#define GOLDEN_RATIO_32 0x61C88647
+#define GOLDEN_RATIO_64 0x61C8864680B583EBull
+
+_INLINE_ __u32 __hash_32(__u32 val)
+{
+       return val * GOLDEN_RATIO_32;
+}
+
+_INLINE_ __u32 hash_32(__u32 val, unsigned int bits)
+{
+       /* High bits are more random, so use them. */
+       return __hash_32(val) >> (32 - bits);
+}
+
+_INLINE_ __u32 hash_64(__u64 val, unsigned int bits)
+{
+       if (sizeof(long) >= 8) {
+               /* 64x64-bit multiply is efficient on all 64-bit processors */
+               return val * GOLDEN_RATIO_64 >> (64 - bits);
+       } else {
+               /* Hash 64 bits using only 32x32-bit multiply. */
+               return hash_32((__u32)val ^ __hash_32(val >> 32), bits);
+       }
+}
+
 #undef _INLINE_
 #endif
 
 /*
  * Kernel compatibility functions are defined in journal.c
  */
-int journal_bmap(journal_t *journal, blk64_t block, unsigned long long *phys);
-struct buffer_head *getblk(kdev_t ctx, blk64_t blocknr, int blocksize);
+int jbd2_journal_bmap(journal_t *journal, unsigned long block,
+                     unsigned long long *phys);
+struct buffer_head *getblk(kdev_t ctx, unsigned long long blocknr,
+                          int blocksize);
 int sync_blockdev(kdev_t kdev);
-void ll_rw_block(int rw, int dummy, struct buffer_head *bh[]);
+void ll_rw_block(int rw, int op_flags, int nr, struct buffer_head *bh[]);
 void mark_buffer_dirty(struct buffer_head *bh);
 void mark_buffer_uptodate(struct buffer_head *bh, int val);
 void brelse(struct buffer_head *bh);
@@ -165,7 +211,7 @@ void wait_on_buffer(struct buffer_head *bh);
 #define J_ASSERT(x)    assert(x)
 
 #define JSB_HAS_INCOMPAT_FEATURE(jsb, mask)                            \
-       ((jsb)->s_header.h_blocktype == ext2fs_cpu_to_be32(JFS_SUPERBLOCK_V2) &&        \
+       ((jsb)->s_header.h_blocktype == ext2fs_cpu_to_be32(JBD2_SUPERBLOCK_V2) &&       \
         ((jsb)->s_feature_incompat & ext2fs_cpu_to_be32((mask))))
 #else  /* !DEBUGFS */
 
@@ -175,7 +221,7 @@ extern e2fsck_t e2fsck_global_ctx;  /* Try your very best not to use this! */
        do { if (!(assert)) {                                           \
                printf ("Assertion failure in %s() at %s line %d: "     \
                        "\"%s\"\n",                                     \
-                       __FUNCTION__, __FILE__, __LINE__, # assert);    \
+                       __func__, __FILE__, __LINE__, # assert);        \
                fatal_error(e2fsck_global_ctx, 0);                      \
        } } while (0)
 
@@ -188,18 +234,37 @@ extern e2fsck_t e2fsck_global_ctx;  /* Try your very best not to use this! */
 #define EFSCORRUPTED   EXT2_ET_FILESYSTEM_CORRUPTED
 #endif
 
+static inline void jbd2_descriptor_block_csum_set(journal_t *j,
+                                                 struct buffer_head *bh)
+{
+       struct jbd2_journal_block_tail *tail;
+       __u32 csum;
+
+       if (!jbd2_journal_has_csum_v2or3(j))
+               return;
+
+       tail = (struct jbd2_journal_block_tail *)(bh->b_data + j->j_blocksize -
+                       sizeof(struct jbd2_journal_block_tail));
+       tail->t_checksum = 0;
+       csum = jbd2_chksum(j, j->j_csum_seed, bh->b_data, j->j_blocksize);
+       tail->t_checksum = cpu_to_be32(csum);
+}
+
 /* recovery.c */
-extern int     journal_recover    (journal_t *journal);
-extern int     journal_skip_recovery (journal_t *);
+extern int     jbd2_journal_recover    (journal_t *journal);
+extern int     jbd2_journal_skip_recovery (journal_t *);
 
 /* revoke.c */
-extern int     journal_init_revoke(journal_t *, int);
-extern void    journal_destroy_revoke(journal_t *);
-extern void    journal_destroy_revoke_caches(void);
-extern int     journal_init_revoke_caches(void);
-
-extern int     journal_set_revoke(journal_t *, unsigned long long, tid_t);
-extern int     journal_test_revoke(journal_t *, unsigned long long, tid_t);
-extern void    journal_clear_revoke(journal_t *);
+extern int     jbd2_journal_init_revoke(journal_t *, int);
+extern void    jbd2_journal_destroy_revoke(journal_t *);
+extern void    jbd2_journal_destroy_revoke_record_cache(void);
+extern void    jbd2_journal_destroy_revoke_table_cache(void);
+extern int     jbd2_journal_init_revoke_record_cache(void);
+extern int     jbd2_journal_init_revoke_table_cache(void);
+
+
+extern int     jbd2_journal_set_revoke(journal_t *, unsigned long long, tid_t);
+extern int     jbd2_journal_test_revoke(journal_t *, unsigned long long, tid_t);
+extern void    jbd2_journal_clear_revoke(journal_t *);
 
 #endif /* _JFS_USER_H */
index 46fe7b4..922c252 100644 (file)
@@ -44,7 +44,7 @@ static int bh_count = 0;
 static int e2fsck_journal_verify_csum_type(journal_t *j,
                                           journal_superblock_t *jsb)
 {
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return 1;
 
        return jsb->s_checksum_type == JBD2_CRC32C_CHKSUM;
@@ -68,7 +68,7 @@ static int e2fsck_journal_sb_csum_verify(journal_t *j,
 {
        __u32 provided, calculated;
 
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return 1;
 
        provided = ext2fs_be32_to_cpu(jsb->s_checksum);
@@ -82,7 +82,7 @@ static errcode_t e2fsck_journal_sb_csum_set(journal_t *j,
 {
        __u32 crc;
 
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return 0;
 
        crc = e2fsck_journal_sb_csum(jsb);
@@ -94,7 +94,8 @@ static errcode_t e2fsck_journal_sb_csum_set(journal_t *j,
  * to use the recovery.c file virtually unchanged from the kernel, so we
  * don't have to do much to keep kernel and user recovery in sync.
  */
-int journal_bmap(journal_t *journal, blk64_t block, unsigned long long *phys)
+int jbd2_journal_bmap(journal_t *journal, unsigned long block,
+                     unsigned long long *phys)
 {
 #ifdef USE_INODE_IO
        *phys = block;
@@ -110,13 +111,15 @@ int journal_bmap(journal_t *journal, blk64_t block, unsigned long long *phys)
        }
 
        retval= ext2fs_bmap2(inode->i_ctx->fs, inode->i_ino,
-                            &inode->i_ext2, NULL, 0, block, 0, &pblk);
+                            &inode->i_ext2, NULL, 0, (blk64_t) block,
+                            0, &pblk);
        *phys = pblk;
-       return (int) retval;
+       return -1 * ((int) retval);
 #endif
 }
 
-struct buffer_head *getblk(kdev_t kdev, blk64_t blocknr, int blocksize)
+struct buffer_head *getblk(kdev_t kdev, unsigned long long blocknr,
+                          int blocksize)
 {
        struct buffer_head *bh;
        int bufsize = sizeof(*bh) + kdev->k_ctx->fs->blocksize -
@@ -131,7 +134,7 @@ struct buffer_head *getblk(kdev_t kdev, blk64_t blocknr, int blocksize)
                bh_count++;
 #endif
        jfs_debug(4, "getblk for block %llu (%d bytes)(total %d)\n",
-                 (unsigned long long) blocknr, blocksize, bh_count);
+                 blocknr, blocksize, bh_count);
 
        bh->b_ctx = kdev->k_ctx;
        if (kdev->k_dev == K_DEV_FS)
@@ -153,17 +156,17 @@ int sync_blockdev(kdev_t kdev)
        else
                io = kdev->k_ctx->journal_io;
 
-       return io_channel_flush(io) ? EIO : 0;
+       return io_channel_flush(io) ? -EIO : 0;
 }
 
-void ll_rw_block(int rw, int nr, struct buffer_head *bhp[])
+void ll_rw_block(int rw, int op_flags, int nr, struct buffer_head *bhp[])
 {
        errcode_t retval;
        struct buffer_head *bh;
 
        for (; nr > 0; --nr) {
                bh = *bhp++;
-               if (rw == READ && !bh->b_uptodate) {
+               if (rw == REQ_OP_READ && !bh->b_uptodate) {
                        jfs_debug(3, "reading block %llu/%p\n",
                                  bh->b_blocknr, (void *) bh);
                        retval = io_channel_read_blk64(bh->b_io,
@@ -177,7 +180,7 @@ void ll_rw_block(int rw, int nr, struct buffer_head *bhp[])
                                continue;
                        }
                        bh->b_uptodate = 1;
-               } else if (rw == WRITE && bh->b_dirty) {
+               } else if (rw == REQ_OP_WRITE && bh->b_dirty) {
                        jfs_debug(3, "writing block %llu/%p\n",
                                  bh->b_blocknr,
                                  (void *) bh);
@@ -195,7 +198,7 @@ void ll_rw_block(int rw, int nr, struct buffer_head *bhp[])
                        bh->b_uptodate = 1;
                } else {
                        jfs_debug(3, "no-op %s for block %llu\n",
-                                 rw == READ ? "read" : "write",
+                                 rw == REQ_OP_READ ? "read" : "write",
                                  bh->b_blocknr);
                }
        }
@@ -214,7 +217,7 @@ static void mark_buffer_clean(struct buffer_head * bh)
 void brelse(struct buffer_head *bh)
 {
        if (bh->b_dirty)
-               ll_rw_block(WRITE, 1, &bh);
+               ll_rw_block(REQ_OP_WRITE, 0, 1, &bh);
        jfs_debug(3, "freeing block %llu/%p (total %d)\n",
                  bh->b_blocknr, (void *) bh, --bh_count);
        ext2fs_free_mem(&bh);
@@ -233,7 +236,7 @@ void mark_buffer_uptodate(struct buffer_head *bh, int val)
 void wait_on_buffer(struct buffer_head *bh)
 {
        if (!bh->b_uptodate)
-               ll_rw_block(READ, 1, &bh);
+               ll_rw_block(REQ_OP_READ, 0, 1, &bh);
 }
 
 
@@ -275,6 +278,656 @@ static int process_journal_block(ext2_filsys fs,
        return 0;
 }
 
+static int ext4_fc_replay_scan(journal_t *j, struct buffer_head *bh,
+                               int off, tid_t expected_tid)
+{
+       e2fsck_t ctx = j->j_fs_dev->k_ctx;
+       struct e2fsck_fc_replay_state *state;
+       int ret = JBD2_FC_REPLAY_CONTINUE;
+       struct ext4_fc_add_range *ext;
+       struct ext4_fc_tl *tl;
+       struct ext4_fc_tail *tail;
+       __u8 *start, *end;
+       struct ext4_fc_head *head;
+       struct ext2fs_extent ext2fs_ex;
+
+       state = &ctx->fc_replay_state;
+
+       start = (__u8 *)bh->b_data;
+       end = (__u8 *)bh->b_data + j->j_blocksize - 1;
+
+       jbd_debug(1, "Scan phase starting, expected %d", expected_tid);
+       if (state->fc_replay_expected_off == 0) {
+               memset(state, 0, sizeof(*state));
+               /* Check if we can stop early */
+               if (le16_to_cpu(((struct ext4_fc_tl *)start)->fc_tag)
+                       != EXT4_FC_TAG_HEAD) {
+                       jbd_debug(1, "Ending early!, not a head tag");
+                       return 0;
+               }
+       }
+
+       if (off != state->fc_replay_expected_off) {
+               ret = -EFSCORRUPTED;
+               goto out_err;
+       }
+
+       state->fc_replay_expected_off++;
+       fc_for_each_tl(start, end, tl) {
+               jbd_debug(3, "Scan phase, tag:%s, blk %lld\n",
+                         tag2str(le16_to_cpu(tl->fc_tag)), bh->b_blocknr);
+               switch (le16_to_cpu(tl->fc_tag)) {
+               case EXT4_FC_TAG_ADD_RANGE:
+                       ext = (struct ext4_fc_add_range *)ext4_fc_tag_val(tl);
+                       ret = ext2fs_decode_extent(&ext2fs_ex, (void *)&ext->fc_ex,
+                                                  sizeof(ext->fc_ex));
+                       if (ret)
+                               ret = JBD2_FC_REPLAY_STOP;
+                       else
+                               ret = JBD2_FC_REPLAY_CONTINUE;
+               case EXT4_FC_TAG_DEL_RANGE:
+               case EXT4_FC_TAG_LINK:
+               case EXT4_FC_TAG_UNLINK:
+               case EXT4_FC_TAG_CREAT:
+               case EXT4_FC_TAG_INODE:
+               case EXT4_FC_TAG_PAD:
+                       state->fc_cur_tag++;
+                       state->fc_crc = jbd2_chksum(j, state->fc_crc, tl,
+                                       sizeof(*tl) + ext4_fc_tag_len(tl));
+                       break;
+               case EXT4_FC_TAG_TAIL:
+                       state->fc_cur_tag++;
+                       tail = (struct ext4_fc_tail *)ext4_fc_tag_val(tl);
+                       state->fc_crc = jbd2_chksum(j, state->fc_crc, tl,
+                                               sizeof(*tl) +
+                                               offsetof(struct ext4_fc_tail,
+                                               fc_crc));
+                       jbd_debug(1, "tail tid %d, expected %d\n",
+                                       le32_to_cpu(tail->fc_tid),
+                                       expected_tid);
+                       if (le32_to_cpu(tail->fc_tid) == expected_tid &&
+                               le32_to_cpu(tail->fc_crc) == state->fc_crc) {
+                               state->fc_replay_num_tags = state->fc_cur_tag;
+                       } else {
+                               ret = state->fc_replay_num_tags ?
+                                       JBD2_FC_REPLAY_STOP : -EFSBADCRC;
+                       }
+                       state->fc_crc = 0;
+                       break;
+               case EXT4_FC_TAG_HEAD:
+                       head = (struct ext4_fc_head *)ext4_fc_tag_val(tl);
+                       if (le32_to_cpu(head->fc_features) &
+                               ~EXT4_FC_SUPPORTED_FEATURES) {
+                               ret = -EOPNOTSUPP;
+                               break;
+                       }
+                       if (le32_to_cpu(head->fc_tid) != expected_tid) {
+                               ret = -EINVAL;
+                               break;
+                       }
+                       state->fc_cur_tag++;
+                       state->fc_crc = jbd2_chksum(j, state->fc_crc, tl,
+                                       sizeof(*tl) + ext4_fc_tag_len(tl));
+                       break;
+               default:
+                       ret = state->fc_replay_num_tags ?
+                               JBD2_FC_REPLAY_STOP : -ECANCELED;
+               }
+               if (ret < 0 || ret == JBD2_FC_REPLAY_STOP)
+                       break;
+       }
+
+out_err:
+       return ret;
+}
+
+static int __errcode_to_errno(errcode_t err, const char *func, int line)
+{
+       if (err == 0)
+               return 0;
+       fprintf(stderr, "Error \"%s\" encountered in function %s at line %d\n",
+               error_message(err), func, line);
+       if (err <= 256)
+               return -err;
+       return -EFAULT;
+}
+
+#define errcode_to_errno(err)  __errcode_to_errno(err, __func__, __LINE__)
+
+#define ex_end(__ex) ((__ex)->e_lblk + (__ex)->e_len - 1)
+#define ex_pend(__ex) ((__ex)->e_pblk + (__ex)->e_len - 1)
+
+static int make_room(struct extent_list *list, int i)
+{
+       int ret;
+
+       if (list->count == list->size) {
+               unsigned int new_size = (list->size + 341) *
+                                       sizeof(struct ext2fs_extent);
+               ret = errcode_to_errno(ext2fs_resize_mem(0, new_size, &list->extents));
+               if (ret)
+                       return ret;
+               list->size += 341;
+       }
+
+       memmove(&list->extents[i + 1], &list->extents[i],
+                       sizeof(list->extents[0]) * (list->count - i));
+       list->count++;
+       return 0;
+}
+
+static int ex_compar(const void *arg1, const void *arg2)
+{
+       struct ext2fs_extent *ex1 = (struct ext2fs_extent *)arg1;
+       struct ext2fs_extent *ex2 = (struct ext2fs_extent *)arg2;
+
+       if (ex1->e_lblk < ex2->e_lblk)
+               return -1;
+       if (ex1->e_lblk > ex2->e_lblk)
+               return 1;
+       return ex1->e_len - ex2->e_len;
+}
+
+static int ex_len_compar(const void *arg1, const void *arg2)
+{
+       struct ext2fs_extent *ex1 = (struct ext2fs_extent *)arg1;
+       struct ext2fs_extent *ex2 = (struct ext2fs_extent *)arg2;
+
+       if (ex1->e_len < ex2->e_len)
+               return 1;
+
+       if (ex1->e_lblk > ex2->e_lblk)
+               return -1;
+
+       return 0;
+}
+
+static void ex_sort_and_merge(e2fsck_t ctx, struct extent_list *list)
+{
+       blk64_t ex_end;
+       int i, j;
+
+       if (list->count < 2)
+               return;
+
+       /*
+        * Reverse sort by length, that way we strip off all the 0 length
+        * extents
+        */
+       qsort(list->extents, list->count, sizeof(struct ext2fs_extent),
+               ex_len_compar);
+
+       for (i = 0; i < list->count; i++) {
+               if (list->extents[i].e_len == 0) {
+                       list->count = i;
+                       break;
+               }
+       }
+
+       /* Now sort by logical offset */
+       qsort(list->extents, list->count, sizeof(list->extents[0]),
+               ex_compar);
+
+       /* Merge adjacent extents if they are logically and physically contiguous */
+       i = 0;
+       while (i < list->count - 1) {
+               if (ex_end(&list->extents[i]) + 1 != list->extents[i + 1].e_lblk ||
+                       ex_pend(&list->extents[i]) + 1 != list->extents[i + 1].e_pblk ||
+                       (list->extents[i].e_flags & EXT2_EXTENT_FLAGS_UNINIT) !=
+                               (list->extents[i + 1].e_flags & EXT2_EXTENT_FLAGS_UNINIT)) {
+                       i++;
+                       continue;
+               }
+
+               list->extents[i].e_len += list->extents[i + 1].e_len;
+               for (j = i + 1; j < list->count - 1; j++)
+                       list->extents[j] = list->extents[j + 1];
+               list->count--;
+       }
+}
+
+/* must free blocks that are released */
+static int ext4_modify_extent_list(e2fsck_t ctx, struct extent_list *list,
+                                       struct ext2fs_extent *ex, int del)
+{
+       int ret;
+       int i, offset;
+       struct ext2fs_extent add_ex = *ex, add_ex2;
+
+       /* First let's create a hole from ex->e_lblk of length ex->e_len */
+       for (i = 0; i < list->count; i++) {
+               if (ex_end(&list->extents[i]) < add_ex.e_lblk)
+                       continue;
+
+               /* Case 1: No overlap */
+               if (list->extents[i].e_lblk > ex_end(&add_ex))
+                       break;
+               /*
+                * Unmark all the blocks in bb now. All the blocks get marked
+                * before we exit this function.
+                */
+               ext2fs_unmark_block_bitmap_range2(ctx->fs->block_map,
+                       list->extents[i].e_pblk, list->extents[i].e_len);
+               /* Case 2: Split */
+               if (list->extents[i].e_lblk < add_ex.e_lblk &&
+                       ex_end(&list->extents[i]) > ex_end(&add_ex)) {
+                       ret = make_room(list, i + 1);
+                       if (ret)
+                               return ret;
+                       list->extents[i + 1] = list->extents[i];
+                       offset = ex_end(&add_ex) + 1 - list->extents[i].e_lblk;
+                       list->extents[i + 1].e_lblk += offset;
+                       list->extents[i + 1].e_pblk += offset;
+                       list->extents[i + 1].e_len -= offset;
+                       list->extents[i].e_len =
+                               add_ex.e_lblk - list->extents[i].e_lblk;
+                       break;
+               }
+
+               /* Case 3: Exact overlap */
+               if (add_ex.e_lblk <= list->extents[i].e_lblk  &&
+                       ex_end(&list->extents[i]) <= ex_end(&add_ex)) {
+
+                       list->extents[i].e_len = 0;
+                       continue;
+               }
+
+               /* Case 4: Partial overlap */
+               if (ex_end(&list->extents[i]) > ex_end(&add_ex)) {
+                       offset = ex_end(&add_ex) + 1 - list->extents[i].e_lblk;
+                       list->extents[i].e_lblk += offset;
+                       list->extents[i].e_pblk += offset;
+                       list->extents[i].e_len -= offset;
+                       break;
+               }
+
+               if (ex_end(&add_ex) >= ex_end(&list->extents[i]))
+                       list->extents[i].e_len =
+                               add_ex.e_lblk > list->extents[i].e_lblk ?
+                               add_ex.e_lblk - list->extents[i].e_lblk : 0;
+       }
+
+       if (add_ex.e_len && !del) {
+               make_room(list, list->count);
+               list->extents[list->count - 1] = add_ex;
+       }
+
+       ex_sort_and_merge(ctx, list);
+
+       /* Mark all occupied blocks allocated */
+       for (i = 0; i < list->count; i++)
+               ext2fs_mark_block_bitmap_range2(ctx->fs->block_map,
+                       list->extents[i].e_pblk, list->extents[i].e_len);
+       ext2fs_mark_bb_dirty(ctx->fs);
+
+       return 0;
+}
+
+static int ext4_add_extent_to_list(e2fsck_t ctx, struct extent_list *list,
+                                       struct ext2fs_extent *ex)
+{
+       return ext4_modify_extent_list(ctx, list, ex, 0 /* add */);
+}
+
+static int ext4_del_extent_from_list(e2fsck_t ctx, struct extent_list *list,
+                                       struct ext2fs_extent *ex)
+{
+       return ext4_modify_extent_list(ctx, list, ex, 1 /* delete */);
+}
+
+static int ext4_fc_read_extents(e2fsck_t ctx, int ino)
+{
+       struct extent_list *extent_list = &ctx->fc_replay_state.fc_extent_list;
+
+       if (extent_list->ino == ino)
+               return 0;
+
+       extent_list->ino = ino;
+       return errcode_to_errno(e2fsck_read_extents(ctx, extent_list));
+}
+
+/*
+ * Flush extents in replay state on disk. @ino is the inode that is going
+ * to be processed next. So, we hold back flushing of the extent list
+ * if the next inode that's going to be processed is same as the one with
+ * cached extents in our replay state. That allows us to gather multiple extents
+ * for the inode so that we can flush all of them at once and it also saves us
+ * from continuously growing and shrinking the extent tree.
+ */
+static void ext4_fc_flush_extents(e2fsck_t ctx, int ino)
+{
+       struct extent_list *extent_list = &ctx->fc_replay_state.fc_extent_list;
+
+       if (extent_list->ino == ino || extent_list->ino == 0)
+               return;
+       e2fsck_rewrite_extent_tree(ctx, extent_list);
+       ext2fs_free_mem(&extent_list->extents);
+       memset(extent_list, 0, sizeof(*extent_list));
+}
+
+/* Helper struct for dentry replay routines */
+struct dentry_info_args {
+       int parent_ino, dname_len, ino, inode_len;
+       char *dname;
+};
+
+static inline void tl_to_darg(struct dentry_info_args *darg,
+                               struct  ext4_fc_tl *tl)
+{
+       struct ext4_fc_dentry_info *fcd;
+       int tag = le16_to_cpu(tl->fc_tag);
+
+       fcd = (struct ext4_fc_dentry_info *)ext4_fc_tag_val(tl);
+
+       darg->parent_ino = le32_to_cpu(fcd->fc_parent_ino);
+       darg->ino = le32_to_cpu(fcd->fc_ino);
+       darg->dname = fcd->fc_dname;
+       darg->dname_len = ext4_fc_tag_len(tl) -
+                       sizeof(struct ext4_fc_dentry_info);
+       darg->dname = malloc(darg->dname_len + 1);
+       memcpy(darg->dname, fcd->fc_dname, darg->dname_len);
+       darg->dname[darg->dname_len] = 0;
+       jbd_debug(1, "%s: %s, ino %d, parent %d\n",
+               tag == EXT4_FC_TAG_CREAT ? "create" :
+               (tag == EXT4_FC_TAG_LINK ? "link" :
+               (tag == EXT4_FC_TAG_UNLINK ? "unlink" : "error")),
+               darg->dname, darg->ino, darg->parent_ino);
+}
+
+static int ext4_fc_handle_unlink(e2fsck_t ctx, struct ext4_fc_tl *tl)
+{
+       struct ext2_inode inode;
+       struct dentry_info_args darg;
+       ext2_filsys fs = ctx->fs;
+       int ret;
+
+       tl_to_darg(&darg, tl);
+       ext4_fc_flush_extents(ctx, darg.ino);
+       ret = errcode_to_errno(
+                      ext2fs_unlink(ctx->fs, darg.parent_ino,
+                                    darg.dname, darg.ino, 0));
+       /* It's okay if the above call fails */
+       free(darg.dname);
+       return ret;
+}
+
+static int ext4_fc_handle_link_and_create(e2fsck_t ctx, struct ext4_fc_tl *tl)
+{
+       struct dentry_info_args darg;
+       ext2_filsys fs = ctx->fs;
+       struct ext2_inode_large inode_large;
+       int ret, filetype, mode;
+
+       tl_to_darg(&darg, tl);
+       ext4_fc_flush_extents(ctx, 0);
+       ret = errcode_to_errno(ext2fs_read_inode(fs, darg.ino,
+                                                (struct ext2_inode *)&inode_large));
+       if (ret)
+               goto out;
+
+       mode = inode_large.i_mode;
+
+       if (LINUX_S_ISREG(mode))
+               filetype = EXT2_FT_REG_FILE;
+       else if (LINUX_S_ISDIR(mode))
+               filetype = EXT2_FT_DIR;
+       else if (LINUX_S_ISCHR(mode))
+               filetype = EXT2_FT_CHRDEV;
+       else if (LINUX_S_ISBLK(mode))
+               filetype = EXT2_FT_BLKDEV;
+       else if (LINUX_S_ISLNK(mode))
+               return EXT2_FT_SYMLINK;
+       else if (LINUX_S_ISFIFO(mode))
+               filetype = EXT2_FT_FIFO;
+       else if (LINUX_S_ISSOCK(mode))
+               filetype = EXT2_FT_SOCK;
+       else {
+               ret = -EINVAL;
+               goto out;
+       }
+
+       /*
+        * Forcefully unlink if the same name is present and ignore the error
+        * if any, since this dirent might not exist
+        */
+       ext2fs_unlink(fs, darg.parent_ino, darg.dname, darg.ino,
+                       EXT2FS_UNLINK_FORCE);
+
+       ret = errcode_to_errno(
+                      ext2fs_link(fs, darg.parent_ino, darg.dname, darg.ino,
+                                  filetype));
+out:
+       free(darg.dname);
+       return ret;
+
+}
+
+/* This function fixes the i_blocks field in the replayed indoe */
+static void ext4_fc_replay_fixup_iblocks(struct ext2_inode_large *ondisk_inode,
+       struct ext2_inode_large *fc_inode)
+{
+       if (le32_to_cpu(ondisk_inode->i_flags) & EXT4_EXTENTS_FL) {
+               struct ext3_extent_header *eh;
+
+               eh = (struct ext3_extent_header *)(&ondisk_inode->i_block[0]);
+               if (eh->eh_magic != EXT3_EXT_MAGIC) {
+                       memset(eh, 0, sizeof(*eh));
+                       eh->eh_magic = EXT3_EXT_MAGIC;
+                       eh->eh_max = cpu_to_le16(
+                               (sizeof(ondisk_inode->i_block) -
+                                       sizeof(struct ext3_extent_header)) /
+                                       sizeof(struct ext3_extent));
+               }
+       } else if (le32_to_cpu(ondisk_inode->i_flags) & EXT4_INLINE_DATA_FL) {
+               memcpy(ondisk_inode->i_block, fc_inode->i_block,
+                       sizeof(fc_inode->i_block));
+       }
+}
+
+static int ext4_fc_handle_inode(e2fsck_t ctx, struct ext4_fc_tl *tl)
+{
+       struct e2fsck_fc_replay_state *state = &ctx->fc_replay_state;
+       int ino, inode_len = EXT2_GOOD_OLD_INODE_SIZE;
+       struct ext2_inode_large *inode = NULL;
+       struct ext4_fc_inode *fc_inode;
+       errcode_t err;
+       blk64_t blks;
+
+       fc_inode = (struct ext4_fc_inode *)ext4_fc_tag_val(tl);
+       ino = le32_to_cpu(fc_inode->fc_ino);
+
+       if (EXT2_INODE_SIZE(ctx->fs->super) > EXT2_GOOD_OLD_INODE_SIZE)
+               inode_len += ext2fs_le16_to_cpu(
+                       ((struct ext2_inode_large *)fc_inode->fc_raw_inode)
+                               ->i_extra_isize);
+       err = ext2fs_get_mem(inode_len, &inode);
+       if (err)
+               return errcode_to_errno(err);
+       ext4_fc_flush_extents(ctx, ino);
+
+       err = ext2fs_read_inode_full(ctx->fs, ino, (struct ext2_inode *)inode,
+                                       inode_len);
+       if (err)
+               goto out;
+       memcpy(inode, fc_inode->fc_raw_inode,
+               offsetof(struct ext2_inode_large, i_block));
+       memcpy(&inode->i_generation,
+               &((struct ext2_inode_large *)(fc_inode->fc_raw_inode))->i_generation,
+               inode_len - offsetof(struct ext2_inode_large, i_generation));
+       ext4_fc_replay_fixup_iblocks(inode,
+               (struct ext2_inode_large *)fc_inode->fc_raw_inode);
+       err = ext2fs_count_blocks(ctx->fs, ino, EXT2_INODE(inode), &blks);
+       if (err)
+               goto out;
+       ext2fs_iblk_set(ctx->fs, EXT2_INODE(inode), blks);
+       ext2fs_inode_csum_set(ctx->fs, ino, inode);
+
+       err = ext2fs_write_inode_full(ctx->fs, ino, (struct ext2_inode *)inode,
+                                       inode_len);
+       if (err)
+               goto out;
+       if (inode->i_links_count)
+               ext2fs_mark_inode_bitmap2(ctx->fs->inode_map, ino);
+       else
+               ext2fs_unmark_inode_bitmap2(ctx->fs->inode_map, ino);
+       ext2fs_mark_ib_dirty(ctx->fs);
+
+out:
+       ext2fs_free_mem(&inode);
+       return errcode_to_errno(err);
+}
+
+/*
+ * Handle add extent replay tag.
+ */
+static int ext4_fc_handle_add_extent(e2fsck_t ctx, struct ext4_fc_tl *tl)
+{
+       struct ext2fs_extent extent;
+       struct ext4_fc_add_range *add_range;
+       struct ext4_fc_del_range *del_range;
+       int ret = 0, ino;
+
+       add_range = (struct ext4_fc_add_range *)ext4_fc_tag_val(tl);
+       ino = le32_to_cpu(add_range->fc_ino);
+       ext4_fc_flush_extents(ctx, ino);
+
+       ret = ext4_fc_read_extents(ctx, ino);
+       if (ret)
+               return ret;
+       memset(&extent, 0, sizeof(extent));
+       ret = errcode_to_errno(ext2fs_decode_extent(
+                       &extent, (void *)(add_range->fc_ex),
+                       sizeof(add_range->fc_ex)));
+       if (ret)
+               return ret;
+       return ext4_add_extent_to_list(ctx,
+               &ctx->fc_replay_state.fc_extent_list, &extent);
+}
+
+/*
+ * Handle delete logical range replay tag.
+ */
+static int ext4_fc_handle_del_range(e2fsck_t ctx, struct ext4_fc_tl *tl)
+{
+       struct ext2fs_extent extent;
+       struct ext4_fc_del_range *del_range;
+       int ret, ino;
+
+       del_range = (struct ext4_fc_del_range *)ext4_fc_tag_val(tl);
+       ino = le32_to_cpu(del_range->fc_ino);
+       ext4_fc_flush_extents(ctx, ino);
+
+       memset(&extent, 0, sizeof(extent));
+       extent.e_lblk = ext2fs_le32_to_cpu(del_range->fc_lblk);
+       extent.e_len = ext2fs_le16_to_cpu(del_range->fc_len);
+       ret = ext4_fc_read_extents(ctx, ino);
+       if (ret)
+               return ret;
+       return ext4_del_extent_from_list(ctx,
+               &ctx->fc_replay_state.fc_extent_list, &extent);
+}
+
+/*
+ * Main recovery path entry point. This function returns JBD2_FC_REPLAY_CONTINUE
+ * to indicate that it is expecting more fast commit blocks. It returns
+ * JBD2_FC_REPLAY_STOP to indicate that replay is done.
+ */
+static int ext4_fc_replay(journal_t *journal, struct buffer_head *bh,
+                               enum passtype pass, int off, tid_t expected_tid)
+{
+       e2fsck_t ctx = journal->j_fs_dev->k_ctx;
+       struct e2fsck_fc_replay_state *state = &ctx->fc_replay_state;
+       int ret = JBD2_FC_REPLAY_CONTINUE;
+       struct ext4_fc_tl *tl;
+       __u8 *start, *end;
+
+       if (pass == PASS_SCAN) {
+               state->fc_current_pass = PASS_SCAN;
+               return ext4_fc_replay_scan(journal, bh, off, expected_tid);
+       }
+
+       if (state->fc_replay_num_tags == 0)
+               goto replay_done;
+
+       if (state->fc_current_pass != pass) {
+               /* Starting replay phase */
+               state->fc_current_pass = pass;
+               /* We will reset checksums */
+               ctx->fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
+               ret = errcode_to_errno(ext2fs_read_bitmaps(ctx->fs));
+               if (ret) {
+                       jbd_debug(1, "Error %d while reading bitmaps\n", ret);
+                       return ret;
+               }
+               state->fc_super_state = ctx->fs->super->s_state;
+               /*
+                * Mark the file system to indicate it contains errors. That's
+                * because the updates performed by fast commit replay code are
+                * not atomic and may result in incosistent file system if it
+                * crashes before the replay is complete.
+                */
+               ctx->fs->super->s_state |= EXT2_ERROR_FS;
+               ctx->fs->super->s_state |= EXT4_FC_REPLAY;
+               ext2fs_mark_super_dirty(ctx->fs);
+               ext2fs_flush(ctx->fs);
+       }
+
+       start = (__u8 *)bh->b_data;
+       end = (__u8 *)bh->b_data + journal->j_blocksize - 1;
+
+       fc_for_each_tl(start, end, tl) {
+               if (state->fc_replay_num_tags == 0)
+                       goto replay_done;
+               jbd_debug(3, "Replay phase processing %s tag\n",
+                               tag2str(le16_to_cpu(tl->fc_tag)));
+               state->fc_replay_num_tags--;
+               switch (le16_to_cpu(tl->fc_tag)) {
+               case EXT4_FC_TAG_CREAT:
+               case EXT4_FC_TAG_LINK:
+                       ret = ext4_fc_handle_link_and_create(ctx, tl);
+                       break;
+               case EXT4_FC_TAG_UNLINK:
+                       ret = ext4_fc_handle_unlink(ctx, tl);
+                       break;
+               case EXT4_FC_TAG_ADD_RANGE:
+                       ret = ext4_fc_handle_add_extent(ctx, tl);
+                       break;
+               case EXT4_FC_TAG_DEL_RANGE:
+                       ret = ext4_fc_handle_del_range(ctx, tl);
+                       break;
+               case EXT4_FC_TAG_INODE:
+                       ret = ext4_fc_handle_inode(ctx, tl);
+                       break;
+               case EXT4_FC_TAG_TAIL:
+                       ext4_fc_flush_extents(ctx, 0);
+               case EXT4_FC_TAG_PAD:
+               case EXT4_FC_TAG_HEAD:
+                       break;
+               default:
+                       ret = -ECANCELED;
+                       break;
+               }
+               if (ret < 0)
+                       break;
+               ret = JBD2_FC_REPLAY_CONTINUE;
+       }
+       return ret;
+replay_done:
+       jbd_debug(1, "End of fast commit replay\n");
+       if (state->fc_current_pass != pass)
+               return JBD2_FC_REPLAY_STOP;
+
+       ext2fs_calculate_summary_stats(ctx->fs, 0 /* update bg also */);
+       ext2fs_write_block_bitmap(ctx->fs);
+       ext2fs_write_inode_bitmap(ctx->fs);
+       ext2fs_mark_super_dirty(ctx->fs);
+       ext2fs_set_gdt_csum(ctx->fs);
+       ctx->fs->super->s_state = state->fc_super_state;
+       ext2fs_flush(ctx->fs);
+
+       return JBD2_FC_REPLAY_STOP;
+}
+
 static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
 {
        struct process_block_struct pb;
@@ -289,6 +942,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
        errcode_t               retval = 0;
        io_manager              io_ptr = 0;
        unsigned long long      start = 0;
+       int                     ret;
        int                     ext_journal = 0;
        int                     tried_backup_jnl = 0;
 
@@ -355,7 +1009,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
                        goto try_backup_journal;
                }
                if (EXT2_I_SIZE(&j_inode->i_ext2) / journal->j_blocksize <
-                   JFS_MIN_JOURNAL_BLOCKS) {
+                   JBD2_MIN_JOURNAL_BLOCKS) {
                        retval = EXT2_ET_JOURNAL_TOO_SMALL;
                        goto try_backup_journal;
                }
@@ -375,7 +1029,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
                                goto errout;
                }
 
-               journal->j_maxlen = EXT2_I_SIZE(&j_inode->i_ext2) /
+               journal->j_total_len = EXT2_I_SIZE(&j_inode->i_ext2) /
                        journal->j_blocksize;
 
 #ifdef USE_INODE_IO
@@ -389,8 +1043,10 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
 #else
                journal->j_inode = j_inode;
                ctx->journal_io = ctx->fs->io;
-               if ((retval = (errcode_t) journal_bmap(journal, 0, &start)) != 0)
+               if ((ret = jbd2_journal_bmap(journal, 0, &start)) != 0) {
+                       retval = (errcode_t) (-1 * ret);
                        goto errout;
+               }
 #endif
        } else {
                ext_journal = 1;
@@ -449,7 +1105,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
                        retval = EXT2_ET_NO_MEMORY;
                        goto errout;
                }
-               ll_rw_block(READ, 1, &bh);
+               ll_rw_block(REQ_OP_READ, 0, 1, &bh);
                if ((retval = bh->b_err) != 0) {
                        brelse(bh);
                        goto errout;
@@ -497,7 +1153,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
                brelse(bh);
 
                maxlen = ext2fs_blocks_count(&jsuper);
-               journal->j_maxlen = (maxlen < 1ULL << 32) ? maxlen : (1ULL << 32) - 1;
+               journal->j_total_len = (maxlen < 1ULL << 32) ? maxlen : (1ULL << 32) - 1;
                start++;
        }
 
@@ -508,6 +1164,10 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
 
        journal->j_sb_buffer = bh;
        journal->j_superblock = (journal_superblock_t *)bh->b_data;
+       if (ext2fs_has_feature_fast_commit(ctx->fs->super))
+               journal->j_fc_replay_callback = ext4_fc_replay;
+       else
+               journal->j_fc_replay_callback = NULL;
 
 #ifdef USE_INODE_IO
        if (j_inode)
@@ -572,6 +1232,7 @@ static void clear_v2_journal_fields(journal_t *journal)
        if (!fix_problem(ctx, PR_0_CLEAR_V2_JOURNAL, &pctx))
                return;
 
+       ctx->flags |= E2F_FLAG_PROBLEMS_FIXED;
        memset(((char *) journal->j_superblock) + V1_SB_SIZE, 0,
               ctx->fs->blocksize-V1_SB_SIZE);
        mark_buffer_dirty(journal->j_sb_buffer);
@@ -587,7 +1248,7 @@ static errcode_t e2fsck_journal_load(journal_t *journal)
 
        clear_problem_context(&pctx);
 
-       ll_rw_block(READ, 1, &jbh);
+       ll_rw_block(REQ_OP_READ, 0, 1, &jbh);
        if (jbh->b_err) {
                com_err(ctx->device_name, jbh->b_err, "%s",
                        _("reading journal superblock\n"));
@@ -595,12 +1256,12 @@ static errcode_t e2fsck_journal_load(journal_t *journal)
        }
 
        jsb = journal->j_superblock;
-       /* If we don't even have JFS_MAGIC, we probably have a wrong inode */
-       if (jsb->s_header.h_magic != htonl(JFS_MAGIC_NUMBER))
+       /* If we don't even have JBD2_MAGIC, we probably have a wrong inode */
+       if (jsb->s_header.h_magic != htonl(JBD2_MAGIC_NUMBER))
                return e2fsck_journal_fix_bad_inode(ctx, &pctx);
 
        switch (ntohl(jsb->s_header.h_blocktype)) {
-       case JFS_SUPERBLOCK_V1:
+       case JBD2_SUPERBLOCK_V1:
                journal->j_format_version = 1;
                if (jsb->s_feature_compat ||
                    jsb->s_feature_incompat ||
@@ -609,7 +1270,7 @@ static errcode_t e2fsck_journal_load(journal_t *journal)
                        clear_v2_journal_fields(journal);
                break;
 
-       case JFS_SUPERBLOCK_V2:
+       case JBD2_SUPERBLOCK_V2:
                journal->j_format_version = 2;
                if (ntohl(jsb->s_nr_users) > 1 &&
                    uuid_is_null(ctx->fs->super->s_journal_uuid))
@@ -624,9 +1285,9 @@ static errcode_t e2fsck_journal_load(journal_t *journal)
         * These should never appear in a journal super block, so if
         * they do, the journal is badly corrupted.
         */
-       case JFS_DESCRIPTOR_BLOCK:
-       case JFS_COMMIT_BLOCK:
-       case JFS_REVOKE_BLOCK:
+       case JBD2_DESCRIPTOR_BLOCK:
+       case JBD2_COMMIT_BLOCK:
+       case JBD2_REVOKE_BLOCK:
                return EXT2_ET_CORRUPT_JOURNAL_SB;
 
        /* If we don't understand the superblock major type, but there
@@ -636,25 +1297,25 @@ static errcode_t e2fsck_journal_load(journal_t *journal)
                return EXT2_ET_JOURNAL_UNSUPP_VERSION;
        }
 
-       if (JFS_HAS_INCOMPAT_FEATURE(journal, ~JFS_KNOWN_INCOMPAT_FEATURES))
+       if (JBD2_HAS_INCOMPAT_FEATURE(journal, ~JBD2_KNOWN_INCOMPAT_FEATURES))
                return EXT2_ET_UNSUPP_FEATURE;
 
-       if (JFS_HAS_RO_COMPAT_FEATURE(journal, ~JFS_KNOWN_ROCOMPAT_FEATURES))
+       if (JBD2_HAS_RO_COMPAT_FEATURE(journal, ~JBD2_KNOWN_ROCOMPAT_FEATURES))
                return EXT2_ET_RO_UNSUPP_FEATURE;
 
        /* Checksum v1-3 are mutually exclusive features. */
-       if (jfs_has_feature_csum2(journal) && jfs_has_feature_csum3(journal))
+       if (jbd2_has_feature_csum2(journal) && jbd2_has_feature_csum3(journal))
                return EXT2_ET_CORRUPT_JOURNAL_SB;
 
-       if (journal_has_csum_v2or3(journal) &&
-           jfs_has_feature_checksum(journal))
+       if (jbd2_journal_has_csum_v2or3(journal) &&
+           jbd2_has_feature_checksum(journal))
                return EXT2_ET_CORRUPT_JOURNAL_SB;
 
        if (!e2fsck_journal_verify_csum_type(journal, jsb) ||
            !e2fsck_journal_sb_csum_verify(journal, jsb))
                return EXT2_ET_CORRUPT_JOURNAL_SB;
 
-       if (journal_has_csum_v2or3(journal))
+       if (jbd2_journal_has_csum_v2or3(journal))
                journal->j_csum_seed = jbd2_chksum(journal, ~0, jsb->s_uuid,
                                                   sizeof(jsb->s_uuid));
 
@@ -668,9 +1329,9 @@ static errcode_t e2fsck_journal_load(journal_t *journal)
                return EXT2_ET_CORRUPT_JOURNAL_SB;
        }
 
-       if (ntohl(jsb->s_maxlen) < journal->j_maxlen)
-               journal->j_maxlen = ntohl(jsb->s_maxlen);
-       else if (ntohl(jsb->s_maxlen) > journal->j_maxlen) {
+       if (ntohl(jsb->s_maxlen) < journal->j_total_len)
+               journal->j_total_len = ntohl(jsb->s_maxlen);
+       else if (ntohl(jsb->s_maxlen) > journal->j_total_len) {
                com_err(ctx->program_name, EXT2_ET_CORRUPT_JOURNAL_SB,
                        _("%s: journal too short\n"),
                        ctx->device_name);
@@ -681,7 +1342,21 @@ static errcode_t e2fsck_journal_load(journal_t *journal)
        journal->j_transaction_sequence = journal->j_tail_sequence;
        journal->j_tail = ntohl(jsb->s_start);
        journal->j_first = ntohl(jsb->s_first);
-       journal->j_last = ntohl(jsb->s_maxlen);
+       if (jbd2_has_feature_fast_commit(journal)) {
+               if (ntohl(jsb->s_maxlen) - jbd2_journal_get_num_fc_blks(jsb)
+                       < JBD2_MIN_JOURNAL_BLOCKS) {
+                       com_err(ctx->program_name, EXT2_ET_CORRUPT_JOURNAL_SB,
+                               _("%s: incorrect fast commit blocks\n"),
+                               ctx->device_name);
+                       return EXT2_ET_CORRUPT_JOURNAL_SB;
+               }
+               journal->j_fc_last = ntohl(jsb->s_maxlen);
+               journal->j_last = journal->j_fc_last -
+                                       jbd2_journal_get_num_fc_blks(jsb);
+               journal->j_fc_first = journal->j_last + 1;
+       } else {
+               journal->j_last = ntohl(jsb->s_maxlen);
+       }
 
        return 0;
 }
@@ -701,10 +1376,10 @@ static void e2fsck_journal_reset_super(e2fsck_t ctx, journal_superblock_t *jsb,
         * Anything unrecognisable we overwrite with a new V2
         * signature. */
 
-       if (jsb->s_header.h_magic != htonl(JFS_MAGIC_NUMBER) ||
-           jsb->s_header.h_blocktype != htonl(JFS_SUPERBLOCK_V1)) {
-               jsb->s_header.h_magic = htonl(JFS_MAGIC_NUMBER);
-               jsb->s_header.h_blocktype = htonl(JFS_SUPERBLOCK_V2);
+       if (jsb->s_header.h_magic != htonl(JBD2_MAGIC_NUMBER) ||
+           jsb->s_header.h_blocktype != htonl(JBD2_SUPERBLOCK_V1)) {
+               jsb->s_header.h_magic = htonl(JBD2_MAGIC_NUMBER);
+               jsb->s_header.h_blocktype = htonl(JBD2_SUPERBLOCK_V2);
        }
 
        /* Zero out everything else beyond the superblock header */
@@ -713,7 +1388,7 @@ static void e2fsck_journal_reset_super(e2fsck_t ctx, journal_superblock_t *jsb,
        memset (p, 0, ctx->fs->blocksize-sizeof(journal_header_t));
 
        jsb->s_blocksize = htonl(ctx->fs->blocksize);
-       jsb->s_maxlen = htonl(journal->j_maxlen);
+       jsb->s_maxlen = htonl(journal->j_total_len);
        jsb->s_first = htonl(1);
 
        /* Initialize the journal sequence number so that there is "no"
@@ -728,7 +1403,7 @@ static void e2fsck_journal_reset_super(e2fsck_t ctx, journal_superblock_t *jsb,
        e2fsck_journal_sb_csum_set(journal, jsb);
 
        mark_buffer_dirty(journal->j_sb_buffer);
-       ll_rw_block(WRITE, 1, &journal->j_sb_buffer);
+       ll_rw_block(REQ_OP_WRITE, 0, 1, &journal->j_sb_buffer);
 }
 
 static errcode_t e2fsck_journal_fix_corrupt_super(e2fsck_t ctx,
@@ -924,7 +1599,14 @@ static errcode_t recover_ext3_journal(e2fsck_t ctx)
 
        clear_problem_context(&pctx);
 
-       journal_init_revoke_caches();
+       retval = jbd2_journal_init_revoke_record_cache();
+       if (retval)
+               return retval;
+
+       retval = jbd2_journal_init_revoke_table_cache();
+       if (retval)
+               return retval;
+
        retval = e2fsck_get_journal(ctx, &journal);
        if (retval)
                return retval;
@@ -933,11 +1615,11 @@ static errcode_t recover_ext3_journal(e2fsck_t ctx)
        if (retval)
                goto errout;
 
-       retval = journal_init_revoke(journal, 1024);
+       retval = jbd2_journal_init_revoke(journal, 1024);
        if (retval)
                goto errout;
 
-       retval = -journal_recover(journal);
+       retval = -jbd2_journal_recover(journal);
        if (retval)
                goto errout;
 
@@ -951,8 +1633,9 @@ static errcode_t recover_ext3_journal(e2fsck_t ctx)
        journal->j_tail_sequence = journal->j_transaction_sequence;
 
 errout:
-       journal_destroy_revoke(journal);
-       journal_destroy_revoke_caches();
+       jbd2_journal_destroy_revoke(journal);
+       jbd2_journal_destroy_revoke_record_cache();
+       jbd2_journal_destroy_revoke_table_cache();
        e2fsck_journal_release(ctx, journal, 1, 0);
        return retval;
 }
index e004f31..63e9a12 100644 (file)
@@ -285,8 +285,9 @@ static FILE *save_output(const char *s0, const char *s1, const char *s2)
 }
 
 #ifndef TEST_PROGRAM
-void set_up_logging(e2fsck_t ctx)
+static FILE *set_up_log_file(e2fsck_t ctx, const char *key, const char *fn)
 {
+       FILE *f = NULL;
        struct string s, s1, s2;
        char *s0 = 0, *log_dir = 0, *log_fn = 0;
        int log_dir_wait = 0;
@@ -295,10 +296,10 @@ void set_up_logging(e2fsck_t ctx)
 
        profile_get_boolean(ctx->profile, "options", "log_dir_wait", 0, 0,
                            &log_dir_wait);
-       if (ctx->log_fn)
-               log_fn = string_copy(ctx, ctx->log_fn, 0);
+       if (fn)
+               log_fn = string_copy(ctx, fn, 0);
        else
-               profile_get_string(ctx->profile, "options", "log_filename",
+               profile_get_string(ctx->profile, "options", key,
                                   0, 0, &log_fn);
        profile_get_string(ctx->profile, "options", "log_dir", 0, 0, &log_dir);
 
@@ -328,13 +329,13 @@ void set_up_logging(e2fsck_t ctx)
        }
 
        if (s0)
-               ctx->logf = fopen(s0, "w");
-       if (!ctx->logf && s1.s)
-               ctx->logf = fopen(s1.s, "w");
-       if (!ctx->logf && s2.s)
-               ctx->logf = fopen(s2.s, "w");
-       if (!ctx->logf && log_dir_wait)
-               ctx->logf = save_output(s0, s1.s, s2.s);
+               f = fopen(s0, "w");
+       if (!f && s1.s)
+               f = fopen(s1.s, "w");
+       if (!f && s2.s)
+               f = fopen(s2.s, "w");
+       if (!f && log_dir_wait)
+               f = save_output(s0, s1.s, s2.s);
 
 out:
        free(s.s);
@@ -342,10 +343,17 @@ out:
        free(s2.s);
        free(log_fn);
        free(log_dir);
-       return;
+       return f;
+}
+
+void set_up_logging(e2fsck_t ctx)
+{
+       ctx->logf = set_up_log_file(ctx, "log_filename", ctx->log_fn);
+       ctx->problem_logf = set_up_log_file(ctx, "problem_log_filename",
+                                           ctx->problem_log_fn);
 }
 #else
-void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned int size,
+void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned long size,
                             const char *description)
 {
        void *ret;
index 1c3fcd8..727f71d 100644 (file)
@@ -32,7 +32,7 @@
  *     %IM     <inode> -> i_mtime
  *     %IF     <inode> -> i_faddr
  *     %If     <inode> -> i_file_acl
- *     %Id     <inode> -> i_dir_acl
+ *     %Id     <inode> -> i_size_high
  *     %Iu     <inode> -> i_uid
  *     %Ig     <inode> -> i_gid
  *     %It     <inode type>
@@ -48,6 +48,9 @@
  *                     the containing directory.
  *     %r      <blkcount>              interpret blkcount as refcount
  *     %s      <str>                   miscellaneous string
+ *     %t      time (in <num>)
+ *     %T      current time
+ *     %U      quota type (in <num>)
  *     %S      backup superblock
  *     %X      <num> hexadecimal format
  *
@@ -92,9 +95,9 @@
 #include <string.h>
 #include <ctype.h>
 #include <termios.h>
+#include "support/quotaio.h"
 
 #include "e2fsck.h"
-
 #include "problem.h"
 
 #ifdef __GNUC__
@@ -221,7 +224,7 @@ static void print_time(FILE *f, time_t t)
        static int              do_gmt = -1;
 
 #ifdef __dietlibc__
-               /* The diet libc doesn't respect the TZ environemnt variable */
+               /* The diet libc doesn't respect the TZ environment variable */
                if (do_gmt == -1) {
                        time_str = getenv("TZ");
                        if (!time_str)
@@ -280,17 +283,8 @@ static _INLINE_ void expand_inode_expression(FILE *f, ext2_filsys fs, char ch,
        case 's':
                if (LINUX_S_ISDIR(inode->i_mode))
                        fprintf(f, "%u", inode->i_size);
-               else {
-#ifdef EXT2_NO_64_TYPE
-                       if (inode->i_size_high)
-                               fprintf(f, "0x%x%08x", inode->i_size_high,
-                                       inode->i_size);
-                       else
-                               fprintf(f, "%u", inode->i_size);
-#else
+               else
                        fprintf(f, "%llu", EXT2_I_SIZE(inode));
-#endif
-               }
                break;
        case 'S':
                fprintf(f, "%u", large_inode->i_extra_isize);
@@ -320,7 +314,7 @@ static _INLINE_ void expand_inode_expression(FILE *f, ext2_filsys fs, char ch,
                break;
        case 'd':
                fprintf(f, "%u", (LINUX_S_ISDIR(inode->i_mode) ?
-                                 inode->i_dir_acl : 0));
+                       inode->i_size_high : 0));
                break;
        case 'u':
                fprintf(f, "%d", inode_uid(*inode));
@@ -411,11 +405,7 @@ static _INLINE_ void expand_percent_expression(FILE *f, ext2_filsys fs,
                fputc('%', f);
                break;
        case 'b':
-#ifdef EXT2_NO_64_TYPE
-               fprintf(f, "%*u", width, (unsigned long) ctx->blk);
-#else
                fprintf(f, "%*llu", width, (unsigned long long) ctx->blk);
-#endif
                break;
        case 'B':
                if (ctx->blkcount == BLOCK_COUNT_IND)
@@ -431,20 +421,11 @@ static _INLINE_ void expand_percent_expression(FILE *f, ext2_filsys fs,
                if (*first && islower(m[0]))
                        fputc(toupper(*m++), f);
                fputs(m, f);
-               if (ctx->blkcount >= 0) {
-#ifdef EXT2_NO_64_TYPE
-                       fprintf(f, "%d", ctx->blkcount);
-#else
+               if (ctx->blkcount >= 0)
                        fprintf(f, "%lld", (long long) ctx->blkcount);
-#endif
-               }
                break;
        case 'c':
-#ifdef EXT2_NO_64_TYPE
-               fprintf(f, "%*u", width, (unsigned long) ctx->blk2);
-#else
                fprintf(f, "%*llu", width, (unsigned long long) ctx->blk2);
-#endif
                break;
        case 'd':
                fprintf(f, "%*u", width, ctx->dir);
@@ -462,11 +443,10 @@ static _INLINE_ void expand_percent_expression(FILE *f, ext2_filsys fs,
                fprintf(f, "%*s", width, error_message(ctx->errcode));
                break;
        case 'N':
-#ifdef EXT2_NO_64_TYPE
-               fprintf(f, "%*u", width, ctx->num);
-#else
                fprintf(f, "%*llu", width, (long long)ctx->num);
-#endif
+               break;
+       case 'n':
+               fprintf(f, "%*llu", width, (long long)ctx->num2);
                break;
        case 'p':
                print_pathname(f, fs, ctx->ino, 0);
@@ -482,11 +462,7 @@ static _INLINE_ void expand_percent_expression(FILE *f, ext2_filsys fs,
                print_pathname(f, fs, ctx->dir, ctx->ino);
                break;
        case 'r':
-#ifdef EXT2_NO_64_TYPE
-               fprintf(f, "%*d", width, ctx->blkcount);
-#else
                fprintf(f, "%*lld", width, (long long) ctx->blkcount);
-#endif
                break;
        case 'S':
                fprintf(f, "%llu", get_backup_sb(NULL, fs, NULL, NULL));
@@ -500,15 +476,32 @@ static _INLINE_ void expand_percent_expression(FILE *f, ext2_filsys fs,
        case 'T':
                print_time(f, e2fsck_ctx ? e2fsck_ctx->now : time(0));
                break;
+       case 'U':
+               switch (ctx->num) {
+               case USRQUOTA:
+                       m = _("user");
+                       break;
+               case GRPQUOTA:
+                       m = _("group");
+                       break;
+               case PRJQUOTA:
+                       m = _("project");
+                       break;
+               default:
+                       m = _("unknown quota type");
+                       break;
+               }
+               if (*first && islower(m[0]))
+                       fputc(toupper(*m++), f);
+               fputs(m, f);
+               if (ctx->num > PRJQUOTA)
+                       fprintf(f, " %d", (int) ctx->num);
+               break;
        case 'x':
                fprintf(f, "0x%0*x", width, ctx->csum1);
                break;
        case 'X':
-#ifdef EXT2_NO_64_TYPE
-               fprintf(f, "0x%0*x", width, ctx->num);
-#else
                fprintf(f, "0x%0*llx", width, (long long)ctx->num);
-#endif
                break;
        case 'y':
                fprintf(f, "0x%0*x", width, ctx->csum2);
index f13809e..b866cc8 100644 (file)
  *     - A bitmap of which inodes have bad fields.     (inode_bad_map)
  *     - A bitmap of which inodes are in bad blocks.   (inode_bb_map)
  *     - A bitmap of which inodes are imagic inodes.   (inode_imagic_map)
+ *     - A bitmap of which inodes are casefolded.      (inode_casefold_map)
  *     - A bitmap of which blocks are in use.          (block_found_map)
  *     - A bitmap of which blocks are in use by two inodes     (block_dup_map)
  *     - The data blocks of the directory inodes.      (dir_map)
+ *     - Ref counts for ea_inodes.                     (ea_inode_refs)
+ *     - The encryption policy ID of each encrypted inode. (encrypted_files)
  *
  * Pass 1 is designed to stash away enough information so that the
  * other passes should not need to read in the inode information
- * during the normal course of a filesystem check.  (Althogh if an
+ * during the normal course of a filesystem check.  (Although if an
  * inconsistency is detected, other passes may need to read in an
  * inode to fix it.)
  *
@@ -47,6 +50,7 @@
 
 #include "e2fsck.h"
 #include <ext2fs/ext2_ext_attr.h>
+#include <e2p/e2p.h>
 
 #include "problem.h"
 
 
 #undef DEBUG
 
+struct ea_quota {
+       blk64_t blocks;
+       __u64 inodes;
+};
+
 static int process_block(ext2_filsys fs, blk64_t       *blocknr,
                         e2_blkcnt_t blockcnt, blk64_t ref_blk,
                         int ref_offset, void *priv_data);
@@ -65,12 +74,13 @@ static int process_bad_block(ext2_filsys fs, blk64_t *block_nr,
                             e2_blkcnt_t blockcnt, blk64_t ref_blk,
                             int ref_offset, void *priv_data);
 static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
-                        char *block_buf);
+                        char *block_buf,
+                        const struct ea_quota *ea_ibody_quota);
 static void mark_table_blocks(e2fsck_t ctx);
 static void alloc_bb_map(e2fsck_t ctx);
 static void alloc_imagic_map(e2fsck_t ctx);
 static void mark_inode_bad(e2fsck_t ctx, ino_t ino);
-static void add_encrypted_dir(e2fsck_t ctx, ino_t ino);
+static void add_casefolded_dir(e2fsck_t ctx, ino_t ino);
 static void handle_fs_bad_blocks(e2fsck_t ctx);
 static void process_inodes(e2fsck_t ctx, char *block_buf);
 static EXT2_QSORT_TYPE process_inode_cmp(const void *a, const void *b);
@@ -96,12 +106,13 @@ struct process_block_struct {
        struct problem_context *pctx;
        ext2fs_block_bitmap fs_meta_blocks;
        e2fsck_t        ctx;
-       region_t        region;
+       blk64_t         next_lblock;
        struct extent_tree_info eti;
 };
 
 struct process_inode_block {
        ext2_ino_t ino;
+       struct ea_quota ea_ibody_quota;
        struct ext2_inode_large inode;
 };
 
@@ -120,16 +131,6 @@ static __u64 ext2_max_sizes[EXT2_MAX_BLOCK_LOG_SIZE -
                            EXT2_MIN_BLOCK_LOG_SIZE + 1];
 
 /*
- * Free all memory allocated by pass1 in preparation for restarting
- * things.
- */
-static void unwind_pass1(ext2_filsys fs EXT2FS_ATTR((unused)))
-{
-       ext2fs_free_mem(&inodes_to_process);
-       inodes_to_process = 0;
-}
-
-/*
  * Check to make sure a device inode is real.  Returns 1 if the device
  * checks out, 0 if not.
  *
@@ -143,10 +144,10 @@ int e2fsck_pass1_check_device_inode(ext2_filsys fs EXT2FS_ATTR((unused)),
        int     i;
 
        /*
-        * If the index flag is set, then this is a bogus
+        * If the index or extents flag is set, then this is a bogus
         * device/fifo/socket
         */
-       if (inode->i_flags & EXT2_INDEX_FL)
+       if (inode->i_flags & (EXT2_INDEX_FL | EXT4_EXTENTS_FL))
                return 0;
 
        /*
@@ -175,44 +176,18 @@ int e2fsck_pass1_check_device_inode(ext2_filsys fs EXT2FS_ATTR((unused)),
 int e2fsck_pass1_check_symlink(ext2_filsys fs, ext2_ino_t ino,
                               struct ext2_inode *inode, char *buf)
 {
+       unsigned int buflen;
        unsigned int len;
-       int i;
-       blk64_t blocks;
-       ext2_extent_handle_t    handle;
-       struct ext2_extent_info info;
-       struct ext2fs_extent    extent;
 
        if ((inode->i_size_high || inode->i_size == 0) ||
            (inode->i_flags & EXT2_INDEX_FL))
                return 0;
 
-       if (inode->i_flags & EXT4_EXTENTS_FL) {
-               if (inode->i_flags & EXT4_INLINE_DATA_FL)
-                       return 0;
-               if (inode->i_size > fs->blocksize)
-                       return 0;
-               if (ext2fs_extent_open2(fs, ino, inode, &handle))
-                       return 0;
-               i = 0;
-               if (ext2fs_extent_get_info(handle, &info) ||
-                   (info.num_entries != 1) ||
-                   (info.max_depth != 0))
-                       goto exit_extent;
-               if (ext2fs_extent_get(handle, EXT2_EXTENT_ROOT, &extent) ||
-                   (extent.e_lblk != 0) ||
-                   (extent.e_len != 1) ||
-                   (extent.e_pblk < fs->super->s_first_data_block) ||
-                   (extent.e_pblk >= ext2fs_blocks_count(fs->super)))
-                       goto exit_extent;
-               i = 1;
-       exit_extent:
-               ext2fs_extent_free(handle);
-               return i;
-       }
-
        if (inode->i_flags & EXT4_INLINE_DATA_FL) {
                size_t inline_size;
 
+               if (inode->i_flags & EXT4_EXTENTS_FL)
+                       return 0;
                if (ext2fs_inline_data_size(fs, ino, &inline_size))
                        return 0;
                if (inode->i_size != inline_size)
@@ -221,62 +196,64 @@ int e2fsck_pass1_check_symlink(ext2_filsys fs, ext2_ino_t ino,
                return 1;
        }
 
-       blocks = ext2fs_inode_data_blocks2(fs, inode);
-       if (blocks) {
-               if (inode->i_flags & EXT4_INLINE_DATA_FL)
-                       return 0;
-               if ((inode->i_size >= fs->blocksize) ||
-                   (blocks != fs->blocksize >> 9) ||
-                   (inode->i_block[0] < fs->super->s_first_data_block) ||
-                   (inode->i_block[0] >= ext2fs_blocks_count(fs->super)))
+       if (ext2fs_is_fast_symlink(inode)) {
+               if (inode->i_flags & EXT4_EXTENTS_FL)
                        return 0;
+               buf = (char *)inode->i_block;
+               buflen = sizeof(inode->i_block);
+       } else {
+               ext2_extent_handle_t    handle;
+               struct ext2_extent_info info;
+               struct ext2fs_extent    extent;
+               blk64_t blk;
+               int i;
 
-               for (i = 1; i < EXT2_N_BLOCKS; i++)
-                       if (inode->i_block[i])
+               if (inode->i_flags & EXT4_EXTENTS_FL) {
+                       if (ext2fs_extent_open2(fs, ino, inode, &handle))
                                return 0;
-
-               if (io_channel_read_blk64(fs->io, inode->i_block[0], 1, buf))
-                       return 0;
-
-               if (inode->i_flags & EXT4_ENCRYPT_FL) {
-                       len = ext2fs_le32_to_cpu(*((__u32 *)buf)) + 4;
+                       if (ext2fs_extent_get_info(handle, &info) ||
+                           (info.num_entries != 1) ||
+                           (info.max_depth != 0)) {
+                               ext2fs_extent_free(handle);
+                               return 0;
+                       }
+                       if (ext2fs_extent_get(handle, EXT2_EXTENT_ROOT,
+                                             &extent) ||
+                           (extent.e_lblk != 0) ||
+                           (extent.e_len != 1)) {
+                               ext2fs_extent_free(handle);
+                               return 0;
+                       }
+                       blk = extent.e_pblk;
+                       ext2fs_extent_free(handle);
                } else {
-                       len = strnlen(buf, fs->blocksize);
+                       blk = inode->i_block[0];
+
+                       for (i = 1; i < EXT2_N_BLOCKS; i++)
+                               if (inode->i_block[i])
+                                       return 0;
                }
-               if (len == fs->blocksize)
-                       return 0;
-       } else if (inode->i_flags & EXT4_INLINE_DATA_FL) {
-               char *inline_buf = NULL;
-               size_t inline_sz = 0;
 
-               if (ext2fs_inline_data_size(fs, ino, &inline_sz))
-                       return 0;
-               if (inode->i_size != inline_sz)
-                       return 0;
-               if (ext2fs_get_mem(inline_sz + 1, &inline_buf))
-                       return 0;
-               i = 0;
-               if (ext2fs_inline_data_get(fs, ino, inode, inline_buf, NULL))
-                       goto exit_inline;
-               inline_buf[inline_sz] = 0;
-               len = strnlen(inline_buf, inline_sz);
-               if (len != inline_sz)
-                       goto exit_inline;
-               i = 1;
-exit_inline:
-               ext2fs_free_mem(&inline_buf);
-               return i;
-       } else {
-               if (inode->i_size >= sizeof(inode->i_block))
+               if (blk < fs->super->s_first_data_block ||
+                   blk >= ext2fs_blocks_count(fs->super))
                        return 0;
 
-               len = strnlen((char *)inode->i_block, sizeof(inode->i_block));
-               if (len == sizeof(inode->i_block))
+               if (io_channel_read_blk64(fs->io, blk, 1, buf))
                        return 0;
+
+               buflen = fs->blocksize;
        }
+
+       if (inode->i_flags & EXT4_ENCRYPT_FL)
+               len = ext2fs_le16_to_cpu(*(__u16 *)buf) + 2;
+       else
+               len = strnlen(buf, buflen);
+
+       if (len >= buflen)
+               return 0;
+
        if (len != inode->i_size)
-               if ((inode->i_flags & EXT4_ENCRYPT_FL) == 0)
-                       return 0;
+               return 0;
        return 1;
 }
 
@@ -333,21 +310,127 @@ static void check_size(e2fsck_t ctx, struct problem_context *pctx)
        e2fsck_write_inode(ctx, pctx->ino, pctx->inode, "pass1");
 }
 
-static void check_ea_in_inode(e2fsck_t ctx, struct problem_context *pctx)
+/*
+ * For a given size, calculate how many blocks would be charged towards quota.
+ */
+static blk64_t size_to_quota_blocks(ext2_filsys fs, size_t size)
+{
+       blk64_t clusters;
+
+       clusters = DIV_ROUND_UP(size, fs->blocksize << fs->cluster_ratio_bits);
+       return EXT2FS_C2B(fs, clusters);
+}
+
+/*
+ * Check validity of EA inode. Return 0 if EA inode is valid, otherwise return
+ * the problem code.
+ */
+static problem_t check_large_ea_inode(e2fsck_t ctx,
+                                     struct ext2_ext_attr_entry *entry,
+                                     struct problem_context *pctx,
+                                     blk64_t *quota_blocks)
+{
+       struct ext2_inode inode;
+       __u32 hash;
+       errcode_t retval;
+
+       /* Check if inode is within valid range */
+       if ((entry->e_value_inum < EXT2_FIRST_INODE(ctx->fs->super)) ||
+           (entry->e_value_inum > ctx->fs->super->s_inodes_count)) {
+               pctx->num = entry->e_value_inum;
+               return PR_1_ATTR_VALUE_EA_INODE;
+       }
+
+       e2fsck_read_inode(ctx, entry->e_value_inum, &inode, "pass1");
+
+       retval = ext2fs_ext_attr_hash_entry2(ctx->fs, entry, NULL, &hash);
+       if (retval) {
+               com_err("check_large_ea_inode", retval,
+                       _("while hashing entry with e_value_inum = %u"),
+                       entry->e_value_inum);
+               fatal_error(ctx, 0);
+       }
+
+       if (hash == entry->e_hash) {
+               *quota_blocks = size_to_quota_blocks(ctx->fs,
+                                                    entry->e_value_size);
+       } else {
+               /* This might be an old Lustre-style ea_inode reference. */
+               if (inode.i_mtime == pctx->ino &&
+                   inode.i_generation == pctx->inode->i_generation) {
+                       *quota_blocks = 0;
+               } else {
+                       /* If target inode is also missing EA_INODE flag,
+                        * this is likely to be a bad reference.
+                        */
+                       if (!(inode.i_flags & EXT4_EA_INODE_FL)) {
+                               pctx->num = entry->e_value_inum;
+                               return PR_1_ATTR_VALUE_EA_INODE;
+                       } else {
+                               pctx->num = entry->e_hash;
+                               return PR_1_ATTR_HASH;
+                       }
+               }
+       }
+
+       if (!(inode.i_flags & EXT4_EA_INODE_FL)) {
+               pctx->num = entry->e_value_inum;
+               if (fix_problem(ctx, PR_1_ATTR_SET_EA_INODE_FL, pctx)) {
+                       inode.i_flags |= EXT4_EA_INODE_FL;
+                       ext2fs_write_inode(ctx->fs, entry->e_value_inum,
+                                          &inode);
+               } else {
+                       return PR_1_ATTR_NO_EA_INODE_FL;
+               }
+       }
+       return 0;
+}
+
+static void inc_ea_inode_refs(e2fsck_t ctx, struct problem_context *pctx,
+                             struct ext2_ext_attr_entry *first, void *end)
+{
+       struct ext2_ext_attr_entry *entry;
+
+       for (entry = first;
+            (void *)entry < end && !EXT2_EXT_IS_LAST_ENTRY(entry);
+            entry = EXT2_EXT_ATTR_NEXT(entry)) {
+               if (!entry->e_value_inum)
+                       continue;
+               if (!ctx->ea_inode_refs) {
+                       pctx->errcode = ea_refcount_create(0,
+                                                          &ctx->ea_inode_refs);
+                       if (pctx->errcode) {
+                               pctx->num = 4;
+                               fix_problem(ctx, PR_1_ALLOCATE_REFCOUNT, pctx);
+                               ctx->flags |= E2F_FLAG_ABORT;
+                               return;
+                       }
+               }
+               ea_refcount_increment(ctx->ea_inode_refs, entry->e_value_inum,
+                                     0);
+       }
+}
+
+static void check_ea_in_inode(e2fsck_t ctx, struct problem_context *pctx,
+                             struct ea_quota *ea_ibody_quota)
 {
        struct ext2_super_block *sb = ctx->fs->super;
        struct ext2_inode_large *inode;
        struct ext2_ext_attr_entry *entry;
-       char *start, *header;
+       char *start, *header, *end;
        unsigned int storage_size, remain;
        problem_t problem = 0;
        region_t region = 0;
 
+       ea_ibody_quota->blocks = 0;
+       ea_ibody_quota->inodes = 0;
+
        inode = (struct ext2_inode_large *) pctx->inode;
        storage_size = EXT2_INODE_SIZE(ctx->fs->super) - EXT2_GOOD_OLD_INODE_SIZE -
                inode->i_extra_isize;
        header = ((char *) inode) + EXT2_GOOD_OLD_INODE_SIZE +
                 inode->i_extra_isize;
+       end = header + storage_size;
        start = header + sizeof(__u32);
        entry = (struct ext2_ext_attr_entry *) start;
 
@@ -391,38 +474,48 @@ static void check_ea_in_inode(e2fsck_t ctx, struct problem_context *pctx)
                /* attribute len eats this space */
                remain -= EXT2_EXT_ATTR_SIZE(entry->e_name_len);
 
-               /* check value size */
-               if (entry->e_value_size > remain) {
-                       pctx->num = entry->e_value_size;
-                       problem = PR_1_ATTR_VALUE_SIZE;
-                       goto fix;
-               }
+               if (entry->e_value_inum == 0) {
+                       /* check value size */
+                       if (entry->e_value_size > remain) {
+                               pctx->num = entry->e_value_size;
+                               problem = PR_1_ATTR_VALUE_SIZE;
+                               goto fix;
+                       }
 
-               /* e_value_block must be 0 in inode's ea */
-               if (entry->e_value_block != 0) {
-                       pctx->num = entry->e_value_block;
-                       problem = PR_1_ATTR_VALUE_BLOCK;
-                       goto fix;
-               }
+                       if (entry->e_value_size &&
+                           region_allocate(region,
+                                           sizeof(__u32) + entry->e_value_offs,
+                                           EXT2_EXT_ATTR_SIZE(
+                                               entry->e_value_size))) {
+                               problem = PR_1_INODE_EA_ALLOC_COLLISION;
+                               goto fix;
+                       }
 
-               if (entry->e_value_size &&
-                   region_allocate(region, sizeof(__u32) + entry->e_value_offs,
-                                   EXT2_EXT_ATTR_SIZE(entry->e_value_size))) {
-                       problem = PR_1_INODE_EA_ALLOC_COLLISION;
-                       goto fix;
-               }
+                       hash = ext2fs_ext_attr_hash_entry(entry,
+                                                         start + entry->e_value_offs);
 
-               hash = ext2fs_ext_attr_hash_entry(entry,
-                                                 start + entry->e_value_offs);
+                       /* e_hash may be 0 in older inode's ea */
+                       if (entry->e_hash != 0 && entry->e_hash != hash) {
+                               pctx->num = entry->e_hash;
+                               problem = PR_1_ATTR_HASH;
+                               goto fix;
+                       }
+               } else {
+                       blk64_t quota_blocks;
 
-               /* e_hash may be 0 in older inode's ea */
-               if (entry->e_hash != 0 && entry->e_hash != hash) {
-                       pctx->num = entry->e_hash;
-                       problem = PR_1_ATTR_HASH;
-                       goto fix;
+                       problem = check_large_ea_inode(ctx, entry, pctx,
+                                                      &quota_blocks);
+                       if (problem != 0)
+                               goto fix;
+
+                       ea_ibody_quota->blocks += quota_blocks;
+                       ea_ibody_quota->inodes++;
                }
 
-               remain -= entry->e_value_size;
+               /* If EA value is stored in external inode then it does not
+                * consume space here */
+               if (entry->e_value_inum == 0)
+                       remain -= entry->e_value_size;
 
                entry = EXT2_EXT_ATTR_NEXT(entry);
        }
@@ -439,17 +532,22 @@ fix:
         * it seems like a corruption. it's very unlikely we could repair
         * EA(s) in automatic fashion -bzzz
         */
-       if (problem == 0 || !fix_problem(ctx, problem, pctx))
+       if (problem == 0 || !fix_problem(ctx, problem, pctx)) {
+               inc_ea_inode_refs(ctx, pctx,
+                                 (struct ext2_ext_attr_entry *)start, end);
                return;
+       }
 
        /* simply remove all possible EA(s) */
        *((__u32 *)header) = 0UL;
        e2fsck_write_inode_full(ctx, pctx->ino, pctx->inode,
                                EXT2_INODE_SIZE(sb), "pass1");
+       ea_ibody_quota->blocks = 0;
+       ea_ibody_quota->inodes = 0;
 }
 
 static int check_inode_extra_negative_epoch(__u32 xtime, __u32 extra) {
-       return (xtime & (1 << 31)) != 0 &&
+       return (xtime & (1U << 31)) != 0 &&
                (extra & EXT4_EPOCH_MASK) == EXT4_EPOCH_MASK;
 }
 
@@ -463,13 +561,17 @@ static int check_inode_extra_negative_epoch(__u32 xtime, __u32 extra) {
  */
 #define EXT4_EXTRA_NEGATIVE_DATE_CUTOFF 2 * (1LL << 32)
 
-static void check_inode_extra_space(e2fsck_t ctx, struct problem_context *pctx)
+static void check_inode_extra_space(e2fsck_t ctx, struct problem_context *pctx,
+                                   struct ea_quota *ea_ibody_quota)
 {
        struct ext2_super_block *sb = ctx->fs->super;
        struct ext2_inode_large *inode;
        __u32 *eamagic;
        int min, max;
 
+       ea_ibody_quota->blocks = 0;
+       ea_ibody_quota->inodes = 0;
+
        inode = (struct ext2_inode_large *) pctx->inode;
        if (EXT2_INODE_SIZE(sb) == EXT2_GOOD_OLD_INODE_SIZE) {
                /* this isn't large inode. so, nothing to check */
@@ -498,7 +600,6 @@ static void check_inode_extra_space(e2fsck_t ctx, struct problem_context *pctx)
                        inode->i_extra_isize = (inode->i_extra_isize + 3) & ~3;
                e2fsck_write_inode_full(ctx, pctx->ino, pctx->inode,
                                        EXT2_INODE_SIZE(sb), "pass1");
-               return;
        }
 
        /* check if there is no place for an EA header */
@@ -509,7 +610,7 @@ static void check_inode_extra_space(e2fsck_t ctx, struct problem_context *pctx)
                        inode->i_extra_isize);
        if (*eamagic == EXT2_EXT_ATTR_MAGIC) {
                /* it seems inode has an extended attribute(s) in body */
-               check_ea_in_inode(ctx, pctx);
+               check_ea_in_inode(ctx, pctx, ea_ibody_quota);
        }
 
        /*
@@ -734,6 +835,8 @@ extern errcode_t e2fsck_setup_icount(e2fsck_t ctx, const char *icount_name,
        }
        e2fsck_set_bitmap_type(ctx->fs, EXT2FS_BMAP64_RBTREE, icount_name,
                               &save_type);
+       if (ctx->options & E2F_OPT_ICOUNT_FULLMAP)
+               flags |= EXT2_ICOUNT_OPT_FULLMAP;
        retval = ext2fs_create_icount2(ctx->fs, flags, 0, hint, ret);
        ctx->fs->default_bitmap_type = save_type;
        return retval;
@@ -1060,13 +1163,15 @@ void e2fsck_pass1(e2fsck_t ctx)
        struct          scan_callback_struct scan_struct;
        struct ext2_super_block *sb = ctx->fs->super;
        const char      *old_op;
-       int             imagic_fs, extent_fs, inlinedata_fs;
+       const char      *eop_next_inode = _("getting next inode from scan");
+       int             imagic_fs, extent_fs, inlinedata_fs, casefold_fs;
        int             low_dtime_check = 1;
-       int             inode_size = EXT2_INODE_SIZE(fs->super);
-       int             bufsize;
+       unsigned int    inode_size = EXT2_INODE_SIZE(fs->super);
+       unsigned int    bufsize;
        int             failed_csum = 0;
        ext2_ino_t      ino_threshold = 0;
        dgrp_t          ra_group = 0;
+       struct ea_quota ea_ibody_quota;
 
        init_resource_track(&rtrack, ctx->fs->io);
        clear_problem_context(&pctx);
@@ -1105,6 +1210,7 @@ void e2fsck_pass1(e2fsck_t ctx)
        imagic_fs = ext2fs_has_feature_imagic_inodes(sb);
        extent_fs = ext2fs_has_feature_extents(sb);
        inlinedata_fs = ext2fs_has_feature_inline_data(sb);
+       casefold_fs = ext2fs_has_feature_casefold(sb);
 
        /*
         * Allocate bitmaps structures
@@ -1156,6 +1262,20 @@ void e2fsck_pass1(e2fsck_t ctx)
                ctx->flags |= E2F_FLAG_ABORT;
                return;
        }
+       if (casefold_fs) {
+               pctx.errcode =
+                       e2fsck_allocate_inode_bitmap(fs,
+                                                    _("inode casefold map"),
+                                                    EXT2FS_BMAP64_RBTREE,
+                                                    "inode_casefold_map",
+                                                    &ctx->inode_casefold_map);
+               if (pctx.errcode) {
+                       pctx.num = 1;
+                       fix_problem(ctx, PR_1_ALLOCATE_IBITMAP_ERROR, &pctx);
+                       ctx->flags |= E2F_FLAG_ABORT;
+                       return;
+               }
+       }
        pctx.errcode = e2fsck_setup_icount(ctx, "inode_link_info", 0, NULL,
                                           &ctx->inode_link_info);
        if (pctx.errcode) {
@@ -1228,8 +1348,10 @@ void e2fsck_pass1(e2fsck_t ctx)
        if (ctx->progress && ((ctx->progress)(ctx, 1, 0,
                                              ctx->fs->group_desc_count)))
                goto endit;
-       if ((fs->super->s_wtime < fs->super->s_inodes_count) ||
-           (fs->super->s_mtime < fs->super->s_inodes_count) ||
+       if ((fs->super->s_wtime &&
+            fs->super->s_wtime < fs->super->s_inodes_count) ||
+           (fs->super->s_mtime &&
+            fs->super->s_mtime < fs->super->s_inodes_count) ||
            (fs->super->s_mkfs_time &&
             fs->super->s_mkfs_time < fs->super->s_inodes_count))
                low_dtime_check = 0;
@@ -1248,7 +1370,7 @@ void e2fsck_pass1(e2fsck_t ctx)
                        if (e2fsck_mmp_update(fs))
                                fatal_error(ctx, 0);
                }
-               old_op = ehandler_operation(_("getting next inode from scan"));
+               old_op = ehandler_operation(eop_next_inode);
                pctx.errcode = ext2fs_get_next_inode_full(scan, &ino,
                                                          inode, inode_size);
                if (ino > ino_threshold)
@@ -1276,17 +1398,9 @@ void e2fsck_pass1(e2fsck_t ctx)
                                        fix_problem(ctx, PR_1_ISCAN_ERROR,
                                                    &pctx);
                                        ctx->flags |= E2F_FLAG_ABORT;
-                                       goto endit;
-                               }
-                               err = ext2fs_inode_scan_goto_blockgroup(scan,
-                                                                       0);
-                               if (err) {
-                                       fix_problem(ctx, PR_1_ISCAN_ERROR,
-                                                   &pctx);
-                                       ctx->flags |= E2F_FLAG_ABORT;
-                                       goto endit;
-                               }
-                               continue;
+                               } else
+                                       ctx->flags |= E2F_FLAG_RESTART;
+                               goto endit;
                        }
                        if (!ctx->inode_bb_map)
                                alloc_bb_map(ctx);
@@ -1316,6 +1430,34 @@ void e2fsck_pass1(e2fsck_t ctx)
                }
                failed_csum = pctx.errcode != 0;
 
+               /*
+                * Check for inodes who might have been part of the
+                * orphaned list linked list.  They should have gotten
+                * dealt with by now, unless the list had somehow been
+                * corrupted.
+                *
+                * FIXME: In the future, inodes which are still in use
+                * (and which are therefore) pending truncation should
+                * be handled specially.  Right now we just clear the
+                * dtime field, and the normal e2fsck handling of
+                * inodes where i_size and the inode blocks are
+                * inconsistent is to fix i_size, instead of releasing
+                * the extra blocks.  This won't catch the inodes that
+                * was at the end of the orphan list, but it's better
+                * than nothing.  The right answer is that there
+                * shouldn't be any bugs in the orphan list handling.  :-)
+                */
+               if (inode->i_dtime && low_dtime_check &&
+                   inode->i_dtime < ctx->fs->super->s_inodes_count) {
+                       if (fix_problem(ctx, PR_1_LOW_DTIME, &pctx)) {
+                               inode->i_dtime = inode->i_links_count ?
+                                       0 : ctx->now;
+                               e2fsck_write_inode(ctx, ino, inode,
+                                                  "pass1");
+                               failed_csum = 0;
+                       }
+               }
+
                if (inode->i_links_count) {
                        pctx.errcode = ext2fs_icount_store(ctx->inode_link_info,
                                           ino, inode->i_links_count);
@@ -1325,6 +1467,28 @@ void e2fsck_pass1(e2fsck_t ctx)
                                ctx->flags |= E2F_FLAG_ABORT;
                                goto endit;
                        }
+               } else if ((ino >= EXT2_FIRST_INODE(fs->super)) &&
+                          !quota_inum_is_reserved(fs, ino)) {
+                       if (!inode->i_dtime && inode->i_mode) {
+                               if (fix_problem(ctx,
+                                           PR_1_ZERO_DTIME, &pctx)) {
+                                       inode->i_dtime = ctx->now;
+                                       e2fsck_write_inode(ctx, ino, inode,
+                                                          "pass1");
+                                       failed_csum = 0;
+                               }
+                       }
+                       FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
+                       continue;
+               }
+
+               if ((inode->i_flags & EXT4_CASEFOLD_FL) &&
+                   ((!LINUX_S_ISDIR(inode->i_mode) &&
+                     fix_problem(ctx, PR_1_CASEFOLD_NONDIR, &pctx)) ||
+                    (!casefold_fs &&
+                     fix_problem(ctx, PR_1_CASEFOLD_FEATURE, &pctx)))) {
+                       inode->i_flags &= ~EXT4_CASEFOLD_FL;
+                       e2fsck_write_inode(ctx, ino, inode, "pass1");
                }
 
                /* Conflicting inlinedata/extents inode flags? */
@@ -1344,8 +1508,8 @@ void e2fsck_pass1(e2fsck_t ctx)
                    (ino >= EXT2_FIRST_INODE(fs->super))) {
                        size_t size = 0;
 
-                       pctx.errcode = ext2fs_inline_data_size(fs, ino, &size);
-                       if (!pctx.errcode && size &&
+                       pctx.errcode = get_inline_data_ea_size(fs, ino, &size);
+                       if (!pctx.errcode &&
                            fix_problem(ctx, PR_1_INLINE_DATA_FEATURE, &pctx)) {
                                ext2fs_set_feature_inline_data(sb);
                                ext2fs_mark_super_dirty(fs);
@@ -1389,6 +1553,7 @@ void e2fsck_pass1(e2fsck_t ctx)
                        case EXT2_ET_NO_INLINE_DATA:
                        case EXT2_ET_EXT_ATTR_CSUM_INVALID:
                        case EXT2_ET_EA_BAD_VALUE_OFFSET:
+                       case EXT2_ET_EA_INODE_CORRUPTED:
                                /* broken EA or no system.data EA; truncate */
                                if (fix_problem(ctx, PR_1_INLINE_DATA_NO_ATTR,
                                                &pctx)) {
@@ -1537,7 +1702,7 @@ void e2fsck_pass1(e2fsck_t ctx)
                        /*
                         * Make sure the root inode is a directory; if
                         * not, offer to clear it.  It will be
-                        * regnerated in pass #3.
+                        * regenerated in pass #3.
                         */
                        if (!LINUX_S_ISDIR(inode->i_mode)) {
                                if (fix_problem(ctx, PR_1_ROOT_NO_DIR, &pctx))
@@ -1571,7 +1736,7 @@ void e2fsck_pass1(e2fsck_t ctx)
                                                           "pass1");
                                        failed_csum = 0;
                                }
-                               check_blocks(ctx, &pctx, block_buf);
+                               check_blocks(ctx, &pctx, block_buf, NULL);
                                FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
                                continue;
                        }
@@ -1598,7 +1763,7 @@ void e2fsck_pass1(e2fsck_t ctx)
                                                        "pass1");
                                        failed_csum = 0;
                                }
-                               check_blocks(ctx, &pctx, block_buf);
+                               check_blocks(ctx, &pctx, block_buf, NULL);
                                FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
                                continue;
                        }
@@ -1636,53 +1801,12 @@ void e2fsck_pass1(e2fsck_t ctx)
                                        failed_csum = 0;
                                }
                        }
-                       check_blocks(ctx, &pctx, block_buf);
+                       check_blocks(ctx, &pctx, block_buf, NULL);
                        FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
                        continue;
                }
 
-               /*
-                * Check for inodes who might have been part of the
-                * orphaned list linked list.  They should have gotten
-                * dealt with by now, unless the list had somehow been
-                * corrupted.
-                *
-                * FIXME: In the future, inodes which are still in use
-                * (and which are therefore) pending truncation should
-                * be handled specially.  Right now we just clear the
-                * dtime field, and the normal e2fsck handling of
-                * inodes where i_size and the inode blocks are
-                * inconsistent is to fix i_size, instead of releasing
-                * the extra blocks.  This won't catch the inodes that
-                * was at the end of the orphan list, but it's better
-                * than nothing.  The right answer is that there
-                * shouldn't be any bugs in the orphan list handling.  :-)
-                */
-               if (inode->i_dtime && low_dtime_check &&
-                   inode->i_dtime < ctx->fs->super->s_inodes_count) {
-                       if (fix_problem(ctx, PR_1_LOW_DTIME, &pctx)) {
-                               inode->i_dtime = inode->i_links_count ?
-                                       0 : ctx->now;
-                               e2fsck_write_inode(ctx, ino, inode,
-                                                  "pass1");
-                               failed_csum = 0;
-                       }
-               }
-
-               /*
-                * This code assumes that deleted inodes have
-                * i_links_count set to 0.
-                */
                if (!inode->i_links_count) {
-                       if (!inode->i_dtime && inode->i_mode) {
-                               if (fix_problem(ctx,
-                                           PR_1_ZERO_DTIME, &pctx)) {
-                                       inode->i_dtime = ctx->now;
-                                       e2fsck_write_inode(ctx, ino, inode,
-                                                          "pass1");
-                                       failed_csum = 0;
-                               }
-                       }
                        FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
                        continue;
                }
@@ -1715,7 +1839,8 @@ void e2fsck_pass1(e2fsck_t ctx)
                }
 
                if (inode->i_faddr || frag || fsize ||
-                   (LINUX_S_ISDIR(inode->i_mode) && inode->i_dir_acl))
+                   (!ext2fs_has_feature_largedir(fs->super) &&
+                   (LINUX_S_ISDIR(inode->i_mode) && inode->i_size_high)))
                        mark_inode_bad(ctx, ino);
                if ((fs->super->s_creator_os != EXT2_OS_HURD) &&
                    !ext2fs_has_feature_64bit(fs->super) &&
@@ -1741,7 +1866,7 @@ void e2fsck_pass1(e2fsck_t ctx)
                        }
                }
 
-               check_inode_extra_space(ctx, &pctx);
+               check_inode_extra_space(ctx, &pctx, &ea_ibody_quota);
                check_is_really_dir(ctx, &pctx, block_buf);
 
                /*
@@ -1757,12 +1882,19 @@ void e2fsck_pass1(e2fsck_t ctx)
                        failed_csum = 0;
                }
 
+               if ((inode->i_flags & EXT4_ENCRYPT_FL) &&
+                   add_encrypted_file(ctx, &pctx) < 0)
+                       goto clear_inode;
+
+               if (casefold_fs && inode->i_flags & EXT4_CASEFOLD_FL)
+                       ext2fs_mark_inode_bitmap2(ctx->inode_casefold_map, ino);
+
                if (LINUX_S_ISDIR(inode->i_mode)) {
                        ext2fs_mark_inode_bitmap2(ctx->inode_dir_map, ino);
                        e2fsck_add_dir_info(ctx, ino, 0);
                        ctx->fs_directory_count++;
-                       if (inode->i_flags & EXT4_ENCRYPT_FL)
-                               add_encrypted_dir(ctx, ino);
+                       if (inode->i_flags & EXT4_CASEFOLD_FL)
+                               add_casefolded_dir(ctx, ino);
                } else if (LINUX_S_ISREG (inode->i_mode)) {
                        ext2fs_mark_inode_bitmap2(ctx->inode_reg_map, ino);
                        ctx->fs_regular_count++;
@@ -1786,9 +1918,10 @@ void e2fsck_pass1(e2fsck_t ctx)
                        if (inode->i_flags & EXT4_INLINE_DATA_FL) {
                                FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
                                continue;
-                       } else if (ext2fs_inode_data_blocks(fs, inode) == 0) {
+                       } else if (ext2fs_is_fast_symlink(inode)) {
                                ctx->fs_fast_symlinks_count++;
-                               check_blocks(ctx, &pctx, block_buf);
+                               check_blocks(ctx, &pctx, block_buf,
+                                            &ea_ibody_quota);
                                FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
                                continue;
                        }
@@ -1822,12 +1955,18 @@ void e2fsck_pass1(e2fsck_t ctx)
                     inode->i_block[EXT2_DIND_BLOCK] ||
                     inode->i_block[EXT2_TIND_BLOCK] ||
                     ext2fs_file_acl_block(fs, inode))) {
-                       inodes_to_process[process_inode_count].ino = ino;
-                       inodes_to_process[process_inode_count].inode =
-                                      *(struct ext2_inode_large *)inode;
+                       struct process_inode_block *itp;
+
+                       itp = &inodes_to_process[process_inode_count];
+                       itp->ino = ino;
+                       itp->ea_ibody_quota = ea_ibody_quota;
+                       if (inode_size < sizeof(struct ext2_inode_large))
+                               memcpy(&itp->inode, inode, inode_size);
+                       else
+                               memcpy(&itp->inode, inode, sizeof(itp->inode));
                        process_inode_count++;
                } else
-                       check_blocks(ctx, &pctx, block_buf);
+                       check_blocks(ctx, &pctx, block_buf, &ea_ibody_quota);
 
                FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
 
@@ -1865,6 +2004,16 @@ void e2fsck_pass1(e2fsck_t ctx)
                ctx->refcount_extra = 0;
        }
 
+       if (ctx->ea_block_quota_blocks) {
+               ea_refcount_free(ctx->ea_block_quota_blocks);
+               ctx->ea_block_quota_blocks = 0;
+       }
+
+       if (ctx->ea_block_quota_inodes) {
+               ea_refcount_free(ctx->ea_block_quota_inodes);
+               ctx->ea_block_quota_inodes = 0;
+       }
+
        if (ctx->invalid_bitmaps)
                handle_fs_bad_blocks(ctx);
 
@@ -1874,6 +2023,9 @@ void e2fsck_pass1(e2fsck_t ctx)
                ctx->block_ea_map = 0;
        }
 
+       /* We don't need the encryption policy => ID map any more */
+       destroy_encryption_policy_map(ctx);
+
        if (ctx->flags & E2F_FLAG_RESIZE_INODE) {
                clear_problem_context(&pctx);
                pctx.errcode = ext2fs_create_resize_inode(fs);
@@ -1903,7 +2055,6 @@ void e2fsck_pass1(e2fsck_t ctx)
                 * master superblock.
                 */
                ctx->use_superblock = 0;
-               unwind_pass1(fs);
                goto endit;
        }
 
@@ -1915,9 +2066,10 @@ void e2fsck_pass1(e2fsck_t ctx)
                e2fsck_pass1_dupblocks(ctx, block_buf);
        }
        ctx->flags |= E2F_FLAG_ALLOC_OK;
-       ext2fs_free_mem(&inodes_to_process);
 endit:
        e2fsck_use_inode_shortcuts(ctx, 0);
+       ext2fs_free_mem(&inodes_to_process);
+       inodes_to_process = 0;
 
        if (scan)
                ext2fs_close_inode_scan(scan);
@@ -1997,7 +2149,8 @@ static void process_inodes(e2fsck_t ctx, char *block_buf)
                sprintf(buf, _("reading indirect blocks of inode %u"),
                        pctx.ino);
                ehandler_operation(buf);
-               check_blocks(ctx, &pctx, block_buf);
+               check_blocks(ctx, &pctx, block_buf,
+                            &inodes_to_process[i].ea_ibody_quota);
                if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
                        break;
        }
@@ -2057,20 +2210,20 @@ static void mark_inode_bad(e2fsck_t ctx, ino_t ino)
        ext2fs_mark_inode_bitmap2(ctx->inode_bad_map, ino);
 }
 
-static void add_encrypted_dir(e2fsck_t ctx, ino_t ino)
+static void add_casefolded_dir(e2fsck_t ctx, ino_t ino)
 {
        struct          problem_context pctx;
 
-       if (!ctx->encrypted_dirs) {
-               pctx.errcode = ext2fs_u32_list_create(&ctx->encrypted_dirs, 0);
+       if (!ctx->casefolded_dirs) {
+               pctx.errcode = ext2fs_u32_list_create(&ctx->casefolded_dirs, 0);
                if (pctx.errcode)
                        goto error;
        }
-       pctx.errcode = ext2fs_u32_list_add(ctx->encrypted_dirs, ino);
+       pctx.errcode = ext2fs_u32_list_add(ctx->casefolded_dirs, ino);
        if (pctx.errcode == 0)
                return;
 error:
-       fix_problem(ctx, PR_1_ALLOCATE_ENCRYPTED_DIRLIST, &pctx);
+       fix_problem(ctx, PR_1_ALLOCATE_CASEFOLDED_DIRLIST, &pctx);
        /* Should never get here */
        ctx->flags |= E2F_FLAG_ABORT;
 }
@@ -2129,6 +2282,10 @@ static _INLINE_ void mark_block_used(e2fsck_t ctx, blk64_t block)
        clear_problem_context(&pctx);
 
        if (ext2fs_fast_test_block_bitmap2(ctx->block_found_map, block)) {
+               if (ext2fs_has_feature_shared_blocks(ctx->fs->super) &&
+                   !(ctx->options & E2F_OPT_UNSHARE_BLOCKS)) {
+                       return;
+               }
                if (!ctx->block_dup_map) {
                        pctx.errcode = e2fsck_allocate_block_bitmap(ctx->fs,
                                        _("multiply claimed block map"),
@@ -2149,14 +2306,21 @@ static _INLINE_ void mark_block_used(e2fsck_t ctx, blk64_t block)
        }
 }
 
+/*
+ * When cluster size is greater than one block, it is caller's responsibility
+ * to make sure block parameter starts at a cluster boundary.
+ */
 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++);
+       else {
+               unsigned int i;
+
+               for (i = 0; i < num; i += EXT2FS_CLUSTER_RATIO(ctx->fs))
+                       mark_block_used(ctx, block + i);
+       }
 }
 
 /*
@@ -2174,7 +2338,7 @@ static void adjust_extattr_refcount(e2fsck_t ctx, ext2_refcount_t refcount,
        ext2_filsys                     fs = ctx->fs;
        blk64_t                         blk;
        __u32                           should_be;
-       int                             count;
+       ea_value_t                      count;
 
        clear_problem_context(&pctx);
 
@@ -2191,7 +2355,7 @@ static void adjust_extattr_refcount(e2fsck_t ctx, ext2_refcount_t refcount,
                }
                header = (struct ext2_ext_attr_header *) block_buf;
                pctx.blkcount = header->h_refcount;
-               should_be = header->h_refcount + adjust_sign * count;
+               should_be = header->h_refcount + adjust_sign * (int)count;
                pctx.num = should_be;
                if (fix_problem(ctx, PR_1_EXTATTR_REFCOUNT, &pctx)) {
                        header->h_refcount = should_be;
@@ -2211,7 +2375,7 @@ static void adjust_extattr_refcount(e2fsck_t ctx, ext2_refcount_t refcount,
  * Handle processing the extended attribute blocks
  */
 static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
-                          char *block_buf)
+                          char *block_buf, struct ea_quota *ea_block_quota)
 {
        ext2_filsys fs = ctx->fs;
        ext2_ino_t      ino = pctx->ino;
@@ -2219,11 +2383,15 @@ static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
        blk64_t         blk;
        char *          end;
        struct ext2_ext_attr_header *header;
-       struct ext2_ext_attr_entry *entry;
-       int             count;
+       struct ext2_ext_attr_entry *first, *entry;
+       blk64_t         quota_blocks = EXT2FS_C2B(fs, 1);
+       __u64           quota_inodes = 0;
        region_t        region = 0;
        int             failed_csum = 0;
 
+       ea_block_quota->blocks = 0;
+       ea_block_quota->inodes = 0;
+
        blk = ext2fs_file_acl_block(fs, inode);
        if (blk == 0)
                return 0;
@@ -2274,6 +2442,20 @@ static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
 
        /* Have we seen this EA block before? */
        if (ext2fs_fast_test_block_bitmap2(ctx->block_ea_map, blk)) {
+               ea_block_quota->blocks = EXT2FS_C2B(fs, 1);
+               ea_block_quota->inodes = 0;
+
+               if (ctx->ea_block_quota_blocks) {
+                       ea_refcount_fetch(ctx->ea_block_quota_blocks, blk,
+                                         &quota_blocks);
+                       if (quota_blocks)
+                               ea_block_quota->blocks = quota_blocks;
+               }
+
+               if (ctx->ea_block_quota_inodes)
+                       ea_refcount_fetch(ctx->ea_block_quota_inodes, blk,
+                                         &ea_block_quota->inodes);
+
                if (ea_refcount_decrement(ctx->refcount, blk, 0) == 0)
                        return 1;
                /* Ooops, this EA was referenced more than it stated */
@@ -2337,8 +2519,9 @@ static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
                        goto clear_extattr;
        }
 
-       entry = (struct ext2_ext_attr_entry *)(header+1);
+       first = (struct ext2_ext_attr_entry *)(header+1);
        end = block_buf + fs->blocksize;
+       entry = first;
        while ((char *)entry < end && *(__u32 *)entry) {
                __u32 hash;
 
@@ -2356,30 +2539,41 @@ static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
                                goto clear_extattr;
                        break;
                }
-               if (entry->e_value_block != 0) {
-                       if (fix_problem(ctx, PR_1_EA_BAD_VALUE, pctx))
-                               goto clear_extattr;
-               }
-               if (entry->e_value_offs + entry->e_value_size > fs->blocksize) {
-                       if (fix_problem(ctx, PR_1_EA_BAD_VALUE, pctx))
-                               goto clear_extattr;
-                       break;
-               }
-               if (entry->e_value_size &&
-                   region_allocate(region, entry->e_value_offs,
-                                   EXT2_EXT_ATTR_SIZE(entry->e_value_size))) {
-                       if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx))
-                               goto clear_extattr;
-               }
+               if (entry->e_value_inum == 0) {
+                       if (entry->e_value_offs + entry->e_value_size >
+                           fs->blocksize) {
+                               if (fix_problem(ctx, PR_1_EA_BAD_VALUE, pctx))
+                                       goto clear_extattr;
+                               break;
+                       }
+                       if (entry->e_value_size &&
+                           region_allocate(region, entry->e_value_offs,
+                                           EXT2_EXT_ATTR_SIZE(entry->e_value_size))) {
+                               if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION,
+                                               pctx))
+                                       goto clear_extattr;
+                       }
 
-               hash = ext2fs_ext_attr_hash_entry(entry, block_buf +
-                                                        entry->e_value_offs);
+                       hash = ext2fs_ext_attr_hash_entry(entry, block_buf +
+                                                         entry->e_value_offs);
 
-               if (entry->e_hash != hash) {
-                       pctx->num = entry->e_hash;
-                       if (fix_problem(ctx, PR_1_ATTR_HASH, pctx))
+                       if (entry->e_hash != hash) {
+                               pctx->num = entry->e_hash;
+                               if (fix_problem(ctx, PR_1_ATTR_HASH, pctx))
+                                       goto clear_extattr;
+                               entry->e_hash = hash;
+                       }
+               } else {
+                       problem_t problem;
+                       blk64_t entry_quota_blocks;
+
+                       problem = check_large_ea_inode(ctx, entry, pctx,
+                                                      &entry_quota_blocks);
+                       if (problem && fix_problem(ctx, problem, pctx))
                                goto clear_extattr;
-                       entry->e_hash = hash;
+
+                       quota_blocks += entry_quota_blocks;
+                       quota_inodes++;
                }
 
                entry = EXT2_EXT_ATTR_NEXT(entry);
@@ -2402,9 +2596,40 @@ static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
                        return 0;
        }
 
-       count = header->h_refcount - 1;
-       if (count)
-               ea_refcount_store(ctx->refcount, blk, count);
+       if (quota_blocks != EXT2FS_C2B(fs, 1U)) {
+               if (!ctx->ea_block_quota_blocks) {
+                       pctx->errcode = ea_refcount_create(0,
+                                               &ctx->ea_block_quota_blocks);
+                       if (pctx->errcode) {
+                               pctx->num = 3;
+                               goto refcount_fail;
+                       }
+               }
+               ea_refcount_store(ctx->ea_block_quota_blocks, blk,
+                                 quota_blocks);
+       }
+
+       if (quota_inodes) {
+               if (!ctx->ea_block_quota_inodes) {
+                       pctx->errcode = ea_refcount_create(0,
+                                               &ctx->ea_block_quota_inodes);
+                       if (pctx->errcode) {
+                               pctx->num = 4;
+refcount_fail:
+                               fix_problem(ctx, PR_1_ALLOCATE_REFCOUNT, pctx);
+                               ctx->flags |= E2F_FLAG_ABORT;
+                               return 0;
+                       }
+               }
+
+               ea_refcount_store(ctx->ea_block_quota_inodes, blk,
+                                 quota_inodes);
+       }
+       ea_block_quota->blocks = quota_blocks;
+       ea_block_quota->inodes = quota_inodes;
+
+       inc_ea_inode_refs(ctx, pctx, first, end);
+       ea_refcount_store(ctx->refcount, blk, header->h_refcount - 1);
        mark_block_used(ctx, blk);
        ext2fs_fast_mark_block_bitmap2(ctx->block_ea_map, blk);
        return 1;
@@ -2460,15 +2685,26 @@ static int handle_htree(e2fsck_t ctx, struct problem_context *pctx,
        if ((root->hash_version != EXT2_HASH_LEGACY) &&
            (root->hash_version != EXT2_HASH_HALF_MD4) &&
            (root->hash_version != EXT2_HASH_TEA) &&
+           (root->hash_version != EXT2_HASH_SIPHASH) &&
            fix_problem(ctx, PR_1_HTREE_HASHV, pctx))
                return 1;
 
+       if (ext4_hash_in_dirent(inode)) {
+               if (root->hash_version != EXT2_HASH_SIPHASH &&
+                   fix_problem(ctx, PR_1_HTREE_NEEDS_SIPHASH, pctx))
+                       return 1;
+       } else {
+               if (root->hash_version == EXT2_HASH_SIPHASH &&
+                  fix_problem(ctx, PR_1_HTREE_CANNOT_SIPHASH, pctx))
+                       return 1;
+       }
+
        if ((root->unused_flags & EXT2_HASH_FLAG_INCOMPAT) &&
            fix_problem(ctx, PR_1_HTREE_INCOMPAT, pctx))
                return 1;
 
        pctx->num = root->indirect_levels;
-       if ((root->indirect_levels > 1) &&
+       if ((root->indirect_levels >= ext2_dir_htree_level(fs)) &&
            fix_problem(ctx, PR_1_HTREE_DEPTH, pctx))
                return 1;
 
@@ -2556,8 +2792,7 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
 {
        struct ext2fs_extent    extent;
        blk64_t                 blk, last_lblk;
-       e2_blkcnt_t             blockcnt;
-       unsigned int            i;
+       unsigned int            i, n;
        int                     is_dir, is_leaf;
        problem_t               problem;
        struct ext2_extent_info info;
@@ -2609,8 +2844,9 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
                else if (extent.e_lblk < start_block)
                        problem = PR_1_OUT_OF_ORDER_EXTENTS;
                else if ((end_block && last_lblk > end_block) &&
-                        (!(extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT &&
-                               last_lblk > eof_block)))
+                        !(last_lblk > eof_block &&
+                          ((extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT) ||
+                           (pctx->inode->i_flags & EXT4_VERITY_FL))))
                        problem = PR_1_EXTENT_END_OUT_OF_BOUNDS;
                else if (is_leaf && extent.e_len == 0)
                        problem = PR_1_EXTENT_LENGTH_ZERO;
@@ -2623,9 +2859,18 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
                          (1U << (21 - ctx->fs->super->s_log_block_size))))
                        problem = PR_1_TOOBIG_DIR;
 
-               if (is_leaf && problem == 0 && extent.e_len > 0 &&
-                   region_allocate(pb->region, extent.e_lblk, extent.e_len))
-                       problem = PR_1_EXTENT_COLLISION;
+               if (is_leaf && problem == 0 && extent.e_len > 0) {
+#if 0
+                       printf("extent_region(ino=%u, expect=%llu, "
+                              "lblk=%llu, len=%u)\n",
+                              pb->ino, pb->next_lblock,
+                              extent.e_lblk, extent.e_len);
+#endif
+                       if (extent.e_lblk < pb->next_lblock)
+                               problem = PR_1_EXTENT_COLLISION;
+                       else if (extent.e_lblk + extent.e_len > pb->next_lblock)
+                               pb->next_lblock = extent.e_lblk + extent.e_len;
+               }
 
                /*
                 * Uninitialized blocks in a directory?  Clear the flag and
@@ -2642,7 +2887,20 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
                                return;
                        failed_csum = 0;
                }
-
+#ifdef CONFIG_DEVELOPER_FEATURES
+               if (try_repairs && !is_dir && problem == 0 &&
+                   (ctx->options & E2F_OPT_CLEAR_UNINIT) &&
+                   (extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT) &&
+                   fix_problem(ctx, PR_1_CLEAR_UNINIT_EXTENT, pctx)) {
+                       extent.e_flags &= ~EXT2_EXTENT_FLAGS_UNINIT;
+                       pb->inode_modified = 1;
+                       pctx->errcode = ext2fs_extent_replace(ehandle, 0,
+                                                             &extent);
+                       if (pctx->errcode)
+                               return;
+                       failed_csum = 0;
+               }
+#endif
                if (try_repairs && problem) {
 report_problem:
                        if (fix_problem(ctx, problem, pctx)) {
@@ -2705,6 +2963,7 @@ report_problem:
                         * will reallocate the block; then we can try again.
                         */
                        if (pb->ino != EXT2_RESIZE_INO &&
+                           extent.e_pblk < ctx->fs->super->s_blocks_count &&
                            ext2fs_test_block_bitmap2(ctx->block_metadata_map,
                                                      extent.e_pblk)) {
                                next_try_repairs = 0;
@@ -2712,7 +2971,8 @@ report_problem:
                                fix_problem(ctx,
                                            PR_1_CRITICAL_METADATA_COLLISION,
                                            pctx);
-                               ctx->flags |= E2F_FLAG_RESTART_LATER;
+                               if ((ctx->options & E2F_OPT_NO) == 0)
+                                       ctx->flags |= E2F_FLAG_RESTART_LATER;
                        }
                        pctx->errcode = ext2fs_extent_get(ehandle,
                                                  EXT2_EXTENT_DOWN, &extent);
@@ -2822,50 +3082,29 @@ report_problem:
                        }
                }
 alloc_later:
-               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);
-                       if (pctx->errcode) {
-                               pctx->blk = 0;
-                               pctx->num = pb->last_db_block;
-                               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 &&
-                             (EXT2FS_B2C(ctx->fs, blk) ==
-                              EXT2FS_B2C(ctx->fs, pb->previous_block)) &&
-                             (blk & EXT2FS_CLUSTER_MASK(ctx->fs)) ==
-                             ((unsigned) blockcnt & EXT2FS_CLUSTER_MASK(ctx->fs)))) {
-                               mark_block_used(ctx, blk);
-                               pb->num_blocks++;
-                       }
-                       if (has_unaligned_cluster_map(ctx, pb->previous_block,
-                                                     pb->last_block, blk,
-                                                     blockcnt)) {
-                               pctx->blk = blockcnt;
-                               pctx->blk2 = blk;
-                               fix_problem(ctx, PR_1_MISALIGNED_CLUSTER, pctx);
-                               mark_block_used(ctx, blk);
-                               mark_block_used(ctx, blk);
+               if (is_dir) {
+                       while (++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);
+                               if (pctx->errcode) {
+                                       pctx->blk = 0;
+                                       pctx->num = pb->last_db_block;
+                                       goto failed_add_dir_block;
+                               }
                        }
-                       pb->last_block = blockcnt;
-                       pb->previous_block = blk;
 
-                       if (is_dir) {
-                               pctx->errcode = ext2fs_add_dir_block2(ctx->fs->dblist, pctx->ino, blk, blockcnt);
+                       for (i = 0; i < extent.e_len; i++) {
+                               pctx->errcode = ext2fs_add_dir_block2(
+                                                       ctx->fs->dblist,
+                                                       pctx->ino,
+                                                       extent.e_pblk + i,
+                                                       extent.e_lblk + i);
                                if (pctx->errcode) {
-                                       pctx->blk = blk;
-                                       pctx->num = blockcnt;
+                                       pctx->blk = extent.e_pblk + i;
+                                       pctx->num = extent.e_lblk + i;
                                failed_add_dir_block:
                                        fix_problem(ctx, PR_1_ADD_DBLOCK, pctx);
                                        /* Should never get here */
@@ -2873,9 +3112,46 @@ alloc_later:
                                        return;
                                }
                        }
+                       if (extent.e_len > 0)
+                               pb->last_db_block = extent.e_lblk + extent.e_len - 1;
+               }
+               if (has_unaligned_cluster_map(ctx, pb->previous_block,
+                                             pb->last_block,
+                                             extent.e_pblk,
+                                             extent.e_lblk)) {
+                       for (i = 0; i < extent.e_len; i++) {
+                               pctx->blk = extent.e_lblk + i;
+                               pctx->blk2 = extent.e_pblk + i;
+                               fix_problem(ctx, PR_1_MISALIGNED_CLUSTER, pctx);
+                               mark_block_used(ctx, extent.e_pblk + i);
+                               mark_block_used(ctx, extent.e_pblk + i);
+                       }
+               }
+
+               /*
+                * Check whether first cluster got marked in previous iteration.
+                */
+               if (ctx->fs->cluster_ratio_bits &&
+                   pb->previous_block &&
+                   (EXT2FS_B2C(ctx->fs, extent.e_pblk) ==
+                    EXT2FS_B2C(ctx->fs, pb->previous_block)))
+                       /* Set blk to the beginning of next cluster. */
+                       blk = EXT2FS_C2B(
+                               ctx->fs,
+                               EXT2FS_B2C(ctx->fs, extent.e_pblk) + 1);
+               else
+                       /* Set blk to the beginning of current cluster. */
+                       blk = EXT2FS_C2B(ctx->fs,
+                                        EXT2FS_B2C(ctx->fs, extent.e_pblk));
+
+               if (blk < extent.e_pblk + extent.e_len) {
+                       mark_blocks_used(ctx, blk,
+                                        extent.e_pblk + extent.e_len - blk);
+                       n = DIV_ROUND_UP(extent.e_pblk + extent.e_len - blk,
+                                        EXT2FS_CLUSTER_RATIO(ctx->fs));
+                       pb->num_blocks += n;
                }
-               if (is_dir && extent.e_len > 0)
-                       pb->last_db_block = blockcnt - 1;
+               pb->last_block = extent.e_lblk + extent.e_len - 1;
                pb->previous_block = extent.e_pblk + extent.e_len - 1;
                start_block = pb->last_block = last_lblk;
                if (is_leaf && !is_dir &&
@@ -2956,13 +3232,7 @@ static void check_blocks_extents(e2fsck_t ctx, struct problem_context *pctx,
        memset(pb->eti.ext_info, 0, sizeof(pb->eti.ext_info));
        pb->eti.ino = pb->ino;
 
-       pb->region = region_create(0, info.max_lblk);
-       if (!pb->region) {
-               ext2fs_extent_free(ehandle);
-               fix_problem(ctx, PR_1_EXTENT_ALLOC_REGION_ABORT, pctx);
-               ctx->flags |= E2F_FLAG_ABORT;
-               return;
-       }
+       pb->next_lblock = 0;
 
        eof_lblk = ((EXT2_I_SIZE(inode) + fs->blocksize - 1) >>
                EXT2_BLOCK_SIZE_BITS(fs->super)) - 1;
@@ -2975,8 +3245,6 @@ static void check_blocks_extents(e2fsck_t ctx, struct problem_context *pctx,
                                   "check_blocks_extents");
                pctx->errcode = 0;
        }
-       region_free(pb->region);
-       pb->region = NULL;
        ext2fs_extent_free(ehandle);
 
        /* Rebuild unless it's a dir and we're rehashing it */
@@ -3043,7 +3311,7 @@ err:
  * blocks used by that inode.
  */
 static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
-                        char *block_buf)
+                        char *block_buf, const struct ea_quota *ea_ibody_quota)
 {
        ext2_filsys fs = ctx->fs;
        struct process_block_struct pb;
@@ -3054,9 +3322,11 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
        int             extent_fs;
        int             inlinedata_fs;
        __u64           size;
+       struct ea_quota ea_block_quota;
 
        pb.ino = ino;
-       pb.num_blocks = 0;
+       pb.num_blocks = EXT2FS_B2C(ctx->fs,
+                                  ea_ibody_quota ? ea_ibody_quota->blocks : 0);
        pb.last_block = ~0;
        pb.last_init_lblock = -1;
        pb.last_db_block = -1;
@@ -3067,7 +3337,7 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
        pb.previous_block = 0;
        pb.is_dir = LINUX_S_ISDIR(inode->i_mode);
        pb.is_reg = LINUX_S_ISREG(inode->i_mode);
-       pb.max_blocks = 1 << (31 - fs->super->s_log_block_size);
+       pb.max_blocks = 1U << (31 - fs->super->s_log_block_size);
        pb.inode = inode;
        pb.pctx = pctx;
        pb.ctx = ctx;
@@ -3079,10 +3349,10 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
        extent_fs = ext2fs_has_feature_extents(ctx->fs->super);
        inlinedata_fs = ext2fs_has_feature_inline_data(ctx->fs->super);
 
-       if (check_ext_attr(ctx, pctx, block_buf)) {
+       if (check_ext_attr(ctx, pctx, block_buf, &ea_block_quota)) {
                if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
                        goto out;
-               pb.num_blocks++;
+               pb.num_blocks += EXT2FS_B2C(ctx->fs, ea_block_quota.blocks);
        }
 
        if (inlinedata_fs && (inode->i_flags & EXT4_INLINE_DATA_FL))
@@ -3158,7 +3428,7 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
                        inode->i_flags &= ~EXT2_INDEX_FL;
                        dirty_inode++;
                } else {
-                       e2fsck_add_dx_dir(ctx, ino, pb.last_block+1);
+                       e2fsck_add_dx_dir(ctx, ino, inode, pb.last_block+1);
                }
        }
 
@@ -3172,11 +3442,15 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
        }
 
        if (ino != quota_type2inum(PRJQUOTA, fs->super) &&
-           (ino == EXT2_ROOT_INO || ino >= EXT2_FIRST_INODE(ctx->fs->super))) {
+           (ino == EXT2_ROOT_INO || ino >= EXT2_FIRST_INODE(ctx->fs->super)) &&
+           !(inode->i_flags & EXT4_EA_INODE_FL)) {
                quota_data_add(ctx->qctx, (struct ext2_inode_large *) inode,
-                              ino, pb.num_blocks * fs->blocksize);
+                              ino,
+                              pb.num_blocks * EXT2_CLUSTER_SIZE(fs->super));
                quota_data_inodes(ctx->qctx, (struct ext2_inode_large *) inode,
-                                 ino, +1);
+                                 ino, (ea_ibody_quota ?
+                                       ea_ibody_quota->inodes : 0) +
+                                               ea_block_quota.inodes + 1);
        }
 
        if (!ext2fs_has_feature_huge_file(fs->super) ||
@@ -3217,15 +3491,11 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
                                bad_size = 2;
                }
        } else {
-               e2_blkcnt_t blkpg = ctx->blocks_per_page;
-
                size = EXT2_I_SIZE(inode);
                if ((pb.last_init_lblock >= 0) &&
-                   /* allow allocated blocks to end of PAGE_SIZE */
+                   /* Do not allow initialized allocated blocks past i_size*/
                    (size < (__u64)pb.last_init_lblock * fs->blocksize) &&
-                   (pb.last_init_lblock / blkpg * blkpg != pb.last_init_lblock ||
-                    size < (__u64)(pb.last_init_lblock & ~(blkpg-1)) *
-                    fs->blocksize))
+                   !(inode->i_flags & EXT4_VERITY_FL))
                        bad_size = 3;
                else if (!(extent_fs && (inode->i_flags & EXT4_EXTENTS_FL)) &&
                         size > ext2_max_sizes[fs->super->s_log_block_size])
@@ -3423,9 +3693,12 @@ static int process_block(ext2_filsys fs,
                }
        }
 
-       if (p->is_dir && blockcnt > (1 << (21 - fs->super->s_log_block_size)))
+       if (p->is_dir && !ext2fs_has_feature_largedir(fs->super) &&
+           blockcnt > (1 << (21 - fs->super->s_log_block_size)))
+               problem = PR_1_TOOBIG_DIR;
+       if (p->is_dir && p->num_blocks + 1 >= p->max_blocks)
                problem = PR_1_TOOBIG_DIR;
-       if (p->is_reg && p->num_blocks+1 >= p->max_blocks)
+       if (p->is_reg && p->num_blocks + 1 >= p->max_blocks)
                problem = PR_1_TOOBIG_REG;
        if (!p->is_dir && !p->is_reg && blockcnt > 0)
                problem = PR_1_TOOBIG_SYMLINK;
@@ -3442,10 +3715,12 @@ static int process_block(ext2_filsys fs,
         */
        if (blockcnt < 0 &&
            p->ino != EXT2_RESIZE_INO &&
+           blk < ctx->fs->super->s_blocks_count &&
            ext2fs_test_block_bitmap2(ctx->block_metadata_map, blk)) {
                pctx->blk = blk;
                fix_problem(ctx, PR_1_CRITICAL_METADATA_COLLISION, pctx);
-               ctx->flags |= E2F_FLAG_RESTART_LATER;
+               if ((ctx->options & E2F_OPT_NO) == 0)
+                       ctx->flags |= E2F_FLAG_RESTART_LATER;
        }
 
        if (problem) {
@@ -3934,7 +4209,7 @@ static void mark_table_blocks(e2fsck_t ctx)
 }
 
 /*
- * Thes subroutines short circuits ext2fs_get_blocks and
+ * These subroutines short circuits ext2fs_get_blocks and
  * ext2fs_check_directory; we use them since we already have the inode
  * structure, so there's no point in letting the ext2fs library read
  * the inode again.
index b40f026..2f8c14c 100644 (file)
@@ -104,7 +104,7 @@ static dict_t clstr_dict, ino_dict;
 
 static ext2fs_inode_bitmap inode_dup_map;
 
-static int dict_int_cmp(const void *a, const void *b)
+static int dict_int_cmp(const void* cmp_ctx, const void *a, const void *b)
 {
        intptr_t        ia, ib;
 
@@ -180,10 +180,10 @@ static void inode_dnode_free(dnode_t *node,
        di = (struct dup_inode *) dnode_get(node);
        for (p = di->cluster_list; p; p = next) {
                next = p->next;
-               free(p);
+               ext2fs_free_mem(&p);
        }
-       free(di);
-       free(node);
+       ext2fs_free_mem(&di);
+       ext2fs_free_mem(&node);
 }
 
 /*
@@ -198,10 +198,10 @@ static void cluster_dnode_free(dnode_t *node,
        dc = (struct dup_cluster *) dnode_get(node);
        for (p = dc->inode_list; p; p = next) {
                next = p->next;
-               free(p);
+               ext2fs_free_mem(&p);
        }
-       free(dc);
-       free(node);
+       ext2fs_free_mem(&dc);
+       ext2fs_free_mem(&node);
 }
 
 
@@ -245,6 +245,24 @@ void e2fsck_pass1_dupblocks(e2fsck_t ctx, char *block_buf)
        pass1d(ctx, block_buf);
        print_resource_track(ctx, "Pass 1d", &rtrack, ctx->fs->io);
 
+       if (ext2fs_has_feature_shared_blocks(ctx->fs->super) &&
+           (ctx->options & E2F_OPT_UNSHARE_BLOCKS)) {
+               /*
+                * If we successfully managed to unshare all blocks, unset the
+                * shared block feature.
+                */
+               blk64_t next;
+               int result = ext2fs_find_first_set_block_bitmap2(
+                       ctx->block_dup_map,
+                       ctx->fs->super->s_first_data_block,
+                       ext2fs_blocks_count(ctx->fs->super) - 1,
+                       &next);
+               if (result == ENOENT && !(ctx->options & E2F_OPT_NO)) {
+                       ext2fs_clear_feature_shared_blocks(ctx->fs->super);
+                       ext2fs_mark_super_dirty(ctx->fs);
+               }
+       }
+
        /*
         * Time to free all of the accumulated data structures that we
         * don't need anymore.
@@ -582,14 +600,21 @@ static void pass1d(e2fsck_t ctx, char *block_buf)
                        fix_problem(ctx, PR_1D_DUP_BLOCKS_DEALT, &pctx);
                        continue;
                }
-               if (fix_problem(ctx, PR_1D_CLONE_QUESTION, &pctx)) {
+               if ((ctx->options & E2F_OPT_UNSHARE_BLOCKS) ||
+                    fix_problem(ctx, PR_1D_CLONE_QUESTION, &pctx)) {
                        pctx.errcode = clone_file(ctx, ino, p, block_buf);
                        if (pctx.errcode)
                                fix_problem(ctx, PR_1D_CLONE_ERROR, &pctx);
                        else
                                continue;
                }
-               if (fix_problem(ctx, PR_1D_DELETE_QUESTION, &pctx))
+               /*
+                * Note: When unsharing blocks, we don't prompt to delete
+                * files. If the clone operation fails than the unshare
+                * operation should fail too.
+                */
+               if (!(ctx->options & E2F_OPT_UNSHARE_BLOCKS) &&
+                    fix_problem(ctx, PR_1D_DELETE_QUESTION, &pctx))
                        delete_file(ctx, ino, p, block_buf);
                else
                        ext2fs_unmark_valid(fs);
@@ -637,9 +662,11 @@ static int delete_file_block(ext2_filsys fs,
        if (ext2fs_test_block_bitmap2(ctx->block_dup_map, *block_nr)) {
                n = dict_lookup(&clstr_dict, INT_TO_VOIDPTR(c));
                if (n) {
-                       p = (struct dup_cluster *) dnode_get(n);
-                       if (lc != pb->cur_cluster)
+                       if (lc != pb->cur_cluster) {
+                               p = (struct dup_cluster *) dnode_get(n);
                                decrement_badcount(ctx, *block_nr, p);
+                               pb->dup_blocks++;
+                       }
                } else
                        com_err("delete_file_block", 0,
                            _("internal error: can't find dup_blk for %llu\n"),
@@ -678,6 +705,10 @@ static void delete_file(e2fsck_t ctx, ext2_ino_t ino,
                fix_problem(ctx, PR_1B_BLOCK_ITERATE, &pctx);
        if (ctx->inode_bad_map)
                ext2fs_unmark_inode_bitmap2(ctx->inode_bad_map, ino);
+       if (ctx->inode_reg_map)
+               ext2fs_unmark_inode_bitmap2(ctx->inode_reg_map, ino);
+       ext2fs_unmark_inode_bitmap2(ctx->inode_dir_map, ino);
+       ext2fs_unmark_inode_bitmap2(ctx->inode_used_map, ino);
        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);
@@ -769,6 +800,7 @@ static int clone_file_block(ext2_filsys fs,
        e2fsck_t ctx;
        blk64_t c;
        int is_meta = 0;
+       int should_write = 1;
 
        ctx = cs->ctx;
        deferred_dec_badcount(cs);
@@ -776,6 +808,11 @@ static int clone_file_block(ext2_filsys fs,
        if (*block_nr == 0)
                return 0;
 
+       if (ext2fs_has_feature_shared_blocks(ctx->fs->super) &&
+           (ctx->options & E2F_OPT_UNSHARE_BLOCKS) &&
+           (ctx->options & E2F_OPT_NO))
+               should_write = 0;
+
        c = EXT2FS_B2C(fs, blockcnt);
        if (check_if_fs_cluster(ctx, EXT2FS_B2C(fs, *block_nr)))
                is_meta = 1;
@@ -818,6 +855,13 @@ static int clone_file_block(ext2_filsys fs,
                        cs->errcode = retval;
                        return BLOCK_ABORT;
                }
+               if (ext2fs_has_feature_shared_blocks(fs->super)) {
+                       /*
+                        * Update the block stats so we don't get a prompt to fix block
+                        * counts in the final pass.
+                        */
+                       ext2fs_block_alloc_stats2(fs, new_block, +1);
+               }
 cluster_alloc_ok:
                cs->alloc_block = new_block;
 
@@ -841,16 +885,25 @@ cluster_alloc_ok:
                        cs->errcode = retval;
                        return BLOCK_ABORT;
                }
-               retval = io_channel_write_blk64(fs->io, new_block, 1, cs->buf);
-               if (retval) {
-                       cs->errcode = retval;
-                       return BLOCK_ABORT;
+               if (should_write) {
+                       retval = io_channel_write_blk64(fs->io, new_block, 1, cs->buf);
+                       if (retval) {
+                               cs->errcode = retval;
+                               return BLOCK_ABORT;
+                       }
                }
                cs->save_dup_cluster = (is_meta ? NULL : p);
                cs->save_blocknr = *block_nr;
                *block_nr = new_block;
                ext2fs_mark_block_bitmap2(ctx->block_found_map, new_block);
                ext2fs_mark_block_bitmap2(fs->block_map, new_block);
+
+               if (!should_write) {
+                       /* Don't try to change extent information; we want e2fsck to
+                        * return success.
+                        */
+                       return 0;
+               }
                return BLOCK_CHANGED;
        }
        return 0;
@@ -917,7 +970,7 @@ static errcode_t clone_file(e2fsck_t ctx, ext2_ino_t ino,
                                        sizeof(dp->inode), "clone file EA");
                /*
                 * If we cloned the EA block, find all other inodes
-                * which refered to that EA block, and modify
+                * which referred to that EA block, and modify
                 * them to point to the new EA block.
                 */
                n = dict_lookup(&clstr_dict,
index 11c19e8..8b7f84a 100644 (file)
  *     - The inode_used_map bitmap
  *     - The inode_bad_map bitmap
  *     - The inode_dir_map bitmap
+ *     - The encrypted_file_info
+ *     - The inode_casefold_map bitmap
  *
  * Pass 2 frees the following data structures
  *     - The inode_bad_map bitmap
  *     - The inode_reg_map bitmap
+ *     - The encrypted_file_info
+ *     - The inode_casefold_map bitmap
  */
 
 #define _GNU_SOURCE 1 /* get strnlen() */
@@ -71,8 +75,8 @@ static int allocate_dir_block(e2fsck_t ctx,
                              struct ext2_db_entry2 *dir_blocks_info,
                              char *buf, struct problem_context *pctx);
 static void clear_htree(e2fsck_t ctx, ext2_ino_t ino);
-static int htree_depth(struct dx_dir_info *dx_dir,
-                      struct dx_dirblock_info *dx_db);
+static short htree_depth(struct dx_dir_info *dx_dir,
+                        struct dx_dirblock_info *dx_db);
 static EXT2_QSORT_TYPE special_dir_block_cmp(const void *a, const void *b);
 
 struct check_dir_struct {
@@ -85,20 +89,54 @@ struct check_dir_struct {
        unsigned long long next_ra_off;
 };
 
+static void update_parents(struct dx_dir_info *dx_dir, int type)
+{
+       struct dx_dirblock_info *dx_db, *dx_parent, *dx_previous;
+       blk_t b;
+
+       for (b = 0, dx_db = dx_dir->dx_block;
+            b < dx_dir->numblocks;
+            b++, dx_db++) {
+               dx_parent = &dx_dir->dx_block[dx_db->parent];
+               if (dx_db->type != type)
+                       continue;
+
+               /*
+                * XXX Make sure dx_parent->min_hash > dx_db->min_hash
+               */
+               if (dx_db->flags & DX_FLAG_FIRST) {
+                       dx_parent->min_hash = dx_db->min_hash;
+                       if (dx_parent->previous) {
+                               dx_previous =
+                                       &dx_dir->dx_block[dx_parent->previous];
+                               dx_previous->node_max_hash =
+                                       dx_parent->min_hash;
+                       }
+               }
+               /*
+                * XXX Make sure dx_parent->max_hash < dx_db->max_hash
+                */
+               if (dx_db->flags & DX_FLAG_LAST) {
+                       dx_parent->max_hash = dx_db->max_hash;
+               }
+       }
+}
+
 void e2fsck_pass2(e2fsck_t ctx)
 {
        struct ext2_super_block *sb = ctx->fs->super;
        struct problem_context  pctx;
        ext2_filsys             fs = ctx->fs;
-       char                    *buf;
+       char                    *buf = NULL;
 #ifdef RESOURCE_TRACK
        struct resource_track   rtrack;
 #endif
        struct check_dir_struct cd;
        struct dx_dir_info      *dx_dir;
-       struct dx_dirblock_info *dx_db, *dx_parent;
-       int                     b;
-       int                     i, depth;
+       struct dx_dirblock_info *dx_db;
+       blk_t                   b;
+       ext2_ino_t              i;
+       short                   depth;
        problem_t               code;
        int                     bad_dir;
        int (*check_dir_func)(ext2_filsys fs,
@@ -182,24 +220,11 @@ void e2fsck_pass2(e2fsck_t ctx)
                 * Find all of the first and last leaf blocks, and
                 * update their parent's min and max hash values
                 */
-               for (b=0, dx_db = dx_dir->dx_block;
-                    b < dx_dir->numblocks;
-                    b++, dx_db++) {
-                       if ((dx_db->type != DX_DIRBLOCK_LEAF) ||
-                           !(dx_db->flags & (DX_FLAG_FIRST | DX_FLAG_LAST)))
-                               continue;
-                       dx_parent = &dx_dir->dx_block[dx_db->parent];
-                       /*
-                        * XXX Make sure dx_parent->min_hash > dx_db->min_hash
-                        */
-                       if (dx_db->flags & DX_FLAG_FIRST)
-                               dx_parent->min_hash = dx_db->min_hash;
-                       /*
-                        * XXX Make sure dx_parent->max_hash < dx_db->max_hash
-                        */
-                       if (dx_db->flags & DX_FLAG_LAST)
-                               dx_parent->max_hash = dx_db->max_hash;
-               }
+               update_parents(dx_dir, DX_DIRBLOCK_LEAF);
+
+               /* for 3 level htree: update 2 level parent's min
+                * and max hash values */
+               update_parents(dx_dir, DX_DIRBLOCK_NODE);
 
                for (b=0, dx_db = dx_dir->dx_block;
                     b < dx_dir->numblocks;
@@ -264,9 +289,14 @@ void e2fsck_pass2(e2fsck_t ctx)
                ext2fs_free_inode_bitmap(ctx->inode_reg_map);
                ctx->inode_reg_map = 0;
        }
-       if (ctx->encrypted_dirs) {
-               ext2fs_u32_list_free(ctx->encrypted_dirs);
-               ctx->encrypted_dirs = 0;
+       if (ctx->inode_casefold_map) {
+               ext2fs_free_inode_bitmap(ctx->inode_casefold_map);
+               ctx->inode_casefold_map = 0;
+       }
+       destroy_encrypted_file_info(ctx);
+       if (ctx->casefolded_dirs) {
+               ext2fs_u32_list_free(ctx->casefolded_dirs);
+               ctx->casefolded_dirs = 0;
        }
 
        clear_problem_context(&pctx);
@@ -290,10 +320,10 @@ cleanup:
 }
 
 #define MAX_DEPTH 32000
-static int htree_depth(struct dx_dir_info *dx_dir,
-                      struct dx_dirblock_info *dx_db)
+static short htree_depth(struct dx_dir_info *dx_dir,
+                        struct dx_dirblock_info *dx_db)
 {
-       int     depth = 0;
+       short depth = 0;
 
        while (dx_db->type != DX_DIRBLOCK_ROOT && depth < MAX_DEPTH) {
                dx_db = &dx_dir->dx_block[dx_db->parent];
@@ -302,7 +332,7 @@ static int htree_depth(struct dx_dir_info *dx_dir,
        return depth;
 }
 
-static int dict_de_cmp(const void *a, const void *b)
+static int dict_de_cmp(const void *cmp_ctx, const void *a, const void *b)
 {
        const struct ext2_dir_entry *de_a, *de_b;
        int     a_len, b_len;
@@ -318,6 +348,20 @@ static int dict_de_cmp(const void *a, const void *b)
        return memcmp(de_a->name, de_b->name, a_len);
 }
 
+static int dict_de_cf_cmp(const void *cmp_ctx, const void *a, const void *b)
+{
+       const struct ext2fs_nls_table *tbl = cmp_ctx;
+       const struct ext2_dir_entry *de_a, *de_b;
+       int     a_len, b_len;
+
+       de_a = (const struct ext2_dir_entry *) a;
+       a_len = ext2fs_dirent_name_len(de_a);
+       de_b = (const struct ext2_dir_entry *) b;
+       b_len = ext2fs_dirent_name_len(de_b);
+
+       return ext2fs_casefold_cmp(tbl, de_a->name, a_len, de_b->name, b_len);
+}
+
 /*
  * This is special sort function that makes sure that directory blocks
  * with a dirblock of zero are sorted to the beginning of the list.
@@ -484,19 +528,41 @@ static int check_name(e2fsck_t ctx,
 }
 
 static int encrypted_check_name(e2fsck_t ctx,
-                               struct ext2_dir_entry *dirent,
+                               const struct ext2_dir_entry *dirent,
                                struct problem_context *pctx)
 {
        if (ext2fs_dirent_name_len(dirent) < EXT4_CRYPTO_BLOCK_SIZE) {
-               if (fix_problem(ctx, PR_2_BAD_ENCRYPTED_NAME, pctx)) {
-                       dirent->inode = 0;
+               if (fix_problem(ctx, PR_2_BAD_ENCRYPTED_NAME, pctx))
                        return 1;
-               }
                ext2fs_unmark_valid(ctx->fs);
        }
        return 0;
 }
 
+static int encoded_check_name(e2fsck_t ctx,
+                             struct ext2_dir_entry *dirent,
+                             struct problem_context *pctx)
+{
+       const struct ext2fs_nls_table *tbl = ctx->fs->encoding;
+       int ret;
+       int len = ext2fs_dirent_name_len(dirent);
+       char *pos, *end;
+
+       ret = ext2fs_check_encoded_name(tbl, dirent->name, len, &pos);
+       if (ret < 0) {
+               fatal_error(ctx, _("NLS is broken."));
+       } else if(ret > 0) {
+               ret = fix_problem(ctx, PR_2_BAD_ENCODED_NAME, pctx);
+               if (ret) {
+                       end = &dirent->name[len];
+                       for (; *pos && pos != end; pos++)
+                               *pos = '.';
+               }
+       }
+
+       return (ret || check_name(ctx, dirent, pctx));
+}
+
 /*
  * Check the directory filetype (if present)
  */
@@ -549,8 +615,8 @@ static void parse_int_node(ext2_filsys fs,
                           struct dx_dir_info   *dx_dir,
                           char *block_buf, int failed_csum)
 {
-       struct          ext2_dx_root_info  *root;
-       struct          ext2_dx_entry *ent;
+       struct          ext2_dx_root_info  *root;
+       struct          ext2_dx_entry *ent;
        struct          ext2_dx_countlimit *limit;
        struct dx_dirblock_info *dx_db;
        int             i, expect_limit, count;
@@ -566,10 +632,10 @@ static void parse_int_node(ext2_filsys fs,
 #ifdef DX_DEBUG
                printf("Root node dump:\n");
                printf("\t Reserved zero: %u\n", root->reserved_zero);
-               printf("\t Hash Version: %d\n", root->hash_version);
-               printf("\t Info length: %d\n", root->info_length);
-               printf("\t Indirect levels: %d\n", root->indirect_levels);
-               printf("\t Flags: %d\n", root->unused_flags);
+               printf("\t Hash Version: %u\n", root->hash_version);
+               printf("\t Info length: %u\n", root->info_length);
+               printf("\t Indirect levels: %u\n", root->indirect_levels);
+               printf("\t Flags: %x\n", root->unused_flags);
 #endif
 
                ent = (struct ext2_dx_entry *) (block_buf + 24 + root->info_length);
@@ -623,9 +689,9 @@ static void parse_int_node(ext2_filsys fs,
                printf("Entry #%d: Hash 0x%08x, block %u\n", i,
                       hash, ext2fs_le32_to_cpu(ent[i].block));
 #endif
-               blk = ext2fs_le32_to_cpu(ent[i].block) & 0x0ffffff;
+               blk = ext2fs_le32_to_cpu(ent[i].block) & EXT4_DX_BLOCK_MASK;
                /* Check to make sure the block is valid */
-               if (blk >= (blk_t) dx_dir->numblocks) {
+               if (blk >= dx_dir->numblocks) {
                        cd->pctx.blk = blk;
                        if (fix_problem(cd->ctx, PR_2_HTREE_BADBLK,
                                        &cd->pctx))
@@ -642,6 +708,11 @@ static void parse_int_node(ext2_filsys fs,
                        dx_db->flags |= DX_FLAG_REFERENCED;
                        dx_db->parent = db->blockcnt;
                }
+
+               dx_db->previous =
+                       i ? (ext2fs_le32_to_cpu(ent[i-1].block) &
+                            EXT4_DX_BLOCK_MASK) : 0;
+
                if (hash < min_hash)
                        min_hash = hash;
                if (hash > max_hash)
@@ -680,7 +751,8 @@ static void salvage_directory(ext2_filsys fs,
                              struct ext2_dir_entry *dirent,
                              struct ext2_dir_entry *prev,
                              unsigned int *offset,
-                             unsigned int block_len)
+                             unsigned int block_len,
+                             int hash_in_dirent)
 {
        char    *cp = (char *) dirent;
        int left;
@@ -705,7 +777,8 @@ static void salvage_directory(ext2_filsys fs,
         * Special case of directory entry of size 8: copy what's left
         * of the directory block up to cover up the invalid hole.
         */
-       if ((left >= 12) && (rec_len == EXT2_DIR_ENTRY_HEADER_LEN)) {
+       if ((left >= ext2fs_dir_rec_len(1, hash_in_dirent)) &&
+            (rec_len == EXT2_DIR_ENTRY_HEADER_LEN)) {
                memmove(cp, cp+EXT2_DIR_ENTRY_HEADER_LEN, left);
                memset(cp + left, 0, EXT2_DIR_ENTRY_HEADER_LEN);
                return;
@@ -717,7 +790,7 @@ static void salvage_directory(ext2_filsys fs,
         */
        if ((left < 0) &&
            ((int) rec_len + left > EXT2_DIR_ENTRY_HEADER_LEN) &&
-           ((int) name_len + EXT2_DIR_ENTRY_HEADER_LEN <= (int) rec_len + left) &&
+           ((int) ext2fs_dir_rec_len(name_len, hash_in_dirent) <= (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);
@@ -852,6 +925,71 @@ err:
        return retval;
 }
 
+/* Return true if this type of file needs encryption */
+static int needs_encryption(e2fsck_t ctx, const struct ext2_dir_entry *dirent)
+{
+       int filetype = ext2fs_dirent_file_type(dirent);
+       ext2_ino_t ino = dirent->inode;
+       struct ext2_inode inode;
+
+       if (filetype != EXT2_FT_UNKNOWN)
+               return filetype == EXT2_FT_REG_FILE ||
+                      filetype == EXT2_FT_DIR ||
+                      filetype == EXT2_FT_SYMLINK;
+
+       if (ext2fs_test_inode_bitmap2(ctx->inode_reg_map, ino) ||
+           ext2fs_test_inode_bitmap2(ctx->inode_dir_map, ino))
+               return 1;
+
+       e2fsck_read_inode(ctx, ino, &inode, "check_encryption_policy");
+       return LINUX_S_ISREG(inode.i_mode) ||
+              LINUX_S_ISDIR(inode.i_mode) ||
+              LINUX_S_ISLNK(inode.i_mode);
+}
+
+/*
+ * All regular files, directories, and symlinks in encrypted directories must be
+ * encrypted using the same encryption policy as their directory.
+ *
+ * Returns 1 if the dirent should be cleared, otherwise 0.
+ */
+static int check_encryption_policy(e2fsck_t ctx,
+                                  const struct ext2_dir_entry *dirent,
+                                  __u32 dir_encpolicy_id,
+                                  struct problem_context *pctx)
+{
+       __u32 file_encpolicy_id = find_encryption_policy(ctx, dirent->inode);
+
+       /* Same policy or both UNRECOGNIZED_ENCRYPTION_POLICY? */
+       if (file_encpolicy_id == dir_encpolicy_id)
+               return 0;
+
+       if (file_encpolicy_id == NO_ENCRYPTION_POLICY) {
+               if (!needs_encryption(ctx, dirent))
+                       return 0;
+               return fix_problem(ctx, PR_2_UNENCRYPTED_FILE, pctx);
+       }
+
+       return fix_problem(ctx, PR_2_INCONSISTENT_ENCRYPTION_POLICY, pctx);
+}
+
+/*
+ * Check an encrypted directory entry.
+ *
+ * Returns 1 if the dirent should be cleared, otherwise 0.
+ */
+static int check_encrypted_dirent(e2fsck_t ctx,
+                                 const struct ext2_dir_entry *dirent,
+                                 __u32 dir_encpolicy_id,
+                                 struct problem_context *pctx)
+{
+       if (encrypted_check_name(ctx, dirent, pctx))
+               return 1;
+       if (check_encryption_policy(ctx, dirent, dir_encpolicy_id, pctx))
+               return 1;
+       return 0;
+}
+
 static int check_dir_block2(ext2_filsys fs,
                           struct ext2_db_entry2 *db,
                           void *priv_data)
@@ -906,13 +1044,25 @@ static int check_dir_block(ext2_filsys fs,
        int     is_leaf = 1;
        size_t  inline_data_size = 0;
        int     filetype = 0;
-       int     encrypted = 0;
+       __u32   dir_encpolicy_id = NO_ENCRYPTION_POLICY;
+       int     hash_in_dirent = 0;
+       int     casefolded = 0;
        size_t  max_block_size;
+       int     hash_flags = 0;
+       static char *eop_read_dirblock = NULL;
+       int cf_dir = 0;
 
        cd = (struct check_dir_struct *) priv_data;
        ibuf = buf = cd->buf;
        ctx = cd->ctx;
 
+       /* We only want filename encoding verification on strict
+        * mode or if explicitly requested by user. */
+       if (ext2fs_test_inode_bitmap2(ctx->inode_casefold_map, ino) &&
+           ((ctx->fs->super->s_encoding_flags & EXT4_ENC_STRICT_MODE_FL) ||
+            (ctx->options & E2F_OPT_CHECK_ENCODING)))
+               cf_dir = 1;
+
        if (ctx->flags & E2F_FLAG_RUN_RETURN)
                return DIRENT_ABORT;
 
@@ -949,6 +1099,15 @@ static int check_dir_block(ext2_filsys fs,
                        return DIRENT_ABORT;
        }
 
+       /* This will allow (at some point in the future) to punch out empty
+        * directory blocks and reduce the space used by a directory that grows
+        * very large and then the files are deleted. For now, all that is
+        * needed is to avoid e2fsck filling in these holes as part of
+        * feature flag. */
+       if (db->blk == 0 && ext2fs_has_feature_largedir(fs->super) &&
+           !ext2fs_has_feature_inline_data(fs->super))
+               return 0;
+
        if (db->blk == 0 && !inline_data_size) {
                if (allocate_dir_block(ctx, db, buf, &cd->pctx))
                        return 0;
@@ -969,7 +1128,9 @@ static int check_dir_block(ext2_filsys fs,
               db->blockcnt, ino);
 #endif
 
-       ehandler_operation(_("reading directory block"));
+       if (!eop_read_dirblock)
+               eop_read_dirblock = (char *) _("reading directory block");
+       ehandler_operation(eop_read_dirblock);
        if (inline_data_size) {
                memset(buf, 0, fs->blocksize - inline_data_size);
                cd->pctx.errcode = ext2fs_inline_data_get(fs, ino, 0, buf, 0);
@@ -1058,11 +1219,12 @@ inline_read_fail:
                        dx_db->flags |= DX_FLAG_FIRST | DX_FLAG_LAST;
                        if ((root->reserved_zero ||
                             root->info_length < 8 ||
-                            root->indirect_levels > 1) &&
+                            root->indirect_levels >=
+                            ext2_dir_htree_level(fs)) &&
                            fix_problem(ctx, PR_2_HTREE_BAD_ROOT, &cd->pctx)) {
                                clear_htree(ctx, ino);
                                dx_dir->numblocks = 0;
-                               dx_db = 0;
+                               dx_db = NULL;
                        }
                        dx_dir->hashversion = root->hash_version;
                        if ((dx_dir->hashversion <= EXT2_HASH_TEA) &&
@@ -1074,9 +1236,10 @@ inline_read_fail:
                           (ext2fs_dirent_name_len(dirent) == 0) &&
                           (ext2fs_le16_to_cpu(limit->limit) ==
                            ((fs->blocksize - (8 + dx_csum_size)) /
-                            sizeof(struct ext2_dx_entry))))
+                            sizeof(struct ext2_dx_entry)))) {
                        dx_db->type = DX_DIRBLOCK_NODE;
-               is_leaf = (dx_db->type == DX_DIRBLOCK_LEAF);
+               }
+               is_leaf = dx_db ? (dx_db->type == DX_DIRBLOCK_LEAF) : 0;
        }
 out_htree:
 
@@ -1113,15 +1276,27 @@ skip_checksum:
        } else
                max_block_size = fs->blocksize - de_csum_size;
 
-       if (ctx->encrypted_dirs)
-               encrypted = ext2fs_u32_list_test(ctx->encrypted_dirs, ino);
+       dir_encpolicy_id = find_encryption_policy(ctx, ino);
+
+       if (cf_dir) {
+               dict_init(&de_dict, DICTCOUNT_T_MAX, dict_de_cf_cmp);
+               dict_set_cmp_context(&de_dict, (void *)ctx->fs->encoding);
+       } else {
+               dict_init(&de_dict, DICTCOUNT_T_MAX, dict_de_cmp);
+       }
+       if (ctx->casefolded_dirs)
+               casefolded = ext2fs_u32_list_test(ctx->casefolded_dirs, ino);
+       hash_in_dirent = (casefolded &&
+                         (dir_encpolicy_id != NO_ENCRYPTION_POLICY));
 
-       dict_init(&de_dict, DICTCOUNT_T_MAX, dict_de_cmp);
        prev = 0;
        do {
                dgrp_t group;
                ext2_ino_t first_unused_inode;
                unsigned int name_len;
+               /* csum entry is not checked here, so don't worry about it */
+               int extended = (dot_state > 1) && hash_in_dirent;
+               int min_dir_len = ext2fs_dir_rec_len(1, extended);
 
                problem = 0;
                if (!inline_data_size || dot_state > 1) {
@@ -1131,15 +1306,16 @@ skip_checksum:
                         * force salvaging this dir.
                         */
                        if (max_block_size - offset < EXT2_DIR_ENTRY_HEADER_LEN)
-                               rec_len = EXT2_DIR_REC_LEN(1);
+                               rec_len = ext2fs_dir_rec_len(1, extended);
                        else
                                (void) ext2fs_get_rec_len(fs, dirent, &rec_len);
                        cd->pctx.dirent = dirent;
                        cd->pctx.num = offset;
                        if ((offset + rec_len > max_block_size) ||
-                           (rec_len < 12) ||
+                           (rec_len < min_dir_len) ||
                            ((rec_len % 4) != 0) ||
-                           (((unsigned) ext2fs_dirent_name_len(dirent) + EXT2_DIR_ENTRY_HEADER_LEN) > rec_len)) {
+                           ((ext2fs_dir_rec_len(ext2fs_dirent_name_len(dirent),
+                                                extended)) > rec_len)) {
                                if (fix_problem(ctx, PR_2_DIR_CORRUPTED,
                                                &cd->pctx)) {
 #ifdef WORDS_BIGENDIAN
@@ -1172,7 +1348,8 @@ skip_checksum:
 #endif
                                        salvage_directory(fs, dirent, prev,
                                                          &offset,
-                                                         max_block_size);
+                                                         max_block_size,
+                                                         hash_in_dirent);
 #ifdef WORDS_BIGENDIAN
                                        if (need_reswab) {
                                                (void) ext2fs_get_rec_len(fs,
@@ -1378,22 +1555,44 @@ skip_checksum:
                        }
                }
 
-               if (!encrypted && check_name(ctx, dirent, &cd->pctx))
+               if (check_filetype(ctx, dirent, ino, &cd->pctx))
                        dir_modified++;
 
-               if (encrypted && (dot_state) > 1 &&
-                   encrypted_check_name(ctx, dirent, &cd->pctx)) {
-                       dir_modified++;
-                       goto next;
+               if (dir_encpolicy_id != NO_ENCRYPTION_POLICY) {
+                       /* Encrypted directory */
+                       if (dot_state > 1 &&
+                           check_encrypted_dirent(ctx, dirent,
+                                                  dir_encpolicy_id,
+                                                  &cd->pctx)) {
+                               dirent->inode = 0;
+                               dir_modified++;
+                               goto next;
+                       }
+               } else if (cf_dir) {
+                       /* Casefolded directory */
+                       if (encoded_check_name(ctx, dirent, &cd->pctx))
+                               dir_modified++;
+               } else {
+                       /* Unencrypted and uncasefolded directory */
+                       if (check_name(ctx, dirent, &cd->pctx))
+                               dir_modified++;
                }
 
-               if (check_filetype(ctx, dirent, ino, &cd->pctx))
-                       dir_modified++;
-
                if (dx_db) {
-                       ext2fs_dirhash(dx_dir->hashversion, dirent->name,
-                                      ext2fs_dirent_name_len(dirent),
-                                      fs->super->s_hash_seed, &hash, 0);
+                       if (dx_dir->casefolded_hash)
+                               hash_flags = EXT4_CASEFOLD_FL;
+
+                       if (dx_dir->hashversion == EXT2_HASH_SIPHASH) {
+                               if (dot_state > 1)
+                                       hash = EXT2_DIRENT_HASH(dirent);
+                       } else {
+                               ext2fs_dirhash2(dx_dir->hashversion,
+                                               dirent->name,
+                                               ext2fs_dirent_name_len(dirent),
+                                               fs->encoding, hash_flags,
+                                               fs->super->s_hash_seed,
+                                               &hash, 0);
+                       }
                        if (hash < dx_db->min_hash)
                                dx_db->min_hash = hash;
                        if (hash > dx_db->max_hash)
@@ -1575,6 +1774,7 @@ abort_free_dict:
 struct del_block {
        e2fsck_t        ctx;
        e2_blkcnt_t     num;
+       blk64_t last_cluster;
 };
 
 /*
@@ -1589,20 +1789,26 @@ static int deallocate_inode_block(ext2_filsys fs,
                                  void *priv_data)
 {
        struct del_block *p = priv_data;
+       blk64_t cluster = EXT2FS_B2C(fs, *block_nr);
 
        if (*block_nr == 0)
                return 0;
+
+       if (cluster == p->last_cluster)
+               return 0;
+
+       p->last_cluster = cluster;
        if ((*block_nr < fs->super->s_first_data_block) ||
            (*block_nr >= ext2fs_blocks_count(fs->super)))
                return 0;
-       if ((*block_nr % EXT2FS_CLUSTER_RATIO(fs)) == 0)
-               ext2fs_block_alloc_stats2(fs, *block_nr, -1);
+
+        ext2fs_block_alloc_stats2(fs, *block_nr, -1);
        p->num++;
        return 0;
 }
 
 /*
- * This fuction deallocates an inode
+ * This function deallocates an inode
  */
 static void deallocate_inode(e2fsck_t ctx, ext2_ino_t ino, char* block_buf)
 {
@@ -1657,6 +1863,7 @@ static void deallocate_inode(e2fsck_t ctx, ext2_ino_t ino, char* block_buf)
 
        del_block.ctx = ctx;
        del_block.num = 0;
+       del_block.last_cluster = 0;
        pctx.errcode = ext2fs_block_iterate3(fs, ino, 0, block_buf,
                                             deallocate_inode_block,
                                             &del_block);
@@ -1672,7 +1879,7 @@ clear_inode:
 }
 
 /*
- * This fuction clears the htree flag on an inode
+ * This function clears the htree flag on an inode
  */
 static void clear_htree(e2fsck_t ctx, ext2_ino_t ino)
 {
@@ -1811,10 +2018,10 @@ int e2fsck_process_bad_inode(e2fsck_t ctx, ext2_ino_t dir,
                } else
                        not_fixed++;
        }
-       if (inode.i_dir_acl &&
+       if (inode.i_size_high && !ext2fs_has_feature_largedir(fs->super) &&
            LINUX_S_ISDIR(inode.i_mode)) {
-               if (fix_problem(ctx, PR_2_DIR_ACL_ZERO, &pctx)) {
-                       inode.i_dir_acl = 0;
+               if (fix_problem(ctx, PR_2_DIR_SIZE_HIGH_ZERO, &pctx)) {
+                       inode.i_size_high = 0;
                        inode_modified++;
                } else
                        not_fixed++;
index 44203ca..cedaaf5 100644 (file)
@@ -15,7 +15,7 @@
  * not, e2fsck will offer to create a new one.  It is then marked as
  * "done".
  *
- * Then, pass3 interates over all directory inodes; for each directory
+ * Then, pass3 iterates over all directory inodes; for each directory
  * it attempts to trace up the filesystem tree, using dirinfo.parent
  * until it reaches a directory which has been marked "done".  If it
  * can not do so, then the directory must be disconnected, and e2fsck
@@ -157,7 +157,8 @@ static void check_root(e2fsck_t ctx)
 {
        ext2_filsys fs = ctx->fs;
        blk64_t                 blk;
-       struct ext2_inode       inode;
+       struct ext2_inode_large inode;
+       struct ext2_inode       *iptr = (struct ext2_inode *) &inode;
        char *                  block;
        struct problem_context  pctx;
 
@@ -213,13 +214,15 @@ skip_new_block:
        inode.i_size = fs->blocksize;
        inode.i_atime = inode.i_ctime = inode.i_mtime = ctx->now;
        inode.i_links_count = 2;
-       ext2fs_iblk_set(fs, &inode, 1);
+       ext2fs_iblk_set(fs, iptr, 1);
        inode.i_block[0] = blk;
+       inode.i_extra_isize = sizeof(struct ext2_inode_large) -
+               EXT2_GOOD_OLD_INODE_SIZE;
 
        /*
         * Write out the inode.
         */
-       pctx.errcode = ext2fs_write_new_inode(fs, EXT2_ROOT_INO, &inode);
+       pctx.errcode = ext2fs_write_new_inode(fs, EXT2_ROOT_INO, iptr);
        if (pctx.errcode) {
                pctx.str = "ext2fs_write_inode";
                fix_problem(ctx, PR_3_CREATE_ROOT_ERROR, &pctx);
@@ -262,6 +265,9 @@ skip_new_block:
        ext2fs_mark_inode_bitmap2(ctx->inode_dir_map, EXT2_ROOT_INO);
        ext2fs_mark_inode_bitmap2(fs->inode_map, EXT2_ROOT_INO);
        ext2fs_mark_ib_dirty(fs);
+       quota_data_add(ctx->qctx, &inode, EXT2_ROOT_INO,
+                      EXT2_CLUSTER_SIZE(fs->super));
+       quota_data_inodes(ctx->qctx, &inode, EXT2_ROOT_INO, +1);
 }
 
 /*
@@ -578,7 +584,7 @@ link_error:
        ext2fs_icount_store(ctx->inode_count, ino, 2);
        ext2fs_icount_store(ctx->inode_link_info, ino, 2);
        ctx->lost_and_found = ino;
-       quota_data_add(ctx->qctx, &inode, ino, fs->blocksize);
+       quota_data_add(ctx->qctx, &inode, ino, EXT2_CLUSTER_SIZE(fs->super));
        quota_data_inodes(ctx->qctx, &inode, ino, +1);
 #if 0
        printf("/lost+found created; inode #%lu\n", ino);
@@ -899,7 +905,8 @@ errcode_t e2fsck_expand_directory(e2fsck_t ctx, ext2_ino_t dir,
        if (retval)
                return retval;
        ext2fs_iblk_add_blocks(fs, EXT2_INODE(&inode), es.newblocks);
-       quota_data_add(ctx->qctx, &inode, dir, es.newblocks * fs->blocksize);
+       quota_data_add(ctx->qctx, &inode, dir,
+                      es.newblocks * EXT2_CLUSTER_SIZE(fs->super));
 
        e2fsck_write_inode_full(ctx, dir, EXT2_INODE(&inode),
                                sizeof(inode), "expand_directory");
index 8c101fd..8c2d2f1 100644 (file)
@@ -11,6 +11,7 @@
  * Pass 4 frees the following data structures:
  *     - A bitmap of which inodes are in bad blocks.   (inode_bb_map)
  *     - A bitmap of which inodes are imagic inodes.   (inode_imagic_map)
+ *     - Ref counts for ea_inodes.                     (ea_inode_refs)
  */
 
 #include "config.h"
@@ -38,6 +39,7 @@ static int disconnect_inode(e2fsck_t ctx, ext2_ino_t i,
                               "pass4: disconnect_inode");
        if (EXT2_INODE_SIZE(fs->super) > EXT2_GOOD_OLD_INODE_SIZE)
                extra_size = inode->i_extra_isize;
+
        clear_problem_context(&pctx);
        pctx.ino = i;
        pctx.inode = EXT2_INODE(inode);
@@ -85,6 +87,52 @@ static int disconnect_inode(e2fsck_t ctx, ext2_ino_t i,
        return 0;
 }
 
+static void check_ea_inode(e2fsck_t ctx, ext2_ino_t i,
+                          struct ext2_inode_large *inode, __u16 *link_counted)
+{
+       __u64 actual_refs = 0;
+       __u64 ref_count;
+
+       /*
+        * This function is called when link_counted is zero. So this may not
+        * be an xattr inode at all. Return immediately if EA_INODE flag is not
+        * set.
+        */
+       e2fsck_read_inode_full(ctx, i, EXT2_INODE(inode),
+                              EXT2_INODE_SIZE(ctx->fs->super),
+                              "pass4: check_ea_inode");
+       if (!(inode->i_flags & EXT4_EA_INODE_FL))
+               return;
+
+       if (ctx->ea_inode_refs)
+               ea_refcount_fetch(ctx->ea_inode_refs, i, &actual_refs);
+       if (!actual_refs)
+               return;
+
+       /*
+        * There are some attribute references, link_counted is now considered
+        * to be 1.
+        */
+       *link_counted = 1;
+
+       ref_count = ext2fs_get_ea_inode_ref(EXT2_INODE(inode));
+
+       /* Old Lustre-style xattr inodes do not have a stored refcount.
+        * However, their i_ctime and i_atime should be the same.
+        */
+       if (ref_count != actual_refs && inode->i_ctime != inode->i_atime) {
+               struct problem_context pctx;
+
+               clear_problem_context(&pctx);
+               pctx.ino = i;
+               pctx.num = ref_count;
+               pctx.num2 = actual_refs;
+               if (fix_problem(ctx, PR_4_EA_INODE_REF_COUNT, &pctx)) {
+                       ext2fs_set_ea_inode_ref(EXT2_INODE(inode), actual_refs);
+                       e2fsck_write_inode(ctx, i, EXT2_INODE(inode), "pass4");
+               }
+       }
+}
 
 void e2fsck_pass4(e2fsck_t ctx)
 {
@@ -97,6 +145,7 @@ void e2fsck_pass4(e2fsck_t ctx)
 #endif
        struct problem_context  pctx;
        __u16   link_count, link_counted;
+       int dir_nlink_fs;
        char    *buf = 0;
        dgrp_t  group, maxgroup;
 
@@ -120,6 +169,8 @@ void e2fsck_pass4(e2fsck_t ctx)
        if (!(ctx->options & E2F_OPT_PREEN))
                fix_problem(ctx, PR_4_PASS_HEADER, &pctx);
 
+       dir_nlink_fs = ext2fs_has_feature_dir_nlink(fs->super);
+
        group = 0;
        maxgroup = fs->group_desc_count;
        if (ctx->progress)
@@ -152,6 +203,16 @@ void e2fsck_pass4(e2fsck_t ctx)
                        continue;
                ext2fs_icount_fetch(ctx->inode_link_info, i, &link_count);
                ext2fs_icount_fetch(ctx->inode_count, i, &link_counted);
+
+               if (link_counted == 0) {
+                       /*
+                        * link_counted is expected to be 0 for an ea_inode.
+                        * check_ea_inode() will update link_counted if
+                        * necessary.
+                        */
+                       check_ea_inode(ctx, i, inode, &link_counted);
+               }
+
                if (link_counted == 0) {
                        if (!buf)
                                buf = e2fsck_allocate_memory(ctx,
@@ -166,9 +227,18 @@ void e2fsck_pass4(e2fsck_t ctx)
                                            &link_counted);
                }
                isdir = ext2fs_test_inode_bitmap2(ctx->inode_dir_map, i);
-               if (isdir && (link_counted > EXT2_LINK_MAX))
+               if (isdir && (link_counted > EXT2_LINK_MAX)) {
+                       if (!dir_nlink_fs &&
+                           fix_problem(ctx, PR_4_DIR_NLINK_FEATURE, &pctx)) {
+                               ext2fs_set_feature_dir_nlink(fs->super);
+                               ext2fs_mark_super_dirty(fs);
+                               dir_nlink_fs = 1;
+                       }
                        link_counted = 1;
+               }
                if (link_counted != link_count) {
+                       int fix_nlink = 0;
+
                        e2fsck_read_inode_full(ctx, i, EXT2_INODE(inode),
                                               inode_size, "pass4");
                        pctx.ino = i;
@@ -182,10 +252,20 @@ void e2fsck_pass4(e2fsck_t ctx)
                        pctx.num = link_counted;
                        /* i_link_count was previously exceeded, but no longer
                         * is, fix this but don't consider it an error */
-                       if ((isdir && link_counted > 1 &&
-                            (inode->i_flags & EXT2_INDEX_FL) &&
-                            link_count == 1 && !(ctx->options & E2F_OPT_NO)) ||
-                           fix_problem(ctx, PR_4_BAD_REF_COUNT, &pctx)) {
+                       if (isdir && link_counted > 1 &&
+                           (inode->i_flags & EXT2_INDEX_FL) &&
+                           link_count == 1) {
+                               if ((ctx->options & E2F_OPT_READONLY) == 0) {
+                                       fix_nlink =
+                                               fix_problem(ctx,
+                                                       PR_4_DIR_OVERFLOW_REF_COUNT,
+                                                       &pctx);
+                               }
+                       } else {
+                               fix_nlink = fix_problem(ctx, PR_4_BAD_REF_COUNT,
+                                               &pctx);
+                       }
+                       if (fix_nlink) {
                                inode->i_links_count = link_counted;
                                e2fsck_write_inode_full(ctx, i,
                                                        EXT2_INODE(inode),
@@ -197,6 +277,8 @@ void e2fsck_pass4(e2fsck_t ctx)
        ext2fs_free_icount(ctx->inode_count); ctx->inode_count = 0;
        ext2fs_free_inode_bitmap(ctx->inode_bb_map);
        ctx->inode_bb_map = 0;
+       ea_refcount_free(ctx->ea_inode_refs);
+       ctx->ea_inode_refs = 0;
        ext2fs_free_inode_bitmap(ctx->inode_imagic_map);
        ctx->inode_imagic_map = 0;
 errout:
index fb55b7e..c1d45a5 100644 (file)
@@ -21,8 +21,6 @@
 #include "e2fsck.h"
 #include "problem.h"
 
-#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
-
 static void check_block_bitmaps(e2fsck_t ctx);
 static void check_inode_bitmaps(e2fsck_t ctx);
 static void check_inode_end(e2fsck_t ctx);
@@ -302,7 +300,7 @@ static void print_bitmap_problem(e2fsck_t ctx, problem_t problem,
        pctx->ino = pctx->ino2 = 0;
 }
 
-/* Just to be more succint */
+/* Just to be more succinct */
 #define B2C(x) EXT2FS_B2C(fs, (x))
 #define EQ_CLSTR(x, y) (B2C(x) == B2C(y))
 #define LE_CLSTR(x, y) (B2C(x) <= B2C(y))
@@ -840,10 +838,11 @@ static void check_inode_end(e2fsck_t ctx)
        ext2_filsys fs = ctx->fs;
        ext2_ino_t      end, save_inodes_count, i;
        struct problem_context  pctx;
+       int asked = 0;
 
        clear_problem_context(&pctx);
 
-       end = EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count;
+       end = (__u64)EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count;
        pctx.errcode = ext2fs_fudge_inode_bitmap_end(fs->inode_map, end,
                                                     &save_inodes_count);
        if (pctx.errcode) {
@@ -853,11 +852,12 @@ static void check_inode_end(e2fsck_t ctx)
                return;
        }
        if (save_inodes_count == end)
-               return;
+               goto check_intra_bg_tail;
 
        /* protect loop from wrap-around if end is maxed */
        for (i = save_inodes_count + 1; i <= end && i > save_inodes_count; i++) {
                if (!ext2fs_test_inode_bitmap(fs->inode_map, i)) {
+                       asked = 1;
                        if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx)) {
                                for (; i <= end; i++)
                                        ext2fs_mark_inode_bitmap(fs->inode_map,
@@ -877,6 +877,21 @@ static void check_inode_end(e2fsck_t ctx)
                ctx->flags |= E2F_FLAG_ABORT; /* fatal */
                return;
        }
+       /*
+        * If the number of inodes per block group != blocksize, we
+        * can also have a potential problem with the tail bits in
+        * each individual inode bitmap block.  If there is a problem,
+        * it would have been noticed when the bitmap was loaded.  And
+        * fixing this is easy; all we need to do force the bitmap to
+        * be written back to disk.
+        */
+check_intra_bg_tail:
+       if (!asked && fs->flags & EXT2_FLAG_IBITMAP_TAIL_PROBLEM) {
+               if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx))
+                       ext2fs_mark_ib_dirty(fs);
+               else
+                       ext2fs_unmark_valid(fs);
+       }
 }
 
 static void check_block_end(e2fsck_t ctx)
@@ -884,6 +899,7 @@ static void check_block_end(e2fsck_t ctx)
        ext2_filsys fs = ctx->fs;
        blk64_t end, save_blocks_count, i;
        struct problem_context  pctx;
+       int asked = 0;
 
        clear_problem_context(&pctx);
 
@@ -898,12 +914,13 @@ static void check_block_end(e2fsck_t ctx)
                return;
        }
        if (save_blocks_count == end)
-               return;
+               goto check_intra_bg_tail;
 
        /* Protect loop from wrap-around if end is maxed */
        for (i = save_blocks_count + 1; i <= end && i > save_blocks_count; i++) {
                if (!ext2fs_test_block_bitmap2(fs->block_map,
                                               EXT2FS_C2B(fs, i))) {
+                       asked = 1;
                        if (fix_problem(ctx, PR_5_BLOCK_BMAP_PADDING, &pctx)) {
                                for (; i <= end; i++)
                                        ext2fs_mark_block_bitmap2(fs->block_map,
@@ -923,7 +940,19 @@ static void check_block_end(e2fsck_t ctx)
                ctx->flags |= E2F_FLAG_ABORT; /* fatal */
                return;
        }
+       /*
+        * If the number of blocks per block group != blocksize, we
+        * can also have a potential problem with the tail bits in
+        * each individual block bitmap block.  If there is a problem,
+        * it would have been noticed when the bitmap was loaded.  And
+        * fixing this is easy; all we need to do force the bitmap to
+        * be written back to disk.
+        */
+check_intra_bg_tail:
+       if (!asked && fs->flags & EXT2_FLAG_BBITMAP_TAIL_PROBLEM) {
+               if (fix_problem(ctx, PR_5_BLOCK_BMAP_PADDING, &pctx))
+                       ext2fs_mark_bb_dirty(fs);
+               else
+                       ext2fs_unmark_valid(fs);
+       }
 }
-
-
-
index 34a671e..fe3b06a 100644 (file)
@@ -41,7 +41,9 @@
 #define PROMPT_UNLINK  17
 #define PROMPT_CLEAR_HTREE 18
 #define PROMPT_RECREATE 19
-#define PROMPT_NULL    20
+#define PROMPT_OPTIMIZE 20
+#define PROMPT_CLEAR_FLAG 21
+#define PROMPT_NULL    22
 
 /*
  * These are the prompts which are used to ask the user if they want
@@ -68,7 +70,9 @@ static const char *prompt[] = {
        N_("Unlink"),           /* 17 */
        N_("Clear HTree index"),/* 18 */
        N_("Recreate"),         /* 19 */
-       "",                     /* 20 */
+       N_("Optimize"),         /* 20 */
+       N_("Clear flag"),       /* 21 */
+       "",                     /* 22 */
 };
 
 /*
@@ -96,29 +100,33 @@ static const char *preen_msg[] = {
        N_("UNLINKED"),         /* 17 */
        N_("HTREE INDEX CLEARED"),/* 18 */
        N_("WILL RECREATE"),    /* 19 */
-       "",                     /* 20 */
+       N_("WILL OPTIMIZE"),    /* 20 */
+       N_("FLAG CLEARED"),     /* 21 */
+       "",                     /* 22 */
 };
 
+#if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#endif
 
 static struct e2fsck_problem problem_table[] = {
 
        /* Pre-Pass 1 errors */
 
-       /* Block bitmap not in group */
+       /* Block bitmap for group is not in group */
        { PR_0_BB_NOT_GROUP, N_("@b @B for @g %g is not in @g.  (@b %b)\n"),
-         PROMPT_RELOCATE, PR_LATCH_RELOC },
+         PROMPT_RELOCATE, PR_LATCH_RELOC, 0, 0, 0 },
 
-       /* Inode bitmap not in group */
+       /* Inode bitmap for group is not in group */
        { PR_0_IB_NOT_GROUP, N_("@i @B for @g %g is not in @g.  (@b %b)\n"),
-         PROMPT_RELOCATE, PR_LATCH_RELOC },
+         PROMPT_RELOCATE, PR_LATCH_RELOC, 0, 0, 0 },
 
-       /* Inode table not in group */
+       /* Inode table for group is not in group.  (block nnnn) */
        { PR_0_ITABLE_NOT_GROUP,
          N_("@i table for @g %g is not in @g.  (@b %b)\n"
          "WARNING: SEVERE DATA LOSS POSSIBLE.\n"),
-         PROMPT_RELOCATE, PR_LATCH_RELOC },
+         PROMPT_RELOCATE, PR_LATCH_RELOC, 0, 0, 0 },
 
        /* Superblock corrupt */
        { PR_0_SB_CORRUPT,
@@ -129,886 +137,950 @@ static struct e2fsck_problem problem_table[] = {
          "    e2fsck -b 8193 <@v>\n"
          " or\n"
          "    e2fsck -b 32768 <@v>\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Filesystem size is wrong */
        { PR_0_FS_SIZE_WRONG,
          N_("The @f size (according to the @S) is %b @bs\n"
          "The physical size of the @v is %c @bs\n"
          "Either the @S or the partition table is likely to be corrupt!\n"),
-         PROMPT_ABORT, 0 },
+         PROMPT_ABORT, 0, 0, 0, 0 },
 
        /* Fragments not supported */
        { PR_0_NO_FRAGMENTS,
          N_("@S @b_size = %b, fragsize = %c.\n"
          "This version of e2fsck does not support fragment sizes different\n"
          "from the @b size.\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
-         /* Bad blocks_per_group */
+       /* Superblock blocks_per_group = bbbb, should have been cccc */
        { PR_0_BLOCKS_PER_GROUP,
          N_("@S @bs_per_group = %b, should have been %c\n"),
-         PROMPT_NONE, PR_AFTER_CODE, PR_0_SB_CORRUPT },
+         PROMPT_NONE, PR_AFTER_CODE, PR_0_SB_CORRUPT, 0, 0 },
 
-       /* Bad first_data_block */
+       /* Superblock first_data_block = bbbb, should have been cccc */
        { PR_0_FIRST_DATA_BLOCK,
          N_("@S first_data_@b = %b, should have been %c\n"),
-         PROMPT_NONE, PR_AFTER_CODE, PR_0_SB_CORRUPT },
+         PROMPT_NONE, PR_AFTER_CODE, PR_0_SB_CORRUPT, 0, 0 },
 
-       /* Adding UUID to filesystem */
+       /* Filesystem did not have a UUID; generating one */
        { PR_0_ADD_UUID,
          N_("@f did not have a UUID; generating one.\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Relocate hint */
        { PR_0_RELOCATE_HINT,
+         /* xgettext:no-c-format */
          N_("Note: if several inode or block bitmap blocks or part\n"
          "of the inode table require relocation, you may wish to try\n"
          "running e2fsck with the '-b %S' option first.  The problem\n"
          "may lie only with the primary block group descriptors, and\n"
          "the backup block group descriptors may be OK.\n\n"),
-         PROMPT_NONE, PR_PREEN_OK | PR_NOCOLLATE },
+         PROMPT_NONE, PR_PREEN_OK | PR_NOCOLLATE, 0, 0, 0 },
 
        /* Miscellaneous superblock corruption */
        { PR_0_MISC_CORRUPT_SUPER,
          N_("Corruption found in @S.  (%s = %N).\n"),
-         PROMPT_NONE, PR_AFTER_CODE, PR_0_SB_CORRUPT },
+         PROMPT_NONE, PR_AFTER_CODE, PR_0_SB_CORRUPT, 0, 0 },
 
-       /* Error determing physical device size of filesystem */
+       /* Error determining physical device size of filesystem */
        { PR_0_GETSIZE_ERROR,
+         /* xgettext:no-c-format */
          N_("Error determining size of the physical @v: %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Inode count in superblock is incorrect */
        { PR_0_INODE_COUNT_WRONG,
          N_("@i count in @S is %i, @s %j.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        { PR_0_HURD_CLEAR_FILETYPE,
          N_("The Hurd does not support the filetype feature.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Journal inode is invalid */
+       /* Superblock has an invalid journal (inode inum) */
        { PR_0_JOURNAL_BAD_INODE,
+         /* xgettext:no-c-format */
          N_("@S has an @n @j (@i %i).\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* The external journal has (unsupported) multiple filesystems */
+       /* External journal has multiple filesystem users (unsupported) */
        { PR_0_JOURNAL_UNSUPP_MULTIFS,
          N_("External @j has multiple @f users (unsupported).\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Can't find external journal */
        { PR_0_CANT_FIND_JOURNAL,
          N_("Can't find external @j\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* External journal has bad superblock */
        { PR_0_EXT_JOURNAL_BAD_SUPER,
          N_("External @j has bad @S\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Superblock has a bad journal UUID */
        { PR_0_JOURNAL_BAD_UUID,
          N_("External @j does not support this @f\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
-       /* Journal has an unknown superblock type */
+       /* Filesystem journal superblock is an unknown type */
        { PR_0_JOURNAL_UNSUPP_SUPER,
          N_("@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 also possible the @j @S is corrupt.\n"),
-         PROMPT_ABORT, PR_NO_OK | PR_AFTER_CODE, PR_0_JOURNAL_BAD_SUPER },
+         PROMPT_ABORT, PR_NO_OK | PR_AFTER_CODE, PR_0_JOURNAL_BAD_SUPER,
+         0, 0 },
 
        /* Journal superblock is corrupt */
        { PR_0_JOURNAL_BAD_SUPER,
          N_("@j @S is corrupt.\n"),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Superblock has_journal flag is clear but has a journal */
        { PR_0_JOURNAL_HAS_JOURNAL,
          N_("@S has_@j flag is clear, but a @j is present.\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Superblock needs_recovery flag is set but not journal is present */
+       /* Superblock needs_recovery flag is set but no journal is present */
        { PR_0_JOURNAL_RECOVER_SET,
          N_("@S needs_recovery flag is set, but no @j is present.\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
        /* Superblock needs_recovery flag is set, but journal has data */
        { PR_0_JOURNAL_RECOVERY_CLEAR,
          N_("@S needs_recovery flag is clear, but @j has data.\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Ask if we should clear the journal */
        { PR_0_JOURNAL_RESET_JOURNAL,
          N_("Clear @j"),
-         PROMPT_NULL, PR_PREEN_NOMSG },
+         PROMPT_NULL, PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Filesystem revision is 0, but feature flags are set */
        { PR_0_FS_REV_LEVEL,
          N_("@f has feature flag(s) set, but is a revision 0 @f.  "),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
        /* Clearing orphan inode */
        { PR_0_ORPHAN_CLEAR_INODE,
          N_("%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Illegal block found in orphaned inode */
        { PR_0_ORPHAN_ILLEGAL_BLOCK_NUM,
           N_("@I %B (%b) found in @o @i %i.\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Already cleared block found in orphaned inode */
        { PR_0_ORPHAN_ALREADY_CLEARED_BLOCK,
           N_("Already cleared %B (%b) found in @o @i %i.\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Illegal orphan inode in superblock */
        { PR_0_ORPHAN_ILLEGAL_HEAD_INODE,
+         /* xgettext:no-c-format */
          N_("@I @o @i %i in @S.\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Illegal inode in orphaned inode list */
        { PR_0_ORPHAN_ILLEGAL_INODE,
+         /* xgettext:no-c-format */
          N_("@I @i %i in @o @i list.\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Journal superblock has an unknown read-only feature flag set */
        { PR_0_JOURNAL_UNSUPP_ROCOMPAT,
          N_("@j @S has an unknown read-only feature flag set.\n"),
-         PROMPT_ABORT, 0 },
+         PROMPT_ABORT, 0, 0, 0, 0 },
 
        /* Journal superblock has an unknown incompatible feature flag set */
        { PR_0_JOURNAL_UNSUPP_INCOMPAT,
          N_("@j @S has an unknown incompatible feature flag set.\n"),
-         PROMPT_ABORT, 0 },
+         PROMPT_ABORT, 0, 0, 0, 0 },
 
-       /* Journal has unsupported version number */
+       /* Journal version not supported by this e2fsck */
        { PR_0_JOURNAL_UNSUPP_VERSION,
          N_("@j version not supported by this e2fsck.\n"),
-         PROMPT_ABORT, 0 },
+         PROMPT_ABORT, 0, 0, 0, 0 },
 
-       /* Moving journal to hidden file */
+       /* Moving journal from /file to hidden inode */
        { PR_0_MOVE_JOURNAL,
+         /* xgettext:no-c-format */
          N_("Moving @j from /%s to hidden @i.\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Error moving journal to hidden file */
        { PR_0_ERR_MOVE_JOURNAL,
+         /* xgettext:no-c-format */
          N_("Error moving @j: %m\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
-       /* Clearing V2 journal superblock */
+       /* Found invalid V2 journal superblock fields */
        { PR_0_CLEAR_V2_JOURNAL,
          N_("Found @n V2 @j @S fields (from V1 @j).\n"
             "Clearing fields beyond the V1 @j @S...\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Ask if we should run the journal anyway */
        { PR_0_JOURNAL_RUN,
          N_("Run @j anyway"),
-         PROMPT_NULL, 0 },
+         PROMPT_NULL, 0, 0, 0, 0 },
 
        /* Run the journal by default */
        { PR_0_JOURNAL_RUN_DEFAULT,
          N_("Recovery flag not set in backup @S, so running @j anyway.\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
-       /* Backup journal inode blocks */
+       /* Backing up journal inode block information */
        { PR_0_BACKUP_JNL,
          N_("Backing up @j @i @b information.\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
-       /* Reserved blocks w/o resize_inode */
+       /* Filesystem does not have resize_inode enabled, but
+        * s_reserved_gdt_blocks is nnnn; should be zero */
        { PR_0_NONZERO_RESERVED_GDT_BLOCKS,
          N_("@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
             "is %N; @s zero.  "),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
-       /* Resize_inode not enabled, but resize inode is non-zero */
+       /* Resize_inode not enabled, but the resize inode is non-zero */
        { PR_0_CLEAR_RESIZE_INODE,
          N_("Resize_@i not enabled, but the resize @i is non-zero.  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Resize inode invalid */
+       /* Resize inode not valid */
        { PR_0_RESIZE_INODE_INVALID,
          N_("Resize @i not valid.  "),
-         PROMPT_RECREATE, 0 },
+         PROMPT_RECREATE, 0, 0, 0, 0 },
 
-       /* Last mount time is in the future */
+       /* Superblock last mount time is in the future */
        { PR_0_FUTURE_SB_LAST_MOUNT,
          N_("@S last mount time (%t,\n\tnow = %T) is in the future.\n"),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
-       /* Last write time is in the future */
+       /* Superblock last write time is in the future */
        { PR_0_FUTURE_SB_LAST_WRITE,
          N_("@S last write time (%t,\n\tnow = %T) is in the future.\n"),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
+       /* Superblock hint for external superblock should be xxxx */
        { PR_0_EXTERNAL_JOURNAL_HINT,
+         /* xgettext:no-c-format */
          N_("@S hint for external superblock @s %X.  "),
-            PROMPT_FIX, PR_PREEN_OK },
+            PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Adding dirhash hint */
+       /* Adding dirhash hint to filesystem */
        { PR_0_DIRHASH_HINT,
          N_("Adding dirhash hint to @f.\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
-       /* group descriptor N checksum is invalid. */
+       /* group descriptor N checksum is invalid, should be yyyy. */
        { PR_0_GDT_CSUM,
          N_("@g descriptor %g checksum is %04x, should be %04y.  "),
-            PROMPT_FIX, PR_LATCH_BG_CHECKSUM },
+            PROMPT_FIX, PR_LATCH_BG_CHECKSUM, 0, 0, 0 },
 
        /* group descriptor N marked uninitialized without feature set. */
        { PR_0_GDT_UNINIT,
+         /* xgettext:no-c-format */
          N_("@g descriptor %g marked uninitialized without feature set.\n"),
-            PROMPT_FIX, PR_PREEN_OK },
+            PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Group descriptor N has invalid unused inodes count. */
        { PR_0_GDT_ITABLE_UNUSED,
          N_("@g descriptor %g has invalid unused inodes count %b.  "),
-            PROMPT_FIX, PR_PREEN_OK },
+            PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Last group block bitmap uninitialized. */
        { PR_0_BB_UNINIT_LAST,
          N_("Last @g @b @B uninitialized.  "),
-            PROMPT_FIX, PR_PREEN_OK },
+            PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Journal transaction found corrupt */
+       /* Journal transaction was corrupt, replay was aborted */
        { PR_0_JNL_TXN_CORRUPT,
+         /* xgettext:no-c-format */
          N_("Journal transaction %i was corrupt, replay was aborted.\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
+       /* The test_fs filesystem flag is set (and ext4 is available) */
        { PR_0_CLEAR_TESTFS_FLAG,
          N_("The test_fs flag is set (and ext4 is available).  "),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
        /* Last mount time is in the future (fudged) */
        { PR_0_FUTURE_SB_LAST_MOUNT_FUDGED,
          N_("@S last mount time is in the future.\n\t(by less than a day, "
             "probably due to the hardware clock being incorrectly set)\n"),
-         PROMPT_NONE, PR_PREEN_OK | PR_NO_OK },
+         PROMPT_NONE, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
        /* Last write time is in the future (fudged) */
        { PR_0_FUTURE_SB_LAST_WRITE_FUDGED,
          N_("@S last write time is in the future.\n\t(by less than a day, "
             "probably due to the hardware clock being incorrectly set)\n"),
-         PROMPT_NONE, PR_PREEN_OK | PR_NO_OK },
+         PROMPT_NONE, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
-       /* Block group checksum (latch question) is invalid. */
+       /* One or more block group descriptor checksums are invalid (latch) */
        { PR_0_GDT_CSUM_LATCH,
          N_("One or more @b @g descriptor checksums are invalid.  "),
-            PROMPT_FIX, PR_PREEN_OK },
+            PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Free inodes count wrong */
+       /* Setting free inodes count to right (was wrong) */
        { PR_0_FREE_INODE_COUNT,
          N_("Setting free @is count to %j (was %i)\n"),
-         PROMPT_NONE, PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_PREEN_NOMSG, 0, 0, 0 },
 
-       /* Free blocks count wrong */
+       /* Setting free blocks count to right (was wrong) */
        { PR_0_FREE_BLOCK_COUNT,
          N_("Setting free @bs count to %c (was %b)\n"),
-         PROMPT_NONE, PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_PREEN_NOMSG, 0, 0, 0 },
 
-       /* Making quota file hidden */
+       /* Making quota inode hidden */
        { PR_0_HIDE_QUOTA,
-         N_("Making @q @i %i (%Q) hidden.\n"),
-         PROMPT_NONE, PR_PREEN_OK },
+         N_("Hiding %U @q @i %i (%Q).\n"),
+         PROMPT_NONE, PR_PREEN_OK, 0, 0, 0 },
 
        /* Superblock has invalid MMP block. */
        { PR_0_MMP_INVALID_BLK,
          N_("@S has invalid MMP block.  "),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
        /* Superblock has invalid MMP magic. */
        { PR_0_MMP_INVALID_MAGIC,
          N_("@S has invalid MMP magic.  "),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK},
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
        /* Opening file system failed */
        { PR_0_OPEN_FAILED,
+         /* xgettext:no-c-format */
          N_("ext2fs_open2: %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Checking group descriptor failed */
        { PR_0_CHECK_DESC_FAILED,
+         /* xgettext:no-c-format */
          N_("ext2fs_check_desc: %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
-       /*
-        * metadata_csum implies uninit_bg; both feature bits cannot
-        * be set simultaneously.
-        */
+       /* Superblock metadata_csum supersedes uninit_bg; both feature
+        * bits cannot be set simultaneously. */
        { PR_0_META_AND_GDT_CSUM_SET,
          N_("@S metadata_csum supersedes uninit_bg; both feature "
             "bits cannot be set simultaneously."),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK},
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
-       /* Superblock has invalid MMP checksum. */
+       /* Superblock MMP block checksum does not match MMP block. */
        { PR_0_MMP_CSUM_INVALID,
-         N_("@S MMP block checksum does not match MMP block.  "),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK},
+         N_("@S MMP @b checksum does not match.  "),
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
-       /* 64bit is set but extents is unset. */
+       /* Superblock 64bit filesystem needs extents to access the whole disk */
        { PR_0_64BIT_WITHOUT_EXTENTS,
-         N_("@S 64bit filesystems needs extents to access the whole disk.  "),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK},
+         N_("@S 64bit @f needs extents to access the whole disk.  "),
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
        /* The first_meta_bg is too big */
        { PR_0_FIRST_META_BG_TOO_BIG,
          N_("First_meta_bg is too big.  (%N, max value %g).  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* External journal has corrupt superblock */
+       /* External journal superblock checksum does not match superblock */
        { PR_0_EXT_JOURNAL_SUPER_CSUM_INVALID,
          N_("External @j @S checksum does not match @S.  "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* metadata_csum_seed means nothing without metadata_csum */
+       /* Superblock metadata_csum_seed means nothing without metadata_csum */
        { PR_0_CSUM_SEED_WITHOUT_META_CSUM,
          N_("@S metadata_csum_seed is not necessary without metadata_csum."),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK},
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
        /* Error initializing quota context */
        { PR_0_QUOTA_INIT_CTX,
+         /* xgettext:no-c-format */
          N_("Error initializing quota context in support library: %m\n"),
-         PROMPT_NULL, PR_FATAL },
+         PROMPT_NULL, PR_FATAL, 0, 0, 0 },
 
-       /* Bad s_min_extra_isize in superblock */
+       /* Bad required extra isize in superblock */
        { PR_0_BAD_MIN_EXTRA_ISIZE,
          N_("Bad required extra isize in @S (%N).  "),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
-       /* Bad s_min_extra_isize in superblock */
+       /* Bad desired extra isize in superblock */
        { PR_0_BAD_WANT_EXTRA_ISIZE,
          N_("Bad desired extra isize in @S (%N).  "),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
+
+       /* Invalid quota inode number */
+       { PR_0_INVALID_QUOTA_INO,
+         N_("Invalid %U @q @i %i.  "),
+         PROMPT_FIX, 0, 0, 0, 0 },
+
+       /* Too many inodes in the filesystem */
+       { PR_0_INODE_COUNT_BIG,
+         N_("@S would have too many inodes (%N).\n"),
+         PROMPT_NONE, PR_AFTER_CODE, PR_0_SB_CORRUPT, 0, 0 },
+
+       /* Meta_bg and resize_inode are not compatible, disable resize_inode*/
+       { PR_0_DISABLE_RESIZE_INODE,
+         N_("Resize_@i and meta_bg features are enabled. Those features are\n"
+            "not compatible. Resize @i should be disabled.  "),
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Pass 1 errors */
 
        /* Pass 1: Checking inodes, blocks, and sizes */
        { PR_1_PASS_HEADER,
          N_("Pass 1: Checking @is, @bs, and sizes\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, PR_HEADER, 0, 0, 0 },
 
        /* Root inode is not a directory */
        { PR_1_ROOT_NO_DIR, N_("@r is not a @d.  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Root inode has dtime set */
        { PR_1_ROOT_DTIME,
          N_("@r has dtime set (probably due to old mke2fs).  "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Reserved inode has bad mode */
        { PR_1_RESERVED_BAD_MODE,
          N_("Reserved @i %i (%Q) has @n mode.  "),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Deleted inode has zero dtime */
+       /* Deleted inode inum has zero dtime */
        { PR_1_ZERO_DTIME,
+         /* xgettext:no-c-format */
          N_("@D @i %i has zero dtime.  "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Inode in use, but dtime set */
+       /* Inode inum is in use, but has dtime set */
        { PR_1_SET_DTIME,
+         /* xgettext:no-c-format */
          N_("@i %i is in use, but has dtime set.  "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Zero-length directory */
+       /* Inode inum is a zero-length directory */
        { PR_1_ZERO_LENGTH_DIR,
+         /* xgettext:no-c-format */
          N_("@i %i is a @z @d.  "),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Block bitmap conflicts with some other fs block */
+       /* Group block bitmap at block conflicts with some other fs block */
        { PR_1_BB_CONFLICT,
          N_("@g %g's @b @B at %b @C.\n"),
-         PROMPT_RELOCATE, 0 },
+         PROMPT_RELOCATE, 0, 0, 0, 0 },
 
-       /* Inode bitmap conflicts with some other fs block */
+       /* Group inode bitmap at block conflicts with some other fs block */
        { PR_1_IB_CONFLICT,
          N_("@g %g's @i @B at %b @C.\n"),
-         PROMPT_RELOCATE, 0 },
+         PROMPT_RELOCATE, 0, 0, 0, 0 },
 
-       /* Inode table conflicts with some other fs block */
+       /* Group inode table at block conflicts with some other fs block */
        { PR_1_ITABLE_CONFLICT,
          N_("@g %g's @i table at %b @C.\n"),
-         PROMPT_RELOCATE, 0 },
+         PROMPT_RELOCATE, 0, 0, 0, 0 },
 
-       /* Block bitmap is on a bad block */
+       /* Group block bitmap (block) is bad */
        { PR_1_BB_BAD_BLOCK,
          N_("@g %g's @b @B (%b) is bad.  "),
-         PROMPT_RELOCATE, 0 },
+         PROMPT_RELOCATE, 0, 0, 0, 0 },
 
-       /* Inode bitmap is on a bad block */
+       /* Group inode bitmap (block) is bad */
        { PR_1_IB_BAD_BLOCK,
          N_("@g %g's @i @B (%b) is bad.  "),
-         PROMPT_RELOCATE, 0 },
+         PROMPT_RELOCATE, 0, 0, 0, 0 },
 
-       /* Inode has incorrect i_size */
+       /* Inode inum, i_size is small, should be larger */
        { PR_1_BAD_I_SIZE,
          N_("@i %i, i_size is %Is, @s %N.  "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Inode has incorrect i_blocks */
+       /* Inode inum, i_blocks is small, should be larger */
        { PR_1_BAD_I_BLOCKS,
          N_("@i %i, i_@bs is %Ib, @s %N.  "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Illegal blocknumber in inode */
+       /* Illegal block number in inode */
        { PR_1_ILLEGAL_BLOCK_NUM,
          N_("@I %B (%b) in @i %i.  "),
-         PROMPT_CLEAR, PR_LATCH_BLOCK },
+         PROMPT_CLEAR, PR_LATCH_BLOCK, 0, 0, 0 },
 
-       /* Block number overlaps fs metadata */
+       /* Block number overlaps filesystem metadata in inode */
        { PR_1_BLOCK_OVERLAPS_METADATA,
          N_("%B (%b) overlaps @f metadata in @i %i.  "),
-         PROMPT_CLEAR, PR_LATCH_BLOCK },
+         PROMPT_CLEAR, PR_LATCH_BLOCK, 0, 0, 0 },
 
        /* Inode has illegal blocks (latch question) */
        { PR_1_INODE_BLOCK_LATCH,
+         /* xgettext:no-c-format */
          N_("@i %i has illegal @b(s).  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Too many bad blocks in inode */
+       /* Too many illegal blocks in inode */
        { PR_1_TOO_MANY_BAD_BLOCKS,
+         /* xgettext:no-c-format */
          N_("Too many illegal @bs in @i %i.\n"),
-         PROMPT_CLEAR_INODE, PR_NO_OK },
+         PROMPT_CLEAR_INODE, PR_NO_OK, 0, 0, 0 },
 
        /* Illegal block number in bad block inode */
        { PR_1_BB_ILLEGAL_BLOCK_NUM,
          N_("@I %B (%b) in bad @b @i.  "),
-         PROMPT_CLEAR, PR_LATCH_BBLOCK },
+         PROMPT_CLEAR, PR_LATCH_BBLOCK, 0, 0, 0 },
 
        /* Bad block inode has illegal blocks (latch question) */
        { PR_1_INODE_BBLOCK_LATCH,
          N_("Bad @b @i has illegal @b(s).  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Duplicate or bad blocks in use! */
        { PR_1_DUP_BLOCKS_PREENSTOP,
          N_("Duplicate or bad @b in use!\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
-       /* Bad block used as bad block indirect block */
+       /* Bad block number used as bad block inode indirect block */
        { PR_1_BBINODE_BAD_METABLOCK,
          N_("Bad @b %b used as bad @b @i indirect @b.  "),
-         PROMPT_CLEAR, PR_LATCH_BBLOCK },
+         PROMPT_CLEAR, PR_LATCH_BBLOCK, 0, 0, 0 },
 
        /* Inconsistency can't be fixed prompt */
        { PR_1_BBINODE_BAD_METABLOCK_PROMPT,
          N_("\nThe bad @b @i has probably been corrupted.  You probably\n"
             "should stop now and run ""e2fsck -c"" to scan for bad blocks\n"
             "in the @f.\n"),
-         PROMPT_CONTINUE, PR_PREEN_NOMSG },
+         PROMPT_CONTINUE, PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Bad primary block */
        { PR_1_BAD_PRIMARY_BLOCK,
          N_("\nIf the @b is really bad, the @f can not be fixed.\n"),
-         PROMPT_NONE, PR_AFTER_CODE, PR_1_BAD_PRIMARY_BLOCK_PROMPT },
+         PROMPT_NONE, PR_AFTER_CODE, PR_1_BAD_PRIMARY_BLOCK_PROMPT, 0, 0 },
 
        /* Bad primary block prompt */
        { PR_1_BAD_PRIMARY_BLOCK_PROMPT,
          N_("You can remove this @b from the bad @b list and hope\n"
             "that the @b is really OK.  But there are no guarantees.\n\n"),
-         PROMPT_CLEAR, PR_PREEN_NOMSG },
+         PROMPT_CLEAR, PR_PREEN_NOMSG, 0, 0, 0 },
 
-       /* Bad primary superblock */
+       /* The primary superblock block is on the bad block list */
        { PR_1_BAD_PRIMARY_SUPERBLOCK,
          N_("The primary @S (%b) is on the bad @b list.\n"),
-         PROMPT_NONE, PR_AFTER_CODE, PR_1_BAD_PRIMARY_BLOCK },
+         PROMPT_NONE, PR_AFTER_CODE, PR_1_BAD_PRIMARY_BLOCK, 0, 0 },
 
        /* Bad primary block group descriptors */
        { PR_1_BAD_PRIMARY_GROUP_DESCRIPTOR,
          N_("Block %b in the primary @g descriptors "
-         "is on the bad @b list\n"),
-         PROMPT_NONE, PR_AFTER_CODE, PR_1_BAD_PRIMARY_BLOCK },
+            "is on the bad @b list\n"),
+         PROMPT_NONE, PR_AFTER_CODE, PR_1_BAD_PRIMARY_BLOCK, 0, 0 },
 
-       /* Bad superblock in group */
+       /* Warning: Group number's superblock (block) is bad */
        { PR_1_BAD_SUPERBLOCK,
          N_("Warning: Group %g's @S (%b) is bad.\n"),
-         PROMPT_NONE, PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_PREEN_OK | PR_PREEN_NOMSG, 0, 0, 0 },
 
-       /* Bad block group descriptors in group */
+       /* Warning: Group number's copy of the group descriptors has a bad
+        * block */
        { PR_1_BAD_GROUP_DESCRIPTORS,
          N_("Warning: Group %g's copy of the @g descriptors has a bad "
          "@b (%b).\n"),
-         PROMPT_NONE, PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_PREEN_OK | PR_PREEN_NOMSG, 0, 0, 0 },
 
-       /* Block claimed for no reason */
+       /* Block number claimed for no reason in process_bad_blocks */
        { PR_1_PROGERR_CLAIMED_BLOCK,
          N_("Programming error?  @b #%b claimed for no reason in "
          "process_bad_@b.\n"),
-         PROMPT_NONE, PR_PREEN_OK },
+         PROMPT_NONE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Error allocating blocks for relocating metadata */
+       /* Allocating number contiguous block(s) in block group number */
        { PR_1_RELOC_BLOCK_ALLOCATE,
          N_("@A %N contiguous @b(s) in @b @g %g for %s: %m\n"),
-         PROMPT_NONE, PR_PREEN_OK },
+         PROMPT_NONE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Error allocating block buffer during relocation process */
+       /* Allocating block buffer for relocating process */
        { PR_1_RELOC_MEMORY_ALLOCATE,
+         /* xgettext:no-c-format */
          N_("@A @b buffer for relocating %s\n"),
-         PROMPT_NONE, PR_PREEN_OK },
+         PROMPT_NONE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Relocating metadata group information from X to Y */
+       /* Relocating group number's information from X to Y */
        { PR_1_RELOC_FROM_TO,
          N_("Relocating @g %g's %s from %b to %c...\n"),
-         PROMPT_NONE, PR_PREEN_OK },
+         PROMPT_NONE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Relocating metatdata group information to X */
+       /* Relocating group number's information to X */
        { PR_1_RELOC_TO,
+         /* xgettext:no-c-format */
          N_("Relocating @g %g's %s to %c...\n"), /* xgettext:no-c-format */
-         PROMPT_NONE, PR_PREEN_OK },
+         PROMPT_NONE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Block read error during relocation process */
+       /* Warning: could not read block number of relocation process */
        { PR_1_RELOC_READ_ERR,
          N_("Warning: could not read @b %b of %s: %m\n"),
-         PROMPT_NONE, PR_PREEN_OK },
+         PROMPT_NONE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Block write error during relocation process */
+       /* Warning: could not write block number of relocation process */
        { PR_1_RELOC_WRITE_ERR,
          N_("Warning: could not write @b %b for %s: %m\n"),
-         PROMPT_NONE, PR_PREEN_OK },
+         PROMPT_NONE, PR_PREEN_OK, 0, 0, 0 },
 
        /* Error allocating inode bitmap */
        { PR_1_ALLOCATE_IBITMAP_ERROR,
          N_("@A @i @B (%N): %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error allocating block bitmap */
        { PR_1_ALLOCATE_BBITMAP_ERROR,
          N_("@A @b @B (%N): %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error allocating icount link information */
        { PR_1_ALLOCATE_ICOUNT,
+         /* xgettext:no-c-format */
          N_("@A icount link information: %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error allocating directory block array */
        { PR_1_ALLOCATE_DBCOUNT,
+         /* xgettext:no-c-format */
          N_("@A @d @b array: %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error while scanning inodes */
        { PR_1_ISCAN_ERROR,
+         /* xgettext:no-c-format */
          N_("Error while scanning @is (%i): %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
-       /* Error while iterating over blocks */
+       /* Error while iterating over blocks in inode */
        { PR_1_BLOCK_ITERATE,
+         /* xgettext:no-c-format */
          N_("Error while iterating over @bs in @i %i: %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
-       /* Error while storing inode count information */
+       /* Error storing inode count information */
        { PR_1_ICOUNT_STORE,
          N_("Error storing @i count information (@i=%i, count=%N): %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
-       /* Error while storing directory block information */
+       /* Error storing directory block information */
        { PR_1_ADD_DBLOCK,
          N_("Error storing @d @b information "
          "(@i=%i, @b=%b, num=%N): %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
-       /* Error while reading inode (for clearing) */
+       /* Error reading inode (for clearing) */
        { PR_1_READ_INODE,
+         /* xgettext:no-c-format */
          N_("Error reading @i %i: %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Suppress messages prompt */
-       { PR_1_SUPPRESS_MESSAGES, "", PROMPT_SUPPRESS, PR_NO_OK },
+       { PR_1_SUPPRESS_MESSAGES, "", PROMPT_SUPPRESS, PR_NO_OK, 0, 0, 0 },
 
-       /* Imagic flag set on an inode when filesystem doesn't support it */
+       /* Imagic number has imagic flag set when fs doesn't support it */
        { PR_1_SET_IMAGIC,
+         /* xgettext:no-c-format */
          N_("@i %i has imagic flag set.  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Immutable flag set on a device or socket inode */
        { PR_1_SET_IMMUTABLE,
+         /* xgettext:no-c-format */
          N_("Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
             "or append-only flag set.  "),
-         PROMPT_CLEAR, PR_PREEN_OK | PR_PREEN_NO | PR_NO_OK },
+         PROMPT_CLEAR, PR_PREEN_OK | PR_PREEN_NO | PR_NO_OK, 0, 0, 0 },
 
        /* Non-zero size for device, fifo or socket inode */
        { PR_1_SET_NONZSIZE,
+         /* xgettext:no-c-format */
          N_("Special (@v/socket/fifo) @i %i has non-zero size.  "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Filesystem revision is 0, but feature flags are set */
+       /* Filesystem has feature flag(s) set, but is a revision 0 filesystem */
        { PR_1_FS_REV_LEVEL,
          N_("@f has feature flag(s) set, but is a revision 0 @f.  "),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
        /* Journal inode is not in use, but contains data */
        { PR_1_JOURNAL_INODE_NOT_CLEAR,
          N_("@j @i is not in use, but contains data.  "),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Journal has bad mode */
+       /* Journal is not a regular file */
        { PR_1_JOURNAL_BAD_MODE,
          N_("@j is not regular file.  "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Deal with inodes that were part of orphan linked list */
+       /* Inode that was part of the orphan list */
        { PR_1_LOW_DTIME,
+         /* xgettext:no-c-format */
          N_("@i %i was part of the @o @i list.  "),
-         PROMPT_FIX, PR_LATCH_LOW_DTIME, 0 },
+         PROMPT_FIX, PR_LATCH_LOW_DTIME, 0, 0, 0 },
 
-       /* Deal with inodes that were part of corrupted orphan linked
-          list (latch question) */
+       /* Inodes that were part of a corrupted orphan linked list found
+        * (latch question) */
        { PR_1_ORPHAN_LIST_REFUGEES,
          N_("@is that were part of a corrupted orphan linked list found.  "),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Error allocating refcount structure */
        { PR_1_ALLOCATE_REFCOUNT,
          N_("@A refcount structure (%N): %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error reading extended attribute block */
        { PR_1_READ_EA_BLOCK,
          N_("Error reading @a @b %b for @i %i.  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Invalid extended attribute block */
+       /* Inode number has a bad extended attribute block */
        { PR_1_BAD_EA_BLOCK,
          N_("@i %i has a bad @a @b %b.  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Error reading Extended Attribute block while fixing refcount */
        { PR_1_EXTATTR_READ_ABORT,
          N_("Error reading @a @b %b (%m).  "),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
-       /* Extended attribute reference count incorrect */
+       /* Extended attribute number has reference count incorrect */
        { PR_1_EXTATTR_REFCOUNT,
          N_("@a @b %b has reference count %r, @s %N.  "),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Error writing Extended Attribute block while fixing refcount */
        { PR_1_EXTATTR_WRITE_ABORT,
          N_("Error writing @a @b %b (%m).  "),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
-       /* Multiple EA blocks not supported */
+       /* Extended attribute block has h_blocks > 1 */
        { PR_1_EA_MULTI_BLOCK,
          N_("@a @b %b has h_@bs > 1.  "),
-         PROMPT_CLEAR, 0},
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Error allocating EA region allocation structure */
+       /* Allocating extended attribute region allocation structure */
        { PR_1_EA_ALLOC_REGION_ABORT,
          N_("@A @a region allocation structure.  "),
-         PROMPT_NONE, PR_FATAL},
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
-       /* Error EA allocation collision */
+       /* Extended Attribute block number is corrupt (allocation collision) */
        { PR_1_EA_ALLOC_COLLISION,
          N_("@a @b %b is corrupt (allocation collision).  "),
-         PROMPT_CLEAR, 0},
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Bad extended attribute name */
+       /* Extended attribute block number is corrupt (invalid name) */
        { PR_1_EA_BAD_NAME,
          N_("@a @b %b is corrupt (@n name).  "),
-         PROMPT_CLEAR, 0},
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Bad extended attribute value */
+       /* Extended attribute block number is corrupt (invalid value) */
        { PR_1_EA_BAD_VALUE,
          N_("@a @b %b is corrupt (@n value).  "),
-         PROMPT_CLEAR, 0},
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Inode too big (latch question) */
+       /* Inode number is too big (latch question) */
        { PR_1_INODE_TOOBIG,
-         N_("@i %i is too big.  "), PROMPT_TRUNCATE, 0 },
+         /* xgettext:no-c-format */
+         N_("@i %i is too big.  "), PROMPT_TRUNCATE, 0, 0, 0, 0 },
 
-       /* Directory too big */
+       /* Problem causes directory to be too big */
        { PR_1_TOOBIG_DIR,
          N_("%B (%b) causes @d to be too big.  "),
-         PROMPT_CLEAR, PR_LATCH_TOOBIG },
+         PROMPT_CLEAR, PR_LATCH_TOOBIG, 0, 0, 0 },
 
-       /* Regular file too big */
+       /* Problem causes file to be too big */
        { PR_1_TOOBIG_REG,
          N_("%B (%b) causes file to be too big.  "),
-         PROMPT_CLEAR, PR_LATCH_TOOBIG },
+         PROMPT_CLEAR, PR_LATCH_TOOBIG, 0, 0, 0 },
 
-       /* Symlink too big */
+       /* Problem causes symlink to be too big */
        { PR_1_TOOBIG_SYMLINK,
          N_("%B (%b) causes symlink to be too big.  "),
-         PROMPT_CLEAR, PR_LATCH_TOOBIG },
+         PROMPT_CLEAR, PR_LATCH_TOOBIG, 0, 0, 0 },
 
-       /* INDEX_FL flag set on a non-HTREE filesystem */
+       /* Inode has INDEX_FL flag set on filesystem without htree support  */
        { PR_1_HTREE_SET,
+         /* xgettext:no-c-format */
          N_("@i %i has INDEX_FL flag set on @f without htree support.\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* INDEX_FL flag set on a non-directory */
+       /* Inode number has INDEX_FL flag set but is on a directory */
        { PR_1_HTREE_NODIR,
+         /* xgettext:no-c-format */
          N_("@i %i has INDEX_FL flag set but is not a @d.\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Invalid root node in HTREE directory */
+       /* htree directory has an invalid root node */
        { PR_1_HTREE_BADROOT,
+         /* xgettext:no-c-format */
          N_("@h %i has an @n root node.\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Unsupported hash version in HTREE directory */
+       /* Htree directory has an unsupported hash version */
        { PR_1_HTREE_HASHV,
          N_("@h %i has an unsupported hash version (%N)\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Incompatible flag in HTREE root node */
+       /* Htree directory uses an Incompatible htree root node flag */
        { PR_1_HTREE_INCOMPAT,
+         /* xgettext:no-c-format */
          N_("@h %i uses an incompatible htree root node flag.\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* HTREE too deep */
+       /* Htree directory has a tree depth which is too big */
        { PR_1_HTREE_DEPTH,
          N_("@h %i has a tree depth (%N) which is too big\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Bad block has indirect block that conflicts with filesystem block */
+       /* Bad block inode has an indirect block number that conflicts with
+        * filesystem metadata */
        { PR_1_BB_FS_BLOCK,
          N_("Bad @b @i has an indirect @b (%b) that conflicts with\n"
             "@f metadata.  "),
-         PROMPT_CLEAR, PR_LATCH_BBLOCK },
+         PROMPT_CLEAR, PR_LATCH_BBLOCK, 0, 0, 0 },
 
-       /* Resize inode failed */
+       /* Resize inode (re)creation failed */
        { PR_1_RESIZE_INODE_CREATE,
+         /* xgettext:no-c-format */
          N_("Resize @i (re)creation failed: %m."),
-         PROMPT_CONTINUE, 0 },
+         PROMPT_CONTINUE, 0, 0, 0, 0 },
 
-       /* invalid inode->i_extra_isize */
+       /* inode has a extra size i_extra_isize which is invalid */
        { PR_1_EXTRA_ISIZE,
          N_("@i %i has a extra size (%IS) which is @n\n"),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* invalid ea entry->e_name_len */
+       /* Extended attribute in inode has a namelen which is invalid */
        { PR_1_ATTR_NAME_LEN,
          N_("@a in @i %i has a namelen (%N) which is @n\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* invalid ea entry->e_value_offs */
+       /* Extended attribute in inode has a value offset which is invalid */
        { PR_1_ATTR_VALUE_OFFSET,
          N_("@a in @i %i has a value offset (%N) which is @n\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* invalid ea entry->e_value_block */
+       /* extended attribute in inode has a value block which is invalid */
        { PR_1_ATTR_VALUE_BLOCK,
          N_("@a in @i %i has a value @b (%N) which is @n (must be 0)\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* invalid ea entry->e_value_size */
+       /* extended attribute in inode has a value size which is invalid */
        { PR_1_ATTR_VALUE_SIZE,
          N_("@a in @i %i has a value size (%N) which is @n\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* invalid ea entry->e_hash */
+       /* extended attribute in inode has a hash which is invalid */
        { PR_1_ATTR_HASH,
          N_("@a in @i %i has a hash (%N) which is @n\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* inode appears to be a directory */
+       /* inode is a type but it looks like it is really a directory */
        { PR_1_TREAT_AS_DIRECTORY,
          N_("@i %i is a %It but it looks like it is really a directory.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
-       /* Error while reading extent tree */
+       /* Error while reading extent tree in inode */
        { PR_1_READ_EXTENT,
+         /* xgettext:no-c-format */
          N_("Error while reading over @x tree in @i %i: %m\n"),
-         PROMPT_CLEAR_INODE, 0 },
+         PROMPT_CLEAR_INODE, 0, 0, 0, 0 },
 
-       /* Failure to iterate extents */
+       /* Failure to iterate extents in inode */
        { PR_1_EXTENT_ITERATE_FAILURE,
          N_("Failed to iterate extents in @i %i\n"
             "\t(op %s, blk %b, lblk %c): %m\n"),
-         PROMPT_CLEAR_INODE, 0 },
+         PROMPT_CLEAR_INODE, 0, 0, 0, 0 },
 
-       /* Bad starting block in extent */
+       /* Inode has an invalid extent starting block */
        { PR_1_EXTENT_BAD_START_BLK,
          N_("@i %i has an @n extent\n\t(logical @b %c, @n physical @b %b, len %N)\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Extent ends beyond filesystem */
+       /* Inode has an invalid extent that ends beyond filesystem */
        { PR_1_EXTENT_ENDS_BEYOND,
          N_("@i %i has an @n extent\n\t(logical @b %c, physical @b %b, @n len %N)\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* EXTENTS_FL flag set on a non-extents filesystem */
+       /* inode has EXTENTS_FL flag set on filesystem without extents support*/
        { PR_1_EXTENTS_SET,
+         /* xgettext:no-c-format */
          N_("@i %i has EXTENTS_FL flag set on @f without extents support.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* inode has extents, superblock missing INCOMPAT_EXTENTS feature */
+       /* inode is in extents format, but superblock is missing EXTENTS feature */
        { PR_1_EXTENT_FEATURE,
+         /* xgettext:no-c-format */
          N_("@i %i is in extent format, but @S is missing EXTENTS feature\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* inode missing EXTENTS_FL, but is an extent inode */
        { PR_1_UNSET_EXTENT_FL,
+         /* xgettext:no-c-format */
          N_("@i %i missing EXTENT_FL, but is in extents format\n"),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Fast symlink has EXTENTS_FL set */
        { PR_1_FAST_SYMLINK_EXTENT_FL,
+         /* xgettext:no-c-format */
          N_("Fast symlink %i has EXTENT_FL set.  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Extents are out of order */
        { PR_1_OUT_OF_ORDER_EXTENTS,
          N_("@i %i has out of order extents\n\t(@n logical @b %c, physical @b %b, len %N)\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        { PR_1_EXTENT_HEADER_INVALID,
          N_("@i %i has an invalid extent node (blk %b, lblk %c)\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Failed to convert subcluster bitmap */
+       /* Failed to convert subcluster block bitmap */
        { PR_1_CONVERT_SUBCLUSTER,
+         /* xgettext:no-c-format */
          N_("Error converting subcluster @b @B: %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
-       /* Quota inode has bad mode */
+       /* Quota inode is not a regular file */
        { PR_1_QUOTA_BAD_MODE,
-         N_("@q @i is not regular file.  "),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         N_("@q @i is not regular file.  "),
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
        /* Quota inode is not in use, but contains data */
        { PR_1_QUOTA_INODE_NOT_CLEAR,
          N_("@q @i is not in use, but contains data.  "),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Quota inode is user visible */
+       /* Quota inode is visible to the user */
        { PR_1_QUOTA_INODE_NOT_HIDDEN,
          N_("@q @i is visible to the user.  "),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Invalid bad inode */
+       /* The bad block inode looks invalid */
        { PR_1_INVALID_BAD_INODE,
          N_("The bad @b @i looks @n.  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Extent has zero length */
+       /* Extent has zero length extent */
        { PR_1_EXTENT_LENGTH_ZERO,
          N_("@i %i has zero length extent\n\t(@n logical @b %c, physical @b %b)\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* inode seems to contain garbage */
        { PR_1_INODE_IS_GARBAGE,
+         /* xgettext:no-c-format */
          N_("@i %i seems to contain garbage.  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* inode passes checks, but checksum does not match inode */
        { PR_1_INODE_ONLY_CSUM_INVALID,
+         /* xgettext:no-c-format */
          N_("@i %i passes checks, but checksum does not match @i.  "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Inode extended attribute is corrupt (allocation collision) */
        { PR_1_INODE_EA_ALLOC_COLLISION,
+         /* xgettext:no-c-format */
          N_("@i %i @a is corrupt (allocation collision).  "),
-         PROMPT_CLEAR, 0},
+         PROMPT_CLEAR, 0, 0, 0, 0},
 
        /*
         * Inode extent block passes checks, but checksum does not match
@@ -1017,7 +1089,7 @@ static struct e2fsck_problem problem_table[] = {
        { PR_1_EXTENT_ONLY_CSUM_INVALID,
          N_("@i %i extent block passes checks, but checksum does not match "
             "extent\n\t(logical @b %c, physical @b %b, len %N)\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /*
         * Inode extended attribute block passes checks, but checksum does not
@@ -1025,124 +1097,188 @@ static struct e2fsck_problem problem_table[] = {
         */
        { PR_1_EA_BLOCK_ONLY_CSUM_INVALID,
          N_("@i %i @a @b %b passes checks, but checksum does not match @b.  "),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
-       /*
-        * Interior extent node logical offset doesn't match first node below it
-        */
+       /* Interior extent node level number of inode doesn't first node down */
        { 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 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
-       /* Extent end is out of bounds for the tree */
+       /* Inode end of extent exceeds allowed value */
        { 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 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Inode has inline data, but superblock is missing INLINE_DATA feature. */
+       /* Inode has inline data, but superblock is missing INLINE_DATA feature */
        { PR_1_INLINE_DATA_FEATURE,
+         /* xgettext:no-c-format */
          N_("@i %i has inline data, but @S is missing INLINE_DATA feature\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* INLINE_DATA feature is set in a non-inline-data filesystem */
+       /* inode has INLINE_DATA_FL flag on filesystem without inline data */
        { PR_1_INLINE_DATA_SET,
+         /* xgettext:no-c-format */
          N_("@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /*
-        * Inode block conflicts with critical metadata, skipping
-        * block checks
+        * Inode block conflicts with critical metadata, skipping block checks
         */
        { PR_1_CRITICAL_METADATA_COLLISION,
+         /* xgettext:no-c-format */
          N_("@i %i block %b conflicts with critical metadata, skipping block checks.\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Directory inode block <block> should be at block <otherblock> */
        { PR_1_COLLAPSE_DBLOCK,
          N_("@d @i %i @b %b should be at @b %c.  "),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Extents/inlinedata flag set on a device or socket inode */
        { PR_1_UNINIT_DBLOCK,
+         /* xgettext:no-c-format */
          N_("@d @i %i has @x marked uninitialized at @b %c.  "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Inode logical block (physical block ) is misaligned. */
+       /* Inode logical block (physical block) violates cluster allocation */
        { PR_1_MISALIGNED_CLUSTER,
          N_("@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\nWill fix in pass 1B.\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Inode has INLINE_DATA_FL flag but extended attribute not found */
        { PR_1_INLINE_DATA_NO_ATTR,
+         /* xgettext:no-c-format */
          N_("@i %i has INLINE_DATA_FL flag but @a not found.  "),
-         PROMPT_TRUNCATE, 0 },
+         PROMPT_TRUNCATE, 0, 0, 0, 0 },
 
-       /* Extents/inlinedata flag set on a device or socket inode */
+       /* Special (device/socket/fifo) file (inode num) has extents
+        * or inline-data flag set */
        { PR_1_SPECIAL_EXTENTS_IDATA,
+         /* xgettext:no-c-format */
          N_("Special (@v/socket/fifo) file (@i %i) has extents\n"
             "or inline-data flag set.  "),
-         PROMPT_CLEAR, PR_PREEN_OK | PR_PREEN_NO | PR_NO_OK },
+         PROMPT_CLEAR, PR_PREEN_OK | PR_PREEN_NO | PR_NO_OK, 0, 0, 0 },
 
        /* Inode has extent header but inline data flag is set */
        { PR_1_CLEAR_INLINE_DATA_FOR_EXTENT,
+         /* xgettext:no-c-format */
          N_("@i %i has @x header but inline data flag is set.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Inode seems to have inline data but extent flag is set */
        { PR_1_CLEAR_EXTENT_FOR_INLINE_DATA,
+         /* xgettext:no-c-format */
          N_("@i %i seems to have inline data but @x flag is set.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Inode seems to have block map but inline data and extent flags set */
        { PR_1_CLEAR_EXTENT_INLINE_DATA_FLAGS,
+         /* xgettext:no-c-format */
          N_("@i %i seems to have @b map but inline data and @x flags set.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Inode has inline data and extent flags but i_block contains junk */
        { PR_1_CLEAR_EXTENT_INLINE_DATA_INODE,
+         /* xgettext:no-c-format */
          N_("@i %i has inline data and @x flags set but i_block contains junk.\n"),
-         PROMPT_CLEAR_INODE, 0 },
+         PROMPT_CLEAR_INODE, 0, 0, 0, 0 },
 
        /* Bad block list says the bad block list inode is bad */
        { PR_1_BADBLOCKS_IN_BADBLOCKS,
          N_("Bad block list says the bad block list @i is bad.  "),
-         PROMPT_CLEAR_INODE, 0 },
+         PROMPT_CLEAR_INODE, 0, 0, 0, 0 },
 
        /* Error allocating extent region allocation structure */
        { PR_1_EXTENT_ALLOC_REGION_ABORT,
          N_("@A @x region allocation structure.  "),
-         PROMPT_NONE, PR_FATAL},
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
-       /* Inode has a duplicate extent mapping */
+       /* Inode leaf has a duplicate extent mapping */
        { PR_1_EXTENT_COLLISION,
          N_("@i %i has a duplicate @x mapping\n\t(logical @b %c, @n physical @b %b, len %N)\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Error allocating memory for encrypted directory list */
-       { PR_1_ALLOCATE_ENCRYPTED_DIRLIST,
-         N_("@A memory for encrypted @d list\n"),
-         PROMPT_NONE, PR_FATAL },
+       /* Error allocating memory for encrypted inode list */
+       { PR_1_ALLOCATE_ENCRYPTED_INODE_LIST,
+         N_("@A %N bytes of memory for encrypted @i list\n"),
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Inode extent tree could be more shallow */
        { PR_1_EXTENT_BAD_MAX_DEPTH,
          N_("@i %i @x tree could be more shallow (%b; could be <= %c)\n"),
-         PROMPT_FIX, PR_NO_OK | PR_PREEN_NO | PR_PREEN_OK },
+         PROMPT_FIX, PR_NO_OK | PR_PREEN_NO | PR_PREEN_OK, 0, 0, 0 },
 
-       /* Inode extent tree could be more shallow */
+       /* inode num on bigalloc filesystem cannot be block mapped */
        { PR_1_NO_BIGALLOC_BLOCKMAP_FILES,
+         /* xgettext:no-c-format */
          N_("@i %i on bigalloc @f cannot be @b mapped.  "),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Inode has corrupt extent header */
        { PR_1_MISSING_EXTENT_HEADER,
+         /* xgettext:no-c-format */
          N_("@i %i has corrupt @x header.  "),
-         PROMPT_CLEAR_INODE, 0 },
+         PROMPT_CLEAR_INODE, 0, 0, 0, 0 },
 
        /* Timestamp(s) on inode beyond 2310-04-04 are likely pre-1970. */
        { PR_1_EA_TIME_OUT_OF_RANGE,
+         /* xgettext:no-c-format */
          N_("Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
+
+       /* Inode has illegal extended attribute value inode */
+       { PR_1_ATTR_VALUE_EA_INODE,
+         N_("@i %i has @I @a value @i %N.\n"),
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
+
+       /* Inode has invalid extended attribute. EA inode missing
+        * EA_INODE flag. */
+       { PR_1_ATTR_NO_EA_INODE_FL,
+         N_("@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"),
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
+
+       /* EA inode for parent inode missing EA_INODE flag. */
+       { PR_1_ATTR_SET_EA_INODE_FL,
+         N_("EA @i %N for parent @i %i missing EA_INODE flag.\n "),
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
+
+       /* Offer to clear uninitialized flag on an extent */
+       { PR_1_CLEAR_UNINIT_EXTENT,
+         /* xgettext:no-c-format */
+         N_("@i %i has @x marked uninitialized at @b %c (len %N).  "),
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
+
+       /* Casefold flag set on a non-directory */
+       { PR_1_CASEFOLD_NONDIR,
+         N_("@i %i has the casefold flag set but is not a directory.  "),
+         PROMPT_CLEAR_FLAG, 0, 0, 0, 0 },
+
+       /* Casefold flag set, but file system is missing the casefold feature */
+       { PR_1_CASEFOLD_FEATURE,
+         N_("@d %p has the casefold flag, but the\ncasefold feature is not enabled.  "),
+         PROMPT_CLEAR_FLAG, 0, 0, 0, 0 },
+
+       /* Inode has encrypt flag but no encryption extended attribute */
+       { PR_1_MISSING_ENCRYPTION_XATTR,
+         N_("@i %i has encrypt flag but no encryption @a.\n"),
+         PROMPT_CLEAR_FLAG, 0, 0, 0, 0 },
+
+       /* Encrypted inode has corrupt encryption extended attribute */
+       { PR_1_CORRUPT_ENCRYPTION_XATTR,
+         N_("Encrypted @i %i has corrupt encryption @a.\n"),
+         PROMPT_CLEAR_INODE, 0, 0, 0, 0 },
+
+       /* Htree directory should use SipHash but does not */
+       { PR_1_HTREE_NEEDS_SIPHASH,
+         N_("@h %i uses hash version (%N), but should use SipHash (6) \n"),
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
+
+       /* Htree directory uses SipHash but should not */
+       { PR_1_HTREE_CANNOT_SIPHASH,
+         N_("@h %i uses SipHash, but should not.  "),
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
+
 
        /* Pass 1b errors */
 
@@ -1150,881 +1286,973 @@ static struct e2fsck_problem problem_table[] = {
        { PR_1B_PASS_HEADER,
          N_("\nRunning additional passes to resolve @bs claimed by more than one @i...\n"
          "Pass 1B: Rescanning for @m @bs\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, PR_HEADER, 0, 0, 0 },
 
        /* Duplicate/bad block(s) header */
        { PR_1B_DUP_BLOCK_HEADER,
+         /* xgettext:no-c-format */
          N_("@m @b(s) in @i %i:"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Duplicate/bad block(s) in inode */
        { PR_1B_DUP_BLOCK,
          " %b",
-         PROMPT_NONE, PR_LATCH_DBLOCK | PR_PREEN_NOHDR },
+         PROMPT_NONE, PR_LATCH_DBLOCK | PR_PREEN_NOHDR, 0, 0, 0 },
 
        /* Duplicate/bad block(s) end */
        { PR_1B_DUP_BLOCK_END,
          "\n",
-         PROMPT_NONE, PR_PREEN_NOHDR },
+         PROMPT_NONE, PR_PREEN_NOHDR, 0, 0, 0 },
 
        /* Error while scanning inodes */
        { PR_1B_ISCAN_ERROR,
+         /* xgettext:no-c-format */
          N_("Error while scanning inodes (%i): %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error allocating inode bitmap */
        { PR_1B_ALLOCATE_IBITMAP_ERROR,
+         /* xgettext:no-c-format */
          N_("@A @i @B (@i_dup_map): %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error while iterating over blocks */
        { PR_1B_BLOCK_ITERATE,
+         /* xgettext:no-c-format */
          N_("Error while iterating over @bs in @i %i (%s): %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Error adjusting EA refcount */
        { PR_1B_ADJ_EA_REFCOUNT,
          N_("Error adjusting refcount for @a @b %b (@i %i): %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Duplicate/bad block range in inode */
        { PR_1B_DUP_RANGE,
          " %b--%c",
-         PROMPT_NONE, PR_LATCH_DBLOCK | PR_PREEN_NOHDR },
+         PROMPT_NONE, PR_LATCH_DBLOCK | PR_PREEN_NOHDR, 0, 0, 0 },
 
        /* Pass 1C: Scan directories for inodes with multiply-claimed blocks. */
        { PR_1C_PASS_HEADER,
          N_("Pass 1C: Scanning directories for @is with @m @bs\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, PR_HEADER, 0, 0, 0 },
 
 
        /* Pass 1D: Reconciling multiply-claimed blocks */
        { PR_1D_PASS_HEADER,
          N_("Pass 1D: Reconciling @m @bs\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, PR_HEADER, 0, 0, 0 },
 
        /* File has duplicate blocks */
        { PR_1D_DUP_FILE,
          N_("File %Q (@i #%i, mod time %IM) \n"
          "  has %r @m @b(s), shared with %N file(s):\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* List of files sharing duplicate blocks */
        { PR_1D_DUP_FILE_LIST,
          N_("\t%Q (@i #%i, mod time %IM)\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* File sharing blocks with filesystem metadata  */
        { PR_1D_SHARE_METADATA,
          N_("\t<@f metadata>\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Report of how many duplicate/bad inodes */
        { PR_1D_NUM_DUP_INODES,
          N_("(There are %N @is containing @m @bs.)\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Duplicated blocks already reassigned or cloned. */
        { PR_1D_DUP_BLOCKS_DEALT,
          N_("@m @bs already reassigned or cloned.\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Clone duplicate/bad blocks? */
        { PR_1D_CLONE_QUESTION,
-         "", PROMPT_CLONE, PR_NO_OK },
+         "", PROMPT_CLONE, PR_NO_OK, 0, 0, 0 },
 
        /* Delete file? */
        { PR_1D_DELETE_QUESTION,
-         "", PROMPT_DELETE, 0 },
+         "", PROMPT_DELETE, 0, 0, 0, 0 },
 
        /* Couldn't clone file (error) */
        { PR_1D_CLONE_ERROR,
-         N_("Couldn't clone file: %m\n"), PROMPT_NONE, 0 },
+         /* xgettext:no-c-format */
+         N_("Couldn't clone file: %m\n"), PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Pass 1E Extent tree optimization     */
 
        /* Pass 1E: Optimizing extent trees */
        { PR_1E_PASS_HEADER,
          N_("Pass 1E: Optimizing @x trees\n"),
-         PROMPT_NONE, PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_HEADER | PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Failed to optimize extent tree */
        { PR_1E_OPTIMIZE_EXT_ERR,
+         /* xgettext:no-c-format */
          N_("Failed to optimize @x tree %p (%i): %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Optimizing extent trees */
        { PR_1E_OPTIMIZE_EXT_HEADER,
          N_("Optimizing @x trees: "),
-         PROMPT_NONE, PR_MSG_ONLY },
+         PROMPT_NONE, PR_MSG_ONLY, 0, 0, 0 },
 
        /* Rebuilding extent tree %d */
        { PR_1E_OPTIMIZE_EXT,
          " %i",
-         PROMPT_NONE, PR_LATCH_OPTIMIZE_EXT | PR_PREEN_NOHDR},
+         PROMPT_NONE, PR_LATCH_OPTIMIZE_EXT | PR_PREEN_NOHDR, 0, 0, 0 },
 
        /* Rebuilding extent tree end */
        { PR_1E_OPTIMIZE_EXT_END,
          "\n",
-         PROMPT_NONE, PR_PREEN_NOHDR },
+         PROMPT_NONE, PR_PREEN_NOHDR, 0, 0, 0 },
 
        /* Internal error: extent tree depth too large */
        { PR_1E_MAX_EXTENT_TREE_DEPTH,
          N_("Internal error: max extent tree depth too large (%b; expected=%c).\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Inode extent tree could be shorter */
        { PR_1E_CAN_COLLAPSE_EXTENT_TREE,
          N_("@i %i @x tree (at level %b) could be shorter.  "),
-         PROMPT_FIX, PR_NO_OK | PR_PREEN_NO | PR_PREEN_OK },
+         PROMPT_OPTIMIZE, PR_NO_OK | PR_PREEN_NO | PR_PREEN_OK | PR_NOT_A_FIX, 0, 0, 0 },
 
        /* Inode extent tree could be narrower */
        { PR_1E_CAN_NARROW_EXTENT_TREE,
          N_("@i %i @x tree (at level %b) could be narrower.  "),
-         PROMPT_FIX, PR_NO_OK | PR_PREEN_NO | PR_PREEN_OK },
+         PROMPT_OPTIMIZE, PR_NO_OK | PR_PREEN_NO | PR_PREEN_OK | PR_NOT_A_FIX, 0, 0, 0 },
 
        /* Pass 2 errors */
 
        /* Pass 2: Checking directory structure */
        { PR_2_PASS_HEADER,
          N_("Pass 2: Checking @d structure\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, PR_HEADER, 0, 0, 0 },
 
        /* Bad inode number for '.' */
        { PR_2_BAD_INODE_DOT,
+         /* xgettext:no-c-format */
          N_("@n @i number for '.' in @d @i %i.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Entry 'xxxx' in /a/b/c has bad inode number.*/
        { PR_2_BAD_INO,
          N_("@E has @n @i #: %Di.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Entry 'xxxx' in /a/b/c has deleted/unused inode nnnnn.*/
        { PR_2_UNUSED_INODE,
          N_("@E has @D/unused @i %Di.  "),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
-       /* Directry entry is link to '.' */
+       /* Directory entry is link to '.' */
        { PR_2_LINK_DOT,
          N_("@E @L to '.'  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Directory entry points to inode now located in a bad block */
        { PR_2_BB_INODE,
          N_("@E points to @i (%Di) located in a bad @b.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Directory entry contains a link to a directory */
        { PR_2_LINK_DIR,
          N_("@E @L to @d %P (%Di).\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* Directory entry contains a link to the root directry */
+       /* Directory entry contains a link to the root directory */
        { PR_2_LINK_ROOT,
          N_("@E @L to the @r.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Directory entry has illegal characters in its name */
        { PR_2_BAD_NAME,
          N_("@E has illegal characters in its name.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Missing '.' in directory inode */
        { PR_2_MISSING_DOT,
+         /* xgettext:no-c-format */
          N_("Missing '.' in @d @i %i.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Missing '..' in directory inode */
        { PR_2_MISSING_DOT_DOT,
+         /* xgettext:no-c-format */
          N_("Missing '..' in @d @i %i.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* First entry in directory inode doesn't contain '.' */
        { PR_2_1ST_NOT_DOT,
          N_("First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Second entry in directory inode doesn't contain '..' */
        { PR_2_2ND_NOT_DOT_DOT,
          N_("Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* i_faddr should be zero */
        { PR_2_FADDR_ZERO,
          N_("i_faddr @F %IF, @s zero.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* i_file_acl should be zero */
        { PR_2_FILE_ACL_ZERO,
          N_("i_file_acl @F %If, @s zero.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
-       /* i_dir_acl should be zero */
-       { PR_2_DIR_ACL_ZERO,
-         N_("i_dir_acl @F %Id, @s zero.\n"),
-         PROMPT_CLEAR, 0 },
+       /* i_size_high should be zero */
+       { PR_2_DIR_SIZE_HIGH_ZERO,
+         N_("i_size_high @F %Id, @s zero.\n"),
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* i_frag should be zero */
        { PR_2_FRAG_ZERO,
          N_("i_frag @F %N, @s zero.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* i_fsize should be zero */
        { PR_2_FSIZE_ZERO,
          N_("i_fsize @F %N, @s zero.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* inode has bad mode */
        { PR_2_BAD_MODE,
          N_("@i %i (%Q) has @n mode (%Im).\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* directory corrupted */
        { PR_2_DIR_CORRUPTED,
          N_("@d @i %i, %B, offset %N: @d corrupted\n"),
-         PROMPT_SALVAGE, 0 },
+         PROMPT_SALVAGE, 0, 0, 0, 0 },
 
        /* filename too long */
        { PR_2_FILENAME_LONG,
          N_("@d @i %i, %B, offset %N: filename too long\n"),
-         PROMPT_TRUNCATE, 0 },
+         PROMPT_TRUNCATE, 0, 0, 0, 0 },
 
        /* Directory inode has a missing block (hole) */
        { PR_2_DIRECTORY_HOLE,
          N_("@d @i %i has an unallocated %B.  "),
-         PROMPT_ALLOCATE, 0 },
+         PROMPT_ALLOCATE, 0, 0, 0, 0 },
 
        /* '.' is not NULL terminated */
        { PR_2_DOT_NULL_TERM,
+         /* xgettext:no-c-format */
          N_("'.' @d @e in @d @i %i is not NULL terminated\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* '..' is not NULL terminated */
        { PR_2_DOT_DOT_NULL_TERM,
+         /* xgettext:no-c-format */
          N_("'..' @d @e in @d @i %i is not NULL terminated\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Illegal character device inode */
        { PR_2_BAD_CHAR_DEV,
          N_("@i %i (%Q) is an @I character @v.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Illegal block device inode */
        { PR_2_BAD_BLOCK_DEV,
          N_("@i %i (%Q) is an @I @b @v.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Duplicate '.' entry */
        { PR_2_DUP_DOT,
          N_("@E is duplicate '.' @e.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Duplicate '..' entry */
        { PR_2_DUP_DOT_DOT,
          N_("@E is duplicate '..' @e.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Internal error: couldn't find dir_info */
        { PR_2_NO_DIRINFO,
+         /* xgettext:no-c-format */
          N_("Internal error: couldn't find dir_info for %i.\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Final rec_len is wrong */
        { PR_2_FINAL_RECLEN,
          N_("@E has rec_len of %Dr, @s %N.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Error allocating icount structure */
        { PR_2_ALLOCATE_ICOUNT,
+         /* xgettext:no-c-format */
          N_("@A icount structure: %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error iterating over directory blocks */
        { PR_2_DBLIST_ITERATE,
+         /* xgettext:no-c-format */
          N_("Error iterating over @d @bs: %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error reading directory block */
        { PR_2_READ_DIRBLOCK,
          N_("Error reading @d @b %b (@i %i): %m\n"),
-         PROMPT_CONTINUE, 0 },
+         PROMPT_CONTINUE, 0, 0, 0, 0 },
 
        /* Error writing directory block */
        { PR_2_WRITE_DIRBLOCK,
          N_("Error writing @d @b %b (@i %i): %m\n"),
-         PROMPT_CONTINUE, 0 },
+         PROMPT_CONTINUE, 0, 0, 0, 0 },
 
        /* Error allocating new directory block */
        { PR_2_ALLOC_DIRBOCK,
+         /* xgettext:no-c-format */
          N_("@A new @d @b for @i %i (%s): %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Error deallocating inode */
        { PR_2_DEALLOC_INODE,
+         /* xgettext:no-c-format */
          N_("Error deallocating @i %i: %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Directory entry for '.' is big.  Split? */
        { PR_2_SPLIT_DOT,
+         /* xgettext:no-c-format */
          N_("@d @e for '.' in %p (%i) is big.\n"),
-         PROMPT_SPLIT, PR_NO_OK },
+         PROMPT_SPLIT, PR_NO_OK, 0, 0, 0 },
 
        /* Illegal FIFO inode */
        { PR_2_BAD_FIFO,
          N_("@i %i (%Q) is an @I FIFO.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Illegal socket inode */
        { PR_2_BAD_SOCKET,
          N_("@i %i (%Q) is an @I socket.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Directory filetype not set */
        { PR_2_SET_FILETYPE,
          N_("Setting filetype for @E to %N.\n"),
-         PROMPT_NONE, PR_PREEN_OK | PR_NO_OK | PR_NO_NOMSG },
+         PROMPT_NONE, PR_PREEN_OK | PR_NO_OK | PR_NO_NOMSG, 0, 0, 0 },
 
        /* Directory filetype incorrect */
        { PR_2_BAD_FILETYPE,
          N_("@E has an incorrect filetype (was %Dt, @s %N).\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Directory filetype set on filesystem */
        { PR_2_CLEAR_FILETYPE,
          N_("@E has filetype set.\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
        /* Directory filename is null */
        { PR_2_NULL_NAME,
          N_("@E has a @z name.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Invalid symlink */
        { PR_2_INVALID_SYMLINK,
          N_("Symlink %Q (@i #%i) is @n.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* i_file_acl (extended attribute block) is bad */
        { PR_2_FILE_ACL_BAD,
          N_("@a @b @F @n (%If).\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Filesystem contains large files, but has no such flag in sb */
        { PR_2_FEATURE_LARGE_FILES,
          N_("@f contains large files, but lacks LARGE_FILE flag in @S.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Node in HTREE directory not referenced */
        { PR_2_HTREE_NOTREF,
          N_("@p @h %d: %B not referenced\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Node in HTREE directory referenced twice */
        { PR_2_HTREE_DUPREF,
          N_("@p @h %d: %B referenced twice\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Node in HTREE directory has bad min hash */
        { PR_2_HTREE_MIN_HASH,
          N_("@p @h %d: %B has bad min hash\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Node in HTREE directory has bad max hash */
        { PR_2_HTREE_MAX_HASH,
          N_("@p @h %d: %B has bad max hash\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Clear invalid HTREE directory */
        { PR_2_HTREE_CLEAR,
-         N_("@n @h %d (%q).  "), PROMPT_CLEAR_HTREE, 0 },
+         N_("@n @h %d (%q).  "), PROMPT_CLEAR_HTREE, 0, 0, 0, 0 },
 
        /* Bad block in htree interior node */
        { PR_2_HTREE_BADBLK,
          N_("@p @h %d (%q): bad @b number %b.\n"),
-         PROMPT_CLEAR_HTREE, 0 },
+         PROMPT_CLEAR_HTREE, 0, 0, 0, 0 },
 
        /* Error adjusting EA refcount */
        { PR_2_ADJ_EA_REFCOUNT,
          N_("Error adjusting refcount for @a @b %b (@i %i): %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Invalid HTREE root node */
        { PR_2_HTREE_BAD_ROOT,
+         /* xgettext:no-c-format */
          N_("@p @h %d: root node is @n\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
        /* Invalid HTREE limit */
        { PR_2_HTREE_BAD_LIMIT,
          N_("@p @h %d: %B has @n limit (%N)\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
        /* Invalid HTREE count */
        { PR_2_HTREE_BAD_COUNT,
          N_("@p @h %d: %B has @n count (%N)\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
        /* HTREE interior node has out-of-order hashes in table */
        { PR_2_HTREE_HASH_ORDER,
          N_("@p @h %d: %B has an unordered hash table\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
        /* Node in HTREE directory has invalid depth */
        { PR_2_HTREE_BAD_DEPTH,
          N_("@p @h %d: %B has @n depth (%N)\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Duplicate directory entry found */
        { PR_2_DUPLICATE_DIRENT,
          N_("Duplicate @E found.  "),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Non-unique filename found */
        { PR_2_NON_UNIQUE_FILE, /* xgettext: no-c-format */
          N_("@E has a non-unique filename.\nRename to %s"),
-         PROMPT_NULL, 0 },
+         PROMPT_NULL, 0, 0, 0, 0 },
 
        /* Duplicate directory entry found */
        { PR_2_REPORT_DUP_DIRENT,
          N_("Duplicate @e '%Dn' found.\n\tMarking %p (%i) to be rebuilt.\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* i_blocks_hi should be zero */
        { PR_2_BLOCKS_HI_ZERO,
          N_("i_blocks_hi @F %N, @s zero.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Unexpected HTREE block */
        { PR_2_UNEXPECTED_HTREE_BLOCK,
-         N_("Unexpected @b in @h %d (%q).\n"), PROMPT_CLEAR_HTREE, 0 },
+         N_("Unexpected @b in @h %d (%q).\n"), PROMPT_CLEAR_HTREE, 0,
+         0, 0, 0 },
 
        /* Inode found in group where _INODE_UNINIT is set */
        { PR_2_INOREF_BG_INO_UNINIT,
          N_("@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Inode found in group unused inodes area */
        { PR_2_INOREF_IN_UNUSED,
          N_("@E references @i %Di found in @g %g's unused inodes area.\n"),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* i_blocks_hi should be zero */
        { PR_2_I_FILE_ACL_HI_ZERO,
          N_("i_file_acl_hi @F %N, @s zero.\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
+         PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 },
 
        /* htree root node fails checksum */
        { PR_2_HTREE_ROOT_CSUM_INVALID,
+         /* xgettext:no-c-format */
          N_("@p @h %d: root node fails checksum.\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
        /* htree internal node fails checksum */
        { PR_2_HTREE_NODE_CSUM_INVALID,
+         /* xgettext:no-c-format */
          N_("@p @h %d: internal node fails checksum.\n"),
-         PROMPT_CLEAR_HTREE, PR_PREEN_OK },
+         PROMPT_CLEAR_HTREE, PR_PREEN_OK, 0, 0, 0 },
 
        /* leaf node has no checksum */
        { PR_2_LEAF_NODE_MISSING_CSUM,
          N_("@d @i %i, %B, offset %N: @d has no checksum.\n"),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* leaf node passes checks but fails checksum */
        { PR_2_LEAF_NODE_ONLY_CSUM_INVALID,
          N_("@d @i %i, %B: @d passes checks but fails checksum.\n"),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* inline directory inode size must be a multiple of 4 */
        { PR_2_BAD_INLINE_DIR_SIZE,
          N_("Inline @d @i %i size (%N) must be a multiple of 4.\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* fixing size of inline directory inode failed */
        { PR_2_FIX_INLINE_DIR_FAILED,
+         /* xgettext:no-c-format */
          N_("Fixing size of inline @d @i %i failed.\n"),
-         PROMPT_TRUNCATE, 0 },
+         PROMPT_TRUNCATE, 0, 0, 0, 0 },
 
        /* Encrypted directory entry is too short */
        { PR_2_BAD_ENCRYPTED_NAME,
          N_("Encrypted @E is too short.\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
+
+       /* Encrypted directory contains unencrypted file */
+       { PR_2_UNENCRYPTED_FILE,
+         N_("Encrypted @E references unencrypted @i %Di.\n"),
+         PROMPT_CLEAR, 0, 0, 0, 0 },
+
+       /* Encrypted directory contains file with different encryption policy */
+       { PR_2_INCONSISTENT_ENCRYPTION_POLICY,
+         N_("Encrypted @E references @i %Di, which has a different encryption policy.\n"),
+         PROMPT_CLEAR, 0, 0, 0, 0 },
+
+       /* Casefolded directory entry has illegal characters in its name */
+       { PR_2_BAD_ENCODED_NAME,
+         N_("@E has illegal UTF-8 characters in its name.\n"),
+         PROMPT_FIX, 0, 0, 0, 0 },
+
+        /* Non-unique filename found, but can't rename */
+        { PR_2_NON_UNIQUE_FILE_NO_RENAME,
+          N_("Duplicate filename @E found.  "),
+          PROMPT_CLEAR, 0, 0, 0, 0 },
+
 
        /* Pass 3 errors */
 
        /* Pass 3: Checking directory connectivity */
        { PR_3_PASS_HEADER,
          N_("Pass 3: Checking @d connectivity\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, PR_HEADER, 0, 0, 0 },
 
        /* Root inode not allocated */
        { PR_3_NO_ROOT_INODE,
          N_("@r not allocated.  "),
-         PROMPT_ALLOCATE, 0 },
+         PROMPT_ALLOCATE, 0, 0, 0, 0 },
 
        /* No room in lost+found */
        { PR_3_EXPAND_LF_DIR,
          N_("No room in @l @d.  "),
-         PROMPT_EXPAND, 0 },
+         PROMPT_EXPAND, 0, 0, 0, 0 },
 
        /* Unconnected directory inode */
        { PR_3_UNCONNECTED_DIR,
+         /* xgettext:no-c-format */
          N_("Unconnected @d @i %i (%p)\n"),
-         PROMPT_CONNECT, 0 },
+         PROMPT_CONNECT, 0, 0, 0, 0 },
 
        /* /lost+found not found */
        { PR_3_NO_LF_DIR,
          N_("/@l not found.  "),
-         PROMPT_CREATE, PR_PREEN_OK },
+         PROMPT_CREATE, PR_PREEN_OK, 0, 0, 0 },
 
        /* .. entry is incorrect */
        { PR_3_BAD_DOT_DOT,
          N_("'..' in %Q (%i) is %P (%j), @s %q (%d).\n"),
-         PROMPT_FIX, 0 },
+         PROMPT_FIX, 0, 0, 0, 0 },
 
        /* Bad or non-existent /lost+found.  Cannot reconnect */
        { PR_3_NO_LPF,
+         /* xgettext:no-c-format */
          N_("Bad or non-existent /@l.  Cannot reconnect.\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Could not expand /lost+found */
        { PR_3_CANT_EXPAND_LPF,
+         /* xgettext:no-c-format */
          N_("Could not expand /@l: %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Could not reconnect inode */
        { PR_3_CANT_RECONNECT,
+         /* xgettext:no-c-format */
          N_("Could not reconnect %i: %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Error while trying to find /lost+found */
        { PR_3_ERR_FIND_LPF,
+         /* xgettext:no-c-format */
          N_("Error while trying to find /@l: %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Error in ext2fs_new_block while creating /lost+found */
        { PR_3_ERR_LPF_NEW_BLOCK,
+         /* xgettext:no-c-format */
          N_("ext2fs_new_@b: %m while trying to create /@l @d\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Error in ext2fs_new_inode while creating /lost+found */
        { PR_3_ERR_LPF_NEW_INODE,
+         /* xgettext:no-c-format */
          N_("ext2fs_new_@i: %m while trying to create /@l @d\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Error in ext2fs_new_dir_block while creating /lost+found */
        { PR_3_ERR_LPF_NEW_DIR_BLOCK,
+         /* xgettext:no-c-format */
          N_("ext2fs_new_dir_@b: %m while creating new @d @b\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Error while writing directory block for /lost+found */
        { PR_3_ERR_LPF_WRITE_BLOCK,
+         /* xgettext:no-c-format */
          N_("ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Error while adjusting inode count */
        { PR_3_ADJUST_INODE,
+         /* xgettext:no-c-format */
          N_("Error while adjusting @i count on @i %i\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Couldn't fix parent directory -- error */
        { PR_3_FIX_PARENT_ERR,
+         /* xgettext:no-c-format */
          N_("Couldn't fix parent of @i %i: %m\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Couldn't fix parent directory -- couldn't find it */
        { PR_3_FIX_PARENT_NOFIND,
+         /* xgettext:no-c-format */
          N_("Couldn't fix parent of @i %i: Couldn't find parent @d @e\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Error allocating inode bitmap */
        { PR_3_ALLOCATE_IBITMAP_ERROR,
          N_("@A @i @B (%N): %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error creating root directory */
        { PR_3_CREATE_ROOT_ERROR,
+         /* xgettext:no-c-format */
          N_("Error creating root @d (%s): %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error creating lost and found directory */
        { PR_3_CREATE_LPF_ERROR,
+         /* xgettext:no-c-format */
          N_("Error creating /@l @d (%s): %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Root inode is not directory; aborting */
        { PR_3_ROOT_NOT_DIR_ABORT,
          N_("@r is not a @d; aborting.\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Cannot proceed without a root inode. */
        { PR_3_NO_ROOT_INODE_ABORT,
          N_("Cannot proceed without a @r.\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Internal error: couldn't find dir_info */
        { PR_3_NO_DIRINFO,
          N_("Internal error: couldn't find dir_info for %i.\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Lost+found not a directory */
        { PR_3_LPF_NOTDIR,
+         /* xgettext:no-c-format */
          N_("/@l is not a @d (ino=%i)\n"),
-         PROMPT_UNLINK, 0 },
+         PROMPT_UNLINK, 0, 0, 0, 0 },
 
        /* Lost+found has inline data */
        { PR_3_LPF_INLINE_DATA,
          N_("/@l has inline data\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Cannot allocate /lost+found. */
        { PR_3_LPF_NO_SPACE,
          N_("Cannot allocate space for /@l.\nPlace lost files in root directory instead"),
-         PROMPT_NULL, 0 },
+         PROMPT_NULL, 0, 0, 0, 0 },
 
        /* Delete some files and re-run e2fsck. */
        { PR_3_NO_SPACE_TO_RECOVER,
          N_("Insufficient space to recover lost files!\nMove data off the @f and re-run e2fsck.\n\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Lost+found is encrypted */
        { PR_3_LPF_ENCRYPTED,
          N_("/@l is encrypted\n"),
-         PROMPT_CLEAR, 0 },
+         PROMPT_CLEAR, 0, 0, 0, 0 },
 
        /* Pass 3A Directory Optimization       */
 
        /* Pass 3A: Optimizing directories */
        { PR_3A_PASS_HEADER,
          N_("Pass 3A: Optimizing directories\n"),
-         PROMPT_NONE, PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_HEADER | PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Error iterating over directories */
        { PR_3A_OPTIMIZE_ITER,
+         /* xgettext:no-c-format */
          N_("Failed to create dirs_to_hash iterator: %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Error rehash directory */
        { PR_3A_OPTIMIZE_DIR_ERR,
          N_("Failed to optimize directory %q (%d): %m\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
 
        /* Rehashing dir header */
        { PR_3A_OPTIMIZE_DIR_HEADER,
          N_("Optimizing directories: "),
-         PROMPT_NONE, PR_MSG_ONLY },
+         PROMPT_NONE, PR_MSG_ONLY, 0, 0, 0 },
 
        /* Rehashing directory %d */
        { PR_3A_OPTIMIZE_DIR,
          " %d",
-         PROMPT_NONE, PR_LATCH_OPTIMIZE_DIR | PR_PREEN_NOHDR},
+         PROMPT_NONE, PR_LATCH_OPTIMIZE_DIR | PR_PREEN_NOHDR, 0, 0, 0 },
 
        /* Rehashing dir end */
        { PR_3A_OPTIMIZE_DIR_END,
          "\n",
-         PROMPT_NONE, PR_PREEN_NOHDR },
+         PROMPT_NONE, PR_PREEN_NOHDR, 0, 0, 0 },
 
        /* Pass 4 errors */
 
        /* Pass 4: Checking reference counts */
        { PR_4_PASS_HEADER,
          N_("Pass 4: Checking reference counts\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, PR_HEADER, 0, 0, 0 },
 
        /* Unattached zero-length inode */
        { PR_4_ZERO_LEN_INODE,
+         /* xgettext:no-c-format */
          N_("@u @z @i %i.  "),
-         PROMPT_CLEAR, PR_PREEN_OK|PR_NO_OK },
+         PROMPT_CLEAR, PR_PREEN_OK|PR_NO_OK, 0, 0, 0 },
 
        /* Unattached inode */
        { PR_4_UNATTACHED_INODE,
+         /* xgettext:no-c-format */
          N_("@u @i %i\n"),
-         PROMPT_CONNECT, 0 },
+         PROMPT_CONNECT, 0, 0, 0, 0 },
 
        /* Inode ref count wrong */
        { PR_4_BAD_REF_COUNT,
          N_("@i %i ref count is %Il, @s %N.  "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        { PR_4_INCONSISTENT_COUNT,
          N_("WARNING: PROGRAMMING BUG IN E2FSCK!\n"
          "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
          "@i_link_info[%i] is %N, @i.i_links_count is %Il.  "
          "They @s the same!\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, 0, 0, 0, 0 },
+
+       { PR_4_EA_INODE_REF_COUNT,
+         N_("@a @i %i ref count is %N, @s %n. "),
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
+
+       /* directory exceeds max links, but no DIR_NLINK feature in superblock*/
+       { PR_4_DIR_NLINK_FEATURE,
+         N_("@d exceeds max links, but no DIR_NLINK feature in @S.\n"),
+         PROMPT_FIX, 0, 0, 0, 0 },
+
+       /* Directory inode ref count set to overflow but could be exact value */
+       { PR_4_DIR_OVERFLOW_REF_COUNT,
+         N_("@d @i %i ref count set to overflow but could be exact value %N.  "),
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Pass 5 errors */
 
        /* Pass 5: Checking group summary information */
        { PR_5_PASS_HEADER,
          N_("Pass 5: Checking @g summary information\n"),
-         PROMPT_NONE, 0 },
+         PROMPT_NONE, PR_HEADER, 0, 0, 0 },
 
        /* Padding at end of inode bitmap is not set. */
        { PR_5_INODE_BMAP_PADDING,
          N_("Padding at end of @i @B is not set. "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Padding at end of block bitmap is not set. */
        { PR_5_BLOCK_BMAP_PADDING,
          N_("Padding at end of @b @B is not set. "),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Block bitmap differences header */
        { PR_5_BLOCK_BITMAP_HEADER,
          N_("@b @B differences: "),
-         PROMPT_NONE, PR_PREEN_OK | PR_PREEN_NOMSG},
+         PROMPT_NONE, PR_PREEN_OK | PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Block not used, but marked in bitmap */
        { PR_5_BLOCK_UNUSED,
          " -%b",
-         PROMPT_NONE, PR_LATCH_BBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_LATCH_BBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG,
+         0, 0, 0 },
 
        /* Block used, but not marked used in bitmap */
        { PR_5_BLOCK_USED,
          " +%b",
-         PROMPT_NONE, PR_LATCH_BBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_LATCH_BBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG,
+         0, 0, 0 },
 
        /* Block bitmap differences end */
        { PR_5_BLOCK_BITMAP_END,
          "\n",
-         PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Inode bitmap differences header */
        { PR_5_INODE_BITMAP_HEADER,
          N_("@i @B differences: "),
-         PROMPT_NONE, PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_PREEN_OK | PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Inode not used, but marked in bitmap */
        { PR_5_INODE_UNUSED,
          " -%i",
-         PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG,
+         0, 0, 0 },
 
        /* Inode used, but not marked used in bitmap */
        { PR_5_INODE_USED,
          " +%i",
-         PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG,
+         0, 0, 0 },
 
        /* Inode bitmap differences end */
        { PR_5_INODE_BITMAP_END,
          "\n",
-         PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Free inodes count for group wrong */
        { PR_5_FREE_INODE_COUNT_GROUP,
          N_("Free @is count wrong for @g #%g (%i, counted=%j).\n"),
-         PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Directories count for group wrong */
        { PR_5_FREE_DIR_COUNT_GROUP,
          N_("Directories count wrong for @g #%g (%i, counted=%j).\n"),
-         PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Free inodes count wrong */
        { PR_5_FREE_INODE_COUNT,
          N_("Free @is count wrong (%i, counted=%j).\n"),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK | PR_PREEN_NOMSG },
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK | PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Free blocks count for group wrong */
        { PR_5_FREE_BLOCK_COUNT_GROUP,
          N_("Free @bs count wrong for @g #%g (%b, counted=%c).\n"),
-         PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Free blocks count wrong */
        { PR_5_FREE_BLOCK_COUNT,
          N_("Free @bs count wrong (%b, counted=%c).\n"),
-         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK | PR_PREEN_NOMSG },
+         PROMPT_FIX, PR_PREEN_OK | PR_NO_OK | PR_PREEN_NOMSG, 0, 0, 0 },
 
        /* Programming error: bitmap endpoints don't match */
        { PR_5_BMAP_ENDPOINTS,
          N_("PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't "
          "match calculated @B endpoints (%i, %j)\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Internal error: fudging end of bitmap */
        { PR_5_FUDGE_BITMAP_ERROR,
          N_("Internal error: fudging end of bitmap (%N)\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error copying in replacement inode bitmap */
        { PR_5_COPY_IBITMAP_ERROR,
+         /* xgettext:no-c-format */
          N_("Error copying in replacement @i @B: %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Error copying in replacement block bitmap */
        { PR_5_COPY_BBITMAP_ERROR,
+         /* xgettext:no-c-format */
          N_("Error copying in replacement @b @B: %m\n"),
-         PROMPT_NONE, PR_FATAL },
+         PROMPT_NONE, PR_FATAL, 0, 0, 0 },
 
        /* Block range not used, but marked in bitmap */
        { PR_5_BLOCK_RANGE_UNUSED,
          " -(%b--%c)",
-         PROMPT_NONE, PR_LATCH_BBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_LATCH_BBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG,
+         0, 0, 0 },
 
        /* Block range used, but not marked used in bitmap */
        { PR_5_BLOCK_RANGE_USED,
          " +(%b--%c)",
-         PROMPT_NONE, PR_LATCH_BBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_LATCH_BBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG,
+         0, 0, 0 },
 
        /* Inode range not used, but marked in bitmap */
        { PR_5_INODE_RANGE_UNUSED,
          " -(%i--%j)",
-         PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG,
+         0, 0, 0 },
 
        /* Inode range used, but not marked used in bitmap */
        { PR_5_INODE_RANGE_USED,
          " +(%i--%j)",
-         PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
+         PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG,
+         0, 0, 0 },
 
        /* Group N block(s) in use but group is marked BLOCK_UNINIT */
        { PR_5_BLOCK_UNINIT,
+         /* xgettext:no-c-format */
          N_("@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Group N inode(s) in use but group is marked INODE_UNINIT */
        { PR_5_INODE_UNINIT,
+         /* xgettext:no-c-format */
          N_("@g %g @i(s) in use but @g is marked INODE_UNINIT\n"),
-         PROMPT_FIX, PR_PREEN_OK },
+         PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 },
 
        /* Group N inode bitmap does not match checksum */
        { PR_5_INODE_BITMAP_CSUM_INVALID,
+         /* xgettext:no-c-format */
          N_("@g %g @i @B does not match checksum.\n"),
-         PROMPT_FIX, PR_LATCH_IBITMAP | PR_PREEN_OK },
+         PROMPT_FIX, PR_LATCH_IBITMAP | PR_PREEN_OK, 0, 0, 0 },
 
        /* Group N block bitmap does not match checksum */
        { PR_5_BLOCK_BITMAP_CSUM_INVALID,
+         /* xgettext:no-c-format */
          N_("@g %g @b @B does not match checksum.\n"),
-         PROMPT_FIX, PR_LATCH_BBITMAP | PR_PREEN_OK },
+         PROMPT_FIX, PR_LATCH_BBITMAP | PR_PREEN_OK, 0, 0, 0 },
 
        /* Post-Pass 5 errors */
 
        /* Recreate journal if E2F_FLAG_JOURNAL_INODE flag is set */
        { PR_6_RECREATE_JOURNAL,
          N_("Recreate @j"),
-         PROMPT_NULL, PR_PREEN_OK | PR_NO_OK },
+         PROMPT_NULL, PR_PREEN_OK | PR_NO_OK, 0, 0, 0 },
 
        /* Update quota information if it is inconsistent */
        { PR_6_UPDATE_QUOTAS,
          N_("Update quota info for quota type %N"),
-         PROMPT_NULL, PR_PREEN_OK },
+         PROMPT_NULL, PR_PREEN_OK, 0, 0, 0 },
 
        /* Error setting block group checksum info */
        { PR_6_SET_BG_CHECKSUM,
+         /* xgettext:no-c-format */
          N_("Error setting @b @g checksum info: %m\n"),
-         PROMPT_NULL, PR_FATAL },
+         PROMPT_NULL, PR_FATAL, 0, 0, 0 },
 
        /* Error writing file system info */
        { PR_6_FLUSH_FILESYSTEM,
+         /* xgettext:no-c-format */
          N_("Error writing file system info: %m\n"),
-         PROMPT_NULL, PR_FATAL },
+         PROMPT_NULL, PR_FATAL, 0, 0, 0 },
 
        /* Error flushing writes to storage device */
        { PR_6_IO_FLUSH,
+         /* xgettext:no-c-format */
          N_("Error flushing writes to storage device: %m\n"),
-         PROMPT_NULL, PR_FATAL },
+         PROMPT_NULL, PR_FATAL, 0, 0, 0 },
 
        /* Error writing quota information */
        { PR_6_WRITE_QUOTAS,
          N_("Error writing quota info for quota type %N: %m\n"),
-         PROMPT_NULL, 0 },
+         PROMPT_NULL, 0, 0, 0, 0 },
 
        { 0 }
 };
@@ -2036,20 +2264,22 @@ static struct e2fsck_problem problem_table[] = {
  * problems will be either fixed or not fixed.
  */
 static struct latch_descr pr_latch_info[] = {
-       { PR_LATCH_BLOCK, PR_1_INODE_BLOCK_LATCH, 0 },
-       { PR_LATCH_BBLOCK, PR_1_INODE_BBLOCK_LATCH, 0 },
-       { PR_LATCH_IBITMAP, PR_5_INODE_BITMAP_HEADER, PR_5_INODE_BITMAP_END },
-       { PR_LATCH_BBITMAP, PR_5_BLOCK_BITMAP_HEADER, PR_5_BLOCK_BITMAP_END },
-       { PR_LATCH_RELOC, PR_0_RELOCATE_HINT, 0 },
-       { PR_LATCH_DBLOCK, PR_1B_DUP_BLOCK_HEADER, PR_1B_DUP_BLOCK_END },
-       { PR_LATCH_LOW_DTIME, PR_1_ORPHAN_LIST_REFUGEES, 0 },
-       { PR_LATCH_TOOBIG, PR_1_INODE_TOOBIG, 0 },
-       { PR_LATCH_OPTIMIZE_DIR, PR_3A_OPTIMIZE_DIR_HEADER, PR_3A_OPTIMIZE_DIR_END },
-       { PR_LATCH_BG_CHECKSUM, PR_0_GDT_CSUM_LATCH, 0 },
-       { PR_LATCH_OPTIMIZE_EXT, PR_1E_OPTIMIZE_EXT_HEADER, PR_1E_OPTIMIZE_EXT_END },
-       { -1, 0, 0 },
+       { PR_LATCH_BLOCK, PR_1_INODE_BLOCK_LATCH, 0, 0 },
+       { PR_LATCH_BBLOCK, PR_1_INODE_BBLOCK_LATCH, 0, 0 },
+       { PR_LATCH_IBITMAP, PR_5_INODE_BITMAP_HEADER, PR_5_INODE_BITMAP_END, 0 },
+       { PR_LATCH_BBITMAP, PR_5_BLOCK_BITMAP_HEADER, PR_5_BLOCK_BITMAP_END, 0 },
+       { PR_LATCH_RELOC, PR_0_RELOCATE_HINT, 0, 0 },
+       { PR_LATCH_DBLOCK, PR_1B_DUP_BLOCK_HEADER, PR_1B_DUP_BLOCK_END, 0 },
+       { PR_LATCH_LOW_DTIME, PR_1_ORPHAN_LIST_REFUGEES, 0, 0 },
+       { PR_LATCH_TOOBIG, PR_1_INODE_TOOBIG, 0, 0 },
+       { PR_LATCH_OPTIMIZE_DIR, PR_3A_OPTIMIZE_DIR_HEADER, PR_3A_OPTIMIZE_DIR_END, 0 },
+       { PR_LATCH_BG_CHECKSUM, PR_0_GDT_CSUM_LATCH, 0, 0 },
+       { PR_LATCH_OPTIMIZE_EXT, PR_1E_OPTIMIZE_EXT_HEADER, PR_1E_OPTIMIZE_EXT_END, 0 },
+       { -1, 0, 0, 0 },
 };
+#if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic pop
+#endif
 
 static struct e2fsck_problem *find_problem(problem_t code)
 {
@@ -2131,6 +2361,45 @@ static void reconfigure_bool(e2fsck_t ctx, struct e2fsck_problem *ptr,
                ptr->flags &= ~mask;
 }
 
+static void print_problem(FILE *f, problem_t code, int answer, int fixed,
+                         struct e2fsck_problem *ptr,
+                         struct problem_context *pctx)
+{
+       if (ptr->flags & PR_HEADER) {
+               fprintf(f, "<header code=\"0x%06x\"/>\n", code);
+               return;
+       }
+       fprintf(f, "<problem code=\"0x%06x\" answer=\"%d\"", code, answer);
+       if (pctx->errcode)
+               fprintf(f, " errcode=\"%lu\"", pctx->errcode);
+       if (fixed)
+               fputs(" fixed=\"1\"", f);
+       if (pctx->ino)
+               fprintf(f, " ino=\"%u\"", pctx->ino);
+       if (pctx->ino2)
+               fprintf(f, " ino2=\"%u\"", pctx->ino2);
+       if (pctx->dir)
+               fprintf(f, " dir=\"%u\"", pctx->dir);
+       if (pctx->blk)
+               fprintf(f, " blk=\"%llu\"", pctx->blk);
+       if (pctx->blk2)
+               fprintf(f, " blk2=\"%llu\"", pctx->blk2);
+       if (pctx->blkcount != (e2_blkcnt_t) -1)
+               fprintf(f, " blkcount=\"%lld\"", pctx->blkcount);
+       if (pctx->group != (dgrp_t) -1)
+               fprintf(f, " group=\"%u\"", pctx->group);
+       if (pctx->csum1)
+               fprintf(f, " csum1=\"%u\"", pctx->csum1);
+       if (pctx->csum2)
+               fprintf(f, " csum2=\"%u\"", pctx->csum2);
+       if (pctx->num)
+               fprintf(f, " num=\"%llu\"", pctx->num);
+       if (pctx->num2)
+               fprintf(f, " num2=\"%llu\"", pctx->num2);
+       if (pctx->str)
+               fprintf(f, " str=\"%s\"", pctx->str);
+       fputs("/>\n", f);
+}
 
 int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx)
 {
@@ -2141,6 +2410,7 @@ int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx)
        int             def_yn, answer, ans;
        int             print_answer = 0;
        int             suppress = 0;
+       int             fixed = 0;
 
        ptr = find_problem(code);
        if (!ptr) {
@@ -2166,6 +2436,7 @@ int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx)
                reconfigure_bool(ctx, ptr, key, PR_NO_NOMSG, "no_nomsg");
                reconfigure_bool(ctx, ptr, key, PR_PREEN_NOHDR, "preen_noheader");
                reconfigure_bool(ctx, ptr, key, PR_FORCE_NO, "force_no");
+               reconfigure_bool(ctx, ptr, key, PR_NOT_A_FIX, "not_a_fix");
                profile_get_integer(ctx->profile, "options",
                                    "max_count_problems", 0, 0,
                                    &ptr->max_count);
@@ -2214,6 +2485,10 @@ int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx)
                    (ldesc->flags & (PRL_YES | PRL_NO)))
                        suppress++;
                if (ptr->count == ptr->max_count + 1) {
+                       if (ctx->problem_logf)
+                               fprintf(ctx->problem_logf,
+                                       "<suppressed code=\"0x%06x\"/>\n",
+                                       code);
                        printf("...problem 0x%06x suppressed\n",
                               ptr->e2p_code);
                        fflush(stdout);
@@ -2283,8 +2558,15 @@ int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx)
        if (ptr->flags & PR_AFTER_CODE)
                answer = fix_problem(ctx, ptr->second_code, pctx);
 
-       if (answer && (ptr->prompt != PROMPT_NONE))
+       if (answer && (ptr->prompt != PROMPT_NONE) &&
+           !(ptr->flags & PR_NOT_A_FIX)) {
+               fixed = 1;
                ctx->flags |= E2F_FLAG_PROBLEMS_FIXED;
+       }
+
+       if (ctx->problem_logf)
+               print_problem(ctx->problem_logf, code, answer, fixed,
+                             ptr, pctx);
 
        return answer;
 }
index 86cb614..922c99d 100644 (file)
@@ -20,7 +20,7 @@ struct problem_context {
        e2_blkcnt_t     blkcount;
        dgrp_t          group;
        __u32           csum1, csum2;
-       __u64   num;
+       __u64           num, num2;
        const char *str;
 };
 
@@ -58,83 +58,83 @@ struct problem_context {
  * Pre-Pass 1 errors
  */
 
-/* Block bitmap not in group */
-#define PR_0_BB_NOT_GROUP      0x000001
+/* Block bitmap for group gggg is not in group */
+#define PR_0_BB_NOT_GROUP                      0x000001
 
-/* Inode bitmap not in group */
-#define PR_0_IB_NOT_GROUP      0x000002
+/* Inode bitmap for group gggg is not in group */
+#define PR_0_IB_NOT_GROUP                      0x000002
 
-/* Inode table not in group */
-#define PR_0_ITABLE_NOT_GROUP  0x000003
+/* Inode table for group gggg is not in group.  (block nnnn) */
+#define PR_0_ITABLE_NOT_GROUP                  0x000003
 
 /* Superblock corrupt */
-#define PR_0_SB_CORRUPT                0x000004
+#define PR_0_SB_CORRUPT                                0x000004
 
 /* Filesystem size is wrong */
-#define PR_0_FS_SIZE_WRONG     0x000005
+#define PR_0_FS_SIZE_WRONG                     0x000005
 
 /* Fragments not supported */
-#define PR_0_NO_FRAGMENTS      0x000006
+#define PR_0_NO_FRAGMENTS                      0x000006
 
-/* Bad blocks_per_group */
-#define PR_0_BLOCKS_PER_GROUP  0x000007
+/* Superblock blocks_per_group = bbbb, should have been cccc */
+#define PR_0_BLOCKS_PER_GROUP                  0x000007
 
-/* Bad first_data_block */
-#define PR_0_FIRST_DATA_BLOCK  0x000008
+/* Superblock first_data_block = bbbb, should have been cccc */
+#define PR_0_FIRST_DATA_BLOCK                  0x000008
 
-/* Adding UUID to filesystem */
-#define PR_0_ADD_UUID          0x000009
+/* Filesystem did not have a UUID; generating one */
+#define PR_0_ADD_UUID                          0x000009
 
 /* Relocate hint */
-#define PR_0_RELOCATE_HINT     0x00000A
+#define PR_0_RELOCATE_HINT                     0x00000A
 
 /* Miscellaneous superblock corruption */
-#define PR_0_MISC_CORRUPT_SUPER        0x00000B
+#define PR_0_MISC_CORRUPT_SUPER                        0x00000B
 
-/* Error determing physical device size of filesystem */
-#define PR_0_GETSIZE_ERROR     0x00000C
+/* Error determining physical device size of filesystem */
+#define PR_0_GETSIZE_ERROR                     0x00000C
 
 /* Inode count in the superblock incorrect */
-#define PR_0_INODE_COUNT_WRONG 0x00000D
+#define PR_0_INODE_COUNT_WRONG                 0x00000D
 
 /* The Hurd does not support the filetype feature */
-#define PR_0_HURD_CLEAR_FILETYPE 0x00000E
+#define PR_0_HURD_CLEAR_FILETYPE               0x00000E
 
-/* Journal inode is invalid */
-#define PR_0_JOURNAL_BAD_INODE 0x00000F
+/* Superblock has an invalid journal (inode inum) */
+#define PR_0_JOURNAL_BAD_INODE                 0x00000F
 
-/* The external journal has multiple filesystems (which we can't handle yet) */
-#define PR_0_JOURNAL_UNSUPP_MULTIFS 0x000010
+/* External journal has multiple filesystem users (unsupported) */
+#define PR_0_JOURNAL_UNSUPP_MULTIFS            0x000010
 
 /* Can't find external journal */
-#define PR_0_CANT_FIND_JOURNAL 0x000011
+#define PR_0_CANT_FIND_JOURNAL                 0x000011
 
 /* External journal has bad superblock */
-#define PR_0_EXT_JOURNAL_BAD_SUPER 0x000012
+#define PR_0_EXT_JOURNAL_BAD_SUPER             0x000012
 
 /* Superblock has a bad journal UUID */
-#define PR_0_JOURNAL_BAD_UUID  0x000013
+#define PR_0_JOURNAL_BAD_UUID                  0x000013
 
-/* Journal has an unknown superblock type */
-#define PR_0_JOURNAL_UNSUPP_SUPER 0x000014
+/* Filesystem journal superblock is an unknown type */
+#define PR_0_JOURNAL_UNSUPP_SUPER              0x000014
 
 /* Journal superblock is corrupt */
-#define PR_0_JOURNAL_BAD_SUPER 0x000015
+#define PR_0_JOURNAL_BAD_SUPER                 0x000015
 
-/* Journal superblock is corrupt */
-#define PR_0_JOURNAL_HAS_JOURNAL 0x000016
+/* Superblock has_journal flag is clear but has a journal */
+#define PR_0_JOURNAL_HAS_JOURNAL               0x000016
 
-/* Superblock has recovery flag set but no journal */
-#define PR_0_JOURNAL_RECOVER_SET 0x000017
+/* Superblock needs_recovery flag is set but no journal is present */
+#define PR_0_JOURNAL_RECOVER_SET               0x000017
 
 /* Journal has data, but recovery flag is clear */
-#define PR_0_JOURNAL_RECOVERY_CLEAR 0x000018
+#define PR_0_JOURNAL_RECOVERY_CLEAR            0x000018
 
 /* Ask if we should clear the journal */
-#define PR_0_JOURNAL_RESET_JOURNAL 0x000019
+#define PR_0_JOURNAL_RESET_JOURNAL             0x000019
 
 /* Filesystem revision is 0, but feature flags are set */
-#define PR_0_FS_REV_LEVEL      0x00001A
+#define PR_0_FS_REV_LEVEL                      0x00001A
 
 /* Clearing orphan inode */
 #define PR_0_ORPHAN_CLEAR_INODE                        0x000020
@@ -157,16 +157,16 @@ struct problem_context {
 /* Journal has unsupported incompatible feature - abort */
 #define PR_0_JOURNAL_UNSUPP_INCOMPAT           0x000026
 
-/* Journal has unsupported version number */
+/* Journal version not supported by this e2fsck */
 #define PR_0_JOURNAL_UNSUPP_VERSION            0x000027
 
-/* Moving journal to hidden file */
+/* Moving journal from /file to hidden inode */
 #define        PR_0_MOVE_JOURNAL                       0x000028
 
-/* Error moving journal */
+/* Error moving journal to hidden file */
 #define        PR_0_ERR_MOVE_JOURNAL                   0x000029
 
-/* Clearing V2 journal superblock */
+/* Found invalid V2 journal superblock fields */
 #define PR_0_CLEAR_V2_JOURNAL                  0x00002A
 
 /* Run journal anyway */
@@ -175,31 +175,32 @@ struct problem_context {
 /* Run journal anyway by default */
 #define PR_0_JOURNAL_RUN_DEFAULT               0x00002C
 
-/* Backup journal inode blocks */
+/* Backing up journal inode block information */
 #define PR_0_BACKUP_JNL                                0x00002D
 
-/* Reserved blocks w/o resize_inode */
+/* Filesystem does not have resize_inode enabled, but
+ * s_reserved_gdt_blocks is nnnn; should be zero */
 #define PR_0_NONZERO_RESERVED_GDT_BLOCKS       0x00002E
 
-/* Resize_inode not enabled, but resize inode is non-zero */
+/* Resize_inode not enabled, but the resize inode is non-zero */
 #define PR_0_CLEAR_RESIZE_INODE                        0x00002F
 
-/* Resize inode invalid */
+/* Resize inode not valid */
 #define PR_0_RESIZE_INODE_INVALID              0x000030
 
-/* Last mount time is in the future */
+/* Superblock last mount time is in the future */
 #define PR_0_FUTURE_SB_LAST_MOUNT              0x000031
 
-/* Last write time is in the future */
+/* Superblock last write time is in the future */
 #define PR_0_FUTURE_SB_LAST_WRITE              0x000032
 
-/* Superblock hint for external journal incorrect */
+/* Superblock hint for external superblock should be xxxx */
 #define PR_0_EXTERNAL_JOURNAL_HINT             0x000033
 
-/* Superblock hint for external journal incorrect */
+/* Adding dirhash hint to filesystem */
 #define PR_0_DIRHASH_HINT                      0x000034
 
-/* Group descriptor N checksum is invalid */
+/* group descriptor N checksum is invalid, should be yyyy. */
 #define PR_0_GDT_CSUM                          0x000035
 
 /* Group descriptor N marked uninitialized without feature set. */
@@ -214,7 +215,7 @@ struct problem_context {
 /* Last group block bitmap is uninitialized. */
 #define PR_0_BB_UNINIT_LAST                    0x000039
 
-/* Journal transaction found corrupt */
+/* Journal transaction was corrupt, replay was aborted */
 #define PR_0_JNL_TXN_CORRUPT                   0x00003A
 
 /* The test_fs filesystem flag is set and ext4 is available */
@@ -226,16 +227,16 @@ struct problem_context {
 /* Last write time is in the future (fudged) */
 #define PR_0_FUTURE_SB_LAST_WRITE_FUDGED       0x00003D
 
-/* Block group checksum (latch question) */
+/* One or more block group descriptor checksums are invalid (latch) */
 #define PR_0_GDT_CSUM_LATCH                    0x00003E
 
-/* Free inodes count wrong */
+/* Setting free inodes count to right (was wrong) */
 #define PR_0_FREE_INODE_COUNT                  0x00003F
 
-/* Free blocks count wrong */
+/* Setting free blocks count to right (was wrong) */
 #define PR_0_FREE_BLOCK_COUNT                  0x000040
 
-/* Make quota file hidden */
+/* Making quota inode hidden */
 #define        PR_0_HIDE_QUOTA                         0x000041
 
 /* Superblock has invalid MMP block. */
@@ -250,22 +251,20 @@ struct problem_context {
 /* Checking group descriptor failed */
 #define PR_0_CHECK_DESC_FAILED                 0x000045
 
-/*
- * metadata_csum supersedes uninit_bg; both feature bits cannot be set
- * simultaneously.
- */
+/* Superblock metadata_csum supersedes uninit_bg; both feature
+ * bits cannot be set simultaneously. */
 #define PR_0_META_AND_GDT_CSUM_SET             0x000046
 
-/* Superblock has invalid MMP checksum. */
+/* Superblock MMP block checksum does not match MMP block. */
 #define PR_0_MMP_CSUM_INVALID                  0x000047
 
-/* 64bit is set but extents are not set. */
+/* Superblock 64bit filesystem needs extents to access the whole disk */
 #define PR_0_64BIT_WITHOUT_EXTENTS             0x000048
 
 /* The first_meta_bg is too big */
 #define PR_0_FIRST_META_BG_TOO_BIG             0x000049
 
-/* External journal has corrupt superblock */
+/* External journal superblock checksum does not match superblock */
 #define PR_0_EXT_JOURNAL_SUPER_CSUM_INVALID    0x00004A
 
 /* metadata_csum_seed means nothing without metadata_csum */
@@ -274,402 +273,450 @@ struct problem_context {
 /* Error initializing quota context */
 #define PR_0_QUOTA_INIT_CTX                    0x00004C
 
-/* Bad s_min_extra_isize in superblock */
+/* Bad required extra isize in superblock */
 #define PR_0_BAD_MIN_EXTRA_ISIZE               0x00004D
 
-/* Bad s_want_extra_isize in superblock */
+/* Bad desired extra isize in superblock */
 #define PR_0_BAD_WANT_EXTRA_ISIZE              0x00004E
 
+/* Invalid quota inode number */
+#define PR_0_INVALID_QUOTA_INO                 0x00004F
+
+/* Inode count in the superblock incorrect */
+#define PR_0_INODE_COUNT_BIG                   0x000050
+
+/* Meta_bg and resize_inode are not compatible, remove resize_inode*/
+#define PR_0_DISABLE_RESIZE_INODE              0x000051
 
 /*
  * Pass 1 errors
  */
 
 /* Pass 1: Checking inodes, blocks, and sizes */
-#define PR_1_PASS_HEADER               0x010000
+#define PR_1_PASS_HEADER                       0x010000
 
-/* Root directory is not an inode */
-#define PR_1_ROOT_NO_DIR               0x010001
+/* Root inode is not a directory */
+#define PR_1_ROOT_NO_DIR                       0x010001
 
-/* Root directory has dtime set */
-#define PR_1_ROOT_DTIME                        0x010002
+/* Root inode has dtime set */
+#define PR_1_ROOT_DTIME                                0x010002
 
 /* Reserved inode has bad mode */
-#define PR_1_RESERVED_BAD_MODE         0x010003
+#define PR_1_RESERVED_BAD_MODE                 0x010003
 
-/* Deleted inode has zero dtime */
-#define PR_1_ZERO_DTIME                        0x010004
+/* Deleted inode inum has zero dtime */
+#define PR_1_ZERO_DTIME                                0x010004
 
-/* Inode in use, but dtime set */
-#define PR_1_SET_DTIME                 0x010005
+/* Inode inum is in use, but has dtime set */
+#define PR_1_SET_DTIME                         0x010005
 
-/* Zero-length directory */
-#define PR_1_ZERO_LENGTH_DIR           0x010006
+/* Inode inum is a zero-length directory */
+#define PR_1_ZERO_LENGTH_DIR                   0x010006
 
-/* Block bitmap conflicts with some other fs block */
-#define PR_1_BB_CONFLICT               0x010007
+/* Group block bitmap at block conflicts with some other fs block */
+#define PR_1_BB_CONFLICT                       0x010007
 
-/* Inode bitmap conflicts with some other fs block */
-#define PR_1_IB_CONFLICT               0x010008
+/* Group inode bitmap at block conflicts with some other fs block */
+#define PR_1_IB_CONFLICT                       0x010008
 
-/* Inode table conflicts with some other fs block */
-#define PR_1_ITABLE_CONFLICT           0x010009
+/* Group inode table at block conflicts with some other fs block */
+#define PR_1_ITABLE_CONFLICT                   0x010009
 
-/* Block bitmap is on a bad block */
-#define PR_1_BB_BAD_BLOCK              0x01000A
+/* Group block bitmap (block) is bad */
+#define PR_1_BB_BAD_BLOCK                      0x01000A
 
-/* Inode bitmap is on a bad block */
-#define PR_1_IB_BAD_BLOCK              0x01000B
+/* Group inode bitmap (block) is bad */
+#define PR_1_IB_BAD_BLOCK                      0x01000B
 
-/* Inode has incorrect i_size */
-#define PR_1_BAD_I_SIZE                        0x01000C
+/* Inode i_size is small, should be larger */
+#define PR_1_BAD_I_SIZE                                0x01000C
 
-/* Inode has incorrect i_blocks */
-#define PR_1_BAD_I_BLOCKS              0x01000D
+/* Inode i_blocks is small, should be larger */
+#define PR_1_BAD_I_BLOCKS                      0x01000D
 
 /* Illegal block number in inode */
-#define PR_1_ILLEGAL_BLOCK_NUM         0x01000E
+#define PR_1_ILLEGAL_BLOCK_NUM                 0x01000E
 
-/* Block number overlaps fs metadata */
-#define PR_1_BLOCK_OVERLAPS_METADATA   0x01000F
+/* Block number overlaps filesystem metadata in inode */
+#define PR_1_BLOCK_OVERLAPS_METADATA           0x01000F
 
 /* Inode has illegal blocks (latch question) */
-#define PR_1_INODE_BLOCK_LATCH         0x010010
+#define PR_1_INODE_BLOCK_LATCH                 0x010010
 
-/* Too many bad blocks in inode */
-#define        PR_1_TOO_MANY_BAD_BLOCKS        0x010011
+/* Too many illegal blocks in inode */
+#define        PR_1_TOO_MANY_BAD_BLOCKS                0x010011
 
 /* Illegal block number in bad block inode */
-#define PR_1_BB_ILLEGAL_BLOCK_NUM      0x010012
+#define PR_1_BB_ILLEGAL_BLOCK_NUM              0x010012
 
 /* Bad block inode has illegal blocks (latch question) */
-#define PR_1_INODE_BBLOCK_LATCH                0x010013
+#define PR_1_INODE_BBLOCK_LATCH                        0x010013
 
 /* Duplicate or bad blocks in use! */
-#define PR_1_DUP_BLOCKS_PREENSTOP      0x010014
+#define PR_1_DUP_BLOCKS_PREENSTOP              0x010014
 
-/* Bad block used as bad block indirect block */
-#define PR_1_BBINODE_BAD_METABLOCK     0x010015
+/* Bad block number used as bad block inode indirect block */
+#define PR_1_BBINODE_BAD_METABLOCK             0x010015
 
 /* Inconsistency can't be fixed prompt */
-#define PR_1_BBINODE_BAD_METABLOCK_PROMPT 0x010016
+#define PR_1_BBINODE_BAD_METABLOCK_PROMPT      0x010016
 
 /* Bad primary block */
-#define PR_1_BAD_PRIMARY_BLOCK         0x010017
+#define PR_1_BAD_PRIMARY_BLOCK                 0x010017
 
 /* Bad primary block prompt */
-#define PR_1_BAD_PRIMARY_BLOCK_PROMPT  0x010018
+#define PR_1_BAD_PRIMARY_BLOCK_PROMPT          0x010018
 
-/* Bad primary superblock */
-#define PR_1_BAD_PRIMARY_SUPERBLOCK    0x010019
+/* The primary superblock block is on the bad block list */
+#define PR_1_BAD_PRIMARY_SUPERBLOCK            0x010019
 
 /* Bad primary block group descriptors */
-#define PR_1_BAD_PRIMARY_GROUP_DESCRIPTOR 0x01001A
+#define PR_1_BAD_PRIMARY_GROUP_DESCRIPTOR      0x01001A
 
-/* Bad superblock in group */
-#define PR_1_BAD_SUPERBLOCK            0x01001B
+/* Warning: Group number's superblock (block) is bad */
+#define PR_1_BAD_SUPERBLOCK                    0x01001B
 
-/* Bad block group descriptors in group */
-#define PR_1_BAD_GROUP_DESCRIPTORS     0x01001C
+/* Warning: Group number's copy of the group descriptors has a bad block */
+#define PR_1_BAD_GROUP_DESCRIPTORS             0x01001C
 
-/* Block claimed for no reason */
-#define PR_1_PROGERR_CLAIMED_BLOCK     0x01001D
+/* Block number claimed for no reason in process_bad_blocks */
+#define PR_1_PROGERR_CLAIMED_BLOCK             0x01001D
 
-/* Error allocating blocks for relocating metadata */
-#define PR_1_RELOC_BLOCK_ALLOCATE      0x01001E
+/* Allocating number contiguous block(s) in block group number */
+#define PR_1_RELOC_BLOCK_ALLOCATE              0x01001E
 
-/* Error allocating block buffer during relocation process */
-#define PR_1_RELOC_MEMORY_ALLOCATE     0x01001F
+/* Allocating block buffer for relocating process */
+#define PR_1_RELOC_MEMORY_ALLOCATE             0x01001F
 
-/* Relocating metadata group information from X to Y */
-#define PR_1_RELOC_FROM_TO             0x010020
+/* Relocating group number's information from X to Y */
+#define PR_1_RELOC_FROM_TO                     0x010020
 
-/* Relocating metatdata group information to X */
-#define PR_1_RELOC_TO                  0x010021
+/* Relocating group number's information to X */
+#define PR_1_RELOC_TO                          0x010021
 
-/* Block read error during relocation process */
-#define PR_1_RELOC_READ_ERR            0x010022
+/* Warning: could not read block number of relocation process */
+#define PR_1_RELOC_READ_ERR                    0x010022
 
-/* Block write error during relocation process */
-#define PR_1_RELOC_WRITE_ERR           0x010023
+/* Warning: could not write block number of relocation process */
+#define PR_1_RELOC_WRITE_ERR                   0x010023
 
 /* Error allocating inode bitmap */
-#define PR_1_ALLOCATE_IBITMAP_ERROR    0x010024
+#define PR_1_ALLOCATE_IBITMAP_ERROR            0x010024
 
 /* Error allocating block bitmap */
-#define PR_1_ALLOCATE_BBITMAP_ERROR    0x010025
+#define PR_1_ALLOCATE_BBITMAP_ERROR            0x010025
 
-/* Error allocating icount structure */
-#define PR_1_ALLOCATE_ICOUNT           0x010026
+/* Error allocating icount link information */
+#define PR_1_ALLOCATE_ICOUNT                   0x010026
 
-/* Error allocating dbcount */
-#define PR_1_ALLOCATE_DBCOUNT          0x010027
+/* Error allocating directory block array */
+#define PR_1_ALLOCATE_DBCOUNT                  0x010027
 
 /* Error while scanning inodes */
-#define PR_1_ISCAN_ERROR               0x010028
+#define PR_1_ISCAN_ERROR                       0x010028
 
-/* Error while iterating over blocks */
-#define PR_1_BLOCK_ITERATE             0x010029
+/* Error while iterating over blocks in inode */
+#define PR_1_BLOCK_ITERATE                     0x010029
 
-/* Error while storing inode count information */
-#define PR_1_ICOUNT_STORE              0x01002A
+/* Error storing inode count information */
+#define PR_1_ICOUNT_STORE                      0x01002A
 
-/* Error while storing directory block information */
-#define PR_1_ADD_DBLOCK                        0x01002B
+/* Error storing directory block information */
+#define PR_1_ADD_DBLOCK                                0x01002B
 
-/* Error while reading inode (for clearing) */
-#define PR_1_READ_INODE                        0x01002C
+/* Error reading inode (for clearing) */
+#define PR_1_READ_INODE                                0x01002C
 
 /* Suppress messages prompt */
-#define PR_1_SUPPRESS_MESSAGES         0x01002D
+#define PR_1_SUPPRESS_MESSAGES                 0x01002D
 
-/* Imagic flag set on an inode when filesystem doesn't support it */
-#define PR_1_SET_IMAGIC                        0x01002F
+/* Imagic number has imagic flag set when fs doesn't support it */
+#define PR_1_SET_IMAGIC                                0x01002F
 
 /* Immutable flag set on a device or socket inode */
-#define PR_1_SET_IMMUTABLE             0x010030
+#define PR_1_SET_IMMUTABLE                     0x010030
 
 /* Compression flag set on a non-compressed filesystem -- no longer used*/
 /* #define PR_1_COMPR_SET                      0x010031 */
 
 /* Non-zero size on on device, fifo or socket inode */
-#define PR_1_SET_NONZSIZE              0x010032
+#define PR_1_SET_NONZSIZE                      0x010032
 
-/* Filesystem revision is 0, but feature flags are set */
-#define PR_1_FS_REV_LEVEL              0x010033
+/* Filesystem has feature flag(s) set, but is a revision 0 filesystem */
+#define PR_1_FS_REV_LEVEL                      0x010033
 
-/* Journal inode not in use, needs clearing */
-#define PR_1_JOURNAL_INODE_NOT_CLEAR   0x010034
+/* Journal inode is not in use, but contains data */
+#define PR_1_JOURNAL_INODE_NOT_CLEAR           0x010034
 
-/* Journal inode has wrong mode */
-#define PR_1_JOURNAL_BAD_MODE          0x010035
+/* Journal is not a regular file */
+#define PR_1_JOURNAL_BAD_MODE                  0x010035
 
-/* Inode that was part of orphan linked list */
-#define PR_1_LOW_DTIME                 0x010036
+/* Inode that was part of the orphan list */
+#define PR_1_LOW_DTIME                         0x010036
 
-/* Latch question which asks how to deal with low dtime inodes */
-#define PR_1_ORPHAN_LIST_REFUGEES      0x010037
+/* Inodes that were part of a corrupted orphan linked list found
+ * (latch question) */
+#define PR_1_ORPHAN_LIST_REFUGEES              0x010037
 
 /* Error allocating refcount structure */
-#define PR_1_ALLOCATE_REFCOUNT         0x010038
+#define PR_1_ALLOCATE_REFCOUNT                 0x010038
 
-/* Error reading Extended Attribute block */
-#define PR_1_READ_EA_BLOCK             0x010039
+/* Error reading extended attribute block */
+#define PR_1_READ_EA_BLOCK                     0x010039
 
-/* Invalid Extended Attribute block */
-#define PR_1_BAD_EA_BLOCK              0x01003A
+/* Inode number has a bad extended attribute block */
+#define PR_1_BAD_EA_BLOCK                      0x01003A
 
 /* Error reading Extended Attribute block while fixing refcount -- abort */
-#define PR_1_EXTATTR_READ_ABORT                0x01003B
+#define PR_1_EXTATTR_READ_ABORT                        0x01003B
 
-/* Extended attribute reference count incorrect */
-#define PR_1_EXTATTR_REFCOUNT          0x01003C
+/* Extended attribute number has reference count incorrect, should be */
+#define PR_1_EXTATTR_REFCOUNT                  0x01003C
 
 /* Error writing Extended Attribute block while fixing refcount */
-#define PR_1_EXTATTR_WRITE_ABORT       0x01003D
+#define PR_1_EXTATTR_WRITE_ABORT               0x01003D
 
-/* Multiple EA blocks not supported */
-#define PR_1_EA_MULTI_BLOCK            0x01003E
+/* Extended attribute block has h_blocks > 1 */
+#define PR_1_EA_MULTI_BLOCK                    0x01003E
 
-/* Error allocating EA region allocation structure */
-#define PR_1_EA_ALLOC_REGION_ABORT     0x01003F
+/* Allocating extended attribute region allocation structure */
+#define PR_1_EA_ALLOC_REGION_ABORT             0x01003F
 
-/* Error EA allocation collision */
-#define PR_1_EA_ALLOC_COLLISION                0x010040
+/* Extended Attribute block number is corrupt (allocation collision) */
+#define PR_1_EA_ALLOC_COLLISION                        0x010040
 
-/* Bad extended attribute name */
-#define PR_1_EA_BAD_NAME               0x010041
+/* Extended attribute block number is corrupt (invalid name) */
+#define PR_1_EA_BAD_NAME                       0x010041
 
-/* Bad extended attribute value */
-#define PR_1_EA_BAD_VALUE              0x010042
+/* Extended attribute block number is corrupt (invalid value) */
+#define PR_1_EA_BAD_VALUE                      0x010042
 
-/* Inode too big (latch question) */
-#define PR_1_INODE_TOOBIG              0x010043
+/* Inode number is too big (latch question) */
+#define PR_1_INODE_TOOBIG                      0x010043
 
-/* Directory too big */
-#define PR_1_TOOBIG_DIR                        0x010044
+/* Problem causes directory to be too big */
+#define PR_1_TOOBIG_DIR                                0x010044
 
-/* Regular file too big */
-#define PR_1_TOOBIG_REG                        0x010045
+/* Problem causes file to be too big */
+#define PR_1_TOOBIG_REG                                0x010045
 
-/* Symlink too big */
-#define PR_1_TOOBIG_SYMLINK            0x010046
+/* Problem causes symlink to be too big */
+#define PR_1_TOOBIG_SYMLINK                    0x010046
 
-/* INDEX_FL flag set on a non-HTREE filesystem */
-#define PR_1_HTREE_SET                 0x010047
+/* Inode has INDEX_FL flag set on filesystem without htree support  */
+#define PR_1_HTREE_SET                         0x010047
 
-/* INDEX_FL flag set on a non-directory */
-#define PR_1_HTREE_NODIR               0x010048
+/* Inode number has INDEX_FL flag set but is on a directory */
+#define PR_1_HTREE_NODIR                       0x010048
 
-/* Invalid root node in HTREE directory */
-#define PR_1_HTREE_BADROOT             0x010049
+/* htree directory has an invalid root node */
+#define PR_1_HTREE_BADROOT                     0x010049
 
-/* Unsupported hash version in HTREE directory */
-#define PR_1_HTREE_HASHV               0x01004A
+/* Htree directory has an unsupported hash version */
+#define PR_1_HTREE_HASHV                       0x01004A
 
-/* Incompatible flag in HTREE root node */
-#define PR_1_HTREE_INCOMPAT            0x01004B
+/* Htree directory uses an Incompatible htree root node flag */
+#define PR_1_HTREE_INCOMPAT                    0x01004B
 
-/* HTREE too deep */
-#define PR_1_HTREE_DEPTH               0x01004C
+/* Htree directory has a tree depth which is too big */
+#define PR_1_HTREE_DEPTH                       0x01004C
 
-/* Bad block has indirect block that conflicts with filesystem block */
-#define PR_1_BB_FS_BLOCK               0x01004D
+/* Bad block inode has an indirect block number that conflicts with
+ * filesystem metadata */
+#define PR_1_BB_FS_BLOCK                       0x01004D
 
-/* Resize inode failed */
-#define PR_1_RESIZE_INODE_CREATE       0x01004E
+/* Resize inode (re)creation failed */
+#define PR_1_RESIZE_INODE_CREATE               0x01004E
 
-/* inode->i_size is too long */
-#define PR_1_EXTRA_ISIZE               0x01004F
+/* inode has a extra size i_extra_isize which is invalid */
+#define PR_1_EXTRA_ISIZE                       0x01004F
 
-/* attribute name is too long */
-#define PR_1_ATTR_NAME_LEN             0x010050
+/* Extended attribute in inode has a namelen which is invalid */
+#define PR_1_ATTR_NAME_LEN                     0x010050
 
-/* wrong EA value offset */
-#define PR_1_ATTR_VALUE_OFFSET         0x010051
+/* Extended attribute in inode has a value offset which is invalid */
+#define PR_1_ATTR_VALUE_OFFSET                 0x010051
 
-/* wrong EA blocknumber */
-#define PR_1_ATTR_VALUE_BLOCK          0x010052
+/* extended attribute in inode has a value block which is invalid */
+#define PR_1_ATTR_VALUE_BLOCK                  0x010052
 
-/* wrong EA value size */
-#define PR_1_ATTR_VALUE_SIZE           0x010053
+/* extended attribute in inode has a value size which is invalid */
+#define PR_1_ATTR_VALUE_SIZE                   0x010053
 
-/* wrong EA hash value */
-#define PR_1_ATTR_HASH                 0x010054
+/* extended attribute in inode has a hash which is invalid */
+#define PR_1_ATTR_HASH                         0x010054
 
-/* inode appears to be a directory */
-#define PR_1_TREAT_AS_DIRECTORY                0x010055
+/* inode is a type but it looks like it is really a directory */
+#define PR_1_TREAT_AS_DIRECTORY                        0x010055
 
-/* Error while reading extent tree */
-#define PR_1_READ_EXTENT               0x010056
+/* Error while reading extent tree in inode */
+#define PR_1_READ_EXTENT                       0x010056
 
-/* Failure to iterate extents */
-#define PR_1_EXTENT_ITERATE_FAILURE    0x010057
+/* Failure to iterate extents in inode */
+#define PR_1_EXTENT_ITERATE_FAILURE            0x010057
 
-/* Bad starting block in extent */
-#define PR_1_EXTENT_BAD_START_BLK      0x010058
+/* Inode has an invalid extent starting block */
+#define PR_1_EXTENT_BAD_START_BLK              0x010058
 
-/* Extent ends beyond filesystem */
-#define PR_1_EXTENT_ENDS_BEYOND                0x010059
+/* Inode has an invalid extent that ends beyond filesystem */
+#define PR_1_EXTENT_ENDS_BEYOND                        0x010059
 
-/* EXTENTS_FL flag set on a non-extents capable filesystem */
-#define PR_1_EXTENTS_SET               0x01005A
+/* inode has EXTENTS_FL flag set on filesystem without extents support */
+#define PR_1_EXTENTS_SET                       0x01005A
 
-/* inode has extents, superblock missing INCOMPAT_EXTENTS feature */
-#define PR_1_EXTENT_FEATURE            0x01005B
+/* inode is in extents format, but superblock is missing EXTENTS feature */
+#define PR_1_EXTENT_FEATURE                    0x01005B
 
 /* inode missing EXTENTS_FL, but is an extent inode */
-#define PR_1_UNSET_EXTENT_FL           0x01005C
+#define PR_1_UNSET_EXTENT_FL                   0x01005C
 
 /* Fast symlink has EXTENTS_FL set */
-#define PR_1_FAST_SYMLINK_EXTENT_FL    0x01005D
+#define PR_1_FAST_SYMLINK_EXTENT_FL            0x01005D
 
 /* Extents are out of order */
-#define PR_1_OUT_OF_ORDER_EXTENTS      0x01005E
+#define PR_1_OUT_OF_ORDER_EXTENTS              0x01005E
 
 /* Extent node header invalid */
-#define PR_1_EXTENT_HEADER_INVALID     0x01005F
+#define PR_1_EXTENT_HEADER_INVALID             0x01005F
 
 /* PR_1_EOFBLOCKS_FL_SET 0x010060 was here */
 
-/* Failed to convert subcluster bitmap */
-#define PR_1_CONVERT_SUBCLUSTER                0x010061
+/* Failed to convert subcluster block bitmap */
+#define PR_1_CONVERT_SUBCLUSTER                        0x010061
 
-/* Quota inode has wrong mode */
-#define PR_1_QUOTA_BAD_MODE            0x010062
+/* Quota inode is not a regular file */
+#define PR_1_QUOTA_BAD_MODE                    0x010062
 
 /* Quota inode is not in use, but contains data */
-#define PR_1_QUOTA_INODE_NOT_CLEAR     0x010063
+#define PR_1_QUOTA_INODE_NOT_CLEAR             0x010063
 
-/* Quota inode is user visible */
-#define PR_1_QUOTA_INODE_NOT_HIDDEN    0x010064
+/* Quota inode is visible to the user */
+#define PR_1_QUOTA_INODE_NOT_HIDDEN            0x010064
 
-/* Invalid bad inode */
-#define PR_1_INVALID_BAD_INODE         0x010065
+/* The bad block inode looks invalid */
+#define PR_1_INVALID_BAD_INODE                 0x010065
 
-/* Extent has zero length */
-#define PR_1_EXTENT_LENGTH_ZERO                0x010066
+/* Extent has zero length extent */
+#define PR_1_EXTENT_LENGTH_ZERO                        0x010066
 
 /* inode seems to contain garbage */
-#define PR_1_INODE_IS_GARBAGE          0x010067
+#define PR_1_INODE_IS_GARBAGE                  0x010067
 
 /* inode passes checks, but checksum does not match inode */
-#define PR_1_INODE_ONLY_CSUM_INVALID   0x010068
+#define PR_1_INODE_ONLY_CSUM_INVALID           0x010068
 
-/* Inode EA allocation collision */
-#define PR_1_INODE_EA_ALLOC_COLLISION  0x010069
+/* Inode extended attribute is corrupt (allocation collision) */
+#define PR_1_INODE_EA_ALLOC_COLLISION          0x010069
 
-/* extent block passes checks, but checksum does not match extent block */
-#define PR_1_EXTENT_ONLY_CSUM_INVALID  0x01006A
+/* Inode extent block passes checks, but checksum does not match extent */
+#define PR_1_EXTENT_ONLY_CSUM_INVALID          0x01006A
 
-/* ea block passes checks, but checksum invalid */
-#define PR_1_EA_BLOCK_ONLY_CSUM_INVALID        0x01006C
+/* Inode extended attribute block passes checks, but checksum does not
+ * match block. */
+#define PR_1_EA_BLOCK_ONLY_CSUM_INVALID                0x01006C
 
-/* Index start doesn't match start of next extent down */
-#define PR_1_EXTENT_INDEX_START_INVALID        0x01006D
+/* Interior extent node level number of inode doesn't first node down */
+#define PR_1_EXTENT_INDEX_START_INVALID                0x01006D
 
-#define PR_1_EXTENT_END_OUT_OF_BOUNDS  0x01006E
+/* Inode end of extent exceeds allowed value */
+#define PR_1_EXTENT_END_OUT_OF_BOUNDS          0x01006E
 
-/* Inode has inline data, but superblock is missing INLINE_DATA feature. */
-#define PR_1_INLINE_DATA_FEATURE       0x01006F
+/* inode has INLINE_DATA_FL flag on filesystem without inline data */
+#define PR_1_INLINE_DATA_FEATURE               0x01006F
 
-/* INLINE_DATA feature is set in a non-inline-data filesystem */
-#define PR_1_INLINE_DATA_SET          0x010070
+/* inode has INLINE_DATA_FL flag on filesystem without inline data */
+#define PR_1_INLINE_DATA_SET                   0x010070
 
-/* file metadata collides with critical metadata */
+/* Inode block conflicts with critical metadata, skipping block checks */
 #define PR_1_CRITICAL_METADATA_COLLISION       0x010071
 
-/* Directory inode has a missing block (hole) */
-#define PR_1_COLLAPSE_DBLOCK           0x010072
+/* Directory inode block <block> should be at block <otherblock> */
+#define PR_1_COLLAPSE_DBLOCK                   0x010072
 
-/* uninit directory block */
-#define PR_1_UNINIT_DBLOCK             0x010073
+/* Directory inode block <block> should be at block <otherblock> */
+#define PR_1_UNINIT_DBLOCK                     0x010073
 
-/* Inode logical block is misaligned */
-#define PR_1_MISALIGNED_CLUSTER                0x010074
+/* Inode logical block (physical block) violates cluster allocation */
+#define PR_1_MISALIGNED_CLUSTER                        0x010074
 
 /* Inode has INLINE_DATA_FL flag but extended attribute not found */
-#define PR_1_INLINE_DATA_NO_ATTR       0x010075
+#define PR_1_INLINE_DATA_NO_ATTR               0x010075
 
-/* extents/inlinedata set on fifo/socket/device */
-#define PR_1_SPECIAL_EXTENTS_IDATA     0x010076
+/* Special (device/socket/fifo) file (inode num) has extents
+ * or inline-data flag set */
+#define PR_1_SPECIAL_EXTENTS_IDATA             0x010076
 
-/* idata/extent flag set and extent header found, clear idata flag */
+/* Inode has extent header but inline data flag is set */
 #define PR_1_CLEAR_INLINE_DATA_FOR_EXTENT      0x010077
 
-/* inlinedata/extent set and no extent header found, clear extent flag */
+/* Inode seems to have inline data but extent flag is set */
 #define PR_1_CLEAR_EXTENT_FOR_INLINE_DATA      0x010078
 
-/* inlinedata/extent set, clear both flags */
+/* Inode seems to have block map but inline data and extent flags set */
 #define PR_1_CLEAR_EXTENT_INLINE_DATA_FLAGS    0x010079
 
-/* inlinedata/extent set, clear inode */
+/* Inode has inline data and extent flags but i_block contains junk */
 #define PR_1_CLEAR_EXTENT_INLINE_DATA_INODE    0x01007A
 
-/* badblocks is in badblocks */
+/* Bad block list says the bad block list inode is bad */
 #define PR_1_BADBLOCKS_IN_BADBLOCKS            0x01007B
 
-/* can't allocate extent region */
+/* Error allocating extent region allocation structure */
 #define PR_1_EXTENT_ALLOC_REGION_ABORT         0x01007C
 
-/* leaf extent collision */
+/* Inode leaf has a duplicate extent mapping */
 #define PR_1_EXTENT_COLLISION                  0x01007D
 
-/* Error allocating memory for encrypted directory list */
-#define PR_1_ALLOCATE_ENCRYPTED_DIRLIST                0x01007E
+/* Error allocating memory for encrypted inode list */
+#define PR_1_ALLOCATE_ENCRYPTED_INODE_LIST     0x01007E
 
-/* extent tree max depth too big */
+/* Inode extent tree could be more shallow */
 #define PR_1_EXTENT_BAD_MAX_DEPTH              0x01007F
 
-/* bigalloc fs cannot have blockmap files */
+/* inode num on bigalloc filesystem cannot be block mapped */
 #define PR_1_NO_BIGALLOC_BLOCKMAP_FILES                0x010080
 
-/* Missing extent header */
+/* Inode has corrupt extent header */
 #define PR_1_MISSING_EXTENT_HEADER             0x010081
 
 /* Timestamp(s) on inode beyond 2310-04-04 are likely pre-1970. */
 #define PR_1_EA_TIME_OUT_OF_RANGE              0x010082
 
+/* Inode has illegal EA value inode */
+#define PR_1_ATTR_VALUE_EA_INODE               0x010083
+
+/* Parent inode has invalid EA entry. EA inode does not have
+ * EXT4_EA_INODE_FL flag. Delete EA entry? */
+#define PR_1_ATTR_NO_EA_INODE_FL               0x010085
+
+/* EA inode for parent inode does not have EXT4_EA_INODE_FL flag */
+#define PR_1_ATTR_SET_EA_INODE_FL              0x010086
+
+/* Offer to clear uninitialized flag on an extent */
+#define PR_1_CLEAR_UNINIT_EXTENT               0x010087
+
+/* Casefold flag set on a non-directory */
+#define PR_1_CASEFOLD_NONDIR                   0x010088
+
+/* Casefold flag set, but file system is missing the casefold feature */
+#define PR_1_CASEFOLD_FEATURE                  0x010089
+
+/* Inode has encrypt flag but no encryption extended attribute */
+#define PR_1_MISSING_ENCRYPTION_XATTR          0x01008A
+
+/* Encrypted inode has corrupt encryption extended attribute */
+#define PR_1_CORRUPT_ENCRYPTION_XATTR          0x01008B
+
+/* Error allocating memory for casefolded directory list */
+#define PR_1_ALLOCATE_CASEFOLDED_DIRLIST       0x01008C
+
+/* Htree directory should use SipHash but does not */
+#define PR_1_HTREE_NEEDS_SIPHASH               0x01008D
+
+/* Htree directory uses SipHash but should not */
+#define PR_1_HTREE_CANNOT_SIPHASH              0x01008E
+
+
 /*
  * Pass 1b errors
  */
@@ -775,7 +822,7 @@ struct problem_context {
 /* Directory entry has deleted or unused inode */
 #define PR_2_UNUSED_INODE      0x020003
 
-/* Directry entry is link to '.' */
+/* Directory entry is link to '.' */
 #define PR_2_LINK_DOT          0x020004
 
 /* Directory entry points to inode now located in a bad block */
@@ -784,7 +831,7 @@ struct problem_context {
 /* Directory entry contains a link to a directory */
 #define PR_2_LINK_DIR          0x020006
 
-/* Directory entry contains a link to the root directry */
+/* Directory entry contains a link to the root directory */
 #define PR_2_LINK_ROOT         0x020007
 
 /* Directory entry has illegal characters in its name */
@@ -808,8 +855,8 @@ struct problem_context {
 /* i_file_acl should be zero */
 #define PR_2_FILE_ACL_ZERO     0x02000E
 
-/* i_dir_acl should be zero */
-#define PR_2_DIR_ACL_ZERO      0x02000F
+/* i_size_high should be zero */
+#define PR_2_DIR_SIZE_HIGH_ZERO        0x02000F
 
 /* i_frag should be zero */
 #define PR_2_FRAG_ZERO         0x020010
@@ -985,6 +1032,18 @@ struct problem_context {
 /* Encrypted directory entry is too short */
 #define PR_2_BAD_ENCRYPTED_NAME                0x020050
 
+/* Encrypted directory contains unencrypted file */
+#define PR_2_UNENCRYPTED_FILE          0x020051
+
+/* Encrypted directory contains file with different encryption policy */
+#define PR_2_INCONSISTENT_ENCRYPTION_POLICY    0x020052
+
+/* Encoded directory entry has illegal characters in its name */
+#define PR_2_BAD_ENCODED_NAME          0x020053
+
+/* Non-unique filename found, but can't rename */
+#define PR_2_NON_UNIQUE_FILE_NO_RENAME 0x020054
+
 /*
  * Pass 3 errors
  */
@@ -1074,7 +1133,7 @@ struct problem_context {
 #define PR_3_LPF_ENCRYPTED             0x03001B
 
 /*
- * Pass 3a --- rehashing diretories
+ * Pass 3a --- rehashing directories
  */
 /* Pass 3a: Reindexing directories */
 #define PR_3A_PASS_HEADER              0x031000
@@ -1115,6 +1174,15 @@ struct problem_context {
 /* Inconsistent inode count information cached */
 #define PR_4_INCONSISTENT_COUNT                0x040004
 
+/* Extended attribute inode ref count wrong */
+#define PR_4_EA_INODE_REF_COUNT                0x040005
+
+/* directory exceeds max links, but no DIR_NLINK feature in superblock */
+#define PR_4_DIR_NLINK_FEATURE         0x040006
+
+/* Directory ref count set to overflow but it doesn't have to be */
+#define PR_4_DIR_OVERFLOW_REF_COUNT    0x040007
+
 /*
  * Pass 5 errors
  */
@@ -1188,7 +1256,7 @@ struct problem_context {
 /* Inode range not used, but marked in bitmap */
 #define PR_5_INODE_RANGE_UNUSED                0x050016
 
-/* Inode rangeused, but not marked used in bitmap */
+/* Inode range used, but not marked used in bitmap */
 #define PR_5_INODE_RANGE_USED          0x050017
 
 /* Block in use but group is marked BLOCK_UNINIT */
index 7944cd6..95c1a70 100644 (file)
@@ -44,3 +44,5 @@ struct latch_descr {
 #define PR_CONFIG      0x080000 /* This problem has been customized
                                    from the config file */
 #define PR_FORCE_NO    0x100000 /* Force the answer to be no */
+#define PR_NOT_A_FIX   0x200000 /* Yes doesn't mean a problem was fixed */
+#define PR_HEADER      0x400000 /* Problem is a header marker */
index f98053b..f9b68c9 100644 (file)
 #include "e2fsck.h"
 #include "problem.h"
 
-static void move_quota_inode(ext2_filsys fs, ext2_ino_t from_ino,
-                            ext2_ino_t to_ino, enum quota_type qtype)
+static errcode_t move_quota_inode(ext2_filsys fs, ext2_ino_t from_ino,
+                                 ext2_ino_t to_ino, enum quota_type qtype)
 {
        struct ext2_inode       inode;
        errcode_t               retval;
        char                    qf_name[QUOTA_NAME_LEN];
 
        /* We need the inode bitmap to be loaded */
-       if (ext2fs_read_bitmaps(fs))
-               return;
+       retval = ext2fs_read_bitmaps(fs);
+       if (retval) {
+               com_err("ext2fs_read_bitmaps", retval, "%s",
+                       _("in move_quota_inode"));
+               return retval;
+       }
 
        retval = ext2fs_read_inode(fs, from_ino, &inode);
        if (retval) {
                com_err("ext2fs_read_inode", retval, "%s",
                        _("in move_quota_inode"));
-               return;
+               return retval;
        }
 
        inode.i_links_count = 1;
@@ -44,16 +48,22 @@ static void move_quota_inode(ext2_filsys fs, ext2_ino_t from_ino,
        if (retval) {
                com_err("ext2fs_write_new_inode", retval, "%s",
                        _("in move_quota_inode"));
-               return;
+               return retval;
        }
 
        /* unlink the old inode */
        quota_get_qf_name(qtype, QFMT_VFS_V1, qf_name);
-       ext2fs_unlink(fs, EXT2_ROOT_INO, qf_name, from_ino, 0);
+       retval = ext2fs_unlink(fs, EXT2_ROOT_INO, qf_name, from_ino, 0);
+       if (retval) {
+               com_err("ext2fs_unlink", retval, "%s",
+                       _("in move_quota_inode"));
+               return retval;
+       }
        ext2fs_inode_alloc_stats(fs, from_ino, -1);
        /* Clear out the original inode in the inode-table block. */
        memset(&inode, 0, sizeof(struct ext2_inode));
        ext2fs_write_inode(fs, from_ino, &inode);
+       return 0;
 }
 
 void e2fsck_hide_quota(e2fsck_t ctx)
@@ -71,14 +81,47 @@ void e2fsck_hide_quota(e2fsck_t ctx)
                return;
 
        for (qtype = 0; qtype < MAXQUOTAS; qtype++) {
+               pctx.dir = 2;   /* This is a guess, but it's a good one */
                pctx.ino = *quota_sb_inump(sb, qtype);
+               pctx.num = qtype;
                quota_ino = quota_type2inum(qtype, fs->super);
                if (pctx.ino && (pctx.ino != quota_ino) &&
                    fix_problem(ctx, PR_0_HIDE_QUOTA, &pctx)) {
-                       move_quota_inode(fs, pctx.ino, quota_ino, qtype);
+                       if (move_quota_inode(fs, pctx.ino, quota_ino, qtype))
+                               continue;
                        *quota_sb_inump(sb, qtype) = quota_ino;
+                       ext2fs_mark_super_dirty(fs);
                }
        }
 
        return;
 }
+
+void e2fsck_validate_quota_inodes(e2fsck_t ctx)
+{
+       struct ext2_super_block *sb = ctx->fs->super;
+       struct problem_context  pctx;
+       ext2_filsys             fs = ctx->fs;
+       enum quota_type qtype;
+
+       clear_problem_context(&pctx);
+
+       for (qtype = 0; qtype < MAXQUOTAS; qtype++) {
+               pctx.ino = *quota_sb_inump(sb, qtype);
+               pctx.num = qtype;
+               if (pctx.ino &&
+                   ((pctx.ino == EXT2_BAD_INO) ||
+                    (pctx.ino == EXT2_ROOT_INO) ||
+                    (pctx.ino == EXT2_BOOT_LOADER_INO) ||
+                    (pctx.ino == EXT2_UNDEL_DIR_INO) ||
+                    (pctx.ino == EXT2_RESIZE_INO) ||
+                    (pctx.ino == EXT2_JOURNAL_INO) ||
+                    (pctx.ino == EXT2_EXCLUDE_INO) ||
+                    (pctx.ino == EXT4_REPLICA_INO) ||
+                    (pctx.ino > fs->super->s_inodes_count)) &&
+                   fix_problem(ctx, PR_0_INVALID_QUOTA_INO, &pctx)) {
+                       *quota_sb_inump(sb, qtype) = 0;
+                       ext2fs_mark_super_dirty(fs);
+               }
+       }
+}
index a860f2b..38d4ec4 100644 (file)
@@ -98,6 +98,8 @@ static errcode_t e2fsck_readahead_bitmap(ext2_filsys fs,
                if (err == ENOENT) {
                        out = end;
                        err = 0;
+                       if (out == start)
+                               break;
                } else if (err)
                        break;
 
index abf12c7..dc0694f 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * linux/fs/jbd2/recovery.c
  *
@@ -5,10 +6,6 @@
  *
  * Copyright 1999-2000 Red Hat Software --- All Rights Reserved
  *
- * This file is part of the Linux kernel and is made available under
- * the terms of the GNU General Public License, version 2, or at your
- * option, any later version, incorporated herein by reference.
- *
  * Journal recovery routines for the generic filesystem journaling code;
  * part of the ext2fs journaling system.
  */
@@ -38,7 +35,6 @@ struct recovery_info
        int             nr_revoke_hits;
 };
 
-enum passtype {PASS_SCAN, PASS_REVOKE, PASS_REPLAY};
 static int do_one_pass(journal_t *journal,
                                struct recovery_info *info, enum passtype pass);
 static int scan_revoke_records(journal_t *, struct buffer_head *,
@@ -78,8 +74,8 @@ static int do_readahead(journal_t *journal, unsigned int start)
 
        /* Do up to 128K of readahead */
        max = start + (128 * 1024 / journal->j_blocksize);
-       if (max > journal->j_maxlen)
-               max = journal->j_maxlen;
+       if (max > journal->j_total_len)
+               max = journal->j_total_len;
 
        /* Do the readahead itself.  We'll submit MAXBUF buffer_heads at
         * a time to the block device IO layer. */
@@ -87,7 +83,7 @@ static int do_readahead(journal_t *journal, unsigned int start)
        nbufs = 0;
 
        for (next = start; next < max; next++) {
-               err = journal_bmap(journal, next, &blocknr);
+               err = jbd2_journal_bmap(journal, next, &blocknr);
 
                if (err) {
                        printk(KERN_ERR "JBD2: bad block at offset %u\n",
@@ -104,7 +100,7 @@ static int do_readahead(journal_t *journal, unsigned int start)
                if (!buffer_uptodate(bh) && !buffer_locked(bh)) {
                        bufs[nbufs++] = bh;
                        if (nbufs == MAXBUF) {
-                               ll_rw_block(READ, nbufs, bufs);
+                               ll_rw_block(REQ_OP_READ, 0, nbufs, bufs);
                                journal_brelse_array(bufs, nbufs);
                                nbufs = 0;
                        }
@@ -113,7 +109,7 @@ static int do_readahead(journal_t *journal, unsigned int start)
        }
 
        if (nbufs)
-               ll_rw_block(READ, nbufs, bufs);
+               ll_rw_block(REQ_OP_READ, 0, nbufs, bufs);
        err = 0;
 
 failed:
@@ -138,12 +134,12 @@ static int jread(struct buffer_head **bhp, journal_t *journal,
 
        *bhp = NULL;
 
-       if (offset >= journal->j_maxlen) {
+       if (offset >= journal->j_total_len) {
                printk(KERN_ERR "JBD2: corrupted journal superblock\n");
                return -EFSCORRUPTED;
        }
 
-       err = journal_bmap(journal, offset, &blocknr);
+       err = jbd2_journal_bmap(journal, offset, &blocknr);
 
        if (err) {
                printk(KERN_ERR "JBD2: bad block at offset %u\n",
@@ -174,24 +170,23 @@ static int jread(struct buffer_head **bhp, journal_t *journal,
        return 0;
 }
 
-static int jbd2_descr_block_csum_verify(journal_t *j,
-                                       void *buf)
+static int jbd2_descriptor_block_csum_verify(journal_t *j, void *buf)
 {
-       struct journal_block_tail *tail;
-       __u32 provided;
+       struct jbd2_journal_block_tail *tail;
+       __be32 provided;
        __u32 calculated;
 
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return 1;
 
-       tail = (struct journal_block_tail *)((char *)buf + j->j_blocksize -
-                       sizeof(struct journal_block_tail));
+       tail = (struct jbd2_journal_block_tail *)(buf + j->j_blocksize -
+                       sizeof(struct jbd2_journal_block_tail));
        provided = tail->t_checksum;
        tail->t_checksum = 0;
        calculated = jbd2_chksum(j, j->j_csum_seed, buf, j->j_blocksize);
        tail->t_checksum = provided;
 
-       return provided == ext2fs_cpu_to_be32(calculated);
+       return provided == cpu_to_be32(calculated);
 }
 
 /*
@@ -205,8 +200,8 @@ static int count_tags(journal_t *journal, struct buffer_head *bh)
        int                     nr = 0, size = journal->j_blocksize;
        int                     tag_bytes = journal_tag_bytes(journal);
 
-       if (journal_has_csum_v2or3(journal))
-               size -= sizeof(struct journal_block_tail);
+       if (jbd2_journal_has_csum_v2or3(journal))
+               size -= sizeof(struct jbd2_journal_block_tail);
 
        tagp = &bh->b_data[sizeof(journal_header_t)];
 
@@ -215,10 +210,10 @@ static int count_tags(journal_t *journal, struct buffer_head *bh)
 
                nr++;
                tagp += tag_bytes;
-               if (!(tag->t_flags & ext2fs_cpu_to_be16(JFS_FLAG_SAME_UUID)))
+               if (!(tag->t_flags & cpu_to_be16(JBD2_FLAG_SAME_UUID)))
                        tagp += 16;
 
-               if (tag->t_flags & ext2fs_cpu_to_be16(JFS_FLAG_LAST_TAG))
+               if (tag->t_flags & cpu_to_be16(JBD2_FLAG_LAST_TAG))
                        break;
        }
 
@@ -229,12 +224,53 @@ static int count_tags(journal_t *journal, struct buffer_head *bh)
 /* Make sure we wrap around the log correctly! */
 #define wrap(journal, var)                                             \
 do {                                                                   \
-       if (var >= (journal)->j_last)                                   \
-               var -= ((journal)->j_last - (journal)->j_first);        \
+       unsigned long _wrap_last =                                      \
+               jbd2_has_feature_fast_commit(journal) ?                 \
+                       (journal)->j_fc_last : (journal)->j_last;       \
+                                                                       \
+       if (var >= _wrap_last)                                          \
+               var -= (_wrap_last - (journal)->j_first);               \
 } while (0)
 
+static int fc_do_one_pass(journal_t *journal,
+                         struct recovery_info *info, enum passtype pass)
+{
+       unsigned int expected_commit_id = info->end_transaction;
+       unsigned long next_fc_block;
+       struct buffer_head *bh;
+       int err = 0;
+
+       next_fc_block = journal->j_fc_first;
+       if (!journal->j_fc_replay_callback)
+               return 0;
+
+       while (next_fc_block <= journal->j_fc_last) {
+               jbd_debug(3, "Fast commit replay: next block %ld",
+                         next_fc_block);
+               err = jread(&bh, journal, next_fc_block);
+               if (err) {
+                       jbd_debug(3, "Fast commit replay: read error");
+                       break;
+               }
+
+               jbd_debug(3, "Processing fast commit blk with seq %d");
+               err = journal->j_fc_replay_callback(journal, bh, pass,
+                                       next_fc_block - journal->j_fc_first,
+                                       expected_commit_id);
+               next_fc_block++;
+               if (err < 0 || err == JBD2_FC_REPLAY_STOP)
+                       break;
+               err = 0;
+       }
+
+       if (err)
+               jbd_debug(3, "Fast commit replay failed, err = %d\n", err);
+
+       return err;
+}
+
 /**
- * journal_recover - recovers a on-disk journal
+ * jbd2_journal_recover - recovers a on-disk journal
  * @journal: the journal to recover
  *
  * The primary function for recovering the log contents when mounting a
@@ -245,7 +281,7 @@ do {                                                                        \
  * blocks.  In the third and final pass, we replay any un-revoked blocks
  * in the log.
  */
-int journal_recover(journal_t *journal)
+int jbd2_journal_recover(journal_t *journal)
 {
        int                     err, err2;
        journal_superblock_t *  sb;
@@ -263,8 +299,8 @@ int journal_recover(journal_t *journal)
 
        if (!sb->s_start) {
                jbd_debug(1, "No recovery required, last transaction %d\n",
-                         ext2fs_be32_to_cpu(sb->s_sequence));
-               journal->j_transaction_sequence = ext2fs_be32_to_cpu(sb->s_sequence) + 1;
+                         be32_to_cpu(sb->s_sequence));
+               journal->j_transaction_sequence = be32_to_cpu(sb->s_sequence) + 1;
                return 0;
        }
 
@@ -284,13 +320,13 @@ int journal_recover(journal_t *journal)
         * any existing commit records in the log. */
        journal->j_transaction_sequence = ++info.end_transaction;
 
-       journal_clear_revoke(journal);
+       jbd2_journal_clear_revoke(journal);
        err2 = sync_blockdev(journal->j_fs_dev);
        if (!err)
                err = err2;
        /* Make sure all replayed data is on permanent storage */
-       if (journal->j_flags & JFS_BARRIER) {
-               err2 = blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL);
+       if (journal->j_flags & JBD2_BARRIER) {
+               err2 = blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL);
                if (!err)
                        err = err2;
        }
@@ -298,19 +334,19 @@ int journal_recover(journal_t *journal)
 }
 
 /**
- * journal_skip_recovery - Start journal and wipe exiting records
+ * jbd2_journal_skip_recovery - Start journal and wipe exiting records
  * @journal: journal to startup
  *
  * Locate any valid recovery information from the journal and set up the
  * journal structures in memory to ignore it (presumably because the
  * caller has evidence that it is out of date).
- * This function does'nt appear to be exorted..
+ * This function doesn't appear to be exported..
  *
  * We perform one pass over the journal to allow us to tell the user how
  * much recovery information is being erased, and to let us initialise
  * the journal transaction sequence numbers to the next unused ID.
  */
-int journal_skip_recovery(journal_t *journal)
+int jbd2_journal_skip_recovery(journal_t *journal)
 {
        int                     err;
 
@@ -324,9 +360,9 @@ int journal_skip_recovery(journal_t *journal)
                printk(KERN_ERR "JBD2: error %d scanning journal\n", err);
                ++journal->j_transaction_sequence;
        } else {
-#ifdef CONFIG_JFS_DEBUG
-               int dropped = info.end_transaction -
-                       ext2fs_be32_to_cpu(journal->j_superblock->s_sequence);
+#ifdef CONFIG_JBD2_DEBUG
+               int dropped = info.end_transaction - 
+                       be32_to_cpu(journal->j_superblock->s_sequence);
                jbd_debug(1,
                          "JBD2: ignoring %d transaction%s from the journal.\n",
                          dropped, (dropped == 1) ? "" : "s");
@@ -338,24 +374,12 @@ int journal_skip_recovery(journal_t *journal)
        return err;
 }
 
-static inline __u32 get_be32(__be32 *p)
-{
-       unsigned char *cp = (unsigned char *) p;
-       __u32 ret;
-
-       ret = *cp++;
-       ret = (ret << 8) + *cp++;
-       ret = (ret << 8) + *cp++;
-       ret = (ret << 8) + *cp++;
-       return ret;
-}
-
 static inline unsigned long long read_tag_block(journal_t *journal,
                                                journal_block_tag_t *tag)
 {
-       unsigned long long block = get_be32(&tag->t_blocknr);
-       if (jfs_has_feature_64bit(journal))
-               block |= (u64)get_be32(&tag->t_blocknr_high) << 32;
+       unsigned long long block = be32_to_cpu(tag->t_blocknr);
+       if (jbd2_has_feature_64bit(journal))
+               block |= (u64)be32_to_cpu(tag->t_blocknr_high) << 32;
        return block;
 }
 
@@ -394,10 +418,10 @@ static int calc_chksums(journal_t *journal, struct buffer_head *bh,
 static int jbd2_commit_block_csum_verify(journal_t *j, void *buf)
 {
        struct commit_header *h;
-       __u32 provided;
+       __be32 provided;
        __u32 calculated;
 
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return 1;
 
        h = buf;
@@ -406,7 +430,7 @@ static int jbd2_commit_block_csum_verify(journal_t *j, void *buf)
        calculated = jbd2_chksum(j, j->j_csum_seed, buf, j->j_blocksize);
        h->h_chksum[0] = provided;
 
-       return provided == ext2fs_cpu_to_be32(calculated);
+       return provided == cpu_to_be32(calculated);
 }
 
 static int jbd2_block_tag_csum_verify(journal_t *j, journal_block_tag_t *tag,
@@ -414,19 +438,19 @@ static int jbd2_block_tag_csum_verify(journal_t *j, journal_block_tag_t *tag,
 {
        journal_block_tag3_t *tag3 = (journal_block_tag3_t *)tag;
        __u32 csum32;
-       __u32 seq;
+       __be32 seq;
 
-       if (!journal_has_csum_v2or3(j))
+       if (!jbd2_journal_has_csum_v2or3(j))
                return 1;
 
-       seq = ext2fs_cpu_to_be32(sequence);
+       seq = cpu_to_be32(sequence);
        csum32 = jbd2_chksum(j, j->j_csum_seed, (__u8 *)&seq, sizeof(seq));
        csum32 = jbd2_chksum(j, csum32, buf, j->j_blocksize);
 
-       if (jfs_has_feature_csum3(j))
-               return tag3->t_checksum == ext2fs_cpu_to_be32(csum32);
-
-       return tag->t_checksum == ext2fs_cpu_to_be16(csum32);
+       if (jbd2_has_feature_csum3(j))
+               return tag3->t_checksum == cpu_to_be32(csum32);
+       else
+               return tag->t_checksum == cpu_to_be16(csum32);
 }
 
 static int do_one_pass(journal_t *journal,
@@ -444,6 +468,8 @@ static int do_one_pass(journal_t *journal,
        __u32                   crc32_sum = ~0; /* Transactional Checksums */
        int                     descr_csum_size = 0;
        int                     block_error = 0;
+       bool                    need_check_commit_time = false;
+       __u64                   last_trans_commit_time = 0, commit_time;
 
        /*
         * First thing is to establish what we expect to find in the log
@@ -452,8 +478,8 @@ static int do_one_pass(journal_t *journal,
         */
 
        sb = journal->j_superblock;
-       next_commit_ID = ext2fs_be32_to_cpu(sb->s_sequence);
-       next_log_block = ext2fs_be32_to_cpu(sb->s_start);
+       next_commit_ID = be32_to_cpu(sb->s_sequence);
+       next_log_block = be32_to_cpu(sb->s_start);
 
        first_commit_ID = next_commit_ID;
        if (pass == PASS_SCAN)
@@ -486,7 +512,9 @@ static int do_one_pass(journal_t *journal,
                                break;
 
                jbd_debug(2, "Scanning for sequence ID %u at %lu/%lu\n",
-                         next_commit_ID, next_log_block, journal->j_last);
+                         next_commit_ID, next_log_block,
+                         jbd2_has_feature_fast_commit(journal) ?
+                         journal->j_fc_last : journal->j_last);
 
                /* Skip over each chunk of the transaction looking
                 * either the next descriptor block or the final commit
@@ -508,13 +536,13 @@ static int do_one_pass(journal_t *journal,
 
                tmp = (journal_header_t *)bh->b_data;
 
-               if (tmp->h_magic != ext2fs_cpu_to_be32(JFS_MAGIC_NUMBER)) {
+               if (tmp->h_magic != cpu_to_be32(JBD2_MAGIC_NUMBER)) {
                        brelse(bh);
                        break;
                }
 
-               blocktype = ext2fs_be32_to_cpu(tmp->h_blocktype);
-               sequence = ext2fs_be32_to_cpu(tmp->h_sequence);
+               blocktype = be32_to_cpu(tmp->h_blocktype);
+               sequence = be32_to_cpu(tmp->h_sequence);
                jbd_debug(3, "Found magic %d, sequence %d\n",
                          blocktype, sequence);
 
@@ -528,17 +556,29 @@ static int do_one_pass(journal_t *journal,
                 * to do with it?  That depends on the pass... */
 
                switch(blocktype) {
-               case JFS_DESCRIPTOR_BLOCK:
+               case JBD2_DESCRIPTOR_BLOCK:
                        /* Verify checksum first */
-                       if (journal_has_csum_v2or3(journal))
+                       if (jbd2_journal_has_csum_v2or3(journal))
                                descr_csum_size =
-                                       sizeof(struct journal_block_tail);
+                                       sizeof(struct jbd2_journal_block_tail);
                        if (descr_csum_size > 0 &&
-                           !jbd2_descr_block_csum_verify(journal,
-                                                         bh->b_data)) {
-                               err = -EFSBADCRC;
-                               brelse(bh);
-                               goto failed;
+                           !jbd2_descriptor_block_csum_verify(journal,
+                                                              bh->b_data)) {
+                               /*
+                                * PASS_SCAN can see stale blocks due to lazy
+                                * journal init. Don't error out on those yet.
+                                */
+                               if (pass != PASS_SCAN) {
+                                       pr_err("JBD2: Invalid checksum recovering block %lu in log\n",
+                                              next_log_block);
+                                       err = -EFSBADCRC;
+                                       brelse(bh);
+                                       goto failed;
+                               }
+                               need_check_commit_time = true;
+                               jbd_debug(1,
+                                       "invalid descriptor block found in %lu\n",
+                                       next_log_block);
                        }
 
                        /* If it is a valid descriptor block, replay it
@@ -547,7 +587,8 @@ static int do_one_pass(journal_t *journal,
                         * just skip over the blocks it describes. */
                        if (pass != PASS_REPLAY) {
                                if (pass == PASS_SCAN &&
-                                   jfs_has_feature_checksum(journal) &&
+                                   jbd2_has_feature_checksum(journal) &&
+                                   !need_check_commit_time &&
                                    !info->end_transaction) {
                                        if (calc_chksums(journal, bh,
                                                        &next_log_block,
@@ -574,7 +615,7 @@ static int do_one_pass(journal_t *journal,
                                unsigned long io_block;
 
                                tag = (journal_block_tag_t *) tagp;
-                               flags = ext2fs_be16_to_cpu(tag->t_flags);
+                               flags = be16_to_cpu(tag->t_flags);
 
                                io_block = next_log_block++;
                                wrap(journal, next_log_block);
@@ -597,7 +638,7 @@ static int do_one_pass(journal_t *journal,
                                        /* If the block has been
                                         * revoked, then we're all done
                                         * here. */
-                                       if (journal_test_revoke
+                                       if (jbd2_journal_test_revoke
                                            (journal, blocknr,
                                             next_commit_ID)) {
                                                brelse(obh);
@@ -608,13 +649,13 @@ static int do_one_pass(journal_t *journal,
                                        /* Look for block corruption */
                                        if (!jbd2_block_tag_csum_verify(
                                                journal, tag, obh->b_data,
-                                               ext2fs_be32_to_cpu(tmp->h_sequence))) {
+                                               be32_to_cpu(tmp->h_sequence))) {
                                                brelse(obh);
                                                success = -EFSBADCRC;
                                                printk(KERN_ERR "JBD2: Invalid "
                                                       "checksum recovering "
-                                                      "block %llu in log\n",
-                                                      blocknr);
+                                                      "data block %llu in "
+                                                      "log\n", blocknr);
                                                block_error = 1;
                                                goto skip_write;
                                        }
@@ -637,10 +678,9 @@ static int do_one_pass(journal_t *journal,
                                        lock_buffer(nbh);
                                        memcpy(nbh->b_data, obh->b_data,
                                                        journal->j_blocksize);
-                                       if (flags & JFS_FLAG_ESCAPE) {
-                                               __u32 magic = ext2fs_cpu_to_be32(JFS_MAGIC_NUMBER);
-                                               memcpy(nbh->b_data, &magic,
-                                                      sizeof(magic));
+                                       if (flags & JBD2_FLAG_ESCAPE) {
+                                               *((__be32 *)nbh->b_data) =
+                                               cpu_to_be32(JBD2_MAGIC_NUMBER);
                                        }
 
                                        BUFFER_TRACE(nbh, "marking dirty");
@@ -656,17 +696,17 @@ static int do_one_pass(journal_t *journal,
 
                        skip_write:
                                tagp += tag_bytes;
-                               if (!(flags & JFS_FLAG_SAME_UUID))
+                               if (!(flags & JBD2_FLAG_SAME_UUID))
                                        tagp += 16;
 
-                               if (flags & JFS_FLAG_LAST_TAG)
+                               if (flags & JBD2_FLAG_LAST_TAG)
                                        break;
                        }
 
                        brelse(bh);
                        continue;
 
-               case JFS_COMMIT_BLOCK:
+               case JBD2_COMMIT_BLOCK:
                        /*     How to differentiate between interrupted commit
                         *               and journal corruption ?
                         *
@@ -697,20 +737,47 @@ static int do_one_pass(journal_t *journal,
                         *       mentioned conditions. Hence assume
                         *       "Interrupted Commit".)
                         */
+                       commit_time = be64_to_cpu(
+                               ((struct commit_header *)bh->b_data)->h_commit_sec);
+                       /*
+                        * If need_check_commit_time is set, it means we are in
+                        * PASS_SCAN and csum verify failed before. If
+                        * commit_time is increasing, it's the same journal,
+                        * otherwise it is stale journal block, just end this
+                        * recovery.
+                        */
+                       if (need_check_commit_time) {
+                               if (commit_time >= last_trans_commit_time) {
+                                       pr_err("JBD2: Invalid checksum found in transaction %u\n",
+                                              next_commit_ID);
+                                       err = -EFSBADCRC;
+                                       brelse(bh);
+                                       goto failed;
+                               }
+                       ignore_crc_mismatch:
+                               /*
+                                * It likely does not belong to same journal,
+                                * just end this recovery with success.
+                                */
+                               jbd_debug(1, "JBD2: Invalid checksum ignored in transaction %u, likely stale data\n",
+                                         next_commit_ID);
+                               err = 0;
+                               brelse(bh);
+                               goto done;
+                       }
 
-                       /* Found an expected commit block: if checksums
-                        * are present verify them in PASS_SCAN; else not
+                       /*
+                        * Found an expected commit block: if checksums
+                        * are present, verify them in PASS_SCAN; else not
                         * much to do other than move on to the next sequence
-                        * number. */
+                        * number.
+                        */
                        if (pass == PASS_SCAN &&
-                           jfs_has_feature_checksum(journal)) {
-                               int chksum_err, chksum_seen;
+                           jbd2_has_feature_checksum(journal)) {
                                struct commit_header *cbh =
                                        (struct commit_header *)bh->b_data;
                                unsigned found_chksum =
-                                       ext2fs_be32_to_cpu(cbh->h_chksum[0]);
-
-                               chksum_err = chksum_seen = 0;
+                                       be32_to_cpu(cbh->h_chksum[0]);
 
                                if (info->end_transaction) {
                                        journal->j_failed_commit =
@@ -719,56 +786,52 @@ static int do_one_pass(journal_t *journal,
                                        break;
                                }
 
-                               if (crc32_sum == found_chksum &&
-                                   cbh->h_chksum_type == JFS_CRC32_CHKSUM &&
-                                   cbh->h_chksum_size ==
-                                               JFS_CRC32_CHKSUM_SIZE)
-                                      chksum_seen = 1;
-                               else if (!(cbh->h_chksum_type == 0 &&
-                                            cbh->h_chksum_size == 0 &&
-                                            found_chksum == 0 &&
-                                            !chksum_seen))
-                               /*
-                                * If fs is mounted using an old kernel and then
-                                * kernel with journal_chksum is used then we
-                                * get a situation where the journal flag has
-                                * checksum flag set but checksums are not
-                                * present i.e chksum = 0, in the individual
-                                * commit blocks.
-                                * Hence to avoid checksum failures, in this
-                                * situation, this extra check is added.
-                                */
-                                               chksum_err = 1;
+                               /* Neither checksum match nor unused? */
+                               if (!((crc32_sum == found_chksum &&
+                                      cbh->h_chksum_type ==
+                                               JBD2_CRC32_CHKSUM &&
+                                      cbh->h_chksum_size ==
+                                               JBD2_CRC32_CHKSUM_SIZE) ||
+                                     (cbh->h_chksum_type == 0 &&
+                                      cbh->h_chksum_size == 0 &&
+                                      found_chksum == 0)))
+                                       goto chksum_error;
 
-                               if (chksum_err) {
-                                       info->end_transaction = next_commit_ID;
-
-                                       if (!jfs_has_feature_async_commit(journal)){
-                                               journal->j_failed_commit =
-                                                       next_commit_ID;
-                                               brelse(bh);
-                                               break;
-                                       }
-                               }
                                crc32_sum = ~0;
                        }
                        if (pass == PASS_SCAN &&
                            !jbd2_commit_block_csum_verify(journal,
                                                           bh->b_data)) {
+                       chksum_error:
+                               if (commit_time < last_trans_commit_time)
+                                       goto ignore_crc_mismatch;
                                info->end_transaction = next_commit_ID;
 
-                               if (!jfs_has_feature_async_commit(journal)) {
+                               if (!jbd2_has_feature_async_commit(journal)) {
                                        journal->j_failed_commit =
                                                next_commit_ID;
                                        brelse(bh);
                                        break;
                                }
                        }
+                       if (pass == PASS_SCAN)
+                               last_trans_commit_time = commit_time;
                        brelse(bh);
                        next_commit_ID++;
                        continue;
 
-               case JFS_REVOKE_BLOCK:
+               case JBD2_REVOKE_BLOCK:
+                       /*
+                        * Check revoke block crc in pass_scan, if csum verify
+                        * failed, check commit block time later.
+                        */
+                       if (pass == PASS_SCAN &&
+                           !jbd2_descriptor_block_csum_verify(journal,
+                                                              bh->b_data)) {
+                               jbd_debug(1, "JBD2: invalid revoke block found in %lu\n",
+                                         next_log_block);
+                               need_check_commit_time = true;
+                       }
                        /* If we aren't in the REVOKE pass, then we can
                         * just skip over this block. */
                        if (pass != PASS_REVOKE) {
@@ -813,6 +876,13 @@ static int do_one_pass(journal_t *journal,
                                success = -EIO;
                }
        }
+
+       if (jbd2_has_feature_fast_commit(journal) &&  pass != PASS_REVOKE) {
+               err = fc_do_one_pass(journal, info, pass);
+               if (err)
+                       success = err;
+       }
+
        if (block_error && success == 0)
                success = -EIO;
        return success;
@@ -821,51 +891,28 @@ static int do_one_pass(journal_t *journal,
        return err;
 }
 
-static int jbd2_revoke_block_csum_verify(journal_t *j,
-                                        void *buf)
-{
-       struct journal_revoke_tail *tail;
-       __u32 provided;
-       __u32 calculated;
-
-       if (!journal_has_csum_v2or3(j))
-               return 1;
-
-       tail = (struct journal_revoke_tail *)((char *)buf + j->j_blocksize -
-                       sizeof(struct journal_revoke_tail));
-       provided = tail->r_checksum;
-       tail->r_checksum = 0;
-       calculated = jbd2_chksum(j, j->j_csum_seed, buf, j->j_blocksize);
-       tail->r_checksum = provided;
-
-       return provided == ext2fs_cpu_to_be32(calculated);
-}
-
 /* Scan a revoke record, marking all blocks mentioned as revoked. */
 
 static int scan_revoke_records(journal_t *journal, struct buffer_head *bh,
                               tid_t sequence, struct recovery_info *info)
 {
-       journal_revoke_header_t *header;
+       jbd2_journal_revoke_header_t *header;
        int offset, max;
-       unsigned csum_size = 0;
+       int csum_size = 0;
        __u32 rcount;
        int record_len = 4;
 
-       header = (journal_revoke_header_t *) bh->b_data;
-       offset = sizeof(journal_revoke_header_t);
-       rcount = ext2fs_be32_to_cpu(header->r_count);
-
-       if (!jbd2_revoke_block_csum_verify(journal, header))
-               return -EFSBADCRC;
+       header = (jbd2_journal_revoke_header_t *) bh->b_data;
+       offset = sizeof(jbd2_journal_revoke_header_t);
+       rcount = be32_to_cpu(header->r_count);
 
-       if (journal_has_csum_v2or3(journal))
-               csum_size = sizeof(struct journal_revoke_tail);
+       if (jbd2_journal_has_csum_v2or3(journal))
+               csum_size = sizeof(struct jbd2_journal_block_tail);
        if (rcount > journal->j_blocksize - csum_size)
                return -EINVAL;
        max = rcount;
 
-       if (jfs_has_feature_64bit(journal))
+       if (jbd2_has_feature_64bit(journal))
                record_len = 8;
 
        while (offset + record_len <= max) {
@@ -873,11 +920,11 @@ static int scan_revoke_records(journal_t *journal, struct buffer_head *bh,
                int err;
 
                if (record_len == 4)
-                       blocknr = ext2fs_be32_to_cpu(* ((__u32 *) (bh->b_data+offset)));
+                       blocknr = be32_to_cpu(* ((__be32 *) (bh->b_data+offset)));
                else
-                       blocknr = ext2fs_be64_to_cpu(* ((__u64 *) (bh->b_data+offset)));
+                       blocknr = be64_to_cpu(* ((__be64 *) (bh->b_data+offset)));
                offset += record_len;
-               err = journal_set_revoke(journal, blocknr, sequence);
+               err = jbd2_journal_set_revoke(journal, blocknr, sequence);
                if (err)
                        return err;
                ++info->nr_revokes;
index e32f89d..788e0d0 100644 (file)
@@ -30,18 +30,21 @@ struct region_struct {
        region_addr_t   min;
        region_addr_t   max;
        struct region_el *allocated;
+       struct region_el *last;
 };
 
 region_t region_create(region_addr_t min, region_addr_t max)
 {
        region_t        region;
+       errcode_t       retval;
 
-       region = malloc(sizeof(struct region_struct));
-       if (!region)
+       retval = ext2fs_get_memzero(sizeof(struct region_struct), &region);
+       if (retval)
                return NULL;
-       memset(region, 0, sizeof(struct region_struct));
+
        region->min = min;
        region->max = max;
+       region->last = NULL;
        return region;
 }
 
@@ -51,16 +54,17 @@ void region_free(region_t region)
 
        for (r = region->allocated; r; r = next) {
                next = r->next;
-               free(r);
+               ext2fs_free_mem(&r);
        }
        memset(region, 0, sizeof(struct region_struct));
-       free(region);
+       ext2fs_free_mem(&region);
 }
 
 int region_allocate(region_t region, region_addr_t start, int n)
 {
        struct region_el        *r, *new_region, *prev, *next;
        region_addr_t end;
+       errcode_t retval;
 
        end = start+n;
        if ((start < region->min) || (end > region->max))
@@ -68,9 +72,21 @@ int region_allocate(region_t region, region_addr_t start, int n)
        if (n == 0)
                return 1;
 
+       if (region->last && region->last->end == start &&
+           !region->last->next) {
+               region->last->end = end;
+               return 0;
+       }
+       if (region->last && start > region->last->end &&
+           !region->last->next) {
+               r = NULL;
+               prev = region->last;
+               goto append_to_list;
+       }
+
        /*
         * Search through the linked list.  If we find that it
-        * conflicts witih something that's already allocated, return
+        * conflicts with something that's already allocated, return
         * 1; if we can find an existing region which we can grow, do
         * so.  Otherwise, stop when we find the appropriate place
         * insert a new region element into the linked list.
@@ -91,7 +107,9 @@ int region_allocate(region_t region, region_addr_t start, int n)
                                if (end == next->start) {
                                        r->end = next->end;
                                        r->next = next->next;
-                                       free(next);
+                                       ext2fs_free_mem(&next);
+                                       if (!r->next)
+                                               region->last = r;
                                        return 0;
                                }
                        }
@@ -104,12 +122,15 @@ int region_allocate(region_t region, region_addr_t start, int n)
        /*
         * Insert a new region element structure into the linked list
         */
-       new_region = malloc(sizeof(struct region_el));
-       if (!new_region)
+append_to_list:
+       retval = ext2fs_get_mem(sizeof(struct region_el), &new_region);
+       if (retval)
                return -1;
        new_region->start = start;
        new_region->end = start + n;
        new_region->next = r;
+       if (!new_region->next)
+               region->last = new_region;
        if (prev)
                prev->next = new_region;
        else
index 22a58f3..1ff4aa1 100644 (file)
@@ -80,10 +80,10 @@ struct fill_dir_struct {
        errcode_t err;
        e2fsck_t ctx;
        struct hash_entry *harray;
-       int max_array, num_array;
-       unsigned int dir_size;
+       blk_t max_array, num_array;
+       ext2_off64_t dir_size;
        int compress;
-       ino_t parent;
+       ext2_ino_t parent;
        ext2_ino_t dir;
 };
 
@@ -95,12 +95,27 @@ struct hash_entry {
 };
 
 struct out_dir {
-       int             num;
-       int             max;
+       blk_t           num;
+       blk_t           max;
        char            *buf;
        ext2_dirhash_t  *hashes;
 };
 
+#define DOTDOT_OFFSET 12
+
+static int is_fake_entry(ext2_filsys fs, int lblk, unsigned int offset)
+{
+       /* Entries in the first block before this value refer to . or .. */
+       if (lblk == 0 && offset <= DOTDOT_OFFSET)
+               return 1;
+       /* Check if this is likely the csum entry */
+       if (ext2fs_has_feature_metadata_csum(fs->super) &&
+           (offset & (fs->blocksize - 1)) ==
+                           fs->blocksize - sizeof(struct ext2_dir_entry_tail))
+               return 1;
+       return 0;
+}
+
 static int fill_dir_block(ext2_filsys fs,
                          blk64_t *block_nr,
                          e2_blkcnt_t blockcnt,
@@ -109,11 +124,11 @@ static int fill_dir_block(ext2_filsys fs,
                          void *priv_data)
 {
        struct fill_dir_struct  *fd = (struct fill_dir_struct *) priv_data;
-       struct hash_entry       *new_array, *ent;
+       struct hash_entry       *ent;
        struct ext2_dir_entry   *dirent;
        char                    *dir;
        unsigned int            offset, dir_offset, rec_len, name_len;
-       int                     hash_alg;
+       int                     hash_alg, hash_flags, hash_in_entry;
 
        if (blockcnt < 0)
                return 0;
@@ -139,6 +154,8 @@ static int fill_dir_block(ext2_filsys fs,
                if (fd->err)
                        return BLOCK_ABORT;
        }
+       hash_flags = fd->inode->i_flags & EXT4_CASEFOLD_FL;
+       hash_in_entry = ext4_hash_in_dirent(fd->inode);
        hash_alg = fs->super->s_def_hash_version;
        if ((hash_alg <= EXT2_HASH_TEA) &&
            (fs->super->s_flags & EXT2_FLAGS_UNSIGNED_HASH))
@@ -146,19 +163,28 @@ static int fill_dir_block(ext2_filsys fs,
        /* While the directory block is "hot", index it. */
        dir_offset = 0;
        while (dir_offset < fs->blocksize) {
+               int min_rec = EXT2_DIR_ENTRY_HEADER_LEN;
+               int extended = hash_in_entry && !is_fake_entry(fs, blockcnt, dir_offset);
+
+               if (extended)
+                       min_rec += EXT2_DIR_ENTRY_HASH_LEN;
                dirent = (struct ext2_dir_entry *) (dir + dir_offset);
                (void) ext2fs_get_rec_len(fs, dirent, &rec_len);
                name_len = ext2fs_dirent_name_len(dirent);
                if (((dir_offset + rec_len) > fs->blocksize) ||
-                   (rec_len < 8) ||
+                   (rec_len < min_rec) ||
                    ((rec_len % 4) != 0) ||
-                   (name_len + 8 > rec_len)) {
+                   (name_len + min_rec > rec_len)) {
                        fd->err = EXT2_ET_DIR_CORRUPTED;
                        return BLOCK_ABORT;
                }
                dir_offset += rec_len;
                if (dirent->inode == 0)
                        continue;
+               if ((name_len) == 0) {
+                       fd->err = EXT2_ET_DIR_CORRUPTED;
+                       return BLOCK_ABORT;
+               }
                if (!fd->compress && (name_len == 1) &&
                    (dirent->name[0] == '.'))
                        continue;
@@ -168,26 +194,33 @@ static int fill_dir_block(ext2_filsys fs,
                        continue;
                }
                if (fd->num_array >= fd->max_array) {
-                       new_array = realloc(fd->harray,
-                           sizeof(struct hash_entry) * (fd->max_array+500));
-                       if (!new_array) {
-                               fd->err = ENOMEM;
+                       errcode_t retval;
+
+                       retval = ext2fs_resize_array(sizeof(struct hash_entry),
+                                                    fd->max_array,
+                                                    fd->max_array + 500,
+                                                    &fd->harray);
+                       if (retval) {
+                               fd->err = retval;
                                return BLOCK_ABORT;
                        }
-                       fd->harray = new_array;
                        fd->max_array += 500;
                }
                ent = fd->harray + fd->num_array++;
                ent->dir = dirent;
-               fd->dir_size += EXT2_DIR_REC_LEN(name_len);
+               fd->dir_size += ext2fs_dir_rec_len(name_len, extended);
                ent->ino = dirent->inode;
-               if (fd->compress)
+               if (extended) {
+                       ent->hash = EXT2_DIRENT_HASH(dirent);
+                       ent->minor_hash = EXT2_DIRENT_MINOR_HASH(dirent);
+               } else if (fd->compress) {
                        ent->hash = ent->minor_hash = 0;
-               else {
-                       fd->err = ext2fs_dirhash(hash_alg, dirent->name,
-                                                name_len,
-                                                fs->super->s_hash_seed,
-                                                &ent->hash, &ent->minor_hash);
+               } else {
+                       fd->err = ext2fs_dirhash2(hash_alg,
+                                                 dirent->name, name_len,
+                                                 fs->encoding, hash_flags,
+                                                 fs->super->s_hash_seed,
+                                                 &ent->hash, &ent->minor_hash);
                        if (fd->err)
                                return BLOCK_ABORT;
                }
@@ -205,6 +238,22 @@ static EXT2_QSORT_TYPE ino_cmp(const void *a, const void *b)
        return (he_a->ino - he_b->ino);
 }
 
+struct name_cmp_ctx
+{
+       int casefold;
+       const struct ext2fs_nls_table *tbl;
+};
+
+static int same_name(const struct name_cmp_ctx *cmp_ctx, char *s1,
+                    int len1, char *s2, int len2)
+{
+       if (!cmp_ctx->casefold)
+               return (len1 == len2 && !memcmp(s1, s2, len1));
+       else
+               return !ext2fs_casefold_cmp(cmp_ctx->tbl,
+                                           s1, len1, s2, len2);
+}
+
 /* Used for sorting the hash entry */
 static EXT2_QSORT_TYPE name_cmp(const void *a, const void *b)
 {
@@ -219,7 +268,31 @@ static EXT2_QSORT_TYPE name_cmp(const void *a, const void *b)
        if (min_len > he_b_len)
                min_len = he_b_len;
 
-       ret = strncmp(he_a->dir->name, he_b->dir->name, min_len);
+       ret = memcmp(he_a->dir->name, he_b->dir->name, min_len);
+       if (ret == 0) {
+               if (he_a_len > he_b_len)
+                       ret = 1;
+               else if (he_a_len < he_b_len)
+                       ret = -1;
+               else
+                       ret = he_b->dir->inode - he_a->dir->inode;
+       }
+       return ret;
+}
+
+static EXT2_QSORT_TYPE name_cf_cmp(const struct name_cmp_ctx *ctx,
+                                  const void *a, const void *b)
+{
+       const struct hash_entry *he_a = (const struct hash_entry *) a;
+       const struct hash_entry *he_b = (const struct hash_entry *) b;
+       unsigned int he_a_len, he_b_len, min_len;
+       int ret;
+
+       he_a_len = ext2fs_dirent_name_len(he_a->dir);
+       he_b_len = ext2fs_dirent_name_len(he_b->dir);
+
+       ret = ext2fs_casefold_cmp(ctx->tbl, he_a->dir->name, he_a_len,
+                                 he_b->dir->name, he_b_len);
        if (ret == 0) {
                if (he_a_len > he_b_len)
                        ret = 1;
@@ -232,8 +305,9 @@ static EXT2_QSORT_TYPE name_cmp(const void *a, const void *b)
 }
 
 /* Used for sorting the hash entry */
-static EXT2_QSORT_TYPE hash_cmp(const void *a, const void *b)
+static EXT2_QSORT_TYPE hash_cmp(const void *a, const void *b, void *arg)
 {
+       const struct name_cmp_ctx *ctx = (struct name_cmp_ctx *) arg;
        const struct hash_entry *he_a = (const struct hash_entry *) a;
        const struct hash_entry *he_b = (const struct hash_entry *) b;
        int     ret;
@@ -247,30 +321,39 @@ static EXT2_QSORT_TYPE hash_cmp(const void *a, const void *b)
                        ret = 1;
                else if (he_a->minor_hash < he_b->minor_hash)
                        ret = -1;
-               else
-                       ret = name_cmp(a, b);
+               else {
+                       if (ctx->casefold)
+                               ret = name_cf_cmp(ctx, a, b);
+                       else
+                               ret = name_cmp(a, b);
+               }
        }
        return ret;
 }
 
 static errcode_t alloc_size_dir(ext2_filsys fs, struct out_dir *outdir,
-                               int blocks)
+                               blk_t blocks)
 {
-       void                    *new_mem;
+       errcode_t retval;
 
        if (outdir->max) {
-               new_mem = realloc(outdir->buf, blocks * fs->blocksize);
-               if (!new_mem)
-                       return ENOMEM;
-               outdir->buf = new_mem;
-               new_mem = realloc(outdir->hashes,
-                                 blocks * sizeof(ext2_dirhash_t));
-               if (!new_mem)
-                       return ENOMEM;
-               outdir->hashes = new_mem;
+               retval = ext2fs_resize_array(fs->blocksize, outdir->max, blocks,
+                                            &outdir->buf);
+               if (retval)
+                       return retval;
+               retval = ext2fs_resize_array(sizeof(ext2_dirhash_t),
+                                            outdir->max, blocks,
+                                            &outdir->hashes);
+               if (retval)
+                       return retval;
        } else {
-               outdir->buf = malloc(blocks * fs->blocksize);
-               outdir->hashes = malloc(blocks * sizeof(ext2_dirhash_t));
+               retval = ext2fs_get_array(fs->blocksize, blocks, &outdir->buf);
+               if (retval)
+                       return retval;
+               retval = ext2fs_get_array(sizeof(ext2_dirhash_t), blocks,
+                                         &outdir->hashes);
+               if (retval)
+                       return retval;
                outdir->num = 0;
        }
        outdir->max = blocks;
@@ -291,11 +374,15 @@ static errcode_t get_next_block(ext2_filsys fs, struct out_dir *outdir,
        errcode_t       retval;
 
        if (outdir->num >= outdir->max) {
-               retval = alloc_size_dir(fs, outdir, outdir->max + 50);
+               int increment = outdir->max / 10;
+
+               if (increment < 50)
+                       increment = 50;
+               retval = alloc_size_dir(fs, outdir, outdir->max + increment);
                if (retval)
                        return retval;
        }
-       *ret = outdir->buf + (outdir->num++ * fs->blocksize);
+       *ret = outdir->buf + (size_t)outdir->num++ * fs->blocksize;
        memset(*ret, 0, fs->blocksize);
        return 0;
 }
@@ -362,15 +449,17 @@ static void mutate_name(char *str, unsigned int *len)
 
 static int duplicate_search_and_fix(e2fsck_t ctx, ext2_filsys fs,
                                    ext2_ino_t ino,
-                                   struct fill_dir_struct *fd)
+                                   struct fill_dir_struct *fd,
+                                   const struct name_cmp_ctx *cmp_ctx)
 {
        struct problem_context  pctx;
-       struct hash_entry       *ent, *prev;
-       int                     i, j;
+       struct hash_entry       *ent, *prev;
+       blk_t                   i, j;
        int                     fixed = 0;
        char                    new_name[256];
        unsigned int            new_len;
        int                     hash_alg;
+       int hash_flags = fd->inode->i_flags & EXT4_CASEFOLD_FL;
 
        clear_problem_context(&pctx);
        pctx.ino = ino;
@@ -384,10 +473,10 @@ static int duplicate_search_and_fix(e2fsck_t ctx, ext2_filsys fs,
                ent = fd->harray + i;
                prev = ent - 1;
                if (!ent->dir->inode ||
-                   (ext2fs_dirent_name_len(ent->dir) !=
-                    ext2fs_dirent_name_len(prev->dir)) ||
-                   strncmp(ent->dir->name, prev->dir->name,
-                            ext2fs_dirent_name_len(ent->dir)))
+                   !same_name(cmp_ctx, ent->dir->name,
+                              ext2fs_dirent_name_len(ent->dir),
+                              prev->dir->name,
+                              ext2fs_dirent_name_len(prev->dir)))
                        continue;
                pctx.dirent = ent->dir;
                if ((ent->dir->inode == prev->dir->inode) &&
@@ -397,15 +486,30 @@ static int duplicate_search_and_fix(e2fsck_t ctx, ext2_filsys fs,
                        fixed++;
                        continue;
                }
+               /* Can't alter encrypted name without key, so just drop it */
+               if (fd->inode->i_flags & EXT4_ENCRYPT_FL) {
+                       if (fix_problem(ctx, PR_2_NON_UNIQUE_FILE_NO_RENAME, &pctx)) {
+                               e2fsck_adjust_inode_count(ctx, ent->dir->inode, -1);
+                               ent->dir->inode = 0;
+                               fixed++;
+                               continue;
+                       }
+               }
                new_len = ext2fs_dirent_name_len(ent->dir);
+               if (new_len == 0) {
+                        /* should never happen */
+                       ext2fs_unmark_valid(fs);
+                       continue;
+               }
                memcpy(new_name, ent->dir->name, new_len);
                mutate_name(new_name, &new_len);
                for (j=0; j < fd->num_array; j++) {
                        if ((i==j) ||
-                           (new_len !=
-                            (unsigned) ext2fs_dirent_name_len(fd->harray[j].dir)) ||
-                           strncmp(new_name, fd->harray[j].dir->name, new_len))
+                           !same_name(cmp_ctx, new_name, new_len,
+                                      fd->harray[j].dir->name,
+                                      ext2fs_dirent_name_len(fd->harray[j].dir))) {
                                continue;
+                       }
                        mutate_name(new_name, &new_len);
 
                        j = -1;
@@ -415,9 +519,10 @@ static int duplicate_search_and_fix(e2fsck_t ctx, ext2_filsys fs,
                if (fix_problem(ctx, PR_2_NON_UNIQUE_FILE, &pctx)) {
                        memcpy(ent->dir->name, new_name, new_len);
                        ext2fs_dirent_set_name_len(ent->dir, new_len);
-                       ext2fs_dirhash(hash_alg, new_name, new_len,
-                                      fs->super->s_hash_seed,
-                                      &ent->hash, &ent->minor_hash);
+                       ext2fs_dirhash2(hash_alg, new_name, new_len,
+                                       fs->encoding, hash_flags,
+                                       fs->super->s_hash_seed,
+                                       &ent->hash, &ent->minor_hash);
                        fixed++;
                }
        }
@@ -435,10 +540,12 @@ static errcode_t copy_dir_entries(e2fsck_t ctx,
        struct hash_entry       *ent;
        struct ext2_dir_entry   *dirent;
        unsigned int            rec_len, prev_rec_len, left, slack, offset;
-       int                     i;
+       blk_t                   i;
        ext2_dirhash_t          prev_hash;
        int                     csum_size = 0;
        struct                  ext2_dir_entry_tail *t;
+       int hash_in_entry = ext4_hash_in_dirent(fd->inode);
+       int min_rec_len = ext2fs_dir_rec_len(1, hash_in_entry);
 
        if (ctx->htree_slack_percentage == 255) {
                profile_get_uint(ctx->profile, "options",
@@ -467,15 +574,16 @@ static errcode_t copy_dir_entries(e2fsck_t ctx,
        prev_rec_len = 0;
        rec_len = 0;
        left = fs->blocksize - csum_size;
-       slack = fd->compress ? 12 :
+       slack = fd->compress ? min_rec_len :
                ((fs->blocksize - csum_size) * ctx->htree_slack_percentage)/100;
-       if (slack < 12)
-               slack = 12;
+       if (slack < min_rec_len)
+               slack = min_rec_len;
        for (i = 0; i < fd->num_array; i++) {
                ent = fd->harray + i;
                if (ent->dir->inode == 0)
                        continue;
-               rec_len = EXT2_DIR_REC_LEN(ext2fs_dirent_name_len(ent->dir));
+               rec_len = ext2fs_dir_rec_len(ext2fs_dirent_name_len(ent->dir),
+                                            hash_in_entry);
                if (rec_len > left) {
                        if (left) {
                                left += prev_rec_len;
@@ -512,6 +620,11 @@ static errcode_t copy_dir_entries(e2fsck_t ctx,
                prev_rec_len = rec_len;
                memcpy(dirent->name, ent->dir->name,
                       ext2fs_dirent_name_len(dirent));
+               if (hash_in_entry) {
+                       EXT2_DIRENT_HASHES(dirent)->hash = ext2fs_cpu_to_le32(ent->hash);
+                       EXT2_DIRENT_HASHES(dirent)->minor_hash =
+                                                       ext2fs_cpu_to_le32(ent->minor_hash);
+               }
                offset += rec_len;
                left -= rec_len;
                if (left < slack) {
@@ -536,7 +649,8 @@ static errcode_t copy_dir_entries(e2fsck_t ctx,
 
 
 static struct ext2_dx_root_info *set_root_node(ext2_filsys fs, char *buf,
-                                   ext2_ino_t ino, ext2_ino_t parent)
+                                   ext2_ino_t ino, ext2_ino_t parent,
+                                   struct ext2_inode *inode)
 {
        struct ext2_dir_entry           *dir;
        struct ext2_dx_root_info        *root;
@@ -564,7 +678,10 @@ static struct ext2_dx_root_info *set_root_node(ext2_filsys fs, char *buf,
 
        root = (struct ext2_dx_root_info *) (buf+24);
        root->reserved_zero = 0;
-       root->hash_version = fs->super->s_def_hash_version;
+       if (ext4_hash_in_dirent(inode))
+               root->hash_version = EXT2_HASH_SIPHASH;
+       else
+               root->hash_version = fs->super->s_def_hash_version;
        root->info_length = 8;
        root->indirect_levels = 0;
        root->unused_flags = 0;
@@ -603,6 +720,46 @@ static struct ext2_dx_entry *set_int_node(ext2_filsys fs, char *buf)
        return (struct ext2_dx_entry *) limits;
 }
 
+static int alloc_blocks(ext2_filsys fs,
+                       struct ext2_dx_countlimit **limit,
+                       struct ext2_dx_entry **prev_ent,
+                       struct ext2_dx_entry **next_ent,
+                       int *prev_offset, int *next_offset,
+                       struct out_dir *outdir, int i,
+                       int *prev_count, int *next_count)
+{
+       errcode_t       retval;
+       char            *block_start;
+
+       if (*limit)
+               (*limit)->limit = (*limit)->count =
+                       ext2fs_cpu_to_le16((*limit)->limit);
+       *prev_ent = (struct ext2_dx_entry *) (outdir->buf + *prev_offset);
+       (*prev_ent)->block = ext2fs_cpu_to_le32(outdir->num);
+
+       if (i != 1)
+               (*prev_ent)->hash =
+                       ext2fs_cpu_to_le32(outdir->hashes[i]);
+
+       retval = get_next_block(fs, outdir, &block_start);
+       if (retval)
+               return retval;
+
+       /* outdir->buf might be reallocated */
+       *prev_ent = (struct ext2_dx_entry *) (outdir->buf + *prev_offset);
+
+       *next_ent = set_int_node(fs, block_start);
+       *limit = (struct ext2_dx_countlimit *)(*next_ent);
+       if (next_offset)
+               *next_offset = ((char *) *next_ent - outdir->buf);
+
+       *next_count = (*limit)->limit;
+       (*prev_offset) += sizeof(struct ext2_dx_entry);
+       (*prev_count)--;
+
+       return 0;
+}
+
 /*
  * This function takes the leaf nodes which have been written in
  * outdir, and populates the root node and any necessary interior nodes.
@@ -610,17 +767,17 @@ static struct ext2_dx_entry *set_int_node(ext2_filsys fs, char *buf)
 static errcode_t calculate_tree(ext2_filsys fs,
                                struct out_dir *outdir,
                                ext2_ino_t ino,
-                               ext2_ino_t parent)
+                               ext2_ino_t parent,
+                               struct ext2_inode *inode)
 {
-       struct ext2_dx_root_info        *root_info;
-       struct ext2_dx_entry            *root, *dx_ent = 0;
-       struct ext2_dx_countlimit       *root_limit, *limit;
+       struct ext2_dx_root_info        *root_info;
+       struct ext2_dx_entry            *root, *int_ent, *dx_ent = 0;
+       struct ext2_dx_countlimit       *root_limit, *int_limit, *limit;
        errcode_t                       retval;
-       char                            * block_start;
-       int                             i, c1, c2, nblks;
-       int                             limit_offset, root_offset;
+       int                             i, c1, c2, c3, nblks;
+       int                             limit_offset, int_offset, root_offset;
 
-       root_info = set_root_node(fs, outdir->buf, ino, parent);
+       root_info = set_root_node(fs, outdir->buf, ino, parent, inode);
        root_offset = limit_offset = ((char *) root_info - outdir->buf) +
                root_info->info_length;
        root_limit = (struct ext2_dx_countlimit *) (outdir->buf + limit_offset);
@@ -628,7 +785,7 @@ static errcode_t calculate_tree(ext2_filsys fs,
        nblks = outdir->num;
 
        /* Write out the pointer blocks */
-       if (nblks-1 <= c1) {
+       if (nblks - 1 <= c1) {
                /* Just write out the root block, and we're done */
                root = (struct ext2_dx_entry *) (outdir->buf + root_offset);
                for (i=1; i < nblks; i++) {
@@ -639,31 +796,20 @@ static errcode_t calculate_tree(ext2_filsys fs,
                        root++;
                        c1--;
                }
-       } else {
+       } else if (nblks - 1 <= ext2fs_htree_intnode_maxrecs(fs, c1)) {
                c2 = 0;
-               limit = 0;
+               limit = NULL;
                root_info->indirect_levels = 1;
                for (i=1; i < nblks; i++) {
-                       if (c1 == 0)
+                       if (c2 == 0 && c1 == 0)
                                return ENOSPC;
                        if (c2 == 0) {
-                               if (limit)
-                                       limit->limit = limit->count =
-               ext2fs_cpu_to_le16(limit->limit);
-                               root = (struct ext2_dx_entry *)
-                                       (outdir->buf + root_offset);
-                               root->block = ext2fs_cpu_to_le32(outdir->num);
-                               if (i != 1)
-                                       root->hash =
-                       ext2fs_cpu_to_le32(outdir->hashes[i]);
-                               if ((retval =  get_next_block(fs, outdir,
-                                                             &block_start)))
+                               retval = alloc_blocks(fs, &limit, &root,
+                                                     &dx_ent, &root_offset,
+                                                     NULL, outdir, i, &c1,
+                                                     &c2);
+                               if (retval)
                                        return retval;
-                               dx_ent = set_int_node(fs, block_start);
-                               limit = (struct ext2_dx_countlimit *) dx_ent;
-                               c2 = limit->limit;
-                               root_offset += sizeof(struct ext2_dx_entry);
-                               c1--;
                        }
                        dx_ent->block = ext2fs_cpu_to_le32(i);
                        if (c2 != limit->limit)
@@ -674,6 +820,53 @@ static errcode_t calculate_tree(ext2_filsys fs,
                }
                limit->count = ext2fs_cpu_to_le16(limit->limit - c2);
                limit->limit = ext2fs_cpu_to_le16(limit->limit);
+       } else {
+               c2 = 0;
+               c3 = 0;
+               limit = NULL;
+               int_limit = 0;
+               root_info->indirect_levels = 2;
+               for (i = 1; i < nblks; i++) {
+                       if (c3 == 0 && c2 == 0 && c1 == 0)
+                               return ENOSPC;
+                       if (c3 == 0 && c2 == 0) {
+                               retval = alloc_blocks(fs, &int_limit, &root,
+                                                     &int_ent, &root_offset,
+                                                     &int_offset, outdir, i,
+                                                     &c1, &c2);
+                               if (retval)
+                                       return retval;
+                       }
+                       if (c3 == 0) {
+                               int delta1 = (char *)int_limit - outdir->buf;
+                               int delta2 = (char *)root - outdir->buf;
+
+                               retval = alloc_blocks(fs, &limit, &int_ent,
+                                                     &dx_ent, &int_offset,
+                                                     NULL, outdir, i, &c2,
+                                                     &c3);
+                               if (retval)
+                                       return retval;
+
+                               /* outdir->buf might be reallocated */
+                               int_limit = (struct ext2_dx_countlimit *)
+                                       (outdir->buf + delta1);
+                               root = (struct ext2_dx_entry *)
+                                       (outdir->buf + delta2);
+                       }
+                       dx_ent->block = ext2fs_cpu_to_le32(i);
+                       if (c3 != limit->limit)
+                               dx_ent->hash =
+                                       ext2fs_cpu_to_le32(outdir->hashes[i]);
+                       dx_ent++;
+                       c3--;
+               }
+               int_limit->count = ext2fs_cpu_to_le16(limit->limit - c2);
+               int_limit->limit = ext2fs_cpu_to_le16(limit->limit);
+
+               limit->count = ext2fs_cpu_to_le16(limit->limit - c3);
+               limit->limit = ext2fs_cpu_to_le16(limit->limit);
+
        }
        root_limit = (struct ext2_dx_countlimit *) (outdir->buf + limit_offset);
        root_limit->count = ext2fs_cpu_to_le16(root_limit->limit - c1);
@@ -794,6 +987,7 @@ errcode_t e2fsck_rehash_dir(e2fsck_t ctx, ext2_ino_t ino,
        struct fill_dir_struct  fd = { NULL, NULL, 0, 0, 0, NULL,
                                       0, 0, 0, 0, 0, 0 };
        struct out_dir          outdir = { 0, 0, 0, 0 };
+       struct name_cmp_ctx name_cmp_ctx = {0, NULL};
 
        e2fsck_read_inode(ctx, ino, &inode, "rehash_dir");
 
@@ -801,14 +995,14 @@ errcode_t e2fsck_rehash_dir(e2fsck_t ctx, ext2_ino_t ino,
           (inode.i_flags & EXT4_INLINE_DATA_FL))
                return 0;
 
-       retval = ENOMEM;
-       dir_buf = malloc(inode.i_size);
-       if (!dir_buf)
+       retval = ext2fs_get_mem(inode.i_size, &dir_buf);
+       if (retval)
                goto errout;
 
        fd.max_array = inode.i_size / 32;
-       fd.harray = malloc(fd.max_array * sizeof(struct hash_entry));
-       if (!fd.harray)
+       retval = ext2fs_get_array(sizeof(struct hash_entry),
+                                 fd.max_array, &fd.harray);
+       if (retval)
                goto errout;
 
        fd.ino = ino;
@@ -821,6 +1015,11 @@ errcode_t e2fsck_rehash_dir(e2fsck_t ctx, ext2_ino_t ino,
                fd.compress = 1;
        fd.parent = 0;
 
+       if (fs->encoding && (inode.i_flags & EXT4_CASEFOLD_FL)) {
+               name_cmp_ctx.casefold = 1;
+               name_cmp_ctx.tbl = fs->encoding;
+       }
+
 retry_nohash:
        /* Read in the entire directory into memory */
        retval = ext2fs_block_iterate3(fs, ino, 0, 0,
@@ -849,16 +1048,16 @@ retry_nohash:
        /* Sort the list */
 resort:
        if (fd.compress && fd.num_array > 1)
-               qsort(fd.harray+2, fd.num_array-2, sizeof(struct hash_entry),
-                     hash_cmp);
+               qsort_r(fd.harray+2, fd.num_array-2, sizeof(struct hash_entry),
+                       hash_cmp, &name_cmp_ctx);
        else
-               qsort(fd.harray, fd.num_array, sizeof(struct hash_entry),
-                     hash_cmp);
+               qsort_r(fd.harray, fd.num_array, sizeof(struct hash_entry),
+                       hash_cmp, &name_cmp_ctx);
 
        /*
         * Look for duplicates
         */
-       if (duplicate_search_and_fix(ctx, fs, ino, &fd))
+       if (duplicate_search_and_fix(ctx, fs, ino, &fd, &name_cmp_ctx))
                goto resort;
 
        if (ctx->options & E2F_OPT_NO) {
@@ -883,7 +1082,7 @@ resort:
 
        if (!fd.compress) {
                /* Calculate the interior nodes */
-               retval = calculate_tree(fs, &outdir, ino, fd.parent);
+               retval = calculate_tree(fs, &outdir, ino, fd.parent, fd.inode);
                if (retval)
                        goto errout;
        }
@@ -897,8 +1096,8 @@ resort:
        else
                retval = e2fsck_check_rebuild_extents(ctx, ino, &inode, pctx);
 errout:
-       free(dir_buf);
-       free(fd.harray);
+       ext2fs_free_mem(&dir_buf);
+       ext2fs_free_mem(&fd.harray);
 
        free_out_dir(&outdir);
        return retval;
@@ -951,6 +1150,8 @@ void e2fsck_rehash_directories(e2fsck_t ctx)
                        if (!ext2fs_u32_list_iterate(iter, &ino))
                                break;
                }
+               if (!ext2fs_test_inode_bitmap2(ctx->inode_dir_map, ino))
+                       continue;
 
                pctx.dir = ino;
                if (first) {
index 0543099..fa60878 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * linux/fs/jbd2/revoke.c
  *
@@ -5,10 +6,6 @@
  *
  * Copyright 2000 Red Hat corp --- All Rights Reserved
  *
- * This file is part of the Linux kernel and is made available under
- * the terms of the GNU General Public License, version 2, or at your
- * option, any later version, incorporated herein by reference.
- *
  * Journal revoke routines for the generic filesystem journaling code;
  * part of the ext2fs journaling system.
  *
 #include <linux/init.h>
 #include <linux/bio.h>
 #include <linux/log2.h>
+#include <linux/hash.h>
 #endif
 
-static lkmem_cache_t *jbd2_revoke_record_cache;
-static lkmem_cache_t *jbd2_revoke_table_cache;
+static struct kmem_cache *jbd2_revoke_record_cache;
+static struct kmem_cache *jbd2_revoke_table_cache;
 
 /* Each revoke record represents one single revoked block.  During
    journal replay, this involves recording the transaction ID of the
@@ -121,25 +119,18 @@ struct jbd2_revoke_table_s
 
 
 #ifdef __KERNEL__
-static void write_one_revoke_record(journal_t *, transaction_t *,
+static void write_one_revoke_record(transaction_t *,
                                    struct list_head *,
                                    struct buffer_head **, int *,
-                                   struct jbd2_revoke_record_s *, int);
-static void flush_descriptor(journal_t *, struct buffer_head *, int, int);
+                                   struct jbd2_revoke_record_s *);
+static void flush_descriptor(journal_t *, struct buffer_head *, int);
 #endif
 
 /* Utility functions to maintain the revoke table */
 
-/* Borrowed from buffer.c: this is a tried and tested block hash function */
 static inline int hash(journal_t *journal, unsigned long long block)
 {
-       struct jbd2_revoke_table_s *table = journal->j_revoke;
-       int hash_shift = table->hash_shift;
-       int hash = (int)block ^ (int)((block >> 31) >> 1);
-
-       return ((hash << (hash_shift - 6)) ^
-               (hash >> 13) ^
-               (hash << (hash_shift - 12))) & (table->hash_size - 1);
+       return hash_64(block, journal->j_revoke->hash_shift);
 }
 
 static int insert_revoke_hash(journal_t *journal, unsigned long long blocknr,
@@ -147,11 +138,13 @@ static int insert_revoke_hash(journal_t *journal, unsigned long long blocknr,
 {
        struct list_head *hash_list;
        struct jbd2_revoke_record_s *record;
+       gfp_t gfp_mask = GFP_NOFS;
 
-repeat:
-       record = kmem_cache_alloc(jbd2_revoke_record_cache, GFP_NOFS);
+       if (journal_oom_retry)
+               gfp_mask |= __GFP_NOFAIL;
+       record = kmem_cache_alloc(jbd2_revoke_record_cache, gfp_mask);
        if (!record)
-               goto oom;
+               return -ENOMEM;
 
        record->sequence = seq;
        record->blocknr = blocknr;
@@ -160,13 +153,6 @@ repeat:
        list_add(&record->hash, hash_list);
        spin_unlock(&journal->j_revoke_lock);
        return 0;
-
-oom:
-       if (!journal_oom_retry)
-               return -ENOMEM;
-       jbd_debug(1, "ENOMEM in %s, retrying\n", __func__);
-       yield();
-       goto repeat;
 }
 
 /* Find a revoke record in the journal's hash table. */
@@ -192,40 +178,44 @@ static struct jbd2_revoke_record_s *find_revoke_record(journal_t *journal,
        return NULL;
 }
 
-void journal_destroy_revoke_caches(void)
+void jbd2_journal_destroy_revoke_record_cache(void)
 {
-       if (jbd2_revoke_record_cache) {
-               kmem_cache_destroy(jbd2_revoke_record_cache);
-               jbd2_revoke_record_cache = NULL;
-       }
-       if (jbd2_revoke_table_cache) {
-               kmem_cache_destroy(jbd2_revoke_table_cache);
-               jbd2_revoke_table_cache = NULL;
-       }
+       kmem_cache_destroy(jbd2_revoke_record_cache);
+       jbd2_revoke_record_cache = NULL;
 }
 
-int __init journal_init_revoke_caches(void)
+void jbd2_journal_destroy_revoke_table_cache(void)
 {
-       J_ASSERT(!jbd2_revoke_record_cache);
-       J_ASSERT(!jbd2_revoke_table_cache);
+       kmem_cache_destroy(jbd2_revoke_table_cache);
+       jbd2_revoke_table_cache = NULL;
+}
 
+int __init jbd2_journal_init_revoke_record_cache(void)
+{
+       J_ASSERT(!jbd2_revoke_record_cache);
        jbd2_revoke_record_cache = KMEM_CACHE(jbd2_revoke_record_s,
                                        SLAB_HWCACHE_ALIGN|SLAB_TEMPORARY);
-       if (!jbd2_revoke_record_cache)
-               goto record_cache_failure;
 
+       if (!jbd2_revoke_record_cache) {
+               pr_emerg("JBD2: failed to create revoke_record cache\n");
+               return -ENOMEM;
+       }
+       return 0;
+}
+
+int __init jbd2_journal_init_revoke_table_cache(void)
+{
+       J_ASSERT(!jbd2_revoke_table_cache);
        jbd2_revoke_table_cache = KMEM_CACHE(jbd2_revoke_table_s,
                                             SLAB_TEMPORARY);
-       if (!jbd2_revoke_table_cache)
-               goto table_cache_failure;
-       return 0;
-table_cache_failure:
-       journal_destroy_revoke_caches();
-record_cache_failure:
+       if (!jbd2_revoke_table_cache) {
+               pr_emerg("JBD2: failed to create revoke_table cache\n");
                return -ENOMEM;
+       }
+       return 0;
 }
 
-static struct jbd2_revoke_table_s *journal_init_revoke_table(int hash_size)
+static struct jbd2_revoke_table_s *jbd2_journal_init_revoke_table(int hash_size)
 {
        int shift = 0;
        int tmp = hash_size;
@@ -241,7 +231,7 @@ static struct jbd2_revoke_table_s *journal_init_revoke_table(int hash_size)
        table->hash_size = hash_size;
        table->hash_shift = shift;
        table->hash_table =
-               kmalloc(hash_size * sizeof(struct list_head), GFP_KERNEL);
+               kmalloc_array(hash_size, sizeof(struct list_head), GFP_KERNEL);
        if (!table->hash_table) {
                kmem_cache_free(jbd2_revoke_table_cache, table);
                table = NULL;
@@ -255,7 +245,7 @@ out:
        return table;
 }
 
-static void journal_destroy_revoke_table(struct jbd2_revoke_table_s *table)
+static void jbd2_journal_destroy_revoke_table(struct jbd2_revoke_table_s *table)
 {
        int i;
        struct list_head *hash_list;
@@ -270,16 +260,16 @@ static void journal_destroy_revoke_table(struct jbd2_revoke_table_s *table)
 }
 
 /* Initialise the revoke table for a given journal to a given size. */
-int journal_init_revoke(journal_t *journal, int hash_size)
+int jbd2_journal_init_revoke(journal_t *journal, int hash_size)
 {
        J_ASSERT(journal->j_revoke_table[0] == NULL);
        J_ASSERT(is_power_of_2(hash_size));
 
-       journal->j_revoke_table[0] = journal_init_revoke_table(hash_size);
+       journal->j_revoke_table[0] = jbd2_journal_init_revoke_table(hash_size);
        if (!journal->j_revoke_table[0])
                goto fail0;
 
-       journal->j_revoke_table[1] = journal_init_revoke_table(hash_size);
+       journal->j_revoke_table[1] = jbd2_journal_init_revoke_table(hash_size);
        if (!journal->j_revoke_table[1])
                goto fail1;
 
@@ -290,26 +280,27 @@ int journal_init_revoke(journal_t *journal, int hash_size)
        return 0;
 
 fail1:
-       journal_destroy_revoke_table(journal->j_revoke_table[0]);
+       jbd2_journal_destroy_revoke_table(journal->j_revoke_table[0]);
+       journal->j_revoke_table[0] = NULL;
 fail0:
        return -ENOMEM;
 }
 
 /* Destroy a journal's revoke table.  The table must already be empty! */
-void journal_destroy_revoke(journal_t *journal)
+void jbd2_journal_destroy_revoke(journal_t *journal)
 {
        journal->j_revoke = NULL;
        if (journal->j_revoke_table[0])
-               journal_destroy_revoke_table(journal->j_revoke_table[0]);
+               jbd2_journal_destroy_revoke_table(journal->j_revoke_table[0]);
        if (journal->j_revoke_table[1])
-               journal_destroy_revoke_table(journal->j_revoke_table[1]);
+               jbd2_journal_destroy_revoke_table(journal->j_revoke_table[1]);
 }
 
 
 #ifdef __KERNEL__
 
 /*
- * journal_revoke: revoke a given buffer_head from the journal.  This
+ * jbd2_journal_revoke: revoke a given buffer_head from the journal.  This
  * prevents the block from being replayed during recovery if we take a
  * crash after this current transaction commits.  Any subsequent
  * metadata writes of the buffer in this transaction cancel the
@@ -321,18 +312,18 @@ void journal_destroy_revoke(journal_t *journal)
  * revoke before clearing the block bitmap when we are deleting
  * metadata.
  *
- * Revoke performs a journal_forget on any buffer_head passed in as a
+ * Revoke performs a jbd2_journal_forget on any buffer_head passed in as a
  * parameter, but does _not_ forget the buffer_head if the bh was only
  * found implicitly.
  *
  * bh_in may not be a journalled buffer - it may have come off
  * the hash tables without an attached journal_head.
  *
- * If bh_in is non-zero, journal_revoke() will decrement its b_count
+ * If bh_in is non-zero, jbd2_journal_revoke() will decrement its b_count
  * by one.
  */
 
-int journal_revoke(handle_t *handle, unsigned long long blocknr,
+int jbd2_journal_revoke(handle_t *handle, unsigned long long blocknr,
                   struct buffer_head *bh_in)
 {
        struct buffer_head *bh = NULL;
@@ -345,7 +336,7 @@ int journal_revoke(handle_t *handle, unsigned long long blocknr,
                BUFFER_TRACE(bh_in, "enter");
 
        journal = handle->h_transaction->t_journal;
-       if (!journal_set_features(journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE)){
+       if (!jbd2_journal_set_features(journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)){
                J_ASSERT (!"Cannot set revoke feature!");
                return -EINVAL;
        }
@@ -358,7 +349,7 @@ int journal_revoke(handle_t *handle, unsigned long long blocknr,
                if (bh)
                        BUFFER_TRACE(bh, "found on hash");
        }
-#ifdef JFS_EXPENSIVE_CHECKING
+#ifdef JBD2_EXPENSIVE_CHECKING
        else {
                struct buffer_head *bh2;
 
@@ -380,6 +371,11 @@ int journal_revoke(handle_t *handle, unsigned long long blocknr,
        }
 #endif
 
+       if (WARN_ON_ONCE(handle->h_revoke_credits <= 0)) {
+               if (!bh_in)
+                       brelse(bh);
+               return -EIO;
+       }
        /* We really ought not ever to revoke twice in a row without
            first having the revoke cancelled: it's illegal to free a
            block twice without allocating it in between! */
@@ -393,13 +389,14 @@ int journal_revoke(handle_t *handle, unsigned long long blocknr,
                set_buffer_revoked(bh);
                set_buffer_revokevalid(bh);
                if (bh_in) {
-                       BUFFER_TRACE(bh_in, "call journal_forget");
-                       journal_forget(handle, bh_in);
+                       BUFFER_TRACE(bh_in, "call jbd2_journal_forget");
+                       jbd2_journal_forget(handle, bh_in);
                } else {
                        BUFFER_TRACE(bh, "call brelse");
                        __brelse(bh);
                }
        }
+       handle->h_revoke_credits--;
 
        jbd_debug(2, "insert revoke for block %llu, bh_in=%p\n",blocknr, bh_in);
        err = insert_revoke_hash(journal, blocknr,
@@ -410,7 +407,7 @@ int journal_revoke(handle_t *handle, unsigned long long blocknr,
 
 /*
  * Cancel an outstanding revoke.  For use only internally by the
- * journaling code (called from journal_get_write_access).
+ * journaling code (called from jbd2_journal_get_write_access).
  *
  * We trust buffer_revoked() on the buffer if the buffer is already
  * being journaled: if there is no revoke pending on the buffer, then we
@@ -423,7 +420,7 @@ int journal_revoke(handle_t *handle, unsigned long long blocknr,
  * do not trust the Revoked bit on buffers unless RevokeValid is also
  * set.
  */
-int journal_cancel_revoke(handle_t *handle, struct journal_head *jh)
+int jbd2_journal_cancel_revoke(handle_t *handle, struct journal_head *jh)
 {
        struct jbd2_revoke_record_s *record;
        journal_t *journal = handle->h_transaction->t_journal;
@@ -457,7 +454,7 @@ int journal_cancel_revoke(handle_t *handle, struct journal_head *jh)
                }
        }
 
-#ifdef JFS_EXPENSIVE_CHECKING
+#ifdef JBD2_EXPENSIVE_CHECKING
        /* There better not be one left behind by now! */
        record = find_revoke_record(journal, bh->b_blocknr);
        J_ASSERT_JH(jh, record == NULL);
@@ -513,7 +510,7 @@ void jbd2_clear_buffer_revoked_flags(journal_t *journal)
  * we do not want to suspend any processing until all revokes are
  * written -bzzz
  */
-void journal_switch_revoke_table(journal_t *journal)
+void jbd2_journal_switch_revoke_table(journal_t *journal)
 {
        int i;
 
@@ -530,11 +527,10 @@ void journal_switch_revoke_table(journal_t *journal)
  * Write revoke records to the journal for all entries in the current
  * revoke hash, deleting the entries as we go.
  */
-void journal_write_revoke_records(journal_t *journal,
-                                      transaction_t *transaction,
-                                      struct list_head *log_bufs,
-                                      int write_op)
+void jbd2_journal_write_revoke_records(transaction_t *transaction,
+                                      struct list_head *log_bufs)
 {
+       journal_t *journal = transaction->t_journal;
        struct buffer_head *descriptor;
        struct jbd2_revoke_record_s *record;
        struct jbd2_revoke_table_s *revoke;
@@ -555,16 +551,15 @@ void journal_write_revoke_records(journal_t *journal,
                while (!list_empty(hash_list)) {
                        record = (struct jbd2_revoke_record_s *)
                                hash_list->next;
-                       write_one_revoke_record(journal, transaction, log_bufs,
-                                               &descriptor, &offset,
-                                               record, write_op);
+                       write_one_revoke_record(transaction, log_bufs,
+                                               &descriptor, &offset, record);
                        count++;
                        list_del(&record->hash);
                        kmem_cache_free(jbd2_revoke_record_cache, record);
                }
        }
        if (descriptor)
-               flush_descriptor(journal, descriptor, offset, write_op);
+               flush_descriptor(journal, descriptor, offset);
        jbd_debug(1, "Wrote %d revoke records\n", count);
 }
 
@@ -573,22 +568,20 @@ void journal_write_revoke_records(journal_t *journal,
  * block if the old one is full or if we have not already created one.
  */
 
-static void write_one_revoke_record(journal_t *journal,
-                                   transaction_t *transaction,
+static void write_one_revoke_record(transaction_t *transaction,
                                    struct list_head *log_bufs,
                                    struct buffer_head **descriptorp,
                                    int *offsetp,
-                                   struct jbd2_revoke_record_s *record,
-                                   int write_op)
+                                   struct jbd2_revoke_record_s *record)
 {
+       journal_t *journal = transaction->t_journal;
        int csum_size = 0;
        struct buffer_head *descriptor;
        int sz, offset;
-       journal_header_t *header;
 
        /* If we are already aborting, this all becomes a noop.  We
            still need to go round the loop in
-           journal_write_revoke_records in order to free all of the
+           jbd2_journal_write_revoke_records in order to free all of the
            revoke records: only the IO to the journal is omitted. */
        if (is_journal_aborted(journal))
                return;
@@ -597,10 +590,10 @@ static void write_one_revoke_record(journal_t *journal,
        offset = *offsetp;
 
        /* Do we need to leave space at the end for a checksum? */
-       if (journal_has_csum_v2or3(journal))
-               csum_size = sizeof(struct journal_revoke_tail);
+       if (jbd2_journal_has_csum_v2or3(journal))
+               csum_size = sizeof(struct jbd2_journal_block_tail);
 
-       if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT))
+       if (jbd2_has_feature_64bit(journal))
                sz = 8;
        else
                sz = 4;
@@ -608,29 +601,26 @@ static void write_one_revoke_record(journal_t *journal,
        /* Make sure we have a descriptor with space left for the record */
        if (descriptor) {
                if (offset + sz > journal->j_blocksize - csum_size) {
-                       flush_descriptor(journal, descriptor, offset, write_op);
+                       flush_descriptor(journal, descriptor, offset);
                        descriptor = NULL;
                }
        }
 
        if (!descriptor) {
-               descriptor = journal_get_descriptor_buffer(journal);
+               descriptor = jbd2_journal_get_descriptor_buffer(transaction,
+                                                       JBD2_REVOKE_BLOCK);
                if (!descriptor)
                        return;
-               header = (journal_header_t *)descriptor->b_data;
-               header->h_magic     = ext2fs_cpu_to_be32(JFS_MAGIC_NUMBER);
-               header->h_blocktype = ext2fs_cpu_to_be32(JFS_REVOKE_BLOCK);
-               header->h_sequence  = ext2fs_cpu_to_be32(transaction->t_tid);
 
                /* Record it so that we can wait for IO completion later */
                BUFFER_TRACE(descriptor, "file in log_bufs");
                jbd2_file_log_bh(log_bufs, descriptor);
 
-               offset = sizeof(journal_revoke_header_t);
+               offset = sizeof(jbd2_journal_revoke_header_t);
                *descriptorp = descriptor;
        }
 
-       if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT)) {
+       if (jbd2_has_feature_64bit(journal))
                * ((__be64 *)(&descriptor->b_data[offset])) =
                        cpu_to_be64(record->blocknr);
        else
@@ -641,21 +631,6 @@ static void write_one_revoke_record(journal_t *journal,
        *offsetp = offset;
 }
 
-static void jbd2_revoke_csum_set(journal_t *j, struct buffer_head *bh)
-{
-       struct journal_revoke_tail *tail;
-       __u32 csum;
-
-       if (!journal_has_csum_v2or3(j))
-               return;
-
-       tail = (struct journal_revoke_tail *)(bh->b_data + j->j_blocksize -
-                       sizeof(struct journal_revoke_tail));
-       tail->r_checksum = 0;
-       csum = jbd2_chksum(j, j->j_csum_seed, bh->b_data, j->j_blocksize);
-       tail->r_checksum = ext2fs_cpu_to_be32(csum);
-}
-
 /*
  * Flush a revoke descriptor out to the journal.  If we are aborting,
  * this is a noop; otherwise we are generating a buffer which needs to
@@ -665,23 +640,21 @@ static void jbd2_revoke_csum_set(journal_t *j, struct buffer_head *bh)
 
 static void flush_descriptor(journal_t *journal,
                             struct buffer_head *descriptor,
-                            int offset, int write_op)
+                            int offset)
 {
-       journal_revoke_header_t *header;
+       jbd2_journal_revoke_header_t *header;
 
-       if (is_journal_aborted(journal)) {
-               put_bh(descriptor);
+       if (is_journal_aborted(journal))
                return;
-       }
 
-       header = (journal_revoke_header_t *)descriptor->b_data;
-       header->r_count = ext2fs_cpu_to_be32(offset);
-       jbd2_revoke_csum_set(journal, descriptor);
+       header = (jbd2_journal_revoke_header_t *)descriptor->b_data;
+       header->r_count = cpu_to_be32(offset);
+       jbd2_descriptor_block_csum_set(journal, descriptor);
 
        set_buffer_jwrite(descriptor);
        BUFFER_TRACE(descriptor, "write");
        set_buffer_dirty(descriptor);
-       write_dirty_buffer(descriptor, write_op);
+       write_dirty_buffer(descriptor, REQ_SYNC);
 }
 #endif
 
@@ -707,7 +680,7 @@ static void flush_descriptor(journal_t *journal,
  * single block.
  */
 
-int journal_set_revoke(journal_t *journal,
+int jbd2_journal_set_revoke(journal_t *journal,
                       unsigned long long blocknr,
                       tid_t sequence)
 {
@@ -731,7 +704,7 @@ int journal_set_revoke(journal_t *journal,
  * ones, but later transactions still need replayed.
  */
 
-int journal_test_revoke(journal_t *journal,
+int jbd2_journal_test_revoke(journal_t *journal,
                        unsigned long long blocknr,
                        tid_t sequence)
 {
@@ -750,7 +723,7 @@ int journal_test_revoke(journal_t *journal,
  * that it can be reused by the running filesystem.
  */
 
-void journal_clear_revoke(journal_t *journal)
+void jbd2_journal_clear_revoke(journal_t *journal)
 {
        int i;
        struct list_head *hash_list;
index 6131141..ed3595f 100644 (file)
@@ -76,8 +76,8 @@ static void print_resource_track(struct resource_track *track)
        gettimeofday(&time_end, 0);
        getrusage(RUSAGE_SELF, &r);
 
-       printf(_("Memory used: %d, elapsed time: %6.3f/%6.3f/%6.3f\n"),
-              (int) (((char *) sbrk(0)) - ((char *) track->brk_start)),
+       printf(_("Memory used: %lu, elapsed time: %6.3f/%6.3f/%6.3f\n"),
+              (unsigned long)((char *)sbrk(0) - (char *)track->brk_start),
               timeval_subtract(&time_end, &track->time_start),
               timeval_subtract(&r.ru_utime, &track->user_start),
               timeval_subtract(&r.ru_stime, &track->system_start));
index d2fd922..e1c3f93 100644 (file)
@@ -24,7 +24,7 @@
 #define MAX_CHECK 2
 #define LOG2_CHECK 4
 
-static void check_super_value(e2fsck_t ctx, const char *descr,
+static int check_super_value(e2fsck_t ctx, const char *descr,
                              unsigned long value, int flags,
                              unsigned long min_val, unsigned long max_val)
 {
@@ -37,8 +37,29 @@ static void check_super_value(e2fsck_t ctx, const char *descr,
                pctx.num = value;
                pctx.str = descr;
                fix_problem(ctx, PR_0_MISC_CORRUPT_SUPER, &pctx);
-               ctx->flags |= E2F_FLAG_ABORT; /* never get here! */
+               ctx->flags |= E2F_FLAG_ABORT;
+               return 0;
        }
+       return 1;
+}
+
+static int check_super_value64(e2fsck_t ctx, const char *descr,
+                               __u64 value, int flags,
+                               __u64 min_val, __u64 max_val)
+{
+       struct          problem_context pctx;
+
+       if ((flags & MIN_CHECK && value < min_val) ||
+           (flags & MAX_CHECK && value > max_val) ||
+           (flags & LOG2_CHECK && (value & (value - 1)) != 0)) {
+               clear_problem_context(&pctx);
+               pctx.num = value;
+               pctx.str = descr;
+               fix_problem(ctx, PR_0_MISC_CORRUPT_SUPER, &pctx);
+               ctx->flags |= E2F_FLAG_ABORT;
+               return 0;
+       }
+       return 1;
 }
 
 /*
@@ -54,6 +75,8 @@ struct process_block_struct {
        int             truncated_blocks;
        int             abort;
        errcode_t       errcode;
+       blk64_t last_cluster;
+       struct ext2_inode_large *inode;
 };
 
 static int release_inode_block(ext2_filsys fs,
@@ -67,6 +90,7 @@ static int release_inode_block(ext2_filsys fs,
        e2fsck_t                ctx;
        struct problem_context  *pctx;
        blk64_t                 blk = *block_nr;
+       blk64_t                 cluster = EXT2FS_B2C(fs, *block_nr);
        int                     retval = 0;
 
        pb = (struct process_block_struct *) priv_data;
@@ -79,6 +103,11 @@ static int release_inode_block(ext2_filsys fs,
        if (blk == 0)
                return 0;
 
+       if (pb->last_cluster == cluster)
+               return 0;
+
+       pb->last_cluster = cluster;
+
        if ((blk < fs->super->s_first_data_block) ||
            (blk >= ext2fs_blocks_count(fs->super))) {
                fix_problem(ctx, PR_0_ORPHAN_ILLEGAL_BLOCK_NUM, pctx);
@@ -144,6 +173,8 @@ static int release_inode_block(ext2_filsys fs,
                retval |= BLOCK_CHANGED;
        }
 
+       if (ctx->qctx)
+               quota_data_sub(ctx->qctx, pb->inode, 0, ctx->fs->blocksize);
        ext2fs_block_alloc_stats2(fs, blk, -1);
        ctx->free_blocks++;
        return retval;
@@ -155,15 +186,16 @@ static int release_inode_block(ext2_filsys fs,
  * not deleted.
  */
 static int release_inode_blocks(e2fsck_t ctx, ext2_ino_t ino,
-                               struct ext2_inode *inode, char *block_buf,
+                               struct ext2_inode_large *inode, char *block_buf,
                                struct problem_context *pctx)
 {
        struct process_block_struct     pb;
        ext2_filsys                     fs = ctx->fs;
+       blk64_t                         blk;
        errcode_t                       retval;
        __u32                           count;
 
-       if (!ext2fs_inode_has_valid_blocks2(fs, inode))
+       if (!ext2fs_inode_has_valid_blocks2(fs, EXT2_INODE(inode)))
                return 0;
 
        pb.buf = block_buf + 3 * ctx->fs->blocksize;
@@ -171,6 +203,8 @@ static int release_inode_blocks(e2fsck_t ctx, ext2_ino_t ino,
        pb.abort = 0;
        pb.errcode = 0;
        pb.pctx = pctx;
+       pb.last_cluster = 0;
+       pb.inode = inode;
        if (inode->i_links_count) {
                pb.truncating = 1;
                pb.truncate_block = (e2_blkcnt_t)
@@ -187,7 +221,7 @@ static int release_inode_blocks(e2fsck_t ctx, ext2_ino_t ino,
                                      block_buf, release_inode_block, &pb);
        if (retval) {
                com_err("release_inode_blocks", retval,
-                       _("while calling ext2fs_block_iterate for inode %d"),
+                       _("while calling ext2fs_block_iterate for inode %u"),
                        ino);
                return 1;
        }
@@ -195,35 +229,90 @@ static int release_inode_blocks(e2fsck_t ctx, ext2_ino_t ino,
                return 1;
 
        /* Refresh the inode since ext2fs_block_iterate may have changed it */
-       e2fsck_read_inode(ctx, ino, inode, "release_inode_blocks");
+       e2fsck_read_inode_full(ctx, ino, EXT2_INODE(inode), sizeof(*inode),
+                       "release_inode_blocks");
 
        if (pb.truncated_blocks)
-               ext2fs_iblk_sub_blocks(fs, inode, pb.truncated_blocks);
+               ext2fs_iblk_sub_blocks(fs, EXT2_INODE(inode),
+                               pb.truncated_blocks);
 
-       if (ext2fs_file_acl_block(fs, inode)) {
-               retval = ext2fs_adjust_ea_refcount3(fs,
-                               ext2fs_file_acl_block(fs, inode),
-                               block_buf, -1, &count, ino);
+       blk = ext2fs_file_acl_block(fs, EXT2_INODE(inode));
+       if (blk) {
+               retval = ext2fs_adjust_ea_refcount3(fs, blk, block_buf, -1,
+                               &count, ino);
                if (retval == EXT2_ET_BAD_EA_BLOCK_NUM) {
                        retval = 0;
                        count = 1;
                }
                if (retval) {
                        com_err("release_inode_blocks", retval,
-               _("while calling ext2fs_adjust_ea_refcount2 for inode %d"),
+               _("while calling ext2fs_adjust_ea_refcount2 for inode %u"),
                                ino);
                        return 1;
                }
                if (count == 0) {
-                       ext2fs_block_alloc_stats2(fs,
-                                       ext2fs_file_acl_block(fs, inode), -1);
+                       if (ctx->qctx)
+                               quota_data_sub(ctx->qctx, inode, 0,
+                                               ctx->fs->blocksize);
+                       ext2fs_block_alloc_stats2(fs, blk, -1);
                        ctx->free_blocks++;
                }
-               ext2fs_file_acl_block_set(fs, inode, 0);
+               ext2fs_file_acl_block_set(fs, EXT2_INODE(inode), 0);
        }
        return 0;
 }
 
+/* Load all quota data in preparation for orphan clearing. */
+static errcode_t e2fsck_read_all_quotas(e2fsck_t ctx)
+{
+       ext2_ino_t qf_ino;
+       enum quota_type qtype;
+       errcode_t retval = 0;
+
+       if (!ext2fs_has_feature_quota(ctx->fs->super))
+               return retval;
+
+       retval = quota_init_context(&ctx->qctx, ctx->fs, 0);
+       if (retval)
+               return retval;
+
+       for (qtype = 0 ; qtype < MAXQUOTAS; qtype++) {
+               qf_ino = *quota_sb_inump(ctx->fs->super, qtype);
+               if (qf_ino == 0)
+                       continue;
+
+               retval = quota_update_limits(ctx->qctx, qf_ino, qtype);
+               if (retval)
+                       break;
+       }
+       if (retval)
+               quota_release_context(&ctx->qctx);
+       return retval;
+}
+
+/* Write all the quota info to disk. */
+static errcode_t e2fsck_write_all_quotas(e2fsck_t ctx)
+{
+       struct problem_context pctx;
+       enum quota_type qtype;
+
+       if (!ext2fs_has_feature_quota(ctx->fs->super))
+               return 0;
+
+       clear_problem_context(&pctx);
+       for (qtype = 0 ; qtype < MAXQUOTAS; qtype++) {
+               pctx.num = qtype;
+               pctx.errcode = quota_write_inode(ctx->qctx, 1 << qtype);
+               if (pctx.errcode) {
+                       fix_problem(ctx, PR_6_WRITE_QUOTAS, &pctx);
+                       break;
+               }
+       }
+
+       quota_release_context(&ctx->qctx);
+       return pctx.errcode;
+}
+
 /*
  * This function releases all of the orphan inodes.  It returns 1 if
  * it hit some error, and 0 on success.
@@ -232,13 +321,20 @@ static int release_orphan_inodes(e2fsck_t ctx)
 {
        ext2_filsys fs = ctx->fs;
        ext2_ino_t      ino, next_ino;
-       struct ext2_inode inode;
+       struct ext2_inode_large inode;
        struct problem_context pctx;
        char *block_buf;
 
        if ((ino = fs->super->s_last_orphan) == 0)
                return 0;
 
+       clear_problem_context(&pctx);
+       pctx.errcode = e2fsck_read_all_quotas(ctx);
+       if (pctx.errcode) {
+               fix_problem(ctx, PR_0_QUOTA_INIT_CTX, &pctx);
+               return 1;
+       }
+
        /*
         * Win or lose, we won't be using the head of the orphan inode
         * list again.
@@ -251,15 +347,18 @@ static int release_orphan_inodes(e2fsck_t ctx)
         * list, since the orphan list can't be trusted; and we're
         * going to be running a full e2fsck run anyway...
         */
-       if (fs->super->s_state & EXT2_ERROR_FS)
+       if (fs->super->s_state & EXT2_ERROR_FS) {
+               if (ctx->qctx)
+                       quota_release_context(&ctx->qctx);
                return 0;
+       }
 
        if ((ino < EXT2_FIRST_INODE(fs->super)) ||
            (ino > fs->super->s_inodes_count)) {
                clear_problem_context(&pctx);
                pctx.ino = ino;
                fix_problem(ctx, PR_0_ORPHAN_ILLEGAL_HEAD_INODE, &pctx);
-               return 1;
+               goto err_qctx;
        }
 
        block_buf = (char *) e2fsck_allocate_memory(ctx, fs->blocksize * 4,
@@ -267,10 +366,11 @@ static int release_orphan_inodes(e2fsck_t ctx)
        e2fsck_read_bitmaps(ctx);
 
        while (ino) {
-               e2fsck_read_inode(ctx, ino, &inode, "release_orphan_inodes");
+               e2fsck_read_inode_full(ctx, ino, EXT2_INODE(&inode),
+                               sizeof(inode), "release_orphan_inodes");
                clear_problem_context(&pctx);
                pctx.ino = ino;
-               pctx.inode = &inode;
+               pctx.inode = EXT2_INODE(&inode);
                pctx.str = inode.i_links_count ? _("Truncating") :
                        _("Clearing");
 
@@ -282,13 +382,15 @@ static int release_orphan_inodes(e2fsck_t ctx)
                     (next_ino > fs->super->s_inodes_count))) {
                        pctx.ino = next_ino;
                        fix_problem(ctx, PR_0_ORPHAN_ILLEGAL_INODE, &pctx);
-                       goto return_abort;
+                       goto err_buf;
                }
 
                if (release_inode_blocks(ctx, ino, &inode, block_buf, &pctx))
-                       goto return_abort;
+                       goto err_buf;
 
                if (!inode.i_links_count) {
+                       if (ctx->qctx)
+                               quota_data_inodes(ctx->qctx, &inode, ino, -1);
                        ext2fs_inode_alloc_stats2(fs, ino, -1,
                                                  LINUX_S_ISDIR(inode.i_mode));
                        ctx->free_inodes++;
@@ -296,13 +398,21 @@ static int release_orphan_inodes(e2fsck_t ctx)
                } else {
                        inode.i_dtime = 0;
                }
-               e2fsck_write_inode(ctx, ino, &inode, "delete_file");
+               e2fsck_write_inode_full(ctx, ino, EXT2_INODE(&inode),
+                               sizeof(inode), "delete_file");
                ino = next_ino;
        }
        ext2fs_free_mem(&block_buf);
+       pctx.errcode = e2fsck_write_all_quotas(ctx);
+       if (pctx.errcode)
+               goto err;
        return 0;
-return_abort:
+err_buf:
        ext2fs_free_mem(&block_buf);
+err_qctx:
+       if (ctx->qctx)
+               quota_release_context(&ctx->qctx);
+err:
        return 1;
 }
 
@@ -326,6 +436,14 @@ void check_resize_inode(e2fsck_t ctx)
 
        clear_problem_context(&pctx);
 
+       if (ext2fs_has_feature_resize_inode(fs->super) &&
+           ext2fs_has_feature_meta_bg(fs->super) &&
+           fix_problem(ctx, PR_0_DISABLE_RESIZE_INODE, &pctx)) {
+               ext2fs_clear_feature_resize_inode(fs->super);
+               fs->super->s_reserved_gdt_blocks = 0;
+               ext2fs_mark_super_dirty(fs);
+       }
+
        /*
         * If the resize inode feature isn't set, then
         * s_reserved_gdt_blocks must be zero.
@@ -468,6 +586,7 @@ void check_super_block(e2fsck_t ctx)
        problem_t       problem;
        blk64_t blocks_per_group = fs->super->s_blocks_per_group;
        __u32   bpg_max, cpg_max;
+       __u64   blks_max;
        int     inodes_per_block;
        int     inode_size;
        int     accept_time_fudge;
@@ -476,7 +595,7 @@ void check_super_block(e2fsck_t ctx)
        blk64_t should_be;
        struct problem_context  pctx;
        blk64_t free_blocks = 0;
-       ino_t   free_inodes = 0;
+       ext2_ino_t free_inodes = 0;
        int     csum_flag, clear_test_fs_flag;
 
        inodes_per_block = EXT2_INODES_PER_BLOCK(fs->super);
@@ -497,53 +616,98 @@ void check_super_block(e2fsck_t ctx)
        ctx->invalid_inode_table_flag = (int *) e2fsck_allocate_memory(ctx,
                sizeof(int) * fs->group_desc_count, "invalid_inode_table");
 
+       blks_max = (1ULL << 32) * EXT2_MAX_BLOCKS_PER_GROUP(fs->super);
+       if (ext2fs_has_feature_64bit(fs->super)) {
+               if (blks_max > ((1ULL << 48) - 1))
+                       blks_max = (1ULL << 48) - 1;
+       } else {
+               if (blks_max > ((1ULL << 32) - 1))
+                       blks_max = (1ULL << 32) - 1;
+       }
+
        clear_problem_context(&pctx);
 
        /*
         * Verify the super block constants...
         */
-       check_super_value(ctx, "inodes_count", sb->s_inodes_count,
-                         MIN_CHECK, 1, 0);
-       check_super_value(ctx, "blocks_count", ext2fs_blocks_count(sb),
-                         MIN_CHECK, 1, 0);
-       check_super_value(ctx, "first_data_block", sb->s_first_data_block,
-                         MAX_CHECK, 0, ext2fs_blocks_count(sb));
-       check_super_value(ctx, "log_block_size", sb->s_log_block_size,
-                         MIN_CHECK | MAX_CHECK, 0,
-                         EXT2_MAX_BLOCK_LOG_SIZE - EXT2_MIN_BLOCK_LOG_SIZE);
-       check_super_value(ctx, "log_cluster_size",
-                         sb->s_log_cluster_size,
-                         MIN_CHECK | MAX_CHECK, sb->s_log_block_size,
-                         (EXT2_MAX_CLUSTER_LOG_SIZE -
-                          EXT2_MIN_CLUSTER_LOG_SIZE));
-       check_super_value(ctx, "clusters_per_group", sb->s_clusters_per_group,
-                         MIN_CHECK | MAX_CHECK, 8, cpg_max);
-       check_super_value(ctx, "blocks_per_group", sb->s_blocks_per_group,
-                         MIN_CHECK | MAX_CHECK, 8, bpg_max);
-       check_super_value(ctx, "inodes_per_group", sb->s_inodes_per_group,
-                         MIN_CHECK | MAX_CHECK, inodes_per_block, ipg_max);
-       check_super_value(ctx, "r_blocks_count", ext2fs_r_blocks_count(sb),
-                         MAX_CHECK, 0, ext2fs_blocks_count(sb) / 2);
-       check_super_value(ctx, "reserved_gdt_blocks",
-                         sb->s_reserved_gdt_blocks, MAX_CHECK, 0,
-                         fs->blocksize / sizeof(__u32));
-       check_super_value(ctx, "desc_size",
-                         sb->s_desc_size, MAX_CHECK | LOG2_CHECK, 0,
-                         EXT2_MAX_DESC_SIZE);
-       if (sb->s_rev_level > EXT2_GOOD_OLD_REV)
-               check_super_value(ctx, "first_ino", sb->s_first_ino,
-                                 MIN_CHECK | MAX_CHECK,
-                                 EXT2_GOOD_OLD_FIRST_INO, sb->s_inodes_count);
+       if (!check_super_value(ctx, "inodes_count", sb->s_inodes_count,
+                              MIN_CHECK, 1, 0))
+               return;
+       if (!check_super_value64(ctx, "blocks_count", ext2fs_blocks_count(sb),
+                                MIN_CHECK | MAX_CHECK, 1, blks_max))
+               return;
+       if (!check_super_value(ctx, "first_data_block", sb->s_first_data_block,
+                              MAX_CHECK, 0, ext2fs_blocks_count(sb)))
+               return;
+       if (!check_super_value(ctx, "log_block_size", sb->s_log_block_size,
+                              MIN_CHECK | MAX_CHECK, 0,
+                              EXT2_MAX_BLOCK_LOG_SIZE - EXT2_MIN_BLOCK_LOG_SIZE))
+               return;
+       if (!check_super_value(ctx, "log_cluster_size",
+                              sb->s_log_cluster_size,
+                              MIN_CHECK | MAX_CHECK, sb->s_log_block_size,
+                              (EXT2_MAX_CLUSTER_LOG_SIZE -
+                               EXT2_MIN_CLUSTER_LOG_SIZE)))
+               return;
+       if (!check_super_value(ctx, "clusters_per_group",
+                              sb->s_clusters_per_group,
+                              MIN_CHECK | MAX_CHECK, 8, cpg_max))
+               return;
+       if (!check_super_value(ctx, "blocks_per_group", sb->s_blocks_per_group,
+                              MIN_CHECK | MAX_CHECK, 8, bpg_max))
+               return;
+       if (!check_super_value(ctx, "inodes_per_group", sb->s_inodes_per_group,
+                              MIN_CHECK | MAX_CHECK, inodes_per_block, ipg_max))
+               return;
+       if (!check_super_value(ctx, "r_blocks_count", ext2fs_r_blocks_count(sb),
+                              MAX_CHECK, 0, ext2fs_blocks_count(sb) / 2))
+               return;
+       if (!check_super_value(ctx, "reserved_gdt_blocks",
+                              sb->s_reserved_gdt_blocks, MAX_CHECK, 0,
+                              fs->blocksize / sizeof(__u32)))
+               return;
+       if (!check_super_value(ctx, "desc_size",
+                              sb->s_desc_size, MAX_CHECK | LOG2_CHECK, 0,
+                              EXT2_MAX_DESC_SIZE))
+               return;
+
+       should_be = (__u64)sb->s_inodes_per_group * fs->group_desc_count;
+       if (should_be > ~0U) {
+               pctx.num = should_be;
+               fix_problem(ctx, PR_0_INODE_COUNT_BIG, &pctx);
+               ctx->flags |= E2F_FLAG_ABORT;
+               return;
+       }
+       if (sb->s_inodes_count != should_be) {
+               pctx.ino = sb->s_inodes_count;
+               pctx.ino2 = should_be;
+               if (fix_problem(ctx, PR_0_INODE_COUNT_WRONG, &pctx)) {
+                       sb->s_inodes_count = should_be;
+                       ext2fs_mark_super_dirty(fs);
+               } else {
+                       pctx.num = sb->s_inodes_count;
+                       pctx.str = "inodes_count";
+                       fix_problem(ctx, PR_0_MISC_CORRUPT_SUPER, &pctx);
+                       ctx->flags |= E2F_FLAG_ABORT;
+                       return;
+               }
+       }
+       if (sb->s_rev_level > EXT2_GOOD_OLD_REV &&
+           !check_super_value(ctx, "first_ino", sb->s_first_ino,
+                              MIN_CHECK | MAX_CHECK,
+                              EXT2_GOOD_OLD_FIRST_INO, sb->s_inodes_count))
+               return;
        inode_size = EXT2_INODE_SIZE(sb);
-       check_super_value(ctx, "inode_size",
-                         inode_size, MIN_CHECK | MAX_CHECK | LOG2_CHECK,
-                         EXT2_GOOD_OLD_INODE_SIZE, fs->blocksize);
+       if (!check_super_value(ctx, "inode_size",
+                              inode_size, MIN_CHECK | MAX_CHECK | LOG2_CHECK,
+                              EXT2_GOOD_OLD_INODE_SIZE, fs->blocksize))
+               return;
        if (sb->s_blocks_per_group != (sb->s_clusters_per_group *
                                       EXT2FS_CLUSTER_RATIO(fs))) {
                pctx.num = sb->s_clusters_per_group * EXT2FS_CLUSTER_RATIO(fs);
                pctx.str = "block_size";
                fix_problem(ctx, PR_0_MISC_CORRUPT_SUPER, &pctx);
-               ctx->flags |= E2F_FLAG_ABORT; /* never get here! */
+               ctx->flags |= E2F_FLAG_ABORT;
                return;
        }
 
@@ -567,17 +731,6 @@ void check_super_block(e2fsck_t ctx)
                return;
        }
 
-       should_be = (blk64_t)sb->s_inodes_per_group * fs->group_desc_count;
-       if (should_be > UINT_MAX)
-               should_be = UINT_MAX;
-       if (sb->s_inodes_count != should_be) {
-               pctx.ino = sb->s_inodes_count;
-               pctx.ino2 = should_be;
-               if (fix_problem(ctx, PR_0_INODE_COUNT_WRONG, &pctx)) {
-                       sb->s_inodes_count = should_be;
-                       ext2fs_mark_super_dirty(fs);
-               }
-       }
        if (EXT2_INODE_SIZE(sb) > EXT2_GOOD_OLD_INODE_SIZE) {
                unsigned min =
                        sizeof(((struct ext2_inode_large *) 0)->i_extra_isize) +
@@ -885,7 +1038,7 @@ void check_super_block(e2fsck_t ctx)
         * Check to see if the superblock last mount time or last
         * write time is in the future.
         */
-       if (!broken_system_clock &&
+       if (!broken_system_clock && fs->super->s_checkinterval &&
            !(ctx->flags & E2F_FLAG_TIME_INSANE) &&
            fs->super->s_mtime > (__u32) ctx->now) {
                pctx.num = fs->super->s_mtime;
@@ -897,7 +1050,7 @@ void check_super_block(e2fsck_t ctx)
                        fs->flags |= EXT2_FLAG_DIRTY;
                }
        }
-       if (!broken_system_clock &&
+       if (!broken_system_clock && fs->super->s_checkinterval &&
            !(ctx->flags & E2F_FLAG_TIME_INSANE) &&
            fs->super->s_wtime > (__u32) ctx->now) {
                pctx.num = fs->super->s_wtime;
@@ -910,6 +1063,8 @@ void check_super_block(e2fsck_t ctx)
                }
        }
 
+       e2fsck_validate_quota_inodes(ctx);
+
        /*
         * Move the ext3 journal file, if necessary.
         */
index eb9f311..08f1863 100644 (file)
@@ -50,6 +50,7 @@ extern int optind;
 #include "e2p/e2p.h"
 #include "et/com_err.h"
 #include "e2p/e2p.h"
+#include "uuid/uuid.h"
 #include "support/plausible.h"
 #include "e2fsck.h"
 #include "problem.h"
@@ -106,7 +107,7 @@ static void show_stats(e2fsck_t     ctx)
        unsigned int dir_links;
        unsigned int num_files, num_links;
        __u32 *mask, m;
-       int frag_percent_file, frag_percent_dir, frag_percent_total;
+       int frag_percent_file = 0, frag_percent_dir = 0, frag_percent_total = 0;
        int i, j, printed = 0;
 
        dir_links = 2 * ctx->fs_directory_count - 1;
@@ -119,16 +120,18 @@ static void show_stats(e2fsck_t   ctx)
        blocks_used = (ext2fs_blocks_count(fs->super) -
                       ext2fs_free_blocks_count(fs->super));
 
-       frag_percent_file = (10000 * ctx->fs_fragmented) / inodes_used;
-       frag_percent_file = (frag_percent_file + 5) / 10;
+       if (inodes_used > 0) {
+               frag_percent_file = (10000 * ctx->fs_fragmented) / inodes_used;
+               frag_percent_file = (frag_percent_file + 5) / 10;
 
-       frag_percent_dir = (10000 * ctx->fs_fragmented_dir) / inodes_used;
-       frag_percent_dir = (frag_percent_dir + 5) / 10;
+               frag_percent_dir = (10000 * ctx->fs_fragmented_dir) / inodes_used;
+               frag_percent_dir = (frag_percent_dir + 5) / 10;
 
-       frag_percent_total = ((10000 * (ctx->fs_fragmented +
-                                       ctx->fs_fragmented_dir))
-                             / inodes_used);
-       frag_percent_total = (frag_percent_total + 5) / 10;
+               frag_percent_total = ((10000 * (ctx->fs_fragmented +
+                                               ctx->fs_fragmented_dir))
+                                     / inodes_used);
+               frag_percent_total = (frag_percent_total + 5) / 10;
+       }
 
        if (!verbose) {
                log_out(ctx, _("%s: %u/%u files (%0d.%d%% non-contiguous), "
@@ -285,7 +288,7 @@ static int is_on_batt(void)
 {
        FILE    *f;
        DIR     *d;
-       char    tmp[80], tmp2[80], fname[80];
+       char    tmp[80], tmp2[80], fname[NAME_MAX+30];
        unsigned int    acflag;
        struct dirent*  de;
 
@@ -309,7 +312,8 @@ static int is_on_batt(void)
                while ((de=readdir(d)) != NULL) {
                        if (!strncmp(".", de->d_name, 1))
                                continue;
-                       snprintf(fname, 80, "/proc/acpi/ac_adapter/%s/state",
+                       snprintf(fname, sizeof(fname),
+                                "/proc/acpi/ac_adapter/%s/state",
                                 de->d_name);
                        f = fopen(fname, "r");
                        if (!f)
@@ -394,7 +398,12 @@ static void check_if_skip(e2fsck_t ctx)
                if (batt && ((ctx->now - fs->super->s_lastcheck) <
                             fs->super->s_checkinterval*2))
                        reason = 0;
+       } else if (broken_system_clock && fs->super->s_checkinterval) {
+               log_out(ctx, "%s: ", ctx->device_name);
+               log_out(ctx, "%s",
+                       _("ignoring check interval, broken_system_clock set\n"));
        }
+
        if (reason) {
                log_out(ctx, "%s", ctx->device_name);
                log_out(ctx, reason, reason_arg);
@@ -609,9 +618,10 @@ static void reserve_stdio_fds(void)
                        fprintf(stderr, _("ERROR: Couldn't open "
                                "/dev/null (%s)\n"),
                                strerror(errno));
-                       break;
+                       return;
                }
        }
+       (void) close(fd);
 }
 
 #ifdef HAVE_SIGNAL_H
@@ -709,18 +719,48 @@ static void parse_extended_opts(e2fsck_t ctx, const char *opts)
                } else if (strcmp(token, "nodiscard") == 0) {
                        ctx->options &= ~E2F_OPT_DISCARD;
                        continue;
+               } else if (strcmp(token, "optimize_extents") == 0) {
+                       ctx->options &= ~E2F_OPT_NOOPT_EXTENTS;
+                       continue;
+               } else if (strcmp(token, "no_optimize_extents") == 0) {
+                       ctx->options |= E2F_OPT_NOOPT_EXTENTS;
+                       continue;
+               } else if (strcmp(token, "inode_count_fullmap") == 0) {
+                       ctx->options |= E2F_OPT_ICOUNT_FULLMAP;
+                       continue;
+               } else if (strcmp(token, "no_inode_count_fullmap") == 0) {
+                       ctx->options &= ~E2F_OPT_ICOUNT_FULLMAP;
+                       continue;
                } else if (strcmp(token, "log_filename") == 0) {
                        if (!arg)
                                extended_usage++;
                        else
                                ctx->log_fn = string_copy(ctx, arg, 0);
                        continue;
+               } else if (strcmp(token, "problem_log") == 0) {
+                       if (!arg)
+                               extended_usage++;
+                       else
+                               ctx->problem_log_fn = string_copy(ctx, arg, 0);
+                       continue;
                } else if (strcmp(token, "bmap2extent") == 0) {
                        ctx->options |= E2F_OPT_CONVERT_BMAP;
                        continue;
                } else if (strcmp(token, "fixes_only") == 0) {
                        ctx->options |= E2F_OPT_FIXES_ONLY;
                        continue;
+               } else if (strcmp(token, "unshare_blocks") == 0) {
+                       ctx->options |= E2F_OPT_UNSHARE_BLOCKS;
+                       ctx->options |= E2F_OPT_FORCE;
+                       continue;
+               } else if (strcmp(token, "check_encoding") == 0) {
+                       ctx->options |= E2F_OPT_CHECK_ENCODING;
+                       continue;
+#ifdef CONFIG_DEVELOPER_FEATURES
+               } else if (strcmp(token, "clear_all_uninit_bits") == 0) {
+                       ctx->options |= E2F_OPT_CLEAR_UNINIT;
+                       continue;
+#endif
                } else {
                        fprintf(stderr, _("Unknown extended option: %s\n"),
                                token);
@@ -730,17 +770,24 @@ static void parse_extended_opts(e2fsck_t ctx, const char *opts)
        free(buf);
 
        if (extended_usage) {
-               fputs(("\nExtended options are separated by commas, "
+               fputs(_("\nExtended options are separated by commas, "
                       "and may take an argument which\n"
                       "is set off by an equals ('=') sign.  "
-                      "Valid extended options are:\n"), stderr);
-               fputs(("\tea_ver=<ea_version (1 or 2)>\n"), stderr);
-               fputs(("\tfragcheck\n"), stderr);
-               fputs(("\tjournal_only\n"), stderr);
-               fputs(("\tdiscard\n"), stderr);
-               fputs(("\tnodiscard\n"), stderr);
-               fputs(("\treadahead_kb=<buffer size>\n"), stderr);
-               fputs(("\tbmap2extent\n"), stderr);
+                      "Valid extended options are:\n\n"), stderr);
+               fputs(_("\tea_ver=<ea_version (1 or 2)>\n"), stderr);
+               fputs("\tfragcheck\n", stderr);
+               fputs("\tjournal_only\n", stderr);
+               fputs("\tdiscard\n", stderr);
+               fputs("\tnodiscard\n", stderr);
+               fputs("\toptimize_extents\n", stderr);
+               fputs("\tno_optimize_extents\n", stderr);
+               fputs("\tinode_count_fullmap\n", stderr);
+               fputs("\tno_inode_count_fullmap\n", stderr);
+               fputs(_("\treadahead_kb=<buffer size>\n"), stderr);
+               fputs("\tbmap2extent\n", stderr);
+               fputs("\tunshare_blocks\n", stderr);
+               fputs("\tfixes_only\n", stderr);
+               fputs("\tcheck_encoding\n", stderr);
                fputc('\n', stderr);
                exit(1);
        }
@@ -905,6 +952,7 @@ static errcode_t PRS(int argc, char *argv[], e2fsck_t *ret_ctx)
                        break;
                case 'L':
                        replace_bad_blocks++;
+                       /* fall through */
                case 'l':
                        if (bad_blocks_file)
                                free(bad_blocks_file);
@@ -1007,6 +1055,16 @@ static errcode_t PRS(int argc, char *argv[], e2fsck_t *ret_ctx)
        if (c)
                verbose = 1;
 
+       profile_get_boolean(ctx->profile, "options", "no_optimize_extents",
+                           0, 0, &c);
+       if (c)
+               ctx->options |= E2F_OPT_NOOPT_EXTENTS;
+
+       profile_get_boolean(ctx->profile, "options", "inode_count_fullmap",
+                           0, 0, &c);
+       if (c)
+               ctx->options |= E2F_OPT_ICOUNT_FULLMAP;
+
        if (ctx->readahead_kb == ~0ULL) {
                profile_get_integer(ctx->profile, "options",
                                    "readahead_mem_pct", 0, -1, &c);
@@ -1188,7 +1246,7 @@ static errcode_t e2fsck_check_mmp(ext2_filsys fs, e2fsck_t ctx)
        if (retval)
                goto check_error;
 
-       /* Print warning if e2fck will wait for more than 20 secs. */
+       /* Print warning if e2fsck will wait for more than 20 secs. */
        if (verbose || wait_time > EXT4_MMP_MIN_CHECK_INTERVAL * 4) {
                log_out(ctx, _("MMP interval is %u seconds and total wait "
                               "time is %u seconds. Please wait...\n"),
@@ -1216,7 +1274,8 @@ check_error:
                dump_mmp_msg(fs->mmp_buf,
                             _("If you are sure the filesystem is not "
                               "in use on any node, run:\n"
-                              "'tune2fs -f -E clear_mmp {device}'\n"));
+                              "'tune2fs -f -E clear_mmp %s'\n"),
+                            ctx->device_name);
        } else if (retval == EXT2_ET_MMP_MAGIC_INVALID) {
                if (fix_problem(ctx, PR_0_MMP_INVALID_MAGIC, &pctx)) {
                        ext2fs_mmp_clear(fs);
@@ -1330,7 +1389,7 @@ int main (int argc, char *argv[])
        const char      *lib_ver_date;
        int             my_ver, lib_ver;
        e2fsck_t        ctx;
-       blk64_t         orig_superblock;
+       blk64_t         orig_superblock = ~(blk64_t)0;
        struct problem_context pctx;
        int flags, run_result, was_changed;
        int journal_size;
@@ -1339,6 +1398,7 @@ int main (int argc, char *argv[])
        __u32 features[3];
        char *cp;
        enum quota_type qtype;
+       struct ext2fs_journal_params jparams;
 
        clear_problem_context(&pctx);
        sigcatcher_setup();
@@ -1374,6 +1434,7 @@ int main (int argc, char *argv[])
        set_up_logging(ctx);
        if (ctx->logf) {
                int i;
+
                fputs("E2fsck run: ", ctx->logf);
                for (i = 0; i < argc; i++) {
                        if (i)
@@ -1382,6 +1443,19 @@ int main (int argc, char *argv[])
                }
                fputc('\n', ctx->logf);
        }
+       if (ctx->problem_logf) {
+               int i;
+
+               fputs("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
+                     ctx->problem_logf);
+               fprintf(ctx->problem_logf, "<problem_log time=\"%lu\">\n",
+                       (unsigned long) ctx->now);
+               fprintf(ctx->problem_logf, "<invocation prog=\"%s\"",
+                       argv[0]);
+               for (i = 1; i < argc; i++)
+                       fprintf(ctx->problem_logf, " arg%d=\"%s\"", i, argv[i]);
+               fputs("/>\n", ctx->problem_logf);
+       }
 
        init_resource_track(&ctx->global_rtrack, NULL);
        if (!(ctx->options & E2F_OPT_PREEN) || show_version_only)
@@ -1405,7 +1479,7 @@ int main (int argc, char *argv[])
        }
        ctx->superblock = ctx->use_superblock;
 
-       flags = EXT2_FLAG_SKIP_MMP;
+       flags = EXT2_FLAG_SKIP_MMP | EXT2_FLAG_THREADS;
 restart:
 #ifdef CONFIG_TESTIO_DEBUG
        if (getenv("TEST_IO_FLAGS") || getenv("TEST_IO_BLOCK")) {
@@ -1537,6 +1611,27 @@ failure:
                                             "check of the device.\n"));
 #endif
                else {
+                       /*
+                        * Let's try once more will less consistency checking
+                        * so that we are able to recover from more errors
+                        * (e.g. some tool messing up some value in the sb).
+                        */
+                       if ((retval == EXT2_ET_CORRUPT_SUPERBLOCK) &&
+                           !(flags & EXT2_FLAG_IGNORE_SB_ERRORS)) {
+                               if (fs)
+                                       ext2fs_close_free(&fs);
+                               log_out(ctx, _("%s: Trying to load superblock "
+                                       "despite errors...\n"),
+                                       ctx->program_name);
+                               flags |= EXT2_FLAG_IGNORE_SB_ERRORS;
+                               /*
+                                * If we tried backup sb, revert to the
+                                * original one now.
+                                */
+                               if (orig_superblock != ~(blk64_t)0)
+                                       ctx->superblock = orig_superblock;
+                               goto restart;
+                       }
                        fix_problem(ctx, PR_0_SB_CORRUPT, &pctx);
                        if (retval == EXT2_ET_BAD_MAGIC)
                                check_plausibility(ctx->filesystem_name,
@@ -1607,17 +1702,33 @@ failure:
         * Set the device name, which is used whenever we print error
         * or informational messages to the user.
         */
-       if (ctx->device_name == 0 &&
-           (sb->s_volume_name[0] != 0)) {
-               ctx->device_name = string_copy(ctx, sb->s_volume_name,
+       if (ctx->device_name == 0 && sb->s_volume_name[0])
+               ctx->device_name = string_copy(ctx, (char *) sb->s_volume_name,
                                               sizeof(sb->s_volume_name));
-       }
+
        if (ctx->device_name == 0)
                ctx->device_name = string_copy(ctx, ctx->filesystem_name, 0);
        for (cp = ctx->device_name; *cp; cp++)
                if (isspace(*cp) || *cp == ':')
                        *cp = '_';
 
+       if (ctx->problem_logf) {
+
+               fprintf(ctx->problem_logf, "<filesystem dev=\"%s\"",
+                       ctx->filesystem_name);
+               if (!uuid_is_null(sb->s_uuid)) {
+                       char buf[48];
+
+                       uuid_unparse(sb->s_uuid, buf);
+                       fprintf(ctx->problem_logf, " uuid=\"%s\"", buf);
+               }
+               if (sb->s_volume_name[0])
+                       fprintf(ctx->problem_logf, " label=\"%.*s\"",
+                               EXT2_LEN_STR(sb->s_volume_name));
+
+               fputs("/>\n", ctx->problem_logf);
+       }
+
        ehandler_init(fs->io);
 
        if (ext2fs_has_feature_mmp(fs->super) &&
@@ -1720,6 +1831,12 @@ print_unsupp_features:
                goto get_newer;
        }
 
+       if (ext2fs_has_feature_casefold(sb) && !fs->encoding) {
+               log_err(ctx, _("%s has unsupported encoding: %0x\n"),
+                       ctx->filesystem_name, sb->s_encoding);
+               goto get_newer;
+       }
+
        /*
         * If the user specified a specific superblock, presumably the
         * master superblock has been trashed.  So we mark the
@@ -1775,9 +1892,15 @@ print_unsupp_features:
        /*
         * Save the journal size in megabytes.
         * Try and use the journal size from the backup else let e2fsck
-        * find the default journal size.
+        * find the default journal size. If fast commit feature is enabled,
+        * it is not clear how many of the journal blocks were fast commit
+        * blocks. So, ignore the size of journal found in backup.
+        *
+        * TODO: Add a new backup type that captures fast commit info as
+        * well.
         */
-       if (sb->s_jnl_backup_type == EXT3_JNL_BACKUP_BLOCKS)
+       if (sb->s_jnl_backup_type == EXT3_JNL_BACKUP_BLOCKS &&
+               !ext2fs_has_feature_fast_commit(sb))
                journal_size = (sb->s_jnl_blocks[15] << (32 - 20)) |
                               (sb->s_jnl_blocks[16] >> 20);
        else
@@ -1799,20 +1922,16 @@ print_unsupp_features:
        if (!ctx->invalid_bitmaps &&
            (ctx->flags & E2F_FLAG_JOURNAL_INODE)) {
                if (fix_problem(ctx, PR_6_RECREATE_JOURNAL, &pctx)) {
-                       if (journal_size < 1024)
-                               journal_size = ext2fs_default_journal_size(ext2fs_blocks_count(fs->super));
-                       if (journal_size < 0) {
-                               ext2fs_clear_feature_journal(fs->super);
-                               fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
-                               log_out(ctx, "%s: Couldn't determine "
-                                       "journal size\n", ctx->program_name);
-                               goto no_journal;
+                       if (journal_size < 1024) {
+                               ext2fs_get_journal_params(&jparams, fs);
+                       } else {
+                               jparams.num_journal_blocks = journal_size;
+                               jparams.num_fc_blocks = 0;
                        }
                        log_out(ctx, _("Creating journal (%d blocks): "),
-                              journal_size);
+                              jparams.num_journal_blocks);
                        fflush(stdout);
-                       retval = ext2fs_add_journal_inode(fs,
-                                                         journal_size, 0);
+                       retval = ext2fs_add_journal_inode3(fs, &jparams, ~0ULL, 0);
                        if (retval) {
                                log_out(ctx, "%s: while trying to create "
                                        "journal\n", error_message(retval));
@@ -1890,28 +2009,52 @@ no_journal:
                ext2fs_mark_super_dirty(fs);
        }
 
-       e2fsck_write_bitmaps(ctx);
-       if (fs->flags & EXT2_FLAG_DIRTY) {
-               pctx.errcode = ext2fs_flush(ctx->fs);
+       if (ext2fs_has_feature_shared_blocks(ctx->fs->super) &&
+           (ctx->options & E2F_OPT_UNSHARE_BLOCKS) &&
+           (ctx->options & E2F_OPT_NO))
+               /* Don't try to write or flush I/O, we just wanted to know whether or
+                * not there were enough free blocks to undo deduplication.
+                */
+               goto skip_write;
+
+       if (!(ctx->options & E2F_OPT_READONLY)) {
+               e2fsck_write_bitmaps(ctx);
+               if (fs->flags & EXT2_FLAG_DIRTY) {
+                       pctx.errcode = ext2fs_flush(ctx->fs);
+                       if (pctx.errcode)
+                               fix_problem(ctx, PR_6_FLUSH_FILESYSTEM, &pctx);
+               }
+               pctx.errcode = io_channel_flush(ctx->fs->io);
                if (pctx.errcode)
-                       fix_problem(ctx, PR_6_FLUSH_FILESYSTEM, &pctx);
+                       fix_problem(ctx, PR_6_IO_FLUSH, &pctx);
        }
-       pctx.errcode = io_channel_flush(ctx->fs->io);
-       if (pctx.errcode)
-               fix_problem(ctx, PR_6_IO_FLUSH, &pctx);
 
        if (was_changed) {
-               exit_value |= FSCK_NONDESTRUCT;
-               if (!(ctx->options & E2F_OPT_PREEN))
-                       log_out(ctx, _("\n%s: ***** FILE SYSTEM WAS "
-                                      "MODIFIED *****\n"),
+               int fs_fixed = (ctx->flags & E2F_FLAG_PROBLEMS_FIXED);
+
+               if (fs_fixed)
+                       exit_value |= FSCK_NONDESTRUCT;
+               if (!(ctx->options & E2F_OPT_PREEN)) {
+#if 0  /* Do this later; it breaks too many tests' golden outputs */
+                       log_out(ctx, fs_fixed ?
+                               _("\n%s: ***** FILE SYSTEM ERRORS "
+                                 "CORRECTED *****\n") :
+                               _("%s: File system was modified.\n"),
                                ctx->device_name);
+#else
+                       log_out(ctx,
+                               _("\n%s: ***** FILE SYSTEM WAS MODIFIED *****\n"),
+                               ctx->device_name);
+#endif
+               }
                if (ctx->mount_flags & EXT2_MF_ISROOT) {
                        log_out(ctx, _("%s: ***** REBOOT SYSTEM *****\n"),
                                ctx->device_name);
                        exit_value |= FSCK_REBOOT;
                }
        }
+
+skip_write:
        if (!ext2fs_test_valid(fs) ||
            ((exit_value & FSCK_CANCELED) &&
             (sb->s_state & EXT2_ERROR_FS))) {
@@ -1939,6 +2082,8 @@ no_journal:
        ext2fs_close_free(&ctx->fs);
        free(ctx->journal_name);
 
+       if (ctx->logf)
+               fprintf(ctx->logf, "Exit status: %d\n", exit_value);
        e2fsck_free_context(ctx);
        remove_error_table(&et_ext2_error_table);
        remove_error_table(&et_prof_error_table);
index 9e217e6..0a7cafe 100644 (file)
 #include <errno.h>
 #endif
 
-#ifdef HAVE_SYS_SYSCTL_H
-#include <sys/sysctl.h>
-#endif
-
 #include "e2fsck.h"
 
 extern e2fsck_t e2fsck_global_ctx;   /* Try your very best not to use this! */
@@ -83,6 +79,8 @@ out:
        ctx->flags |= E2F_FLAG_ABORT;
        if (ctx->flags & E2F_FLAG_SETJMP_OK)
                longjmp(ctx->abort_loc, 1);
+       if (ctx->logf)
+               fprintf(ctx->logf, "Exit status: %d\n", exit_value);
        exit(exit_value);
 }
 
@@ -114,27 +112,26 @@ void log_err(e2fsck_t ctx, const char *fmt, ...)
        }
 }
 
-void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned int size,
+void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned long size,
                             const char *description)
 {
        void *ret;
        char buf[256];
 
 #ifdef DEBUG_ALLOCATE_MEMORY
-       printf("Allocating %u bytes for %s...\n", size, description);
+       printf("Allocating %lu bytes for %s...\n", size, description);
 #endif
-       ret = malloc(size);
-       if (!ret) {
-               sprintf(buf, "Can't allocate %u bytes for %s\n",
+       if (ext2fs_get_memzero(size, &ret)) {
+               sprintf(buf, "Can't allocate %lu bytes for %s\n",
                        size, description);
                fatal_error(ctx, buf);
        }
-       memset(ret, 0, size);
+
        return ret;
 }
 
 char *string_copy(e2fsck_t ctx EXT2FS_ATTR((unused)),
-                 const char *str, int len)
+                 const char *str, size_t len)
 {
        char    *ret;
 
@@ -194,6 +191,9 @@ int ask_yn(e2fsck_t ctx, const char * string, int def)
        const char      *short_yes = _("yY");
        const char      *short_no = _("nN");
        const char      *short_yesall = _("aA");
+       const char      *english_yes = "yY";
+       const char      *english_no = "nN";
+       const char      *english_yesall = "aA";
        const char      *yesall_prompt = _(" ('a' enables 'yes' to all) ");
        const char      *extra_prompt = "";
        static int      yes_answers;
@@ -201,7 +201,8 @@ int ask_yn(e2fsck_t ctx, const char * string, int def)
 #ifdef HAVE_TERMIOS_H
        struct termios  termios, tmp;
 
-       tcgetattr (0, &termios);
+       if (tcgetattr (0, &termios) < 0)
+               memset(&termios, 0, sizeof(termios));
        tmp = termios;
        tmp.c_lflag &= ~(ICANON | ECHO);
        tmp.c_cc[VMIN] = 1;
@@ -242,19 +243,28 @@ int ask_yn(e2fsck_t ctx, const char * string, int def)
                        return 0;
                }
                if (strchr(short_yes, (char) c)) {
+               do_yes:
                        def = 1;
                        if (yes_answers >= 0)
                                yes_answers++;
                        break;
                } else if (strchr(short_no, (char) c)) {
+               do_no:
                        def = 0;
                        yes_answers = -1;
                        break;
                } else if (strchr(short_yesall, (char)c)) {
+               do_all:
                        def = 2;
                        yes_answers = -1;
                        ctx->options |= E2F_OPT_YES;
                        break;
+               } else if (strchr(english_yes, (char) c)) {
+                       goto do_yes;
+               } else if (strchr(english_no, (char) c)) {
+                       goto do_no;
+               } else if (strchr(english_yesall, (char) c)) {
+                       goto do_all;
                } else if ((c == 27 || c == ' ' || c == '\n') && (def != -1)) {
                        yes_answers = -1;
                        break;
@@ -407,9 +417,6 @@ void print_resource_track(e2fsck_t ctx, const char *desc,
 #ifdef HAVE_GETRUSAGE
        struct rusage r;
 #endif
-#ifdef HAVE_MALLINFO
-       struct mallinfo malloc_info;
-#endif
        struct timeval time_end;
 
        if ((desc && !(ctx->options & E2F_OPT_TIME2)) ||
@@ -422,18 +429,21 @@ void print_resource_track(e2fsck_t ctx, const char *desc,
        if (desc)
                log_out(ctx, "%s: ", desc);
 
+#define kbytes(x)      (((unsigned long long)(x) + 1023) / 1024)
 #ifdef HAVE_MALLINFO
-#define kbytes(x)      (((unsigned long)(x) + 1023) / 1024)
-
-       malloc_info = mallinfo();
-       log_out(ctx, _("Memory used: %luk/%luk (%luk/%luk), "),
-               kbytes(malloc_info.arena), kbytes(malloc_info.hblkhd),
-               kbytes(malloc_info.uordblks), kbytes(malloc_info.fordblks));
-#else
-       log_out(ctx, _("Memory used: %lu, "),
-               (unsigned long) (((char *) sbrk(0)) -
-                                ((char *) track->brk_start)));
+       /* don't use mallinfo() if over 2GB used, since it returns "int" */
+       if ((char *)sbrk(0) - (char *)track->brk_start < 2LL << 30) {
+               struct mallinfo malloc_info = mallinfo();
+
+               log_out(ctx, _("Memory used: %lluk/%lluk (%lluk/%lluk), "),
+                       kbytes(malloc_info.arena), kbytes(malloc_info.hblkhd),
+                       kbytes(malloc_info.uordblks),
+                       kbytes(malloc_info.fordblks));
+       } else
 #endif
+       log_out(ctx, _("Memory used: %lluk, "),
+               kbytes(((char *)sbrk(0)) - ((char *)track->brk_start)));
+
 #ifdef HAVE_GETRUSAGE
        getrusage(RUSAGE_SELF, &r);
 
@@ -721,7 +731,7 @@ int check_for_modules(const char *fs_name)
 
 /*
  * Helper function that does the right thing if write returns a
- * partial write, or an EGAIN/EINTR error.
+ * partial write, or an EAGAIN/EINTR error.
  */
 int write_all(int fd, char *buf, size_t count)
 {
@@ -742,16 +752,30 @@ int write_all(int fd, char *buf, size_t count)
        return c;
 }
 
-void dump_mmp_msg(struct mmp_struct *mmp, const char *msg)
+void dump_mmp_msg(struct mmp_struct *mmp, const char *fmt, ...)
 {
+       va_list pvar;
 
-       if (msg)
-               printf("MMP check failed: %s\n", msg);
+       if (fmt) {
+               printf("MMP check failed: ");
+               va_start(pvar, fmt);
+               vprintf(fmt, pvar);
+               va_end(pvar);
+       }
        if (mmp) {
                time_t t = mmp->mmp_time;
 
-               printf("MMP error info: last update: %s node: %s device: %s\n",
-                      ctime(&t), mmp->mmp_nodename, mmp->mmp_bdevname);
+               printf("MMP_block:\n");
+               printf("    mmp_magic: 0x%x\n", mmp->mmp_magic);
+               printf("    mmp_check_interval: %d\n",
+                      mmp->mmp_check_interval);
+               printf("    mmp_sequence: %08x\n", mmp->mmp_seq);
+               printf("    mmp_update_date: %s", ctime(&t));
+               printf("    mmp_update_time: %lld\n", mmp->mmp_time);
+               printf("    mmp_node_name: %.*s\n",
+                      EXT2_LEN_STR(mmp->mmp_nodename));
+               printf("    mmp_device_name: %.*s\n",
+                      EXT2_LEN_STR(mmp->mmp_bdevname));
        }
 }
 
@@ -858,12 +882,6 @@ unsigned long long get_memory_size(void)
 # elif defined(CTL_HW_UINT)
        unsigned int size = 0;
 # endif
-# if defined(CTL_HW_INT64) || defined(CTL_HW_UINT)
-       size_t len = sizeof(size);
-
-       if (sysctl(mib, 2, &size, &len, NULL, 0) == 0)
-               return (unsigned long long)size;
-# endif
        return 0;
 #else
 # warning "Don't know how to detect memory on your platform?"
index 6c0ff30..7a50b08 100644 (file)
@@ -1,16 +1,15 @@
 Begin3
 Title:          EXT2 Filesystem utilities
-Version:        1.43.4
-Entered-date:   2017-01-31
+Version:        1.46.0
+Entered-date:   2021-01-29
 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:   ftp.kernel.org /pub/linux/kernel/people/tytso/e2fsprogs
-                7376kB e2fsprogs-1.43.4.tar.gz
-                588kB  e2fsprogs-libs-1.43.4.tar.gz
-                1kB    e2fsprogs-1.43.4.lsm
+                9260kB e2fsprogs-1.46.0.tar.gz
+                1kB    e2fsprogs-1.46.0.lsm
 Alternate-site: download.sourceforge.net /pub/sourceforge/e2fsprogs
 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/4.x
 Copying-policy: GPL-2/LGPL-2
similarity index 98%
rename from e2fsprogs.spec.in
rename to e2fsprogs.spec
index b188b75..a8fd1dd 100644 (file)
@@ -5,7 +5,7 @@
 
 Summary: Utilities for managing ext2/ext3/ext4 filesystems
 Name: e2fsprogs
-Version: @E2FSPROGS_PKGVER@
+Version: 1.46.0
 Release: 0
 License: GPLv2
 Group: System Environment/Base
@@ -116,6 +116,7 @@ exit 0
 %{_root_sbindir}/e2fsck
 %{_root_sbindir}/e2image
 %{_root_sbindir}/e2label
+%{_root_sbindir}/e2mmpstatus
 %{_root_sbindir}/e2undo
 %{_root_sbindir}/findfs
 %{_root_sbindir}/fsck
@@ -167,6 +168,7 @@ exit 0
 %{_mandir}/man8/fsck.ext4dev.8*
 %{_mandir}/man8/e2image.8*
 %{_mandir}/man8/e2label.8*
+%{_mandir}/man8/e2mmpstatus.8*
 %{_mandir}/man8/e2undo.8*
 %{_mandir}/man8/fsck.8*
 %{_mandir}/man8/logsave.8*
index 0697431..e4724ca 100644 (file)
@@ -8,6 +8,7 @@ VPATH = @srcdir@
 top_builddir = ..
 my_dir = ext2ed
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
index fda4b87..1f473cf 100644 (file)
@@ -48,10 +48,10 @@ This is version 0.2 of ext2ed - The extended-2 filesystem editor.
 Modifications on Apr 5 2001
 This is minor bug fixes to ext2ed, as of April 2001.
 It supports modern ext2 version that has file type in directory structure
-and fixes the missunderstanding between ncurses and
+and fixes the misunderstanding between ncurses and
 readline.
 
-I first applied patches from Redhat except the one for readline that 
+I first applied patches from Red Hat except the one for readline that 
 rewrote a readline behavior.
 
 Globals diffs between version 0.1 and 0.2 is stored in file :
@@ -114,7 +114,7 @@ that ncurses will be properly installed on your system:
        set your TERM environment variable to 'linux' or link
        l/linux to c/console in the terminfo database.
 
-4.     The percompiled binary was linked with ncurses 1.9.4 and will search
+4.     The precompiled binary was linked with ncurses 1.9.4 and will search
        for the terminfo database on /usr/local/lib/terminfo. If you are
        using it, and your 1.9.4 compatible terminfo database is not on the
        directory above, use the TERMINFO environment variable to specify
index ba85267..67bb4b5 100644 (file)
@@ -539,7 +539,7 @@ void type_dir___remember (char *command_line)
 
 /*
 
-This is overrided here because we don't remember a directory - It is too complicated. Instead, we remember the
+This is overridden here because we don't remember a directory - It is too complicated. Instead, we remember the
 inode of the current directory.
 
 */
index 5c24312..4612d00 100644 (file)
@@ -14,7 +14,7 @@ double check the various permissions and possible errors here.
 The major update which needs to be done here is switching to the use of the llseek system call, so that we will
 be able to support ext2 filesystems up to 4 TB. Currently, due to the standard fseek usage, we can't handle
 filesystems bigger than 4 GB. The limit is actually 2 GB because I used long rather than unsigned long long at too
-many places in the program. To conclude - This upgrade needs to be done carefuly; There are many places to change.
+many places in the program. To conclude - This upgrade needs to be done carefully; There are many places to change.
 
 First written on: April 9 1995
 
@@ -86,7 +86,7 @@ If logging is enabled, we log the change before writing it to the device.
        char temp [80];
 
        if (!write_access) {
-               wprintw (command_win,"Error - Write access not aviable (use enablewrite)\n");
+               wprintw (command_win,"Error - Write access not available (use enablewrite)\n");
                return (0);
        }
 
index ad2df96..e8052a9 100644 (file)
@@ -83,7 +83,7 @@ subjects. I can think of two ways in which I could have made my project:
 <Para>
        The "Engineer" way
 
-Learn the subject throughly before I get to the programming itself.
+Learn the subject thoroughly before I get to the programming itself.
 Then, I could easily see the entire picture and select the best
 course of action, taking all the factors into account.
 </Para>
@@ -94,7 +94,7 @@ course of action, taking all the factors into account.
        The "Explorer - Progressive" way.
 
 Jump immediately into the cold water - Start programming and
-learning the material parallelly.
+learning the material in parallel.
 </Para>
 </ListItem>
 
@@ -418,7 +418,7 @@ superblock was set exactly to the above value.
 <Para>
 It seems that starting with the <Literal remap="tt">superblock</Literal> was a good bet - Just from
 the list of variables, one can learn a lot. I didn't understand all of them
-at the time, but it seemed that the following keywords were repeating themself
+at the time, but it seemed that the following keywords were repeating themselves
 in various variables:
 
 <ItemizedList>
@@ -710,8 +710,8 @@ int dispatch (char *command_line)
 <Title>Source files in EXT2ED</Title>
 
 <Para>
-The project was getting large enough to be splitted into several source
-files. I splitted the source as much as I could into self-contained
+The project was getting large enough to be split into several source
+files. I split the source as much as I could into self-contained
 source files. The source files consist of the following blocks:
 
 <ItemizedList>
@@ -1156,7 +1156,7 @@ according to the source division outlined above, in inode_com.c) will
 store the necessary information about the inode in a specific structure
 of type struct_file_info which will be available for use by the file_com.c
 functions. Only then it will set the type to file. This is also the reason
-that a direct asynchronic set of the object type to a file through a settype
+that a direct asynchronous set of the object type to a file through a settype
 command will fail - The above data structure will not be initialized
 properly because the user never was at the inode of the file. 
 
@@ -2726,7 +2726,7 @@ struct ext2_inode {
        __u32   i_block[EXT2_N_BLOCKS]; /* Pointers to blocks */
        __u32   i_version;              /* File version (for NFS) */
        __u32   i_file_acl;             /* File ACL */
-       __u32   i_dir_acl;              /* Directory ACL */
+       __u32   i_size_high;            /* High 32bits of size */
        __u32   i_faddr;                /* Fragment address */
        union {
                struct {
index a6ebf5a..0d54f07 100644 (file)
@@ -487,7 +487,7 @@ struct ext2_inode {
        __u32   i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
        __u32   i_version;      /* File version (for NFS) */
        __u32   i_file_acl;     /* File ACL */
-       __u32   i_dir_acl;      /* Directory ACL */
+       __u32   i_size_high;    /* High 32bits of size */
        __u32   i_faddr;        /* Fragment address */
        union {
                struct {
@@ -533,7 +533,7 @@ allocated blocks.
 </Para>
 
 <Para>
-It was found experimently that many of the files in the filesystem are
+It was found experimentally that many of the files in the filesystem are
 actually quite small. To take advantage of this effect, the kernel provides
 storage of up to 12 block numbers in the inode itself. Those blocks are
 called <Literal remap="tt">direct blocks</Literal>. The advantage is that once the kernel has the
@@ -692,7 +692,7 @@ options. They determine the type of the "file" to which the inode belongs:
 <Title>Time and date</Title>
 
 <Para>
-Linux records the last time in which various operations occured with the
+Linux records the last time in which various operations occurred with the
 file. The time and date are saved in the standard C library format - The
 number of seconds which passed since 00:00:00 GMT, January 1, 1970. The
 following times are recorded:
@@ -1087,7 +1087,7 @@ the length of the file name.
 <Para>
 The variable <Literal remap="tt">rec&lowbar;len</Literal> is provided because the directory entries are
 padded with zeroes so that the next entry will be in an offset which is
-a multiplition of 4. The resulting directory entry size is stored in
+a multiplication of 4. The resulting directory entry size is stored in
 <Literal remap="tt">rec&lowbar;len</Literal>. If the directory entry is the last in the block, it is
 padded with zeroes till the end of the block, and rec&lowbar;len is updated
 accordingly.
@@ -1402,7 +1402,7 @@ then zero s&lowbar;mnt&lowbar;count. <Literal remap="tt">s&lowbar;max&lowbar;mnt
 E2fsck also records the last time in which the file system was checked in
 the <Literal remap="tt">s&lowbar;lastcheck</Literal> variable. The user tunable parameter
 <Literal remap="tt">s&lowbar;checkinterval</Literal> will contain the number of seconds which are allowed
-to pass since <Literal remap="tt">s&lowbar;lastcheck</Literal> until a check is reforced. A value of
+to pass since <Literal remap="tt">s&lowbar;lastcheck</Literal> until a check is forced. A value of
 <Literal remap="tt">0</Literal> disables time-based check.
 </Para>
 
index 42887ef..1e8f3cd 100644 (file)
@@ -506,8 +506,8 @@ itself the direct blocks, indirect blocks, ..., while still preserving the
 actual view of the exact block usage of the file.
 </Screen>
 
-The point is that the "tour" of the filesystem will now be synchronic rather
-than asynchronic - Each object has the "links" to pass between connected
+The point is that the "tour" of the filesystem will now be synchronous rather
+than asynchronous - Each object has the "links" to pass between connected
 logical structures, and special fine-tuned functions to deal with it.
 </Para>
 
@@ -855,7 +855,7 @@ The <Command>setdevice</Command> command is described at section <XRef LinkEnd="
 Syntax: setoffset [block || type] [+|-]offset
 </Screen>
 
-The <Command>setoffset</Command> command is used to move asynchronically inside the file
+The <Command>setoffset</Command> command is used to move asynchronously inside the file
 system. It is considered a low level command, and usually should not be used
 when editing an ext2 filesystem, simply because movement is better
 utilized through the specific ext2 commands.
index bf927b0..e356f4c 100644 (file)
@@ -5,7 +5,7 @@ Most of this file is just copied from the ext2 main include file.
 My parser is very primitive - It only searches for the struct keywords,
 and uses the variables in there. The rest of the file is just ignored.
 
-You will find at the end a few additional types which are not aviable in
+You will find at the end a few additional types which are not available in
 the original include file, such as the types "file" and "dir". They have
 no variables, but are necessary due to the way ext2ed binds C commands
 to specific types.
@@ -102,7 +102,7 @@ struct ext2_inode {
        __u32  i_block[14]; /* Pointers to blocks */
        __u32  i_version;       /* File version (for NFS) */
        __u32  i_file_acl;      /* File ACL */
-       __u32  i_dir_acl;       /* Directory ACL */
+       __u32  i_size_high;     /* High 32bits of size */
        __u32  i_faddr;         /* Fragment address */
        __u8   l_i_frag;        /* Fragment number */
        __u8   l_i_fsize;       /* Fragment size */
index b5d6b33..008a125 100644 (file)
@@ -6,7 +6,7 @@ ext2ed \- ext2 file system editor
 .B ext2ed
 .SH DESCRIPTION
 .B ext2ed
-in an 
+in an
 .B editor
 for the
 .B second extended filesystem.
index 7e2a925..c079623 100644 (file)
@@ -52,8 +52,8 @@ AllowMountedRead      on
 
 # When ForceExt2 is set to on, the filesystem is assumed to be ext2
 # filesystem, despite the possibly corrupt superblock magic number reading.
-# All the ext2 specific commands will be aviable despite the possible
-# autodetection failture.
+# All the ext2 specific commands will be available despite the possible
+# autodetection failure.
 
 ForceExt2              off
 
index b9b43b4..0ac77b7 100644 (file)
@@ -249,7 +249,7 @@ void signal_SIGSEGV_handler (int sig_num);
 
 /* general_com.c */
 
-/* General commands which are aviable always */
+/* General commands which are available always */
 
 extern void help (char *command_line);
 extern void set (char *command_line);
@@ -275,7 +275,7 @@ void detailed_help (char *text);
 
 /* ext2_com.c */
 
-/* Extended2 filesystem genereal commands - Aviable only when editing an
+/* Extended2 filesystem general commands - Available only when editing an
    ext2 filesystem */
 
 extern void type_ext2___super (char *command_line);
index c9b2ffc..aa274e3 100644 (file)
@@ -90,7 +90,7 @@ void help (char *command_line)
        wprintw (show_pad,"EXT2ED ver %s (%s)\n",E2FSPROGS_VERSION, E2FSPROGS_DATE);
        wprintw (show_pad,"Copyright (C) 1995 Gadi Oxman\n");
        wprintw (show_pad,"Reviewed 2001 Christian Bac\n");
-       wprintw (show_pad,"Modified and enchanced by Theodore Ts'o, 2002\n");
+       wprintw (show_pad,"Modified and enhanced by Theodore Ts'o, 2002\n");
        wprintw (show_pad,"EXT2ED is hereby placed under the terms of the GNU General Public License.\n\n");
        wprintw (show_pad,"EXT2ED was programmed as a student project in the software laboratory\n");
        wprintw (show_pad,"of the faculty of electrical engineering in the\n");
@@ -140,7 +140,7 @@ void detailed_help (char *text)
                refresh_show_pad ();return;
        }
 
-       wprintw (show_pad,"Error - Command %s not aviable now\n",text);
+       wprintw (show_pad,"Error - Command %s not available now\n",text);
        refresh_show_pad ();return;
 }
 
index 7d9b526..4e58431 100644 (file)
@@ -57,7 +57,7 @@ int init (void)
 
        general_commands.last_command=-1;       /* No commands whatsoever meanwhile */
        ext2_commands.last_command=-1;
-       add_general_commands ();                /* Add the general commands, aviable always */
+       add_general_commands ();                /* Add the general commands, available always */
        device_handle=NULL;                     /* Notice that our device is still not set up */
        device_offset=-1;
        current_type=NULL;                      /* No filesystem specific types yet */
@@ -80,8 +80,8 @@ void add_general_commands (void)
        add_user_command (&general_commands,"help","EXT2ED help system",help);
        add_user_command (&general_commands,"set","Changes a variable in the current object",set);
        add_user_command (&general_commands,"setdevice","Selects the filesystem block device (e.g. /dev/hda1)",set_device);
-       add_user_command (&general_commands,"setoffset","Moves asynchronicly in the filesystem",set_offset);
-       add_user_command (&general_commands,"settype","Tells EXT2ED how to interpert the current object",set_type);
+       add_user_command (&general_commands,"setoffset","Moves asynchronously in the filesystem",set_offset);
+       add_user_command (&general_commands,"settype","Tells EXT2ED how to interpret the current object",set_type);
        add_user_command (&general_commands,"show","Displays the current object",show);
        add_user_command (&general_commands,"pgup","Scrolls data one page up",pgup);
        add_user_command (&general_commands,"pgdn","Scrolls data one page down",pgdn);
@@ -316,7 +316,7 @@ Set specific type user commands.
        }
 
        if (strcmp ((ptr->name),"ext2_group_desc")==0) {
-               add_user_command (&ptr->type_commands,"next","Pass to the next block group decriptor",type_ext2_group_desc___next);
+               add_user_command (&ptr->type_commands,"next","Pass to the next block group descriptor",type_ext2_group_desc___next);
                add_user_command (&ptr->type_commands,"prev","Pass to the previous group descriptor",type_ext2_group_desc___prev);
                add_user_command (&ptr->type_commands,"entry","Pass to a specific group descriptor",type_ext2_group_desc___entry);
                add_user_command (&ptr->type_commands,"show","Shows the current group descriptor",type_ext2_group_desc___show);
index 4a29979..f7e7d7d 100644 (file)
@@ -14,7 +14,7 @@ This file mostly contains:
 2.     The parser, which asks the command line from the user.
 3.     The dispatcher, which analyzes the command line and calls the appropriate handler function.
 4.     A command pattern matcher which is used along with the readline completion feature.
-5.     A function which tells the user that an internal error has occured.
+5.     A function which tells the user that an internal error has occurred.
 
 First written on: March 30 1995
 
@@ -57,7 +57,7 @@ They are initialized below to some logical defaults.
 char Ext2Descriptors [200]="ext2.descriptors"; /* The location of the ext2 filesystem object definition */
 char AlternateDescriptors [200]="";            /* We allow the user to define additional structures */
 char LogFile [200]="ext2ed.log";               /* The location of the log file - Each write will be logged there */
-int LogChanges=1;                              /* 1 enables logging, 0 diables logging */
+int LogChanges=1;                              /* 1 enables logging, 0 disables logging */
 int AllowChanges=0;                            /* When set, the enablewrite command will fail */
 int AllowMountedRead=0;                                /* Behavior when trying to open a mounted filesystem read-only */
 int ForceExt2=0;                               /* When set, ext2 autodetection is overridden */
@@ -334,7 +334,7 @@ void parser (void)
 
 
 /*
- * This is a very important function. Its task is to recieve a command
+ * This is a very important function. Its task is to receive a command
  * name and link it to a C function.  There are three types of commands:
  *
  * 1.  General commands - Always available and accessed through
@@ -354,7 +354,7 @@ void parser (void)
  *
  * When an handling function is found, it is called along with the
  * command line that was passed to us. The handling function is then
- * free to interpert the arguments in its own style.
+ * free to interpret the arguments in its own style.
  */
 int dispatch (char *command_line)
 {
@@ -480,7 +480,7 @@ char *complete_command (char *text,int state)
                        }
                }
 
-       /* No, pehaps ext2 specific command then ? */
+       /* No, perhaps ext2 specific command then ? */
 
        for (i=0;i<=ext2_commands.last_command;i++) {
                if (strncmp (ext2_commands.names [i],text,len)==0) {
diff --git a/include/mingw/grp.h b/include/mingw/grp.h
new file mode 100644 (file)
index 0000000..67f62d9
--- /dev/null
@@ -0,0 +1,16 @@
+
+#pragma once
+
+#include <sys/types.h>
+
+__inline struct group * getgrnam(char* g){return 0;}
+
+struct group
+  {
+    char *gr_name;
+    char *gr_passwd;
+    __gid_t gr_gid;
+    char **gr_mem;
+  };
+
+#define getgrgid(i) NULL
diff --git a/include/mingw/linux/types.h b/include/mingw/linux/types.h
new file mode 100644 (file)
index 0000000..9631456
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef _LINUX_TYPES_H
+#define _LINUX_TYPES_H
+
+//#ifndef _MSC_VER
+//#error  _MSC_VER not defined
+//#endif
+
+#include <sys/types.h>
+
+typedef unsigned __int8 __u8;
+typedef signed __int8 __s8;
+
+typedef        signed   __int16        __s16;
+typedef        unsigned __int16        __u16;
+
+typedef        signed   __int32        __s32;
+typedef        unsigned __int32        __u32;
+
+typedef        signed   __int64        __s64;
+typedef        unsigned __int64        __u64;
+
+
+//typedef __u32 ino_t;
+typedef __u32 dev_t;
+typedef __u32 uid_t;
+typedef __u32 gid_t;
+
+#include <stdint.h>
+
+#endif /* LINUX_TYPES_H */
diff --git a/include/mingw/pwd.h b/include/mingw/pwd.h
new file mode 100644 (file)
index 0000000..d048842
--- /dev/null
@@ -0,0 +1,20 @@
+
+#pragma once
+
+#include <sys/types.h>
+
+__inline struct passwd* getpwnam (char* g){return 0;}
+
+struct passwd
+{
+  char *pw_name;
+  char *pw_passwd;
+  __uid_t pw_uid;
+  __gid_t pw_gid;
+  char *pw_gecos;
+  char *pw_dir;
+  char *pw_shell;
+};
+
+#define getpwuid(i) NULL
+
diff --git a/include/mingw/sys/stat.h b/include/mingw/sys/stat.h
new file mode 100644 (file)
index 0000000..0ca1d1b
--- /dev/null
@@ -0,0 +1,20 @@
+
+#pragma once
+
+#if HAVE_SYS_STAT_H
+#include_next <sys/stat.h>
+#endif
+
+#ifndef lstat
+#define lstat stat
+#endif
+
+#ifndef S_ISLNK
+#ifdef __S_IFLNK
+#define S_ISLNK(mode)  __S_ISTYPE((mode), __S_IFLNK)
+#else
+#define S_ISLNK(mode)  0
+#endif
+#endif
+
+#define link(a, b)     CreateHardLink((a), (b), NULL)
diff --git a/include/mingw/sys/sysmacros.h b/include/mingw/sys/sysmacros.h
new file mode 100644 (file)
index 0000000..18fcaaa
--- /dev/null
@@ -0,0 +1,11 @@
+
+#pragma once
+
+/*
+ * Fall back to Linux's definitions of makedev and major are needed.
+ * The search_sysfs_block() function is highly unlikely to work on
+ * non-Linux systems anyway.
+ */
+#ifndef makedev
+#define makedev(maj, min) (((maj) << 8) + (min))
+#endif
\ No newline at end of file
diff --git a/include/mingw/sys/types.h b/include/mingw/sys/types.h
new file mode 100644 (file)
index 0000000..9d048fc
--- /dev/null
@@ -0,0 +1,9 @@
+
+#pragma once
+
+#include_next <sys/types.h>
+
+#include <linux/types.h>
+
+typedef unsigned short __uid_t;
+typedef unsigned short __gid_t;
diff --git a/include/mingw/unistd.h b/include/mingw/unistd.h
new file mode 100644 (file)
index 0000000..9c0dc81
--- /dev/null
@@ -0,0 +1,13 @@
+
+#pragma once
+
+#include_next <unistd.h>
+
+__inline __uid_t getuid(void){return 0;}
+__inline int geteuid(void){return 1;}
+
+__inline __gid_t getgid(void){return 0;}
+__inline __gid_t getegid(void){return 0;}
+
+// no-oped sync
+__inline void sync(void){};
index 33ad46c..88b62fd 100644 (file)
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU Library General Public
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   write to the Free Software Foundation, Inc., 51 Franklin Street,
+   Fifth Floor, Boston, MA 02110-1301, USA. */
 
 #ifndef _GETOPT_H
 #define _GETOPT_H 1
index 8e5bc90..eb87011 100644 (file)
@@ -1,10 +1,11 @@
 #ifndef _LINUX_TYPES_H
 #define _LINUX_TYPES_H
 
-#ifndef _MSC_VER
-#error  _MSC_VER not defined
-#endif
+//#ifndef _MSC_VER
+//#error  _MSC_VER not defined
+//#endif
 
+#include <sys/types.h>
 
 typedef unsigned __int8 __u8;
 typedef signed __int8 __s8;
@@ -22,7 +23,11 @@ typedef      signed   __int64        __s64;
 typedef        unsigned __int64        __u64;
 
 
-typedef __u32 ino_t;
+//typedef __u32 ino_t;
+typedef __u32 dev_t;
+typedef __u32 uid_t;
+typedef __u32 gid_t;
 
+#include <stdint.h>
 
 #endif /* LINUX_TYPES_H */
diff --git a/intl/Makefile.in b/intl/Makefile.in
deleted file mode 100644 (file)
index db6d7d7..0000000
+++ /dev/null
@@ -1,547 +0,0 @@
-# Makefile for directory with message catalog handling library of GNU gettext
-# Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, 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
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
-
-PACKAGE = @PACKAGE@
-VERSION = @VERSION@
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-top_builddir = ..
-VPATH = $(srcdir)
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-datarootdir = @datarootdir@
-transform = @program_transform_name@
-libdir = @libdir@
-includedir = @includedir@
-datadir = @datadir@
-localedir = $(datadir)/locale
-gettextsrcdir = $(datadir)/gettext/intl
-aliaspath = $(localedir)
-subdir = intl
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
-
-@SET_MAKE@
-
-@ifGNUmake@ V =
-@ifGNUmake@ ifeq ($(strip $(V)),)
-@ifGNUmake@ #  E = @echo
-@ifGNUmake@ #  Q = @
-@ifGNUmake@    E = @E@
-@ifGNUmake@    Q = @Q@
-@ifGNUmake@ else
-@ifGNUmake@    E = @\#
-@ifGNUmake@    Q =
-@ifGNUmake@ endif
-
-@ifNotGNUmake@ E = @E@
-@ifNotGNUmake@ Q = @Q@
-
-@ifGNUmake@ CHECK=sparse
-@ifGNUmake@ CHECK_OPTS=-Wsparse-all -Wno-transparent-union -Wno-return-void -Wno-undef -Wno-non-pointer-null
-@ifGNUmake@ CPPCHECK=cppcheck
-@ifGNUmake@ CPPCHECK_OPTS=--force --enable=all --quiet --check-config
-@ifGNUmake@ ifeq ("$(C)", "2")
-@ifGNUmake@   CHECK_CMD=$(CHECK) $(CHECK_OPTS) -Wbitwise -D__CHECK_ENDIAN__
-@ifGNUmake@   CPPCHECK_CMD=$(CPPCHECK) $(CPPCHECK_OPTS)
-@ifGNUmake@ else
-@ifGNUmake@   ifeq ("$(C)", "1")
-@ifGNUmake@     CHECK_CMD=$(CHECK) $(CHECK_OPTS)
-@ifGNUmake@     CPPCHECK_CMD=$(CPPCHECK) $(CPPCHECK_OPTS)
-@ifGNUmake@    else
-@ifGNUmake@     CHECK_CMD=@true
-@ifGNUmake@     CPPCHECK_CMD=@true
-@ifGNUmake@   endif
-@ifGNUmake@ endif
-
-@ifNotGNUmake@ CHECK_CMD=@true
-@ifNotGNUmake@ CPPCHECK_CMD=@true
-
-l = @INTL_LIBTOOL_SUFFIX_PREFIX@
-
-AR = ar
-CC = @CC@
-LIBTOOL = @LIBTOOL@
-RANLIB = @RANLIB@
-YACC = @INTLBISON@ -y -d
-YFLAGS = --name-prefix=__gettext
-
-DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
--DLIBDIR=\"$(libdir)\" -DIN_LIBINTL \
--DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \
--Dset_relocation_prefix=libintl_set_relocation_prefix \
--Drelocate=libintl_relocate \
--DDEPENDS_ON_LIBICONV=1 -DHAVE_CONFIG_H
-CPPFLAGS = @CPPFLAGS@
-CFLAGS = @CFLAGS@
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-
-COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
-
-HEADERS = \
-  gmo.h \
-  gettextP.h \
-  hash-string.h \
-  loadinfo.h \
-  plural-exp.h \
-  eval-plural.h \
-  localcharset.h \
-  relocatable.h \
-  xsize.h \
-  printf-args.h printf-args.c \
-  printf-parse.h wprintf-parse.h printf-parse.c \
-  vasnprintf.h vasnwprintf.h vasnprintf.c \
-  os2compat.h \
-  libgnuintl.h.in
-SOURCES = \
-  bindtextdom.c \
-  dcgettext.c \
-  dgettext.c \
-  gettext.c \
-  finddomain.c \
-  loadmsgcat.c \
-  localealias.c \
-  textdomain.c \
-  l10nflist.c \
-  explodename.c \
-  dcigettext.c \
-  dcngettext.c \
-  dngettext.c \
-  ngettext.c \
-  plural.y \
-  plural-exp.c \
-  localcharset.c \
-  relocatable.c \
-  localename.c \
-  log.c \
-  printf.c \
-  osdep.c \
-  os2compat.c \
-  intl-compat.c
-OBJECTS = \
-  bindtextdom.$lo \
-  dcgettext.$lo \
-  dgettext.$lo \
-  gettext.$lo \
-  finddomain.$lo \
-  loadmsgcat.$lo \
-  localealias.$lo \
-  textdomain.$lo \
-  l10nflist.$lo \
-  explodename.$lo \
-  dcigettext.$lo \
-  dcngettext.$lo \
-  dngettext.$lo \
-  ngettext.$lo \
-  plural.$lo \
-  plural-exp.$lo \
-  localcharset.$lo \
-  relocatable.$lo \
-  localename.$lo \
-  log.$lo \
-  printf.$lo \
-  osdep.$lo \
-  intl-compat.$lo
-DISTFILES.common = Makefile.in \
-config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
-DISTFILES.generated = plural.c
-DISTFILES.normal = VERSION
-DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc \
-libgnuintl.h_vms Makefile.vms \
-libgnuintl.h.msvc-static libgnuintl.h.msvc-shared README.woe32 Makefile.msvc
-DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
-COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h
-
-all: all-@USE_INCLUDED_LIBINTL@
-all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
-all-no: all-no-@BUILD_INCLUDED_LIBINTL@
-all-no-yes: libgnuintl.$la
-all-no-no:
-
-libintl.a libgnuintl.a: $(OBJECTS)
-       $(Q) rm -f $@
-       $(E) "  AR $@"
-       $(Q) $(AR) cru $@ $(OBJECTS)
-       $(E) "  RANLIB $@"
-       $(Q) $(RANLIB) $@
-
-libintl.la libgnuintl.la: $(OBJECTS)
-       $(LIBTOOL) --mode=link \
-         $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
-         $(OBJECTS) @LTLIBICONV@ $(LIBS) -lc \
-         -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
-         -rpath $(libdir) \
-         -no-undefined
-
-# Libtool's library version information for libintl.
-# Before making a gettext release, the gettext maintainer must change this
-# according to the libtool documentation, section "Library interface versions".
-# Maintainers of other packages that include the intl directory must *not*
-# change these values.
-LTV_CURRENT=7
-LTV_REVISION=0
-LTV_AGE=4
-
-.SUFFIXES:
-.SUFFIXES: .c .y .o .lo .sin .sed
-
-.c.o:
-       $(E) "  CC $<"
-       $(Q) $(COMPILE) $<
-       $(Q) $(CHECK_CMD) $(ALL_CFLAGS) $<
-       $(Q) $(CPPCHECK_CMD) $(CPPFLAGS) $<
-
-.y.c:
-       $(YACC) $(YFLAGS) --output $@ $<
-       rm -f $*.h
-
-bindtextdom.lo: $(srcdir)/bindtextdom.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c
-dcgettext.lo: $(srcdir)/dcgettext.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c
-dgettext.lo: $(srcdir)/dgettext.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c
-gettext.lo: $(srcdir)/gettext.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c
-finddomain.lo: $(srcdir)/finddomain.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c
-loadmsgcat.lo: $(srcdir)/loadmsgcat.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c
-localealias.lo: $(srcdir)/localealias.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c
-textdomain.lo: $(srcdir)/textdomain.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c
-l10nflist.lo: $(srcdir)/l10nflist.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c
-explodename.lo: $(srcdir)/explodename.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c
-dcigettext.lo: $(srcdir)/dcigettext.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c
-dcngettext.lo: $(srcdir)/dcngettext.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c
-dngettext.lo: $(srcdir)/dngettext.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c
-ngettext.lo: $(srcdir)/ngettext.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c
-plural.lo: $(srcdir)/plural.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c
-plural-exp.lo: $(srcdir)/plural-exp.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c
-localcharset.lo: $(srcdir)/localcharset.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c
-relocatable.lo: $(srcdir)/relocatable.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c
-localename.lo: $(srcdir)/localename.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c
-log.lo: $(srcdir)/log.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c
-printf.lo: $(srcdir)/printf.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/printf.c
-osdep.lo: $(srcdir)/osdep.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c
-intl-compat.lo: $(srcdir)/intl-compat.c
-       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c
-
-ref-add.sed: $(srcdir)/ref-add.sin
-       $(E) "  SED ref-add.sed"
-       $(Q) sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed
-       $(Q) mv t-ref-add.sed ref-add.sed
-ref-del.sed: $(srcdir)/ref-del.sin
-       $(E) "  SED ref-del.sed"
-       $(Q) sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed
-       $(Q) mv t-ref-del.sed ref-del.sed
-
-INCLUDES = -I. -I$(srcdir) -I.. -I$(top_builddir)/lib
-
-libgnuintl.h: $(srcdir)/libgnuintl.h.in
-       $(E) "  SED libgnuintl.h "
-       $(Q) sed -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \
-           -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \
-           -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \
-           -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \
-         < $(srcdir)/libgnuintl.h.in > libgnuintl.h 
-
-libintl.h: libgnuintl.h
-       $(E) "  CP libintl.h"
-       $(Q) cp libgnuintl.h libintl.h
-
-charset.alias: $(srcdir)/config.charset
-       $(E) "  CONFIG.CHARSET $@"
-       $(Q) $(SHELL) $(srcdir)/config.charset '@host@' > t-$@
-       $(Q) mv t-$@ $@
-
-check: all
-
-# We must not install the libintl.h/libintl.a files if we are on a
-# system which has the GNU gettext() function in its C library or in a
-# separate library.
-# If you want to use the one which comes with this version of the
-# package, you have to use `configure --with-included-gettext'.
-install: install-exec install-data
-install-exec: all
-       $(Q) if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
-          && test '@USE_INCLUDED_LIBINTL@' = yes; then \
-         $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
-         $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
-         $(LIBTOOL) --mode=install \
-           $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
-         if test "@RELOCATABLE@" = yes; then \
-           dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \
-           if test -n "$$dependencies"; then \
-             rm -f $(DESTDIR)$(libdir)/libintl.la; \
-           fi; \
-         fi; \
-       else \
-         : ; \
-       fi
-       $(Q) if test "$(PACKAGE)" = "gettext-tools" \
-          && test '@USE_INCLUDED_LIBINTL@' = no; then \
-         $(mkinstalldirs) $(DESTDIR)$(libdir); \
-         $(LIBTOOL) --mode=install \
-           $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \
-         rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
-         $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \
-         $(LIBTOOL) --mode=uninstall \
-           rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \
-       else \
-         : ; \
-       fi
-       if test '@USE_INCLUDED_LIBINTL@' = yes; then \
-         test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
-         temp=$(DESTDIR)$(libdir)/t-charset.alias; \
-         dest=$(DESTDIR)$(libdir)/charset.alias; \
-         if test -f $(DESTDIR)$(libdir)/charset.alias; then \
-           orig=$(DESTDIR)$(libdir)/charset.alias; \
-           sed -f ref-add.sed $$orig > $$temp; \
-           $(INSTALL_DATA) $$temp $$dest; \
-           rm -f $$temp; \
-         else \
-           if test @GLIBC21@ = no; then \
-             orig=charset.alias; \
-             sed -f ref-add.sed $$orig > $$temp; \
-             $(INSTALL_DATA) $$temp $$dest; \
-             rm -f $$temp; \
-           fi; \
-         fi; \
-         $(mkinstalldirs) $(DESTDIR)$(localedir); \
-         test -f $(DESTDIR)$(localedir)/locale.alias \
-           && orig=$(DESTDIR)$(localedir)/locale.alias \
-           || orig=$(srcdir)/locale.alias; \
-         temp=$(DESTDIR)$(localedir)/t-locale.alias; \
-         dest=$(DESTDIR)$(localedir)/locale.alias; \
-         sed -f ref-add.sed $$orig > $$temp; \
-         $(INSTALL_DATA) $$temp $$dest; \
-         rm -f $$temp; \
-       else \
-         : ; \
-       fi
-install-data: all
-       $(Q) if test "$(PACKAGE)" = "gettext-tools"; then \
-         $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
-         $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
-         $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
-         dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \
-         for file in $$dists; do \
-           $(INSTALL_DATA) $(srcdir)/$$file \
-                           $(DESTDIR)$(gettextsrcdir)/$$file; \
-         done; \
-         chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
-         dists="$(DISTFILES.generated)"; \
-         for file in $$dists; do \
-           if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
-           $(INSTALL_DATA) $$dir/$$file \
-                           $(DESTDIR)$(gettextsrcdir)/$$file; \
-         done; \
-         dists="$(DISTFILES.obsolete)"; \
-         for file in $$dists; do \
-           rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
-         done; \
-       else \
-         : ; \
-       fi
-
-install-strip: install
-
-installdirs:
-       if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
-          && test '@USE_INCLUDED_LIBINTL@' = yes; then \
-         $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
-       else \
-         : ; \
-       fi
-       if test "$(PACKAGE)" = "gettext-tools" \
-          && test '@USE_INCLUDED_LIBINTL@' = no; then \
-         $(mkinstalldirs) $(DESTDIR)$(libdir); \
-       else \
-         : ; \
-       fi
-       if test '@USE_INCLUDED_LIBINTL@' = yes; then \
-         test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
-         $(mkinstalldirs) $(DESTDIR)$(localedir); \
-       else \
-         : ; \
-       fi
-       if test "$(PACKAGE)" = "gettext-tools"; then \
-         $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
-       else \
-         : ; \
-       fi
-
-# Define this as empty until I found a useful application.
-installcheck:
-
-install-shlibs:
-
-uninstall-shlibs:
-
-install-shlibs-strip:
-
-uninstall:
-       if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
-          && test '@USE_INCLUDED_LIBINTL@' = yes; then \
-         rm -f $(DESTDIR)$(includedir)/libintl.h; \
-         $(LIBTOOL) --mode=uninstall \
-           rm -f $(DESTDIR)$(libdir)/libintl.$la; \
-       else \
-         : ; \
-       fi
-       if test "$(PACKAGE)" = "gettext-tools" \
-          && test '@USE_INCLUDED_LIBINTL@' = no; then \
-         rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
-       else \
-         : ; \
-       fi
-       if test '@USE_INCLUDED_LIBINTL@' = yes; then \
-         if test -f $(DESTDIR)$(libdir)/charset.alias; then \
-           temp=$(DESTDIR)$(libdir)/t-charset.alias; \
-           dest=$(DESTDIR)$(libdir)/charset.alias; \
-           sed -f ref-del.sed $$dest > $$temp; \
-           if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
-             rm -f $$dest; \
-           else \
-             $(INSTALL_DATA) $$temp $$dest; \
-           fi; \
-           rm -f $$temp; \
-         fi; \
-         if test -f $(DESTDIR)$(localedir)/locale.alias; then \
-           temp=$(DESTDIR)$(localedir)/t-locale.alias; \
-           dest=$(DESTDIR)$(localedir)/locale.alias; \
-           sed -f ref-del.sed $$dest > $$temp; \
-           if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
-             rm -f $$dest; \
-           else \
-             $(INSTALL_DATA) $$temp $$dest; \
-           fi; \
-           rm -f $$temp; \
-         fi; \
-       else \
-         : ; \
-       fi
-       if test "$(PACKAGE)" = "gettext-tools"; then \
-         for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
-           rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
-         done; \
-       else \
-         : ; \
-       fi
-
-info dvi ps pdf html:
-
-$(OBJECTS): libgnuintl.h
-bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h
-dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h
-explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h
-dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h
-dcigettext.$lo: $(srcdir)/eval-plural.h
-localcharset.$lo: $(srcdir)/localcharset.h
-localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h
-printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c
-
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES)
-       here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
-
-ctags: CTAGS
-
-CTAGS: $(HEADERS) $(SOURCES)
-       here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES)
-
-id: ID
-
-ID: $(HEADERS) $(SOURCES)
-       here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
-
-coverage.txt::
-
-mostlyclean:
-       rm -f *.a *.la *.o *.obj *.lo core core.*
-       rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed
-       rm -f -r .libs _libs
-
-clean:: mostlyclean
-
-distclean: clean
-       rm -f Makefile ID TAGS
-       if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \
-         rm -f ChangeLog.inst $(DISTFILES.normal); \
-       else \
-         : ; \
-       fi
-
-maintainer-clean: distclean
-       $(E) "This command is intended for maintainers to use;"
-       $(E) "it deletes files that may require special tools to rebuild."
-
-
-# GNU gettext needs not contain the file `VERSION' but contains some
-# other files which should not be distributed in other packages.
-distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir: Makefile
-       if test "$(PACKAGE)" = "gettext-tools"; then \
-         : ; \
-       else \
-         if test "$(PACKAGE)" = "gettext-runtime"; then \
-           additional="$(DISTFILES.gettext)"; \
-         else \
-           additional="$(DISTFILES.normal)"; \
-         fi; \
-         $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
-         for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
-           if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
-           cp -p $$dir/$$file $(distdir); \
-         done; \
-       fi
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-#      cd $(top_builddir) && $(SHELL) ./config.status
-# This would be more efficient, but doesn't work any more with autoconf-2.57,
-# when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used.
-       cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/intl/VERSION b/intl/VERSION
deleted file mode 100644 (file)
index b4b846c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-GNU gettext library from gettext-0.14.1
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
deleted file mode 100644 (file)
index 8284226..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-/* Implementation of the bindtextdomain(3) function
-   Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-#include "gettextP.h"
-
-#ifdef _LIBC
-/* We have to handle multi-threaded applications.  */
-# include <bits/libc-lock.h>
-#else
-/* Provide dummy implementation if this is outside glibc.  */
-# define __libc_rwlock_define(CLASS, NAME)
-# define __libc_rwlock_wrlock(NAME)
-# define __libc_rwlock_unlock(NAME)
-#endif
-
-/* The internal variables in the standalone libintl.a must have different
-   names than the internal variables in GNU libc, otherwise programs
-   using libintl.a cannot be linked statically.  */
-#if !defined _LIBC
-# define _nl_default_dirname libintl_nl_default_dirname
-# define _nl_domain_bindings libintl_nl_domain_bindings
-#endif
-
-/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>.  */
-#ifndef offsetof
-# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Contains the default location of the message catalogs.  */
-extern const char _nl_default_dirname[];
-#ifdef _LIBC
-extern const char _nl_default_dirname_internal[] attribute_hidden;
-#else
-# define INTUSE(name) name
-#endif
-
-/* List with bindings of specific domains.  */
-extern struct binding *_nl_domain_bindings;
-
-/* Lock variable to protect the global data in the gettext implementation.  */
-__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
-
-
-/* Names for the libintl functions are a problem.  They must not clash
-   with existing names and they should follow ANSI C.  But this source
-   code is also used in GNU C Library where the names have a __
-   prefix.  So we have to make a difference here.  */
-#ifdef _LIBC
-# define BINDTEXTDOMAIN __bindtextdomain
-# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
-# ifndef strdup
-#  define strdup(str) __strdup (str)
-# endif
-#else
-# define BINDTEXTDOMAIN libintl_bindtextdomain
-# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
-#endif
-
-/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
-   to be used for the DOMAINNAME message catalog.
-   If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
-   modified, only the current value is returned.
-   If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
-   modified nor returned.  */
-static void
-set_binding_values (const char *domainname,
-                   const char **dirnamep, const char **codesetp)
-{
-  struct binding *binding;
-  int modified;
-
-  /* Some sanity checks.  */
-  if (domainname == NULL || domainname[0] == '\0')
-    {
-      if (dirnamep)
-       *dirnamep = NULL;
-      if (codesetp)
-       *codesetp = NULL;
-      return;
-    }
-
-  __libc_rwlock_wrlock (_nl_state_lock);
-
-  modified = 0;
-
-  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
-    {
-      int compare = strcmp (domainname, binding->domainname);
-      if (compare == 0)
-       /* We found it!  */
-       break;
-      if (compare < 0)
-       {
-         /* It is not in the list.  */
-         binding = NULL;
-         break;
-       }
-    }
-
-  if (binding != NULL)
-    {
-      if (dirnamep)
-       {
-         const char *dirname = *dirnamep;
-
-         if (dirname == NULL)
-           /* The current binding has be to returned.  */
-           *dirnamep = binding->dirname;
-         else
-           {
-             /* The domain is already bound.  If the new value and the old
-                one are equal we simply do nothing.  Otherwise replace the
-                old binding.  */
-             char *result = binding->dirname;
-             if (strcmp (dirname, result) != 0)
-               {
-                 if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
-                   result = (char *) INTUSE(_nl_default_dirname);
-                 else
-                   {
-#if defined _LIBC || defined HAVE_STRDUP
-                     result = strdup (dirname);
-#else
-                     size_t len = strlen (dirname) + 1;
-                     result = (char *) malloc (len);
-                     if (__builtin_expect (result != NULL, 1))
-                       memcpy (result, dirname, len);
-#endif
-                   }
-
-                 if (__builtin_expect (result != NULL, 1))
-                   {
-                     if (binding->dirname != INTUSE(_nl_default_dirname))
-                       free (binding->dirname);
-
-                     binding->dirname = result;
-                     modified = 1;
-                   }
-               }
-             *dirnamep = result;
-           }
-       }
-
-      if (codesetp)
-       {
-         const char *codeset = *codesetp;
-
-         if (codeset == NULL)
-           /* The current binding has be to returned.  */
-           *codesetp = binding->codeset;
-         else
-           {
-             /* The domain is already bound.  If the new value and the old
-                one are equal we simply do nothing.  Otherwise replace the
-                old binding.  */
-             char *result = binding->codeset;
-             if (result == NULL || strcmp (codeset, result) != 0)
-               {
-#if defined _LIBC || defined HAVE_STRDUP
-                 result = strdup (codeset);
-#else
-                 size_t len = strlen (codeset) + 1;
-                 result = (char *) malloc (len);
-                 if (__builtin_expect (result != NULL, 1))
-                   memcpy (result, codeset, len);
-#endif
-
-                 if (__builtin_expect (result != NULL, 1))
-                   {
-                     free (binding->codeset);
-
-                     binding->codeset = result;
-                     binding->codeset_cntr++;
-                     modified = 1;
-                   }
-               }
-             *codesetp = result;
-           }
-       }
-    }
-  else if ((dirnamep == NULL || *dirnamep == NULL)
-          && (codesetp == NULL || *codesetp == NULL))
-    {
-      /* Simply return the default values.  */
-      if (dirnamep)
-       *dirnamep = INTUSE(_nl_default_dirname);
-      if (codesetp)
-       *codesetp = NULL;
-    }
-  else
-    {
-      /* We have to create a new binding.  */
-      size_t len = strlen (domainname) + 1;
-      struct binding *new_binding =
-       (struct binding *) malloc (offsetof (struct binding, domainname) + len);
-
-      if (__builtin_expect (new_binding == NULL, 0))
-       goto failed;
-
-      memcpy (new_binding->domainname, domainname, len);
-
-      if (dirnamep)
-       {
-         const char *dirname = *dirnamep;
-
-         if (dirname == NULL)
-           /* The default value.  */
-           dirname = INTUSE(_nl_default_dirname);
-         else
-           {
-             if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
-               dirname = INTUSE(_nl_default_dirname);
-             else
-               {
-                 char *result;
-#if defined _LIBC || defined HAVE_STRDUP
-                 result = strdup (dirname);
-                 if (__builtin_expect (result == NULL, 0))
-                   goto failed_dirname;
-#else
-                 size_t len = strlen (dirname) + 1;
-                 result = (char *) malloc (len);
-                 if (__builtin_expect (result == NULL, 0))
-                   goto failed_dirname;
-                 memcpy (result, dirname, len);
-#endif
-                 dirname = result;
-               }
-           }
-         *dirnamep = dirname;
-         new_binding->dirname = (char *) dirname;
-       }
-      else
-       /* The default value.  */
-       new_binding->dirname = (char *) INTUSE(_nl_default_dirname);
-
-      new_binding->codeset_cntr = 0;
-
-      if (codesetp)
-       {
-         const char *codeset = *codesetp;
-
-         if (codeset != NULL)
-           {
-             char *result;
-
-#if defined _LIBC || defined HAVE_STRDUP
-             result = strdup (codeset);
-             if (__builtin_expect (result == NULL, 0))
-               goto failed_codeset;
-#else
-             size_t len = strlen (codeset) + 1;
-             result = (char *) malloc (len);
-             if (__builtin_expect (result == NULL, 0))
-               goto failed_codeset;
-             memcpy (result, codeset, len);
-#endif
-             codeset = result;
-             new_binding->codeset_cntr++;
-           }
-         *codesetp = codeset;
-         new_binding->codeset = (char *) codeset;
-       }
-      else
-       new_binding->codeset = NULL;
-
-      /* Now enqueue it.  */
-      if (_nl_domain_bindings == NULL
-         || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
-       {
-         new_binding->next = _nl_domain_bindings;
-         _nl_domain_bindings = new_binding;
-       }
-      else
-       {
-         binding = _nl_domain_bindings;
-         while (binding->next != NULL
-                && strcmp (domainname, binding->next->domainname) > 0)
-           binding = binding->next;
-
-         new_binding->next = binding->next;
-         binding->next = new_binding;
-       }
-
-      modified = 1;
-
-      /* Here we deal with memory allocation failures.  */
-      if (0)
-       {
-       failed_codeset:
-         if (new_binding->dirname != INTUSE(_nl_default_dirname))
-           free (new_binding->dirname);
-       failed_dirname:
-         free (new_binding);
-       failed:
-         if (dirnamep)
-           *dirnamep = NULL;
-         if (codesetp)
-           *codesetp = NULL;
-       }
-    }
-
-  /* If we modified any binding, we flush the caches.  */
-  if (modified)
-    ++_nl_msg_cat_cntr;
-
-  __libc_rwlock_unlock (_nl_state_lock);
-}
-
-/* Specify that the DOMAINNAME message catalog will be found
-   in DIRNAME rather than in the system locale data base.  */
-char *
-BINDTEXTDOMAIN (const char *domainname, const char *dirname)
-{
-  set_binding_values (domainname, &dirname, NULL);
-  return (char *) dirname;
-}
-
-/* Specify the character encoding in which the messages from the
-   DOMAINNAME message catalog will be returned.  */
-char *
-BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset)
-{
-  set_binding_values (domainname, NULL, &codeset);
-  return (char *) codeset;
-}
-
-#ifdef _LIBC
-/* Aliases for function names in GNU C Library.  */
-weak_alias (__bindtextdomain, bindtextdomain);
-weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
-#endif
diff --git a/intl/config.charset b/intl/config.charset
deleted file mode 100644 (file)
index 43d45fb..0000000
+++ /dev/null
@@ -1,608 +0,0 @@
-#! /bin/sh
-# Output a system dependent table of character encoding aliases.
-#
-#   Copyright (C) 2000-2004 Free Software Foundation, Inc.
-#
-#   This program is free software; you can redistribute it and/or modify it
-#   under the terms of the GNU Library General Public License as published
-#   by the Free Software Foundation; either version 2, 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
-#   Library General Public License for more details.
-#
-#   You should have received a copy of the GNU Library General Public
-#   License along with this program; if not, write to the Free Software
-#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-#   USA.
-#
-# The table consists of lines of the form
-#    ALIAS  CANONICAL
-#
-# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
-# ALIAS is compared in a case sensitive way.
-#
-# CANONICAL is the GNU canonical name for this character encoding.
-# It must be an encoding supported by libiconv. Support by GNU libc is
-# also desirable. CANONICAL is case insensitive. Usually an upper case
-# MIME charset name is preferred.
-# The current list of GNU canonical charset names is as follows.
-#
-#       name              MIME?             used by which systems
-#   ASCII, ANSI_X3.4-1968       glibc solaris freebsd darwin
-#   ISO-8859-1              Y   glibc aix hpux irix osf solaris freebsd darwin
-#   ISO-8859-2              Y   glibc aix hpux irix osf solaris freebsd darwin
-#   ISO-8859-3              Y   glibc solaris
-#   ISO-8859-4              Y   osf solaris freebsd darwin
-#   ISO-8859-5              Y   glibc aix hpux irix osf solaris freebsd darwin
-#   ISO-8859-6              Y   glibc aix hpux solaris
-#   ISO-8859-7              Y   glibc aix hpux irix osf solaris
-#   ISO-8859-8              Y   glibc aix hpux osf solaris
-#   ISO-8859-9              Y   glibc aix hpux irix osf solaris
-#   ISO-8859-13                 glibc
-#   ISO-8859-14                 glibc
-#   ISO-8859-15                 glibc aix osf solaris freebsd
-#   KOI8-R                  Y   glibc solaris freebsd darwin
-#   KOI8-U                  Y   glibc freebsd darwin
-#   KOI8-T                      glibc
-#   CP437                       dos
-#   CP775                       dos
-#   CP850                       aix osf dos
-#   CP852                       dos
-#   CP855                       dos
-#   CP856                       aix
-#   CP857                       dos
-#   CP861                       dos
-#   CP862                       dos
-#   CP864                       dos
-#   CP865                       dos
-#   CP866                       freebsd darwin dos
-#   CP869                       dos
-#   CP874                       woe32 dos
-#   CP922                       aix
-#   CP932                       aix woe32 dos
-#   CP943                       aix
-#   CP949                       osf woe32 dos
-#   CP950                       woe32 dos
-#   CP1046                      aix
-#   CP1124                      aix
-#   CP1125                      dos
-#   CP1129                      aix
-#   CP1250                      woe32
-#   CP1251                      glibc solaris darwin woe32
-#   CP1252                      aix woe32
-#   CP1253                      woe32
-#   CP1254                      woe32
-#   CP1255                      glibc woe32
-#   CP1256                      woe32
-#   CP1257                      woe32
-#   GB2312                  Y   glibc aix hpux irix solaris freebsd darwin
-#   EUC-JP                  Y   glibc aix hpux irix osf solaris freebsd darwin
-#   EUC-KR                  Y   glibc aix hpux irix osf solaris freebsd darwin
-#   EUC-TW                      glibc aix hpux irix osf solaris
-#   BIG5                    Y   glibc aix hpux osf solaris freebsd darwin
-#   BIG5-HKSCS                  glibc solaris
-#   GBK                         glibc aix osf solaris woe32 dos
-#   GB18030                     glibc solaris
-#   SHIFT_JIS               Y   hpux osf solaris freebsd darwin
-#   JOHAB                       glibc solaris woe32
-#   TIS-620                     glibc aix hpux osf solaris
-#   VISCII                  Y   glibc
-#   TCVN5712-1                  glibc
-#   GEORGIAN-PS                 glibc
-#   HP-ROMAN8                   hpux
-#   HP-ARABIC8                  hpux
-#   HP-GREEK8                   hpux
-#   HP-HEBREW8                  hpux
-#   HP-TURKISH8                 hpux
-#   HP-KANA8                    hpux
-#   DEC-KANJI                   osf
-#   DEC-HANYU                   osf
-#   UTF-8                   Y   glibc aix hpux osf solaris
-#
-# Note: Names which are not marked as being a MIME name should not be used in
-# Internet protocols for information interchange (mail, news, etc.).
-#
-# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
-# must understand both names and treat them as equivalent.
-#
-# The first argument passed to this file is the canonical host specification,
-#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-
-host="$1"
-os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
-echo "# This file contains a table of character encoding aliases,"
-echo "# suitable for operating system '${os}'."
-echo "# It was automatically generated from config.charset."
-# List of references, updated during installation:
-echo "# Packages using this file: "
-case "$os" in
-    linux-gnulibc1*)
-       # Linux libc5 doesn't have nl_langinfo(CODESET); therefore
-       # localcharset.c falls back to using the full locale name
-       # from the environment variables.
-       echo "C ASCII"
-       echo "POSIX ASCII"
-       for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
-                en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
-                en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
-                es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
-                et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
-                fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
-                it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
-                sv_FI sv_SE; do
-         echo "$l ISO-8859-1"
-         echo "$l.iso-8859-1 ISO-8859-1"
-         echo "$l.iso-8859-15 ISO-8859-15"
-         echo "$l.iso-8859-15@euro ISO-8859-15"
-         echo "$l@euro ISO-8859-15"
-         echo "$l.cp-437 CP437"
-         echo "$l.cp-850 CP850"
-         echo "$l.cp-1252 CP1252"
-         echo "$l.cp-1252@euro CP1252"
-         #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
-         echo "$l.utf-8 UTF-8"
-         echo "$l.utf-8@euro UTF-8"
-       done
-       for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
-                sl_SI sr sr_CS sr_YU; do
-         echo "$l ISO-8859-2"
-         echo "$l.iso-8859-2 ISO-8859-2"
-         echo "$l.cp-852 CP852"
-         echo "$l.cp-1250 CP1250"
-         echo "$l.utf-8 UTF-8"
-       done
-       for l in mk mk_MK ru ru_RU; do
-         echo "$l ISO-8859-5"
-         echo "$l.iso-8859-5 ISO-8859-5"
-         echo "$l.koi8-r KOI8-R"
-         echo "$l.cp-866 CP866"
-         echo "$l.cp-1251 CP1251"
-         echo "$l.utf-8 UTF-8"
-       done
-       for l in ar ar_SA; do
-         echo "$l ISO-8859-6"
-         echo "$l.iso-8859-6 ISO-8859-6"
-         echo "$l.cp-864 CP864"
-         #echo "$l.cp-868 CP868" # not a commonly used encoding
-         echo "$l.cp-1256 CP1256"
-         echo "$l.utf-8 UTF-8"
-       done
-       for l in el el_GR gr gr_GR; do
-         echo "$l ISO-8859-7"
-         echo "$l.iso-8859-7 ISO-8859-7"
-         echo "$l.cp-869 CP869"
-         echo "$l.cp-1253 CP1253"
-         echo "$l.cp-1253@euro CP1253"
-         echo "$l.utf-8 UTF-8"
-         echo "$l.utf-8@euro UTF-8"
-       done
-       for l in he he_IL iw iw_IL; do
-         echo "$l ISO-8859-8"
-         echo "$l.iso-8859-8 ISO-8859-8"
-         echo "$l.cp-862 CP862"
-         echo "$l.cp-1255 CP1255"
-         echo "$l.utf-8 UTF-8"
-       done
-       for l in tr tr_TR; do
-         echo "$l ISO-8859-9"
-         echo "$l.iso-8859-9 ISO-8859-9"
-         echo "$l.cp-857 CP857"
-         echo "$l.cp-1254 CP1254"
-         echo "$l.utf-8 UTF-8"
-       done
-       for l in lt lt_LT lv lv_LV; do
-         #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
-         echo "$l ISO-8859-13"
-       done
-       for l in ru_UA uk uk_UA; do
-         echo "$l KOI8-U"
-       done
-       for l in zh zh_CN; do
-         #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
-         echo "$l GB2312"
-       done
-       for l in ja ja_JP ja_JP.EUC; do
-         echo "$l EUC-JP"
-       done
-       for l in ko ko_KR; do
-         echo "$l EUC-KR"
-       done
-       for l in th th_TH; do
-         echo "$l TIS-620"
-       done
-       for l in fa fa_IR; do
-         #echo "$l ISIRI-3342" # a broken encoding
-         echo "$l.utf-8 UTF-8"
-       done
-       ;;
-    linux* | *-gnu*)
-       # With glibc-2.1 or newer, we don't need any canonicalization,
-       # because glibc has iconv and both glibc and libiconv support all
-       # GNU canonical names directly. Therefore, the Makefile does not
-       # need to install the alias file at all.
-       # The following applies only to glibc-2.0.x and older libcs.
-       echo "ISO_646.IRV:1983 ASCII"
-       ;;
-    aix*)
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-6 ISO-8859-6"
-       echo "ISO8859-7 ISO-8859-7"
-       echo "ISO8859-8 ISO-8859-8"
-       echo "ISO8859-9 ISO-8859-9"
-       echo "ISO8859-15 ISO-8859-15"
-       echo "IBM-850 CP850"
-       echo "IBM-856 CP856"
-       echo "IBM-921 ISO-8859-13"
-       echo "IBM-922 CP922"
-       echo "IBM-932 CP932"
-       echo "IBM-943 CP943"
-       echo "IBM-1046 CP1046"
-       echo "IBM-1124 CP1124"
-       echo "IBM-1129 CP1129"
-       echo "IBM-1252 CP1252"
-       echo "IBM-eucCN GB2312"
-       echo "IBM-eucJP EUC-JP"
-       echo "IBM-eucKR EUC-KR"
-       echo "IBM-eucTW EUC-TW"
-       echo "big5 BIG5"
-       echo "GBK GBK"
-       echo "TIS-620 TIS-620"
-       echo "UTF-8 UTF-8"
-       ;;
-    hpux*)
-       echo "iso88591 ISO-8859-1"
-       echo "iso88592 ISO-8859-2"
-       echo "iso88595 ISO-8859-5"
-       echo "iso88596 ISO-8859-6"
-       echo "iso88597 ISO-8859-7"
-       echo "iso88598 ISO-8859-8"
-       echo "iso88599 ISO-8859-9"
-       echo "iso885915 ISO-8859-15"
-       echo "roman8 HP-ROMAN8"
-       echo "arabic8 HP-ARABIC8"
-       echo "greek8 HP-GREEK8"
-       echo "hebrew8 HP-HEBREW8"
-       echo "turkish8 HP-TURKISH8"
-       echo "kana8 HP-KANA8"
-       echo "tis620 TIS-620"
-       echo "big5 BIG5"
-       echo "eucJP EUC-JP"
-       echo "eucKR EUC-KR"
-       echo "eucTW EUC-TW"
-       echo "hp15CN GB2312"
-       #echo "ccdc ?" # what is this?
-       echo "SJIS SHIFT_JIS"
-       echo "utf8 UTF-8"
-       ;;
-    irix*)
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-7 ISO-8859-7"
-       echo "ISO8859-9 ISO-8859-9"
-       echo "eucCN GB2312"
-       echo "eucJP EUC-JP"
-       echo "eucKR EUC-KR"
-       echo "eucTW EUC-TW"
-       ;;
-    osf*)
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-4 ISO-8859-4"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-7 ISO-8859-7"
-       echo "ISO8859-8 ISO-8859-8"
-       echo "ISO8859-9 ISO-8859-9"
-       echo "ISO8859-15 ISO-8859-15"
-       echo "cp850 CP850"
-       echo "big5 BIG5"
-       echo "dechanyu DEC-HANYU"
-       echo "dechanzi GB2312"
-       echo "deckanji DEC-KANJI"
-       echo "deckorean EUC-KR"
-       echo "eucJP EUC-JP"
-       echo "eucKR EUC-KR"
-       echo "eucTW EUC-TW"
-       echo "GBK GBK"
-       echo "KSC5601 CP949"
-       echo "sdeckanji EUC-JP"
-       echo "SJIS SHIFT_JIS"
-       echo "TACTIS TIS-620"
-       echo "UTF-8 UTF-8"
-       ;;
-    solaris*)
-       echo "646 ASCII"
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-3 ISO-8859-3"
-       echo "ISO8859-4 ISO-8859-4"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-6 ISO-8859-6"
-       echo "ISO8859-7 ISO-8859-7"
-       echo "ISO8859-8 ISO-8859-8"
-       echo "ISO8859-9 ISO-8859-9"
-       echo "ISO8859-15 ISO-8859-15"
-       echo "koi8-r KOI8-R"
-       echo "ansi-1251 CP1251"
-       echo "BIG5 BIG5"
-       echo "Big5-HKSCS BIG5-HKSCS"
-       echo "gb2312 GB2312"
-       echo "GBK GBK"
-       echo "GB18030 GB18030"
-       echo "cns11643 EUC-TW"
-       echo "5601 EUC-KR"
-       echo "ko_KR.johap92 JOHAB"
-       echo "eucJP EUC-JP"
-       echo "PCK SHIFT_JIS"
-       echo "TIS620.2533 TIS-620"
-       #echo "sun_eu_greek ?" # what is this?
-       echo "UTF-8 UTF-8"
-       ;;
-    freebsd* | os2*)
-       # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
-       # localcharset.c falls back to using the full locale name
-       # from the environment variables.
-       # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
-       # reuse FreeBSD's locale data for OS/2.
-       echo "C ASCII"
-       echo "US-ASCII ASCII"
-       for l in la_LN lt_LN; do
-         echo "$l.ASCII ASCII"
-       done
-       for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
-                fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
-                lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
-         echo "$l.ISO_8859-1 ISO-8859-1"
-         echo "$l.DIS_8859-15 ISO-8859-15"
-       done
-       for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
-         echo "$l.ISO_8859-2 ISO-8859-2"
-       done
-       for l in la_LN lt_LT; do
-         echo "$l.ISO_8859-4 ISO-8859-4"
-       done
-       for l in ru_RU ru_SU; do
-         echo "$l.KOI8-R KOI8-R"
-         echo "$l.ISO_8859-5 ISO-8859-5"
-         echo "$l.CP866 CP866"
-       done
-       echo "uk_UA.KOI8-U KOI8-U"
-       echo "zh_TW.BIG5 BIG5"
-       echo "zh_TW.Big5 BIG5"
-       echo "zh_CN.EUC GB2312"
-       echo "ja_JP.EUC EUC-JP"
-       echo "ja_JP.SJIS SHIFT_JIS"
-       echo "ja_JP.Shift_JIS SHIFT_JIS"
-       echo "ko_KR.EUC EUC-KR"
-       ;;
-    netbsd*)
-       echo "646 ASCII"
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-4 ISO-8859-4"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-15 ISO-8859-15"
-       echo "eucCN GB2312"
-       echo "eucJP EUC-JP"
-       echo "eucKR EUC-KR"
-       echo "eucTW EUC-TW"
-       echo "BIG5 BIG5"
-       echo "SJIS SHIFT_JIS"
-       ;;
-    darwin*)
-       # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
-       # localcharset.c falls back to using the full locale name
-       # from the environment variables.
-       echo "C ASCII"
-       for l in en_AU en_CA en_GB en_US la_LN; do
-         echo "$l.US-ASCII ASCII"
-       done
-       for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
-                fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
-                nl_NL no_NO pt_PT sv_SE; do
-         echo "$l ISO-8859-1"
-         echo "$l.ISO8859-1 ISO-8859-1"
-         echo "$l.ISO8859-15 ISO-8859-15"
-       done
-       for l in la_LN; do
-         echo "$l.ISO8859-1 ISO-8859-1"
-         echo "$l.ISO8859-15 ISO-8859-15"
-       done
-       for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
-         echo "$l.ISO8859-2 ISO-8859-2"
-       done
-       for l in la_LN lt_LT; do
-         echo "$l.ISO8859-4 ISO-8859-4"
-       done
-       for l in ru_RU; do
-         echo "$l.KOI8-R KOI8-R"
-         echo "$l.ISO8859-5 ISO-8859-5"
-         echo "$l.CP866 CP866"
-       done
-       for l in bg_BG; do
-         echo "$l.CP1251 CP1251"
-       done
-       echo "uk_UA.KOI8-U KOI8-U"
-       echo "zh_TW.BIG5 BIG5"
-       echo "zh_TW.Big5 BIG5"
-       echo "zh_CN.EUC GB2312"
-       echo "ja_JP.EUC EUC-JP"
-       echo "ja_JP.SJIS SHIFT_JIS"
-       echo "ko_KR.EUC EUC-KR"
-       ;;
-    beos*)
-       # BeOS has a single locale, and it has UTF-8 encoding.
-       echo "* UTF-8"
-       ;;
-    msdosdjgpp*)
-       # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
-       # localcharset.c falls back to using the full locale name
-       # from the environment variables.
-       echo "#"
-       echo "# The encodings given here may not all be correct."
-       echo "# If you find that the encoding given for your language and"
-       echo "# country is not the one your DOS machine actually uses, just"
-       echo "# correct it in this file, and send a mail to"
-       echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
-       echo "# and Bruno Haible <bruno@clisp.org>."
-       echo "#"
-       echo "C ASCII"
-       # ISO-8859-1 languages
-       echo "ca CP850"
-       echo "ca_ES CP850"
-       echo "da CP865"    # not CP850 ??
-       echo "da_DK CP865" # not CP850 ??
-       echo "de CP850"
-       echo "de_AT CP850"
-       echo "de_CH CP850"
-       echo "de_DE CP850"
-       echo "en CP850"
-       echo "en_AU CP850" # not CP437 ??
-       echo "en_CA CP850"
-       echo "en_GB CP850"
-       echo "en_NZ CP437"
-       echo "en_US CP437"
-       echo "en_ZA CP850" # not CP437 ??
-       echo "es CP850"
-       echo "es_AR CP850"
-       echo "es_BO CP850"
-       echo "es_CL CP850"
-       echo "es_CO CP850"
-       echo "es_CR CP850"
-       echo "es_CU CP850"
-       echo "es_DO CP850"
-       echo "es_EC CP850"
-       echo "es_ES CP850"
-       echo "es_GT CP850"
-       echo "es_HN CP850"
-       echo "es_MX CP850"
-       echo "es_NI CP850"
-       echo "es_PA CP850"
-       echo "es_PY CP850"
-       echo "es_PE CP850"
-       echo "es_SV CP850"
-       echo "es_UY CP850"
-       echo "es_VE CP850"
-       echo "et CP850"
-       echo "et_EE CP850"
-       echo "eu CP850"
-       echo "eu_ES CP850"
-       echo "fi CP850"
-       echo "fi_FI CP850"
-       echo "fr CP850"
-       echo "fr_BE CP850"
-       echo "fr_CA CP850"
-       echo "fr_CH CP850"
-       echo "fr_FR CP850"
-       echo "ga CP850"
-       echo "ga_IE CP850"
-       echo "gd CP850"
-       echo "gd_GB CP850"
-       echo "gl CP850"
-       echo "gl_ES CP850"
-       echo "id CP850"    # not CP437 ??
-       echo "id_ID CP850" # not CP437 ??
-       echo "is CP861"    # not CP850 ??
-       echo "is_IS CP861" # not CP850 ??
-       echo "it CP850"
-       echo "it_CH CP850"
-       echo "it_IT CP850"
-       echo "lt CP775"
-       echo "lt_LT CP775"
-       echo "lv CP775"
-       echo "lv_LV CP775"
-       echo "nb CP865"    # not CP850 ??
-       echo "nb_NO CP865" # not CP850 ??
-       echo "nl CP850"
-       echo "nl_BE CP850"
-       echo "nl_NL CP850"
-       echo "nn CP865"    # not CP850 ??
-       echo "nn_NO CP865" # not CP850 ??
-       echo "no CP865"    # not CP850 ??
-       echo "no_NO CP865" # not CP850 ??
-       echo "pt CP850"
-       echo "pt_BR CP850"
-       echo "pt_PT CP850"
-       echo "sv CP850"
-       echo "sv_SE CP850"
-       # ISO-8859-2 languages
-       echo "cs CP852"
-       echo "cs_CZ CP852"
-       echo "hr CP852"
-       echo "hr_HR CP852"
-       echo "hu CP852"
-       echo "hu_HU CP852"
-       echo "pl CP852"
-       echo "pl_PL CP852"
-       echo "ro CP852"
-       echo "ro_RO CP852"
-       echo "sk CP852"
-       echo "sk_SK CP852"
-       echo "sl CP852"
-       echo "sl_SI CP852"
-       echo "sq CP852"
-       echo "sq_AL CP852"
-       echo "sr CP852"    # CP852 or CP866 or CP855 ??
-       echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
-       echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
-       # ISO-8859-3 languages
-       echo "mt CP850"
-       echo "mt_MT CP850"
-       # ISO-8859-5 languages
-       echo "be CP866"
-       echo "be_BE CP866"
-       echo "bg CP866"    # not CP855 ??
-       echo "bg_BG CP866" # not CP855 ??
-       echo "mk CP866"    # not CP855 ??
-       echo "mk_MK CP866" # not CP855 ??
-       echo "ru CP866"
-       echo "ru_RU CP866"
-       echo "uk CP1125"
-       echo "uk_UA CP1125"
-       # ISO-8859-6 languages
-       echo "ar CP864"
-       echo "ar_AE CP864"
-       echo "ar_DZ CP864"
-       echo "ar_EG CP864"
-       echo "ar_IQ CP864"
-       echo "ar_IR CP864"
-       echo "ar_JO CP864"
-       echo "ar_KW CP864"
-       echo "ar_MA CP864"
-       echo "ar_OM CP864"
-       echo "ar_QA CP864"
-       echo "ar_SA CP864"
-       echo "ar_SY CP864"
-       # ISO-8859-7 languages
-       echo "el CP869"
-       echo "el_GR CP869"
-       # ISO-8859-8 languages
-       echo "he CP862"
-       echo "he_IL CP862"
-       # ISO-8859-9 languages
-       echo "tr CP857"
-       echo "tr_TR CP857"
-       # Japanese
-       echo "ja CP932"
-       echo "ja_JP CP932"
-       # Chinese
-       echo "zh_CN GBK"
-       echo "zh_TW CP950" # not CP938 ??
-       # Korean
-       echo "kr CP949"    # not CP934 ??
-       echo "kr_KR CP949" # not CP934 ??
-       # Thai
-       echo "th CP874"
-       echo "th_TH CP874"
-       # Other
-       echo "eo CP850"
-       echo "eo_EO CP850"
-       ;;
-esac
diff --git a/intl/dcgettext.c b/intl/dcgettext.c
deleted file mode 100644 (file)
index 850acde..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Implementation of the dcgettext(3) function.
-   Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem.  They must not clash
-   with existing names and they should follow ANSI C.  But this source
-   code is also used in GNU C Library where the names have a __
-   prefix.  So we have to make a difference here.  */
-#ifdef _LIBC
-# define DCGETTEXT __dcgettext
-# define DCIGETTEXT __dcigettext
-#else
-# define DCGETTEXT libintl_dcgettext
-# define DCIGETTEXT libintl_dcigettext
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
-   locale.  */
-char *
-DCGETTEXT (const char *domainname, const char *msgid, int category)
-{
-  return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library.  */
-INTDEF(__dcgettext)
-weak_alias (__dcgettext, dcgettext);
-#endif
diff --git a/intl/dcigettext.c b/intl/dcigettext.c
deleted file mode 100644 (file)
index 79678cf..0000000
+++ /dev/null
@@ -1,1222 +0,0 @@
-/* Implementation of the internal dcigettext function.
-   Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* Tell glibc's <string.h> to provide a prototype for mempcpy().
-   This must come before <config.h> because <config.h> may include
-   <features.h>, and once <features.h> has been included, it's too late.  */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE   1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# ifdef _MSC_VER
-#  include <malloc.h>
-#  define alloca _alloca
-# else
-#  if defined HAVE_ALLOCA_H || defined _LIBC
-#   include <alloca.h>
-#  else
-#   ifdef _AIX
- #pragma alloca
-#   else
-#    ifndef alloca
-char *alloca ();
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-#ifndef __set_errno
-# define __set_errno(val) errno = (val)
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if defined HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#include <locale.h>
-
-#ifdef _LIBC
-  /* Guess whether integer division by zero raises signal SIGFPE.
-     Set to 1 only if you know for sure.  In case of doubt, set to 0.  */
-# if defined __alpha__ || defined __arm__ || defined __i386__ \
-     || defined __m68k__ || defined __s390__
-#  define INTDIV0_RAISES_SIGFPE 1
-# else
-#  define INTDIV0_RAISES_SIGFPE 0
-# endif
-#endif
-#if !INTDIV0_RAISES_SIGFPE
-# include <signal.h>
-#endif
-
-#if defined HAVE_SYS_PARAM_H || defined _LIBC
-# include <sys/param.h>
-#endif
-
-#include "gettextP.h"
-#include "plural-exp.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-#include "hash-string.h"
-
-/* Thread safetyness.  */
-#ifdef _LIBC
-# include <bits/libc-lock.h>
-#else
-/* Provide dummy implementation if this is outside glibc.  */
-# define __libc_lock_define_initialized(CLASS, NAME)
-# define __libc_lock_lock(NAME)
-# define __libc_lock_unlock(NAME)
-# define __libc_rwlock_define_initialized(CLASS, NAME)
-# define __libc_rwlock_rdlock(NAME)
-# define __libc_rwlock_unlock(NAME)
-#endif
-
-/* Alignment of types.  */
-#if defined __GNUC__ && __GNUC__ >= 2
-# define alignof(TYPE) __alignof__ (TYPE)
-#else
-# define alignof(TYPE) \
-    ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
-#endif
-
-/* The internal variables in the standalone libintl.a must have different
-   names than the internal variables in GNU libc, otherwise programs
-   using libintl.a cannot be linked statically.  */
-#if !defined _LIBC
-# define _nl_default_default_domain libintl_nl_default_default_domain
-# define _nl_current_default_domain libintl_nl_current_default_domain
-# define _nl_default_dirname libintl_nl_default_dirname
-# define _nl_domain_bindings libintl_nl_domain_bindings
-#endif
-
-/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>.  */
-#ifndef offsetof
-# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ANSI C functions.  This is required by the standard
-   because some ANSI C functions will require linking with this object
-   file and the name space must not be polluted.  */
-# define getcwd __getcwd
-# ifndef stpcpy
-#  define stpcpy __stpcpy
-# endif
-# define tfind __tfind
-#else
-# if !defined HAVE_GETCWD
-char *getwd ();
-#  define getcwd(buf, max) getwd (buf)
-# else
-#  if VMS
-#   define getcwd(buf, max) (getcwd) (buf, max, 0)
-#  else
-char *getcwd ();
-#  endif
-# endif
-# ifndef HAVE_STPCPY
-#define stpcpy(dest, src) my_stpcpy(dest, src)
-static char *stpcpy (char *dest, const char *src);
-# endif
-# ifndef HAVE_MEMPCPY
-static void *mempcpy (void *dest, const void *src, size_t n);
-# endif
-#endif
-
-/* Amount to increase buffer size by in each try.  */
-#define PATH_INCR 32
-
-/* The following is from pathmax.h.  */
-/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
-   PATH_MAX but might cause redefinition warnings when sys/param.h is
-   later included (as on MORE/BSD 4.3).  */
-#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
-# include <limits.h>
-#endif
-
-#ifndef _POSIX_PATH_MAX
-# define _POSIX_PATH_MAX 255
-#endif
-
-#if !defined PATH_MAX && defined _PC_PATH_MAX
-# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
-#endif
-
-/* Don't include sys/param.h if it already has been.  */
-#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
-# include <sys/param.h>
-#endif
-
-#if !defined PATH_MAX && defined MAXPATHLEN
-# define PATH_MAX MAXPATHLEN
-#endif
-
-#ifndef PATH_MAX
-# define PATH_MAX _POSIX_PATH_MAX
-#endif
-
-/* Pathname support.
-   ISSLASH(C)           tests whether C is a directory separator character.
-   IS_ABSOLUTE_PATH(P)  tests whether P is an absolute path.  If it is not,
-                        it may be concatenated to a directory pathname.
-   IS_PATH_WITH_DIR(P)  tests whether P contains a directory specification.
- */
-#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
-  /* Win32, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-# define HAS_DEVICE(P) \
-    ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
-     && (P)[1] == ':')
-# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
-# define IS_PATH_WITH_DIR(P) \
-    (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
-#else
-  /* Unix */
-# define ISSLASH(C) ((C) == '/')
-# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
-# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
-#endif
-
-/* This is the type used for the search tree where known translations
-   are stored.  */
-struct known_translation_t
-{
-  /* Domain in which to search.  */
-  char *domainname;
-
-  /* The category.  */
-  int category;
-
-  /* State of the catalog counter at the point the string was found.  */
-  int counter;
-
-  /* Catalog where the string was found.  */
-  struct loaded_l10nfile *domain;
-
-  /* And finally the translation.  */
-  const char *translation;
-  size_t translation_length;
-
-  /* Pointer to the string in question.  */
-  char msgid[ZERO];
-};
-
-/* Root of the search tree with known translations.  We can use this
-   only if the system provides the `tsearch' function family.  */
-#if defined HAVE_TSEARCH || defined _LIBC
-# include <search.h>
-
-static void *root;
-
-# ifdef _LIBC
-#  define tsearch __tsearch
-# endif
-
-/* Function to compare two entries in the table of known translations.  */
-static int
-transcmp (const void *p1, const void *p2)
-{
-  const struct known_translation_t *s1;
-  const struct known_translation_t *s2;
-  int result;
-
-  s1 = (const struct known_translation_t *) p1;
-  s2 = (const struct known_translation_t *) p2;
-
-  result = strcmp (s1->msgid, s2->msgid);
-  if (result == 0)
-    {
-      result = strcmp (s1->domainname, s2->domainname);
-      if (result == 0)
-       /* We compare the category last (though this is the cheapest
-          operation) since it is hopefully always the same (namely
-          LC_MESSAGES).  */
-       result = s1->category - s2->category;
-    }
-
-  return result;
-}
-#endif
-
-#ifndef INTVARDEF
-# define INTVARDEF(name)
-#endif
-#ifndef INTUSE
-# define INTUSE(name) name
-#endif
-
-/* Name of the default domain used for gettext(3) prior any call to
-   textdomain(3).  The default value for this is "messages".  */
-const char _nl_default_default_domain[] attribute_hidden = "messages";
-
-/* Value used as the default domain for gettext(3).  */
-const char *_nl_current_default_domain attribute_hidden
-     = _nl_default_default_domain;
-
-/* Contains the default location of the message catalogs.  */
-#if defined __EMX__
-extern const char _nl_default_dirname[];
-#else
-const char _nl_default_dirname[] = LOCALEDIR;
-INTVARDEF (_nl_default_dirname)
-#endif
-
-/* List with bindings of specific domains created by bindtextdomain()
-   calls.  */
-struct binding *_nl_domain_bindings;
-
-/* Prototypes for local functions.  */
-static char *plural_lookup (struct loaded_l10nfile *domain,
-                           unsigned long int n,
-                           const char *translation, size_t translation_len)
-     internal_function;
-static const char *guess_category_value (int category,
-                                        const char *categoryname)
-     internal_function;
-#ifdef _LIBC
-# include "../locale/localeinfo.h"
-# define category_to_name(category)    _nl_category_names[category]
-#else
-static const char *category_to_name (int category) internal_function;
-#endif
-
-
-/* For those loosing systems which don't have `alloca' we have to add
-   some additional code emulating it.  */
-#ifdef HAVE_ALLOCA
-/* Nothing has to be done.  */
-# define freea(p) /* nothing */
-# define ADD_BLOCK(list, address) /* nothing */
-# define FREE_BLOCKS(list) /* nothing */
-#else
-struct block_list
-{
-  void *address;
-  struct block_list *next;
-};
-# define ADD_BLOCK(list, addr)                                               \
-  do {                                                                       \
-    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
-    /* If we cannot get a free block we cannot add the new element to        \
-       the list.  */                                                         \
-    if (newp != NULL) {                                                              \
-      newp->address = (addr);                                                \
-      newp->next = (list);                                                   \
-      (list) = newp;                                                         \
-    }                                                                        \
-  } while (0)
-# define FREE_BLOCKS(list)                                                   \
-  do {                                                                       \
-    while (list != NULL) {                                                   \
-      struct block_list *old = list;                                         \
-      list = list->next;                                                     \
-      free (old->address);                                                   \
-      free (old);                                                            \
-    }                                                                        \
-  } while (0)
-# undef alloca
-# define alloca(size) (malloc (size))
-# define freea(p) free (p)
-#endif /* have alloca */
-
-
-#ifdef _LIBC
-/* List of blocks allocated for translations.  */
-typedef struct transmem_list
-{
-  struct transmem_list *next;
-  char data[ZERO];
-} transmem_block_t;
-static struct transmem_list *transmem_list;
-#else
-typedef unsigned char transmem_block_t;
-#endif
-
-
-/* Names for the libintl functions are a problem.  They must not clash
-   with existing names and they should follow ANSI C.  But this source
-   code is also used in GNU C Library where the names have a __
-   prefix.  So we have to make a difference here.  */
-#ifdef _LIBC
-# define DCIGETTEXT __dcigettext
-#else
-# define DCIGETTEXT libintl_dcigettext
-#endif
-
-/* Lock variable to protect the global data in the gettext implementation.  */
-#ifdef _LIBC
-__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
-#endif
-
-/* Checking whether the binaries runs SUID must be done and glibc provides
-   easier methods therefore we make a difference here.  */
-#ifdef _LIBC
-# define ENABLE_SECURE __libc_enable_secure
-# define DETERMINE_SECURE
-#else
-# ifndef HAVE_GETUID
-#  define getuid() 0
-# endif
-# ifndef HAVE_GETGID
-#  define getgid() 0
-# endif
-# ifndef HAVE_GETEUID
-#  define geteuid() getuid()
-# endif
-# ifndef HAVE_GETEGID
-#  define getegid() getgid()
-# endif
-static int enable_secure;
-# define ENABLE_SECURE (enable_secure == 1)
-# define DETERMINE_SECURE \
-  if (enable_secure == 0)                                                    \
-    {                                                                        \
-      if (getuid () != geteuid () || getgid () != getegid ())                \
-       enable_secure = 1;                                                    \
-      else                                                                   \
-       enable_secure = -1;                                                   \
-    }
-#endif
-
-/* Get the function to evaluate the plural expression.  */
-#include "eval-plural.h"
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current
-   CATEGORY locale and, if PLURAL is nonzero, search over string
-   depending on the plural form determined by N.  */
-char *
-DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
-           int plural, unsigned long int n, int category)
-{
-#ifndef HAVE_ALLOCA
-  struct block_list *block_list = NULL;
-#endif
-  struct loaded_l10nfile *domain;
-  struct binding *binding;
-  const char *categoryname;
-  const char *categoryvalue;
-  char *dirname, *xdomainname;
-  char *single_locale;
-  char *retval;
-  size_t retlen;
-  int saved_errno;
-#if defined HAVE_TSEARCH || defined _LIBC
-  struct known_translation_t *search;
-  struct known_translation_t **foundp = NULL;
-  size_t msgid_len;
-#endif
-  size_t domainname_len;
-
-  /* If no real MSGID is given return NULL.  */
-  if (msgid1 == NULL)
-    return NULL;
-
-#ifdef _LIBC
-  if (category < 0 || category >= __LC_LAST || category == LC_ALL)
-    /* Bogus.  */
-    return (plural == 0
-           ? (char *) msgid1
-           /* Use the Germanic plural rule.  */
-           : n == 1 ? (char *) msgid1 : (char *) msgid2);
-#endif
-
-  __libc_rwlock_rdlock (_nl_state_lock);
-
-  /* If DOMAINNAME is NULL, we are interested in the default domain.  If
-     CATEGORY is not LC_MESSAGES this might not make much sense but the
-     definition left this undefined.  */
-  if (domainname == NULL)
-    domainname = _nl_current_default_domain;
-
-  /* OS/2 specific: backward compatibility with older libintl versions  */
-#ifdef LC_MESSAGES_COMPAT
-  if (category == LC_MESSAGES_COMPAT)
-    category = LC_MESSAGES;
-#endif
-
-#if defined HAVE_TSEARCH || defined _LIBC
-  msgid_len = strlen (msgid1) + 1;
-
-  /* Try to find the translation among those which we found at
-     some time.  */
-  search = (struct known_translation_t *)
-          alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
-  memcpy (search->msgid, msgid1, msgid_len);
-  search->domainname = (char *) domainname;
-  search->category = category;
-
-  foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
-  freea (search);
-  if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
-    {
-      /* Now deal with plural.  */
-      if (plural)
-       retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
-                               (*foundp)->translation_length);
-      else
-       retval = (char *) (*foundp)->translation;
-
-      __libc_rwlock_unlock (_nl_state_lock);
-      return retval;
-    }
-#endif
-
-  /* Preserve the `errno' value.  */
-  saved_errno = errno;
-
-  /* See whether this is a SUID binary or not.  */
-  DETERMINE_SECURE;
-
-  /* First find matching binding.  */
-  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
-    {
-      int compare = strcmp (domainname, binding->domainname);
-      if (compare == 0)
-       /* We found it!  */
-       break;
-      if (compare < 0)
-       {
-         /* It is not in the list.  */
-         binding = NULL;
-         break;
-       }
-    }
-
-  if (binding == NULL)
-    dirname = (char *) INTUSE(_nl_default_dirname);
-  else if (IS_ABSOLUTE_PATH (binding->dirname))
-    dirname = binding->dirname;
-  else
-    {
-      /* We have a relative path.  Make it absolute now.  */
-      size_t dirname_len = strlen (binding->dirname) + 1;
-      size_t path_max;
-      char *ret;
-
-      path_max = (unsigned int) PATH_MAX;
-      path_max += 2;           /* The getcwd docs say to do this.  */
-
-      for (;;)
-       {
-         dirname = (char *) alloca (path_max + dirname_len);
-         ADD_BLOCK (block_list, dirname);
-
-         __set_errno (0);
-         ret = getcwd (dirname, path_max);
-         if (ret != NULL || errno != ERANGE)
-           break;
-
-         path_max += path_max / 2;
-         path_max += PATH_INCR;
-       }
-
-      if (ret == NULL)
-       /* We cannot get the current working directory.  Don't signal an
-          error but simply return the default string.  */
-       goto return_untranslated;
-
-      stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
-    }
-
-  /* Now determine the symbolic name of CATEGORY and its value.  */
-  categoryname = category_to_name (category);
-  categoryvalue = guess_category_value (category, categoryname);
-
-  domainname_len = strlen (domainname);
-  xdomainname = (char *) alloca (strlen (categoryname)
-                                + domainname_len + 5);
-  ADD_BLOCK (block_list, xdomainname);
-
-  stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
-                 domainname, domainname_len),
-         ".mo");
-
-  /* Creating working area.  */
-  single_locale = (char *) alloca (strlen (categoryvalue) + 1);
-  ADD_BLOCK (block_list, single_locale);
-
-
-  /* Search for the given string.  This is a loop because we perhaps
-     got an ordered list of languages to consider for the translation.  */
-  while (1)
-    {
-      /* Make CATEGORYVALUE point to the next element of the list.  */
-      while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
-       ++categoryvalue;
-      if (categoryvalue[0] == '\0')
-       {
-         /* The whole contents of CATEGORYVALUE has been searched but
-            no valid entry has been found.  We solve this situation
-            by implicitly appending a "C" entry, i.e. no translation
-            will take place.  */
-         single_locale[0] = 'C';
-         single_locale[1] = '\0';
-       }
-      else
-       {
-         char *cp = single_locale;
-         while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
-           *cp++ = *categoryvalue++;
-         *cp = '\0';
-
-         /* When this is a SUID binary we must not allow accessing files
-            outside the dedicated directories.  */
-         if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
-           /* Ingore this entry.  */
-           continue;
-       }
-
-      /* If the current locale value is C (or POSIX) we don't load a
-        domain.  Return the MSGID.  */
-      if (strcmp (single_locale, "C") == 0
-         || strcmp (single_locale, "POSIX") == 0)
-       break;
-
-      /* Find structure describing the message catalog matching the
-        DOMAINNAME and CATEGORY.  */
-      domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
-
-      if (domain != NULL)
-       {
-         retval = _nl_find_msg (domain, binding, msgid1, &retlen);
-
-         if (retval == NULL)
-           {
-             int cnt;
-
-             for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
-               {
-                 retval = _nl_find_msg (domain->successor[cnt], binding,
-                                        msgid1, &retlen);
-
-                 if (retval != NULL)
-                   {
-                     domain = domain->successor[cnt];
-                     break;
-                   }
-               }
-           }
-
-         if (retval != NULL)
-           {
-             /* Found the translation of MSGID1 in domain DOMAIN:
-                starting at RETVAL, RETLEN bytes.  */
-             FREE_BLOCKS (block_list);
-#if defined HAVE_TSEARCH || defined _LIBC
-             if (foundp == NULL)
-               {
-                 /* Create a new entry and add it to the search tree.  */
-                 struct known_translation_t *newp;
-
-                 newp = (struct known_translation_t *)
-                   malloc (offsetof (struct known_translation_t, msgid)
-                           + msgid_len + domainname_len + 1);
-                 if (newp != NULL)
-                   {
-                     newp->domainname =
-                       mempcpy (newp->msgid, msgid1, msgid_len);
-                     memcpy (newp->domainname, domainname, domainname_len + 1);
-                     newp->category = category;
-                     newp->counter = _nl_msg_cat_cntr;
-                     newp->domain = domain;
-                     newp->translation = retval;
-                     newp->translation_length = retlen;
-
-                     /* Insert the entry in the search tree.  */
-                     foundp = (struct known_translation_t **)
-                       tsearch (newp, &root, transcmp);
-                     if (foundp == NULL
-                         || __builtin_expect (*foundp != newp, 0))
-                       /* The insert failed.  */
-                       free (newp);
-                   }
-               }
-             else
-               {
-                 /* We can update the existing entry.  */
-                 (*foundp)->counter = _nl_msg_cat_cntr;
-                 (*foundp)->domain = domain;
-                 (*foundp)->translation = retval;
-                 (*foundp)->translation_length = retlen;
-               }
-#endif
-             __set_errno (saved_errno);
-
-             /* Now deal with plural.  */
-             if (plural)
-               retval = plural_lookup (domain, n, retval, retlen);
-
-             __libc_rwlock_unlock (_nl_state_lock);
-             return retval;
-           }
-       }
-    }
-
- return_untranslated:
-  /* Return the untranslated MSGID.  */
-  FREE_BLOCKS (block_list);
-  __libc_rwlock_unlock (_nl_state_lock);
-#if 0                          /* Doesn't work with diet libc -- TYT */
-#ifndef _LIBC
-  if (!ENABLE_SECURE)
-    {
-      extern void _nl_log_untranslated (const char *logfilename,
-                                       const char *domainname,
-                                       const char *msgid1, const char *msgid2,
-                                       int plural);
-      const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
-
-      if (logfilename != NULL && logfilename[0] != '\0')
-       _nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural);
-    }
-#endif
-#endif
-  __set_errno (saved_errno);
-  return (plural == 0
-         ? (char *) msgid1
-         /* Use the Germanic plural rule.  */
-         : n == 1 ? (char *) msgid1 : (char *) msgid2);
-}
-
-
-char *
-internal_function
-_nl_find_msg (struct loaded_l10nfile *domain_file,
-             struct binding *domainbinding, const char *msgid,
-             size_t *lengthp)
-{
-  struct loaded_domain *domain;
-  nls_uint32 nstrings;
-  size_t act;
-  char *result;
-  size_t resultlen;
-
-  if (domain_file->decided == 0)
-    _nl_load_domain (domain_file, domainbinding);
-
-  if (domain_file->data == NULL)
-    return NULL;
-
-  domain = (struct loaded_domain *) domain_file->data;
-
-  nstrings = domain->nstrings;
-
-  /* Locate the MSGID and its translation.  */
-  if (domain->hash_tab != NULL)
-    {
-      /* Use the hashing table.  */
-      nls_uint32 len = strlen (msgid);
-      nls_uint32 hash_val = hash_string (msgid);
-      nls_uint32 idx = hash_val % domain->hash_size;
-      nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
-
-      while (1)
-       {
-         nls_uint32 nstr =
-           W (domain->must_swap_hash_tab, domain->hash_tab[idx]);
-
-         if (nstr == 0)
-           /* Hash table entry is empty.  */
-           return NULL;
-
-         nstr--;
-
-         /* Compare msgid with the original string at index nstr.
-            We compare the lengths with >=, not ==, because plural entries
-            are represented by strings with an embedded NUL.  */
-         if (nstr < nstrings
-             ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
-               && (strcmp (msgid,
-                           domain->data + W (domain->must_swap,
-                                             domain->orig_tab[nstr].offset))
-                   == 0)
-             : domain->orig_sysdep_tab[nstr - nstrings].length > len
-               && (strcmp (msgid,
-                           domain->orig_sysdep_tab[nstr - nstrings].pointer)
-                   == 0))
-           {
-             act = nstr;
-             goto found;
-           }
-
-         if (idx >= domain->hash_size - incr)
-           idx -= domain->hash_size - incr;
-         else
-           idx += incr;
-       }
-      /* NOTREACHED */
-    }
-  else
-    {
-      /* Try the default method:  binary search in the sorted array of
-        messages.  */
-      size_t top, bottom;
-
-      bottom = 0;
-      top = nstrings;
-      while (bottom < top)
-       {
-         int cmp_val;
-
-         act = (bottom + top) / 2;
-         cmp_val = strcmp (msgid, (domain->data
-                                   + W (domain->must_swap,
-                                        domain->orig_tab[act].offset)));
-         if (cmp_val < 0)
-           top = act;
-         else if (cmp_val > 0)
-           bottom = act + 1;
-         else
-           goto found;
-       }
-      /* No translation was found.  */
-      return NULL;
-    }
-
- found:
-  /* The translation was found at index ACT.  If we have to convert the
-     string to use a different character set, this is the time.  */
-  if (act < nstrings)
-    {
-      result = (char *)
-       (domain->data + W (domain->must_swap, domain->trans_tab[act].offset));
-      resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
-    }
-  else
-    {
-      result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer;
-      resultlen = domain->trans_sysdep_tab[act - nstrings].length;
-    }
-
-#if defined _LIBC || HAVE_ICONV
-  if (domain->codeset_cntr
-      != (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
-    {
-      /* The domain's codeset has changed through bind_textdomain_codeset()
-        since the message catalog was initialized or last accessed.  We
-        have to reinitialize the converter.  */
-      _nl_free_domain_conv (domain);
-      _nl_init_domain_conv (domain_file, domain, domainbinding);
-    }
-
-  if (
-# ifdef _LIBC
-      domain->conv != (__gconv_t) -1
-# else
-#  if HAVE_ICONV
-      domain->conv != (iconv_t) -1
-#  endif
-# endif
-      )
-    {
-      /* We are supposed to do a conversion.  First allocate an
-        appropriate table with the same structure as the table
-        of translations in the file, where we can put the pointers
-        to the converted strings in.
-        There is a slight complication with plural entries.  They
-        are represented by consecutive NUL terminated strings.  We
-        handle this case by converting RESULTLEN bytes, including
-        NULs.  */
-
-      if (domain->conv_tab == NULL
-         && ((domain->conv_tab =
-                (char **) calloc (nstrings + domain->n_sysdep_strings,
-                                  sizeof (char *)))
-             == NULL))
-       /* Mark that we didn't succeed allocating a table.  */
-       domain->conv_tab = (char **) -1;
-
-      if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
-       /* Nothing we can do, no more memory.  */
-       goto converted;
-
-      if (domain->conv_tab[act] == NULL)
-       {
-         /* We haven't used this string so far, so it is not
-            translated yet.  Do this now.  */
-         /* We use a bit more efficient memory handling.
-            We allocate always larger blocks which get used over
-            time.  This is faster than many small allocations.   */
-         __libc_lock_define_initialized (static, lock)
-# define INITIAL_BLOCK_SIZE    4080
-         static unsigned char *freemem;
-         static size_t freemem_size;
-
-         const unsigned char *inbuf;
-         unsigned char *outbuf;
-         int malloc_count;
-# ifndef _LIBC
-         transmem_block_t *transmem_list = NULL;
-# endif
-
-         __libc_lock_lock (lock);
-
-         inbuf = (const unsigned char *) result;
-         outbuf = freemem + sizeof (size_t);
-
-         malloc_count = 0;
-         while (1)
-           {
-             transmem_block_t *newmem;
-# ifdef _LIBC
-             size_t non_reversible;
-             int res;
-
-             if (freemem_size < sizeof (size_t))
-               goto resize_freemem;
-
-             res = __gconv (domain->conv,
-                            &inbuf, inbuf + resultlen,
-                            &outbuf,
-                            outbuf + freemem_size - sizeof (size_t),
-                            &non_reversible);
-
-             if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
-               break;
-
-             if (res != __GCONV_FULL_OUTPUT)
-               {
-                 __libc_lock_unlock (lock);
-                 goto converted;
-               }
-
-             inbuf = result;
-# else
-#  if HAVE_ICONV
-             const char *inptr = (const char *) inbuf;
-             size_t inleft = resultlen;
-             char *outptr = (char *) outbuf;
-             size_t outleft;
-
-             if (freemem_size < sizeof (size_t))
-               goto resize_freemem;
-
-             outleft = freemem_size - sizeof (size_t);
-             if (iconv (domain->conv,
-                        (ICONV_CONST char **) &inptr, &inleft,
-                        &outptr, &outleft)
-                 != (size_t) (-1))
-               {
-                 outbuf = (unsigned char *) outptr;
-                 break;
-               }
-             if (errno != E2BIG)
-               {
-                 __libc_lock_unlock (lock);
-                 goto converted;
-               }
-#  endif
-# endif
-
-           resize_freemem:
-             /* We must allocate a new buffer or resize the old one.  */
-             if (malloc_count > 0)
-               {
-                 ++malloc_count;
-                 freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
-                 newmem = (transmem_block_t *) realloc (transmem_list,
-                                                        freemem_size);
-# ifdef _LIBC
-                 if (newmem != NULL)
-                   transmem_list = transmem_list->next;
-                 else
-                   {
-                     struct transmem_list *old = transmem_list;
-
-                     transmem_list = transmem_list->next;
-                     free (old);
-                   }
-# endif
-               }
-             else
-               {
-                 malloc_count = 1;
-                 freemem_size = INITIAL_BLOCK_SIZE;
-                 newmem = (transmem_block_t *) malloc (freemem_size);
-               }
-             if (__builtin_expect (newmem == NULL, 0))
-               {
-                 freemem = NULL;
-                 freemem_size = 0;
-                 __libc_lock_unlock (lock);
-                 goto converted;
-               }
-
-# ifdef _LIBC
-             /* Add the block to the list of blocks we have to free
-                 at some point.  */
-             newmem->next = transmem_list;
-             transmem_list = newmem;
-
-             freemem = newmem->data;
-             freemem_size -= offsetof (struct transmem_list, data);
-# else
-             transmem_list = newmem;
-             freemem = newmem;
-# endif
-
-             outbuf = freemem + sizeof (size_t);
-           }
-
-         /* We have now in our buffer a converted string.  Put this
-            into the table of conversions.  */
-         *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
-         domain->conv_tab[act] = (char *) freemem;
-         /* Shrink freemem, but keep it aligned.  */
-         freemem_size -= outbuf - freemem;
-         freemem = outbuf;
-         freemem += freemem_size & (alignof (size_t) - 1);
-         freemem_size = freemem_size & ~ (alignof (size_t) - 1);
-
-         __libc_lock_unlock (lock);
-       }
-
-      /* Now domain->conv_tab[act] contains the translation of all
-        the plural variants.  */
-      result = domain->conv_tab[act] + sizeof (size_t);
-      resultlen = *(size_t *) domain->conv_tab[act];
-    }
-
- converted:
-  /* The result string is converted.  */
-
-#endif /* _LIBC || HAVE_ICONV */
-
-  *lengthp = resultlen;
-  return result;
-}
-
-
-/* Look up a plural variant.  */
-static char *
-internal_function
-plural_lookup (struct loaded_l10nfile *domain, unsigned long int n,
-              const char *translation, size_t translation_len)
-{
-  struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
-  unsigned long int index;
-  const char *p;
-
-  index = plural_eval (domaindata->plural, n);
-  if (index >= domaindata->nplurals)
-    /* This should never happen.  It means the plural expression and the
-       given maximum value do not match.  */
-    index = 0;
-
-  /* Skip INDEX strings at TRANSLATION.  */
-  p = translation;
-  while (index-- > 0)
-    {
-#ifdef _LIBC
-      p = __rawmemchr (p, '\0');
-#else
-      p = strchr (p, '\0');
-#endif
-      /* And skip over the NUL byte.  */
-      p++;
-
-      if (p >= translation + translation_len)
-       /* This should never happen.  It means the plural expression
-          evaluated to a value larger than the number of variants
-          available for MSGID1.  */
-       return (char *) translation;
-    }
-  return (char *) p;
-}
-
-#ifndef _LIBC
-/* Return string representation of locale CATEGORY.  */
-static const char *
-internal_function
-category_to_name (int category)
-{
-  const char *retval;
-
-  switch (category)
-  {
-#ifdef LC_COLLATE
-  case LC_COLLATE:
-    retval = "LC_COLLATE";
-    break;
-#endif
-#ifdef LC_CTYPE
-  case LC_CTYPE:
-    retval = "LC_CTYPE";
-    break;
-#endif
-#ifdef LC_MONETARY
-  case LC_MONETARY:
-    retval = "LC_MONETARY";
-    break;
-#endif
-#ifdef LC_NUMERIC
-  case LC_NUMERIC:
-    retval = "LC_NUMERIC";
-    break;
-#endif
-#ifdef LC_TIME
-  case LC_TIME:
-    retval = "LC_TIME";
-    break;
-#endif
-#ifdef LC_MESSAGES
-  case LC_MESSAGES:
-    retval = "LC_MESSAGES";
-    break;
-#endif
-#ifdef LC_RESPONSE
-  case LC_RESPONSE:
-    retval = "LC_RESPONSE";
-    break;
-#endif
-#ifdef LC_ALL
-  case LC_ALL:
-    /* This might not make sense but is perhaps better than any other
-       value.  */
-    retval = "LC_ALL";
-    break;
-#endif
-  default:
-    /* If you have a better idea for a default value let me know.  */
-    retval = "LC_XXX";
-  }
-
-  return retval;
-}
-#endif
-
-/* Guess value of current locale from value of the environment variables.  */
-static const char *
-internal_function
-guess_category_value (int category, const char *categoryname)
-{
-  const char *language;
-  const char *retval;
-
-  /* The highest priority value is the `LANGUAGE' environment
-     variable.  But we don't use the value if the currently selected
-     locale is the C locale.  This is a GNU extension.  */
-  language = getenv ("LANGUAGE");
-  if (language != NULL && language[0] == '\0')
-    language = NULL;
-
-  /* We have to proceed with the POSIX methods of looking to `LC_ALL',
-     `LC_xxx', and `LANG'.  On some systems this can be done by the
-     `setlocale' function itself.  */
-#ifdef _LIBC
-  retval = __current_locale_name (category);
-#else
-  retval = _nl_locale_name (category, categoryname);
-#endif
-
-  /* Ignore LANGUAGE if the locale is set to "C" because
-     1. "C" locale usually uses the ASCII encoding, and most international
-       messages use non-ASCII characters. These characters get displayed
-       as question marks (if using glibc's iconv()) or as invalid 8-bit
-       characters (because other iconv()s refuse to convert most non-ASCII
-       characters to ASCII). In any case, the output is ugly.
-     2. The precise output of some programs in the "C" locale is specified
-       by POSIX and should not depend on environment variables like
-       "LANGUAGE".  We allow such programs to use gettext().  */
-  return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
-}
-
-/* @@ begin of epilog @@ */
-
-/* We don't want libintl.a to depend on any other library.  So we
-   avoid the non-standard function stpcpy.  In GNU C Library this
-   function is available, though.  Also allow the symbol HAVE_STPCPY
-   to be defined.  */
-#if !_LIBC && !HAVE_STPCPY
-static char *
-stpcpy (char *dest, const char *src)
-{
-  while ((*dest++ = *src++) != '\0')
-    /* Do nothing. */ ;
-  return dest - 1;
-}
-#endif
-
-#if !_LIBC && !HAVE_MEMPCPY
-static void *
-mempcpy (void *dest, const void *src, size_t n)
-{
-  return (void *) ((char *) memcpy (dest, src, n) + n);
-}
-#endif
-
-
-#ifdef _LIBC
-/* If we want to free all resources we have to do some work at
-   program's end.  */
-libc_freeres_fn (free_mem)
-{
-  void *old;
-
-  while (_nl_domain_bindings != NULL)
-    {
-      struct binding *oldp = _nl_domain_bindings;
-      _nl_domain_bindings = _nl_domain_bindings->next;
-      if (oldp->dirname != INTUSE(_nl_default_dirname))
-       /* Yes, this is a pointer comparison.  */
-       free (oldp->dirname);
-      free (oldp->codeset);
-      free (oldp);
-    }
-
-  if (_nl_current_default_domain != _nl_default_default_domain)
-    /* Yes, again a pointer comparison.  */
-    free ((char *) _nl_current_default_domain);
-
-  /* Remove the search tree with the known translations.  */
-  __tdestroy (root, free);
-  root = NULL;
-
-  while (transmem_list != NULL)
-    {
-      old = transmem_list;
-      transmem_list = transmem_list->next;
-      free (old);
-    }
-}
-#endif
diff --git a/intl/dcngettext.c b/intl/dcngettext.c
deleted file mode 100644 (file)
index 48a3e09..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Implementation of the dcngettext(3) function.
-   Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem.  They must not clash
-   with existing names and they should follow ANSI C.  But this source
-   code is also used in GNU C Library where the names have a __
-   prefix.  So we have to make a difference here.  */
-#ifdef _LIBC
-# define DCNGETTEXT __dcngettext
-# define DCIGETTEXT __dcigettext
-#else
-# define DCNGETTEXT libintl_dcngettext
-# define DCIGETTEXT libintl_dcigettext
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
-   locale.  */
-char *
-DCNGETTEXT (const char *domainname,
-           const char *msgid1, const char *msgid2, unsigned long int n,
-           int category)
-{
-  return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library.  */
-weak_alias (__dcngettext, dcngettext);
-#endif
diff --git a/intl/dgettext.c b/intl/dgettext.c
deleted file mode 100644 (file)
index b64b0f5..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Implementation of the dgettext(3) function.
-   Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-
-#include <locale.h>
-
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem.  They must not clash
-   with existing names and they should follow ANSI C.  But this source
-   code is also used in GNU C Library where the names have a __
-   prefix.  So we have to make a difference here.  */
-#ifdef _LIBC
-# define DGETTEXT __dgettext
-# define DCGETTEXT INTUSE(__dcgettext)
-#else
-# define DGETTEXT libintl_dgettext
-# define DCGETTEXT libintl_dcgettext
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog of the current
-   LC_MESSAGES locale.  */
-char *
-DGETTEXT (const char *domainname, const char *msgid)
-{
-  return DCGETTEXT (domainname, msgid, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library.  */
-weak_alias (__dgettext, dgettext);
-#endif
diff --git a/intl/dngettext.c b/intl/dngettext.c
deleted file mode 100644 (file)
index 7815637..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Implementation of the dngettext(3) function.
-   Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-
-#include <locale.h>
-
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem.  They must not clash
-   with existing names and they should follow ANSI C.  But this source
-   code is also used in GNU C Library where the names have a __
-   prefix.  So we have to make a difference here.  */
-#ifdef _LIBC
-# define DNGETTEXT __dngettext
-# define DCNGETTEXT __dcngettext
-#else
-# define DNGETTEXT libintl_dngettext
-# define DCNGETTEXT libintl_dcngettext
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog of the current
-   LC_MESSAGES locale and skip message according to the plural form.  */
-char *
-DNGETTEXT (const char *domainname,
-          const char *msgid1, const char *msgid2, unsigned long int n)
-{
-  return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library.  */
-weak_alias (__dngettext, dngettext);
-#endif
diff --git a/intl/eval-plural.h b/intl/eval-plural.h
deleted file mode 100644 (file)
index 01bd5af..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Plural expression evaluation.
-   Copyright (C) 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef STATIC
-#define STATIC static
-#endif
-
-/* Evaluate the plural expression and return an index value.  */
-STATIC
-unsigned long int
-internal_function
-plural_eval (struct expression *pexp, unsigned long int n)
-{
-  switch (pexp->nargs)
-    {
-    case 0:
-      switch (pexp->operation)
-       {
-       case var:
-         return n;
-       case num:
-         return pexp->val.num;
-       default:
-         break;
-       }
-      /* NOTREACHED */
-      break;
-    case 1:
-      {
-       /* pexp->operation must be lnot.  */
-       unsigned long int arg = plural_eval (pexp->val.args[0], n);
-       return ! arg;
-      }
-    case 2:
-      {
-       unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
-       if (pexp->operation == lor)
-         return leftarg || plural_eval (pexp->val.args[1], n);
-       else if (pexp->operation == land)
-         return leftarg && plural_eval (pexp->val.args[1], n);
-       else
-         {
-           unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
-
-           switch (pexp->operation)
-             {
-             case mult:
-               return leftarg * rightarg;
-             case divide:
-#if !INTDIV0_RAISES_SIGFPE
-               if (rightarg == 0)
-                 raise (SIGFPE);
-#endif
-               return leftarg / rightarg;
-             case module:
-#if !INTDIV0_RAISES_SIGFPE
-               if (rightarg == 0)
-                 raise (SIGFPE);
-#endif
-               return leftarg % rightarg;
-             case plus:
-               return leftarg + rightarg;
-             case minus:
-               return leftarg - rightarg;
-             case less_than:
-               return leftarg < rightarg;
-             case greater_than:
-               return leftarg > rightarg;
-             case less_or_equal:
-               return leftarg <= rightarg;
-             case greater_or_equal:
-               return leftarg >= rightarg;
-             case equal:
-               return leftarg == rightarg;
-             case not_equal:
-               return leftarg != rightarg;
-             default:
-               break;
-             }
-         }
-       /* NOTREACHED */
-       break;
-      }
-    case 3:
-      {
-       /* pexp->operation must be qmop.  */
-       unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
-       return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
-      }
-    }
-  /* NOTREACHED */
-  return 0;
-}
diff --git a/intl/explodename.c b/intl/explodename.c
deleted file mode 100644 (file)
index 52c25e7..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/* Copyright (C) 1995-1998, 2000-2001, 2003 Free Software Foundation, Inc.
-   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-#include "loadinfo.h"
-
-/* On some strange systems still no definition of NULL is found.  Sigh!  */
-#ifndef NULL
-# if defined __STDC__ && __STDC__
-#  define NULL ((void *) 0)
-# else
-#  define NULL 0
-# endif
-#endif
-
-/* @@ end of prolog @@ */
-
-char *
-_nl_find_language (const char *name)
-{
-  while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
-        && name[0] != '+' && name[0] != ',')
-    ++name;
-
-  return (char *) name;
-}
-
-
-int
-_nl_explode_name (char *name,
-                 const char **language, const char **modifier,
-                 const char **territory, const char **codeset,
-                 const char **normalized_codeset, const char **special,
-                 const char **sponsor, const char **revision)
-{
-  enum { undecided, xpg, cen } syntax;
-  char *cp;
-  int mask;
-
-  *modifier = NULL;
-  *territory = NULL;
-  *codeset = NULL;
-  *normalized_codeset = NULL;
-  *special = NULL;
-  *sponsor = NULL;
-  *revision = NULL;
-
-  /* Now we determine the single parts of the locale name.  First
-     look for the language.  Termination symbols are `_' and `@' if
-     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
-  mask = 0;
-  syntax = undecided;
-  *language = cp = name;
-  cp = _nl_find_language (*language);
-
-  if (*language == cp)
-    /* This does not make sense: language has to be specified.  Use
-       this entry as it is without exploding.  Perhaps it is an alias.  */
-    cp = strchr (*language, '\0');
-  else if (cp[0] == '_')
-    {
-      /* Next is the territory.  */
-      cp[0] = '\0';
-      *territory = ++cp;
-
-      while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
-            && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
-       ++cp;
-
-      mask |= TERRITORY;
-
-      if (cp[0] == '.')
-       {
-         /* Next is the codeset.  */
-         syntax = xpg;
-         cp[0] = '\0';
-         *codeset = ++cp;
-
-         while (cp[0] != '\0' && cp[0] != '@')
-           ++cp;
-
-         mask |= XPG_CODESET;
-
-         if (*codeset != cp && (*codeset)[0] != '\0')
-           {
-             *normalized_codeset = _nl_normalize_codeset (*codeset,
-                                                          cp - *codeset);
-             if (strcmp (*codeset, *normalized_codeset) == 0)
-               free ((char *) *normalized_codeset);
-             else
-               mask |= XPG_NORM_CODESET;
-           }
-       }
-    }
-
-  if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
-    {
-      /* Next is the modifier.  */
-      syntax = cp[0] == '@' ? xpg : cen;
-      cp[0] = '\0';
-      *modifier = ++cp;
-
-      while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
-            && cp[0] != ',' && cp[0] != '_')
-       ++cp;
-
-      mask |= XPG_MODIFIER | CEN_AUDIENCE;
-    }
-
-  if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
-    {
-      syntax = cen;
-
-      if (cp[0] == '+')
-       {
-         /* Next is special application (CEN syntax).  */
-         cp[0] = '\0';
-         *special = ++cp;
-
-         while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
-           ++cp;
-
-         mask |= CEN_SPECIAL;
-       }
-
-      if (cp[0] == ',')
-       {
-         /* Next is sponsor (CEN syntax).  */
-         cp[0] = '\0';
-         *sponsor = ++cp;
-
-         while (cp[0] != '\0' && cp[0] != '_')
-           ++cp;
-
-         mask |= CEN_SPONSOR;
-       }
-
-      if (cp[0] == '_')
-       {
-         /* Next is revision (CEN syntax).  */
-         cp[0] = '\0';
-         *revision = ++cp;
-
-         mask |= CEN_REVISION;
-       }
-    }
-
-  /* For CEN syntax values it might be important to have the
-     separator character in the file name, not for XPG syntax.  */
-  if (syntax == xpg)
-    {
-      if (*territory != NULL && (*territory)[0] == '\0')
-       mask &= ~TERRITORY;
-
-      if (*codeset != NULL && (*codeset)[0] == '\0')
-       mask &= ~XPG_CODESET;
-
-      if (*modifier != NULL && (*modifier)[0] == '\0')
-       mask &= ~XPG_MODIFIER;
-    }
-
-  return mask;
-}
diff --git a/intl/finddomain.c b/intl/finddomain.c
deleted file mode 100644 (file)
index 4992a8c..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/* Handle list of needed message catalogs
-   Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
-   Written by Ulrich Drepper <drepper@gnu.org>, 1995.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if defined HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-/* List of already loaded domains.  */
-static struct loaded_l10nfile *_nl_loaded_domains;
-
-
-/* Return a data structure describing the message catalog described by
-   the DOMAINNAME and CATEGORY parameters with respect to the currently
-   established bindings.  */
-struct loaded_l10nfile *
-internal_function
-_nl_find_domain (const char *dirname, char *locale,
-                const char *domainname, struct binding *domainbinding)
-{
-  struct loaded_l10nfile *retval;
-  const char *language;
-  const char *modifier;
-  const char *territory;
-  const char *codeset;
-  const char *normalized_codeset;
-  const char *special;
-  const char *sponsor;
-  const char *revision;
-  const char *alias_value;
-  int mask;
-
-  /* LOCALE can consist of up to four recognized parts for the XPG syntax:
-
-               language[_territory[.codeset]][@modifier]
-
-     and six parts for the CEN syntax:
-
-       language[_territory][+audience][+special][,[sponsor][_revision]]
-
-     Beside the first part all of them are allowed to be missing.  If
-     the full specified locale is not found, the less specific one are
-     looked for.  The various parts will be stripped off according to
-     the following order:
-               (1) revision
-               (2) sponsor
-               (3) special
-               (4) codeset
-               (5) normalized codeset
-               (6) territory
-               (7) audience/modifier
-   */
-
-  /* If we have already tested for this locale entry there has to
-     be one data set in the list of loaded domains.  */
-  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
-                              strlen (dirname) + 1, 0, locale, NULL, NULL,
-                              NULL, NULL, NULL, NULL, NULL, domainname, 0);
-  if (retval != NULL)
-    {
-      /* We know something about this locale.  */
-      int cnt;
-
-      if (retval->decided == 0)
-       _nl_load_domain (retval, domainbinding);
-
-      if (retval->data != NULL)
-       return retval;
-
-      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
-       {
-         if (retval->successor[cnt]->decided == 0)
-           _nl_load_domain (retval->successor[cnt], domainbinding);
-
-         if (retval->successor[cnt]->data != NULL)
-           break;
-       }
-      return cnt >= 0 ? retval : NULL;
-      /* NOTREACHED */
-    }
-
-  /* See whether the locale value is an alias.  If yes its value
-     *overwrites* the alias name.  No test for the original value is
-     done.  */
-  alias_value = _nl_expand_alias (locale);
-  if (alias_value != NULL)
-    {
-#if defined _LIBC || defined HAVE_STRDUP
-      locale = strdup (alias_value);
-      if (locale == NULL)
-       return NULL;
-#else
-      size_t len = strlen (alias_value) + 1;
-      locale = (char *) malloc (len);
-      if (locale == NULL)
-       return NULL;
-
-      memcpy (locale, alias_value, len);
-#endif
-    }
-
-  /* Now we determine the single parts of the locale name.  First
-     look for the language.  Termination symbols are `_' and `@' if
-     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
-  mask = _nl_explode_name (locale, &language, &modifier, &territory,
-                          &codeset, &normalized_codeset, &special,
-                          &sponsor, &revision);
-
-  /* Create all possible locale entries which might be interested in
-     generalization.  */
-  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
-                              strlen (dirname) + 1, mask, language, territory,
-                              codeset, normalized_codeset, modifier, special,
-                              sponsor, revision, domainname, 1);
-  if (retval == NULL)
-    /* This means we are out of core.  */
-    return NULL;
-
-  if (retval->decided == 0)
-    _nl_load_domain (retval, domainbinding);
-  if (retval->data == NULL)
-    {
-      int cnt;
-      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
-       {
-         if (retval->successor[cnt]->decided == 0)
-           _nl_load_domain (retval->successor[cnt], domainbinding);
-         if (retval->successor[cnt]->data != NULL)
-           break;
-       }
-    }
-
-  /* The room for an alias was dynamically allocated.  Free it now.  */
-  if (alias_value != NULL)
-    free (locale);
-
-  /* The space for normalized_codeset is dynamically allocated.  Free it.  */
-  if (mask & XPG_NORM_CODESET)
-    free ((void *) normalized_codeset);
-
-  return retval;
-}
-
-
-#ifdef _LIBC
-libc_freeres_fn (free_mem)
-{
-  struct loaded_l10nfile *runp = _nl_loaded_domains;
-
-  while (runp != NULL)
-    {
-      struct loaded_l10nfile *here = runp;
-      if (runp->data != NULL)
-       _nl_unload_domain ((struct loaded_domain *) runp->data);
-      runp = runp->next;
-      free ((char *) here->filename);
-      free (here);
-    }
-}
-#endif
diff --git a/intl/gettext.c b/intl/gettext.c
deleted file mode 100644 (file)
index 92c42fa..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Implementation of gettext(3) function.
-   Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef _LIBC
-# define __need_NULL
-# include <stddef.h>
-#else
-# include <stdlib.h>           /* Just for NULL.  */
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem.  They must not clash
-   with existing names and they should follow ANSI C.  But this source
-   code is also used in GNU C Library where the names have a __
-   prefix.  So we have to make a difference here.  */
-#ifdef _LIBC
-# define GETTEXT __gettext
-# define DCGETTEXT INTUSE(__dcgettext)
-#else
-# define GETTEXT libintl_gettext
-# define DCGETTEXT libintl_dcgettext
-#endif
-
-/* Look up MSGID in the current default message catalog for the current
-   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
-   text).  */
-char *
-GETTEXT (const char *msgid)
-{
-  return DCGETTEXT (NULL, msgid, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library.  */
-weak_alias (__gettext, gettext);
-#endif
diff --git a/intl/gettextP.h b/intl/gettextP.h
deleted file mode 100644 (file)
index 4d66c3d..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/* Header describing internals of libintl library.
-   Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
-   Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _GETTEXTP_H
-#define _GETTEXTP_H
-
-#include <stddef.h>            /* Get size_t.  */
-
-#ifdef _LIBC
-# include "../iconv/gconv_int.h"
-#else
-# if HAVE_ICONV
-#  include <iconv.h>
-# endif
-#endif
-
-#include "loadinfo.h"
-
-#include "gmo.h"               /* Get nls_uint32.  */
-
-/* @@ end of prolog @@ */
-
-#ifndef internal_function
-# define internal_function
-#endif
-
-#ifndef attribute_hidden
-# define attribute_hidden
-#endif
-
-/* Tell the compiler when a conditional or integer expression is
-   almost always true or almost always false.  */
-#ifndef HAVE_BUILTIN_EXPECT
-# define __builtin_expect(expr, val) (expr)
-#endif
-
-#ifndef W
-# define W(flag, data) ((flag) ? SWAP (data) : (data))
-#endif
-
-
-#ifdef _LIBC
-# include <byteswap.h>
-# define SWAP(i) bswap_32 (i)
-#else
-static inline nls_uint32
-SWAP (i)
-     nls_uint32 i;
-{
-  return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
-}
-#endif
-
-
-/* In-memory representation of system dependent string.  */
-struct sysdep_string_desc
-{
-  /* Length of addressed string, including the trailing NUL.  */
-  size_t length;
-  /* Pointer to addressed string.  */
-  const char *pointer;
-};
-
-/* The representation of an opened message catalog.  */
-struct loaded_domain
-{
-  /* Pointer to memory containing the .mo file.  */
-  const char *data;
-  /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed.  */
-  int use_mmap;
-  /* Size of mmap()ed memory.  */
-  size_t mmap_size;
-  /* 1 if the .mo file uses a different endianness than this machine.  */
-  int must_swap;
-  /* Pointer to additional malloc()ed memory.  */
-  void *malloced;
-
-  /* Number of static strings pairs.  */
-  nls_uint32 nstrings;
-  /* Pointer to descriptors of original strings in the file.  */
-  const struct string_desc *orig_tab;
-  /* Pointer to descriptors of translated strings in the file.  */
-  const struct string_desc *trans_tab;
-
-  /* Number of system dependent strings pairs.  */
-  nls_uint32 n_sysdep_strings;
-  /* Pointer to descriptors of original sysdep strings.  */
-  const struct sysdep_string_desc *orig_sysdep_tab;
-  /* Pointer to descriptors of translated sysdep strings.  */
-  const struct sysdep_string_desc *trans_sysdep_tab;
-
-  /* Size of hash table.  */
-  nls_uint32 hash_size;
-  /* Pointer to hash table.  */
-  const nls_uint32 *hash_tab;
-  /* 1 if the hash table uses a different endianness than this machine.  */
-  int must_swap_hash_tab;
-
-  int codeset_cntr;
-#ifdef _LIBC
-  __gconv_t conv;
-#else
-# if HAVE_ICONV
-  iconv_t conv;
-# endif
-#endif
-  char **conv_tab;
-
-  struct expression *plural;
-  unsigned long int nplurals;
-};
-
-/* We want to allocate a string at the end of the struct.  But ISO C
-   doesn't allow zero sized arrays.  */
-#ifdef __GNUC__
-# define ZERO 0
-#else
-# define ZERO 1
-#endif
-
-/* A set of settings bound to a message domain.  Used to store settings
-   from bindtextdomain() and bind_textdomain_codeset().  */
-struct binding
-{
-  struct binding *next;
-  char *dirname;
-  int codeset_cntr;    /* Incremented each time codeset changes.  */
-  char *codeset;
-  char domainname[ZERO];
-};
-
-/* A counter which is incremented each time some previous translations
-   become invalid.
-   This variable is part of the external ABI of the GNU libintl.  */
-extern int _nl_msg_cat_cntr;
-
-#ifndef _LIBC
-const char *_nl_locale_name (int category, const char *categoryname);
-#endif
-
-struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale,
-                                        const char *__domainname,
-                                        struct binding *__domainbinding)
-     internal_function;
-void _nl_load_domain (struct loaded_l10nfile *__domain,
-                     struct binding *__domainbinding)
-     internal_function;
-void _nl_unload_domain (struct loaded_domain *__domain)
-     internal_function;
-const char *_nl_init_domain_conv (struct loaded_l10nfile *__domain_file,
-                                 struct loaded_domain *__domain,
-                                 struct binding *__domainbinding)
-     internal_function;
-void _nl_free_domain_conv (struct loaded_domain *__domain)
-     internal_function;
-
-char *_nl_find_msg (struct loaded_l10nfile *domain_file,
-                   struct binding *domainbinding, const char *msgid,
-                   size_t *lengthp)
-     internal_function;
-
-#ifdef _LIBC
-extern char *__gettext (const char *__msgid);
-extern char *__dgettext (const char *__domainname, const char *__msgid);
-extern char *__dcgettext (const char *__domainname, const char *__msgid,
-                         int __category);
-extern char *__ngettext (const char *__msgid1, const char *__msgid2,
-                        unsigned long int __n);
-extern char *__dngettext (const char *__domainname,
-                         const char *__msgid1, const char *__msgid2,
-                         unsigned long int n);
-extern char *__dcngettext (const char *__domainname,
-                          const char *__msgid1, const char *__msgid2,
-                          unsigned long int __n, int __category);
-extern char *__dcigettext (const char *__domainname,
-                          const char *__msgid1, const char *__msgid2,
-                          int __plural, unsigned long int __n,
-                          int __category);
-extern char *__textdomain (const char *__domainname);
-extern char *__bindtextdomain (const char *__domainname,
-                              const char *__dirname);
-extern char *__bind_textdomain_codeset (const char *__domainname,
-                                       const char *__codeset);
-#else
-/* Declare the exported libintl_* functions, in a way that allows us to
-   call them under their real name.  */
-# undef _INTL_REDIRECT_INLINE
-# undef _INTL_REDIRECT_MACROS
-# define _INTL_REDIRECT_MACROS
-# include "libgnuintl.h"
-extern char *libintl_dcigettext (const char *__domainname,
-                                const char *__msgid1, const char *__msgid2,
-                                int __plural, unsigned long int __n,
-                                int __category);
-#endif
-
-/* @@ begin of epilog @@ */
-
-#endif /* gettextP.h  */
diff --git a/intl/gmo.h b/intl/gmo.h
deleted file mode 100644 (file)
index e7c9cc1..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Description of GNU message catalog format: general file layout.
-   Copyright (C) 1995, 1997, 2000-2002, 2004 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _GETTEXT_H
-#define _GETTEXT_H 1
-
-#include <limits.h>
-
-/* @@ end of prolog @@ */
-
-/* The magic number of the GNU message catalog format.  */
-#define _MAGIC 0x950412de
-#define _MAGIC_SWAPPED 0xde120495
-
-/* Revision number of the currently used .mo (binary) file format.  */
-#define MO_REVISION_NUMBER 0
-#define MO_REVISION_NUMBER_WITH_SYSDEP_I 1
-
-/* The following contortions are an attempt to use the C preprocessor
-   to determine an unsigned integral type that is 32 bits wide.  An
-   alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
-   as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
-   when cross-compiling.  */
-
-#if __STDC__
-# define UINT_MAX_32_BITS 4294967295U
-#else
-# define UINT_MAX_32_BITS 0xFFFFFFFF
-#endif
-
-/* If UINT_MAX isn't defined, assume it's a 32-bit type.
-   This should be valid for all systems GNU cares about because
-   that doesn't include 16-bit systems, and only modern systems
-   (that certainly have <limits.h>) have 64+-bit integral types.  */
-
-#ifndef UINT_MAX
-# define UINT_MAX UINT_MAX_32_BITS
-#endif
-
-#if UINT_MAX == UINT_MAX_32_BITS
-typedef unsigned nls_uint32;
-#else
-# if USHRT_MAX == UINT_MAX_32_BITS
-typedef unsigned short nls_uint32;
-# else
-#  if ULONG_MAX == UINT_MAX_32_BITS
-typedef unsigned long nls_uint32;
-#  else
-  /* The following line is intended to throw an error.  Using #error is
-     not portable enough.  */
-  "Cannot determine unsigned 32-bit data type."
-#  endif
-# endif
-#endif
-
-
-/* Header for binary .mo file format.  */
-struct mo_file_header
-{
-  /* The magic number.  */
-  nls_uint32 magic;
-  /* The revision number of the file format.  */
-  nls_uint32 revision;
-
-  /* The following are only used in .mo files with major revision 0 or 1.  */
-
-  /* The number of strings pairs.  */
-  nls_uint32 nstrings;
-  /* Offset of table with start offsets of original strings.  */
-  nls_uint32 orig_tab_offset;
-  /* Offset of table with start offsets of translated strings.  */
-  nls_uint32 trans_tab_offset;
-  /* Size of hash table.  */
-  nls_uint32 hash_tab_size;
-  /* Offset of first hash table entry.  */
-  nls_uint32 hash_tab_offset;
-
-  /* The following are only used in .mo files with minor revision >= 1.  */
-
-  /* The number of system dependent segments.  */
-  nls_uint32 n_sysdep_segments;
-  /* Offset of table describing system dependent segments.  */
-  nls_uint32 sysdep_segments_offset;
-  /* The number of system dependent strings pairs.  */
-  nls_uint32 n_sysdep_strings;
-  /* Offset of table with start offsets of original sysdep strings.  */
-  nls_uint32 orig_sysdep_tab_offset;
-  /* Offset of table with start offsets of translated sysdep strings.  */
-  nls_uint32 trans_sysdep_tab_offset;
-};
-
-/* Descriptor for static string contained in the binary .mo file.  */
-struct string_desc
-{
-  /* Length of addressed string, not including the trailing NUL.  */
-  nls_uint32 length;
-  /* Offset of string in file.  */
-  nls_uint32 offset;
-};
-
-/* The following are only used in .mo files with minor revision >= 1.  */
-
-/* Descriptor for system dependent string segment.  */
-struct sysdep_segment
-{
-  /* Length of addressed string, including the trailing NUL.  */
-  nls_uint32 length;
-  /* Offset of string in file.  */
-  nls_uint32 offset;
-};
-
-/* Descriptor for system dependent string.  */
-struct sysdep_string
-{
-  /* Offset of static string segments in file.  */
-  nls_uint32 offset;
-  /* Alternating sequence of static and system dependent segments.
-     The last segment is a static segment, including the trailing NUL.  */
-  struct segment_pair
-  {
-    /* Size of static segment.  */
-    nls_uint32 segsize;
-    /* Reference to system dependent string segment, or ~0 at the end.  */
-    nls_uint32 sysdepref;
-  } segments[1];
-};
-
-/* Marker for the end of the segments[] array.  This has the value 0xFFFFFFFF,
-   regardless whether 'int' is 16 bit, 32 bit, or 64 bit.  */
-#define SEGMENTS_END ((nls_uint32) ~0)
-
-/* @@ begin of epilog @@ */
-
-#endif /* gettext.h  */
diff --git a/intl/hash-string.h b/intl/hash-string.h
deleted file mode 100644 (file)
index 093e3b1..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Description of GNU message catalog format: string hashing function.
-   Copyright (C) 1995, 1997-1998, 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* @@ end of prolog @@ */
-
-/* We assume to have `unsigned long int' value with at least 32 bits.  */
-#define HASHWORDBITS 32
-
-
-/* Defines the so called `hashpjw' function by P.J. Weinberger
-   [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
-   1986, 1987 Bell Telephone Laboratories, Inc.]  */
-static inline unsigned long int
-hash_string (const char *str_param)
-{
-  unsigned long int hval, g;
-  const char *str = str_param;
-
-  /* Compute the hash value for the given string.  */
-  hval = 0;
-  while (*str != '\0')
-    {
-      hval <<= 4;
-      hval += (unsigned char) *str++;
-      g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
-      if (g != 0)
-       {
-         hval ^= g >> (HASHWORDBITS - 8);
-         hval ^= g;
-       }
-    }
-  return hval;
-}
diff --git a/intl/intl-compat.c b/intl/intl-compat.c
deleted file mode 100644 (file)
index 96f9d95..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
-   Library.
-   Copyright (C) 1995, 2000-2003 Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-
-/* @@ end of prolog @@ */
-
-/* This file redirects the gettext functions (without prefix) to those
-   defined in the included GNU libintl library (with "libintl_" prefix).
-   It is compiled into libintl in order to make the AM_GNU_GETTEXT test
-   of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which
-   has the redirections primarily in the <libintl.h> include file.
-   It is also compiled into libgnuintl so that libgnuintl.so can be used
-   as LD_PRELOADable library on glibc systems, to provide the extra
-   features that the functions in the libc don't have (namely, logging).  */
-
-
-#undef gettext
-#undef dgettext
-#undef dcgettext
-#undef ngettext
-#undef dngettext
-#undef dcngettext
-#undef textdomain
-#undef bindtextdomain
-#undef bind_textdomain_codeset
-
-
-/* When building a DLL, we must export some functions.  Note that because
-   the functions are only defined for binary backward compatibility, we
-   don't need to use __declspec(dllimport) in any case.  */
-#if defined _MSC_VER && BUILDING_DLL
-# define DLL_EXPORTED __declspec(dllexport)
-#else
-# define DLL_EXPORTED
-#endif
-
-
-DLL_EXPORTED
-char *
-gettext (const char *msgid)
-{
-  return libintl_gettext (msgid);
-}
-
-
-DLL_EXPORTED
-char *
-dgettext (const char *domainname, const char *msgid)
-{
-  return libintl_dgettext (domainname, msgid);
-}
-
-
-DLL_EXPORTED
-char *
-dcgettext (const char *domainname, const char *msgid, int category)
-{
-  return libintl_dcgettext (domainname, msgid, category);
-}
-
-
-DLL_EXPORTED
-char *
-ngettext (const char *msgid1, const char *msgid2, unsigned long int n)
-{
-  return libintl_ngettext (msgid1, msgid2, n);
-}
-
-
-DLL_EXPORTED
-char *
-dngettext (const char *domainname,
-          const char *msgid1, const char *msgid2, unsigned long int n)
-{
-  return libintl_dngettext (domainname, msgid1, msgid2, n);
-}
-
-
-DLL_EXPORTED
-char *
-dcngettext (const char *domainname,
-           const char *msgid1, const char *msgid2, unsigned long int n,
-           int category)
-{
-  return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
-}
-
-
-DLL_EXPORTED
-char *
-textdomain (const char *domainname)
-{
-  return libintl_textdomain (domainname);
-}
-
-
-DLL_EXPORTED
-char *
-bindtextdomain (const char *domainname, const char *dirname)
-{
-  return libintl_bindtextdomain (domainname, dirname);
-}
-
-
-DLL_EXPORTED
-char *
-bind_textdomain_codeset (const char *domainname, const char *codeset)
-{
-  return libintl_bind_textdomain_codeset (domainname, codeset);
-}
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
deleted file mode 100644 (file)
index 3393ecb..0000000
+++ /dev/null
@@ -1,422 +0,0 @@
-/* Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
-   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* Tell glibc's <string.h> to provide a prototype for stpcpy().
-   This must come before <config.h> because <config.h> may include
-   <features.h>, and once <features.h> has been included, it's too late.  */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE   1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-
-#if defined _LIBC || defined HAVE_ARGZ_H
-# include <argz.h>
-#endif
-#include <ctype.h>
-#include <sys/types.h>
-#include <stdlib.h>
-
-#include "loadinfo.h"
-
-/* On some strange systems still no definition of NULL is found.  Sigh!  */
-#ifndef NULL
-# if defined __STDC__ && __STDC__
-#  define NULL ((void *) 0)
-# else
-#  define NULL 0
-# endif
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ANSI C functions.  This is required by the standard
-   because some ANSI C functions will require linking with this object
-   file and the name space must not be polluted.  */
-# ifndef stpcpy
-#  define stpcpy(dest, src) __stpcpy(dest, src)
-# endif
-#else
-# ifndef HAVE_STPCPY
-#define stpcpy(dest, src) my_stpcpy(dest, src)
-static char *stpcpy (char *dest, const char *src);
-# endif
-#endif
-
-/* Pathname support.
-   ISSLASH(C)           tests whether C is a directory separator character.
-   IS_ABSOLUTE_PATH(P)  tests whether P is an absolute path.  If it is not,
-                        it may be concatenated to a directory pathname.
- */
-#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
-  /* Win32, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-# define HAS_DEVICE(P) \
-    ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
-     && (P)[1] == ':')
-# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
-#else
-  /* Unix */
-# define ISSLASH(C) ((C) == '/')
-# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
-#endif
-
-/* Define function which are usually not available.  */
-
-#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
-/* Returns the number of strings in ARGZ.  */
-static size_t
-argz_count__ (const char *argz, size_t len)
-{
-  size_t count = 0;
-  while (len > 0)
-    {
-      size_t part_len = strlen (argz);
-      argz += part_len + 1;
-      len -= part_len + 1;
-      count++;
-    }
-  return count;
-}
-# undef __argz_count
-# define __argz_count(argz, len) argz_count__ (argz, len)
-#else
-# ifdef _LIBC
-#  define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
-# endif
-#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
-
-#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
-/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
-   except the last into the character SEP.  */
-static void
-argz_stringify__ (char *argz, size_t len, int sep)
-{
-  while (len > 0)
-    {
-      size_t part_len = strlen (argz);
-      argz += part_len;
-      len -= part_len + 1;
-      if (len > 0)
-       *argz++ = sep;
-    }
-}
-# undef __argz_stringify
-# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
-#else
-# ifdef _LIBC
-#  define __argz_stringify(argz, len, sep) \
-  INTUSE(__argz_stringify) (argz, len, sep)
-# endif
-#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
-
-#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
-static char *
-argz_next__ (char *argz, size_t argz_len, const char *entry)
-{
-  if (entry)
-    {
-      if (entry < argz + argz_len)
-        entry = strchr (entry, '\0') + 1;
-
-      return entry >= argz + argz_len ? NULL : (char *) entry;
-    }
-  else
-    if (argz_len > 0)
-      return argz;
-    else
-      return 0;
-}
-# undef __argz_next
-# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
-#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
-
-
-/* Return number of bits set in X.  */
-static inline int
-pop (int x)
-{
-  /* We assume that no more than 16 bits are used.  */
-  x = ((x & ~0x5555) >> 1) + (x & 0x5555);
-  x = ((x & ~0x3333) >> 2) + (x & 0x3333);
-  x = ((x >> 4) + x) & 0x0f0f;
-  x = ((x >> 8) + x) & 0xff;
-
-  return x;
-}
-
-
-struct loaded_l10nfile *
-_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
-                   const char *dirlist, size_t dirlist_len,
-                   int mask, const char *language, const char *territory,
-                   const char *codeset, const char *normalized_codeset,
-                   const char *modifier, const char *special,
-                   const char *sponsor, const char *revision,
-                   const char *filename, int do_allocate)
-{
-  char *abs_filename;
-  struct loaded_l10nfile **lastp;
-  struct loaded_l10nfile *retval;
-  char *cp;
-  size_t dirlist_count;
-  size_t entries;
-  int cnt;
-
-  /* If LANGUAGE contains an absolute directory specification, we ignore
-     DIRLIST.  */
-  if (IS_ABSOLUTE_PATH (language))
-    dirlist_len = 0;
-
-  /* Allocate room for the full file name.  */
-  abs_filename = (char *) malloc (dirlist_len
-                                 + strlen (language)
-                                 + ((mask & TERRITORY) != 0
-                                    ? strlen (territory) + 1 : 0)
-                                 + ((mask & XPG_CODESET) != 0
-                                    ? strlen (codeset) + 1 : 0)
-                                 + ((mask & XPG_NORM_CODESET) != 0
-                                    ? strlen (normalized_codeset) + 1 : 0)
-                                 + (((mask & XPG_MODIFIER) != 0
-                                     || (mask & CEN_AUDIENCE) != 0)
-                                    ? strlen (modifier) + 1 : 0)
-                                 + ((mask & CEN_SPECIAL) != 0
-                                    ? strlen (special) + 1 : 0)
-                                 + (((mask & CEN_SPONSOR) != 0
-                                     || (mask & CEN_REVISION) != 0)
-                                    ? (1 + ((mask & CEN_SPONSOR) != 0
-                                            ? strlen (sponsor) : 0)
-                                       + ((mask & CEN_REVISION) != 0
-                                          ? strlen (revision) + 1 : 0)) : 0)
-                                 + 1 + strlen (filename) + 1);
-
-  if (abs_filename == NULL)
-    return NULL;
-
-  /* Construct file name.  */
-  cp = abs_filename;
-  if (dirlist_len > 0)
-    {
-      memcpy (cp, dirlist, dirlist_len);
-      __argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
-      cp += dirlist_len;
-      cp[-1] = '/';
-    }
-
-  cp = stpcpy (cp, language);
-
-  if ((mask & TERRITORY) != 0)
-    {
-      *cp++ = '_';
-      cp = stpcpy (cp, territory);
-    }
-  if ((mask & XPG_CODESET) != 0)
-    {
-      *cp++ = '.';
-      cp = stpcpy (cp, codeset);
-    }
-  if ((mask & XPG_NORM_CODESET) != 0)
-    {
-      *cp++ = '.';
-      cp = stpcpy (cp, normalized_codeset);
-    }
-  if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
-    {
-      /* This component can be part of both syntaces but has different
-        leading characters.  For CEN we use `+', else `@'.  */
-      *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
-      cp = stpcpy (cp, modifier);
-    }
-  if ((mask & CEN_SPECIAL) != 0)
-    {
-      *cp++ = '+';
-      cp = stpcpy (cp, special);
-    }
-  if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
-    {
-      *cp++ = ',';
-      if ((mask & CEN_SPONSOR) != 0)
-       cp = stpcpy (cp, sponsor);
-      if ((mask & CEN_REVISION) != 0)
-       {
-         *cp++ = '_';
-         cp = stpcpy (cp, revision);
-       }
-    }
-
-  *cp++ = '/';
-  stpcpy (cp, filename);
-
-  /* Look in list of already loaded domains whether it is already
-     available.  */
-  lastp = l10nfile_list;
-  for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
-    if (retval->filename != NULL)
-      {
-       int compare = strcmp (retval->filename, abs_filename);
-       if (compare == 0)
-         /* We found it!  */
-         break;
-       if (compare < 0)
-         {
-           /* It's not in the list.  */
-           retval = NULL;
-           break;
-         }
-
-       lastp = &retval->next;
-      }
-
-  if (retval != NULL || do_allocate == 0)
-    {
-      free (abs_filename);
-      return retval;
-    }
-
-  dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
-
-  /* Allocate a new loaded_l10nfile.  */
-  retval =
-    (struct loaded_l10nfile *)
-    malloc (sizeof (*retval)
-           + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0))
-              * sizeof (struct loaded_l10nfile *)));
-  if (retval == NULL)
-    return NULL;
-
-  retval->filename = abs_filename;
-
-  /* We set retval->data to NULL here; it is filled in later.
-     Setting retval->decided to 1 here means that retval does not
-     correspond to a real file (dirlist_count > 1) or is not worth
-     looking up (if an unnormalized codeset was specified).  */
-  retval->decided = (dirlist_count > 1
-                    || ((mask & XPG_CODESET) != 0
-                        && (mask & XPG_NORM_CODESET) != 0));
-  retval->data = NULL;
-
-  retval->next = *lastp;
-  *lastp = retval;
-
-  entries = 0;
-  /* Recurse to fill the inheritance list of RETVAL.
-     If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
-     entry does not correspond to a real file; retval->filename contains
-     colons.  In this case we loop across all elements of DIRLIST and
-     across all bit patterns dominated by MASK.
-     If the DIRLIST is a single directory or entirely redundant (i.e.
-     DIRLIST_COUNT == 1), we loop across all bit patterns dominated by
-     MASK, excluding MASK itself.
-     In either case, we loop down from MASK to 0.  This has the effect
-     that the extra bits in the locale name are dropped in this order:
-     first the modifier, then the territory, then the codeset, then the
-     normalized_codeset.  */
-  for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt)
-    if ((cnt & ~mask) == 0
-       && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
-       && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
-      {
-       if (dirlist_count > 1)
-         {
-           /* Iterate over all elements of the DIRLIST.  */
-           char *dir = NULL;
-
-           while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
-                  != NULL)
-             retval->successor[entries++]
-               = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
-                                     cnt, language, territory, codeset,
-                                     normalized_codeset, modifier, special,
-                                     sponsor, revision, filename, 1);
-         }
-       else
-         retval->successor[entries++]
-           = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
-                                 cnt, language, territory, codeset,
-                                 normalized_codeset, modifier, special,
-                                 sponsor, revision, filename, 1);
-      }
-  retval->successor[entries] = NULL;
-
-  return retval;
-}
-
-/* Normalize codeset name.  There is no standard for the codeset
-   names.  Normalization allows the user to use any of the common
-   names.  The return value is dynamically allocated and has to be
-   freed by the caller.  */
-const char *
-_nl_normalize_codeset (const char *codeset, size_t name_len)
-{
-  int len = 0;
-  int only_digit = 1;
-  char *retval;
-  char *wp;
-  size_t cnt;
-
-  for (cnt = 0; cnt < name_len; ++cnt)
-    if (isalnum ((unsigned char) codeset[cnt]))
-      {
-       ++len;
-
-       if (isalpha ((unsigned char) codeset[cnt]))
-         only_digit = 0;
-      }
-
-  retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
-
-  if (retval != NULL)
-    {
-      if (only_digit)
-       wp = stpcpy (retval, "iso");
-      else
-       wp = retval;
-
-      for (cnt = 0; cnt < name_len; ++cnt)
-       if (isalpha ((unsigned char) codeset[cnt]))
-         *wp++ = tolower ((unsigned char) codeset[cnt]);
-       else if (isdigit ((unsigned char) codeset[cnt]))
-         *wp++ = codeset[cnt];
-
-      *wp = '\0';
-    }
-
-  return (const char *) retval;
-}
-
-
-/* @@ begin of epilog @@ */
-
-/* We don't want libintl.a to depend on any other library.  So we
-   avoid the non-standard function stpcpy.  In GNU C Library this
-   function is available, though.  Also allow the symbol HAVE_STPCPY
-   to be defined.  */
-#if !_LIBC && !HAVE_STPCPY
-static char *
-stpcpy (char *dest, const char *src)
-{
-  while ((*dest++ = *src++) != '\0')
-    /* Do nothing. */ ;
-  return dest - 1;
-}
-#endif
diff --git a/intl/libgettext.h b/intl/libgettext.h
deleted file mode 100644 (file)
index 3a92960..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Message catalogs for internationalization.
-   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-
-   This program 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 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, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
-
-/* Because on some systems (e.g. Solaris) we sometimes have to include
-   the systems libintl.h as well as this file we have more complex
-   include protection above.  But the systems header might perhaps also
-   define _LIBINTL_H and therefore we have to protect the definition here.  */
-
-#if !defined _LIBINTL_H || !defined _LIBGETTEXT_H
-#ifndef _LIBINTL_H
-# define _LIBINTL_H    1
-#endif
-#define _LIBGETTEXT_H  1
-
-/* We define an additional symbol to signal that we use the GNU
-   implementation of gettext.  */
-#define __USE_GNU_GETTEXT 1
-
-#include <sys/types.h>
-
-#if HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifndef PARAMS
-# if __STDC__ || defined __cplusplus
-#  define PARAMS(args) args
-# else
-#  define PARAMS(args) ()
-# endif
-#endif
-
-#ifndef NULL
-# if !defined __cplusplus || defined __GNUC__
-#  define NULL ((void *) 0)
-# else
-#  define NULL (0)
-# endif
-#endif
-
-#if !HAVE_LC_MESSAGES
-/* This value determines the behaviour of the gettext() and dgettext()
-   function.  But some system does not have this defined.  Define it
-   to a default value.  */
-# define LC_MESSAGES (-1)
-#endif
-
-
-/* Declarations for gettext-using-catgets interface.  Derived from
-   Jim Meyering's libintl.h.  */
-struct _msg_ent
-{
-  const char *_msg;
-  int _msg_number;
-};
-
-
-#if HAVE_CATGETS
-/* These two variables are defined in the automatically by po-to-tbl.sed
-   generated file `cat-id-tbl.c'.  */
-extern const struct _msg_ent _msg_tbl[];
-extern int _msg_tbl_length;
-#endif
-
-
-/* For automatical extraction of messages sometimes no real
-   translation is needed.  Instead the string itself is the result.  */
-#define gettext_noop(Str) (Str)
-
-/* Look up MSGID in the current default message catalog for the current
-   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
-   text).  */
-extern char *gettext PARAMS ((const char *__msgid));
-extern char *gettext__ PARAMS ((const char *__msgid));
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current
-   LC_MESSAGES locale.  */
-extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
-extern char *dgettext__ PARAMS ((const char *__domainname,
-                                const char *__msgid));
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
-   locale.  */
-extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
-                               int __category));
-extern char *dcgettext__ PARAMS ((const char *__domainname,
-                                 const char *__msgid, int __category));
-
-
-/* Set the current default message catalog to DOMAINNAME.
-   If DOMAINNAME is null, return the current default.
-   If DOMAINNAME is "", reset to the default of "messages".  */
-extern char *textdomain PARAMS ((const char *__domainname));
-extern char *textdomain__ PARAMS ((const char *__domainname));
-
-/* Specify that the DOMAINNAME message catalog will be found
-   in DIRNAME rather than in the system locale data base.  */
-extern char *bindtextdomain PARAMS ((const char *__domainname,
-                                 const char *__dirname));
-extern char *bindtextdomain__ PARAMS ((const char *__domainname,
-                                   const char *__dirname));
-
-#if ENABLE_NLS
-
-/* Solaris 2.3 has the gettext function but dcgettext is missing.
-   So we omit this optimization for Solaris 2.3.  BTW, Solaris 2.4
-   has dcgettext.  */
-# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT)
-
-#  define gettext(Msgid)                                                     \
-     dgettext (NULL, Msgid)
-
-#  define dgettext(Domainname, Msgid)                                        \
-     dcgettext (Domainname, Msgid, LC_MESSAGES)
-
-#  if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7
-/* This global variable is defined in loadmsgcat.c.  We need a sign,
-   whether a new catalog was loaded, which can be associated with all
-   translations.  */
-extern int _nl_msg_cat_cntr;
-
-#   define dcgettext(Domainname, Msgid, Category)                            \
-  (__extension__                                                             \
-   ({                                                                        \
-     char *__result;                                                         \
-     if (__builtin_constant_p (Msgid))                                       \
-       {                                                                     \
-        static char *__translation__;                                        \
-        static int __catalog_counter__;                                      \
-        if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr)    \
-          {                                                                  \
-            __translation__ =                                                \
-              dcgettext__ (Domainname, Msgid, Category);                     \
-            __catalog_counter__ = _nl_msg_cat_cntr;                          \
-          }                                                                  \
-        __result = __translation__;                                          \
-       }                                                                     \
-     else                                                                    \
-       __result = dcgettext__ (Domainname, Msgid, Category);                 \
-     __result;                                                               \
-    }))
-#  endif
-# endif
-
-#else
-
-# define gettext(Msgid) (Msgid)
-# define dgettext(Domainname, Msgid) (Msgid)
-# define dcgettext(Domainname, Msgid, Category) (Msgid)
-# define textdomain(Domainname) ((char *) Domainname)
-# define bindtextdomain(Domainname, Dirname) ((char *) Dirname)
-
-#endif
-
-/* @@ begin of epilog @@ */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/intl/libgnuintl.h.in b/intl/libgnuintl.h.in
deleted file mode 100644 (file)
index 3be7eb9..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-/* Message catalogs for internationalization.
-   Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _LIBINTL_H
-#define _LIBINTL_H     1
-
-#include <locale.h>
-
-/* The LC_MESSAGES locale category is the category used by the functions
-   gettext() and dgettext().  It is specified in POSIX, but not in ANSI C.
-   On systems that don't define it, use an arbitrary value instead.
-   On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
-   then includes <libintl.h> (i.e. this file!) and then only defines
-   LC_MESSAGES.  To avoid a redefinition warning, don't define LC_MESSAGES
-   in this case.  */
-#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
-# define LC_MESSAGES 1729
-#endif
-
-/* We define an additional symbol to signal that we use the GNU
-   implementation of gettext.  */
-#define __USE_GNU_GETTEXT 1
-
-/* Provide information about the supported file formats.  Returns the
-   maximum minor revision number supported for a given major revision.  */
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
-  ((major) == 0 ? 1 : -1)
-
-/* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
-   precedence over _conio_gettext.  */
-#ifdef __DJGPP__
-# undef gettext
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* We redirect the functions to those prefixed with "libintl_".  This is
-   necessary, because some systems define gettext/textdomain/... in the C
-   library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
-   If we used the unprefixed names, there would be cases where the
-   definition in the C library would override the one in the libintl.so
-   shared library.  Recall that on ELF systems, the symbols are looked
-   up in the following order:
-     1. in the executable,
-     2. in the shared libraries specified on the link command line, in order,
-     3. in the dependencies of the shared libraries specified on the link
-        command line,
-     4. in the dlopen()ed shared libraries, in the order in which they were
-        dlopen()ed.
-   The definition in the C library would override the one in libintl.so if
-   either
-     * -lc is given on the link command line and -lintl isn't, or
-     * -lc is given on the link command line before -lintl, or
-     * libintl.so is a dependency of a dlopen()ed shared library but not
-       linked to the executable at link time.
-   Since Solaris gettext() behaves differently than GNU gettext(), this
-   would be unacceptable.
-
-   The redirection happens by default through macros in C, so that &gettext
-   is independent of the compilation unit, but through inline functions in
-   C++, in order not to interfere with the name mangling of class fields or
-   class methods called 'gettext'.  */
-
-/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
-   If he doesn't, we choose the method.  A third possible method is
-   _INTL_REDIRECT_ASM, supported only by GCC.  */
-#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
-# if __GNUC__ >= 2 && !defined __APPLE_CC__ && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus)
-#  define _INTL_REDIRECT_ASM
-# else
-#  ifdef __cplusplus
-#   define _INTL_REDIRECT_INLINE
-#  else
-#   define _INTL_REDIRECT_MACROS
-#  endif
-# endif
-#endif
-/* Auxiliary macros.  */
-#ifdef _INTL_REDIRECT_ASM
-# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
-# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
-# define _INTL_STRINGIFY(prefix) #prefix
-#else
-# define _INTL_ASM(cname)
-#endif
-
-/* Look up MSGID in the current default message catalog for the current
-   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
-   text).  */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_gettext (const char *__msgid);
-static inline char *gettext (const char *__msgid)
-{
-  return libintl_gettext (__msgid);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define gettext libintl_gettext
-#endif
-extern char *gettext (const char *__msgid)
-       _INTL_ASM (libintl_gettext);
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current
-   LC_MESSAGES locale.  */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_dgettext (const char *__domainname, const char *__msgid);
-static inline char *dgettext (const char *__domainname, const char *__msgid)
-{
-  return libintl_dgettext (__domainname, __msgid);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define dgettext libintl_dgettext
-#endif
-extern char *dgettext (const char *__domainname, const char *__msgid)
-       _INTL_ASM (libintl_dgettext);
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
-   locale.  */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
-                               int __category);
-static inline char *dcgettext (const char *__domainname, const char *__msgid,
-                              int __category)
-{
-  return libintl_dcgettext (__domainname, __msgid, __category);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define dcgettext libintl_dcgettext
-#endif
-extern char *dcgettext (const char *__domainname, const char *__msgid,
-                       int __category)
-       _INTL_ASM (libintl_dcgettext);
-#endif
-
-
-/* Similar to `gettext' but select the plural form corresponding to the
-   number N.  */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
-                              unsigned long int __n);
-static inline char *ngettext (const char *__msgid1, const char *__msgid2,
-                             unsigned long int __n)
-{
-  return libintl_ngettext (__msgid1, __msgid2, __n);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define ngettext libintl_ngettext
-#endif
-extern char *ngettext (const char *__msgid1, const char *__msgid2,
-                      unsigned long int __n)
-       _INTL_ASM (libintl_ngettext);
-#endif
-
-/* Similar to `dgettext' but select the plural form corresponding to the
-   number N.  */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
-                               const char *__msgid2, unsigned long int __n);
-static inline char *dngettext (const char *__domainname, const char *__msgid1,
-                              const char *__msgid2, unsigned long int __n)
-{
-  return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define dngettext libintl_dngettext
-#endif
-extern char *dngettext (const char *__domainname,
-                       const char *__msgid1, const char *__msgid2,
-                       unsigned long int __n)
-       _INTL_ASM (libintl_dngettext);
-#endif
-
-/* Similar to `dcgettext' but select the plural form corresponding to the
-   number N.  */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_dcngettext (const char *__domainname,
-                                const char *__msgid1, const char *__msgid2,
-                                unsigned long int __n, int __category);
-static inline char *dcngettext (const char *__domainname,
-                               const char *__msgid1, const char *__msgid2,
-                               unsigned long int __n, int __category)
-{
-  return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define dcngettext libintl_dcngettext
-#endif
-extern char *dcngettext (const char *__domainname,
-                        const char *__msgid1, const char *__msgid2,
-                        unsigned long int __n, int __category)
-       _INTL_ASM (libintl_dcngettext);
-#endif
-
-
-/* Set the current default message catalog to DOMAINNAME.
-   If DOMAINNAME is null, return the current default.
-   If DOMAINNAME is "", reset to the default of "messages".  */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_textdomain (const char *__domainname);
-static inline char *textdomain (const char *__domainname)
-{
-  return libintl_textdomain (__domainname);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define textdomain libintl_textdomain
-#endif
-extern char *textdomain (const char *__domainname)
-       _INTL_ASM (libintl_textdomain);
-#endif
-
-/* Specify that the DOMAINNAME message catalog will be found
-   in DIRNAME rather than in the system locale data base.  */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_bindtextdomain (const char *__domainname,
-                                    const char *__dirname);
-static inline char *bindtextdomain (const char *__domainname,
-                                   const char *__dirname)
-{
-  return libintl_bindtextdomain (__domainname, __dirname);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define bindtextdomain libintl_bindtextdomain
-#endif
-extern char *bindtextdomain (const char *__domainname, const char *__dirname)
-       _INTL_ASM (libintl_bindtextdomain);
-#endif
-
-/* Specify the character encoding in which the messages from the
-   DOMAINNAME message catalog will be returned.  */
-#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_bind_textdomain_codeset (const char *__domainname,
-                                             const char *__codeset);
-static inline char *bind_textdomain_codeset (const char *__domainname,
-                                            const char *__codeset)
-{
-  return libintl_bind_textdomain_codeset (__domainname, __codeset);
-}
-#else
-#ifdef _INTL_REDIRECT_MACROS
-# define bind_textdomain_codeset libintl_bind_textdomain_codeset
-#endif
-extern char *bind_textdomain_codeset (const char *__domainname,
-                                     const char *__codeset)
-       _INTL_ASM (libintl_bind_textdomain_codeset);
-#endif
-
-
-/* Support for format strings with positions in *printf(), following the
-   POSIX/XSI specification.
-   Note: These replacements for the *printf() functions are visible only
-   in source files that #include <libintl.h> or #include "gettext.h".
-   Packages that use *printf() in source files that don't refer to _()
-   or gettext() but for which the format string could be the return value
-   of _() or gettext() need to add this #include.  Oh well.  */
-
-#if !@HAVE_POSIX_PRINTF@
-
-#include <stdio.h>
-#include <stddef.h>
-
-/* Get va_list.  */
-#if __STDC__ || defined __cplusplus || defined _MSC_VER
-# include <stdarg.h>
-#else
-# include <varargs.h>
-#endif
-
-#undef fprintf
-#define fprintf libintl_fprintf
-extern int fprintf (FILE *, const char *, ...);
-#undef vfprintf
-#define vfprintf libintl_vfprintf
-extern int vfprintf (FILE *, const char *, va_list);
-
-#undef printf
-#define printf libintl_printf
-extern int printf (const char *, ...);
-#undef vprintf
-#define vprintf libintl_vprintf
-extern int vprintf (const char *, va_list);
-
-#undef sprintf
-#define sprintf libintl_sprintf
-extern int sprintf (char *, const char *, ...);
-#undef vsprintf
-#define vsprintf libintl_vsprintf
-extern int vsprintf (char *, const char *, va_list);
-
-#if @HAVE_SNPRINTF@
-
-#undef snprintf
-#define snprintf libintl_snprintf
-extern int snprintf (char *, size_t, const char *, ...);
-#undef vsnprintf
-#define vsnprintf libintl_vsnprintf
-extern int vsnprintf (char *, size_t, const char *, va_list);
-
-#endif
-
-#if @HAVE_ASPRINTF@
-
-#undef asprintf
-#define asprintf libintl_asprintf
-extern int asprintf (char **, const char *, ...);
-#undef vasprintf
-#define vasprintf libintl_vasprintf
-extern int vasprintf (char **, const char *, va_list);
-
-#endif
-
-#if @HAVE_WPRINTF@
-
-#undef fwprintf
-#define fwprintf libintl_fwprintf
-extern int fwprintf (FILE *, const wchar_t *, ...);
-#undef vfwprintf
-#define vfwprintf libintl_vfwprintf
-extern int vfwprintf (FILE *, const wchar_t *, va_list);
-
-#undef wprintf
-#define wprintf libintl_wprintf
-extern int wprintf (const wchar_t *, ...);
-#undef vwprintf
-#define vwprintf libintl_vwprintf
-extern int vwprintf (const wchar_t *, va_list);
-
-#undef swprintf
-#define swprintf libintl_swprintf
-extern int swprintf (wchar_t *, size_t, const wchar_t *, ...);
-#undef vswprintf
-#define vswprintf libintl_vswprintf
-extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
-
-#endif
-
-#endif
-
-
-/* Support for relocatable packages.  */
-
-/* Sets the original and the current installation prefix of the package.
-   Relocation simply replaces a pathname starting with the original prefix
-   by the corresponding pathname with the current prefix instead.  Both
-   prefixes should be directory names without trailing slash (i.e. use ""
-   instead of "/").  */
-#define libintl_set_relocation_prefix libintl_set_relocation_prefix
-extern void
-       libintl_set_relocation_prefix (const char *orig_prefix,
-                                     const char *curr_prefix);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* libintl.h */
diff --git a/intl/loadinfo.h b/intl/loadinfo.h
deleted file mode 100644 (file)
index 65e5ebd..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Copyright (C) 1996-1999, 2000-2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _LOADINFO_H
-#define _LOADINFO_H    1
-
-/* Declarations of locale dependent catalog lookup functions.
-   Implemented in
-
-     localealias.c    Possibly replace a locale name by another.
-     explodename.c    Split a locale name into its various fields.
-     l10nflist.c      Generate a list of filenames of possible message catalogs.
-     finddomain.c     Find and open the relevant message catalogs.
-
-   The main function _nl_find_domain() in finddomain.c is declared
-   in gettextP.h.
- */
-
-#ifndef internal_function
-# define internal_function
-#endif
-
-/* Tell the compiler when a conditional or integer expression is
-   almost always true or almost always false.  */
-#ifndef HAVE_BUILTIN_EXPECT
-# define __builtin_expect(expr, val) (expr)
-#endif
-
-/* Separator in PATH like lists of pathnames.  */
-#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
-  /* Win32, OS/2, DOS */
-# define PATH_SEPARATOR ';'
-#else
-  /* Unix */
-# define PATH_SEPARATOR ':'
-#endif
-
-/* Encoding of locale name parts.  */
-#define CEN_REVISION           1
-#define CEN_SPONSOR            2
-#define CEN_SPECIAL            4
-#define XPG_NORM_CODESET       8
-#define XPG_CODESET            16
-#define TERRITORY              32
-#define CEN_AUDIENCE           64
-#define XPG_MODIFIER           128
-
-#define CEN_SPECIFIC   (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
-#define XPG_SPECIFIC   (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
-
-
-struct loaded_l10nfile
-{
-  const char *filename;
-  int decided;
-
-  const void *data;
-
-  struct loaded_l10nfile *next;
-  struct loaded_l10nfile *successor[1];
-};
-
-
-/* Normalize codeset name.  There is no standard for the codeset
-   names.  Normalization allows the user to use any of the common
-   names.  The return value is dynamically allocated and has to be
-   freed by the caller.  */
-extern const char *_nl_normalize_codeset (const char *codeset,
-                                         size_t name_len);
-
-/* Lookup a locale dependent file.
-   *L10NFILE_LIST denotes a pool of lookup results of locale dependent
-   files of the same kind, sorted in decreasing order of ->filename.
-   DIRLIST and DIRLIST_LEN are an argz list of directories in which to
-   look, containing at least one directory (i.e. DIRLIST_LEN > 0).
-   MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER,
-   SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as
-   produced by _nl_explode_name().  FILENAME is the filename suffix.
-   The return value is the lookup result, either found in *L10NFILE_LIST,
-   or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL.
-   If the return value is non-NULL, it is added to *L10NFILE_LIST, and
-   its ->next field denotes the chaining inside *L10NFILE_LIST, and
-   furthermore its ->successor[] field contains a list of other lookup
-   results from which this lookup result inherits.  */
-extern struct loaded_l10nfile *
-_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
-                   const char *dirlist, size_t dirlist_len, int mask,
-                   const char *language, const char *territory,
-                   const char *codeset, const char *normalized_codeset,
-                   const char *modifier, const char *special,
-                   const char *sponsor, const char *revision,
-                   const char *filename, int do_allocate);
-
-/* Lookup the real locale name for a locale alias NAME, or NULL if
-   NAME is not a locale alias (but possibly a real locale name).
-   The return value is statically allocated and must not be freed.  */
-extern const char *_nl_expand_alias (const char *name);
-
-/* Split a locale name NAME into its pieces: language, modifier,
-   territory, codeset, special, sponsor, revision.
-   NAME gets destructively modified: NUL bytes are inserted here and
-   there.  *LANGUAGE gets assigned NAME.  Each of *MODIFIER, *TERRITORY,
-   *CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a
-   pointer into the old NAME string, or NULL.  *NORMALIZED_CODESET
-   gets assigned the expanded *CODESET, if it is different from *CODESET;
-   this one is dynamically allocated and has to be freed by the caller.
-   The return value is a bitmask, where each bit corresponds to one
-   filled-in value:
-     XPG_MODIFIER, CEN_AUDIENCE  for *MODIFIER,
-     TERRITORY                   for *TERRITORY,
-     XPG_CODESET                 for *CODESET,
-     XPG_NORM_CODESET            for *NORMALIZED_CODESET,
-     CEN_SPECIAL                 for *SPECIAL,
-     CEN_SPONSOR                 for *SPONSOR,
-     CEN_REVISION                for *REVISION.
- */
-extern int _nl_explode_name (char *name, const char **language,
-                            const char **modifier, const char **territory,
-                            const char **codeset,
-                            const char **normalized_codeset,
-                            const char **special, const char **sponsor,
-                            const char **revision);
-
-/* Split a locale name NAME into a leading language part and all the
-   rest.  Return a pointer to the first character after the language,
-   i.e. to the first byte of the rest.  */
-extern char *_nl_find_language (const char *name);
-
-#endif /* loadinfo.h */
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
deleted file mode 100644 (file)
index 7fab71a..0000000
+++ /dev/null
@@ -1,1418 +0,0 @@
-/* Load needed message catalogs.
-   Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* Tell glibc's <string.h> to provide a prototype for mempcpy().
-   This must come before <config.h> because <config.h> may include
-   <features.h>, and once <features.h> has been included, it's too late.  */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE    1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef __GNUC__
-# undef  alloca
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# ifdef _MSC_VER
-#  include <malloc.h>
-#  define alloca _alloca
-# else
-#  if defined HAVE_ALLOCA_H || defined _LIBC
-#   include <alloca.h>
-#  else
-#   ifdef _AIX
- #pragma alloca
-#   else
-#    ifndef alloca
-char *alloca ();
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#if defined HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#ifdef _LIBC
-# include <langinfo.h>
-# include <locale.h>
-#endif
-
-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
-    || (defined _LIBC && defined _POSIX_MAPPED_FILES)
-# include <sys/mman.h>
-# undef HAVE_MMAP
-# define HAVE_MMAP     1
-#else
-# undef HAVE_MMAP
-#endif
-
-#if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC
-# include <stdint.h>
-#endif
-#if defined HAVE_INTTYPES_H || defined _LIBC
-# include <inttypes.h>
-#endif
-
-#include "gmo.h"
-#include "gettextP.h"
-#include "hash-string.h"
-#include "plural-exp.h"
-
-#ifdef _LIBC
-# include "../locale/localeinfo.h"
-#endif
-
-/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
-   Note that our fallback values need not be literal strings, because we don't
-   use them with preprocessor string concatenation.  */
-#if !defined PRId8 || PRI_MACROS_BROKEN
-# undef PRId8
-# define PRId8 "d"
-#endif
-#if !defined PRIi8 || PRI_MACROS_BROKEN
-# undef PRIi8
-# define PRIi8 "i"
-#endif
-#if !defined PRIo8 || PRI_MACROS_BROKEN
-# undef PRIo8
-# define PRIo8 "o"
-#endif
-#if !defined PRIu8 || PRI_MACROS_BROKEN
-# undef PRIu8
-# define PRIu8 "u"
-#endif
-#if !defined PRIx8 || PRI_MACROS_BROKEN
-# undef PRIx8
-# define PRIx8 "x"
-#endif
-#if !defined PRIX8 || PRI_MACROS_BROKEN
-# undef PRIX8
-# define PRIX8 "X"
-#endif
-#if !defined PRId16 || PRI_MACROS_BROKEN
-# undef PRId16
-# define PRId16 "d"
-#endif
-#if !defined PRIi16 || PRI_MACROS_BROKEN
-# undef PRIi16
-# define PRIi16 "i"
-#endif
-#if !defined PRIo16 || PRI_MACROS_BROKEN
-# undef PRIo16
-# define PRIo16 "o"
-#endif
-#if !defined PRIu16 || PRI_MACROS_BROKEN
-# undef PRIu16
-# define PRIu16 "u"
-#endif
-#if !defined PRIx16 || PRI_MACROS_BROKEN
-# undef PRIx16
-# define PRIx16 "x"
-#endif
-#if !defined PRIX16 || PRI_MACROS_BROKEN
-# undef PRIX16
-# define PRIX16 "X"
-#endif
-#if !defined PRId32 || PRI_MACROS_BROKEN
-# undef PRId32
-# define PRId32 "d"
-#endif
-#if !defined PRIi32 || PRI_MACROS_BROKEN
-# undef PRIi32
-# define PRIi32 "i"
-#endif
-#if !defined PRIo32 || PRI_MACROS_BROKEN
-# undef PRIo32
-# define PRIo32 "o"
-#endif
-#if !defined PRIu32 || PRI_MACROS_BROKEN
-# undef PRIu32
-# define PRIu32 "u"
-#endif
-#if !defined PRIx32 || PRI_MACROS_BROKEN
-# undef PRIx32
-# define PRIx32 "x"
-#endif
-#if !defined PRIX32 || PRI_MACROS_BROKEN
-# undef PRIX32
-# define PRIX32 "X"
-#endif
-#if !defined PRId64 || PRI_MACROS_BROKEN
-# undef PRId64
-# define PRId64 (sizeof (long) == 8 ? "ld" : "lld")
-#endif
-#if !defined PRIi64 || PRI_MACROS_BROKEN
-# undef PRIi64
-# define PRIi64 (sizeof (long) == 8 ? "li" : "lli")
-#endif
-#if !defined PRIo64 || PRI_MACROS_BROKEN
-# undef PRIo64
-# define PRIo64 (sizeof (long) == 8 ? "lo" : "llo")
-#endif
-#if !defined PRIu64 || PRI_MACROS_BROKEN
-# undef PRIu64
-# define PRIu64 (sizeof (long) == 8 ? "lu" : "llu")
-#endif
-#if !defined PRIx64 || PRI_MACROS_BROKEN
-# undef PRIx64
-# define PRIx64 (sizeof (long) == 8 ? "lx" : "llx")
-#endif
-#if !defined PRIX64 || PRI_MACROS_BROKEN
-# undef PRIX64
-# define PRIX64 (sizeof (long) == 8 ? "lX" : "llX")
-#endif
-#if !defined PRIdLEAST8 || PRI_MACROS_BROKEN
-# undef PRIdLEAST8
-# define PRIdLEAST8 "d"
-#endif
-#if !defined PRIiLEAST8 || PRI_MACROS_BROKEN
-# undef PRIiLEAST8
-# define PRIiLEAST8 "i"
-#endif
-#if !defined PRIoLEAST8 || PRI_MACROS_BROKEN
-# undef PRIoLEAST8
-# define PRIoLEAST8 "o"
-#endif
-#if !defined PRIuLEAST8 || PRI_MACROS_BROKEN
-# undef PRIuLEAST8
-# define PRIuLEAST8 "u"
-#endif
-#if !defined PRIxLEAST8 || PRI_MACROS_BROKEN
-# undef PRIxLEAST8
-# define PRIxLEAST8 "x"
-#endif
-#if !defined PRIXLEAST8 || PRI_MACROS_BROKEN
-# undef PRIXLEAST8
-# define PRIXLEAST8 "X"
-#endif
-#if !defined PRIdLEAST16 || PRI_MACROS_BROKEN
-# undef PRIdLEAST16
-# define PRIdLEAST16 "d"
-#endif
-#if !defined PRIiLEAST16 || PRI_MACROS_BROKEN
-# undef PRIiLEAST16
-# define PRIiLEAST16 "i"
-#endif
-#if !defined PRIoLEAST16 || PRI_MACROS_BROKEN
-# undef PRIoLEAST16
-# define PRIoLEAST16 "o"
-#endif
-#if !defined PRIuLEAST16 || PRI_MACROS_BROKEN
-# undef PRIuLEAST16
-# define PRIuLEAST16 "u"
-#endif
-#if !defined PRIxLEAST16 || PRI_MACROS_BROKEN
-# undef PRIxLEAST16
-# define PRIxLEAST16 "x"
-#endif
-#if !defined PRIXLEAST16 || PRI_MACROS_BROKEN
-# undef PRIXLEAST16
-# define PRIXLEAST16 "X"
-#endif
-#if !defined PRIdLEAST32 || PRI_MACROS_BROKEN
-# undef PRIdLEAST32
-# define PRIdLEAST32 "d"
-#endif
-#if !defined PRIiLEAST32 || PRI_MACROS_BROKEN
-# undef PRIiLEAST32
-# define PRIiLEAST32 "i"
-#endif
-#if !defined PRIoLEAST32 || PRI_MACROS_BROKEN
-# undef PRIoLEAST32
-# define PRIoLEAST32 "o"
-#endif
-#if !defined PRIuLEAST32 || PRI_MACROS_BROKEN
-# undef PRIuLEAST32
-# define PRIuLEAST32 "u"
-#endif
-#if !defined PRIxLEAST32 || PRI_MACROS_BROKEN
-# undef PRIxLEAST32
-# define PRIxLEAST32 "x"
-#endif
-#if !defined PRIXLEAST32 || PRI_MACROS_BROKEN
-# undef PRIXLEAST32
-# define PRIXLEAST32 "X"
-#endif
-#if !defined PRIdLEAST64 || PRI_MACROS_BROKEN
-# undef PRIdLEAST64
-# define PRIdLEAST64 PRId64
-#endif
-#if !defined PRIiLEAST64 || PRI_MACROS_BROKEN
-# undef PRIiLEAST64
-# define PRIiLEAST64 PRIi64
-#endif
-#if !defined PRIoLEAST64 || PRI_MACROS_BROKEN
-# undef PRIoLEAST64
-# define PRIoLEAST64 PRIo64
-#endif
-#if !defined PRIuLEAST64 || PRI_MACROS_BROKEN
-# undef PRIuLEAST64
-# define PRIuLEAST64 PRIu64
-#endif
-#if !defined PRIxLEAST64 || PRI_MACROS_BROKEN
-# undef PRIxLEAST64
-# define PRIxLEAST64 PRIx64
-#endif
-#if !defined PRIXLEAST64 || PRI_MACROS_BROKEN
-# undef PRIXLEAST64
-# define PRIXLEAST64 PRIX64
-#endif
-#if !defined PRIdFAST8 || PRI_MACROS_BROKEN
-# undef PRIdFAST8
-# define PRIdFAST8 "d"
-#endif
-#if !defined PRIiFAST8 || PRI_MACROS_BROKEN
-# undef PRIiFAST8
-# define PRIiFAST8 "i"
-#endif
-#if !defined PRIoFAST8 || PRI_MACROS_BROKEN
-# undef PRIoFAST8
-# define PRIoFAST8 "o"
-#endif
-#if !defined PRIuFAST8 || PRI_MACROS_BROKEN
-# undef PRIuFAST8
-# define PRIuFAST8 "u"
-#endif
-#if !defined PRIxFAST8 || PRI_MACROS_BROKEN
-# undef PRIxFAST8
-# define PRIxFAST8 "x"
-#endif
-#if !defined PRIXFAST8 || PRI_MACROS_BROKEN
-# undef PRIXFAST8
-# define PRIXFAST8 "X"
-#endif
-#if !defined PRIdFAST16 || PRI_MACROS_BROKEN
-# undef PRIdFAST16
-# define PRIdFAST16 "d"
-#endif
-#if !defined PRIiFAST16 || PRI_MACROS_BROKEN
-# undef PRIiFAST16
-# define PRIiFAST16 "i"
-#endif
-#if !defined PRIoFAST16 || PRI_MACROS_BROKEN
-# undef PRIoFAST16
-# define PRIoFAST16 "o"
-#endif
-#if !defined PRIuFAST16 || PRI_MACROS_BROKEN
-# undef PRIuFAST16
-# define PRIuFAST16 "u"
-#endif
-#if !defined PRIxFAST16 || PRI_MACROS_BROKEN
-# undef PRIxFAST16
-# define PRIxFAST16 "x"
-#endif
-#if !defined PRIXFAST16 || PRI_MACROS_BROKEN
-# undef PRIXFAST16
-# define PRIXFAST16 "X"
-#endif
-#if !defined PRIdFAST32 || PRI_MACROS_BROKEN
-# undef PRIdFAST32
-# define PRIdFAST32 "d"
-#endif
-#if !defined PRIiFAST32 || PRI_MACROS_BROKEN
-# undef PRIiFAST32
-# define PRIiFAST32 "i"
-#endif
-#if !defined PRIoFAST32 || PRI_MACROS_BROKEN
-# undef PRIoFAST32
-# define PRIoFAST32 "o"
-#endif
-#if !defined PRIuFAST32 || PRI_MACROS_BROKEN
-# undef PRIuFAST32
-# define PRIuFAST32 "u"
-#endif
-#if !defined PRIxFAST32 || PRI_MACROS_BROKEN
-# undef PRIxFAST32
-# define PRIxFAST32 "x"
-#endif
-#if !defined PRIXFAST32 || PRI_MACROS_BROKEN
-# undef PRIXFAST32
-# define PRIXFAST32 "X"
-#endif
-#if !defined PRIdFAST64 || PRI_MACROS_BROKEN
-# undef PRIdFAST64
-# define PRIdFAST64 PRId64
-#endif
-#if !defined PRIiFAST64 || PRI_MACROS_BROKEN
-# undef PRIiFAST64
-# define PRIiFAST64 PRIi64
-#endif
-#if !defined PRIoFAST64 || PRI_MACROS_BROKEN
-# undef PRIoFAST64
-# define PRIoFAST64 PRIo64
-#endif
-#if !defined PRIuFAST64 || PRI_MACROS_BROKEN
-# undef PRIuFAST64
-# define PRIuFAST64 PRIu64
-#endif
-#if !defined PRIxFAST64 || PRI_MACROS_BROKEN
-# undef PRIxFAST64
-# define PRIxFAST64 PRIx64
-#endif
-#if !defined PRIXFAST64 || PRI_MACROS_BROKEN
-# undef PRIXFAST64
-# define PRIXFAST64 PRIX64
-#endif
-#if !defined PRIdMAX || PRI_MACROS_BROKEN
-# undef PRIdMAX
-# define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld")
-#endif
-#if !defined PRIiMAX || PRI_MACROS_BROKEN
-# undef PRIiMAX
-# define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli")
-#endif
-#if !defined PRIoMAX || PRI_MACROS_BROKEN
-# undef PRIoMAX
-# define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo")
-#endif
-#if !defined PRIuMAX || PRI_MACROS_BROKEN
-# undef PRIuMAX
-# define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu")
-#endif
-#if !defined PRIxMAX || PRI_MACROS_BROKEN
-# undef PRIxMAX
-# define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx")
-#endif
-#if !defined PRIXMAX || PRI_MACROS_BROKEN
-# undef PRIXMAX
-# define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX")
-#endif
-#if !defined PRIdPTR || PRI_MACROS_BROKEN
-# undef PRIdPTR
-# define PRIdPTR \
-  (sizeof (void *) == sizeof (long) ? "ld" : \
-   sizeof (void *) == sizeof (int) ? "d" : \
-   "lld")
-#endif
-#if !defined PRIiPTR || PRI_MACROS_BROKEN
-# undef PRIiPTR
-# define PRIiPTR \
-  (sizeof (void *) == sizeof (long) ? "li" : \
-   sizeof (void *) == sizeof (int) ? "i" : \
-   "lli")
-#endif
-#if !defined PRIoPTR || PRI_MACROS_BROKEN
-# undef PRIoPTR
-# define PRIoPTR \
-  (sizeof (void *) == sizeof (long) ? "lo" : \
-   sizeof (void *) == sizeof (int) ? "o" : \
-   "llo")
-#endif
-#if !defined PRIuPTR || PRI_MACROS_BROKEN
-# undef PRIuPTR
-# define PRIuPTR \
-  (sizeof (void *) == sizeof (long) ? "lu" : \
-   sizeof (void *) == sizeof (int) ? "u" : \
-   "llu")
-#endif
-#if !defined PRIxPTR || PRI_MACROS_BROKEN
-# undef PRIxPTR
-# define PRIxPTR \
-  (sizeof (void *) == sizeof (long) ? "lx" : \
-   sizeof (void *) == sizeof (int) ? "x" : \
-   "llx")
-#endif
-#if !defined PRIXPTR || PRI_MACROS_BROKEN
-# undef PRIXPTR
-# define PRIXPTR \
-  (sizeof (void *) == sizeof (long) ? "lX" : \
-   sizeof (void *) == sizeof (int) ? "X" : \
-   "llX")
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ISO C functions.  This is required by the standard
-   because some ISO C functions will require linking with this object
-   file and the name space must not be polluted.  */
-# define open   __open
-# define close  __close
-# define read   __read
-# define mmap   __mmap
-# define munmap __munmap
-#endif
-
-/* For those losing systems which don't have `alloca' we have to add
-   some additional code emulating it.  */
-#ifdef HAVE_ALLOCA
-# define freea(p) /* nothing */
-#else
-# define alloca(n) malloc (n)
-# define freea(p) free (p)
-#endif
-
-/* For systems that distinguish between text and binary I/O.
-   O_BINARY is usually declared in <fcntl.h>. */
-#if !defined O_BINARY && defined _O_BINARY
-  /* For MSC-compatible compilers.  */
-# define O_BINARY _O_BINARY
-# define O_TEXT _O_TEXT
-#endif
-#ifdef __BEOS__
-  /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect.  */
-# undef O_BINARY
-# undef O_TEXT
-#endif
-/* On reasonable systems, binary I/O is the default.  */
-#ifndef O_BINARY
-# define O_BINARY 0
-#endif
-
-
-/* We need a sign, whether a new catalog was loaded, which can be associated
-   with all translations.  This is important if the translations are
-   cached by one of GCC's features.  */
-int _nl_msg_cat_cntr;
-
-
-/* Expand a system dependent string segment.  Return NULL if unsupported.  */
-static const char *
-get_sysdep_segment_value (const char *name)
-{
-  /* Test for an ISO C 99 section 7.8.1 format string directive.
-     Syntax:
-     P R I { d | i | o | u | x | X }
-     { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR }  */
-  /* We don't use a table of 14 times 6 'const char *' strings here, because
-     data relocations cost startup time.  */
-  if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I')
-    {
-      if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u'
-         || name[3] == 'x' || name[3] == 'X')
-       {
-         if (name[4] == '8' && name[5] == '\0')
-           {
-             if (name[3] == 'd')
-               return PRId8;
-             if (name[3] == 'i')
-               return PRIi8;
-             if (name[3] == 'o')
-               return PRIo8;
-             if (name[3] == 'u')
-               return PRIu8;
-             if (name[3] == 'x')
-               return PRIx8;
-             if (name[3] == 'X')
-               return PRIX8;
-             abort ();
-           }
-         if (name[4] == '1' && name[5] == '6' && name[6] == '\0')
-           {
-             if (name[3] == 'd')
-               return PRId16;
-             if (name[3] == 'i')
-               return PRIi16;
-             if (name[3] == 'o')
-               return PRIo16;
-             if (name[3] == 'u')
-               return PRIu16;
-             if (name[3] == 'x')
-               return PRIx16;
-             if (name[3] == 'X')
-               return PRIX16;
-             abort ();
-           }
-         if (name[4] == '3' && name[5] == '2' && name[6] == '\0')
-           {
-             if (name[3] == 'd')
-               return PRId32;
-             if (name[3] == 'i')
-               return PRIi32;
-             if (name[3] == 'o')
-               return PRIo32;
-             if (name[3] == 'u')
-               return PRIu32;
-             if (name[3] == 'x')
-               return PRIx32;
-             if (name[3] == 'X')
-               return PRIX32;
-             abort ();
-           }
-         if (name[4] == '6' && name[5] == '4' && name[6] == '\0')
-           {
-             if (name[3] == 'd')
-               return PRId64;
-             if (name[3] == 'i')
-               return PRIi64;
-             if (name[3] == 'o')
-               return PRIo64;
-             if (name[3] == 'u')
-               return PRIu64;
-             if (name[3] == 'x')
-               return PRIx64;
-             if (name[3] == 'X')
-               return PRIX64;
-             abort ();
-           }
-         if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A'
-             && name[7] == 'S' && name[8] == 'T')
-           {
-             if (name[9] == '8' && name[10] == '\0')
-               {
-                 if (name[3] == 'd')
-                   return PRIdLEAST8;
-                 if (name[3] == 'i')
-                   return PRIiLEAST8;
-                 if (name[3] == 'o')
-                   return PRIoLEAST8;
-                 if (name[3] == 'u')
-                   return PRIuLEAST8;
-                 if (name[3] == 'x')
-                   return PRIxLEAST8;
-                 if (name[3] == 'X')
-                   return PRIXLEAST8;
-                 abort ();
-               }
-             if (name[9] == '1' && name[10] == '6' && name[11] == '\0')
-               {
-                 if (name[3] == 'd')
-                   return PRIdLEAST16;
-                 if (name[3] == 'i')
-                   return PRIiLEAST16;
-                 if (name[3] == 'o')
-                   return PRIoLEAST16;
-                 if (name[3] == 'u')
-                   return PRIuLEAST16;
-                 if (name[3] == 'x')
-                   return PRIxLEAST16;
-                 if (name[3] == 'X')
-                   return PRIXLEAST16;
-                 abort ();
-               }
-             if (name[9] == '3' && name[10] == '2' && name[11] == '\0')
-               {
-                 if (name[3] == 'd')
-                   return PRIdLEAST32;
-                 if (name[3] == 'i')
-                   return PRIiLEAST32;
-                 if (name[3] == 'o')
-                   return PRIoLEAST32;
-                 if (name[3] == 'u')
-                   return PRIuLEAST32;
-                 if (name[3] == 'x')
-                   return PRIxLEAST32;
-                 if (name[3] == 'X')
-                   return PRIXLEAST32;
-                 abort ();
-               }
-             if (name[9] == '6' && name[10] == '4' && name[11] == '\0')
-               {
-                 if (name[3] == 'd')
-                   return PRIdLEAST64;
-                 if (name[3] == 'i')
-                   return PRIiLEAST64;
-                 if (name[3] == 'o')
-                   return PRIoLEAST64;
-                 if (name[3] == 'u')
-                   return PRIuLEAST64;
-                 if (name[3] == 'x')
-                   return PRIxLEAST64;
-                 if (name[3] == 'X')
-                   return PRIXLEAST64;
-                 abort ();
-               }
-           }
-         if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S'
-             && name[7] == 'T')
-           {
-             if (name[8] == '8' && name[9] == '\0')
-               {
-                 if (name[3] == 'd')
-                   return PRIdFAST8;
-                 if (name[3] == 'i')
-                   return PRIiFAST8;
-                 if (name[3] == 'o')
-                   return PRIoFAST8;
-                 if (name[3] == 'u')
-                   return PRIuFAST8;
-                 if (name[3] == 'x')
-                   return PRIxFAST8;
-                 if (name[3] == 'X')
-                   return PRIXFAST8;
-                 abort ();
-               }
-             if (name[8] == '1' && name[9] == '6' && name[10] == '\0')
-               {
-                 if (name[3] == 'd')
-                   return PRIdFAST16;
-                 if (name[3] == 'i')
-                   return PRIiFAST16;
-                 if (name[3] == 'o')
-                   return PRIoFAST16;
-                 if (name[3] == 'u')
-                   return PRIuFAST16;
-                 if (name[3] == 'x')
-                   return PRIxFAST16;
-                 if (name[3] == 'X')
-                   return PRIXFAST16;
-                 abort ();
-               }
-             if (name[8] == '3' && name[9] == '2' && name[10] == '\0')
-               {
-                 if (name[3] == 'd')
-                   return PRIdFAST32;
-                 if (name[3] == 'i')
-                   return PRIiFAST32;
-                 if (name[3] == 'o')
-                   return PRIoFAST32;
-                 if (name[3] == 'u')
-                   return PRIuFAST32;
-                 if (name[3] == 'x')
-                   return PRIxFAST32;
-                 if (name[3] == 'X')
-                   return PRIXFAST32;
-                 abort ();
-               }
-             if (name[8] == '6' && name[9] == '4' && name[10] == '\0')
-               {
-                 if (name[3] == 'd')
-                   return PRIdFAST64;
-                 if (name[3] == 'i')
-                   return PRIiFAST64;
-                 if (name[3] == 'o')
-                   return PRIoFAST64;
-                 if (name[3] == 'u')
-                   return PRIuFAST64;
-                 if (name[3] == 'x')
-                   return PRIxFAST64;
-                 if (name[3] == 'X')
-                   return PRIXFAST64;
-                 abort ();
-               }
-           }
-         if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X'
-             && name[7] == '\0')
-           {
-             if (name[3] == 'd')
-               return PRIdMAX;
-             if (name[3] == 'i')
-               return PRIiMAX;
-             if (name[3] == 'o')
-               return PRIoMAX;
-             if (name[3] == 'u')
-               return PRIuMAX;
-             if (name[3] == 'x')
-               return PRIxMAX;
-             if (name[3] == 'X')
-               return PRIXMAX;
-             abort ();
-           }
-         if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R'
-             && name[7] == '\0')
-           {
-             if (name[3] == 'd')
-               return PRIdPTR;
-             if (name[3] == 'i')
-               return PRIiPTR;
-             if (name[3] == 'o')
-               return PRIoPTR;
-             if (name[3] == 'u')
-               return PRIuPTR;
-             if (name[3] == 'x')
-               return PRIxPTR;
-             if (name[3] == 'X')
-               return PRIXPTR;
-             abort ();
-           }
-       }
-    }
-  /* Test for a glibc specific printf() format directive flag.  */
-  if (name[0] == 'I' && name[1] == '\0')
-    {
-#if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
-      /* The 'I' flag, in numeric format directives, replaces ASCII digits
-        with the 'outdigits' defined in the LC_CTYPE locale facet.  This is
-        used for Farsi (Persian) and maybe Arabic.  */
-      return "I";
-#else
-      return "";
-#endif
-    }
-  /* Other system dependent strings are not valid.  */
-  return NULL;
-}
-
-/* Initialize the codeset dependent parts of an opened message catalog.
-   Return the header entry.  */
-const char *
-internal_function
-_nl_init_domain_conv (struct loaded_l10nfile *domain_file,
-                     struct loaded_domain *domain,
-                     struct binding *domainbinding)
-{
-  /* Find out about the character set the file is encoded with.
-     This can be found (in textual form) in the entry "".  If this
-     entry does not exist or if this does not contain the `charset='
-     information, we will assume the charset matches the one the
-     current locale and we don't have to perform any conversion.  */
-  char *nullentry;
-  size_t nullentrylen;
-
-  /* Preinitialize fields, to avoid recursion during _nl_find_msg.  */
-  domain->codeset_cntr =
-    (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
-#ifdef _LIBC
-  domain->conv = (__gconv_t) -1;
-#else
-# if HAVE_ICONV
-  domain->conv = (iconv_t) -1;
-# endif
-#endif
-  domain->conv_tab = NULL;
-
-  /* Get the header entry.  */
-  nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
-
-  if (nullentry != NULL)
-    {
-#if defined _LIBC || HAVE_ICONV
-      const char *charsetstr;
-
-      charsetstr = strstr (nullentry, "charset=");
-      if (charsetstr != NULL)
-       {
-         size_t len;
-         char *charset;
-         const char *outcharset;
-
-         charsetstr += strlen ("charset=");
-         len = strcspn (charsetstr, " \t\n");
-
-         charset = (char *) alloca (len + 1);
-# if defined _LIBC || HAVE_MEMPCPY
-         *((char *) mempcpy (charset, charsetstr, len)) = '\0';
-# else
-         memcpy (charset, charsetstr, len);
-         charset[len] = '\0';
-# endif
-
-         /* The output charset should normally be determined by the
-            locale.  But sometimes the locale is not used or not correctly
-            set up, so we provide a possibility for the user to override
-            this.  Moreover, the value specified through
-            bind_textdomain_codeset overrides both.  */
-         if (domainbinding != NULL && domainbinding->codeset != NULL)
-           outcharset = domainbinding->codeset;
-         else
-           {
-             outcharset = getenv ("OUTPUT_CHARSET");
-             if (outcharset == NULL || outcharset[0] == '\0')
-               {
-# ifdef _LIBC
-                 outcharset = _NL_CURRENT (LC_CTYPE, CODESET);
-# else
-#  if HAVE_ICONV
-                 extern const char *locale_charset (void);
-                 outcharset = locale_charset ();
-#  endif
-# endif
-               }
-           }
-
-# ifdef _LIBC
-         /* We always want to use transliteration.  */
-         outcharset = norm_add_slashes (outcharset, "TRANSLIT");
-         charset = norm_add_slashes (charset, NULL);
-         if (__gconv_open (outcharset, charset, &domain->conv,
-                           GCONV_AVOID_NOCONV)
-             != __GCONV_OK)
-           domain->conv = (__gconv_t) -1;
-# else
-#  if HAVE_ICONV
-         /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5,
-            we want to use transliteration.  */
-#   if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \
-       || _LIBICONV_VERSION >= 0x0105
-         if (strchr (outcharset, '/') == NULL)
-           {
-             char *tmp;
-
-             len = strlen (outcharset);
-             tmp = (char *) alloca (len + 10 + 1);
-             memcpy (tmp, outcharset, len);
-             memcpy (tmp + len, "//TRANSLIT", 10 + 1);
-             outcharset = tmp;
-
-             domain->conv = iconv_open (outcharset, charset);
-
-             freea (outcharset);
-           }
-         else
-#   endif
-           domain->conv = iconv_open (outcharset, charset);
-#  endif
-# endif
-
-         freea (charset);
-       }
-#endif /* _LIBC || HAVE_ICONV */
-    }
-
-  return nullentry;
-}
-
-/* Frees the codeset dependent parts of an opened message catalog.  */
-void
-internal_function
-_nl_free_domain_conv (struct loaded_domain *domain)
-{
-  if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
-    free (domain->conv_tab);
-
-#ifdef _LIBC
-  if (domain->conv != (__gconv_t) -1)
-    __gconv_close (domain->conv);
-#else
-# if HAVE_ICONV
-  if (domain->conv != (iconv_t) -1)
-    iconv_close (domain->conv);
-# endif
-#endif
-}
-
-/* Load the message catalogs specified by FILENAME.  If it is no valid
-   message catalog do nothing.  */
-void
-internal_function
-_nl_load_domain (struct loaded_l10nfile *domain_file,
-                struct binding *domainbinding)
-{
-  int fd;
-  size_t size;
-#ifdef _LIBC
-  struct stat64 st;
-#else
-  struct stat st;
-#endif
-  struct mo_file_header *data = (struct mo_file_header *) -1;
-  int use_mmap = 0;
-  struct loaded_domain *domain;
-  int revision;
-  const char *nullentry;
-
-  domain_file->decided = 1;
-  domain_file->data = NULL;
-
-  /* Note that it would be useless to store domainbinding in domain_file
-     because domainbinding might be == NULL now but != NULL later (after
-     a call to bind_textdomain_codeset).  */
-
-  /* If the record does not represent a valid locale the FILENAME
-     might be NULL.  This can happen when according to the given
-     specification the locale file name is different for XPG and CEN
-     syntax.  */
-  if (domain_file->filename == NULL)
-    return;
-
-  /* Try to open the addressed file.  */
-  fd = open (domain_file->filename, O_RDONLY | O_BINARY);
-  if (fd == -1)
-    return;
-
-  /* We must know about the size of the file.  */
-  if (
-#ifdef _LIBC
-      __builtin_expect (fstat64 (fd, &st) != 0, 0)
-#else
-      __builtin_expect (fstat (fd, &st) != 0, 0)
-#endif
-      || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
-      || __builtin_expect (size < sizeof (struct mo_file_header), 0))
-    {
-      /* Something went wrong.  */
-      close (fd);
-      return;
-    }
-
-#ifdef HAVE_MMAP
-  /* Now we are ready to load the file.  If mmap() is available we try
-     this first.  If not available or it failed we try to load it.  */
-  data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
-                                        MAP_PRIVATE, fd, 0);
-
-  if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
-    {
-      /* mmap() call was successful.  */
-      close (fd);
-      use_mmap = 1;
-    }
-#endif
-
-  /* If the data is not yet available (i.e. mmap'ed) we try to load
-     it manually.  */
-  if (data == (struct mo_file_header *) -1)
-    {
-      size_t to_read;
-      char *read_ptr;
-
-      data = (struct mo_file_header *) malloc (size);
-      if (data == NULL)
-       return;
-
-      to_read = size;
-      read_ptr = (char *) data;
-      do
-       {
-         long int nb = (long int) read (fd, read_ptr, to_read);
-         if (nb <= 0)
-           {
-#ifdef EINTR
-             if (nb == -1 && errno == EINTR)
-               continue;
-#endif
-             close (fd);
-             return;
-           }
-         read_ptr += nb;
-         to_read -= nb;
-       }
-      while (to_read > 0);
-
-      close (fd);
-    }
-
-  /* Using the magic number we can test whether it really is a message
-     catalog file.  */
-  if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
-                       0))
-    {
-      /* The magic number is wrong: not a message catalog file.  */
-#ifdef HAVE_MMAP
-      if (use_mmap)
-       munmap ((void *) data, size);
-      else
-#endif
-       free (data);
-      return;
-    }
-
-  domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
-  if (domain == NULL)
-    return;
-  domain_file->data = domain;
-
-  domain->data = (char *) data;
-  domain->use_mmap = use_mmap;
-  domain->mmap_size = size;
-  domain->must_swap = data->magic != _MAGIC;
-  domain->malloced = NULL;
-
-  /* Fill in the information about the available tables.  */
-  revision = W (domain->must_swap, data->revision);
-  /* We support only the major revisions 0 and 1.  */
-  switch (revision >> 16)
-    {
-    case 0:
-    case 1:
-      domain->nstrings = W (domain->must_swap, data->nstrings);
-      domain->orig_tab = (const struct string_desc *)
-       ((char *) data + W (domain->must_swap, data->orig_tab_offset));
-      domain->trans_tab = (const struct string_desc *)
-       ((char *) data + W (domain->must_swap, data->trans_tab_offset));
-      domain->hash_size = W (domain->must_swap, data->hash_tab_size);
-      domain->hash_tab =
-       (domain->hash_size > 2
-        ? (const nls_uint32 *)
-          ((char *) data + W (domain->must_swap, data->hash_tab_offset))
-        : NULL);
-      domain->must_swap_hash_tab = domain->must_swap;
-
-      /* Now dispatch on the minor revision.  */
-      switch (revision & 0xffff)
-       {
-       case 0:
-         domain->n_sysdep_strings = 0;
-         domain->orig_sysdep_tab = NULL;
-         domain->trans_sysdep_tab = NULL;
-         break;
-       case 1:
-       default:
-         {
-           nls_uint32 n_sysdep_strings;
-
-           if (domain->hash_tab == NULL)
-             /* This is invalid.  These minor revisions need a hash table.  */
-             goto invalid;
-
-           n_sysdep_strings =
-             W (domain->must_swap, data->n_sysdep_strings);
-           if (n_sysdep_strings > 0)
-             {
-               nls_uint32 n_sysdep_segments;
-               const struct sysdep_segment *sysdep_segments;
-               const char **sysdep_segment_values;
-               const nls_uint32 *orig_sysdep_tab;
-               const nls_uint32 *trans_sysdep_tab;
-               nls_uint32 n_inmem_sysdep_strings;
-               size_t memneed;
-               char *mem;
-               struct sysdep_string_desc *inmem_orig_sysdep_tab;
-               struct sysdep_string_desc *inmem_trans_sysdep_tab;
-               nls_uint32 *inmem_hash_tab;
-               unsigned int i, j;
-
-               /* Get the values of the system dependent segments.  */
-               n_sysdep_segments =
-                 W (domain->must_swap, data->n_sysdep_segments);
-               sysdep_segments = (const struct sysdep_segment *)
-                 ((char *) data
-                  + W (domain->must_swap, data->sysdep_segments_offset));
-               sysdep_segment_values =
-                 alloca (n_sysdep_segments * sizeof (const char *));
-               for (i = 0; i < n_sysdep_segments; i++)
-                 {
-                   const char *name =
-                     (char *) data
-                     + W (domain->must_swap, sysdep_segments[i].offset);
-                   nls_uint32 namelen =
-                     W (domain->must_swap, sysdep_segments[i].length);
-
-                   if (!(namelen > 0 && name[namelen - 1] == '\0'))
-                     {
-                       freea (sysdep_segment_values);
-                       goto invalid;
-                     }
-
-                   sysdep_segment_values[i] = get_sysdep_segment_value (name);
-                 }
-
-               orig_sysdep_tab = (const nls_uint32 *)
-                 ((char *) data
-                  + W (domain->must_swap, data->orig_sysdep_tab_offset));
-               trans_sysdep_tab = (const nls_uint32 *)
-                 ((char *) data
-                  + W (domain->must_swap, data->trans_sysdep_tab_offset));
-
-               /* Compute the amount of additional memory needed for the
-                  system dependent strings and the augmented hash table.
-                  At the same time, also drop string pairs which refer to
-                  an undefined system dependent segment.  */
-               n_inmem_sysdep_strings = 0;
-               memneed = domain->hash_size * sizeof (nls_uint32);
-               for (i = 0; i < n_sysdep_strings; i++)
-                 {
-                   int valid = 1;
-                   size_t needs[2];
-
-                   for (j = 0; j < 2; j++)
-                     {
-                       const struct sysdep_string *sysdep_string =
-                         (const struct sysdep_string *)
-                         ((char *) data
-                          + W (domain->must_swap,
-                               j == 0
-                               ? orig_sysdep_tab[i]
-                               : trans_sysdep_tab[i]));
-                       size_t need = 0;
-                       const struct segment_pair *p = sysdep_string->segments;
-
-                       if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END)
-                         for (p = sysdep_string->segments;; p++)
-                           {
-                             nls_uint32 sysdepref;
-
-                             need += W (domain->must_swap, p->segsize);
-
-                             sysdepref = W (domain->must_swap, p->sysdepref);
-                             if (sysdepref == SEGMENTS_END)
-                               break;
-
-                             if (sysdepref >= n_sysdep_segments)
-                               {
-                                 /* Invalid.  */
-                                 freea (sysdep_segment_values);
-                                 goto invalid;
-                               }
-
-                             if (sysdep_segment_values[sysdepref] == NULL)
-                               {
-                                 /* This particular string pair is invalid.  */
-                                 valid = 0;
-                                 break;
-                               }
-
-                             need += strlen (sysdep_segment_values[sysdepref]);
-                           }
-
-                       needs[j] = need;
-                       if (!valid)
-                         break;
-                     }
-
-                   if (valid)
-                     {
-                       n_inmem_sysdep_strings++;
-                       memneed += needs[0] + needs[1];
-                     }
-                 }
-               memneed += 2 * n_inmem_sysdep_strings
-                          * sizeof (struct sysdep_string_desc);
-
-               if (n_inmem_sysdep_strings > 0)
-                 {
-                   unsigned int k;
-
-                   /* Allocate additional memory.  */
-                   mem = (char *) malloc (memneed);
-                   if (mem == NULL)
-                     goto invalid;
-
-                   domain->malloced = mem;
-                   inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem;
-                   mem += n_inmem_sysdep_strings
-                          * sizeof (struct sysdep_string_desc);
-                   inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem;
-                   mem += n_inmem_sysdep_strings
-                          * sizeof (struct sysdep_string_desc);
-                   inmem_hash_tab = (nls_uint32 *) mem;
-                   mem += domain->hash_size * sizeof (nls_uint32);
-
-                   /* Compute the system dependent strings.  */
-                   k = 0;
-                   for (i = 0; i < n_sysdep_strings; i++)
-                     {
-                       int valid = 1;
-
-                       for (j = 0; j < 2; j++)
-                         {
-                           const struct sysdep_string *sysdep_string =
-                             (const struct sysdep_string *)
-                             ((char *) data
-                              + W (domain->must_swap,
-                                   j == 0
-                                   ? orig_sysdep_tab[i]
-                                   : trans_sysdep_tab[i]));
-                           const struct segment_pair *p =
-                             sysdep_string->segments;
-
-                           if (W (domain->must_swap, p->sysdepref)
-                               != SEGMENTS_END)
-                             for (p = sysdep_string->segments;; p++)
-                               {
-                                 nls_uint32 sysdepref;
-
-                                 sysdepref =
-                                   W (domain->must_swap, p->sysdepref);
-                                 if (sysdepref == SEGMENTS_END)
-                                   break;
-
-                                 if (sysdep_segment_values[sysdepref] == NULL)
-                                   {
-                                     /* This particular string pair is
-                                        invalid.  */
-                                     valid = 0;
-                                     break;
-                                   }
-                               }
-
-                           if (!valid)
-                             break;
-                         }
-
-                       if (valid)
-                         {
-                           for (j = 0; j < 2; j++)
-                             {
-                               const struct sysdep_string *sysdep_string =
-                                 (const struct sysdep_string *)
-                                 ((char *) data
-                                  + W (domain->must_swap,
-                                       j == 0
-                                       ? orig_sysdep_tab[i]
-                                       : trans_sysdep_tab[i]));
-                               const char *static_segments =
-                                 (char *) data
-                                 + W (domain->must_swap, sysdep_string->offset);
-                               const struct segment_pair *p =
-                                 sysdep_string->segments;
-
-                               /* Concatenate the segments, and fill
-                                  inmem_orig_sysdep_tab[k] (for j == 0) and
-                                  inmem_trans_sysdep_tab[k] (for j == 1).  */
-
-                               struct sysdep_string_desc *inmem_tab_entry =
-                                 (j == 0
-                                  ? inmem_orig_sysdep_tab
-                                  : inmem_trans_sysdep_tab)
-                                 + k;
-
-                               if (W (domain->must_swap, p->sysdepref)
-                                   == SEGMENTS_END)
-                                 {
-                                   /* Only one static segment.  */
-                                   inmem_tab_entry->length =
-                                     W (domain->must_swap, p->segsize);
-                                   inmem_tab_entry->pointer = static_segments;
-                                 }
-                               else
-                                 {
-                                   inmem_tab_entry->pointer = mem;
-
-                                   for (p = sysdep_string->segments;; p++)
-                                     {
-                                       nls_uint32 segsize =
-                                         W (domain->must_swap, p->segsize);
-                                       nls_uint32 sysdepref =
-                                         W (domain->must_swap, p->sysdepref);
-                                       size_t n;
-
-                                       if (segsize > 0)
-                                         {
-                                           memcpy (mem, static_segments, segsize);
-                                           mem += segsize;
-                                           static_segments += segsize;
-                                         }
-
-                                       if (sysdepref == SEGMENTS_END)
-                                         break;
-
-                                       n = strlen (sysdep_segment_values[sysdepref]);
-                                       memcpy (mem, sysdep_segment_values[sysdepref], n);
-                                       mem += n;
-                                     }
-
-                                   inmem_tab_entry->length =
-                                     mem - inmem_tab_entry->pointer;
-                                 }
-                             }
-
-                           k++;
-                         }
-                     }
-                   if (k != n_inmem_sysdep_strings)
-                     abort ();
-
-                   /* Compute the augmented hash table.  */
-                   for (i = 0; i < domain->hash_size; i++)
-                     inmem_hash_tab[i] =
-                       W (domain->must_swap_hash_tab, domain->hash_tab[i]);
-                   for (i = 0; i < n_inmem_sysdep_strings; i++)
-                     {
-                       const char *msgid = inmem_orig_sysdep_tab[i].pointer;
-                       nls_uint32 hash_val = hash_string (msgid);
-                       nls_uint32 idx = hash_val % domain->hash_size;
-                       nls_uint32 incr =
-                         1 + (hash_val % (domain->hash_size - 2));
-
-                       for (;;)
-                         {
-                           if (inmem_hash_tab[idx] == 0)
-                             {
-                               /* Hash table entry is empty.  Use it.  */
-                               inmem_hash_tab[idx] = 1 + domain->nstrings + i;
-                               break;
-                             }
-
-                           if (idx >= domain->hash_size - incr)
-                             idx -= domain->hash_size - incr;
-                           else
-                             idx += incr;
-                         }
-                     }
-
-                   domain->n_sysdep_strings = n_inmem_sysdep_strings;
-                   domain->orig_sysdep_tab = inmem_orig_sysdep_tab;
-                   domain->trans_sysdep_tab = inmem_trans_sysdep_tab;
-
-                   domain->hash_tab = inmem_hash_tab;
-                   domain->must_swap_hash_tab = 0;
-                 }
-               else
-                 {
-                   domain->n_sysdep_strings = 0;
-                   domain->orig_sysdep_tab = NULL;
-                   domain->trans_sysdep_tab = NULL;
-                 }
-
-               freea (sysdep_segment_values);
-             }
-           else
-             {
-               domain->n_sysdep_strings = 0;
-               domain->orig_sysdep_tab = NULL;
-               domain->trans_sysdep_tab = NULL;
-             }
-         }
-         break;
-       }
-      break;
-    default:
-      /* This is an invalid revision.  */
-    invalid:
-      /* This is an invalid .mo file.  */
-      free (domain->malloced);
-#ifdef HAVE_MMAP
-      if (use_mmap)
-       munmap ((void *) data, size);
-      else
-#endif
-       free (data);
-      free (domain);
-      domain_file->data = NULL;
-      return;
-    }
-
-  /* Now initialize the character set converter from the character set
-     the file is encoded with (found in the header entry) to the domain's
-     specified character set or the locale's character set.  */
-  nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
-
-  /* Also look for a plural specification.  */
-  EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals);
-}
-
-
-#ifdef _LIBC
-void
-internal_function
-_nl_unload_domain (struct loaded_domain *domain)
-{
-  if (domain->plural != &__gettext_germanic_plural)
-    __gettext_free_exp (domain->plural);
-
-  _nl_free_domain_conv (domain);
-
-  free (domain->malloced);
-
-# ifdef _POSIX_MAPPED_FILES
-  if (domain->use_mmap)
-    munmap ((void *) domain->data, domain->mmap_size);
-  else
-# endif        /* _POSIX_MAPPED_FILES */
-    free ((void *) domain->data);
-
-  free (domain);
-}
-#endif
diff --git a/intl/localcharset.c b/intl/localcharset.c
deleted file mode 100644 (file)
index a3e3a9b..0000000
+++ /dev/null
@@ -1,397 +0,0 @@
-/* Determine a canonical name for the current locale's character encoding.
-
-   Copyright (C) 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* Written by Bruno Haible <bruno@clisp.org>.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* Specification.  */
-#include "localcharset.h"
-
-#if HAVE_STDDEF_H
-# include <stddef.h>
-#endif
-
-#include <stdio.h>
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-#if defined _WIN32 || defined __WIN32__
-# undef WIN32   /* avoid warning on mingw32 */
-# define WIN32
-#endif
-
-#if defined __EMX__
-/* Assume EMX program runs on OS/2, even if compiled under DOS.  */
-# define OS2
-#endif
-
-#if !defined WIN32
-# if HAVE_LANGINFO_CODESET
-#  include <langinfo.h>
-# else
-#  if HAVE_SETLOCALE
-#   include <locale.h>
-#  endif
-# endif
-#elif defined WIN32
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-#if defined OS2
-# define INCL_DOS
-# include <os2.h>
-#endif
-
-#if ENABLE_RELOCATABLE
-# include "relocatable.h"
-#else
-# define relocate(pathname) (pathname)
-#endif
-
-#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
-  /* Win32, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-#endif
-
-#ifndef DIRECTORY_SEPARATOR
-# define DIRECTORY_SEPARATOR '/'
-#endif
-
-#ifndef ISSLASH
-# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
-#endif
-
-#if HAVE_DECL_GETC_UNLOCKED
-# undef getc
-# define getc getc_unlocked
-#endif
-
-/* The following static variable is declared 'volatile' to avoid a
-   possible multithread problem in the function get_charset_aliases. If we
-   are running in a threaded environment, and if two threads initialize
-   'charset_aliases' simultaneously, both will produce the same value,
-   and everything will be ok if the two assignments to 'charset_aliases'
-   are atomic. But I don't know what will happen if the two assignments mix.  */
-#if __STDC__ != 1
-# define volatile /* empty */
-#endif
-/* Pointer to the contents of the charset.alias file, if it has already been
-   read, else NULL.  Its format is:
-   ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0'  */
-static const char * volatile charset_aliases;
-
-/* Return a pointer to the contents of the charset.alias file.  */
-static const char *
-get_charset_aliases ()
-{
-  const char *cp;
-
-  cp = charset_aliases;
-  if (cp == NULL)
-    {
-#if !(defined VMS || defined WIN32)
-      FILE *fp;
-      const char *dir = relocate (LIBDIR);
-      const char *base = "charset.alias";
-      char *file_name;
-
-      /* Concatenate dir and base into freshly allocated file_name.  */
-      {
-       size_t dir_len = strlen (dir);
-       size_t base_len = strlen (base);
-       int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
-       file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
-       if (file_name != NULL)
-         {
-           memcpy (file_name, dir, dir_len);
-           if (add_slash)
-             file_name[dir_len] = DIRECTORY_SEPARATOR;
-           memcpy (file_name + dir_len + add_slash, base, base_len + 1);
-         }
-      }
-
-      if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
-       /* Out of memory or file not found, treat it as empty.  */
-       cp = "";
-      else
-       {
-         /* Parse the file's contents.  */
-         int c;
-         char buf1[50+1];
-         char buf2[50+1];
-         char *res_ptr = NULL;
-         size_t res_size = 0;
-         size_t l1, l2;
-
-         for (;;)
-           {
-             c = getc (fp);
-             if (c == EOF)
-               break;
-             if (c == '\n' || c == ' ' || c == '\t')
-               continue;
-             if (c == '#')
-               {
-                 /* Skip comment, to end of line.  */
-                 do
-                   c = getc (fp);
-                 while (!(c == EOF || c == '\n'));
-                 if (c == EOF)
-                   break;
-                 continue;
-               }
-             ungetc (c, fp);
-             if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
-               break;
-             l1 = strlen (buf1);
-             l2 = strlen (buf2);
-             if (res_size == 0)
-               {
-                 res_size = l1 + 1 + l2 + 1;
-                 res_ptr = (char *) malloc (res_size + 1);
-               }
-             else
-               {
-                 res_size += l1 + 1 + l2 + 1;
-                 res_ptr = (char *) realloc (res_ptr, res_size + 1);
-               }
-             if (res_ptr == NULL)
-               {
-                 /* Out of memory. */
-                 res_size = 0;
-                 break;
-               }
-             strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
-             strcpy (res_ptr + res_size - (l2 + 1), buf2);
-           }
-         fclose (fp);
-         if (res_size == 0)
-           cp = "";
-         else
-           {
-             *(res_ptr + res_size) = '\0';
-             cp = res_ptr;
-           }
-       }
-
-      free (file_name);
-
-#else
-
-# if defined VMS
-      /* To avoid the troubles of an extra file charset.alias_vms in the
-        sources of many GNU packages, simply inline the aliases here.  */
-      /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
-        "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
-        section 10.7 "Handling Different Character Sets".  */
-      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
-          "ISO8859-2" "\0" "ISO-8859-2" "\0"
-          "ISO8859-5" "\0" "ISO-8859-5" "\0"
-          "ISO8859-7" "\0" "ISO-8859-7" "\0"
-          "ISO8859-8" "\0" "ISO-8859-8" "\0"
-          "ISO8859-9" "\0" "ISO-8859-9" "\0"
-          /* Japanese */
-          "eucJP" "\0" "EUC-JP" "\0"
-          "SJIS" "\0" "SHIFT_JIS" "\0"
-          "DECKANJI" "\0" "DEC-KANJI" "\0"
-          "SDECKANJI" "\0" "EUC-JP" "\0"
-          /* Chinese */
-          "eucTW" "\0" "EUC-TW" "\0"
-          "DECHANYU" "\0" "DEC-HANYU" "\0"
-          "DECHANZI" "\0" "GB2312" "\0"
-          /* Korean */
-          "DECKOREAN" "\0" "EUC-KR" "\0";
-# endif
-
-# if defined WIN32
-      /* To avoid the troubles of installing a separate file in the same
-        directory as the DLL and of retrieving the DLL's directory at
-        runtime, simply inline the aliases here.  */
-
-      cp = "CP936" "\0" "GBK" "\0"
-          "CP1361" "\0" "JOHAB" "\0"
-          "CP20127" "\0" "ASCII" "\0"
-          "CP20866" "\0" "KOI8-R" "\0"
-          "CP21866" "\0" "KOI8-RU" "\0"
-          "CP28591" "\0" "ISO-8859-1" "\0"
-          "CP28592" "\0" "ISO-8859-2" "\0"
-          "CP28593" "\0" "ISO-8859-3" "\0"
-          "CP28594" "\0" "ISO-8859-4" "\0"
-          "CP28595" "\0" "ISO-8859-5" "\0"
-          "CP28596" "\0" "ISO-8859-6" "\0"
-          "CP28597" "\0" "ISO-8859-7" "\0"
-          "CP28598" "\0" "ISO-8859-8" "\0"
-          "CP28599" "\0" "ISO-8859-9" "\0"
-          "CP28605" "\0" "ISO-8859-15" "\0";
-# endif
-#endif
-
-      charset_aliases = cp;
-    }
-
-  return cp;
-}
-
-/* Determine the current locale's character encoding, and canonicalize it
-   into one of the canonical names listed in config.charset.
-   The result must not be freed; it is statically allocated.
-   If the canonical name cannot be determined, the result is a non-canonical
-   name.  */
-
-#ifdef STATIC
-STATIC
-#endif
-const char *
-locale_charset ()
-{
-  const char *codeset;
-  const char *aliases;
-
-#if !(defined WIN32 || defined OS2)
-
-# if HAVE_LANGINFO_CODESET
-
-  /* Most systems support nl_langinfo (CODESET) nowadays.  */
-  codeset = nl_langinfo (CODESET);
-
-# else
-
-  /* On old systems which lack it, use setlocale or getenv.  */
-  const char *locale = NULL;
-
-  /* But most old systems don't have a complete set of locales.  Some
-     (like SunOS 4 or DJGPP) have only the C locale.  Therefore we don't
-     use setlocale here; it would return "C" when it doesn't support the
-     locale name the user has set.  */
-#  if HAVE_SETLOCALE && 0
-  locale = setlocale (LC_CTYPE, NULL);
-#  endif
-  if (locale == NULL || locale[0] == '\0')
-    {
-      locale = getenv ("LC_ALL");
-      if (locale == NULL || locale[0] == '\0')
-       {
-         locale = getenv ("LC_CTYPE");
-         if (locale == NULL || locale[0] == '\0')
-           locale = getenv ("LANG");
-       }
-    }
-
-  /* On some old systems, one used to set locale = "iso8859_1". On others,
-     you set it to "language_COUNTRY.charset". In any case, we resolve it
-     through the charset.alias file.  */
-  codeset = locale;
-
-# endif
-
-#elif defined WIN32
-
-  static char buf[2 + 10 + 1];
-
-  /* Woe32 has a function returning the locale's codepage as a number.  */
-  sprintf (buf, "CP%u", GetACP ());
-  codeset = buf;
-
-#elif defined OS2
-
-  const char *locale;
-  static char buf[2 + 10 + 1];
-  ULONG cp[3];
-  ULONG cplen;
-
-  /* Allow user to override the codeset, as set in the operating system,
-     with standard language environment variables.  */
-  locale = getenv ("LC_ALL");
-  if (locale == NULL || locale[0] == '\0')
-    {
-      locale = getenv ("LC_CTYPE");
-      if (locale == NULL || locale[0] == '\0')
-       locale = getenv ("LANG");
-    }
-  if (locale != NULL && locale[0] != '\0')
-    {
-      /* If the locale name contains an encoding after the dot, return it.  */
-      const char *dot = strchr (locale, '.');
-
-      if (dot != NULL)
-       {
-         const char *modifier;
-
-         dot++;
-         /* Look for the possible @... trailer and remove it, if any.  */
-         modifier = strchr (dot, '@');
-         if (modifier == NULL)
-           return dot;
-         if (modifier - dot < sizeof (buf))
-           {
-             memcpy (buf, dot, modifier - dot);
-             buf [modifier - dot] = '\0';
-             return buf;
-           }
-       }
-
-      /* Resolve through the charset.alias file.  */
-      codeset = locale;
-    }
-  else
-    {
-      /* OS/2 has a function returning the locale's codepage as a number.  */
-      if (DosQueryCp (sizeof (cp), cp, &cplen))
-       codeset = "";
-      else
-       {
-         sprintf (buf, "CP%u", cp[0]);
-         codeset = buf;
-       }
-    }
-
-#endif
-
-  if (codeset == NULL)
-    /* The canonical name cannot be determined.  */
-    codeset = "";
-
-  /* Resolve alias. */
-  for (aliases = get_charset_aliases ();
-       *aliases != '\0';
-       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
-    if (strcmp (codeset, aliases) == 0
-       || (aliases[0] == '*' && aliases[1] == '\0'))
-      {
-       codeset = aliases + strlen (aliases) + 1;
-       break;
-      }
-
-  /* Don't return an empty string.  GNU libc and GNU libiconv interpret
-     the empty string as denoting "the locale's character encoding",
-     thus GNU libiconv would call this function a second time.  */
-  if (codeset[0] == '\0')
-    codeset = "ASCII";
-
-  return codeset;
-}
diff --git a/intl/localcharset.h b/intl/localcharset.h
deleted file mode 100644 (file)
index 3b137e7..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Determine a canonical name for the current locale's character encoding.
-   Copyright (C) 2000-2003 Free Software Foundation, Inc.
-   This file is part of the GNU CHARSET Library.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _LOCALCHARSET_H
-#define _LOCALCHARSET_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Determine the current locale's character encoding, and canonicalize it
-   into one of the canonical names listed in config.charset.
-   The result must not be freed; it is statically allocated.
-   If the canonical name cannot be determined, the result is a non-canonical
-   name.  */
-extern const char * locale_charset (void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _LOCALCHARSET_H */
diff --git a/intl/locale.alias b/intl/locale.alias
deleted file mode 100644 (file)
index bd6bb25..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-# Locale name alias data base.
-# Copyright (C) 1996-2001,2003 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, 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
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
-
-# The format of this file is the same as for the corresponding file of
-# the X Window System, which normally can be found in
-#      /usr/lib/X11/locale/locale.alias
-# A single line contains two fields: an alias and a substitution value.
-# All entries are case independent.
-
-# Note: This file is far from being complete.  If you have a value for
-# your own site which you think might be useful for others too, share
-# it with the rest of us.  Send it using the `glibcbug' script to
-# bugs@gnu.org.
-
-# Packages using this file: 
-
-bokmal         nb_NO.ISO-8859-1
-bokmål         nb_NO.ISO-8859-1
-catalan                ca_ES.ISO-8859-1
-croatian       hr_HR.ISO-8859-2
-czech          cs_CZ.ISO-8859-2
-danish          da_DK.ISO-8859-1
-dansk          da_DK.ISO-8859-1
-deutsch                de_DE.ISO-8859-1
-dutch          nl_NL.ISO-8859-1
-eesti          et_EE.ISO-8859-1
-estonian       et_EE.ISO-8859-1
-finnish         fi_FI.ISO-8859-1
-français       fr_FR.ISO-8859-1
-french         fr_FR.ISO-8859-1
-galego         gl_ES.ISO-8859-1
-galician       gl_ES.ISO-8859-1
-german         de_DE.ISO-8859-1
-greek           el_GR.ISO-8859-7
-hebrew          he_IL.ISO-8859-8
-hrvatski       hr_HR.ISO-8859-2
-hungarian       hu_HU.ISO-8859-2
-icelandic       is_IS.ISO-8859-1
-italian         it_IT.ISO-8859-1
-japanese       ja_JP.eucJP
-japanese.euc   ja_JP.eucJP
-ja_JP          ja_JP.eucJP
-ja_JP.ujis     ja_JP.eucJP
-japanese.sjis  ja_JP.SJIS
-korean         ko_KR.eucKR
-korean.euc     ko_KR.eucKR
-ko_KR          ko_KR.eucKR
-lithuanian      lt_LT.ISO-8859-13
-no_NO          nb_NO.ISO-8859-1
-no_NO.ISO-8859-1 nb_NO.ISO-8859-1
-norwegian       nb_NO.ISO-8859-1
-nynorsk                nn_NO.ISO-8859-1
-polish          pl_PL.ISO-8859-2
-portuguese      pt_PT.ISO-8859-1
-romanian        ro_RO.ISO-8859-2
-russian         ru_RU.ISO-8859-5
-slovak          sk_SK.ISO-8859-2
-slovene         sl_SI.ISO-8859-2
-slovenian       sl_SI.ISO-8859-2
-spanish         es_ES.ISO-8859-1
-swedish         sv_SE.ISO-8859-1
-thai           th_TH.TIS-620
-turkish         tr_TR.ISO-8859-9
diff --git a/intl/localealias.c b/intl/localealias.c
deleted file mode 100644 (file)
index 2eaf881..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-/* Handle aliases for locale names.
-   Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* Tell glibc's <string.h> to provide a prototype for mempcpy().
-   This must come before <config.h> because <config.h> may include
-   <features.h>, and once <features.h> has been included, it's too late.  */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE    1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <stdio.h>
-#if defined _LIBC || defined HAVE___FSETLOCKING
-# include <stdio_ext.h>
-#endif
-#include <sys/types.h>
-
-#ifdef __GNUC__
-# undef alloca
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# ifdef _MSC_VER
-#  include <malloc.h>
-#  define alloca _alloca
-# else
-#  if defined HAVE_ALLOCA_H || defined _LIBC
-#   include <alloca.h>
-#  else
-#   ifdef _AIX
- #pragma alloca
-#   else
-#    ifndef alloca
-char *alloca ();
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "gettextP.h"
-
-#if ENABLE_RELOCATABLE
-# include "relocatable.h"
-#else
-# define relocate(pathname) (pathname)
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ANSI C functions.  This is required by the standard
-   because some ANSI C functions will require linking with this object
-   file and the name space must not be polluted.  */
-# define strcasecmp __strcasecmp
-
-# ifndef mempcpy
-#  define mempcpy __mempcpy
-# endif
-# define HAVE_MEMPCPY  1
-# define HAVE___FSETLOCKING    1
-
-/* We need locking here since we can be called from different places.  */
-# include <bits/libc-lock.h>
-
-__libc_lock_define_initialized (static, lock);
-#endif
-
-#ifndef internal_function
-# define internal_function
-#endif
-
-/* Some optimizations for glibc.  */
-#ifdef _LIBC
-# define FEOF(fp)              feof_unlocked (fp)
-# define FGETS(buf, n, fp)     fgets_unlocked (buf, n, fp)
-#else
-# define FEOF(fp)              feof (fp)
-# define FGETS(buf, n, fp)     fgets (buf, n, fp)
-#endif
-
-/* For those losing systems which don't have `alloca' we have to add
-   some additional code emulating it.  */
-#ifdef HAVE_ALLOCA
-# define freea(p) /* nothing */
-#else
-# define alloca(n) malloc (n)
-# define freea(p) free (p)
-#endif
-
-#if defined _LIBC_REENTRANT || HAVE_DECL_FGETS_UNLOCKED
-# undef fgets
-# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
-#endif
-#if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED
-# undef feof
-# define feof(s) feof_unlocked (s)
-#endif
-
-
-struct alias_map
-{
-  const char *alias;
-  const char *value;
-};
-
-
-#ifndef _LIBC
-# define libc_freeres_ptr(decl) decl
-#endif
-
-libc_freeres_ptr (static char *string_space);
-static size_t string_space_act;
-static size_t string_space_max;
-libc_freeres_ptr (static struct alias_map *map);
-static size_t nmap;
-static size_t maxmap;
-
-
-/* Prototypes for local functions.  */
-static size_t read_alias_file (const char *fname, int fname_len)
-     internal_function;
-static int extend_alias_table (void);
-static int alias_compare (const struct alias_map *map1,
-                         const struct alias_map *map2);
-
-
-const char *
-_nl_expand_alias (const char *name)
-{
-  static const char *locale_alias_path;
-  struct alias_map *retval;
-  const char *result = NULL;
-  size_t added;
-
-#ifdef _LIBC
-  __libc_lock_lock (lock);
-#endif
-
-  if (locale_alias_path == NULL)
-    locale_alias_path = LOCALE_ALIAS_PATH;
-
-  do
-    {
-      struct alias_map item;
-
-      item.alias = name;
-
-      if (nmap > 0)
-       retval = (struct alias_map *) bsearch (&item, map, nmap,
-                                              sizeof (struct alias_map),
-                                              (int (*) (const void *,
-                                                        const void *)
-                                               ) alias_compare);
-      else
-       retval = NULL;
-
-      /* We really found an alias.  Return the value.  */
-      if (retval != NULL)
-       {
-         result = retval->value;
-         break;
-       }
-
-      /* Perhaps we can find another alias file.  */
-      added = 0;
-      while (added == 0 && locale_alias_path[0] != '\0')
-       {
-         const char *start;
-
-         while (locale_alias_path[0] == PATH_SEPARATOR)
-           ++locale_alias_path;
-         start = locale_alias_path;
-
-         while (locale_alias_path[0] != '\0'
-                && locale_alias_path[0] != PATH_SEPARATOR)
-           ++locale_alias_path;
-
-         if (start < locale_alias_path)
-           added = read_alias_file (start, locale_alias_path - start);
-       }
-    }
-  while (added != 0);
-
-#ifdef _LIBC
-  __libc_lock_unlock (lock);
-#endif
-
-  return result;
-}
-
-
-static size_t
-internal_function
-read_alias_file (const char *fname, int fname_len)
-{
-  FILE *fp;
-  char *full_fname;
-  size_t added;
-  static const char aliasfile[] = "/locale.alias";
-
-  full_fname = (char *) alloca (fname_len + sizeof aliasfile);
-#ifdef HAVE_MEMPCPY
-  mempcpy (mempcpy (full_fname, fname, fname_len),
-          aliasfile, sizeof aliasfile);
-#else
-  memcpy (full_fname, fname, fname_len);
-  memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
-#endif
-
-  fp = fopen (relocate (full_fname), "r");
-  freea (full_fname);
-  if (fp == NULL)
-    return 0;
-
-#ifdef HAVE___FSETLOCKING
-  /* No threads present.  */
-  __fsetlocking (fp, FSETLOCKING_BYCALLER);
-#endif
-
-  added = 0;
-  while (!FEOF (fp))
-    {
-      /* It is a reasonable approach to use a fix buffer here because
-        a) we are only interested in the first two fields
-        b) these fields must be usable as file names and so must not
-           be that long
-        We avoid a multi-kilobyte buffer here since this would use up
-        stack space which we might not have if the program ran out of
-        memory.  */
-      char buf[400];
-      char *alias;
-      char *value;
-      char *cp;
-
-      if (FGETS (buf, sizeof buf, fp) == NULL)
-       /* EOF reached.  */
-       break;
-
-      cp = buf;
-      /* Ignore leading white space.  */
-      while (isspace ((unsigned char) cp[0]))
-       ++cp;
-
-      /* A leading '#' signals a comment line.  */
-      if (cp[0] != '\0' && cp[0] != '#')
-       {
-         alias = cp++;
-         while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
-           ++cp;
-         /* Terminate alias name.  */
-         if (cp[0] != '\0')
-           *cp++ = '\0';
-
-         /* Now look for the beginning of the value.  */
-         while (isspace ((unsigned char) cp[0]))
-           ++cp;
-
-         if (cp[0] != '\0')
-           {
-             size_t alias_len;
-             size_t value_len;
-
-             value = cp++;
-             while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
-               ++cp;
-             /* Terminate value.  */
-             if (cp[0] == '\n')
-               {
-                 /* This has to be done to make the following test
-                    for the end of line possible.  We are looking for
-                    the terminating '\n' which do not overwrite here.  */
-                 *cp++ = '\0';
-                 *cp = '\n';
-               }
-             else if (cp[0] != '\0')
-               *cp++ = '\0';
-
-             if (nmap >= maxmap)
-               if (__builtin_expect (extend_alias_table (), 0))
-                 return added;
-
-             alias_len = strlen (alias) + 1;
-             value_len = strlen (value) + 1;
-
-             if (string_space_act + alias_len + value_len > string_space_max)
-               {
-                 /* Increase size of memory pool.  */
-                 size_t new_size = (string_space_max
-                                    + (alias_len + value_len > 1024
-                                       ? alias_len + value_len : 1024));
-                 char *new_pool = (char *) realloc (string_space, new_size);
-                 if (new_pool == NULL)
-                   return added;
-
-                 if (__builtin_expect (string_space != new_pool, 0))
-                   {
-                     size_t i;
-
-                     for (i = 0; i < nmap; i++)
-                       {
-                         map[i].alias += new_pool - string_space;
-                         map[i].value += new_pool - string_space;
-                       }
-                   }
-
-                 string_space = new_pool;
-                 string_space_max = new_size;
-               }
-
-             map[nmap].alias = memcpy (&string_space[string_space_act],
-                                       alias, alias_len);
-             string_space_act += alias_len;
-
-             map[nmap].value = memcpy (&string_space[string_space_act],
-                                       value, value_len);
-             string_space_act += value_len;
-
-             ++nmap;
-             ++added;
-           }
-       }
-
-      /* Possibly not the whole line fits into the buffer.  Ignore
-        the rest of the line.  */
-      while (strchr (buf, '\n') == NULL)
-       if (FGETS (buf, sizeof buf, fp) == NULL)
-         /* Make sure the inner loop will be left.  The outer loop
-            will exit at the `feof' test.  */
-         break;
-    }
-
-  /* Should we test for ferror()?  I think we have to silently ignore
-     errors.  --drepper  */
-  fclose (fp);
-
-  if (added > 0)
-    qsort (map, nmap, sizeof (struct alias_map),
-          (int (*) (const void *, const void *)) alias_compare);
-
-  return added;
-}
-
-
-static int
-extend_alias_table ()
-{
-  size_t new_size;
-  struct alias_map *new_map;
-
-  new_size = maxmap == 0 ? 100 : 2 * maxmap;
-  new_map = (struct alias_map *) realloc (map, (new_size
-                                               * sizeof (struct alias_map)));
-  if (new_map == NULL)
-    /* Simply don't extend: we don't have any more core.  */
-    return -1;
-
-  map = new_map;
-  maxmap = new_size;
-  return 0;
-}
-
-
-static int
-alias_compare (const struct alias_map *map1, const struct alias_map *map2)
-{
-#if defined _LIBC || defined HAVE_STRCASECMP
-  return strcasecmp (map1->alias, map2->alias);
-#else
-  const unsigned char *p1 = (const unsigned char *) map1->alias;
-  const unsigned char *p2 = (const unsigned char *) map2->alias;
-  unsigned char c1, c2;
-
-  if (p1 == p2)
-    return 0;
-
-  do
-    {
-      /* I know this seems to be odd but the tolower() function in
-        some systems libc cannot handle nonalpha characters.  */
-      c1 = isupper (*p1) ? tolower (*p1) : *p1;
-      c2 = isupper (*p2) ? tolower (*p2) : *p2;
-      if (c1 == '\0')
-       break;
-      ++p1;
-      ++p2;
-    }
-  while (c1 == c2);
-
-  return c1 - c2;
-#endif
-}
diff --git a/intl/localename.c b/intl/localename.c
deleted file mode 100644 (file)
index 5662e54..0000000
+++ /dev/null
@@ -1,1142 +0,0 @@
-/* Determine the current selected locale.
-   Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* Written by Ulrich Drepper <drepper@gnu.org>, 1995.  */
-/* Win32 code written by Tor Lillqvist <tml@iki.fi>.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <locale.h>
-
-#if defined _WIN32 || defined __WIN32__
-# undef WIN32   /* avoid warning on mingw32 */
-# define WIN32
-#endif
-
-#ifdef WIN32
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-/* List of language codes, sorted by value:
-   0x01 LANG_ARABIC
-   0x02 LANG_BULGARIAN
-   0x03 LANG_CATALAN
-   0x04 LANG_CHINESE
-   0x05 LANG_CZECH
-   0x06 LANG_DANISH
-   0x07 LANG_GERMAN
-   0x08 LANG_GREEK
-   0x09 LANG_ENGLISH
-   0x0a LANG_SPANISH
-   0x0b LANG_FINNISH
-   0x0c LANG_FRENCH
-   0x0d LANG_HEBREW
-   0x0e LANG_HUNGARIAN
-   0x0f LANG_ICELANDIC
-   0x10 LANG_ITALIAN
-   0x11 LANG_JAPANESE
-   0x12 LANG_KOREAN
-   0x13 LANG_DUTCH
-   0x14 LANG_NORWEGIAN
-   0x15 LANG_POLISH
-   0x16 LANG_PORTUGUESE
-   0x17 LANG_RHAETO_ROMANCE
-   0x18 LANG_ROMANIAN
-   0x19 LANG_RUSSIAN
-   0x1a LANG_CROATIAN == LANG_SERBIAN
-   0x1b LANG_SLOVAK
-   0x1c LANG_ALBANIAN
-   0x1d LANG_SWEDISH
-   0x1e LANG_THAI
-   0x1f LANG_TURKISH
-   0x20 LANG_URDU
-   0x21 LANG_INDONESIAN
-   0x22 LANG_UKRAINIAN
-   0x23 LANG_BELARUSIAN
-   0x24 LANG_SLOVENIAN
-   0x25 LANG_ESTONIAN
-   0x26 LANG_LATVIAN
-   0x27 LANG_LITHUANIAN
-   0x28 LANG_TAJIK
-   0x29 LANG_FARSI
-   0x2a LANG_VIETNAMESE
-   0x2b LANG_ARMENIAN
-   0x2c LANG_AZERI
-   0x2d LANG_BASQUE
-   0x2e LANG_SORBIAN
-   0x2f LANG_MACEDONIAN
-   0x30 LANG_SUTU
-   0x31 LANG_TSONGA
-   0x32 LANG_TSWANA
-   0x33 LANG_VENDA
-   0x34 LANG_XHOSA
-   0x35 LANG_ZULU
-   0x36 LANG_AFRIKAANS
-   0x37 LANG_GEORGIAN
-   0x38 LANG_FAEROESE
-   0x39 LANG_HINDI
-   0x3a LANG_MALTESE
-   0x3b LANG_SAAMI
-   0x3c LANG_GAELIC
-   0x3d LANG_YIDDISH
-   0x3e LANG_MALAY
-   0x3f LANG_KAZAK
-   0x40 LANG_KYRGYZ
-   0x41 LANG_SWAHILI
-   0x42 LANG_TURKMEN
-   0x43 LANG_UZBEK
-   0x44 LANG_TATAR
-   0x45 LANG_BENGALI
-   0x46 LANG_PUNJABI
-   0x47 LANG_GUJARATI
-   0x48 LANG_ORIYA
-   0x49 LANG_TAMIL
-   0x4a LANG_TELUGU
-   0x4b LANG_KANNADA
-   0x4c LANG_MALAYALAM
-   0x4d LANG_ASSAMESE
-   0x4e LANG_MARATHI
-   0x4f LANG_SANSKRIT
-   0x50 LANG_MONGOLIAN
-   0x51 LANG_TIBETAN
-   0x52 LANG_WELSH
-   0x53 LANG_CAMBODIAN
-   0x54 LANG_LAO
-   0x55 LANG_BURMESE
-   0x56 LANG_GALICIAN
-   0x57 LANG_KONKANI
-   0x58 LANG_MANIPURI
-   0x59 LANG_SINDHI
-   0x5a LANG_SYRIAC
-   0x5b LANG_SINHALESE
-   0x5c LANG_CHEROKEE
-   0x5d LANG_INUKTITUT
-   0x5e LANG_AMHARIC
-   0x5f LANG_TAMAZIGHT
-   0x60 LANG_KASHMIRI
-   0x61 LANG_NEPALI
-   0x62 LANG_FRISIAN
-   0x63 LANG_PASHTO
-   0x64 LANG_TAGALOG
-   0x65 LANG_DIVEHI
-   0x66 LANG_EDO
-   0x67 LANG_FULFULDE
-   0x68 LANG_HAUSA
-   0x69 LANG_IBIBIO
-   0x6a LANG_YORUBA
-   0x70 LANG_IGBO
-   0x71 LANG_KANURI
-   0x72 LANG_OROMO
-   0x73 LANG_TIGRINYA
-   0x74 LANG_GUARANI
-   0x75 LANG_HAWAIIAN
-   0x76 LANG_LATIN
-   0x77 LANG_SOMALI
-   0x78 LANG_YI
-   0x79 LANG_PAPIAMENTU
-*/
-/* Mingw headers don't have latest language and sublanguage codes.  */
-# ifndef LANG_AFRIKAANS
-# define LANG_AFRIKAANS 0x36
-# endif
-# ifndef LANG_ALBANIAN
-# define LANG_ALBANIAN 0x1c
-# endif
-# ifndef LANG_AMHARIC
-# define LANG_AMHARIC 0x5e
-# endif
-# ifndef LANG_ARABIC
-# define LANG_ARABIC 0x01
-# endif
-# ifndef LANG_ARMENIAN
-# define LANG_ARMENIAN 0x2b
-# endif
-# ifndef LANG_ASSAMESE
-# define LANG_ASSAMESE 0x4d
-# endif
-# ifndef LANG_AZERI
-# define LANG_AZERI 0x2c
-# endif
-# ifndef LANG_BASQUE
-# define LANG_BASQUE 0x2d
-# endif
-# ifndef LANG_BELARUSIAN
-# define LANG_BELARUSIAN 0x23
-# endif
-# ifndef LANG_BENGALI
-# define LANG_BENGALI 0x45
-# endif
-# ifndef LANG_BURMESE
-# define LANG_BURMESE 0x55
-# endif
-# ifndef LANG_CAMBODIAN
-# define LANG_CAMBODIAN 0x53
-# endif
-# ifndef LANG_CATALAN
-# define LANG_CATALAN 0x03
-# endif
-# ifndef LANG_CHEROKEE
-# define LANG_CHEROKEE 0x5c
-# endif
-# ifndef LANG_DIVEHI
-# define LANG_DIVEHI 0x65
-# endif
-# ifndef LANG_EDO
-# define LANG_EDO 0x66
-# endif
-# ifndef LANG_ESTONIAN
-# define LANG_ESTONIAN 0x25
-# endif
-# ifndef LANG_FAEROESE
-# define LANG_FAEROESE 0x38
-# endif
-# ifndef LANG_FARSI
-# define LANG_FARSI 0x29
-# endif
-# ifndef LANG_FRISIAN
-# define LANG_FRISIAN 0x62
-# endif
-# ifndef LANG_FULFULDE
-# define LANG_FULFULDE 0x67
-# endif
-# ifndef LANG_GAELIC
-# define LANG_GAELIC 0x3c
-# endif
-# ifndef LANG_GALICIAN
-# define LANG_GALICIAN 0x56
-# endif
-# ifndef LANG_GEORGIAN
-# define LANG_GEORGIAN 0x37
-# endif
-# ifndef LANG_GUARANI
-# define LANG_GUARANI 0x74
-# endif
-# ifndef LANG_GUJARATI
-# define LANG_GUJARATI 0x47
-# endif
-# ifndef LANG_HAUSA
-# define LANG_HAUSA 0x68
-# endif
-# ifndef LANG_HAWAIIAN
-# define LANG_HAWAIIAN 0x75
-# endif
-# ifndef LANG_HEBREW
-# define LANG_HEBREW 0x0d
-# endif
-# ifndef LANG_HINDI
-# define LANG_HINDI 0x39
-# endif
-# ifndef LANG_IBIBIO
-# define LANG_IBIBIO 0x69
-# endif
-# ifndef LANG_IGBO
-# define LANG_IGBO 0x70
-# endif
-# ifndef LANG_INDONESIAN
-# define LANG_INDONESIAN 0x21
-# endif
-# ifndef LANG_INUKTITUT
-# define LANG_INUKTITUT 0x5d
-# endif
-# ifndef LANG_KANNADA
-# define LANG_KANNADA 0x4b
-# endif
-# ifndef LANG_KANURI
-# define LANG_KANURI 0x71
-# endif
-# ifndef LANG_KASHMIRI
-# define LANG_KASHMIRI 0x60
-# endif
-# ifndef LANG_KAZAK
-# define LANG_KAZAK 0x3f
-# endif
-# ifndef LANG_KONKANI
-# define LANG_KONKANI 0x57
-# endif
-# ifndef LANG_KYRGYZ
-# define LANG_KYRGYZ 0x40
-# endif
-# ifndef LANG_LAO
-# define LANG_LAO 0x54
-# endif
-# ifndef LANG_LATIN
-# define LANG_LATIN 0x76
-# endif
-# ifndef LANG_LATVIAN
-# define LANG_LATVIAN 0x26
-# endif
-# ifndef LANG_LITHUANIAN
-# define LANG_LITHUANIAN 0x27
-# endif
-# ifndef LANG_MACEDONIAN
-# define LANG_MACEDONIAN 0x2f
-# endif
-# ifndef LANG_MALAY
-# define LANG_MALAY 0x3e
-# endif
-# ifndef LANG_MALAYALAM
-# define LANG_MALAYALAM 0x4c
-# endif
-# ifndef LANG_MALTESE
-# define LANG_MALTESE 0x3a
-# endif
-# ifndef LANG_MANIPURI
-# define LANG_MANIPURI 0x58
-# endif
-# ifndef LANG_MARATHI
-# define LANG_MARATHI 0x4e
-# endif
-# ifndef LANG_MONGOLIAN
-# define LANG_MONGOLIAN 0x50
-# endif
-# ifndef LANG_NEPALI
-# define LANG_NEPALI 0x61
-# endif
-# ifndef LANG_ORIYA
-# define LANG_ORIYA 0x48
-# endif
-# ifndef LANG_OROMO
-# define LANG_OROMO 0x72
-# endif
-# ifndef LANG_PAPIAMENTU
-# define LANG_PAPIAMENTU 0x79
-# endif
-# ifndef LANG_PASHTO
-# define LANG_PASHTO 0x63
-# endif
-# ifndef LANG_PUNJABI
-# define LANG_PUNJABI 0x46
-# endif
-# ifndef LANG_RHAETO_ROMANCE
-# define LANG_RHAETO_ROMANCE 0x17
-# endif
-# ifndef LANG_SAAMI
-# define LANG_SAAMI 0x3b
-# endif
-# ifndef LANG_SANSKRIT
-# define LANG_SANSKRIT 0x4f
-# endif
-# ifndef LANG_SERBIAN
-# define LANG_SERBIAN 0x1a
-# endif
-# ifndef LANG_SINDHI
-# define LANG_SINDHI 0x59
-# endif
-# ifndef LANG_SINHALESE
-# define LANG_SINHALESE 0x5b
-# endif
-# ifndef LANG_SLOVAK
-# define LANG_SLOVAK 0x1b
-# endif
-# ifndef LANG_SOMALI
-# define LANG_SOMALI 0x77
-# endif
-# ifndef LANG_SORBIAN
-# define LANG_SORBIAN 0x2e
-# endif
-# ifndef LANG_SUTU
-# define LANG_SUTU 0x30
-# endif
-# ifndef LANG_SWAHILI
-# define LANG_SWAHILI 0x41
-# endif
-# ifndef LANG_SYRIAC
-# define LANG_SYRIAC 0x5a
-# endif
-# ifndef LANG_TAGALOG
-# define LANG_TAGALOG 0x64
-# endif
-# ifndef LANG_TAJIK
-# define LANG_TAJIK 0x28
-# endif
-# ifndef LANG_TAMAZIGHT
-# define LANG_TAMAZIGHT 0x5f
-# endif
-# ifndef LANG_TAMIL
-# define LANG_TAMIL 0x49
-# endif
-# ifndef LANG_TATAR
-# define LANG_TATAR 0x44
-# endif
-# ifndef LANG_TELUGU
-# define LANG_TELUGU 0x4a
-# endif
-# ifndef LANG_THAI
-# define LANG_THAI 0x1e
-# endif
-# ifndef LANG_TIBETAN
-# define LANG_TIBETAN 0x51
-# endif
-# ifndef LANG_TIGRINYA
-# define LANG_TIGRINYA 0x73
-# endif
-# ifndef LANG_TSONGA
-# define LANG_TSONGA 0x31
-# endif
-# ifndef LANG_TSWANA
-# define LANG_TSWANA 0x32
-# endif
-# ifndef LANG_TURKMEN
-# define LANG_TURKMEN 0x42
-# endif
-# ifndef LANG_UKRAINIAN
-# define LANG_UKRAINIAN 0x22
-# endif
-# ifndef LANG_URDU
-# define LANG_URDU 0x20
-# endif
-# ifndef LANG_UZBEK
-# define LANG_UZBEK 0x43
-# endif
-# ifndef LANG_VENDA
-# define LANG_VENDA 0x33
-# endif
-# ifndef LANG_VIETNAMESE
-# define LANG_VIETNAMESE 0x2a
-# endif
-# ifndef LANG_WELSH
-# define LANG_WELSH 0x52
-# endif
-# ifndef LANG_XHOSA
-# define LANG_XHOSA 0x34
-# endif
-# ifndef LANG_YI
-# define LANG_YI 0x78
-# endif
-# ifndef LANG_YIDDISH
-# define LANG_YIDDISH 0x3d
-# endif
-# ifndef LANG_YORUBA
-# define LANG_YORUBA 0x6a
-# endif
-# ifndef LANG_ZULU
-# define LANG_ZULU 0x35
-# endif
-# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
-# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
-# endif
-# ifndef SUBLANG_ARABIC_IRAQ
-# define SUBLANG_ARABIC_IRAQ 0x02
-# endif
-# ifndef SUBLANG_ARABIC_EGYPT
-# define SUBLANG_ARABIC_EGYPT 0x03
-# endif
-# ifndef SUBLANG_ARABIC_LIBYA
-# define SUBLANG_ARABIC_LIBYA 0x04
-# endif
-# ifndef SUBLANG_ARABIC_ALGERIA
-# define SUBLANG_ARABIC_ALGERIA 0x05
-# endif
-# ifndef SUBLANG_ARABIC_MOROCCO
-# define SUBLANG_ARABIC_MOROCCO 0x06
-# endif
-# ifndef SUBLANG_ARABIC_TUNISIA
-# define SUBLANG_ARABIC_TUNISIA 0x07
-# endif
-# ifndef SUBLANG_ARABIC_OMAN
-# define SUBLANG_ARABIC_OMAN 0x08
-# endif
-# ifndef SUBLANG_ARABIC_YEMEN
-# define SUBLANG_ARABIC_YEMEN 0x09
-# endif
-# ifndef SUBLANG_ARABIC_SYRIA
-# define SUBLANG_ARABIC_SYRIA 0x0a
-# endif
-# ifndef SUBLANG_ARABIC_JORDAN
-# define SUBLANG_ARABIC_JORDAN 0x0b
-# endif
-# ifndef SUBLANG_ARABIC_LEBANON
-# define SUBLANG_ARABIC_LEBANON 0x0c
-# endif
-# ifndef SUBLANG_ARABIC_KUWAIT
-# define SUBLANG_ARABIC_KUWAIT 0x0d
-# endif
-# ifndef SUBLANG_ARABIC_UAE
-# define SUBLANG_ARABIC_UAE 0x0e
-# endif
-# ifndef SUBLANG_ARABIC_BAHRAIN
-# define SUBLANG_ARABIC_BAHRAIN 0x0f
-# endif
-# ifndef SUBLANG_ARABIC_QATAR
-# define SUBLANG_ARABIC_QATAR 0x10
-# endif
-# ifndef SUBLANG_AZERI_LATIN
-# define SUBLANG_AZERI_LATIN 0x01
-# endif
-# ifndef SUBLANG_AZERI_CYRILLIC
-# define SUBLANG_AZERI_CYRILLIC 0x02
-# endif
-# ifndef SUBLANG_BENGALI_INDIA
-# define SUBLANG_BENGALI_INDIA 0x00
-# endif
-# ifndef SUBLANG_BENGALI_BANGLADESH
-# define SUBLANG_BENGALI_BANGLADESH 0x01
-# endif
-# ifndef SUBLANG_CHINESE_MACAU
-# define SUBLANG_CHINESE_MACAU 0x05
-# endif
-# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
-# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
-# endif
-# ifndef SUBLANG_ENGLISH_JAMAICA
-# define SUBLANG_ENGLISH_JAMAICA 0x08
-# endif
-# ifndef SUBLANG_ENGLISH_CARIBBEAN
-# define SUBLANG_ENGLISH_CARIBBEAN 0x09
-# endif
-# ifndef SUBLANG_ENGLISH_BELIZE
-# define SUBLANG_ENGLISH_BELIZE 0x0a
-# endif
-# ifndef SUBLANG_ENGLISH_TRINIDAD
-# define SUBLANG_ENGLISH_TRINIDAD 0x0b
-# endif
-# ifndef SUBLANG_ENGLISH_ZIMBABWE
-# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
-# endif
-# ifndef SUBLANG_ENGLISH_PHILIPPINES
-# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
-# endif
-# ifndef SUBLANG_ENGLISH_INDONESIA
-# define SUBLANG_ENGLISH_INDONESIA 0x0e
-# endif
-# ifndef SUBLANG_ENGLISH_HONGKONG
-# define SUBLANG_ENGLISH_HONGKONG 0x0f
-# endif
-# ifndef SUBLANG_ENGLISH_INDIA
-# define SUBLANG_ENGLISH_INDIA 0x10
-# endif
-# ifndef SUBLANG_ENGLISH_MALAYSIA
-# define SUBLANG_ENGLISH_MALAYSIA 0x11
-# endif
-# ifndef SUBLANG_ENGLISH_SINGAPORE
-# define SUBLANG_ENGLISH_SINGAPORE 0x12
-# endif
-# ifndef SUBLANG_FRENCH_LUXEMBOURG
-# define SUBLANG_FRENCH_LUXEMBOURG 0x05
-# endif
-# ifndef SUBLANG_FRENCH_MONACO
-# define SUBLANG_FRENCH_MONACO 0x06
-# endif
-# ifndef SUBLANG_FRENCH_WESTINDIES
-# define SUBLANG_FRENCH_WESTINDIES 0x07
-# endif
-# ifndef SUBLANG_FRENCH_REUNION
-# define SUBLANG_FRENCH_REUNION 0x08
-# endif
-# ifndef SUBLANG_FRENCH_CONGO
-# define SUBLANG_FRENCH_CONGO 0x09
-# endif
-# ifndef SUBLANG_FRENCH_SENEGAL
-# define SUBLANG_FRENCH_SENEGAL 0x0a
-# endif
-# ifndef SUBLANG_FRENCH_CAMEROON
-# define SUBLANG_FRENCH_CAMEROON 0x0b
-# endif
-# ifndef SUBLANG_FRENCH_COTEDIVOIRE
-# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c
-# endif
-# ifndef SUBLANG_FRENCH_MALI
-# define SUBLANG_FRENCH_MALI 0x0d
-# endif
-# ifndef SUBLANG_FRENCH_MOROCCO
-# define SUBLANG_FRENCH_MOROCCO 0x0e
-# endif
-# ifndef SUBLANG_FRENCH_HAITI
-# define SUBLANG_FRENCH_HAITI 0x0f
-# endif
-# ifndef SUBLANG_GERMAN_LUXEMBOURG
-# define SUBLANG_GERMAN_LUXEMBOURG 0x04
-# endif
-# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
-# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
-# endif
-# ifndef SUBLANG_KASHMIRI_INDIA
-# define SUBLANG_KASHMIRI_INDIA 0x02
-# endif
-# ifndef SUBLANG_MALAY_MALAYSIA
-# define SUBLANG_MALAY_MALAYSIA 0x01
-# endif
-# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
-# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
-# endif
-# ifndef SUBLANG_NEPALI_INDIA
-# define SUBLANG_NEPALI_INDIA 0x02
-# endif
-# ifndef SUBLANG_PUNJABI_INDIA
-# define SUBLANG_PUNJABI_INDIA 0x00
-# endif
-# ifndef SUBLANG_PUNJABI_PAKISTAN
-# define SUBLANG_PUNJABI_PAKISTAN 0x01
-# endif
-# ifndef SUBLANG_ROMANIAN_ROMANIA
-# define SUBLANG_ROMANIAN_ROMANIA 0x00
-# endif
-# ifndef SUBLANG_ROMANIAN_MOLDOVA
-# define SUBLANG_ROMANIAN_MOLDOVA 0x01
-# endif
-# ifndef SUBLANG_SERBIAN_LATIN
-# define SUBLANG_SERBIAN_LATIN 0x02
-# endif
-# ifndef SUBLANG_SERBIAN_CYRILLIC
-# define SUBLANG_SERBIAN_CYRILLIC 0x03
-# endif
-# ifndef SUBLANG_SINDHI_INDIA
-# define SUBLANG_SINDHI_INDIA 0x00
-# endif
-# ifndef SUBLANG_SINDHI_PAKISTAN
-# define SUBLANG_SINDHI_PAKISTAN 0x01
-# endif
-# ifndef SUBLANG_SPANISH_GUATEMALA
-# define SUBLANG_SPANISH_GUATEMALA 0x04
-# endif
-# ifndef SUBLANG_SPANISH_COSTA_RICA
-# define SUBLANG_SPANISH_COSTA_RICA 0x05
-# endif
-# ifndef SUBLANG_SPANISH_PANAMA
-# define SUBLANG_SPANISH_PANAMA 0x06
-# endif
-# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
-# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
-# endif
-# ifndef SUBLANG_SPANISH_VENEZUELA
-# define SUBLANG_SPANISH_VENEZUELA 0x08
-# endif
-# ifndef SUBLANG_SPANISH_COLOMBIA
-# define SUBLANG_SPANISH_COLOMBIA 0x09
-# endif
-# ifndef SUBLANG_SPANISH_PERU
-# define SUBLANG_SPANISH_PERU 0x0a
-# endif
-# ifndef SUBLANG_SPANISH_ARGENTINA
-# define SUBLANG_SPANISH_ARGENTINA 0x0b
-# endif
-# ifndef SUBLANG_SPANISH_ECUADOR
-# define SUBLANG_SPANISH_ECUADOR 0x0c
-# endif
-# ifndef SUBLANG_SPANISH_CHILE
-# define SUBLANG_SPANISH_CHILE 0x0d
-# endif
-# ifndef SUBLANG_SPANISH_URUGUAY
-# define SUBLANG_SPANISH_URUGUAY 0x0e
-# endif
-# ifndef SUBLANG_SPANISH_PARAGUAY
-# define SUBLANG_SPANISH_PARAGUAY 0x0f
-# endif
-# ifndef SUBLANG_SPANISH_BOLIVIA
-# define SUBLANG_SPANISH_BOLIVIA 0x10
-# endif
-# ifndef SUBLANG_SPANISH_EL_SALVADOR
-# define SUBLANG_SPANISH_EL_SALVADOR 0x11
-# endif
-# ifndef SUBLANG_SPANISH_HONDURAS
-# define SUBLANG_SPANISH_HONDURAS 0x12
-# endif
-# ifndef SUBLANG_SPANISH_NICARAGUA
-# define SUBLANG_SPANISH_NICARAGUA 0x13
-# endif
-# ifndef SUBLANG_SPANISH_PUERTO_RICO
-# define SUBLANG_SPANISH_PUERTO_RICO 0x14
-# endif
-# ifndef SUBLANG_SWEDISH_FINLAND
-# define SUBLANG_SWEDISH_FINLAND 0x02
-# endif
-# ifndef SUBLANG_TAMAZIGHT_ARABIC
-# define SUBLANG_TAMAZIGHT_ARABIC 0x01
-# endif
-# ifndef SUBLANG_TAMAZIGHT_LATIN
-# define SUBLANG_TAMAZIGHT_LATIN 0x02
-# endif
-# ifndef SUBLANG_TIGRINYA_ETHIOPIA
-# define SUBLANG_TIGRINYA_ETHIOPIA 0x00
-# endif
-# ifndef SUBLANG_TIGRINYA_ERITREA
-# define SUBLANG_TIGRINYA_ERITREA 0x01
-# endif
-# ifndef SUBLANG_URDU_PAKISTAN
-# define SUBLANG_URDU_PAKISTAN 0x01
-# endif
-# ifndef SUBLANG_URDU_INDIA
-# define SUBLANG_URDU_INDIA 0x02
-# endif
-# ifndef SUBLANG_UZBEK_LATIN
-# define SUBLANG_UZBEK_LATIN 0x01
-# endif
-# ifndef SUBLANG_UZBEK_CYRILLIC
-# define SUBLANG_UZBEK_CYRILLIC 0x02
-# endif
-#endif
-
-/* XPG3 defines the result of 'setlocale (category, NULL)' as:
-   "Directs 'setlocale()' to query 'category' and return the current
-    setting of 'local'."
-   However it does not specify the exact format.  Neither do SUSV2 and
-   ISO C 99.  So we can use this feature only on selected systems (e.g.
-   those using GNU C Library).  */
-#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
-# define HAVE_LOCALE_NULL
-#endif
-
-/* Determine the current locale's name, and canonicalize it into XPG syntax
-     language[_territory[.codeset]][@modifier]
-   The codeset part in the result is not reliable; the locale_charset()
-   should be used for codeset information instead.
-   The result must not be freed; it is statically allocated.  */
-
-const char *
-_nl_locale_name (int category, const char *categoryname)
-{
-  const char *retval;
-
-#ifndef WIN32
-
-  /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
-     On some systems this can be done by the 'setlocale' function itself.  */
-# if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
-  retval = setlocale (category, NULL);
-# else
-  /* Setting of LC_ALL overwrites all other.  */
-  retval = getenv ("LC_ALL");
-  if (retval == NULL || retval[0] == '\0')
-    {
-      /* Next comes the name of the desired category.  */
-      retval = getenv (categoryname);
-      if (retval == NULL || retval[0] == '\0')
-       {
-         /* Last possibility is the LANG environment variable.  */
-         retval = getenv ("LANG");
-         if (retval == NULL || retval[0] == '\0')
-           /* We use C as the default domain.  POSIX says this is
-              implementation defined.  */
-           retval = "C";
-       }
-    }
-# endif
-
-  return retval;
-
-#else /* WIN32 */
-
-  /* Return an XPG style locale name language[_territory][@modifier].
-     Don't even bother determining the codeset; it's not useful in this
-     context, because message catalogs are not specific to a single
-     codeset.  */
-
-  LCID lcid;
-  LANGID langid;
-  int primary, sub;
-
-  /* Let the user override the system settings through environment
-     variables, as on POSIX systems.  */
-  retval = getenv ("LC_ALL");
-  if (retval != NULL && retval[0] != '\0')
-    return retval;
-  retval = getenv (categoryname);
-  if (retval != NULL && retval[0] != '\0')
-    return retval;
-  retval = getenv ("LANG");
-  if (retval != NULL && retval[0] != '\0')
-    return retval;
-
-  /* Use native Win32 API locale ID.  */
-  lcid = GetThreadLocale ();
-
-  /* Strip off the sorting rules, keep only the language part.  */
-  langid = LANGIDFROMLCID (lcid);
-
-  /* Split into language and territory part.  */
-  primary = PRIMARYLANGID (langid);
-  sub = SUBLANGID (langid);
-
-  /* Dispatch on language.
-     See also http://www.unicode.org/unicode/onlinedat/languages.html .
-     For details about languages, see http://www.ethnologue.com/ .  */
-  switch (primary)
-    {
-    case LANG_AFRIKAANS: return "af_ZA";
-    case LANG_ALBANIAN: return "sq_AL";
-    case LANG_AMHARIC: return "am_ET";
-    case LANG_ARABIC:
-      switch (sub)
-       {
-       case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
-       case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
-       case SUBLANG_ARABIC_EGYPT: return "ar_EG";
-       case SUBLANG_ARABIC_LIBYA: return "ar_LY";
-       case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
-       case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
-       case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
-       case SUBLANG_ARABIC_OMAN: return "ar_OM";
-       case SUBLANG_ARABIC_YEMEN: return "ar_YE";
-       case SUBLANG_ARABIC_SYRIA: return "ar_SY";
-       case SUBLANG_ARABIC_JORDAN: return "ar_JO";
-       case SUBLANG_ARABIC_LEBANON: return "ar_LB";
-       case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
-       case SUBLANG_ARABIC_UAE: return "ar_AE";
-       case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
-       case SUBLANG_ARABIC_QATAR: return "ar_QA";
-       }
-      return "ar";
-    case LANG_ARMENIAN: return "hy_AM";
-    case LANG_ASSAMESE: return "as_IN";
-    case LANG_AZERI:
-      switch (sub)
-       {
-       /* FIXME: Adjust this when Azerbaijani locales appear on Unix.  */
-       case SUBLANG_AZERI_LATIN: return "az_AZ@latin";
-       case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic";
-       }
-      return "az";
-    case LANG_BASQUE:
-      return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR".  */
-    case LANG_BELARUSIAN: return "be_BY";
-    case LANG_BENGALI:
-      switch (sub)
-       {
-       case SUBLANG_BENGALI_INDIA: return "bn_IN";
-       case SUBLANG_BENGALI_BANGLADESH: return "bn_BD";
-       }
-      return "bn";
-    case LANG_BULGARIAN: return "bg_BG";
-    case LANG_BURMESE: return "my_MM";
-    case LANG_CAMBODIAN: return "km_KH";
-    case LANG_CATALAN: return "ca_ES";
-    case LANG_CHEROKEE: return "chr_US";
-    case LANG_CHINESE:
-      switch (sub)
-       {
-       case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW";
-       case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN";
-       case SUBLANG_CHINESE_HONGKONG: return "zh_HK";
-       case SUBLANG_CHINESE_SINGAPORE: return "zh_SG";
-       case SUBLANG_CHINESE_MACAU: return "zh_MO";
-       }
-      return "zh";
-    case LANG_CROATIAN:                /* LANG_CROATIAN == LANG_SERBIAN
-                                * What used to be called Serbo-Croatian
-                                * should really now be two separate
-                                * languages because of political reasons.
-                                * (Says tml, who knows nothing about Serbian
-                                * or Croatian.)
-                                * (I can feel those flames coming already.)
-                                */
-      switch (sub)
-       {
-       case SUBLANG_DEFAULT: return "hr_HR";
-       case SUBLANG_SERBIAN_LATIN: return "sr_CS";
-       case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic";
-       }
-      return "hr";
-    case LANG_CZECH: return "cs_CZ";
-    case LANG_DANISH: return "da_DK";
-    case LANG_DIVEHI: return "dv_MV";
-    case LANG_DUTCH:
-      switch (sub)
-       {
-       case SUBLANG_DUTCH: return "nl_NL";
-       case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
-       }
-      return "nl";
-    case LANG_EDO: return "bin_NG";
-    case LANG_ENGLISH:
-      switch (sub)
-       {
-       /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
-        * English was the language spoken in England.
-        * Oh well.
-        */
-       case SUBLANG_ENGLISH_US: return "en_US";
-       case SUBLANG_ENGLISH_UK: return "en_GB";
-       case SUBLANG_ENGLISH_AUS: return "en_AU";
-       case SUBLANG_ENGLISH_CAN: return "en_CA";
-       case SUBLANG_ENGLISH_NZ: return "en_NZ";
-       case SUBLANG_ENGLISH_EIRE: return "en_IE";
-       case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
-       case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
-       case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
-       case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
-       case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
-       case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
-       case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
-       case SUBLANG_ENGLISH_INDONESIA: return "en_ID";
-       case SUBLANG_ENGLISH_HONGKONG: return "en_HK";
-       case SUBLANG_ENGLISH_INDIA: return "en_IN";
-       case SUBLANG_ENGLISH_MALAYSIA: return "en_MY";
-       case SUBLANG_ENGLISH_SINGAPORE: return "en_SG";
-       }
-      return "en";
-    case LANG_ESTONIAN: return "et_EE";
-    case LANG_FAEROESE: return "fo_FO";
-    case LANG_FARSI: return "fa_IR";
-    case LANG_FINNISH: return "fi_FI";
-    case LANG_FRENCH:
-      switch (sub)
-       {
-       case SUBLANG_FRENCH: return "fr_FR";
-       case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
-       case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
-       case SUBLANG_FRENCH_SWISS: return "fr_CH";
-       case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
-       case SUBLANG_FRENCH_MONACO: return "fr_MC";
-       case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */
-       case SUBLANG_FRENCH_REUNION: return "fr_RE";
-       case SUBLANG_FRENCH_CONGO: return "fr_CG";
-       case SUBLANG_FRENCH_SENEGAL: return "fr_SN";
-       case SUBLANG_FRENCH_CAMEROON: return "fr_CM";
-       case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI";
-       case SUBLANG_FRENCH_MALI: return "fr_ML";
-       case SUBLANG_FRENCH_MOROCCO: return "fr_MA";
-       case SUBLANG_FRENCH_HAITI: return "fr_HT";
-       }
-      return "fr";
-    case LANG_FRISIAN: return "fy_NL";
-    case LANG_FULFULDE:
-      /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */
-      return "ff_NG";
-    case LANG_GAELIC:
-      switch (sub)
-       {
-       case 0x01: /* SCOTTISH */ return "gd_GB";
-       case 0x02: /* IRISH */ return "ga_IE";
-       }
-      return "C";
-    case LANG_GALICIAN: return "gl_ES";
-    case LANG_GEORGIAN: return "ka_GE";
-    case LANG_GERMAN:
-      switch (sub)
-       {
-       case SUBLANG_GERMAN: return "de_DE";
-       case SUBLANG_GERMAN_SWISS: return "de_CH";
-       case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
-       case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
-       case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
-       }
-      return "de";
-    case LANG_GREEK: return "el_GR";
-    case LANG_GUARANI: return "gn_PY";
-    case LANG_GUJARATI: return "gu_IN";
-    case LANG_HAUSA: return "ha_NG";
-    case LANG_HAWAIIAN:
-      /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
-        or Hawaii Creole English ("cpe_US", 600000 speakers)?  */
-      return "cpe_US";
-    case LANG_HEBREW: return "he_IL";
-    case LANG_HINDI: return "hi_IN";
-    case LANG_HUNGARIAN: return "hu_HU";
-    case LANG_IBIBIO: return "nic_NG";
-    case LANG_ICELANDIC: return "is_IS";
-    case LANG_IGBO: return "ig_NG";
-    case LANG_INDONESIAN: return "id_ID";
-    case LANG_INUKTITUT: return "iu_CA";
-    case LANG_ITALIAN:
-      switch (sub)
-       {
-       case SUBLANG_ITALIAN: return "it_IT";
-       case SUBLANG_ITALIAN_SWISS: return "it_CH";
-       }
-      return "it";
-    case LANG_JAPANESE: return "ja_JP";
-    case LANG_KANNADA: return "kn_IN";
-    case LANG_KANURI: return "kr_NG";
-    case LANG_KASHMIRI:
-      switch (sub)
-       {
-       case SUBLANG_DEFAULT: return "ks_PK";
-       case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
-       }
-      return "ks";
-    case LANG_KAZAK: return "kk_KZ";
-    case LANG_KONKANI:
-      /* FIXME: Adjust this when such locales appear on Unix.  */
-      return "kok_IN";
-    case LANG_KOREAN: return "ko_KR";
-    case LANG_KYRGYZ: return "ky_KG";
-    case LANG_LAO: return "lo_LA";
-    case LANG_LATIN: return "la_VA";
-    case LANG_LATVIAN: return "lv_LV";
-    case LANG_LITHUANIAN: return "lt_LT";
-    case LANG_MACEDONIAN: return "mk_MK";
-    case LANG_MALAY:
-      switch (sub)
-       {
-       case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
-       case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
-       }
-      return "ms";
-    case LANG_MALAYALAM: return "ml_IN";
-    case LANG_MALTESE: return "mt_MT";
-    case LANG_MANIPURI:
-      /* FIXME: Adjust this when such locales appear on Unix.  */
-      return "mni_IN";
-    case LANG_MARATHI: return "mr_IN";
-    case LANG_MONGOLIAN:
-      return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN".  */
-    case LANG_NEPALI:
-      switch (sub)
-       {
-       case SUBLANG_DEFAULT: return "ne_NP";
-       case SUBLANG_NEPALI_INDIA: return "ne_IN";
-       }
-      return "ne";
-    case LANG_NORWEGIAN:
-      switch (sub)
-       {
-       case SUBLANG_NORWEGIAN_BOKMAL: return "no_NO";
-       case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
-       }
-      return "no";
-    case LANG_ORIYA: return "or_IN";
-    case LANG_OROMO: return "om_ET";
-    case LANG_PAPIAMENTU: return "pap_AN";
-    case LANG_PASHTO:
-      return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF".  */
-    case LANG_POLISH: return "pl_PL";
-    case LANG_PORTUGUESE:
-      switch (sub)
-       {
-       case SUBLANG_PORTUGUESE: return "pt_PT";
-       /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
-          Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
-       case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
-       }
-      return "pt";
-    case LANG_PUNJABI:
-      switch (sub)
-       {
-       case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */
-       case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */
-       }
-      return "pa";
-    case LANG_RHAETO_ROMANCE: return "rm_CH";
-    case LANG_ROMANIAN:
-      switch (sub)
-       {
-       case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO";
-       case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD";
-       }
-      return "ro";
-    case LANG_RUSSIAN:
-      return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD".  */
-    case LANG_SAAMI: /* actually Northern Sami */ return "se_NO";
-    case LANG_SANSKRIT: return "sa_IN";
-    case LANG_SINDHI:
-      switch (sub)
-       {
-       case SUBLANG_SINDHI_INDIA: return "sd_IN";
-       case SUBLANG_SINDHI_PAKISTAN: return "sd_PK";
-       }
-      return "sd";
-    case LANG_SINHALESE: return "si_LK";
-    case LANG_SLOVAK: return "sk_SK";
-    case LANG_SLOVENIAN: return "sl_SI";
-    case LANG_SOMALI: return "so_SO";
-    case LANG_SORBIAN:
-      /* FIXME: Adjust this when such locales appear on Unix.  */
-      return "wen_DE";
-    case LANG_SPANISH:
-      switch (sub)
-       {
-       case SUBLANG_SPANISH: return "es_ES";
-       case SUBLANG_SPANISH_MEXICAN: return "es_MX";
-       case SUBLANG_SPANISH_MODERN:
-         return "es_ES@modern";        /* not seen on Unix */
-       case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
-       case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
-       case SUBLANG_SPANISH_PANAMA: return "es_PA";
-       case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
-       case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
-       case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
-       case SUBLANG_SPANISH_PERU: return "es_PE";
-       case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
-       case SUBLANG_SPANISH_ECUADOR: return "es_EC";
-       case SUBLANG_SPANISH_CHILE: return "es_CL";
-       case SUBLANG_SPANISH_URUGUAY: return "es_UY";
-       case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
-       case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
-       case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
-       case SUBLANG_SPANISH_HONDURAS: return "es_HN";
-       case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
-       case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
-       }
-      return "es";
-    case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */
-    case LANG_SWAHILI: return "sw_KE";
-    case LANG_SWEDISH:
-      switch (sub)
-       {
-       case SUBLANG_DEFAULT: return "sv_SE";
-       case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
-       }
-      return "sv";
-    case LANG_SYRIAC: return "syr_TR"; /* An extinct language.  */
-    case LANG_TAGALOG: return "tl_PH";
-    case LANG_TAJIK: return "tg_TJ";
-    case LANG_TAMAZIGHT:
-      switch (sub)
-       {
-       /* FIXME: Adjust this when Tamazight locales appear on Unix.  */
-       case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic";
-       case SUBLANG_TAMAZIGHT_LATIN: return "ber_MA@latin";
-       }
-      return "ber_MA";
-    case LANG_TAMIL:
-      return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG".  */
-    case LANG_TATAR: return "tt_RU";
-    case LANG_TELUGU: return "te_IN";
-    case LANG_THAI: return "th_TH";
-    case LANG_TIBETAN: return "bo_CN";
-    case LANG_TIGRINYA:
-      switch (sub)
-       {
-       case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET";
-       case SUBLANG_TIGRINYA_ERITREA: return "ti_ER";
-       }
-      return "ti";
-    case LANG_TSONGA: return "ts_ZA";
-    case LANG_TSWANA: return "tn_BW";
-    case LANG_TURKISH: return "tr_TR";
-    case LANG_TURKMEN: return "tk_TM";
-    case LANG_UKRAINIAN: return "uk_UA";
-    case LANG_URDU:
-      switch (sub)
-       {
-       case SUBLANG_URDU_PAKISTAN: return "ur_PK";
-       case SUBLANG_URDU_INDIA: return "ur_IN";
-       }
-      return "ur";
-    case LANG_UZBEK:
-      switch (sub)
-       {
-       case SUBLANG_UZBEK_LATIN: return "uz_UZ";
-       case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic";
-       }
-      return "uz";
-    case LANG_VENDA: return "ve_ZA";
-    case LANG_VIETNAMESE: return "vi_VN";
-    case LANG_WELSH: return "cy_GB";
-    case LANG_XHOSA: return "xh_ZA";
-    case LANG_YI: return "sit_CN";
-    case LANG_YIDDISH: return "yi_IL";
-    case LANG_YORUBA: return "yo_NG";
-    case LANG_ZULU: return "zu_ZA";
-    default: return "C";
-    }
-
-#endif
-}
diff --git a/intl/log.c b/intl/log.c
deleted file mode 100644 (file)
index cb6076e..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Log file output.
-   Copyright (C) 2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* Written by Bruno Haible <bruno@clisp.org>.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Print an ASCII string with quotes and escape sequences where needed.  */
-static void
-print_escaped (FILE *stream, const char *str)
-{
-  putc ('"', stream);
-  for (; *str != '\0'; str++)
-    if (*str == '\n')
-      {
-       fputs ("\\n\"", stream);
-       if (str[1] == '\0')
-         return;
-       fputs ("\n\"", stream);
-      }
-    else
-      {
-       if (*str == '"' || *str == '\\')
-         putc ('\\', stream);
-       putc (*str, stream);
-      }
-  putc ('"', stream);
-}
-
-/* Add to the log file an entry denoting a failed translation.  */
-void
-_nl_log_untranslated (const char *logfilename, const char *domainname,
-                     const char *msgid1, const char *msgid2, int plural)
-{
-  static char *last_logfilename = NULL;
-  static FILE *last_logfile = NULL;
-  FILE *logfile;
-
-  /* Can we reuse the last opened logfile?  */
-  if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
-    {
-      /* Close the last used logfile.  */
-      if (last_logfilename != NULL)
-       {
-         if (last_logfile != NULL)
-           {
-             fclose (last_logfile);
-             last_logfile = NULL;
-           }
-         free (last_logfilename);
-         last_logfilename = NULL;
-       }
-      /* Open the logfile.  */
-      last_logfilename = (char *) malloc (strlen (logfilename) + 1);
-      if (last_logfilename == NULL)
-       return;
-      strcpy (last_logfilename, logfilename);
-      last_logfile = fopen (logfilename, "a");
-      if (last_logfile == NULL)
-       return;
-    }
-  logfile = last_logfile;
-
-  fprintf (logfile, "domain ");
-  print_escaped (logfile, domainname);
-  fprintf (logfile, "\nmsgid ");
-  print_escaped (logfile, msgid1);
-  if (plural)
-    {
-      fprintf (logfile, "\nmsgid_plural ");
-      print_escaped (logfile, msgid2);
-      fprintf (logfile, "\nmsgstr[0] \"\"\n");
-    }
-  else
-    fprintf (logfile, "\nmsgstr \"\"\n");
-  putc ('\n', logfile);
-}
diff --git a/intl/ngettext.c b/intl/ngettext.c
deleted file mode 100644 (file)
index e73e00c..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Implementation of ngettext(3) function.
-   Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef _LIBC
-# define __need_NULL
-# include <stddef.h>
-#else
-# include <stdlib.h>           /* Just for NULL.  */
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-#include <locale.h>
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem.  They must not clash
-   with existing names and they should follow ANSI C.  But this source
-   code is also used in GNU C Library where the names have a __
-   prefix.  So we have to make a difference here.  */
-#ifdef _LIBC
-# define NGETTEXT __ngettext
-# define DCNGETTEXT __dcngettext
-#else
-# define NGETTEXT libintl_ngettext
-# define DCNGETTEXT libintl_dcngettext
-#endif
-
-/* Look up MSGID in the current default message catalog for the current
-   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
-   text).  */
-char *
-NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n)
-{
-  return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library.  */
-weak_alias (__ngettext, ngettext);
-#endif
diff --git a/intl/os2compat.c b/intl/os2compat.c
deleted file mode 100644 (file)
index c8dc33e..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/* OS/2 compatibility functions.
-   Copyright (C) 2001-2002 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#define OS2_AWARE
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <sys/param.h>
-
-/* A version of getenv() that works from DLLs */
-extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue);
-
-char *
-_nl_getenv (const char *name)
-{
-  unsigned char *value;
-  if (DosScanEnv (name, &value))
-    return NULL;
-  else
-    return value;
-}
-
-/* A fixed size buffer.  */
-char libintl_nl_default_dirname[MAXPATHLEN+1];
-
-char *_nlos2_libdir = NULL;
-char *_nlos2_localealiaspath = NULL;
-char *_nlos2_localedir = NULL;
-
-static __attribute__((constructor)) void
-nlos2_initialize ()
-{
-  char *root = getenv ("UNIXROOT");
-  char *gnulocaledir = getenv ("GNULOCALEDIR");
-
-  _nlos2_libdir = gnulocaledir;
-  if (!_nlos2_libdir)
-    {
-      if (root)
-        {
-          size_t sl = strlen (root);
-          _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1);
-          memcpy (_nlos2_libdir, root, sl);
-          memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1);
-        }
-      else
-        _nlos2_libdir = LIBDIR;
-    }
-
-  _nlos2_localealiaspath = gnulocaledir;
-  if (!_nlos2_localealiaspath)
-    {
-      if (root)
-        {
-          size_t sl = strlen (root);
-          _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1);
-          memcpy (_nlos2_localealiaspath, root, sl);
-          memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1);
-        }
-     else
-        _nlos2_localealiaspath = LOCALE_ALIAS_PATH;
-    }
-
-  _nlos2_localedir = gnulocaledir;
-  if (!_nlos2_localedir)
-    {
-      if (root)
-        {
-          size_t sl = strlen (root);
-          _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1);
-          memcpy (_nlos2_localedir, root, sl);
-          memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1);
-        }
-      else
-        _nlos2_localedir = LOCALEDIR;
-    }
-
-  if (strlen (_nlos2_localedir) <= MAXPATHLEN)
-    strcpy (libintl_nl_default_dirname, _nlos2_localedir);
-}
diff --git a/intl/os2compat.h b/intl/os2compat.h
deleted file mode 100644 (file)
index 4f74e8c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* OS/2 compatibility defines.
-   This file is intended to be included from config.h
-   Copyright (C) 2001-2002 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* When included from os2compat.h we need all the original definitions */
-#ifndef OS2_AWARE
-
-#undef LIBDIR
-#define LIBDIR                 _nlos2_libdir
-extern char *_nlos2_libdir;
-
-#undef LOCALEDIR
-#define LOCALEDIR              _nlos2_localedir
-extern char *_nlos2_localedir;
-
-#undef LOCALE_ALIAS_PATH
-#define LOCALE_ALIAS_PATH      _nlos2_localealiaspath
-extern char *_nlos2_localealiaspath;
-
-#endif
-
-#undef HAVE_STRCASECMP
-#define HAVE_STRCASECMP 1
-#define strcasecmp stricmp
-#define strncasecmp strnicmp
-
-/* We have our own getenv() which works even if library is compiled as DLL */
-#define getenv _nl_getenv
-
-/* Older versions of gettext used -1 as the value of LC_MESSAGES */
-#define LC_MESSAGES_COMPAT (-1)
diff --git a/intl/osdep.c b/intl/osdep.c
deleted file mode 100644 (file)
index b372598..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* OS dependent parts of libintl.
-   Copyright (C) 2001-2002 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#if defined __EMX__
-# include "os2compat.c"
-#else
-/* Avoid AIX compiler warning.  */
-typedef int dummy;
-#endif
diff --git a/intl/plural-exp.c b/intl/plural-exp.c
deleted file mode 100644 (file)
index 8c04e64..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/* Expression parsing for plural form selection.
-   Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
-   Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "plural-exp.h"
-
-#if (defined __GNUC__ && !defined __APPLE_CC__) \
-    || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
-
-/* These structs are the constant expression for the germanic plural
-   form determination.  It represents the expression  "n != 1".  */
-static const struct expression plvar =
-{
-  .nargs = 0,
-  .operation = var,
-};
-static const struct expression plone =
-{
-  .nargs = 0,
-  .operation = num,
-  .val =
-  {
-    .num = 1
-  }
-};
-struct expression GERMANIC_PLURAL =
-{
-  .nargs = 2,
-  .operation = not_equal,
-  .val =
-  {
-    .args =
-    {
-      [0] = (struct expression *) &plvar,
-      [1] = (struct expression *) &plone
-    }
-  }
-};
-
-# define INIT_GERMANIC_PLURAL()
-
-#else
-
-/* For compilers without support for ISO C 99 struct/union initializers:
-   Initialization at run-time.  */
-
-static struct expression plvar;
-static struct expression plone;
-struct expression GERMANIC_PLURAL;
-
-static void
-init_germanic_plural ()
-{
-  if (plone.val.num == 0)
-    {
-      plvar.nargs = 0;
-      plvar.operation = var;
-
-      plone.nargs = 0;
-      plone.operation = num;
-      plone.val.num = 1;
-
-      GERMANIC_PLURAL.nargs = 2;
-      GERMANIC_PLURAL.operation = not_equal;
-      GERMANIC_PLURAL.val.args[0] = &plvar;
-      GERMANIC_PLURAL.val.args[1] = &plone;
-    }
-}
-
-# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
-
-#endif
-
-void
-internal_function
-EXTRACT_PLURAL_EXPRESSION (const char *nullentry, struct expression **pluralp,
-                          unsigned long int *npluralsp)
-{
-  if (nullentry != NULL)
-    {
-      const char *plural;
-      const char *nplurals;
-
-      plural = strstr (nullentry, "plural=");
-      nplurals = strstr (nullentry, "nplurals=");
-      if (plural == NULL || nplurals == NULL)
-       goto no_plural;
-      else
-       {
-         char *endp;
-         unsigned long int n;
-         struct parse_args args;
-
-         /* First get the number.  */
-         nplurals += 9;
-         while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
-           ++nplurals;
-         if (!(*nplurals >= '0' && *nplurals <= '9'))
-           goto no_plural;
-#if defined HAVE_STRTOUL || defined _LIBC
-         n = strtoul (nplurals, &endp, 10);
-#else
-         for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
-           n = n * 10 + (*endp - '0');
-#endif
-         if (nplurals == endp)
-           goto no_plural;
-         *npluralsp = n;
-
-         /* Due to the restrictions bison imposes onto the interface of the
-            scanner function we have to put the input string and the result
-            passed up from the parser into the same structure which address
-            is passed down to the parser.  */
-         plural += 7;
-         args.cp = plural;
-         if (PLURAL_PARSE (&args) != 0)
-           goto no_plural;
-         *pluralp = args.res;
-       }
-    }
-  else
-    {
-      /* By default we are using the Germanic form: singular form only
-         for `one', the plural form otherwise.  Yes, this is also what
-         English is using since English is a Germanic language.  */
-    no_plural:
-      INIT_GERMANIC_PLURAL ();
-      *pluralp = &GERMANIC_PLURAL;
-      *npluralsp = 2;
-    }
-}
diff --git a/intl/plural-exp.h b/intl/plural-exp.h
deleted file mode 100644 (file)
index 49e2c5b..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Expression parsing and evaluation for plural form selection.
-   Copyright (C) 2000-2003 Free Software Foundation, Inc.
-   Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _PLURAL_EXP_H
-#define _PLURAL_EXP_H
-
-#ifndef internal_function
-# define internal_function
-#endif
-
-#ifndef attribute_hidden
-# define attribute_hidden
-#endif
-
-
-/* This is the representation of the expressions to determine the
-   plural form.  */
-struct expression
-{
-  int nargs;                   /* Number of arguments.  */
-  enum operator
-  {
-    /* Without arguments:  */
-    var,                       /* The variable "n".  */
-    num,                       /* Decimal number.  */
-    /* Unary operators:  */
-    lnot,                      /* Logical NOT.  */
-    /* Binary operators:  */
-    mult,                      /* Multiplication.  */
-    divide,                    /* Division.  */
-    module,                    /* Modulo operation.  */
-    plus,                      /* Addition.  */
-    minus,                     /* Subtraction.  */
-    less_than,                 /* Comparison.  */
-    greater_than,              /* Comparison.  */
-    less_or_equal,             /* Comparison.  */
-    greater_or_equal,          /* Comparison.  */
-    equal,                     /* Comparison for equality.  */
-    not_equal,                 /* Comparison for inequality.  */
-    land,                      /* Logical AND.  */
-    lor,                       /* Logical OR.  */
-    /* Ternary operators:  */
-    qmop                       /* Question mark operator.  */
-  } operation;
-  union
-  {
-    unsigned long int num;     /* Number value for `num'.  */
-    struct expression *args[3];        /* Up to three arguments.  */
-  } val;
-};
-
-/* This is the data structure to pass information to the parser and get
-   the result in a thread-safe way.  */
-struct parse_args
-{
-  const char *cp;
-  struct expression *res;
-};
-
-
-/* Names for the libintl functions are a problem.  This source code is used
-   1. in the GNU C Library library,
-   2. in the GNU libintl library,
-   3. in the GNU gettext tools.
-   The function names in each situation must be different, to allow for
-   binary incompatible changes in 'struct expression'.  Furthermore,
-   1. in the GNU C Library library, the names have a __ prefix,
-   2.+3. in the GNU libintl library and in the GNU gettext tools, the names
-         must follow ANSI C and not start with __.
-   So we have to distinguish the three cases.  */
-#ifdef _LIBC
-# define FREE_EXPRESSION __gettext_free_exp
-# define PLURAL_PARSE __gettextparse
-# define GERMANIC_PLURAL __gettext_germanic_plural
-# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
-#elif defined (IN_LIBINTL)
-# define FREE_EXPRESSION libintl_gettext_free_exp
-# define PLURAL_PARSE libintl_gettextparse
-# define GERMANIC_PLURAL libintl_gettext_germanic_plural
-# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
-#else
-# define FREE_EXPRESSION free_plural_expression
-# define PLURAL_PARSE parse_plural_expression
-# define GERMANIC_PLURAL germanic_plural
-# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
-#endif
-
-extern void FREE_EXPRESSION (struct expression *exp)
-     internal_function;
-extern int PLURAL_PARSE (void *arg);
-extern struct expression GERMANIC_PLURAL attribute_hidden;
-extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry,
-                                      struct expression **pluralp,
-                                      unsigned long int *npluralsp)
-     internal_function;
-
-#if !defined (_LIBC) && !defined (IN_LIBINTL)
-extern unsigned long int plural_eval (struct expression *pexp,
-                                     unsigned long int n);
-#endif
-
-#endif /* _PLURAL_EXP_H */
diff --git a/intl/plural.c b/intl/plural.c
deleted file mode 100644 (file)
index 535305b..0000000
+++ /dev/null
@@ -1,1490 +0,0 @@
-/* A Bison parser, made from plural.y
-   by GNU bison 1.35.  */
-
-#define YYBISON 1  /* Identify Bison output.  */
-
-#define yyparse __gettextparse
-#define yylex __gettextlex
-#define yyerror __gettexterror
-#define yylval __gettextlval
-#define yychar __gettextchar
-#define yydebug __gettextdebug
-#define yynerrs __gettextnerrs
-# define       EQUOP2  257
-# define       CMPOP2  258
-# define       ADDOP2  259
-# define       MULOP2  260
-# define       NUMBER  261
-
-#line 1 "plural.y"
-
-/* Expression parsing for plural form selection.
-   Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
-   Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* The bison generated parser uses alloca.  AIX 3 forces us to put this
-   declaration at the beginning of the file.  The declaration in bison's
-   skeleton file comes too late.  This must come before <config.h>
-   because <config.h> may include arbitrary system headers.  */
-#if defined _AIX && !defined __GNUC__
- #pragma alloca
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include "plural-exp.h"
-
-/* The main function generated by the parser is called __gettextparse,
-   but we want it to be called PLURAL_PARSE.  */
-#ifndef _LIBC
-# define __gettextparse PLURAL_PARSE
-#endif
-
-#define YYLEX_PARAM    &((struct parse_args *) arg)->cp
-#define YYPARSE_PARAM  arg
-
-#line 49 "plural.y"
-#ifndef YYSTYPE
-typedef union {
-  unsigned long int num;
-  enum operator op;
-  struct expression *exp;
-} yystype;
-# define YYSTYPE yystype
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-#line 55 "plural.y"
-
-/* Prototypes for local functions.  */
-static int yylex (YYSTYPE *lval, const char **pexp);
-static void yyerror (const char *str);
-
-/* Allocation of expressions.  */
-
-static struct expression *
-new_exp (int nargs, enum operator op, struct expression * const *args)
-{
-  int i;
-  struct expression *newp;
-
-  /* If any of the argument could not be malloc'ed, just return NULL.  */
-  for (i = nargs - 1; i >= 0; i--)
-    if (args[i] == NULL)
-      goto fail;
-
-  /* Allocate a new expression.  */
-  newp = (struct expression *) malloc (sizeof (*newp));
-  if (newp != NULL)
-    {
-      newp->nargs = nargs;
-      newp->operation = op;
-      for (i = nargs - 1; i >= 0; i--)
-       newp->val.args[i] = args[i];
-      return newp;
-    }
-
- fail:
-  for (i = nargs - 1; i >= 0; i--)
-    FREE_EXPRESSION (args[i]);
-
-  return NULL;
-}
-
-static inline struct expression *
-new_exp_0 (enum operator op)
-{
-  return new_exp (0, op, NULL);
-}
-
-static inline struct expression *
-new_exp_1 (enum operator op, struct expression *right)
-{
-  struct expression *args[1];
-
-  args[0] = right;
-  return new_exp (1, op, args);
-}
-
-static struct expression *
-new_exp_2 (enum operator op, struct expression *left, struct expression *right)
-{
-  struct expression *args[2];
-
-  args[0] = left;
-  args[1] = right;
-  return new_exp (2, op, args);
-}
-
-static inline struct expression *
-new_exp_3 (enum operator op, struct expression *bexp,
-          struct expression *tbranch, struct expression *fbranch)
-{
-  struct expression *args[3];
-
-  args[0] = bexp;
-  args[1] = tbranch;
-  args[2] = fbranch;
-  return new_exp (3, op, args);
-}
-
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-
-
-#define        YYFINAL         27
-#define        YYFLAG          -32768
-#define        YYNTBASE        16
-
-/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
-#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
-
-/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
-static const char yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    10,     2,     2,     2,     2,     5,     2,
-      14,    15,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    12,     2,
-       2,     2,     2,     3,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      13,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     4,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     6,     7,     8,
-       9,    11
-};
-
-#if YYDEBUG
-static const short yyprhs[] =
-{
-       0,     0,     2,     8,    12,    16,    20,    24,    28,    32,
-      35,    37,    39
-};
-static const short yyrhs[] =
-{
-      17,     0,    17,     3,    17,    12,    17,     0,    17,     4,
-      17,     0,    17,     5,    17,     0,    17,     6,    17,     0,
-      17,     7,    17,     0,    17,     8,    17,     0,    17,     9,
-      17,     0,    10,    17,     0,    13,     0,    11,     0,    14,
-      17,    15,     0
-};
-
-#endif
-
-#if YYDEBUG
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const short yyrline[] =
-{
-       0,   150,   158,   162,   166,   170,   174,   178,   182,   186,
-     190,   194,   199
-};
-#endif
-
-
-#if (YYDEBUG) || defined YYERROR_VERBOSE
-
-/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
-static const char *const yytname[] =
-{
-  "$", "error", "$undefined.", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
-  "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
-  "start", "exp", 0
-};
-#endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const short yyr1[] =
-{
-       0,    16,    17,    17,    17,    17,    17,    17,    17,    17,
-      17,    17,    17
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const short yyr2[] =
-{
-       0,     1,     5,     3,     3,     3,     3,     3,     3,     2,
-       1,     1,     3
-};
-
-/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
-   doesn't specify something else to do.  Zero means the default is an
-   error. */
-static const short yydefact[] =
-{
-       0,     0,    11,    10,     0,     1,     9,     0,     0,     0,
-       0,     0,     0,     0,     0,    12,     0,     3,     4,     5,
-       6,     7,     8,     0,     2,     0,     0,     0
-};
-
-static const short yydefgoto[] =
-{
-      25,     5
-};
-
-static const short yypact[] =
-{
-      -9,    -9,-32768,-32768,    -9,    34,-32768,    11,    -9,    -9,
-      -9,    -9,    -9,    -9,    -9,-32768,    24,    39,    43,    16,
-      26,    -3,-32768,    -9,    34,    21,    53,-32768
-};
-
-static const short yypgoto[] =
-{
-  -32768,    -1
-};
-
-
-#define        YYLAST          53
-
-
-static const short yytable[] =
-{
-       6,     1,     2,     7,     3,     4,    14,    16,    17,    18,
-      19,    20,    21,    22,     8,     9,    10,    11,    12,    13,
-      14,    26,    24,    12,    13,    14,    15,     8,     9,    10,
-      11,    12,    13,    14,    13,    14,    23,     8,     9,    10,
-      11,    12,    13,    14,    10,    11,    12,    13,    14,    11,
-      12,    13,    14,    27
-};
-
-static const short yycheck[] =
-{
-       1,    10,    11,     4,    13,    14,     9,     8,     9,    10,
-      11,    12,    13,    14,     3,     4,     5,     6,     7,     8,
-       9,     0,    23,     7,     8,     9,    15,     3,     4,     5,
-       6,     7,     8,     9,     8,     9,    12,     3,     4,     5,
-       6,     7,     8,     9,     5,     6,     7,     8,     9,     6,
-       7,     8,     9,     0
-};
-#define YYPURE 1
-
-/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/local/share/bison/bison.simple"
-
-/* Skeleton output parser for bison,
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
-   Foundation, Inc.
-
-   This program 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 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, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* This is the parser code that is written into each bison parser when
-   the %semantic_parser declaration is not specified in the grammar.
-   It was written by Richard Stallman by simplifying the hairy parser
-   used when %semantic_parser is specified.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# if YYSTACK_USE_ALLOCA
-#  define YYSTACK_ALLOC alloca
-# else
-#  ifndef YYSTACK_USE_ALLOCA
-#   if defined (alloca) || defined (_ALLOCA_H)
-#    define YYSTACK_ALLOC alloca
-#   else
-#    ifdef __GNUC__
-#     define YYSTACK_ALLOC __builtin_alloca
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning. */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-# else
-#  if defined (__STDC__) || defined (__cplusplus)
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   define YYSIZE_T size_t
-#  endif
-#  define YYSTACK_ALLOC malloc
-#  define YYSTACK_FREE free
-# endif
-#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
-
-
-#if (! defined (yyoverflow) \
-     && (! defined (__cplusplus) \
-        || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  short yyss;
-  YYSTYPE yyvs;
-# if YYLSP_NEEDED
-  YYLTYPE yyls;
-# endif
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# if YYLSP_NEEDED
-#  define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))     \
-      + 2 * YYSTACK_GAP_MAX)
-# else
-#  define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE))                                \
-      + YYSTACK_GAP_MAX)
-# endif
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)             \
-      do                                       \
-       {                                       \
-         register YYSIZE_T yyi;                \
-         for (yyi = 0; yyi < (Count); yyi++)   \
-           (To)[yyi] = (From)[yyi];            \
-       }                                       \
-      while (0)
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)                                       \
-    do                                                                 \
-      {                                                                        \
-       YYSIZE_T yynewbytes;                                            \
-       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
-       Stack = &yyptr->Stack;                                          \
-       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX;   \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        \
-    while (0)
-
-#endif
-
-
-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
-# define YYSIZE_T __SIZE_TYPE__
-#endif
-#if ! defined (YYSIZE_T) && defined (size_t)
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T)
-# if defined (__STDC__) || defined (__cplusplus)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# endif
-#endif
-#if ! defined (YYSIZE_T)
-# define YYSIZE_T unsigned int
-#endif
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                -2
-#define YYEOF          0
-#define YYACCEPT       goto yyacceptlab
-#define YYABORT        goto yyabortlab
-#define YYERROR                goto yyerrlab1
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
-#define YYFAIL         goto yyerrlab
-#define YYRECOVERING()  (!!yyerrstatus)
-#define YYBACKUP(Token, Value)                                 \
-do                                                             \
-  if (yychar == YYEMPTY && yylen == 1)                         \
-    {                                                          \
-      yychar = (Token);                                                \
-      yylval = (Value);                                                \
-      yychar1 = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    {                                                          \
-      yyerror ("syntax error: cannot back up");                        \
-      YYERROR;                                                 \
-    }                                                          \
-while (0)
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-
-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
-   are run).
-
-   When YYLLOC_DEFAULT is run, CURRENT is set the location of the
-   first token.  By default, to implement support for ranges, extend
-   its range to the last symbol.  */
-
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)               \
-   Current.last_line   = Rhs[N].last_line;     \
-   Current.last_column = Rhs[N].last_column;
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#if YYPURE
-# if YYLSP_NEEDED
-#  ifdef YYLEX_PARAM
-#   define YYLEX               yylex (&yylval, &yylloc, YYLEX_PARAM)
-#  else
-#   define YYLEX               yylex (&yylval, &yylloc)
-#  endif
-# else /* !YYLSP_NEEDED */
-#  ifdef YYLEX_PARAM
-#   define YYLEX               yylex (&yylval, YYLEX_PARAM)
-#  else
-#   define YYLEX               yylex (&yylval)
-#  endif
-# endif /* !YYLSP_NEEDED */
-#else /* !YYPURE */
-# define YYLEX                 yylex ()
-#endif /* !YYPURE */
-
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (0)
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-#endif /* !YYDEBUG */
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#if YYMAXDEPTH == 0
-# undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-#ifdef YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined (__GLIBC__) && defined (_STRING_H)
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-static YYSIZE_T
-#   if defined (__STDC__) || defined (__cplusplus)
-yystrlen (const char *yystr)
-#   else
-yystrlen (yystr)
-     const char *yystr;
-#   endif
-{
-  register const char *yys = yystr;
-
-  while (*yys++ != '\0')
-    continue;
-
-  return yys - yystr - 1;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-#   if defined (__STDC__) || defined (__cplusplus)
-yystpcpy (char *yydest, const char *yysrc)
-#   else
-yystpcpy (yydest, yysrc)
-     char *yydest;
-     const char *yysrc;
-#   endif
-{
-  register char *yyd = yydest;
-  register const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-#endif
-
-#line 315 "/usr/local/share/bison/bison.simple"
-
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL
-# else
-#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-# endif
-#else /* !YYPARSE_PARAM */
-# define YYPARSE_PARAM_ARG
-# define YYPARSE_PARAM_DECL
-#endif /* !YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-# ifdef YYPARSE_PARAM
-int yyparse (void *);
-# else
-int yyparse (void);
-# endif
-#endif
-
-/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
-   variables are global, or local to YYPARSE.  */
-
-#define YY_DECL_NON_LSP_VARIABLES                      \
-/* The lookahead symbol.  */                           \
-int yychar;                                            \
-                                                       \
-/* The semantic value of the lookahead symbol. */      \
-YYSTYPE yylval;                                                \
-                                                       \
-/* Number of parse errors so far.  */                  \
-int yynerrs;
-
-#if YYLSP_NEEDED
-# define YY_DECL_VARIABLES                     \
-YY_DECL_NON_LSP_VARIABLES                      \
-                                               \
-/* Location data for the lookahead symbol.  */ \
-YYLTYPE yylloc;
-#else
-# define YY_DECL_VARIABLES                     \
-YY_DECL_NON_LSP_VARIABLES
-#endif
-
-
-/* If nonreentrant, generate the variables here. */
-
-#if !YYPURE
-YY_DECL_VARIABLES
-#endif  /* !YYPURE */
-
-int
-yyparse (YYPARSE_PARAM_ARG)
-     YYPARSE_PARAM_DECL
-{
-  /* If reentrant, generate the variables here. */
-#if YYPURE
-  YY_DECL_VARIABLES
-#endif  /* !YYPURE */
-
-  register int yystate;
-  register int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yychar1 = 0;
-
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack. */
-  short        yyssa[YYINITDEPTH];
-  short *yyss = yyssa;
-  register short *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  register YYSTYPE *yyvsp;
-
-#if YYLSP_NEEDED
-  /* The location stack.  */
-  YYLTYPE yylsa[YYINITDEPTH];
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-#endif
-
-#if YYLSP_NEEDED
-# define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
-#else
-# define YYPOPSTACK   (yyvsp--, yyssp--)
-#endif
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-#if YYLSP_NEEDED
-  YYLTYPE yyloc;
-#endif
-
-  /* When reducing, the number of symbols on the RHS of the reduced
-     rule. */
-  int yylen;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY;            /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  yyssp = yyss;
-  yyvsp = yyvs;
-#if YYLSP_NEEDED
-  yylsp = yyls;
-#endif
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed. so pushing a state here evens the stacks.
-     */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyssp >= yyss + yystacksize - 1)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-       /* Give user a chance to reallocate the stack. Use copies of
-          these so that the &'s don't force the real ones into
-          memory.  */
-       YYSTYPE *yyvs1 = yyvs;
-       short *yyss1 = yyss;
-
-       /* Each stack pointer address is followed by the size of the
-          data in use in that stack, in bytes.  */
-# if YYLSP_NEEDED
-       YYLTYPE *yyls1 = yyls;
-       /* This used to be a conditional around just the two extra args,
-          but that might be undefined if yyoverflow is a macro.  */
-       yyoverflow ("parser stack overflow",
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-                   &yyls1, yysize * sizeof (*yylsp),
-                   &yystacksize);
-       yyls = yyls1;
-# else
-       yyoverflow ("parser stack overflow",
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-                   &yystacksize);
-# endif
-       yyss = yyss1;
-       yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyoverflowlab;
-# else
-      /* Extend the stack our own way.  */
-      if (yystacksize >= YYMAXDEPTH)
-       goto yyoverflowlab;
-      yystacksize *= 2;
-      if (yystacksize > YYMAXDEPTH)
-       yystacksize = YYMAXDEPTH;
-
-      {
-       short *yyss1 = yyss;
-       union yyalloc *yyptr =
-         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-       if (! yyptr)
-         goto yyoverflowlab;
-       YYSTACK_RELOCATE (yyss);
-       YYSTACK_RELOCATE (yyvs);
-# if YYLSP_NEEDED
-       YYSTACK_RELOCATE (yyls);
-# endif
-# undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-#if YYLSP_NEEDED
-      yylsp = yyls + yysize - 1;
-#endif
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                 (unsigned long int) yystacksize));
-
-      if (yyssp >= yyss + yystacksize - 1)
-       YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  goto yybackup;
-
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
-    }
-
-  /* Convert token to internal form (in yychar1) for indexing tables with */
-
-  if (yychar <= 0)             /* This means end of input. */
-    {
-      yychar1 = 0;
-      yychar = YYEOF;          /* Don't call YYLEX any more */
-
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yychar1 = YYTRANSLATE (yychar);
-
-#if YYDEBUG
-     /* We have to keep this `#if YYDEBUG', since we use variables
-       which are defined only if `YYDEBUG' is set.  */
-      if (yydebug)
-       {
-         YYFPRINTF (stderr, "Next token is %d (%s",
-                    yychar, yytname[yychar1]);
-         /* Give the individual parser a way to print the precise
-            meaning of a token, for further debugging info.  */
-# ifdef YYPRINT
-         YYPRINT (stderr, yychar, yylval);
-# endif
-         YYFPRINTF (stderr, ")\n");
-       }
-#endif
-    }
-
-  yyn += yychar1;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
-    goto yydefault;
-
-  yyn = yytable[yyn];
-
-  /* yyn is what to do for this token type in this state.
-     Negative => reduce, -yyn is rule number.
-     Positive => shift, yyn is new state.
-       New state is final state => don't bother to shift,
-       just return success.
-     0, or most negative number => error.  */
-
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrlab;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-  YYDPRINTF ((stderr, "Shifting token %d (%s), ",
-             yychar, yytname[yychar1]));
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  *++yyvsp = yylval;
-#if YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to the semantic value of
-     the lookahead token.  This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-#if YYLSP_NEEDED
-  /* Similarly for the default location.  Let the user run additional
-     commands if for instance locations are ranges.  */
-  yyloc = yylsp[1-yylen];
-  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
-#endif
-
-#if YYDEBUG
-  /* We have to keep this `#if YYDEBUG', since we use variables which
-     are defined only if `YYDEBUG' is set.  */
-  if (yydebug)
-    {
-      int yyi;
-
-      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
-                yyn, yyrline[yyn]);
-
-      /* Print the symbols being reduced, and their result.  */
-      for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
-       YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
-      YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
-
-  switch (yyn) {
-
-case 1:
-#line 151 "plural.y"
-{
-           if (yyvsp[0].exp == NULL)
-             YYABORT;
-           ((struct parse_args *) arg)->res = yyvsp[0].exp;
-         }
-    break;
-case 2:
-#line 159 "plural.y"
-{
-           yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
-         }
-    break;
-case 3:
-#line 163 "plural.y"
-{
-           yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
-         }
-    break;
-case 4:
-#line 167 "plural.y"
-{
-           yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
-         }
-    break;
-case 5:
-#line 171 "plural.y"
-{
-           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
-         }
-    break;
-case 6:
-#line 175 "plural.y"
-{
-           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
-         }
-    break;
-case 7:
-#line 179 "plural.y"
-{
-           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
-         }
-    break;
-case 8:
-#line 183 "plural.y"
-{
-           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
-         }
-    break;
-case 9:
-#line 187 "plural.y"
-{
-           yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
-         }
-    break;
-case 10:
-#line 191 "plural.y"
-{
-           yyval.exp = new_exp_0 (var);
-         }
-    break;
-case 11:
-#line 195 "plural.y"
-{
-           if ((yyval.exp = new_exp_0 (num)) != NULL)
-             yyval.exp->val.num = yyvsp[0].num;
-         }
-    break;
-case 12:
-#line 200 "plural.y"
-{
-           yyval.exp = yyvsp[-1].exp;
-         }
-    break;
-}
-
-#line 705 "/usr/local/share/bison/bison.simple"
-
-
-  yyvsp -= yylen;
-  yyssp -= yylen;
-#if YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
-
-#if YYDEBUG
-  if (yydebug)
-    {
-      short *yyssp1 = yyss - 1;
-      YYFPRINTF (stderr, "state stack now");
-      while (yyssp1 != yyssp)
-       YYFPRINTF (stderr, " %d", *++yyssp1);
-      YYFPRINTF (stderr, "\n");
-    }
-#endif
-
-  *++yyvsp = yyval;
-#if YYLSP_NEEDED
-  *++yylsp = yyloc;
-#endif
-
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTBASE];
-
-  goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (yyn > YYFLAG && yyn < YYLAST)
-       {
-         YYSIZE_T yysize = 0;
-         char *yymsg;
-         int yyx, yycount;
-
-         yycount = 0;
-         /* Start YYX at -YYN if negative to avoid negative indexes in
-            YYCHECK.  */
-         for (yyx = yyn < 0 ? -yyn : 0;
-              yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
-           if (yycheck[yyx + yyn] == yyx)
-             yysize += yystrlen (yytname[yyx]) + 15, yycount++;
-         yysize += yystrlen ("parse error, unexpected ") + 1;
-         yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
-         yymsg = (char *) YYSTACK_ALLOC (yysize);
-         if (yymsg != 0)
-           {
-             char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
-             yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
-
-             if (yycount < 5)
-               {
-                 yycount = 0;
-                 for (yyx = yyn < 0 ? -yyn : 0;
-                      yyx < (int) (sizeof (yytname) / sizeof (char *));
-                      yyx++)
-                   if (yycheck[yyx + yyn] == yyx)
-                     {
-                       const char *yyq = ! yycount ? ", expecting " : " or ";
-                       yyp = yystpcpy (yyp, yyq);
-                       yyp = yystpcpy (yyp, yytname[yyx]);
-                       yycount++;
-                     }
-               }
-             yyerror (yymsg);
-             YYSTACK_FREE (yymsg);
-           }
-         else
-           yyerror ("parse error; also virtual memory exhausted");
-       }
-      else
-#endif /* defined (YYERROR_VERBOSE) */
-       yyerror ("parse error");
-    }
-  goto yyerrlab1;
-
-
-/*--------------------------------------------------.
-| yyerrlab1 -- error raised explicitly by an action |
-`--------------------------------------------------*/
-yyerrlab1:
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-        error, discard it.  */
-
-      /* return failure if at end of input */
-      if (yychar == YYEOF)
-       YYABORT;
-      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
-                 yychar, yytname[yychar1]));
-      yychar = YYEMPTY;
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-
-  yyerrstatus = 3;             /* Each real token shifted decrements this */
-
-  goto yyerrhandle;
-
-
-/*-------------------------------------------------------------------.
-| yyerrdefault -- current state does not do anything special for the |
-| error token.                                                       |
-`-------------------------------------------------------------------*/
-yyerrdefault:
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-
-  /* If its default is to accept any token, ok.  Otherwise pop it.  */
-  yyn = yydefact[yystate];
-  if (yyn)
-    goto yydefault;
-#endif
-
-
-/*---------------------------------------------------------------.
-| yyerrpop -- pop the current state because it cannot handle the |
-| error token                                                    |
-`---------------------------------------------------------------*/
-yyerrpop:
-  if (yyssp == yyss)
-    YYABORT;
-  yyvsp--;
-  yystate = *--yyssp;
-#if YYLSP_NEEDED
-  yylsp--;
-#endif
-
-#if YYDEBUG
-  if (yydebug)
-    {
-      short *yyssp1 = yyss - 1;
-      YYFPRINTF (stderr, "Error: state stack now");
-      while (yyssp1 != yyssp)
-       YYFPRINTF (stderr, " %d", *++yyssp1);
-      YYFPRINTF (stderr, "\n");
-    }
-#endif
-
-/*--------------.
-| yyerrhandle.  |
-`--------------*/
-yyerrhandle:
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yyerrdefault;
-
-  yyn += YYTERROR;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
-    goto yyerrdefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrpop;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrpop;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  YYDPRINTF ((stderr, "Shifting error token, "));
-
-  *++yyvsp = yylval;
-#if YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-/*---------------------------------------------.
-| yyoverflowab -- parser overflow comes here.  |
-`---------------------------------------------*/
-yyoverflowlab:
-  yyerror ("parser stack overflow");
-  yyresult = 2;
-  /* Fall through.  */
-
-yyreturn:
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-  return yyresult;
-}
-#line 205 "plural.y"
-
-
-void
-internal_function
-FREE_EXPRESSION (struct expression *exp)
-{
-  if (exp == NULL)
-    return;
-
-  /* Handle the recursive case.  */
-  switch (exp->nargs)
-    {
-    case 3:
-      FREE_EXPRESSION (exp->val.args[2]);
-      /* FALLTHROUGH */
-    case 2:
-      FREE_EXPRESSION (exp->val.args[1]);
-      /* FALLTHROUGH */
-    case 1:
-      FREE_EXPRESSION (exp->val.args[0]);
-      /* FALLTHROUGH */
-    default:
-      break;
-    }
-
-  free (exp);
-}
-
-
-static int
-yylex (YYSTYPE *lval, const char **pexp)
-{
-  const char *exp = *pexp;
-  int result;
-
-  while (1)
-    {
-      if (exp[0] == '\0')
-       {
-         *pexp = exp;
-         return YYEOF;
-       }
-
-      if (exp[0] != ' ' && exp[0] != '\t')
-       break;
-
-      ++exp;
-    }
-
-  result = *exp++;
-  switch (result)
-    {
-    case '0': case '1': case '2': case '3': case '4':
-    case '5': case '6': case '7': case '8': case '9':
-      {
-       unsigned long int n = result - '0';
-       while (exp[0] >= '0' && exp[0] <= '9')
-         {
-           n *= 10;
-           n += exp[0] - '0';
-           ++exp;
-         }
-       lval->num = n;
-       result = NUMBER;
-      }
-      break;
-
-    case '=':
-      if (exp[0] == '=')
-       {
-         ++exp;
-         lval->op = equal;
-         result = EQUOP2;
-       }
-      else
-       result = YYERRCODE;
-      break;
-
-    case '!':
-      if (exp[0] == '=')
-       {
-         ++exp;
-         lval->op = not_equal;
-         result = EQUOP2;
-       }
-      break;
-
-    case '&':
-    case '|':
-      if (exp[0] == result)
-       ++exp;
-      else
-       result = YYERRCODE;
-      break;
-
-    case '<':
-      if (exp[0] == '=')
-       {
-         ++exp;
-         lval->op = less_or_equal;
-       }
-      else
-       lval->op = less_than;
-      result = CMPOP2;
-      break;
-
-    case '>':
-      if (exp[0] == '=')
-       {
-         ++exp;
-         lval->op = greater_or_equal;
-       }
-      else
-       lval->op = greater_than;
-      result = CMPOP2;
-      break;
-
-    case '*':
-      lval->op = mult;
-      result = MULOP2;
-      break;
-
-    case '/':
-      lval->op = divide;
-      result = MULOP2;
-      break;
-
-    case '%':
-      lval->op = module;
-      result = MULOP2;
-      break;
-
-    case '+':
-      lval->op = plus;
-      result = ADDOP2;
-      break;
-
-    case '-':
-      lval->op = minus;
-      result = ADDOP2;
-      break;
-
-    case 'n':
-    case '?':
-    case ':':
-    case '(':
-    case ')':
-      /* Nothing, just return the character.  */
-      break;
-
-    case ';':
-    case '\n':
-    case '\0':
-      /* Be safe and let the user call this function again.  */
-      --exp;
-      result = YYEOF;
-      break;
-
-    default:
-      result = YYERRCODE;
-#if YYDEBUG != 0
-      --exp;
-#endif
-      break;
-    }
-
-  *pexp = exp;
-
-  return result;
-}
-
-
-static void
-yyerror (const char *str)
-{
-  /* Do nothing.  We don't print error messages here.  */
-}
diff --git a/intl/plural.y b/intl/plural.y
deleted file mode 100644 (file)
index 4d33bd7..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-%{
-/* Expression parsing for plural form selection.
-   Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
-   Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* The bison generated parser uses alloca.  AIX 3 forces us to put this
-   declaration at the beginning of the file.  The declaration in bison's
-   skeleton file comes too late.  This must come before <config.h>
-   because <config.h> may include arbitrary system headers.  */
-#if defined _AIX && !defined __GNUC__
- #pragma alloca
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include "plural-exp.h"
-
-/* The main function generated by the parser is called __gettextparse,
-   but we want it to be called PLURAL_PARSE.  */
-#ifndef _LIBC
-# define __gettextparse PLURAL_PARSE
-#endif
-
-#define YYLEX_PARAM    &((struct parse_args *) arg)->cp
-#define YYPARSE_PARAM  arg
-%}
-%pure_parser
-%expect 7
-
-%union {
-  unsigned long int num;
-  enum operator op;
-  struct expression *exp;
-}
-
-%{
-/* Prototypes for local functions.  */
-static int yylex (YYSTYPE *lval, const char **pexp);
-static void yyerror (const char *str);
-
-/* Allocation of expressions.  */
-
-static struct expression *
-new_exp (int nargs, enum operator op, struct expression * const *args)
-{
-  int i;
-  struct expression *newp;
-
-  /* If any of the argument could not be malloc'ed, just return NULL.  */
-  for (i = nargs - 1; i >= 0; i--)
-    if (args[i] == NULL)
-      goto fail;
-
-  /* Allocate a new expression.  */
-  newp = (struct expression *) malloc (sizeof (*newp));
-  if (newp != NULL)
-    {
-      newp->nargs = nargs;
-      newp->operation = op;
-      for (i = nargs - 1; i >= 0; i--)
-       newp->val.args[i] = args[i];
-      return newp;
-    }
-
- fail:
-  for (i = nargs - 1; i >= 0; i--)
-    FREE_EXPRESSION (args[i]);
-
-  return NULL;
-}
-
-static inline struct expression *
-new_exp_0 (enum operator op)
-{
-  return new_exp (0, op, NULL);
-}
-
-static inline struct expression *
-new_exp_1 (enum operator op, struct expression *right)
-{
-  struct expression *args[1];
-
-  args[0] = right;
-  return new_exp (1, op, args);
-}
-
-static struct expression *
-new_exp_2 (enum operator op, struct expression *left, struct expression *right)
-{
-  struct expression *args[2];
-
-  args[0] = left;
-  args[1] = right;
-  return new_exp (2, op, args);
-}
-
-static inline struct expression *
-new_exp_3 (enum operator op, struct expression *bexp,
-          struct expression *tbranch, struct expression *fbranch)
-{
-  struct expression *args[3];
-
-  args[0] = bexp;
-  args[1] = tbranch;
-  args[2] = fbranch;
-  return new_exp (3, op, args);
-}
-
-%}
-
-/* This declares that all operators have the same associativity and the
-   precedence order as in C.  See [Harbison, Steele: C, A Reference Manual].
-   There is no unary minus and no bitwise operators.
-   Operators with the same syntactic behaviour have been merged into a single
-   token, to save space in the array generated by bison.  */
-%right '?'             /*   ?          */
-%left '|'              /*   ||         */
-%left '&'              /*   &&         */
-%left EQUOP2           /*   == !=      */
-%left CMPOP2           /*   < > <= >=  */
-%left ADDOP2           /*   + -        */
-%left MULOP2           /*   * / %      */
-%right '!'             /*   !          */
-
-%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
-%token <num> NUMBER
-%type <exp> exp
-
-%%
-
-start:   exp
-         {
-           if ($1 == NULL)
-             YYABORT;
-           ((struct parse_args *) arg)->res = $1;
-         }
-       ;
-
-exp:     exp '?' exp ':' exp
-         {
-           $$ = new_exp_3 (qmop, $1, $3, $5);
-         }
-       | exp '|' exp
-         {
-           $$ = new_exp_2 (lor, $1, $3);
-         }
-       | exp '&' exp
-         {
-           $$ = new_exp_2 (land, $1, $3);
-         }
-       | exp EQUOP2 exp
-         {
-           $$ = new_exp_2 ($2, $1, $3);
-         }
-       | exp CMPOP2 exp
-         {
-           $$ = new_exp_2 ($2, $1, $3);
-         }
-       | exp ADDOP2 exp
-         {
-           $$ = new_exp_2 ($2, $1, $3);
-         }
-       | exp MULOP2 exp
-         {
-           $$ = new_exp_2 ($2, $1, $3);
-         }
-       | '!' exp
-         {
-           $$ = new_exp_1 (lnot, $2);
-         }
-       | 'n'
-         {
-           $$ = new_exp_0 (var);
-         }
-       | NUMBER
-         {
-           if (($$ = new_exp_0 (num)) != NULL)
-             $$->val.num = $1;
-         }
-       | '(' exp ')'
-         {
-           $$ = $2;
-         }
-       ;
-
-%%
-
-void
-internal_function
-FREE_EXPRESSION (struct expression *exp)
-{
-  if (exp == NULL)
-    return;
-
-  /* Handle the recursive case.  */
-  switch (exp->nargs)
-    {
-    case 3:
-      FREE_EXPRESSION (exp->val.args[2]);
-      /* FALLTHROUGH */
-    case 2:
-      FREE_EXPRESSION (exp->val.args[1]);
-      /* FALLTHROUGH */
-    case 1:
-      FREE_EXPRESSION (exp->val.args[0]);
-      /* FALLTHROUGH */
-    default:
-      break;
-    }
-
-  free (exp);
-}
-
-
-static int
-yylex (YYSTYPE *lval, const char **pexp)
-{
-  const char *exp = *pexp;
-  int result;
-
-  while (1)
-    {
-      if (exp[0] == '\0')
-       {
-         *pexp = exp;
-         return YYEOF;
-       }
-
-      if (exp[0] != ' ' && exp[0] != '\t')
-       break;
-
-      ++exp;
-    }
-
-  result = *exp++;
-  switch (result)
-    {
-    case '0': case '1': case '2': case '3': case '4':
-    case '5': case '6': case '7': case '8': case '9':
-      {
-       unsigned long int n = result - '0';
-       while (exp[0] >= '0' && exp[0] <= '9')
-         {
-           n *= 10;
-           n += exp[0] - '0';
-           ++exp;
-         }
-       lval->num = n;
-       result = NUMBER;
-      }
-      break;
-
-    case '=':
-      if (exp[0] == '=')
-       {
-         ++exp;
-         lval->op = equal;
-         result = EQUOP2;
-       }
-      else
-       result = YYERRCODE;
-      break;
-
-    case '!':
-      if (exp[0] == '=')
-       {
-         ++exp;
-         lval->op = not_equal;
-         result = EQUOP2;
-       }
-      break;
-
-    case '&':
-    case '|':
-      if (exp[0] == result)
-       ++exp;
-      else
-       result = YYERRCODE;
-      break;
-
-    case '<':
-      if (exp[0] == '=')
-       {
-         ++exp;
-         lval->op = less_or_equal;
-       }
-      else
-       lval->op = less_than;
-      result = CMPOP2;
-      break;
-
-    case '>':
-      if (exp[0] == '=')
-       {
-         ++exp;
-         lval->op = greater_or_equal;
-       }
-      else
-       lval->op = greater_than;
-      result = CMPOP2;
-      break;
-
-    case '*':
-      lval->op = mult;
-      result = MULOP2;
-      break;
-
-    case '/':
-      lval->op = divide;
-      result = MULOP2;
-      break;
-
-    case '%':
-      lval->op = module;
-      result = MULOP2;
-      break;
-
-    case '+':
-      lval->op = plus;
-      result = ADDOP2;
-      break;
-
-    case '-':
-      lval->op = minus;
-      result = ADDOP2;
-      break;
-
-    case 'n':
-    case '?':
-    case ':':
-    case '(':
-    case ')':
-      /* Nothing, just return the character.  */
-      break;
-
-    case ';':
-    case '\n':
-    case '\0':
-      /* Be safe and let the user call this function again.  */
-      --exp;
-      result = YYEOF;
-      break;
-
-    default:
-      result = YYERRCODE;
-#if YYDEBUG != 0
-      --exp;
-#endif
-      break;
-    }
-
-  *pexp = exp;
-
-  return result;
-}
-
-
-static void
-yyerror (const char *str)
-{
-  /* Do nothing.  We don't print error messages here.  */
-}
diff --git a/intl/printf-args.c b/intl/printf-args.c
deleted file mode 100644 (file)
index f6f3219..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Decomposed printf argument list.
-   Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* Specification.  */
-#include "printf-args.h"
-
-#ifdef STATIC
-STATIC
-#endif
-int
-printf_fetchargs (va_list args, arguments *a)
-{
-  size_t i;
-  argument *ap;
-
-  for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
-    switch (ap->type)
-      {
-      case TYPE_SCHAR:
-       ap->a.a_schar = va_arg (args, /*signed char*/ int);
-       break;
-      case TYPE_UCHAR:
-       ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
-       break;
-      case TYPE_SHORT:
-       ap->a.a_short = va_arg (args, /*short*/ int);
-       break;
-      case TYPE_USHORT:
-       ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
-       break;
-      case TYPE_INT:
-       ap->a.a_int = va_arg (args, int);
-       break;
-      case TYPE_UINT:
-       ap->a.a_uint = va_arg (args, unsigned int);
-       break;
-      case TYPE_LONGINT:
-       ap->a.a_longint = va_arg (args, long int);
-       break;
-      case TYPE_ULONGINT:
-       ap->a.a_ulongint = va_arg (args, unsigned long int);
-       break;
-#ifdef HAVE_LONG_LONG
-      case TYPE_LONGLONGINT:
-       ap->a.a_longlongint = va_arg (args, long long int);
-       break;
-      case TYPE_ULONGLONGINT:
-       ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
-       break;
-#endif
-      case TYPE_DOUBLE:
-       ap->a.a_double = va_arg (args, double);
-       break;
-#ifdef HAVE_LONG_DOUBLE
-      case TYPE_LONGDOUBLE:
-       ap->a.a_longdouble = va_arg (args, long double);
-       break;
-#endif
-      case TYPE_CHAR:
-       ap->a.a_char = va_arg (args, int);
-       break;
-#ifdef HAVE_WINT_T
-      case TYPE_WIDE_CHAR:
-       ap->a.a_wide_char = va_arg (args, wint_t);
-       break;
-#endif
-      case TYPE_STRING:
-       ap->a.a_string = va_arg (args, const char *);
-       break;
-#ifdef HAVE_WCHAR_T
-      case TYPE_WIDE_STRING:
-       ap->a.a_wide_string = va_arg (args, const wchar_t *);
-       break;
-#endif
-      case TYPE_POINTER:
-       ap->a.a_pointer = va_arg (args, void *);
-       break;
-      case TYPE_COUNT_SCHAR_POINTER:
-       ap->a.a_count_schar_pointer = va_arg (args, signed char *);
-       break;
-      case TYPE_COUNT_SHORT_POINTER:
-       ap->a.a_count_short_pointer = va_arg (args, short *);
-       break;
-      case TYPE_COUNT_INT_POINTER:
-       ap->a.a_count_int_pointer = va_arg (args, int *);
-       break;
-      case TYPE_COUNT_LONGINT_POINTER:
-       ap->a.a_count_longint_pointer = va_arg (args, long int *);
-       break;
-#ifdef HAVE_LONG_LONG
-      case TYPE_COUNT_LONGLONGINT_POINTER:
-       ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
-       break;
-#endif
-      default:
-       /* Unknown type.  */
-       return -1;
-      }
-  return 0;
-}
diff --git a/intl/printf-args.h b/intl/printf-args.h
deleted file mode 100644 (file)
index f11e64c..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Decomposed printf argument list.
-   Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _PRINTF_ARGS_H
-#define _PRINTF_ARGS_H
-
-/* Get size_t.  */
-#include <stddef.h>
-
-/* Get wchar_t.  */
-#ifdef HAVE_WCHAR_T
-# include <stddef.h>
-#endif
-
-/* Get wint_t.  */
-#ifdef HAVE_WINT_T
-# include <wchar.h>
-#endif
-
-/* Get va_list.  */
-#include <stdarg.h>
-
-
-/* Argument types */
-typedef enum
-{
-  TYPE_NONE,
-  TYPE_SCHAR,
-  TYPE_UCHAR,
-  TYPE_SHORT,
-  TYPE_USHORT,
-  TYPE_INT,
-  TYPE_UINT,
-  TYPE_LONGINT,
-  TYPE_ULONGINT,
-#ifdef HAVE_LONG_LONG
-  TYPE_LONGLONGINT,
-  TYPE_ULONGLONGINT,
-#endif
-  TYPE_DOUBLE,
-#ifdef HAVE_LONG_DOUBLE
-  TYPE_LONGDOUBLE,
-#endif
-  TYPE_CHAR,
-#ifdef HAVE_WINT_T
-  TYPE_WIDE_CHAR,
-#endif
-  TYPE_STRING,
-#ifdef HAVE_WCHAR_T
-  TYPE_WIDE_STRING,
-#endif
-  TYPE_POINTER,
-  TYPE_COUNT_SCHAR_POINTER,
-  TYPE_COUNT_SHORT_POINTER,
-  TYPE_COUNT_INT_POINTER,
-  TYPE_COUNT_LONGINT_POINTER
-#ifdef HAVE_LONG_LONG
-, TYPE_COUNT_LONGLONGINT_POINTER
-#endif
-} arg_type;
-
-/* Polymorphic argument */
-typedef struct
-{
-  arg_type type;
-  union
-  {
-    signed char                        a_schar;
-    unsigned char              a_uchar;
-    short                      a_short;
-    unsigned short             a_ushort;
-    int                                a_int;
-    unsigned int               a_uint;
-    long int                   a_longint;
-    unsigned long int          a_ulongint;
-#ifdef HAVE_LONG_LONG
-    long long int              a_longlongint;
-    unsigned long long int     a_ulonglongint;
-#endif
-    float                      a_float;
-    double                     a_double;
-#ifdef HAVE_LONG_DOUBLE
-    long double                        a_longdouble;
-#endif
-    int                                a_char;
-#ifdef HAVE_WINT_T
-    wint_t                     a_wide_char;
-#endif
-    const char*                        a_string;
-#ifdef HAVE_WCHAR_T
-    const wchar_t*             a_wide_string;
-#endif
-    void*                      a_pointer;
-    signed char *              a_count_schar_pointer;
-    short *                    a_count_short_pointer;
-    int *                      a_count_int_pointer;
-    long int *                 a_count_longint_pointer;
-#ifdef HAVE_LONG_LONG
-    long long int *            a_count_longlongint_pointer;
-#endif
-  }
-  a;
-}
-argument;
-
-typedef struct
-{
-  size_t count;
-  argument *arg;
-}
-arguments;
-
-
-/* Fetch the arguments, putting them into a. */
-#ifdef STATIC
-STATIC
-#else
-extern
-#endif
-int printf_fetchargs (va_list args, arguments *a);
-
-#endif /* _PRINTF_ARGS_H */
diff --git a/intl/printf-parse.c b/intl/printf-parse.c
deleted file mode 100644 (file)
index 416deda..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-/* Formatted output to strings.
-   Copyright (C) 1999-2000, 2002-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* Specification.  */
-#if WIDE_CHAR_VERSION
-# include "wprintf-parse.h"
-#else
-# include "printf-parse.h"
-#endif
-
-/* Get size_t, NULL.  */
-#include <stddef.h>
-
-/* Get intmax_t.  */
-#if HAVE_STDINT_H_WITH_UINTMAX
-# include <stdint.h>
-#endif
-#if HAVE_INTTYPES_H_WITH_UINTMAX
-# include <inttypes.h>
-#endif
-
-/* malloc(), realloc(), free().  */
-#include <stdlib.h>
-
-/* Checked size_t computations.  */
-#include "xsize.h"
-
-#if WIDE_CHAR_VERSION
-# define PRINTF_PARSE wprintf_parse
-# define CHAR_T wchar_t
-# define DIRECTIVE wchar_t_directive
-# define DIRECTIVES wchar_t_directives
-#else
-# define PRINTF_PARSE printf_parse
-# define CHAR_T char
-# define DIRECTIVE char_directive
-# define DIRECTIVES char_directives
-#endif
-
-#ifdef STATIC
-STATIC
-#endif
-int
-PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
-{
-  const CHAR_T *cp = format;           /* pointer into format */
-  size_t arg_posn = 0;         /* number of regular arguments consumed */
-  size_t d_allocated;                  /* allocated elements of d->dir */
-  size_t a_allocated;                  /* allocated elements of a->arg */
-  size_t max_width_length = 0;
-  size_t max_precision_length = 0;
-
-  d->count = 0;
-  d_allocated = 1;
-  d->dir = malloc (d_allocated * sizeof (DIRECTIVE));
-  if (d->dir == NULL)
-    /* Out of memory.  */
-    return -1;
-
-  a->count = 0;
-  a_allocated = 0;
-  a->arg = NULL;
-
-#define REGISTER_ARG(_index_,_type_) \
-  {                                                                    \
-    size_t n = (_index_);                                              \
-    if (n >= a_allocated)                                              \
-      {                                                                        \
-       size_t memory_size;                                             \
-       argument *memory;                                               \
-                                                                       \
-       a_allocated = xtimes (a_allocated, 2);                          \
-       if (a_allocated <= n)                                           \
-         a_allocated = xsum (n, 1);                                    \
-       memory_size = xtimes (a_allocated, sizeof (argument));          \
-       if (size_overflow_p (memory_size))                              \
-         /* Overflow, would lead to out of memory.  */                 \
-         goto error;                                                   \
-       memory = (a->arg                                                \
-                 ? realloc (a->arg, memory_size)                       \
-                 : malloc (memory_size));                              \
-       if (memory == NULL)                                             \
-         /* Out of memory.  */                                         \
-         goto error;                                                   \
-       a->arg = memory;                                                \
-      }                                                                        \
-    while (a->count <= n)                                              \
-      a->arg[a->count++].type = TYPE_NONE;                             \
-    if (a->arg[n].type == TYPE_NONE)                                   \
-      a->arg[n].type = (_type_);                                       \
-    else if (a->arg[n].type != (_type_))                               \
-      /* Ambiguous type for positional argument.  */                   \
-      goto error;                                                      \
-  }
-
-  while (*cp != '\0')
-    {
-      CHAR_T c = *cp++;
-      if (c == '%')
-       {
-         size_t arg_index = ARG_NONE;
-         DIRECTIVE *dp = &d->dir[d->count];/* pointer to next directive */
-
-         /* Initialize the next directive.  */
-         dp->dir_start = cp - 1;
-         dp->flags = 0;
-         dp->width_start = NULL;
-         dp->width_end = NULL;
-         dp->width_arg_index = ARG_NONE;
-         dp->precision_start = NULL;
-         dp->precision_end = NULL;
-         dp->precision_arg_index = ARG_NONE;
-         dp->arg_index = ARG_NONE;
-
-         /* Test for positional argument.  */
-         if (*cp >= '0' && *cp <= '9')
-           {
-             const CHAR_T *np;
-
-             for (np = cp; *np >= '0' && *np <= '9'; np++)
-               ;
-             if (*np == '$')
-               {
-                 size_t n = 0;
-
-                 for (np = cp; *np >= '0' && *np <= '9'; np++)
-                   n = xsum (xtimes (n, 10), *np - '0');
-                 if (n == 0)
-                   /* Positional argument 0.  */
-                   goto error;
-                 if (size_overflow_p (n))
-                   /* n too large, would lead to out of memory later.  */
-                   goto error;
-                 arg_index = n - 1;
-                 cp = np + 1;
-               }
-           }
-
-         /* Read the flags.  */
-         for (;;)
-           {
-             if (*cp == '\'')
-               {
-                 dp->flags |= FLAG_GROUP;
-                 cp++;
-               }
-             else if (*cp == '-')
-               {
-                 dp->flags |= FLAG_LEFT;
-                 cp++;
-               }
-             else if (*cp == '+')
-               {
-                 dp->flags |= FLAG_SHOWSIGN;
-                 cp++;
-               }
-             else if (*cp == ' ')
-               {
-                 dp->flags |= FLAG_SPACE;
-                 cp++;
-               }
-             else if (*cp == '#')
-               {
-                 dp->flags |= FLAG_ALT;
-                 cp++;
-               }
-             else if (*cp == '0')
-               {
-                 dp->flags |= FLAG_ZERO;
-                 cp++;
-               }
-             else
-               break;
-           }
-
-         /* Parse the field width.  */
-         if (*cp == '*')
-           {
-             dp->width_start = cp;
-             cp++;
-             dp->width_end = cp;
-             if (max_width_length < 1)
-               max_width_length = 1;
-
-             /* Test for positional argument.  */
-             if (*cp >= '0' && *cp <= '9')
-               {
-                 const CHAR_T *np;
-
-                 for (np = cp; *np >= '0' && *np <= '9'; np++)
-                   ;
-                 if (*np == '$')
-                   {
-                     size_t n = 0;
-
-                     for (np = cp; *np >= '0' && *np <= '9'; np++)
-                       n = xsum (xtimes (n, 10), *np - '0');
-                     if (n == 0)
-                       /* Positional argument 0.  */
-                       goto error;
-                     if (size_overflow_p (n))
-                       /* n too large, would lead to out of memory later.  */
-                       goto error;
-                     dp->width_arg_index = n - 1;
-                     cp = np + 1;
-                   }
-               }
-             if (dp->width_arg_index == ARG_NONE)
-               {
-                 dp->width_arg_index = arg_posn++;
-                 if (dp->width_arg_index == ARG_NONE)
-                   /* arg_posn wrapped around.  */
-                   goto error;
-               }
-             REGISTER_ARG (dp->width_arg_index, TYPE_INT);
-           }
-         else if (*cp >= '0' && *cp <= '9')
-           {
-             size_t width_length;
-
-             dp->width_start = cp;
-             for (; *cp >= '0' && *cp <= '9'; cp++)
-               ;
-             dp->width_end = cp;
-             width_length = dp->width_end - dp->width_start;
-             if (max_width_length < width_length)
-               max_width_length = width_length;
-           }
-
-         /* Parse the precision.  */
-         if (*cp == '.')
-           {
-             cp++;
-             if (*cp == '*')
-               {
-                 dp->precision_start = cp - 1;
-                 cp++;
-                 dp->precision_end = cp;
-                 if (max_precision_length < 2)
-                   max_precision_length = 2;
-
-                 /* Test for positional argument.  */
-                 if (*cp >= '0' && *cp <= '9')
-                   {
-                     const CHAR_T *np;
-
-                     for (np = cp; *np >= '0' && *np <= '9'; np++)
-                       ;
-                     if (*np == '$')
-                       {
-                         size_t n = 0;
-
-                         for (np = cp; *np >= '0' && *np <= '9'; np++)
-                           n = xsum (xtimes (n, 10), *np - '0');
-                         if (n == 0)
-                           /* Positional argument 0.  */
-                           goto error;
-                         if (size_overflow_p (n))
-                           /* n too large, would lead to out of memory
-                              later.  */
-                           goto error;
-                         dp->precision_arg_index = n - 1;
-                         cp = np + 1;
-                       }
-                   }
-                 if (dp->precision_arg_index == ARG_NONE)
-                   {
-                     dp->precision_arg_index = arg_posn++;
-                     if (dp->precision_arg_index == ARG_NONE)
-                       /* arg_posn wrapped around.  */
-                       goto error;
-                   }
-                 REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
-               }
-             else
-               {
-                 size_t precision_length;
-
-                 dp->precision_start = cp - 1;
-                 for (; *cp >= '0' && *cp <= '9'; cp++)
-                   ;
-                 dp->precision_end = cp;
-                 precision_length = dp->precision_end - dp->precision_start;
-                 if (max_precision_length < precision_length)
-                   max_precision_length = precision_length;
-               }
-           }
-
-         {
-           arg_type type;
-
-           /* Parse argument type/size specifiers.  */
-           {
-             int flags = 0;
-
-             for (;;)
-               {
-                 if (*cp == 'h')
-                   {
-                     flags |= (1 << (flags & 1));
-                     cp++;
-                   }
-                 else if (*cp == 'L')
-                   {
-                     flags |= 4;
-                     cp++;
-                   }
-                 else if (*cp == 'l')
-                   {
-                     flags += 8;
-                     cp++;
-                   }
-#ifdef HAVE_INTMAX_T
-                 else if (*cp == 'j')
-                   {
-                     if (sizeof (intmax_t) > sizeof (long))
-                       {
-                         /* intmax_t = long long */
-                         flags += 16;
-                       }
-                     else if (sizeof (intmax_t) > sizeof (int))
-                       {
-                         /* intmax_t = long */
-                         flags += 8;
-                       }
-                     cp++;
-                   }
-#endif
-                 else if (*cp == 'z' || *cp == 'Z')
-                   {
-                     /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
-                        because the warning facility in gcc-2.95.2 understands
-                        only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784).  */
-                     if (sizeof (size_t) > sizeof (long))
-                       {
-                         /* size_t = long long */
-                         flags += 16;
-                       }
-                     else if (sizeof (size_t) > sizeof (int))
-                       {
-                         /* size_t = long */
-                         flags += 8;
-                       }
-                     cp++;
-                   }
-                 else if (*cp == 't')
-                   {
-                     if (sizeof (ptrdiff_t) > sizeof (long))
-                       {
-                         /* ptrdiff_t = long long */
-                         flags += 16;
-                       }
-                     else if (sizeof (ptrdiff_t) > sizeof (int))
-                       {
-                         /* ptrdiff_t = long */
-                         flags += 8;
-                       }
-                     cp++;
-                   }
-                 else
-                   break;
-               }
-
-             /* Read the conversion character.  */
-             c = *cp++;
-             switch (c)
-               {
-               case 'd': case 'i':
-#ifdef HAVE_LONG_LONG
-                 if (flags >= 16 || (flags & 4))
-                   type = TYPE_LONGLONGINT;
-                 else
-#endif
-                 if (flags >= 8)
-                   type = TYPE_LONGINT;
-                 else if (flags & 2)
-                   type = TYPE_SCHAR;
-                 else if (flags & 1)
-                   type = TYPE_SHORT;
-                 else
-                   type = TYPE_INT;
-                 break;
-               case 'o': case 'u': case 'x': case 'X':
-#ifdef HAVE_LONG_LONG
-                 if (flags >= 16 || (flags & 4))
-                   type = TYPE_ULONGLONGINT;
-                 else
-#endif
-                 if (flags >= 8)
-                   type = TYPE_ULONGINT;
-                 else if (flags & 2)
-                   type = TYPE_UCHAR;
-                 else if (flags & 1)
-                   type = TYPE_USHORT;
-                 else
-                   type = TYPE_UINT;
-                 break;
-               case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
-               case 'a': case 'A':
-#ifdef HAVE_LONG_DOUBLE
-                 if (flags >= 16 || (flags & 4))
-                   type = TYPE_LONGDOUBLE;
-                 else
-#endif
-                 type = TYPE_DOUBLE;
-                 break;
-               case 'c':
-                 if (flags >= 8)
-#ifdef HAVE_WINT_T
-                   type = TYPE_WIDE_CHAR;
-#else
-                   goto error;
-#endif
-                 else
-                   type = TYPE_CHAR;
-                 break;
-#ifdef HAVE_WINT_T
-               case 'C':
-                 type = TYPE_WIDE_CHAR;
-                 c = 'c';
-                 break;
-#endif
-               case 's':
-                 if (flags >= 8)
-#ifdef HAVE_WCHAR_T
-                   type = TYPE_WIDE_STRING;
-#else
-                   goto error;
-#endif
-                 else
-                   type = TYPE_STRING;
-                 break;
-#ifdef HAVE_WCHAR_T
-               case 'S':
-                 type = TYPE_WIDE_STRING;
-                 c = 's';
-                 break;
-#endif
-               case 'p':
-                 type = TYPE_POINTER;
-                 break;
-               case 'n':
-#ifdef HAVE_LONG_LONG
-                 if (flags >= 16 || (flags & 4))
-                   type = TYPE_COUNT_LONGLONGINT_POINTER;
-                 else
-#endif
-                 if (flags >= 8)
-                   type = TYPE_COUNT_LONGINT_POINTER;
-                 else if (flags & 2)
-                   type = TYPE_COUNT_SCHAR_POINTER;
-                 else if (flags & 1)
-                   type = TYPE_COUNT_SHORT_POINTER;
-                 else
-                   type = TYPE_COUNT_INT_POINTER;
-                 break;
-               case '%':
-                 type = TYPE_NONE;
-                 break;
-               default:
-                 /* Unknown conversion character.  */
-                 goto error;
-               }
-           }
-
-           if (type != TYPE_NONE)
-             {
-               dp->arg_index = arg_index;
-               if (dp->arg_index == ARG_NONE)
-                 {
-                   dp->arg_index = arg_posn++;
-                   if (dp->arg_index == ARG_NONE)
-                     /* arg_posn wrapped around.  */
-                     goto error;
-                 }
-               REGISTER_ARG (dp->arg_index, type);
-             }
-           dp->conversion = c;
-           dp->dir_end = cp;
-         }
-
-         d->count++;
-         if (d->count >= d_allocated)
-           {
-             size_t memory_size;
-             DIRECTIVE *memory;
-
-             d_allocated = xtimes (d_allocated, 2);
-             memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
-             if (size_overflow_p (memory_size))
-               /* Overflow, would lead to out of memory.  */
-               goto error;
-             memory = realloc (d->dir, memory_size);
-             if (memory == NULL)
-               /* Out of memory.  */
-               goto error;
-             d->dir = memory;
-           }
-       }
-    }
-  d->dir[d->count].dir_start = cp;
-
-  d->max_width_length = max_width_length;
-  d->max_precision_length = max_precision_length;
-  return 0;
-
-error:
-  free (a->arg);
-  free (d->dir);
-  return -1;
-}
-
-#undef DIRECTIVES
-#undef DIRECTIVE
-#undef CHAR_T
-#undef PRINTF_PARSE
diff --git a/intl/printf-parse.h b/intl/printf-parse.h
deleted file mode 100644 (file)
index 8aec50e..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Parse printf format string.
-   Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _PRINTF_PARSE_H
-#define _PRINTF_PARSE_H
-
-#include "printf-args.h"
-
-
-/* Flags */
-#define FLAG_GROUP      1      /* ' flag */
-#define FLAG_LEFT       2      /* - flag */
-#define FLAG_SHOWSIGN   4      /* + flag */
-#define FLAG_SPACE      8      /* space flag */
-#define FLAG_ALT       16      /* # flag */
-#define FLAG_ZERO      32
-
-/* arg_index value indicating that no argument is consumed.  */
-#define ARG_NONE       (~(size_t)0)
-
-/* A parsed directive.  */
-typedef struct
-{
-  const char* dir_start;
-  const char* dir_end;
-  int flags;
-  const char* width_start;
-  const char* width_end;
-  size_t width_arg_index;
-  const char* precision_start;
-  const char* precision_end;
-  size_t precision_arg_index;
-  char conversion; /* d i o u x X f e E g G c s p n U % but not C S */
-  size_t arg_index;
-}
-char_directive;
-
-/* A parsed format string.  */
-typedef struct
-{
-  size_t count;
-  char_directive *dir;
-  size_t max_width_length;
-  size_t max_precision_length;
-}
-char_directives;
-
-
-/* Parses the format string.  Fills in the number N of directives, and fills
-   in directives[0], ..., directives[N-1], and sets directives[N].dir_start
-   to the end of the format string.  Also fills in the arg_type fields of the
-   arguments and the needed count of arguments.  */
-#ifdef STATIC
-STATIC
-#else
-extern
-#endif
-int printf_parse (const char *format, char_directives *d, arguments *a);
-
-#endif /* _PRINTF_PARSE_H */
diff --git a/intl/printf.c b/intl/printf.c
deleted file mode 100644 (file)
index 878646c..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-/* Formatted output to strings, using POSIX/XSI format strings with positions.
-   Copyright (C) 2003 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2003.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# ifdef _MSC_VER
-#  include <malloc.h>
-#  define alloca _alloca
-# else
-#  if defined HAVE_ALLOCA_H || defined _LIBC
-#   include <alloca.h>
-#  else
-#   ifdef _AIX
- #pragma alloca
-#   else
-#    ifndef alloca
-char *alloca ();
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-#include <stdio.h>
-
-#if !HAVE_POSIX_PRINTF
-
-#include <stdlib.h>
-#include <string.h>
-
-/* When building a DLL, we must export some functions.  Note that because
-   the functions are only defined for binary backward compatibility, we
-   don't need to use __declspec(dllimport) in any case.  */
-#if defined _MSC_VER && BUILDING_DLL
-# define DLL_EXPORTED __declspec(dllexport)
-#else
-# define DLL_EXPORTED
-#endif
-
-#define STATIC static
-
-/* Define auxiliary functions declared in "printf-args.h".  */
-#include "printf-args.c"
-
-/* Define auxiliary functions declared in "printf-parse.h".  */
-#include "printf-parse.c"
-
-/* Define functions declared in "vasnprintf.h".  */
-#define vasnprintf libintl_vasnprintf
-#include "vasnprintf.c"
-#if 0 /* not needed */
-#define asnprintf libintl_asnprintf
-#include "asnprintf.c"
-#endif
-
-DLL_EXPORTED
-int
-libintl_vfprintf (FILE *stream, const char *format, va_list args)
-{
-  if (strchr (format, '$') == NULL)
-    return vfprintf (stream, format, args);
-  else
-    {
-      size_t length;
-      char *result = libintl_vasnprintf (NULL, &length, format, args);
-      int retval = -1;
-      if (result != NULL)
-       {
-         if (fwrite (result, 1, length, stream) == length)
-           retval = length;
-         free (result);
-       }
-      return retval;
-    }
-}
-
-DLL_EXPORTED
-int
-libintl_fprintf (FILE *stream, const char *format, ...)
-{
-  va_list args;
-  int retval;
-
-  va_start (args, format);
-  retval = libintl_vfprintf (stream, format, args);
-  va_end (args);
-  return retval;
-}
-
-DLL_EXPORTED
-int
-libintl_vprintf (const char *format, va_list args)
-{
-  return libintl_vfprintf (stdout, format, args);
-}
-
-DLL_EXPORTED
-int
-libintl_printf (const char *format, ...)
-{
-  va_list args;
-  int retval;
-
-  va_start (args, format);
-  retval = libintl_vprintf (format, args);
-  va_end (args);
-  return retval;
-}
-
-DLL_EXPORTED
-int
-libintl_vsprintf (char *resultbuf, const char *format, va_list args)
-{
-  if (strchr (format, '$') == NULL)
-    return vsprintf (resultbuf, format, args);
-  else
-    {
-      size_t length = (size_t) ~0 / (4 * sizeof (char));
-      char *result = libintl_vasnprintf (resultbuf, &length, format, args);
-      if (result != resultbuf)
-       {
-         free (result);
-         return -1;
-       }
-      else
-       return length;
-    }
-}
-
-DLL_EXPORTED
-int
-libintl_sprintf (char *resultbuf, const char *format, ...)
-{
-  va_list args;
-  int retval;
-
-  va_start (args, format);
-  retval = libintl_vsprintf (resultbuf, format, args);
-  va_end (args);
-  return retval;
-}
-
-#if HAVE_SNPRINTF
-
-# if HAVE_DECL__SNPRINTF
-   /* Windows.  */
-#  define system_vsnprintf _vsnprintf
-# else
-   /* Unix.  */
-#  define system_vsnprintf vsnprintf
-# endif
-
-DLL_EXPORTED
-int
-libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list args)
-{
-  if (strchr (format, '$') == NULL)
-    return system_vsnprintf (resultbuf, length, format, args);
-  else
-    {
-      size_t maxlength = length;
-      char *result = libintl_vasnprintf (resultbuf, &length, format, args);
-      if (result != resultbuf)
-       {
-         if (maxlength > 0)
-           {
-             if (length < maxlength)
-               abort ();
-             memcpy (resultbuf, result, maxlength - 1);
-             resultbuf[maxlength - 1] = '\0';
-           }
-         free (result);
-         return -1;
-       }
-      else
-       return length;
-    }
-}
-
-DLL_EXPORTED
-int
-libintl_snprintf (char *resultbuf, size_t length, const char *format, ...)
-{
-  va_list args;
-  int retval;
-
-  va_start (args, format);
-  retval = libintl_vsnprintf (resultbuf, length, format, args);
-  va_end (args);
-  return retval;
-}
-
-#endif
-
-#if HAVE_ASPRINTF
-
-DLL_EXPORTED
-int
-libintl_vasprintf (char **resultp, const char *format, va_list args)
-{
-  size_t length;
-  char *result = libintl_vasnprintf (NULL, &length, format, args);
-  if (result == NULL)
-    return -1;
-  *resultp = result;
-  return length;
-}
-
-DLL_EXPORTED
-int
-libintl_asprintf (char **resultp, const char *format, ...)
-{
-  va_list args;
-  int retval;
-
-  va_start (args, format);
-  retval = libintl_vasprintf (resultp, format, args);
-  va_end (args);
-  return retval;
-}
-
-#endif
-
-#if HAVE_FWPRINTF
-
-#include <wchar.h>
-
-#define WIDE_CHAR_VERSION 1
-
-/* Define auxiliary functions declared in "wprintf-parse.h".  */
-#include "printf-parse.c"
-
-/* Define functions declared in "vasnprintf.h".  */
-#define vasnwprintf libintl_vasnwprintf
-#include "vasnprintf.c"
-#if 0 /* not needed */
-#define asnwprintf libintl_asnwprintf
-#include "asnprintf.c"
-#endif
-
-# if HAVE_DECL__SNWPRINTF
-   /* Windows.  */
-#  define system_vswprintf _vsnwprintf
-# else
-   /* Unix.  */
-#  define system_vswprintf vswprintf
-# endif
-
-DLL_EXPORTED
-int
-libintl_vfwprintf (FILE *stream, const wchar_t *format, va_list args)
-{
-  if (wcschr (format, '$') == NULL)
-    return vfwprintf (stream, format, args);
-  else
-    {
-      size_t length;
-      wchar_t *result = libintl_vasnwprintf (NULL, &length, format, args);
-      int retval = -1;
-      if (result != NULL)
-       {
-         size_t i;
-         for (i = 0; i < length; i++)
-           if (fputwc (result[i], stream) == WEOF)
-             break;
-         if (i == length)
-           retval = length;
-         free (result);
-       }
-      return retval;
-    }
-}
-
-DLL_EXPORTED
-int
-libintl_fwprintf (FILE *stream, const wchar_t *format, ...)
-{
-  va_list args;
-  int retval;
-
-  va_start (args, format);
-  retval = libintl_vfwprintf (stream, format, args);
-  va_end (args);
-  return retval;
-}
-
-DLL_EXPORTED
-int
-libintl_vwprintf (const wchar_t *format, va_list args)
-{
-  return libintl_vfwprintf (stdout, format, args);
-}
-
-DLL_EXPORTED
-int
-libintl_wprintf (const wchar_t *format, ...)
-{
-  va_list args;
-  int retval;
-
-  va_start (args, format);
-  retval = libintl_vwprintf (format, args);
-  va_end (args);
-  return retval;
-}
-
-DLL_EXPORTED
-int
-libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_list args)
-{
-  if (wcschr (format, '$') == NULL)
-    return system_vswprintf (resultbuf, length, format, args);
-  else
-    {
-      size_t maxlength = length;
-      wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args);
-      if (result != resultbuf)
-       {
-         if (maxlength > 0)
-           {
-             if (length < maxlength)
-               abort ();
-             memcpy (resultbuf, result, (maxlength - 1) * sizeof (wchar_t));
-             resultbuf[maxlength - 1] = 0;
-           }
-         free (result);
-         return -1;
-       }
-      else
-       return length;
-    }
-}
-
-DLL_EXPORTED
-int
-libintl_swprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, ...)
-{
-  va_list args;
-  int retval;
-
-  va_start (args, format);
-  retval = libintl_vswprintf (resultbuf, length, format, args);
-  va_end (args);
-  return retval;
-}
-
-#endif
-
-#endif
diff --git a/intl/ref-add.sin b/intl/ref-add.sin
deleted file mode 100644 (file)
index 167374e..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Add this package to a list of references stored in a text file.
-#
-#   Copyright (C) 2000 Free Software Foundation, Inc.
-#
-#   This program is free software; you can redistribute it and/or modify it
-#   under the terms of the GNU Library General Public License as published
-#   by the Free Software Foundation; either version 2, 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
-#   Library General Public License for more details.
-#
-#   You should have received a copy of the GNU Library General Public
-#   License along with this program; if not, write to the Free Software
-#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-#   USA.
-#
-# Written by Bruno Haible <haible@clisp.cons.org>.
-#
-/^# Packages using this file: / {
-  s/# Packages using this file://
-  ta
-  :a
-  s/ @PACKAGE@ / @PACKAGE@ /
-  tb
-  s/ $/ @PACKAGE@ /
-  :b
-  s/^/# Packages using this file:/
-}
diff --git a/intl/ref-del.sin b/intl/ref-del.sin
deleted file mode 100644 (file)
index 613cf37..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Remove this package from a list of references stored in a text file.
-#
-#   Copyright (C) 2000 Free Software Foundation, Inc.
-#
-#   This program is free software; you can redistribute it and/or modify it
-#   under the terms of the GNU Library General Public License as published
-#   by the Free Software Foundation; either version 2, 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
-#   Library General Public License for more details.
-#
-#   You should have received a copy of the GNU Library General Public
-#   License along with this program; if not, write to the Free Software
-#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-#   USA.
-#
-# Written by Bruno Haible <haible@clisp.cons.org>.
-#
-/^# Packages using this file: / {
-  s/# Packages using this file://
-  s/ @PACKAGE@ / /
-  s/^/# Packages using this file:/
-}
diff --git a/intl/relocatable.c b/intl/relocatable.c
deleted file mode 100644 (file)
index bf7c708..0000000
+++ /dev/null
@@ -1,449 +0,0 @@
-/* Provide relocatable packages.
-   Copyright (C) 2003 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2003.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-
-/* Tell glibc's <stdio.h> to provide a prototype for getline().
-   This must come before <config.h> because <config.h> may include
-   <features.h>, and once <features.h> has been included, it's too late.  */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE   1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-/* Specification.  */
-#include "relocatable.h"
-
-#if ENABLE_RELOCATABLE
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef NO_XMALLOC
-# define xmalloc malloc
-#else
-# include "xalloc.h"
-#endif
-
-#if defined _WIN32 || defined __WIN32__
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-
-#if DEPENDS_ON_LIBCHARSET
-# include <libcharset.h>
-#endif
-#if DEPENDS_ON_LIBICONV && HAVE_ICONV
-# include <iconv.h>
-#endif
-#if DEPENDS_ON_LIBINTL && ENABLE_NLS
-# include <libintl.h>
-#endif
-
-/* Faked cheap 'bool'.  */
-#undef bool
-#undef false
-#undef true
-#define bool int
-#define false 0
-#define true 1
-
-/* Pathname support.
-   ISSLASH(C)           tests whether C is a directory separator character.
-   IS_PATH_WITH_DIR(P)  tests whether P contains a directory specification.
- */
-#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
-  /* Win32, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-# define HAS_DEVICE(P) \
-    ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
-     && (P)[1] == ':')
-# define IS_PATH_WITH_DIR(P) \
-    (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
-# define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
-#else
-  /* Unix */
-# define ISSLASH(C) ((C) == '/')
-# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
-# define FILESYSTEM_PREFIX_LEN(P) 0
-#endif
-
-/* Original installation prefix.  */
-static char *orig_prefix;
-static size_t orig_prefix_len;
-/* Current installation prefix.  */
-static char *curr_prefix;
-static size_t curr_prefix_len;
-/* These prefixes do not end in a slash.  Anything that will be concatenated
-   to them must start with a slash.  */
-
-/* Sets the original and the current installation prefix of this module.
-   Relocation simply replaces a pathname starting with the original prefix
-   by the corresponding pathname with the current prefix instead.  Both
-   prefixes should be directory names without trailing slash (i.e. use ""
-   instead of "/").  */
-static void
-set_this_relocation_prefix (const char *orig_prefix_arg,
-                           const char *curr_prefix_arg)
-{
-  if (orig_prefix_arg != NULL && curr_prefix_arg != NULL
-      /* Optimization: if orig_prefix and curr_prefix are equal, the
-        relocation is a nop.  */
-      && strcmp (orig_prefix_arg, curr_prefix_arg) != 0)
-    {
-      /* Duplicate the argument strings.  */
-      char *memory;
-
-      orig_prefix_len = strlen (orig_prefix_arg);
-      curr_prefix_len = strlen (curr_prefix_arg);
-      memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1);
-#ifdef NO_XMALLOC
-      if (memory != NULL)
-#endif
-       {
-         memcpy (memory, orig_prefix_arg, orig_prefix_len + 1);
-         orig_prefix = memory;
-         memory += orig_prefix_len + 1;
-         memcpy (memory, curr_prefix_arg, curr_prefix_len + 1);
-         curr_prefix = memory;
-         return;
-       }
-    }
-  orig_prefix = NULL;
-  curr_prefix = NULL;
-  /* Don't worry about wasted memory here - this function is usually only
-     called once.  */
-}
-
-/* Sets the original and the current installation prefix of the package.
-   Relocation simply replaces a pathname starting with the original prefix
-   by the corresponding pathname with the current prefix instead.  Both
-   prefixes should be directory names without trailing slash (i.e. use ""
-   instead of "/").  */
-void
-set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
-{
-  set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
-
-  /* Now notify all dependent libraries.  */
-#if DEPENDS_ON_LIBCHARSET
-  libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
-#endif
-#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109
-  libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
-#endif
-#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix
-  libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
-#endif
-}
-
-#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
-
-/* Convenience function:
-   Computes the current installation prefix, based on the original
-   installation prefix, the original installation directory of a particular
-   file, and the current pathname of this file.  Returns NULL upon failure.  */
-#ifdef IN_LIBRARY
-#define compute_curr_prefix local_compute_curr_prefix
-static
-#endif
-const char *
-compute_curr_prefix (const char *orig_installprefix,
-                    const char *orig_installdir,
-                    const char *curr_pathname)
-{
-  const char *curr_installdir;
-  const char *rel_installdir;
-
-  if (curr_pathname == NULL)
-    return NULL;
-
-  /* Determine the relative installation directory, relative to the prefix.
-     This is simply the difference between orig_installprefix and
-     orig_installdir.  */
-  if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix))
-      != 0)
-    /* Shouldn't happen - nothing should be installed outside $(prefix).  */
-    return NULL;
-  rel_installdir = orig_installdir + strlen (orig_installprefix);
-
-  /* Determine the current installation directory.  */
-  {
-    const char *p_base = curr_pathname + FILESYSTEM_PREFIX_LEN (curr_pathname);
-    const char *p = curr_pathname + strlen (curr_pathname);
-    char *q;
-
-    while (p > p_base)
-      {
-       p--;
-       if (ISSLASH (*p))
-         break;
-      }
-
-    q = (char *) xmalloc (p - curr_pathname + 1);
-#ifdef NO_XMALLOC
-    if (q == NULL)
-      return NULL;
-#endif
-    memcpy (q, curr_pathname, p - curr_pathname);
-    q[p - curr_pathname] = '\0';
-    curr_installdir = q;
-  }
-
-  /* Compute the current installation prefix by removing the trailing
-     rel_installdir from it.  */
-  {
-    const char *rp = rel_installdir + strlen (rel_installdir);
-    const char *cp = curr_installdir + strlen (curr_installdir);
-    const char *cp_base =
-      curr_installdir + FILESYSTEM_PREFIX_LEN (curr_installdir);
-
-    while (rp > rel_installdir && cp > cp_base)
-      {
-       bool same = false;
-       const char *rpi = rp;
-       const char *cpi = cp;
-
-       while (rpi > rel_installdir && cpi > cp_base)
-         {
-           rpi--;
-           cpi--;
-           if (ISSLASH (*rpi) || ISSLASH (*cpi))
-             {
-               if (ISSLASH (*rpi) && ISSLASH (*cpi))
-                 same = true;
-               break;
-             }
-#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
-           /* Win32, OS/2, DOS - case insignificant filesystem */
-           if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi)
-               != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi))
-             break;
-#else
-           if (*rpi != *cpi)
-             break;
-#endif
-         }
-       if (!same)
-         break;
-       /* The last pathname component was the same.  opi and cpi now point
-          to the slash before it.  */
-       rp = rpi;
-       cp = cpi;
-      }
-
-    if (rp > rel_installdir)
-      /* Unexpected: The curr_installdir does not end with rel_installdir.  */
-      return NULL;
-
-    {
-      size_t curr_prefix_len = cp - curr_installdir;
-      char *curr_prefix;
-
-      curr_prefix = (char *) xmalloc (curr_prefix_len + 1);
-#ifdef NO_XMALLOC
-      if (curr_prefix == NULL)
-       return NULL;
-#endif
-      memcpy (curr_prefix, curr_installdir, curr_prefix_len);
-      curr_prefix[curr_prefix_len] = '\0';
-
-      return curr_prefix;
-    }
-  }
-}
-
-#endif /* !IN_LIBRARY || PIC */
-
-#if defined PIC && defined INSTALLDIR
-
-/* Full pathname of shared library, or NULL.  */
-static char *shared_library_fullname;
-
-#if defined _WIN32 || defined __WIN32__
-
-/* Determine the full pathname of the shared library when it is loaded.  */
-
-BOOL WINAPI
-DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
-{
-  (void) reserved;
-
-  if (event == DLL_PROCESS_ATTACH)
-    {
-      /* The DLL is being loaded into an application's address range.  */
-      static char location[MAX_PATH];
-
-      if (!GetModuleFileName (module_handle, location, sizeof (location)))
-       /* Shouldn't happen.  */
-       return FALSE;
-
-      if (!IS_PATH_WITH_DIR (location))
-       /* Shouldn't happen.  */
-       return FALSE;
-
-      shared_library_fullname = strdup (location);
-    }
-
-  return TRUE;
-}
-
-#else /* Unix */
-
-static void
-find_shared_library_fullname ()
-{
-#if defined __linux__ && __GLIBC__ >= 2
-  /* Linux has /proc/self/maps. glibc 2 has the getline() function.  */
-  FILE *fp;
-
-  /* Open the current process' maps file.  It describes one VMA per line.  */
-  fp = fopen ("/proc/self/maps", "r");
-  if (fp)
-    {
-      unsigned long address = (unsigned long) &find_shared_library_fullname;
-      for (;;)
-       {
-         unsigned long start, end;
-         int c;
-
-         if (fscanf (fp, "%lx-%lx", &start, &end) != 2)
-           break;
-         if (address >= start && address <= end - 1)
-           {
-             /* Found it.  Now see if this line contains a filename.  */
-             while (c = getc (fp), c != EOF && c != '\n' && c != '/')
-               continue;
-             if (c == '/')
-               {
-                 size_t size;
-                 int len;
-
-                 ungetc (c, fp);
-                 shared_library_fullname = NULL; size = 0;
-                 len = getline (&shared_library_fullname, &size, fp);
-                 if (len >= 0)
-                   {
-                     /* Success: filled shared_library_fullname.  */
-                     if (len > 0 && shared_library_fullname[len - 1] == '\n')
-                       shared_library_fullname[len - 1] = '\0';
-                   }
-               }
-             break;
-           }
-         while (c = getc (fp), c != EOF && c != '\n')
-           continue;
-       }
-      fclose (fp);
-    }
-#endif
-}
-
-#endif /* WIN32 / Unix */
-
-/* Return the full pathname of the current shared library.
-   Return NULL if unknown.
-   Guaranteed to work only on Linux and Woe32.  */
-static char *
-get_shared_library_fullname ()
-{
-#if !(defined _WIN32 || defined __WIN32__)
-  static bool tried_find_shared_library_fullname;
-  if (!tried_find_shared_library_fullname)
-    {
-      find_shared_library_fullname ();
-      tried_find_shared_library_fullname = true;
-    }
-#endif
-  return shared_library_fullname;
-}
-
-#endif /* PIC */
-
-/* Returns the pathname, relocated according to the current installation
-   directory.  */
-const char *
-relocate (const char *pathname)
-{
-#if defined PIC && defined INSTALLDIR
-  static int initialized;
-
-  /* Initialization code for a shared library.  */
-  if (!initialized)
-    {
-      /* At this point, orig_prefix and curr_prefix likely have already been
-        set through the main program's set_program_name_and_installdir
-        function.  This is sufficient in the case that the library has
-        initially been installed in the same orig_prefix.  But we can do
-        better, to also cover the cases that 1. it has been installed
-        in a different prefix before being moved to orig_prefix and (later)
-        to curr_prefix, 2. unlike the program, it has not moved away from
-        orig_prefix.  */
-      const char *orig_installprefix = INSTALLPREFIX;
-      const char *orig_installdir = INSTALLDIR;
-      const char *curr_prefix_better;
-
-      curr_prefix_better =
-       compute_curr_prefix (orig_installprefix, orig_installdir,
-                            get_shared_library_fullname ());
-      if (curr_prefix_better == NULL)
-       curr_prefix_better = curr_prefix;
-
-      set_relocation_prefix (orig_installprefix, curr_prefix_better);
-
-      initialized = 1;
-    }
-#endif
-
-  /* Note: It is not necessary to perform case insensitive comparison here,
-     even for DOS-like filesystems, because the pathname argument was
-     typically created from the same Makefile variable as orig_prefix came
-     from.  */
-  if (orig_prefix != NULL && curr_prefix != NULL
-      && strncmp (pathname, orig_prefix, orig_prefix_len) == 0)
-    {
-      if (pathname[orig_prefix_len] == '\0')
-       /* pathname equals orig_prefix.  */
-       return curr_prefix;
-      if (ISSLASH (pathname[orig_prefix_len]))
-       {
-         /* pathname starts with orig_prefix.  */
-         const char *pathname_tail = &pathname[orig_prefix_len];
-         char *result =
-           (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1);
-
-#ifdef NO_XMALLOC
-         if (result != NULL)
-#endif
-           {
-             memcpy (result, curr_prefix, curr_prefix_len);
-             strcpy (result + curr_prefix_len, pathname_tail);
-             return result;
-           }
-       }
-    }
-  /* Nothing to relocate.  */
-  return pathname;
-}
-
-#endif
diff --git a/intl/relocatable.h b/intl/relocatable.h
deleted file mode 100644 (file)
index 48c5b71..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Provide relocatable packages.
-   Copyright (C) 2003 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2003.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _RELOCATABLE_H
-#define _RELOCATABLE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* This can be enabled through the configure --enable-relocatable option.  */
-#if ENABLE_RELOCATABLE
-
-/* When building a DLL, we must export some functions.  Note that because
-   this is a private .h file, we don't need to use __declspec(dllimport)
-   in any case.  */
-#if defined _MSC_VER && BUILDING_DLL
-# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
-#else
-# define RELOCATABLE_DLL_EXPORTED
-#endif
-
-/* Sets the original and the current installation prefix of the package.
-   Relocation simply replaces a pathname starting with the original prefix
-   by the corresponding pathname with the current prefix instead.  Both
-   prefixes should be directory names without trailing slash (i.e. use ""
-   instead of "/").  */
-extern RELOCATABLE_DLL_EXPORTED void
-       set_relocation_prefix (const char *orig_prefix,
-                             const char *curr_prefix);
-
-/* Returns the pathname, relocated according to the current installation
-   directory.  */
-extern const char * relocate (const char *pathname);
-
-/* Memory management: relocate() leaks memory, because it has to construct
-   a fresh pathname.  If this is a problem because your program calls
-   relocate() frequently, think about caching the result.  */
-
-/* Convenience function:
-   Computes the current installation prefix, based on the original
-   installation prefix, the original installation directory of a particular
-   file, and the current pathname of this file.  Returns NULL upon failure.  */
-extern const char * compute_curr_prefix (const char *orig_installprefix,
-                                        const char *orig_installdir,
-                                        const char *curr_pathname);
-
-#else
-
-/* By default, we use the hardwired pathnames.  */
-#define relocate(pathname) (pathname)
-
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _RELOCATABLE_H */
diff --git a/intl/textdomain.c b/intl/textdomain.c
deleted file mode 100644 (file)
index 8745a84..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-/* Implementation of the textdomain(3) function.
-   Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-#include "gettextP.h"
-
-#ifdef _LIBC
-/* We have to handle multi-threaded applications.  */
-# include <bits/libc-lock.h>
-#else
-/* Provide dummy implementation if this is outside glibc.  */
-# define __libc_rwlock_define(CLASS, NAME)
-# define __libc_rwlock_wrlock(NAME)
-# define __libc_rwlock_unlock(NAME)
-#endif
-
-/* The internal variables in the standalone libintl.a must have different
-   names than the internal variables in GNU libc, otherwise programs
-   using libintl.a cannot be linked statically.  */
-#if !defined _LIBC
-# define _nl_default_default_domain libintl_nl_default_default_domain
-# define _nl_current_default_domain libintl_nl_current_default_domain
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Name of the default text domain.  */
-extern const char _nl_default_default_domain[] attribute_hidden;
-
-/* Default text domain in which entries for gettext(3) are to be found.  */
-extern const char *_nl_current_default_domain attribute_hidden;
-
-
-/* Names for the libintl functions are a problem.  They must not clash
-   with existing names and they should follow ANSI C.  But this source
-   code is also used in GNU C Library where the names have a __
-   prefix.  So we have to make a difference here.  */
-#ifdef _LIBC
-# define TEXTDOMAIN __textdomain
-# ifndef strdup
-#  define strdup(str) __strdup (str)
-# endif
-#else
-# define TEXTDOMAIN libintl_textdomain
-#endif
-
-/* Lock variable to protect the global data in the gettext implementation.  */
-__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
-
-/* Set the current default message catalog to DOMAINNAME.
-   If DOMAINNAME is null, return the current default.
-   If DOMAINNAME is "", reset to the default of "messages".  */
-char *
-TEXTDOMAIN (const char *domainname)
-{
-  char *new_domain;
-  char *old_domain;
-
-  /* A NULL pointer requests the current setting.  */
-  if (domainname == NULL)
-    return (char *) _nl_current_default_domain;
-
-  __libc_rwlock_wrlock (_nl_state_lock);
-
-  old_domain = (char *) _nl_current_default_domain;
-
-  /* If domain name is the null string set to default domain "messages".  */
-  if (domainname[0] == '\0'
-      || strcmp (domainname, _nl_default_default_domain) == 0)
-    {
-      _nl_current_default_domain = _nl_default_default_domain;
-      new_domain = (char *) _nl_current_default_domain;
-    }
-  else if (strcmp (domainname, old_domain) == 0)
-    /* This can happen and people will use it to signal that some
-       environment variable changed.  */
-    new_domain = old_domain;
-  else
-    {
-      /* If the following malloc fails `_nl_current_default_domain'
-        will be NULL.  This value will be returned and so signals we
-        are out of core.  */
-#if defined _LIBC || defined HAVE_STRDUP
-      new_domain = strdup (domainname);
-#else
-      size_t len = strlen (domainname) + 1;
-      new_domain = (char *) malloc (len);
-      if (new_domain != NULL)
-       memcpy (new_domain, domainname, len);
-#endif
-
-      if (new_domain != NULL)
-       _nl_current_default_domain = new_domain;
-    }
-
-  /* We use this possibility to signal a change of the loaded catalogs
-     since this is most likely the case and there is no other easy we
-     to do it.  Do it only when the call was successful.  */
-  if (new_domain != NULL)
-    {
-      ++_nl_msg_cat_cntr;
-
-      if (old_domain != new_domain && old_domain != _nl_default_default_domain)
-       free (old_domain);
-    }
-
-  __libc_rwlock_unlock (_nl_state_lock);
-
-  return new_domain;
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library.  */
-weak_alias (__textdomain, textdomain);
-#endif
diff --git a/intl/vasnprintf.c b/intl/vasnprintf.c
deleted file mode 100644 (file)
index 61bfb9e..0000000
+++ /dev/null
@@ -1,884 +0,0 @@
-/* vsprintf with automatic memory allocation.
-   Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
-   This must come before <config.h> because <config.h> may include
-   <features.h>, and once <features.h> has been included, it's too late.  */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE    1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-#ifndef IN_LIBINTL
-# include <alloca.h>
-#endif
-
-/* Specification.  */
-#if WIDE_CHAR_VERSION
-# include "vasnwprintf.h"
-#else
-# include "vasnprintf.h"
-#endif
-
-#include <stdio.h>     /* snprintf(), sprintf() */
-#include <stdlib.h>    /* abort(), malloc(), realloc(), free() */
-#include <string.h>    /* memcpy(), strlen() */
-#include <errno.h>     /* errno */
-#include <limits.h>    /* CHAR_BIT */
-#include <float.h>     /* DBL_MAX_EXP, LDBL_MAX_EXP */
-#if WIDE_CHAR_VERSION
-# include "wprintf-parse.h"
-#else
-# include "printf-parse.h"
-#endif
-
-/* Checked size_t computations.  */
-#include "xsize.h"
-
-#ifdef HAVE_WCHAR_T
-# ifdef HAVE_WCSLEN
-#  define local_wcslen wcslen
-# else
-   /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
-      a dependency towards this library, here is a local substitute.
-      Define this substitute only once, even if this file is included
-      twice in the same compilation unit.  */
-#  ifndef local_wcslen_defined
-#   define local_wcslen_defined 1
-static size_t
-local_wcslen (const wchar_t *s)
-{
-  const wchar_t *ptr;
-
-  for (ptr = s; *ptr != (wchar_t) 0; ptr++)
-    ;
-  return ptr - s;
-}
-#  endif
-# endif
-#endif
-
-#if WIDE_CHAR_VERSION
-# define VASNPRINTF vasnwprintf
-# define CHAR_T wchar_t
-# define DIRECTIVE wchar_t_directive
-# define DIRECTIVES wchar_t_directives
-# define PRINTF_PARSE wprintf_parse
-# define USE_SNPRINTF 1
-# if HAVE_DECL__SNWPRINTF
-   /* On Windows, the function swprintf() has a different signature than
-      on Unix; we use the _snwprintf() function instead.  */
-#  define SNPRINTF _snwprintf
-# else
-   /* Unix.  */
-#  define SNPRINTF swprintf
-# endif
-#else
-# define VASNPRINTF vasnprintf
-# define CHAR_T char
-# define DIRECTIVE char_directive
-# define DIRECTIVES char_directives
-# define PRINTF_PARSE printf_parse
-# define USE_SNPRINTF (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF)
-# if HAVE_DECL__SNPRINTF
-   /* Windows.  */
-#  define SNPRINTF _snprintf
-# else
-   /* Unix.  */
-#  define SNPRINTF snprintf
-# endif
-#endif
-
-CHAR_T *
-VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list args)
-{
-  DIRECTIVES d;
-  arguments a;
-
-  if (PRINTF_PARSE (format, &d, &a) < 0)
-    {
-      errno = EINVAL;
-      return NULL;
-    }
-
-#define CLEANUP() \
-  free (d.dir);                                                                \
-  if (a.arg)                                                           \
-    free (a.arg);
-
-  if (printf_fetchargs (args, &a) < 0)
-    {
-      CLEANUP ();
-      errno = EINVAL;
-      return NULL;
-    }
-
-  {
-    size_t buf_neededlength;
-    CHAR_T *buf;
-    CHAR_T *buf_malloced;
-    const CHAR_T *cp;
-    size_t i;
-    DIRECTIVE *dp;
-    /* Output string accumulator.  */
-    CHAR_T *result;
-    size_t allocated;
-    size_t length;
-
-    /* Allocate a small buffer that will hold a directive passed to
-       sprintf or snprintf.  */
-    buf_neededlength =
-      xsum4 (7, d.max_width_length, d.max_precision_length, 6);
-#if HAVE_ALLOCA
-    if (buf_neededlength < 4000 / sizeof (CHAR_T))
-      {
-       buf = (CHAR_T *) alloca (buf_neededlength * sizeof (CHAR_T));
-       buf_malloced = NULL;
-      }
-    else
-#endif
-      {
-       size_t buf_memsize = xtimes (buf_neededlength, sizeof (CHAR_T));
-       if (size_overflow_p (buf_memsize))
-         goto out_of_memory_1;
-       buf = (CHAR_T *) malloc (buf_memsize);
-       if (buf == NULL)
-         goto out_of_memory_1;
-       buf_malloced = buf;
-      }
-
-    if (resultbuf != NULL)
-      {
-       result = resultbuf;
-       allocated = *lengthp;
-      }
-    else
-      {
-       result = NULL;
-       allocated = 0;
-      }
-    length = 0;
-    /* Invariants:
-       result is either == resultbuf or == NULL or malloc-allocated.
-       If length > 0, then result != NULL.  */
-
-    /* Ensures that allocated >= needed.  Aborts through a jump to
-       out_of_memory if needed is SIZE_MAX or otherwise too big.  */
-#define ENSURE_ALLOCATION(needed) \
-    if ((needed) > allocated)                                               \
-      {                                                                             \
-       size_t memory_size;                                                  \
-       CHAR_T *memory;                                                      \
-                                                                            \
-       allocated = (allocated > 0 ? xtimes (allocated, 2) : 12);            \
-       if ((needed) > allocated)                                            \
-         allocated = (needed);                                              \
-       memory_size = xtimes (allocated, sizeof (CHAR_T));                   \
-       if (size_overflow_p (memory_size))                                   \
-         goto out_of_memory;                                                \
-       if (result == resultbuf || result == NULL)                           \
-         memory = (CHAR_T *) malloc (memory_size);                          \
-       else                                                                 \
-         memory = (CHAR_T *) realloc (result, memory_size);                 \
-       if (memory == NULL)                                                  \
-         goto out_of_memory;                                                \
-       if (result == resultbuf && length > 0)                               \
-         memcpy (memory, result, length * sizeof (CHAR_T));                 \
-       result = memory;                                                     \
-      }
-
-    for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
-      {
-       if (cp != dp->dir_start)
-         {
-           size_t n = dp->dir_start - cp;
-           size_t augmented_length = xsum (length, n);
-
-           ENSURE_ALLOCATION (augmented_length);
-           memcpy (result + length, cp, n * sizeof (CHAR_T));
-           length = augmented_length;
-         }
-       if (i == d.count)
-         break;
-
-       /* Execute a single directive.  */
-       if (dp->conversion == '%')
-         {
-           size_t augmented_length;
-
-           if (!(dp->arg_index == ARG_NONE))
-             abort ();
-           augmented_length = xsum (length, 1);
-           ENSURE_ALLOCATION (augmented_length);
-           result[length] = '%';
-           length = augmented_length;
-         }
-       else
-         {
-           if (!(dp->arg_index != ARG_NONE))
-             abort ();
-
-           if (dp->conversion == 'n')
-             {
-               switch (a.arg[dp->arg_index].type)
-                 {
-                 case TYPE_COUNT_SCHAR_POINTER:
-                   *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
-                   break;
-                 case TYPE_COUNT_SHORT_POINTER:
-                   *a.arg[dp->arg_index].a.a_count_short_pointer = length;
-                   break;
-                 case TYPE_COUNT_INT_POINTER:
-                   *a.arg[dp->arg_index].a.a_count_int_pointer = length;
-                   break;
-                 case TYPE_COUNT_LONGINT_POINTER:
-                   *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
-                   break;
-#ifdef HAVE_LONG_LONG
-                 case TYPE_COUNT_LONGLONGINT_POINTER:
-                   *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
-                   break;
-#endif
-                 default:
-                   abort ();
-                 }
-             }
-           else
-             {
-               arg_type type = a.arg[dp->arg_index].type;
-               CHAR_T *p;
-               unsigned int prefix_count;
-               int prefixes[2];
-#if !USE_SNPRINTF
-               size_t tmp_length;
-               CHAR_T tmpbuf[700];
-               CHAR_T *tmp;
-
-               /* Allocate a temporary buffer of sufficient size for calling
-                  sprintf.  */
-               {
-                 size_t width;
-                 size_t precision;
-
-                 width = 0;
-                 if (dp->width_start != dp->width_end)
-                   {
-                     if (dp->width_arg_index != ARG_NONE)
-                       {
-                         int arg;
-
-                         if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
-                           abort ();
-                         arg = a.arg[dp->width_arg_index].a.a_int;
-                         width = (arg < 0 ? (unsigned int) (-arg) : arg);
-                       }
-                     else
-                       {
-                         const CHAR_T *digitp = dp->width_start;
-
-                         do
-                           width = xsum (xtimes (width, 10), *digitp++ - '0');
-                         while (digitp != dp->width_end);
-                       }
-                   }
-
-                 precision = 6;
-                 if (dp->precision_start != dp->precision_end)
-                   {
-                     if (dp->precision_arg_index != ARG_NONE)
-                       {
-                         int arg;
-
-                         if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
-                           abort ();
-                         arg = a.arg[dp->precision_arg_index].a.a_int;
-                         precision = (arg < 0 ? 0 : arg);
-                       }
-                     else
-                       {
-                         const CHAR_T *digitp = dp->precision_start + 1;
-
-                         precision = 0;
-                         do
-                           precision = xsum (xtimes (precision, 10), *digitp++ - '0');
-                         while (digitp != dp->precision_end);
-                       }
-                   }
-
-                 switch (dp->conversion)
-                   {
-
-                   case 'd': case 'i': case 'u':
-# ifdef HAVE_LONG_LONG
-                     if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
-                                         * 0.30103 /* binary -> decimal */
-                                         * 2 /* estimate for FLAG_GROUP */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 1; /* account for leading sign */
-                     else
-# endif
-                     if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long) * CHAR_BIT
-                                         * 0.30103 /* binary -> decimal */
-                                         * 2 /* estimate for FLAG_GROUP */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 1; /* account for leading sign */
-                     else
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned int) * CHAR_BIT
-                                         * 0.30103 /* binary -> decimal */
-                                         * 2 /* estimate for FLAG_GROUP */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 1; /* account for leading sign */
-                     break;
-
-                   case 'o':
-# ifdef HAVE_LONG_LONG
-                     if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
-                                         * 0.333334 /* binary -> octal */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 1; /* account for leading sign */
-                     else
-# endif
-                     if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long) * CHAR_BIT
-                                         * 0.333334 /* binary -> octal */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 1; /* account for leading sign */
-                     else
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned int) * CHAR_BIT
-                                         * 0.333334 /* binary -> octal */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 1; /* account for leading sign */
-                     break;
-
-                   case 'x': case 'X':
-# ifdef HAVE_LONG_LONG
-                     if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
-                                         * 0.25 /* binary -> hexadecimal */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 2; /* account for leading sign or alternate form */
-                     else
-# endif
-                     if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long) * CHAR_BIT
-                                         * 0.25 /* binary -> hexadecimal */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 2; /* account for leading sign or alternate form */
-                     else
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned int) * CHAR_BIT
-                                         * 0.25 /* binary -> hexadecimal */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 2; /* account for leading sign or alternate form */
-                     break;
-
-                   case 'f': case 'F':
-# ifdef HAVE_LONG_DOUBLE
-                     if (type == TYPE_LONGDOUBLE)
-                       tmp_length =
-                         (unsigned int) (LDBL_MAX_EXP
-                                         * 0.30103 /* binary -> decimal */
-                                         * 2 /* estimate for FLAG_GROUP */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 10; /* sign, decimal point etc. */
-                     else
-# endif
-                       tmp_length =
-                         (unsigned int) (DBL_MAX_EXP
-                                         * 0.30103 /* binary -> decimal */
-                                         * 2 /* estimate for FLAG_GROUP */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 10; /* sign, decimal point etc. */
-                     tmp_length = xsum (tmp_length, precision);
-                     break;
-
-                   case 'e': case 'E': case 'g': case 'G':
-                   case 'a': case 'A':
-                     tmp_length =
-                       12; /* sign, decimal point, exponent etc. */
-                     tmp_length = xsum (tmp_length, precision);
-                     break;
-
-                   case 'c':
-# if defined HAVE_WINT_T && !WIDE_CHAR_VERSION
-                     if (type == TYPE_WIDE_CHAR)
-                       tmp_length = MB_CUR_MAX;
-                     else
-# endif
-                       tmp_length = 1;
-                     break;
-
-                   case 's':
-# ifdef HAVE_WCHAR_T
-                     if (type == TYPE_WIDE_STRING)
-                       {
-                         tmp_length =
-                           local_wcslen (a.arg[dp->arg_index].a.a_wide_string);
-
-#  if !WIDE_CHAR_VERSION
-                         tmp_length = xtimes (tmp_length, MB_CUR_MAX);
-#  endif
-                       }
-                     else
-# endif
-                       tmp_length = strlen (a.arg[dp->arg_index].a.a_string);
-                     break;
-
-                   case 'p':
-                     tmp_length =
-                       (unsigned int) (sizeof (void *) * CHAR_BIT
-                                       * 0.25 /* binary -> hexadecimal */
-                                      )
-                         + 1 /* turn floor into ceil */
-                         + 2; /* account for leading 0x */
-                     break;
-
-                   default:
-                     abort ();
-                   }
-
-                 if (tmp_length < width)
-                   tmp_length = width;
-
-                 tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
-               }
-
-               if (tmp_length <= sizeof (tmpbuf) / sizeof (CHAR_T))
-                 tmp = tmpbuf;
-               else
-                 {
-                   size_t tmp_memsize = xtimes (tmp_length, sizeof (CHAR_T));
-
-                   if (size_overflow_p (tmp_memsize))
-                     /* Overflow, would lead to out of memory.  */
-                     goto out_of_memory;
-                   tmp = (CHAR_T *) malloc (tmp_memsize);
-                   if (tmp == NULL)
-                     /* Out of memory.  */
-                     goto out_of_memory;
-                 }
-#endif
-
-               /* Construct the format string for calling snprintf or
-                  sprintf.  */
-               p = buf;
-               *p++ = '%';
-               if (dp->flags & FLAG_GROUP)
-                 *p++ = '\'';
-               if (dp->flags & FLAG_LEFT)
-                 *p++ = '-';
-               if (dp->flags & FLAG_SHOWSIGN)
-                 *p++ = '+';
-               if (dp->flags & FLAG_SPACE)
-                 *p++ = ' ';
-               if (dp->flags & FLAG_ALT)
-                 *p++ = '#';
-               if (dp->flags & FLAG_ZERO)
-                 *p++ = '0';
-               if (dp->width_start != dp->width_end)
-                 {
-                   size_t n = dp->width_end - dp->width_start;
-                   memcpy (p, dp->width_start, n * sizeof (CHAR_T));
-                   p += n;
-                 }
-               if (dp->precision_start != dp->precision_end)
-                 {
-                   size_t n = dp->precision_end - dp->precision_start;
-                   memcpy (p, dp->precision_start, n * sizeof (CHAR_T));
-                   p += n;
-                 }
-
-               switch (type)
-                 {
-#ifdef HAVE_LONG_LONG
-                 case TYPE_LONGLONGINT:
-                 case TYPE_ULONGLONGINT:
-                   *p++ = 'l';
-                   /*FALLTHROUGH*/
-#endif
-                 case TYPE_LONGINT:
-                 case TYPE_ULONGINT:
-#ifdef HAVE_WINT_T
-                 case TYPE_WIDE_CHAR:
-#endif
-#ifdef HAVE_WCHAR_T
-                 case TYPE_WIDE_STRING:
-#endif
-                   *p++ = 'l';
-                   break;
-#ifdef HAVE_LONG_DOUBLE
-                 case TYPE_LONGDOUBLE:
-                   *p++ = 'L';
-                   break;
-#endif
-                 default:
-                   break;
-                 }
-               *p = dp->conversion;
-#if USE_SNPRINTF
-               p[1] = '%';
-               p[2] = 'n';
-               p[3] = '\0';
-#else
-               p[1] = '\0';
-#endif
-
-               /* Construct the arguments for calling snprintf or sprintf.  */
-               prefix_count = 0;
-               if (dp->width_arg_index != ARG_NONE)
-                 {
-                   if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
-                     abort ();
-                   prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
-                 }
-               if (dp->precision_arg_index != ARG_NONE)
-                 {
-                   if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
-                     abort ();
-                   prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
-                 }
-
-#if USE_SNPRINTF
-               /* Prepare checking whether snprintf returns the count
-                  via %n.  */
-               ENSURE_ALLOCATION (xsum (length, 1));
-               result[length] = '\0';
-#endif
-
-               for (;;)
-                 {
-                   size_t maxlen;
-                   int count;
-                   int retcount;
-
-                   maxlen = allocated - length;
-                   count = -1;
-                   retcount = 0;
-
-#if USE_SNPRINTF
-# define SNPRINTF_BUF(arg) \
-                   switch (prefix_count)                                   \
-                     {                                                     \
-                     case 0:                                               \
-                       retcount = SNPRINTF (result + length, maxlen, buf,  \
-                                            arg, &count);                  \
-                       break;                                              \
-                     case 1:                                               \
-                       retcount = SNPRINTF (result + length, maxlen, buf,  \
-                                            prefixes[0], arg, &count);     \
-                       break;                                              \
-                     case 2:                                               \
-                       retcount = SNPRINTF (result + length, maxlen, buf,  \
-                                            prefixes[0], prefixes[1], arg, \
-                                            &count);                       \
-                       break;                                              \
-                     default:                                              \
-                       abort ();                                           \
-                     }
-#else
-# define SNPRINTF_BUF(arg) \
-                   switch (prefix_count)                                   \
-                     {                                                     \
-                     case 0:                                               \
-                       count = sprintf (tmp, buf, arg);                    \
-                       break;                                              \
-                     case 1:                                               \
-                       count = sprintf (tmp, buf, prefixes[0], arg);       \
-                       break;                                              \
-                     case 2:                                               \
-                       count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
-                                        arg);                              \
-                       break;                                              \
-                     default:                                              \
-                       abort ();                                           \
-                     }
-#endif
-
-                   switch (type)
-                     {
-                     case TYPE_SCHAR:
-                       {
-                         int arg = a.arg[dp->arg_index].a.a_schar;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_UCHAR:
-                       {
-                         unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_SHORT:
-                       {
-                         int arg = a.arg[dp->arg_index].a.a_short;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_USHORT:
-                       {
-                         unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_INT:
-                       {
-                         int arg = a.arg[dp->arg_index].a.a_int;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_UINT:
-                       {
-                         unsigned int arg = a.arg[dp->arg_index].a.a_uint;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_LONGINT:
-                       {
-                         long int arg = a.arg[dp->arg_index].a.a_longint;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_ULONGINT:
-                       {
-                         unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#ifdef HAVE_LONG_LONG
-                     case TYPE_LONGLONGINT:
-                       {
-                         long long int arg = a.arg[dp->arg_index].a.a_longlongint;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_ULONGLONGINT:
-                       {
-                         unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#endif
-                     case TYPE_DOUBLE:
-                       {
-                         double arg = a.arg[dp->arg_index].a.a_double;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#ifdef HAVE_LONG_DOUBLE
-                     case TYPE_LONGDOUBLE:
-                       {
-                         long double arg = a.arg[dp->arg_index].a.a_longdouble;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#endif
-                     case TYPE_CHAR:
-                       {
-                         int arg = a.arg[dp->arg_index].a.a_char;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#ifdef HAVE_WINT_T
-                     case TYPE_WIDE_CHAR:
-                       {
-                         wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#endif
-                     case TYPE_STRING:
-                       {
-                         const char *arg = a.arg[dp->arg_index].a.a_string;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#ifdef HAVE_WCHAR_T
-                     case TYPE_WIDE_STRING:
-                       {
-                         const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#endif
-                     case TYPE_POINTER:
-                       {
-                         void *arg = a.arg[dp->arg_index].a.a_pointer;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     default:
-                       abort ();
-                     }
-
-#if USE_SNPRINTF
-                   /* Portability: Not all implementations of snprintf()
-                      are ISO C 99 compliant.  Determine the number of
-                      bytes that snprintf() has produced or would have
-                      produced.  */
-                   if (count >= 0)
-                     {
-                       /* Verify that snprintf() has NUL-terminated its
-                          result.  */
-                       if (count < maxlen && result[length + count] != '\0')
-                         abort ();
-                       /* Portability hack.  */
-                       if (retcount > count)
-                         count = retcount;
-                     }
-                   else
-                     {
-                       /* snprintf() doesn't understand the '%n'
-                          directive.  */
-                       if (p[1] != '\0')
-                         {
-                           /* Don't use the '%n' directive; instead, look
-                              at the snprintf() return value.  */
-                           p[1] = '\0';
-                           continue;
-                         }
-                       else
-                         {
-                           /* Look at the snprintf() return value.  */
-                           if (retcount < 0)
-                             {
-                               /* HP-UX 10.20 snprintf() is doubly deficient:
-                                  It doesn't understand the '%n' directive,
-                                  *and* it returns -1 (rather than the length
-                                  that would have been required) when the
-                                  buffer is too small.  */
-                               size_t bigger_need =
-                                 xsum (xtimes (allocated, 2), 12);
-                               ENSURE_ALLOCATION (bigger_need);
-                               continue;
-                             }
-                           else
-                             count = retcount;
-                         }
-                     }
-#endif
-
-                   /* Attempt to handle failure.  */
-                   if (count < 0)
-                     {
-                       if (!(result == resultbuf || result == NULL))
-                         free (result);
-                       free (buf_malloced);
-                       CLEANUP ();
-                       errno = EINVAL;
-                       return NULL;
-                     }
-
-#if !USE_SNPRINTF
-                   if (count >= tmp_length)
-                     /* tmp_length was incorrectly calculated - fix the
-                        code above!  */
-                     abort ();
-#endif
-
-                   /* Make room for the result.  */
-                   if (count >= maxlen)
-                     {
-                       /* Need at least count bytes.  But allocate
-                          proportionally, to avoid looping eternally if
-                          snprintf() reports a too small count.  */
-                       size_t n =
-                         xmax (xsum (length, count), xtimes (allocated, 2));
-
-                       ENSURE_ALLOCATION (n);
-#if USE_SNPRINTF
-                       continue;
-#endif
-                     }
-
-#if USE_SNPRINTF
-                   /* The snprintf() result did fit.  */
-#else
-                   /* Append the sprintf() result.  */
-                   memcpy (result + length, tmp, count * sizeof (CHAR_T));
-                   if (tmp != tmpbuf)
-                     free (tmp);
-#endif
-
-                   length += count;
-                   break;
-                 }
-             }
-         }
-      }
-
-    /* Add the final NUL.  */
-    ENSURE_ALLOCATION (xsum (length, 1));
-    result[length] = '\0';
-
-    if (result != resultbuf && length + 1 < allocated)
-      {
-       /* Shrink the allocated memory if possible.  */
-       CHAR_T *memory;
-
-       memory = (CHAR_T *) realloc (result, (length + 1) * sizeof (CHAR_T));
-       if (memory != NULL)
-         result = memory;
-      }
-
-    free (buf_malloced);
-    CLEANUP ();
-    *lengthp = length;
-    return result;
-
-  out_of_memory:
-    if (!(result == resultbuf || result == NULL))
-      free (result);
-    free (buf_malloced);
-  out_of_memory_1:
-    CLEANUP ();
-    errno = ENOMEM;
-    return NULL;
-  }
-}
-
-#undef SNPRINTF
-#undef USE_SNPRINTF
-#undef PRINTF_PARSE
-#undef DIRECTIVES
-#undef DIRECTIVE
-#undef CHAR_T
-#undef VASNPRINTF
diff --git a/intl/vasnprintf.h b/intl/vasnprintf.h
deleted file mode 100644 (file)
index 65f1bc1..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/* vsprintf with automatic memory allocation.
-   Copyright (C) 2002-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _VASNPRINTF_H
-#define _VASNPRINTF_H
-
-/* Get va_list.  */
-#include <stdarg.h>
-
-/* Get size_t.  */
-#include <stddef.h>
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
-#  define __attribute__(Spec) /* empty */
-# endif
-/* The __-protected variants of `format' and `printf' attributes
-   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-#  define __format__ format
-#  define __printf__ printf
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Write formatted output to a string dynamically allocated with malloc().
-   You can pass a preallocated buffer for the result in RESULTBUF and its
-   size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
-   If successful, return the address of the string (this may be = RESULTBUF
-   if no dynamic memory allocation was necessary) and set *LENGTHP to the
-   number of resulting bytes, excluding the trailing NUL.  Upon error, set
-   errno and return NULL.  */
-extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
-       __attribute__ ((__format__ (__printf__, 3, 4)));
-extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
-       __attribute__ ((__format__ (__printf__, 3, 0)));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _VASNPRINTF_H */
diff --git a/intl/vasnwprintf.h b/intl/vasnwprintf.h
deleted file mode 100644 (file)
index d3cef4c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* vswprintf with automatic memory allocation.
-   Copyright (C) 2002-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _VASNWPRINTF_H
-#define _VASNWPRINTF_H
-
-/* Get va_list.  */
-#include <stdarg.h>
-
-/* Get wchar_t, size_t.  */
-#include <stddef.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Write formatted output to a string dynamically allocated with malloc().
-   You can pass a preallocated buffer for the result in RESULTBUF and its
-   size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
-   If successful, return the address of the string (this may be = RESULTBUF
-   if no dynamic memory allocation was necessary) and set *LENGTHP to the
-   number of resulting bytes, excluding the trailing NUL.  Upon error, set
-   errno and return NULL.  */
-extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...);
-extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, va_list args);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _VASNWPRINTF_H */
diff --git a/intl/wprintf-parse.h b/intl/wprintf-parse.h
deleted file mode 100644 (file)
index 24a2cfc..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Parse printf format string.
-   Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _WPRINTF_PARSE_H
-#define _WPRINTF_PARSE_H
-
-#include "printf-args.h"
-
-
-/* Flags */
-#define FLAG_GROUP      1      /* ' flag */
-#define FLAG_LEFT       2      /* - flag */
-#define FLAG_SHOWSIGN   4      /* + flag */
-#define FLAG_SPACE      8      /* space flag */
-#define FLAG_ALT       16      /* # flag */
-#define FLAG_ZERO      32
-
-/* arg_index value indicating that no argument is consumed.  */
-#define ARG_NONE       (~(size_t)0)
-
-/* A parsed directive.  */
-typedef struct
-{
-  const wchar_t* dir_start;
-  const wchar_t* dir_end;
-  int flags;
-  const wchar_t* width_start;
-  const wchar_t* width_end;
-  size_t width_arg_index;
-  const wchar_t* precision_start;
-  const wchar_t* precision_end;
-  size_t precision_arg_index;
-  wchar_t conversion; /* d i o u x X f e E g G c s p n U % but not C S */
-  size_t arg_index;
-}
-wchar_t_directive;
-
-/* A parsed format string.  */
-typedef struct
-{
-  size_t count;
-  wchar_t_directive *dir;
-  size_t max_width_length;
-  size_t max_precision_length;
-}
-wchar_t_directives;
-
-
-/* Parses the format string.  Fills in the number N of directives, and fills
-   in directives[0], ..., directives[N-1], and sets directives[N].dir_start
-   to the end of the format string.  Also fills in the arg_type fields of the
-   arguments and the needed count of arguments.  */
-#ifdef STATIC
-STATIC
-#else
-extern
-#endif
-int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a);
-
-#endif /* _WPRINTF_PARSE_H */
diff --git a/intl/xsize.h b/intl/xsize.h
deleted file mode 100644 (file)
index 362e24b..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/* xsize.h -- Checked size_t computations.
-
-   Copyright (C) 2003 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Library General Public License as published
-   by the Free Software Foundation; either version 2, 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-   USA.  */
-
-#ifndef _XSIZE_H
-#define _XSIZE_H
-
-/* Get size_t.  */
-#include <stddef.h>
-
-/* Get SIZE_MAX.  */
-#include <limits.h>
-#if HAVE_STDINT_H
-# include <stdint.h>
-#endif
-
-/* The size of memory objects is often computed through expressions of
-   type size_t. Example:
-      void* p = malloc (header_size + n * element_size).
-   These computations can lead to overflow.  When this happens, malloc()
-   returns a piece of memory that is way too small, and the program then
-   crashes while attempting to fill the memory.
-   To avoid this, the functions and macros in this file check for overflow.
-   The convention is that SIZE_MAX represents overflow.
-   malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
-   implementation that uses mmap --, it's recommended to use size_overflow_p()
-   or size_in_bounds_p() before invoking malloc().
-   The example thus becomes:
-      size_t size = xsum (header_size, xtimes (n, element_size));
-      void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
-*/
-
-/* Convert an arbitrary value >= 0 to type size_t.  */
-#define xcast_size_t(N) \
-  ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
-
-/* Sum of two sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum (size_t size1, size_t size2)
-{
-  size_t sum = size1 + size2;
-  return (sum >= size1 ? sum : SIZE_MAX);
-}
-
-/* Sum of three sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum3 (size_t size1, size_t size2, size_t size3)
-{
-  return xsum (xsum (size1, size2), size3);
-}
-
-/* Sum of four sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
-{
-  return xsum (xsum (xsum (size1, size2), size3), size4);
-}
-
-/* Maximum of two sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xmax (size_t size1, size_t size2)
-{
-  /* No explicit check is needed here, because for any n:
-     max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX.  */
-  return (size1 >= size2 ? size1 : size2);
-}
-
-/* Multiplication of a count with an element size, with overflow check.
-   The count must be >= 0 and the element size must be > 0.
-   This is a macro, not an inline function, so that it works correctly even
-   when N is of a wider tupe and N > SIZE_MAX.  */
-#define xtimes(N, ELSIZE) \
-  ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
-
-/* Check for overflow.  */
-#define size_overflow_p(SIZE) \
-  ((SIZE) == SIZE_MAX)
-/* Check against overflow.  */
-#define size_in_bounds_p(SIZE) \
-  ((SIZE) != SIZE_MAX)
-
-#endif /* _XSIZE_H */
diff --git a/lib/Android.bp b/lib/Android.bp
new file mode 100644 (file)
index 0000000..01f6c3d
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2017 The Android Open Source Project
+
+// All the libraries under this directory export their headers as relative
+// paths to this directory (external/e2fsprogs/lib). This is a helper headers
+// only library to allow exporting
+cc_library_headers {
+    name: "libext2-headers",
+    host_supported: true,
+    vendor_available: true,
+    product_available: true,
+    ramdisk_available: true,
+    vendor_ramdisk_available: true,
+    recovery_available: true,
+    target: {
+        windows: {
+            enabled: true,
+        },
+    },
+    export_include_dirs: ["."],
+    apex_available: [
+        "//apex_available:platform",
+        "com.android.virt",
+    ],
+}
+
+
+subdirs = [
+    "*",
+]
diff --git a/lib/Android.mk b/lib/Android.mk
deleted file mode 100644 (file)
index 5053e7d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-include $(call all-subdir-makefiles)
index db0947f..2792ba3 100644 (file)
@@ -36,7 +36,7 @@ install-shlibs install:: $(BSD_LIB)
 
 install-strip: install
 
-install-shlibs-strip: install-shlibs
+install-shlibs-strip:: install-shlibs
 
 uninstall-shlibs uninstall::
        $(RM) -f $(DESTDIR)$(BSDLIB_INSTALL_DIR)/$(BSD_LIB)
index c94a5e7..95cdd4b 100644 (file)
@@ -39,7 +39,7 @@ install-shlibs install:: $(BSD_LIB)
 
 install-strip: install
 
-install-shlibs-strip: install-shlibs
+install-shlibs-strip:: install-shlibs
 
 uninstall-shlibs uninstall::
        $(RM) -f $(DESTDIR)$(BSDLIB_INSTALL_DIR)/$(BSD_LIB)
index 4e88c05..f850f3d 100644 (file)
@@ -35,8 +35,8 @@ $(ELF_LIB): $(OBJS)
        $(Q) (cd ..; $(LN) $(LINK_BUILD_FLAGS) $(ELF_LIB) $(ELF_SONAME))
 
 installdirs-elf-lib::
-       $(E) "  MKINSTALLDIRS $(ELF_INSTALL_DIR) $(libdir)"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(ELF_INSTALL_DIR) \
+       $(E) "  MKDIR_P $(ELF_INSTALL_DIR) $(libdir)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(ELF_INSTALL_DIR) \
                $(DESTDIR)$(libdir)
 
 installdirs:: installdirs-elf-lib
@@ -58,7 +58,7 @@ install-strip: install
        $(Q) $(STRIP) --strip-unneeded --remove-section=.comment \
                --remove-section=.note $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB)
 
-install-shlibs-strip: install-shlibs
+install-shlibs-strip:: install-shlibs
        $(E) "  STRIP-LIB $(ELF_INSTALL_DIR)/$(ELF_LIB)"
        $(Q) $(STRIP) --strip-unneeded --remove-section=.comment \
                --remove-section=.note $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB)
index 1b86b02..f78467a 100644 (file)
@@ -1,5 +1,7 @@
 all:: subdirs $(LIBRARY).a
 
+install-shlibs-strip::
+
 install-shlibs::
 
 uninstall-shlibs::
index a3d395e..1e63636 100644 (file)
@@ -35,7 +35,7 @@ $(ELF_LIB): $(OBJS)
        $(Q) (cd ..; $(LN) $(LINK_BUILD_FLAGS) $(ELF_LIB) $(ELF_SONAME))
 
 installdirs-elf-lib::
-       $(MKINSTALLDIRS) $(DESTDIR)$(ELF_INSTALL_DIR) \
+       $(MKDIR_P) $(DESTDIR)$(ELF_INSTALL_DIR) \
                $(DESTDIR)$(libdir)
 
 installdirs:: installdirs-elf-lib
@@ -50,7 +50,7 @@ install-shlibs install:: $(ELF_LIB) installdirs-elf-lib
 install-strip: install
        $(STRIP) -x $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB)
 
-install-shlibs-strip: install-shlibs
+install-shlibs-strip:: install-shlibs
        $(STRIP) -x $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB)
 
 uninstall-shlibs uninstall::
diff --git a/lib/blkid/Android.bp b/lib/blkid/Android.bp
new file mode 100644 (file)
index 0000000..64aef6f
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2017 The Android Open Source Project
+
+cc_library {
+    name: "libext2_blkid",
+    host_supported: true,
+    ramdisk_available: true,
+    vendor_ramdisk_available: true,
+    recovery_available: true,
+    unique_host_soname: true,
+    defaults: ["e2fsprogs-defaults"],
+    srcs: [
+        "cache.c",
+        "dev.c",
+        "devname.c",
+        "devno.c",
+        "getsize.c",
+        "llseek.c",
+        "probe.c",
+        "read.c",
+        "resolve.c",
+        "save.c",
+        "tag.c",
+        "version.c",
+    ],
+    shared_libs: ["libext2_uuid"],
+
+    target: {
+        windows: {
+            include_dirs: [ "external/e2fsprogs/include/mingw" ],
+            cflags: [
+                "-Wno-pointer-to-int-cast",
+                "-Wno-unused-variable",
+            ],
+            clang_cflags: [
+                "-Wno-error=typedef-redefinition",
+            ],
+            enabled: true
+        },
+    },
+
+    cflags: [
+        "-Wno-error=attributes",
+        "-Wno-error=pointer-sign",
+        "-Wno-unused-parameter",
+        "-fno-strict-aliasing",
+    ],
+
+    header_libs: ["libext2-headers"],
+    export_include_dirs: ["."],
+    export_header_lib_headers: ["libext2-headers"],
+}
diff --git a/lib/blkid/Android.mk b/lib/blkid/Android.mk
deleted file mode 100644 (file)
index 857c4f9..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-libext2_blkid_src_files := \
-       cache.c \
-       dev.c \
-       devname.c \
-       devno.c \
-       getsize.c \
-       llseek.c \
-       probe.c \
-       read.c \
-       resolve.c \
-       save.c \
-       tag.c \
-       version.c \
-
-
-libext2_blkid_shared_libraries := libext2_uuid
-
-libext2_blkid_system_shared_libraries := libc
-
-libext2_blkid_static_libraries := libext2_uuid_static
-
-libext2_blkid_system_static_libraries := libc
-
-libext2_blkid_c_includes := external/e2fsprogs/lib
-
-libext2_blkid_cflags := -O2 -g -W -Wall -fno-strict-aliasing
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_blkid_src_files)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2_blkid_system_shared_libraries)
-LOCAL_SHARED_LIBRARIES := $(libext2_blkid_shared_libraries)
-LOCAL_C_INCLUDES := $(libext2_blkid_c_includes)
-LOCAL_CFLAGS := $(libext2_blkid_cflags)
-LOCAL_MODULE := libext2_blkid
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_blkid_src_files)
-LOCAL_STATIC_LIBRARIES := $(libext2_blkid_static_libraries) $(libext2_blkid_system_static_libraries)
-LOCAL_C_INCLUDES := $(libext2_blkid_c_includes)
-LOCAL_CFLAGS := $(libext2_blkid_cflags) $(libext2_blkid_cflags_linux) -fno-strict-aliasing
-LOCAL_MODULE := libext2_blkid
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_blkid_src_files)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(libext2_blkid_shared_libraries))
-LOCAL_C_INCLUDES := $(libext2_blkid_c_includes)
-LOCAL_CFLAGS := $(libext2_blkid_cflags)
-LOCAL_MODULE := libext2_blkid-host
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_SHARED_LIBRARY)
index 7f38452..c5ca920 100644 (file)
@@ -11,6 +11,7 @@ VPATH = @srcdir@
 top_builddir = ../..
 my_dir = lib/blkid
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
@@ -135,8 +136,9 @@ test_probe: test_probe.in Makefile
        $(Q) cat $(srcdir)/test_probe.in >> test_probe
        $(Q) chmod +x test_probe
 
-check:: all tst_cache tst_dev tst_devname tst_devno tst_getsize tst_probe \
- tst_read tst_resolve tst_save tst_tag test_probe tst_types
+fullcheck check:: all tst_cache tst_dev tst_devname tst_devno \
+ tst_getsize tst_probe tst_read tst_resolve tst_save tst_tag \
+ test_probe tst_types
        ./test_probe
        ./tst_types
 
@@ -145,8 +147,8 @@ blkid.pc: $(srcdir)/blkid.pc.in $(top_builddir)/config.status
        $(Q) cd $(top_builddir); CONFIG_FILES=lib/blkid/blkid.pc ./config.status
 
 installdirs::
-       $(E) "  MKINSTALLDIRS $(libdir) $(includedir)/blkid"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+       $(E) "  MKDIR_P $(libdir) $(includedir)/blkid"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(libdir) \
                $(DESTDIR)$(includedir)/blkid $(DESTDIR)$(pkgconfigdir)
 
 install:: all installdirs 
index b90bfed..b3fe4a6 100644 (file)
 
 #include <sys/types.h>
 #include <stdio.h>
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
 
 #include <blkid/blkid.h>
 
@@ -152,6 +158,15 @@ extern void blkid_debug_dump_dev(blkid_dev dev);
 extern void blkid_debug_dump_tag(blkid_tag tag);
 #endif
 
+static inline int blkidP_is_disk_device(mode_t mode)
+{
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+       return S_ISBLK(mode) || S_ISCHR(mode);
+#else
+       return S_ISBLK(mode);
+#endif
+}
+
 /* devno.c */
 struct dir_list {
        char    *name;
index 6d8eaea..1d62dd8 100644 (file)
@@ -13,6 +13,7 @@
 #include "config.h"
 #include <stdlib.h>
 #include <string.h>
+#include <stdint.h>
 
 #include "blkidP.h"
 
@@ -91,7 +92,7 @@ void blkid_debug_dump_dev(blkid_dev dev)
  *
  * These routines do not expose the list.h implementation, which are a
  * contamination of the namespace, and which force us to reveal far, far
- * too much of our internal implemenation.  I'm not convinced I want
+ * too much of our internal implementation.  I'm not convinced I want
  * to keep list.h in the long term, anyway.  It's fine for kernel
  * programming, but performance is not the #1 priority for this
  * library, and I really don't like the tradeoff of type-safety for
index 3e2efa9..6a21963 100644 (file)
@@ -36,6 +36,9 @@
 #if HAVE_SYS_MKDEV_H
 #include <sys/mkdev.h>
 #endif
+#ifdef HAVE_SYS_SYSMACROS_H
+#include <sys/sysmacros.h>
+#endif
 #include <time.h>
 
 #include "blkidP.h"
@@ -123,7 +126,7 @@ static int is_dm_leaf(const char *devname)
 {
        struct dirent   *de, *d_de;
        DIR             *dir, *d_dir;
-       char            path[256];
+       char            path[300];
        int             ret = 1;
 
        if ((dir = opendir("/sys/block")) == NULL)
@@ -159,7 +162,7 @@ static char *get_dm_name(const char *ptname)
 {
        FILE    *f;
        size_t  sz;
-       char    path[256], name[256], *res = NULL;
+       char    path[300], name[256], *res = NULL;
 
        snprintf(path, sizeof(path), "/sys/block/%s/dm/name", ptname);
        if ((f = fopen(path, "r")) == NULL)
@@ -228,7 +231,8 @@ static void probe_one(blkid_cache cache, const char *ptname,
                    dev->bid_devno == devno)
                        goto set_pri;
 
-               if (stat(device, &st) == 0 && S_ISBLK(st.st_mode) &&
+               if (stat(device, &st) == 0 &&
+                   blkidP_is_disk_device(st.st_mode) &&
                    st.st_rdev == devno) {
                        devname = blkid_strdup(device);
                        goto get_dev;
@@ -394,7 +398,7 @@ static int probe_all(blkid_cache cache, int only_if_new)
 {
        FILE *proc;
        char line[1024];
-       char ptname0[128], ptname1[128], *ptname = 0;
+       char ptname0[129], ptname1[129], *ptname = 0;
        char *ptnames[2];
        dev_t devs[2];
        int ma, mi;
index aa6eb90..34ceb3c 100644 (file)
@@ -31,6 +31,9 @@
 #if HAVE_SYS_MKDEV_H
 #include <sys/mkdev.h>
 #endif
+#ifdef HAVE_SYS_SYSMACROS_H
+#include <sys/sysmacros.h>
+#endif
 
 #include "blkidP.h"
 
@@ -116,7 +119,7 @@ void blkid__scan_dir(const char *dirname, dev_t devno, struct dir_list **list,
                if (stat(path, &st) < 0)
                        continue;
 
-               if (S_ISBLK(st.st_mode) && st.st_rdev == devno) {
+               if (blkidP_is_disk_device(st.st_mode) && st.st_rdev == devno) {
                        *devname = blkid_strdup(path);
                        DBG(DEBUG_DEVNO,
                            printf("found 0x%llx at %s (%p)\n", (long long)devno,
index 8e8eb4c..75f21d5 100644 (file)
@@ -78,12 +78,15 @@ blkid_loff_t blkid_get_dev_size(int fd)
        unsigned long long size64;
        blkid_loff_t high, low;
 
-#ifdef DKIOCGETBLOCKCOUNT      /* For Apple Darwin */
-       if (ioctl(fd, DKIOCGETBLOCKCOUNT, &size64) >= 0) {
+#if defined DKIOCGETBLOCKCOUNT && defined DKIOCGETBLOCKSIZE    /* For Apple Darwin */
+       unsigned int size;
+
+       if (ioctl(fd, DKIOCGETBLOCKCOUNT, &size64) >= 0 &&
+           ioctl(fd, DKIOCGETBLOCKSIZE, &size) >= 0) {
                if (sizeof(blkid_loff_t) < sizeof(unsigned long long) &&
-                   (size64 << 9) > 0xFFFFFFFF)
+                   (size64 * size) > 0xFFFFFFFF)
                        return 0; /* EFBIG */
-               return (blkid_loff_t)size64 << 9;
+               return (blkid_loff_t)size64 * size;
        }
 #endif
 
@@ -149,7 +152,7 @@ blkid_loff_t blkid_get_dev_size(int fd)
                 * 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)))
+                   blkidP_is_disk_device(st.st_mode))
                        part = st.st_rdev & 7;
 
                if (part >= 0 && (ioctl(fd, DIOCGDINFO, (char *)&lab) >= 0)) {
index bd24cb1..2fea3a9 100644 (file)
@@ -47,7 +47,7 @@ so the use of the cache file is
 in this situation.
 .SH AUTHOR
 .B libblkid
-was written by Andreas Dilger for the ext2 filesystem utilties, with input
+was written by Andreas Dilger for the ext2 filesystem utilities, with input
 from Ted Ts'o.  The library was subsequently heavily modified by Ted Ts'o.
 .SH FILES
 .TP
index 26a5ac1..eb1c513 100644 (file)
@@ -5,6 +5,14 @@
 extern "C" {
 #endif
 
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#else
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#endif
+
 #ifdef __GNUC__
 #define _INLINE_ static __inline__
 #else                         /* For Watcom C */
@@ -146,7 +154,7 @@ _INLINE_ void list_splice(struct list_head *list, struct list_head *head)
  * @member:    the name of the list_struct within the struct.
  */
 #define list_entry(ptr, type, member) \
-       ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
+       ((type *)((char *)(ptr)-(unsigned long)(intptr_t)(&((type *)0)->member)))
 
 /**
  * list_for_each - iterate over elements in a list
index 66ecbc4..f8687cd 100644 (file)
@@ -41,7 +41,7 @@ static int figure_label_len(const unsigned char *label, int len)
 {
        const unsigned char *end = label + len - 1;
 
-       while ((*end == ' ' || *end == 0) && end >= label)
+       while (end >= label && (*end == ' ' || *end == 0))
                --end;
        if (end >= label)
                return end - label + 1;
@@ -106,7 +106,6 @@ static int check_mdraid(int fd, unsigned char *ret_uuid)
        if (blkid_llseek(fd, offset, 0) < 0 ||
            read(fd, buf, 4096) != 4096)
                return -BLKID_ERR_IO;
-
        /* Check for magic number */
        if (memcmp("\251+N\374", buf, 4) && memcmp("\374N+\251", buf, 4))
                return -BLKID_ERR_PARAM;
@@ -145,7 +144,7 @@ static void get_ext2_info(blkid_dev dev, struct blkid_magic *id,
                   blkid_le32(es->s_feature_incompat),
                   blkid_le32(es->s_feature_ro_compat)));
 
-       if (strlen(es->s_volume_name))
+       if (es->s_volume_name[0])
                label = es->s_volume_name;
        blkid_set_tag(dev, "LABEL", label, sizeof(es->s_volume_name));
 
@@ -330,7 +329,7 @@ static int probe_ext4dev(struct blkid_probe *probe,
            EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)
                return -BLKID_ERR_PARAM;
 
-       /* 
+       /*
         * If the filesystem does not have a journal and ext2 and ext4
         * is not present, then force this to be detected as an
         * ext4dev filesystem.
@@ -374,7 +373,7 @@ static int probe_ext4(struct blkid_probe *probe, struct blkid_magic *id,
            EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)
                return -BLKID_ERR_PARAM;
 
-       /* 
+       /*
         * If the filesystem does not have a journal and ext2 is not
         * present, then force this to be detected as an ext2
         * filesystem.
@@ -452,7 +451,7 @@ static int probe_ext2(struct blkid_probe *probe, struct blkid_magic *id,
             EXT2_FEATURE_INCOMPAT_UNSUPPORTED))
                return -BLKID_ERR_PARAM;
 
-       /* 
+       /*
         * If ext2 is not present, but ext4 or ext4dev are, then
         * disclaim we are ext2
         */
@@ -893,12 +892,13 @@ static int probe_luks(struct blkid_probe *probe,
                       struct blkid_magic *id __BLKID_ATTR((unused)),
                       unsigned char *buf)
 {
-       char uuid[40];
+       char uuid[41];
 
        /* 168 is the offset to the 40 character uuid:
         * http://luks.endorphin.org/LUKS-on-disk-format.pdf */
        strncpy(uuid, (char *) buf+168, 40);
-       blkid_set_tag(probe->dev, "UUID", uuid, sizeof(uuid));
+       uuid[40] = 0;
+       blkid_set_tag(probe->dev, "UUID", uuid, 40);
        return 0;
 }
 
@@ -1161,6 +1161,37 @@ static void unicode_16be_to_utf8(unsigned char *str, int out_len,
        str[j] = '\0';
 }
 
+static void unicode_16le_to_utf8(unsigned char *str, int out_len,
+                                const unsigned char *buf, int in_len)
+{
+       int i, j;
+       unsigned int c;
+
+       for (i = j = 0; i + 2 <= in_len; i += 2) {
+               c = (buf[i+1] << 8) | buf[i];
+               if (c == 0) {
+                       str[j] = '\0';
+                       break;
+               } else if (c < 0x80) {
+                       if (j+1 >= out_len)
+                               break;
+                       str[j++] = (unsigned char) c;
+               } else if (c < 0x800) {
+                       if (j+2 >= out_len)
+                               break;
+                       str[j++] = (unsigned char) (0xc0 | (c >> 6));
+                       str[j++] = (unsigned char) (0x80 | (c & 0x3f));
+               } else {
+                       if (j+3 >= out_len)
+                               break;
+                       str[j++] = (unsigned char) (0xe0 | (c >> 12));
+                       str[j++] = (unsigned char) (0x80 | ((c >> 6) & 0x3f));
+                       str[j++] = (unsigned char) (0x80 | (c & 0x3f));
+               }
+       }
+       str[j] = '\0';
+}
+
 static int probe_hfs(struct blkid_probe *probe __BLKID_ATTR((unused)),
                         struct blkid_magic *id __BLKID_ATTR((unused)),
                         unsigned char *buf)
@@ -1185,6 +1216,8 @@ static int probe_hfs(struct blkid_probe *probe __BLKID_ATTR((unused)),
 }
 
 
+#define HFSPLUS_SECTOR_SIZE        512
+
 static int probe_hfsplus(struct blkid_probe *probe,
                         struct blkid_magic *id,
                         unsigned char *buf)
@@ -1248,6 +1281,9 @@ static int probe_hfsplus(struct blkid_probe *probe,
        }
 
        blocksize = blkid_be32(hfsplus->blocksize);
+       if (blocksize < HFSPLUS_SECTOR_SIZE)
+               return 1;
+
        memcpy(extents, hfsplus->cat_file.extents, sizeof(extents));
        cat_block = blkid_be32(extents[0].start_block);
 
@@ -1403,6 +1439,103 @@ static int probe_f2fs(struct blkid_probe *probe,
     return 0;
 }
 
+static uint64_t exfat_block_to_offset(const struct exfat_super_block *sb,
+                                      uint64_t block)
+{
+    return block << sb->block_bits;
+}
+
+static uint64_t exfat_cluster_to_block(const struct exfat_super_block *sb,
+                                       uint32_t cluster)
+{
+    return sb->cluster_block_start +
+            ((uint64_t)(cluster - EXFAT_FIRST_DATA_CLUSTER) << sb->bpc_bits);
+}
+
+static uint64_t exfat_cluster_to_offset(const struct exfat_super_block *sb,
+                                        uint32_t cluster)
+{
+    return exfat_block_to_offset(sb, exfat_cluster_to_block(sb, cluster));
+}
+
+static uint32_t exfat_next_cluster(struct blkid_probe *probe,
+                                   const struct exfat_super_block *sb,
+                                   uint32_t cluster)
+{
+    uint32_t *next;
+    uint64_t offset;
+
+    offset = exfat_block_to_offset(sb, sb->fat_block_start)
+            + (uint64_t) cluster * sizeof (cluster);
+    next = (uint32_t *)get_buffer(probe, offset, sizeof (uint32_t));
+
+    return next ? *next : 0;
+}
+
+static struct exfat_entry_label *find_exfat_entry_label(
+    struct blkid_probe *probe, const struct exfat_super_block *sb)
+{
+    uint32_t cluster = sb->rootdir_cluster;
+    uint64_t offset = exfat_cluster_to_offset(sb, cluster);
+    uint8_t *entry;
+    const size_t max_iter = 10000;
+    size_t i = 0;
+
+    for (; i < max_iter; ++i) {
+        entry = (uint8_t *)get_buffer(probe, offset, EXFAT_ENTRY_SIZE);
+        if (!entry)
+            return NULL;
+        if (entry[0] == EXFAT_ENTRY_EOD)
+            return NULL;
+        if (entry[0] == EXFAT_ENTRY_LABEL)
+            return (struct exfat_entry_label*) entry;
+
+        offset += EXFAT_ENTRY_SIZE;
+        if (offset % CLUSTER_SIZE(sb) == 0) {
+            cluster = exfat_next_cluster(probe, sb, cluster);
+            if (cluster < EXFAT_FIRST_DATA_CLUSTER)
+                return NULL;
+            if (cluster > EXFAT_LAST_DATA_CLUSTER)
+                return NULL;
+            offset = exfat_cluster_to_offset(sb, cluster);
+        }
+    }
+
+    return NULL;
+}
+
+static int probe_exfat(struct blkid_probe *probe,
+                      struct blkid_magic *id __BLKID_ATTR((unused)),
+                       unsigned char *buf)
+{
+    struct exfat_super_block *sb;
+    struct exfat_entry_label *label;
+    char uuid[40];
+
+    sb = (struct exfat_super_block *)buf;
+    if (!sb || CLUSTER_SIZE(sb) == 0) {
+        DBG(DEBUG_PROBE, printf("bad exfat superblock.\n"));
+        return errno ? - errno : 1;
+    }
+
+    label = find_exfat_entry_label(probe, sb);
+    if (label) {
+        unsigned char utf8_label[128];
+        unicode_16le_to_utf8(utf8_label, sizeof(utf8_label), label->name, label->length * 2);
+        blkid_set_tag(probe->dev, "LABEL", (char *) utf8_label, 0);
+    } else {
+        blkid_set_tag(probe->dev, "LABEL", "disk", 4);
+    }
+
+    memset(uuid, 0, sizeof (uuid));
+    snprintf(uuid, sizeof (uuid), "%02hhX%02hhX-%02hhX%02hhX",
+             sb->volume_serial[3], sb->volume_serial[2],
+             sb->volume_serial[1], sb->volume_serial[0]);
+    blkid_set_tag(probe->dev, "UUID", uuid, strlen(uuid));
+
+    return 0;
+}
+
 /*
  * Various filesystem magics that we can check for.  Note that kboff and
  * sboff are in kilobytes and bytes respectively.  All magics are in
@@ -1512,6 +1645,7 @@ static struct blkid_magic type_array[] = {
   { "lvm2pv",   1,  0x218,  8, "LVM2 001",             probe_lvm2 },
   { "btrfs",    64,  0x40,  8, "_BHRfS_M",             probe_btrfs },
   { "f2fs",     1,      0,  4, "\x10\x20\xf5\xf2",     probe_f2fs },
+  { "exfat",     0,      3,  8, "EXFAT   ",             probe_exfat },
   {   NULL,     0,      0,  0, NULL,                   NULL }
 };
 
index 9d02695..dea4081 100644 (file)
@@ -14,6 +14,8 @@
 #ifndef _BLKID_PROBE_H
 #define _BLKID_PROBE_H
 
+#include <stdint.h>
+
 #include <blkid/blkid_types.h>
 
 struct blkid_magic;
@@ -661,7 +663,7 @@ struct btrfs_dev_item {
 
        /*
         * starting byte of this partition on the device,
-        * to allowr for stripe alignment in the future
+        * to allow for stripe alignment in the future
         */
        __u64 start_offset;
 
@@ -763,6 +765,46 @@ struct f2fs_super_block {
     __u8 extension_list[F2FS_MAX_EXTENSION][8]; /* extension array */
 } __attribute__((__packed__));
 
+struct exfat_super_block {
+    uint8_t jump[3];
+    uint8_t oem_name[8];
+    uint8_t __unused1[53];
+    uint64_t block_start;
+    uint64_t block_count;
+    uint32_t fat_block_start;
+    uint32_t fat_block_count;
+    uint32_t cluster_block_start;
+    uint32_t cluster_count;
+    uint32_t rootdir_cluster;
+    uint8_t volume_serial[4];
+    struct {
+        uint8_t vermin;
+        uint8_t vermaj;
+    } version;
+    uint16_t volume_state;
+    uint8_t block_bits;
+    uint8_t bpc_bits;
+    uint8_t fat_count;
+    uint8_t drive_no;
+    uint8_t allocated_percent;
+} __attribute__((__packed__));
+
+struct exfat_entry_label {
+    uint8_t type;
+    uint8_t length;
+    uint8_t name[30];
+} __attribute__((__packed__));
+
+#define BLOCK_SIZE(sb)   (1 << (sb)->block_bits)
+#define CLUSTER_SIZE(sb) (BLOCK_SIZE(sb) << (sb)->bpc_bits)
+
+#define EXFAT_FIRST_DATA_CLUSTER 2
+#define EXFAT_LAST_DATA_CLUSTER  0xffffff6
+#define EXFAT_ENTRY_SIZE         32
+
+#define EXFAT_ENTRY_EOD   0x00
+#define EXFAT_ENTRY_LABEL 0x83
+
 /*
  * Byte swap functions
  */
index efc348b..b894856 100644 (file)
@@ -199,7 +199,7 @@ static int parse_dev(blkid_cache cache, blkid_dev *dev, char **cp)
        start = skip_over_blank(start + 1);
        end = skip_over_word(start);
 
-       DBG(DEBUG_READ, printf("device should be %*s\n",
+       DBG(DEBUG_READ, printf("device should be %.*s\n",
                               (int)(end - start), start));
 
        if (**cp == '>')
index 762ffef..036f07a 100644 (file)
 #endif
 #include "blkidP.h"
 
+#ifdef _WIN32
+#include "windows.h"
+#endif
+
 static int save_dev(blkid_dev dev, FILE *file)
 {
        struct list_head *p;
@@ -102,7 +106,11 @@ int blkid_flush_cache(blkid_cache cache)
                                file = fdopen(fd, "w");
                                opened = tmp;
                        }
+#ifndef _WIN32
                        fchmod(fd, 0644);
+#else
+                       chmod(tmp, 0644);
+#endif
                }
        }
 
index 1eae7df..e88ebc4 100644 (file)
@@ -261,7 +261,7 @@ errout:
  *
  * These routines do not expose the list.h implementation, which are a
  * contamination of the namespace, and which force us to reveal far, far
- * too much of our internal implemenation.  I'm not convinced I want
+ * too much of our internal implementation.  I'm not convinced I want
  * to keep list.h in the long term, anyway.  It's fine for kernel
  * programming, but performance is not the #1 priority for this
  * library, and I really don't like the tradeoff of type-safety for
index 54c17aa..72124f4 100644 (file)
@@ -4,8 +4,8 @@
  * Copyright (C) 2004 Theodore Ts'o.
  *
  * %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 Lesser General Public License.
  * %End-Header%
  */
 
index bc006de..0ba03e8 100644 (file)
@@ -9,6 +9,9 @@
 /* Define to 1 to compile findfs */
 #undef CONFIG_BUILD_FINDFS
 
+/* Define to 1 for features for use by ext4 developers */
+#undef CONFIG_DEVELOPER_FEATURES
+
 /* Define to 1 if debugging ext3/4 journal code */
 #undef CONFIG_JBD_DEBUG
 
 /* Define to 1 if the testio I/O manager should be enabled */
 #undef CONFIG_TESTIO_DEBUG
 
-/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
-   systems. This function is required for `alloca.c' support on those systems.
-   */
-#undef CRAY_STACKSEG_END
-
-/* 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 you have the `add_key' function. */
 #undef HAVE_ADD_KEY
 
-/* Define to 1 if you have `alloca', as a function or macro. */
-#undef HAVE_ALLOCA
-
-/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
-   */
-#undef HAVE_ALLOCA_H
-
-/* Define to 1 if you have the `argz_count' function. */
-#undef HAVE_ARGZ_COUNT
-
-/* Define to 1 if you have the <argz.h> header file. */
-#undef HAVE_ARGZ_H
-
-/* Define to 1 if you have the `argz_next' function. */
-#undef HAVE_ARGZ_NEXT
-
-/* Define to 1 if you have the `argz_stringify' function. */
-#undef HAVE_ARGZ_STRINGIFY
-
-/* Define to 1 if you have the `asprintf' function. */
-#undef HAVE_ASPRINTF
-
 /* Define to 1 if you have the <attr/xattr.h> header file. */
 #undef HAVE_ATTR_XATTR_H
 
 /* Define to 1 if you have the `backtrace' function. */
 #undef HAVE_BACKTRACE
 
-/* Define to 1 if you have the `blkid_probe_enable_partitions' function. */
+/* Define to 1 if blkid has blkid_probe_enable_partitions */
 #undef HAVE_BLKID_PROBE_ENABLE_PARTITIONS
 
-/* Define to 1 if you have the `blkid_probe_get_topology' function. */
+/* Define to 1 if blkid has blkid_probe_get_topology */
 #undef HAVE_BLKID_PROBE_GET_TOPOLOGY
 
-/* Define to 1 if the compiler understands __builtin_expect. */
-#undef HAVE_BUILTIN_EXPECT
+/* Define to 1 if blkid has blkid_topology_get_dax */
+#undef HAVE_BLKID_TOPOLOGY_GET_DAX
 
-/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the
-   CoreFoundation framework. */
-#undef HAVE_CFLOCALECOPYCURRENT
+/* Define to 1 if you have the Mac OS X function
+   CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES
 
 /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
    the CoreFoundation framework. */
    */
 #undef HAVE_DCGETTEXT
 
-/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_FEOF_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FGETS_UNLOCKED
-
-/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETC_UNLOCKED
-
-/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL__SNPRINTF
-
-/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL__SNWPRINTF
-
 /* Define to 1 if you have the <dirent.h> header file. */
 #undef HAVE_DIRENT_H
 
 /* Define to 1 if you have the `fchown' function. */
 #undef HAVE_FCHOWN
 
+/* Define to 1 if you have the `fcntl' function. */
+#undef HAVE_FCNTL
+
 /* Define to 1 if you have the `fdatasync' function. */
 #undef HAVE_FDATASYNC
 
-/* Define to 1 if you have the <features.h> header file. */
-#undef HAVE_FEATURES_H
-
 /* Define to 1 if you have the `fstat64' function. */
 #undef HAVE_FSTAT64
 
+/* Define to 1 if you have the `fsync' function. */
+#undef HAVE_FSYNC
+
 /* Define to 1 if you have the `ftruncate64' function. */
 #undef HAVE_FTRUNCATE64
 
 /* Define to 1 if you have the `futimes' function. */
 #undef HAVE_FUTIMES
 
-/* Define to 1 if you have the `fwprintf' function. */
-#undef HAVE_FWPRINTF
-
 /* Define to 1 if you have the `getcwd' function. */
 #undef HAVE_GETCWD
 
 /* Define to 1 if you have the `getdtablesize' function. */
 #undef HAVE_GETDTABLESIZE
 
-/* Define to 1 if you have the `getegid' function. */
-#undef HAVE_GETEGID
-
-/* Define to 1 if you have the `geteuid' function. */
-#undef HAVE_GETEUID
-
-/* Define to 1 if you have the `getgid' function. */
-#undef HAVE_GETGID
+/* Define to 1 if you have the `gethostname' function. */
+#undef HAVE_GETHOSTNAME
 
 /* Define to 1 if you have the `getmntinfo' function. */
 #undef HAVE_GETMNTINFO
 /* Define to 1 if you have the <getopt.h> header file. */
 #undef HAVE_GETOPT_H
 
-/* Define to 1 if you have the `getpagesize' function. */
-#undef HAVE_GETPAGESIZE
-
 /* Define to 1 if you have the `getpwuid_r' function. */
 #undef HAVE_GETPWUID_R
 
 /* Define if the GNU gettext() function is already present or preinstalled. */
 #undef HAVE_GETTEXT
 
-/* Define to 1 if you have the `getuid' function. */
-#undef HAVE_GETUID
-
 /* Define if you have the iconv() function and it works. */
 #undef HAVE_ICONV
 
-/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
-#undef HAVE_INTMAX_T
-
 /* Define to 1 if the system has the type `intptr_t'. */
 #undef HAVE_INTPTR_T
 
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
-/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
-   declares uintmax_t. */
-#undef HAVE_INTTYPES_H_WITH_UINTMAX
-
 /* Define to 1 if you have the `jrand48' function. */
 #undef HAVE_JRAND48
 
 /* Define to 1 if you have the `keyctl' function. */
 #undef HAVE_KEYCTL
 
-/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
-#undef HAVE_LANGINFO_CODESET
-
-/* Define if your <locale.h> file defines LC_MESSAGES. */
-#undef HAVE_LC_MESSAGES
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
 /* Define to 1 if you have the <linux/falloc.h> header file. */
 #undef HAVE_LINUX_FALLOC_H
 
 /* Define to 1 if you have the <linux/fd.h> header file. */
 #undef HAVE_LINUX_FD_H
 
+/* Define to 1 if you have the <linux/fsmap.h> header file. */
+#undef HAVE_LINUX_FSMAP_H
+
 /* Define to 1 if you have the <linux/loop.h> header file. */
 #undef HAVE_LINUX_LOOP_H
 
 /* Define to 1 if you have the <linux/major.h> header file. */
 #undef HAVE_LINUX_MAJOR_H
 
+/* Define to 1 if you have the <linux/types.h> header file. */
+#undef HAVE_LINUX_TYPES_H
+
 /* Define to 1 if you have the `llistxattr' function. */
 #undef HAVE_LLISTXATTR
 
 /* Define to 1 if llseek declared in unistd.h */
 #undef HAVE_LLSEEK_PROTOTYPE
 
-/* Define to 1 if the system has the type 'long long int'. */
-#undef HAVE_LONG_LONG_INT
-
 /* Define to 1 if you have the `lseek64' function. */
 #undef HAVE_LSEEK64
 
 /* Define to 1 if you have the <malloc.h> header file. */
 #undef HAVE_MALLOC_H
 
-/* Define to 1 if you have the `mbrtowc' function. */
-#undef HAVE_MBRTOWC
-
 /* Define to 1 if you have the `mbstowcs' function. */
 #undef HAVE_MBSTOWCS
 
 /* Define to 1 if you have the <mntent.h> header file. */
 #undef HAVE_MNTENT_H
 
+/* Define to 1 if mount supports nodev. */
+#undef HAVE_MOUNT_NODEV
+
+/* Define to 1 if mount supports nosuid. */
+#undef HAVE_MOUNT_NOSUID
+
 /* Define to 1 if you have the `msync' function. */
 #undef HAVE_MSYNC
 
-/* Define to 1 if you have the `munmap' function. */
-#undef HAVE_MUNMAP
-
 /* Define to 1 if you have the `nanosleep' function. */
 #undef HAVE_NANOSLEEP
 
 /* Define to 1 if you have the <net/if.h> header file. */
 #undef HAVE_NET_IF_H
 
-/* Define to 1 if you have the `newlocale' function. */
-#undef HAVE_NEWLOCALE
-
 /* Define to 1 if you have the `open64' function. */
 #undef HAVE_OPEN64
 
 /* Define to 1 if you have the `posix_memalign' function. */
 #undef HAVE_POSIX_MEMALIGN
 
-/* Define if your printf() function supports format strings with positions. */
-#undef HAVE_POSIX_PRINTF
-
 /* Define to 1 if you have the `prctl' function. */
 #undef HAVE_PRCTL
 
 /* Define to 1 if you have the `pread64' function. */
 #undef HAVE_PREAD64
 
+/* Define if you have POSIX threads libraries and header files. */
+#undef HAVE_PTHREAD
+
 /* Define to 1 if you have the <pthread.h> header file. */
 #undef HAVE_PTHREAD_H
 
-/* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */
-#undef HAVE_PTHREAD_MUTEX_RECURSIVE
-
-/* Define if the POSIX multithreading library has read/write locks. */
-#undef HAVE_PTHREAD_RWLOCK
-
-/* Define to 1 if you have the `putenv' function. */
-#undef HAVE_PUTENV
+/* Have PTHREAD_PRIO_INHERIT. */
+#undef HAVE_PTHREAD_PRIO_INHERIT
 
 /* Define to 1 if you have the `pwrite' function. */
 #undef HAVE_PWRITE
 /* Define to 1 if sem_init() exists */
 #undef HAVE_SEM_INIT
 
-/* Define to 1 if you have the `setenv' function. */
-#undef HAVE_SETENV
-
 /* Define to 1 if you have the <setjmp.h> header file. */
 #undef HAVE_SETJMP_H
 
-/* Define to 1 if you have the `setlocale' function. */
-#undef HAVE_SETLOCALE
-
 /* Define to 1 if you have the `setmntent' function. */
 #undef HAVE_SETMNTENT
 
 /* Define to 1 if you have the <stdarg.h> header file. */
 #undef HAVE_STDARG_H
 
-/* Define to 1 if you have the <stddef.h> header file. */
-#undef HAVE_STDDEF_H
-
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
-/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
-   uintmax_t. */
-#undef HAVE_STDINT_H_WITH_UINTMAX
-
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
 /* Define to 1 if you have the `strptime' function. */
 #undef HAVE_STRPTIME
 
-/* Define to 1 if you have the `strtoul' function. */
-#undef HAVE_STRTOUL
-
 /* Define to 1 if you have the `strtoull' function. */
 #undef HAVE_STRTOULL
 
 /* Define to 1 if `st_atim' is a member of `struct stat'. */
 #undef HAVE_STRUCT_STAT_ST_ATIM
 
-/* Define to 1 if you have the `symlink' function. */
-#undef HAVE_SYMLINK
-
 /* Define to 1 if you have the `sync_file_range' function. */
 #undef HAVE_SYNC_FILE_RANGE
 
 /* Define to 1 if you have the <sys/mount.h> header file. */
 #undef HAVE_SYS_MOUNT_H
 
-/* Define to 1 if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
-
 /* Define to 1 if you have the <sys/prctl.h> header file. */
 #undef HAVE_SYS_PRCTL_H
 
 /* Define to 1 if you have the <sys/wait.h> header file. */
 #undef HAVE_SYS_WAIT_H
 
+/* Define to 1 if you have the <sys/xattr.h> header file. */
+#undef HAVE_SYS_XATTR_H
+
 /* Define to 1 if you have the <termios.h> header file. */
 #undef HAVE_TERMIOS_H
 
 /* Define to 1 if you have the <termio.h> header file. */
 #undef HAVE_TERMIO_H
 
-/* Define to 1 if you have the `tsearch' function. */
-#undef HAVE_TSEARCH
-
 /* Define to 1 if ssize_t declared */
 #undef HAVE_TYPE_SSIZE_T
 
-/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
-#undef HAVE_UINTMAX_T
-
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
-/* Define to 1 if the system has the type 'unsigned long long int'. */
-#undef HAVE_UNSIGNED_LONG_LONG_INT
-
-/* Define to 1 if you have the `uselocale' function. */
-#undef HAVE_USELOCALE
-
 /* Define to 1 if you have the `usleep' function. */
 #undef HAVE_USLEEP
 
 /* Define to 1 if you have the `valloc' function. */
 #undef HAVE_VALLOC
 
-/* Define to 1 or 0, depending whether the compiler supports simple visibility
-   declarations. */
-#undef HAVE_VISIBILITY
-
 /* Define to 1 if you have the `vprintf' function. */
 #undef HAVE_VPRINTF
 
-/* Define if you have the 'wchar_t' type. */
-#undef HAVE_WCHAR_T
-
-/* Define to 1 if you have the `wcrtomb' function. */
-#undef HAVE_WCRTOMB
-
-/* Define to 1 if you have the `wcslen' function. */
-#undef HAVE_WCSLEN
-
-/* Define to 1 if you have the `wcsnlen' function. */
-#undef HAVE_WCSNLEN
-
-/* Define if you have the 'wint_t' type. */
-#undef HAVE_WINT_T
-
-/* Define to 1 if O_NOATIME works. */
-#undef HAVE_WORKING_O_NOATIME
-
-/* Define to 1 if O_NOFOLLOW works. */
-#undef HAVE_WORKING_O_NOFOLLOW
-
-/* Define to 1 if you have the `__fsetlocking' function. */
-#undef HAVE___FSETLOCKING
-
 /* Define to 1 if you have the `__secure_getenv' function. */
 #undef HAVE___SECURE_GETENV
 
-/* Define as const if the declaration of iconv() needs const. */
-#undef ICONV_CONST
-
-/* Define if integer division by zero raises signal SIGFPE. */
-#undef INTDIV0_RAISES_SIGFPE
-
 /* package name for gettext */
 #undef PACKAGE
 
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
-/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
-#undef PRI_MACROS_BROKEN
-
-/* Define if the pthread_in_use() detection is hard. */
-#undef PTHREAD_IN_USE_DETECTION_HARD
+/* Define to necessary symbol if this constant uses a non-standard name on
+   your system. */
+#undef PTHREAD_CREATE_JOINABLE
 
 /* The size of `int', as computed by sizeof. */
 #undef SIZEOF_INT
 /* The size of `time_t', as computed by sizeof. */
 #undef SIZEOF_TIME_T
 
-/* Define as the maximum value of type 'size_t', if the system doesn't define
-   it. */
-#ifndef SIZE_MAX
-# undef SIZE_MAX
-#endif
-
-/* If using the C implementation of alloca, define if you know the
-   direction of stack growth for your system; otherwise it will be
-   automatically deduced at runtime.
-       STACK_DIRECTION > 0 => grows toward higher addresses
-       STACK_DIRECTION < 0 => grows toward lower addresses
-       STACK_DIRECTION = 0 => direction of growth unknown */
-#undef STACK_DIRECTION
-
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
 /* If the compiler supports a TLS storage class define it to that here */
 #undef TLS
 
-/* Define if the POSIX multithreading library can be used. */
-#undef USE_POSIX_THREADS
-
-/* Define if references to the POSIX multithreading library should be made
-   weak. */
-#undef USE_POSIX_THREADS_WEAK
-
-/* Define if the GNU Pth multithreading library can be used. */
-#undef USE_PTH_THREADS
-
-/* Define if references to the GNU Pth multithreading library should be made
-   weak. */
-#undef USE_PTH_THREADS_WEAK
-
-/* Define if the old Solaris multithreading library can be used. */
-#undef USE_SOLARIS_THREADS
-
-/* Define if references to the old Solaris multithreading library should be
-   made weak. */
-#undef USE_SOLARIS_THREADS_WEAK
-
 /* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
 # undef _ALL_SOURCE
 /* Define to 1 to build uuidd */
 #undef USE_UUIDD
 
-/* Define if the native Windows multithreading API can be used. */
-#undef USE_WINDOWS_THREADS
-
 /* version for gettext */
 #undef VERSION
 
 /* Define to 1 if you need to in order for `stat' and other things to work. */
 #undef _POSIX_SOURCE
 
-/* Please see the Gnulib manual for how to use these macros.
-
-   Suppress extern inline with HP-UX cc, as it appears to be broken; see
-   <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>.
-
-   Suppress extern inline with Sun C in standards-conformance mode, as it
-   mishandles inline functions that call each other.  E.g., for 'inline void f
-   (void) { } inline void g (void) { f (); }', c99 incorrectly complains
-   'reference to static identifier "f" in extern inline function'.
-   This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
-
-   Suppress the use of extern inline on Apple's platforms, as Libc at least
-   through Libc-825.26 (2013-04-09) is incompatible with it; see, e.g.,
-   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
-   Perhaps Apple will fix this some day.  */
-#if ((__GNUC__ \
-      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
-      : (199901L <= __STDC_VERSION__ \
-         && !defined __HP_cc \
-         && !(defined __SUNPRO_C && __STDC__))) \
-     && !defined __APPLE__)
-# define _GL_INLINE inline
-# define _GL_EXTERN_INLINE extern inline
-#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
-       && !defined __APPLE__)
-# if __GNUC_GNU_INLINE__
-   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
-#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
-# else
-#  define _GL_INLINE extern inline
-# endif
-# define _GL_EXTERN_INLINE extern
-#else
-# define _GL_INLINE static _GL_UNUSED
-# define _GL_EXTERN_INLINE static _GL_UNUSED
-#endif
-
-#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
-# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
-#  define _GL_INLINE_HEADER_CONST_PRAGMA
-# else
-#  define _GL_INLINE_HEADER_CONST_PRAGMA \
-     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
-# endif
-  /* Suppress GCC's bogus "no previous prototype for 'FOO'"
-     and "no previous declaration for 'FOO'"  diagnostics,
-     when FOO is an inline function in the header; see
-     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.  */
-# define _GL_INLINE_HEADER_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
-    _GL_INLINE_HEADER_CONST_PRAGMA
-# define _GL_INLINE_HEADER_END \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define _GL_INLINE_HEADER_BEGIN
-# define _GL_INLINE_HEADER_END
-#endif
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
-   calls it, or to nothing if 'inline' is not supported under any name.  */
-#ifndef __cplusplus
-#undef inline
-#endif
-
-/* Define as the type of the result of subtracting two pointers, if the system
-   doesn't define it. */
-#undef ptrdiff_t
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
-
-/* Define to unsigned long or unsigned long long if <stdint.h> and
-   <inttypes.h> don't define. */
-#undef uintmax_t
-
 #include <dirpaths.h>
-
-
-#define __libc_lock_t                   gl_lock_t
-#define __libc_lock_define              gl_lock_define
-#define __libc_lock_define_initialized  gl_lock_define_initialized
-#define __libc_lock_init                gl_lock_init
-#define __libc_lock_lock                gl_lock_lock
-#define __libc_lock_unlock              gl_lock_unlock
-#define __libc_lock_recursive_t                   gl_recursive_lock_t
-#define __libc_lock_define_recursive              gl_recursive_lock_define
-#define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
-#define __libc_lock_init_recursive                gl_recursive_lock_init
-#define __libc_lock_lock_recursive                gl_recursive_lock_lock
-#define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
-#define glthread_in_use  libintl_thread_in_use
-#define glthread_lock_init_func     libintl_lock_init_func
-#define glthread_lock_lock_func     libintl_lock_lock_func
-#define glthread_lock_unlock_func   libintl_lock_unlock_func
-#define glthread_lock_destroy_func  libintl_lock_destroy_func
-#define glthread_rwlock_init_multithreaded     libintl_rwlock_init_multithreaded
-#define glthread_rwlock_init_func              libintl_rwlock_init_func
-#define glthread_rwlock_rdlock_multithreaded   libintl_rwlock_rdlock_multithreaded
-#define glthread_rwlock_rdlock_func            libintl_rwlock_rdlock_func
-#define glthread_rwlock_wrlock_multithreaded   libintl_rwlock_wrlock_multithreaded
-#define glthread_rwlock_wrlock_func            libintl_rwlock_wrlock_func
-#define glthread_rwlock_unlock_multithreaded   libintl_rwlock_unlock_multithreaded
-#define glthread_rwlock_unlock_func            libintl_rwlock_unlock_func
-#define glthread_rwlock_destroy_multithreaded  libintl_rwlock_destroy_multithreaded
-#define glthread_rwlock_destroy_func           libintl_rwlock_destroy_func
-#define glthread_recursive_lock_init_multithreaded     libintl_recursive_lock_init_multithreaded
-#define glthread_recursive_lock_init_func              libintl_recursive_lock_init_func
-#define glthread_recursive_lock_lock_multithreaded     libintl_recursive_lock_lock_multithreaded
-#define glthread_recursive_lock_lock_func              libintl_recursive_lock_lock_func
-#define glthread_recursive_lock_unlock_multithreaded   libintl_recursive_lock_unlock_multithreaded
-#define glthread_recursive_lock_unlock_func            libintl_recursive_lock_unlock_func
-#define glthread_recursive_lock_destroy_multithreaded  libintl_recursive_lock_destroy_multithreaded
-#define glthread_recursive_lock_destroy_func           libintl_recursive_lock_destroy_func
-#define glthread_once_func            libintl_once_func
-#define glthread_once_singlethreaded  libintl_once_singlethreaded
-#define glthread_once_multithreaded   libintl_once_multithreaded
-
diff --git a/lib/e2p/Android.bp b/lib/e2p/Android.bp
new file mode 100644 (file)
index 0000000..2a70972
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2017 The Android Open Source Project
+
+cc_library {
+    name: "libext2_e2p",
+    host_supported: true,
+    ramdisk_available: true,
+    vendor_ramdisk_available: true,
+    recovery_available: true,
+    unique_host_soname: true,
+    defaults: ["e2fsprogs-defaults"],
+    srcs: [
+        "encoding.c",
+        "feature.c",
+        "fgetflags.c",
+        "fsetflags.c",
+        "fgetproject.c",
+        "fsetproject.c",
+        "fgetversion.c",
+        "fsetversion.c",
+        "getflags.c",
+        "getversion.c",
+        "hashstr.c",
+        "iod.c",
+        "ljs.c",
+        "ls.c",
+        "mntopts.c",
+        "parse_num.c",
+        "pe.c",
+        "pf.c",
+        "ps.c",
+        "setflags.c",
+        "setversion.c",
+        "uuid.c",
+        "ostype.c",
+        "percent.c",
+    ],
+
+    cflags: [
+        "-Wno-error=attributes",
+        "-Wno-unused-parameter",
+    ],
+
+    target: {
+        windows: {
+            include_dirs: [ "external/e2fsprogs/include/mingw" ],
+            enabled: true,
+            cflags: [
+                "-Wno-unused-variable",
+            ],
+            clang_cflags: [
+                "-Wno-error=typedef-redefinition",
+            ],
+            host_ldlibs: [
+                "-lws2_32",
+            ],
+        },
+    },
+
+    header_libs: ["libext2-headers"],
+    export_include_dirs: ["."],
+    export_header_lib_headers: ["libext2-headers"],
+}
diff --git a/lib/e2p/Android.mk b/lib/e2p/Android.mk
deleted file mode 100644 (file)
index 8a732c3..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-libext2_e2p_src_files := \
-       feature.c \
-       fgetflags.c \
-       fsetflags.c \
-       fgetproject.c \
-       fsetproject.c \
-       fgetversion.c \
-       fsetversion.c \
-       getflags.c \
-       getversion.c \
-       hashstr.c \
-       iod.c \
-       ls.c \
-       mntopts.c \
-       parse_num.c \
-       pe.c \
-       pf.c \
-       ps.c \
-       setflags.c \
-       setversion.c \
-       uuid.c \
-       ostype.c \
-       percent.c
-
-libext2_e2p_c_includes := external/e2fsprogs/lib
-
-libext2_e2p_cflags := -O2 -g -W -Wall
-
-libext2_e2p_system_shared_libraries := libc
-
-libext2_e2p_system_static_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_e2p_src_files)
-LOCAL_C_INCLUDES := $(libext2_e2p_c_includes)
-LOCAL_CFLAGS := $(libext2_e2p_cflags)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2_e2p_system_shared_libraries)
-LOCAL_MODULE := libext2_e2p
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_e2p_src_files)
-LOCAL_C_INCLUDES := $(libext2_e2p_c_includes)
-LOCAL_CFLAGS := $(libext2_e2p_cflags)
-LOCAL_STATIC_LIBRARIES := $(libext2_e2p_system_static_libraries)
-LOCAL_MODULE := libext2_e2p
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_e2p_src_files)
-LOCAL_C_INCLUDES := $(libext2_e2p_c_includes)
-LOCAL_CFLAGS := $(libext2_e2p_cflags)
-LOCAL_MODULE := libext2_e2p-host
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_SHARED_LIBRARY)
index e86a8ac..cd23511 100644 (file)
@@ -11,25 +11,30 @@ VPATH = @srcdir@
 top_builddir = ../..
 my_dir = lib/e2p
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
 all::  e2p.pc
 
 OBJS=          feature.o fgetflags.o fsetflags.o fgetversion.o fsetversion.o \
-               getflags.o getversion.o hashstr.o iod.o ls.o mntopts.o \
+               getflags.o getversion.o hashstr.o iod.o ls.o ljs.o mntopts.o \
                parse_num.o pe.o pf.o ps.o setflags.o setversion.o uuid.o \
-               ostype.o percent.o crypto_mode.o fgetproject.o fsetproject.o
+               ostype.o percent.o crypto_mode.o fgetproject.o fsetproject.o \
+               encoding.o errcode.o
 
 SRCS=          $(srcdir)/feature.c $(srcdir)/fgetflags.c \
                $(srcdir)/fsetflags.c $(srcdir)/fgetversion.c \
                $(srcdir)/fsetversion.c $(srcdir)/getflags.c \
                $(srcdir)/getversion.c $(srcdir)/hashstr.c $(srcdir)/iod.c \
-               $(srcdir)/ls.c $(srcdir)/mntopts.c $(srcdir)/parse_num.c \
-               $(srcdir)/pe.c $(srcdir)/pf.c $(srcdir)/ps.c \
-               $(srcdir)/setflags.c $(srcdir)/setversion.c $(srcdir)/uuid.c \
-               $(srcdir)/ostype.c $(srcdir)/percent.c $(srcdir)/crypto_mode.c \
-               $(srcdir)/fgetproject.c $(srcdir)/fsetproject.c
+               $(srcdir)/ls.c $(srcdir)/ljs.c $(srcdir)/mntopts.c \
+               $(srcdir)/parse_num.c $(srcdir)/pe.c $(srcdir)/pf.c \
+               $(srcdir)/ps.c $(srcdir)/setflags.c $(srcdir)/setversion.c \
+               $(srcdir)/uuid.c $(srcdir)/ostype.c $(srcdir)/percent.c \
+               $(srcdir)/crypto_mode.c $(srcdir)/fgetproject.c \
+               $(srcdir)/fsetproject.c $(srcdir)/encoding.c \
+               $(srcdir)/errcode.c
+
 HFILES= e2p.h
 
 LIBRARY= libe2p
@@ -75,13 +80,13 @@ tst_feature: $(srcdir)/feature.c
        $(Q) $(CC) -DTEST_PROGRAM -I$(top_srcdir)/lib -o tst_feature \
                $(srcdir)/feature.c $(ALL_CFLAGS) $(ALL_LDFLAGS)
 
-check::        tst_ostype tst_feature
+fullcheck check::      tst_ostype tst_feature
        ./tst_ostype
        ./tst_feature
 
 installdirs::
-       $(E) "  MKINSTALLDIRS $(libdir) $(includedir)/e2p"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+       $(E) "  MKDIR_P $(libdir) $(includedir)/e2p"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(libdir) \
                $(DESTDIR)$(includedir)/e2p $(DESTDIR)$(pkgconfigdir)
 
 install:: all installdirs 
@@ -123,9 +128,10 @@ feature.o: $(srcdir)/feature.c $(top_builddir)/lib/config.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/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
+ $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \
+ $(top_srcdir)/lib/ext2fs/compiler.h
 fgetflags.o: $(srcdir)/fgetflags.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2p.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h
@@ -156,9 +162,18 @@ ls.o: $(srcdir)/ls.c $(top_builddir)/lib/config.h \
  $(top_srcdir)/lib/support/quotaio.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/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
+ljs.o: $(srcdir)/ljs.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.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/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/e2p.h \
+ $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h
 mntopts.o: $(srcdir)/mntopts.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2p.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h
@@ -200,3 +215,8 @@ fsetproject.o: $(srcdir)/fsetproject.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/project.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(srcdir)/e2p.h
+encoding.o: $(srcdir)/encoding.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/e2p.h \
+ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h
+errcode.o: $(srcdir)/errcode.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h
index bc553fd..4933016 100644 (file)
@@ -20,7 +20,7 @@
 #include "e2p.h"
 
 struct mode {
-       unsigned int    num;
+       int             num;
        const char      *string;
 };
 
index 66b83b4..65702a7 100644 (file)
@@ -47,6 +47,12 @@ void print_fs_state (FILE * f, unsigned short state);
 int setflags (int fd, unsigned long flags);
 int setversion (int fd, unsigned long version);
 
+#define E2P_LIST_JOURNAL_FLAG_FC               0x1
+void e2p_list_journal_super(FILE *f, char *journal_sb_buf,
+                           int exp_block_size, int flags);
+
+void e2p_feature_to_string(int compat, unsigned int mask, char *buf,
+                           size_t buf_len);
 const char *e2p_feature2string(int compat, unsigned int mask);
 const char *e2p_jrnl_feature2string(int compat, unsigned int mask);
 int e2p_string2feature(char *string, int *compat, unsigned int *mask);
@@ -74,3 +80,13 @@ char *e2p_os2string(int os_type);
 int e2p_string2os(char *str);
 
 unsigned int e2p_percent(int percent, unsigned int base);
+
+const char *e2p_encmode2string(int num);
+int e2p_string2encmode(char *string);
+
+int e2p_str2encoding(const char *string);
+const char *e2p_encoding2str(int encoding);
+int e2p_get_encoding_flags(int encoding);
+int e2p_str2encoding_flags(int encoding, char *param, __u16 *flags);
+
+const char *e2p_errcode2str(int err);
index c171ae6..150b089 100644 (file)
@@ -4,7 +4,7 @@ libdir=@libdir@
 includedir=@includedir@
 
 Name: e2p
-Description: Ext2fs userpace programs utility library
+Description: Ext2fs userspace programs utility library
 Version: @E2FSPROGS_VERSION@
 Requires: 
 Cflags: -I${includedir}/e2p -I${includedir}
diff --git a/lib/e2p/encoding.c b/lib/e2p/encoding.c
new file mode 100644 (file)
index 0000000..24266fc
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * encoding.c --- convert between encoding magic numbers and strings
+ *
+ * Copyright (C) 2018  Collabora Ltd.
+ *
+ * %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 <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+
+#include "e2p.h"
+
+#define ARRAY_SIZE(array)                      \
+        (sizeof(array) / sizeof(array[0]))
+
+static const struct {
+       const char *name;
+       __u16 encoding_magic;
+       __u16 default_flags;
+
+} ext4_encoding_map[] = {
+       {
+               .encoding_magic = EXT4_ENC_UTF8_12_1,
+               .name = "utf8-12.1",
+               .default_flags = 0,
+       },
+       {
+               .encoding_magic = EXT4_ENC_UTF8_12_1,
+               .name = "utf8",
+               .default_flags = 0,
+       },
+};
+
+static const struct enc_flags {
+       __u16 flag;
+       const char *param;
+} encoding_flags[] = {
+       { EXT4_ENC_STRICT_MODE_FL, "strict" },
+};
+
+/* Return a positive number < 0xff indicating the encoding magic number
+ * or a negative value indicating error. */
+int e2p_str2encoding(const char *string)
+{
+       unsigned int i;
+
+       for (i = 0 ; i < ARRAY_SIZE(ext4_encoding_map); i++)
+               if (!strcmp(string, ext4_encoding_map[i].name))
+                       return ext4_encoding_map[i].encoding_magic;
+
+       return -EINVAL;
+}
+
+/* Return the name of an encoding or NULL */
+const char *e2p_encoding2str(int encoding)
+{
+       unsigned int i;
+       static char buf[32];
+
+       for (i = 0 ; i < ARRAY_SIZE(ext4_encoding_map); i++)
+               if (ext4_encoding_map[i].encoding_magic == encoding)
+                       return ext4_encoding_map[i].name;
+       sprintf(buf, "UNKNOWN_ENCODING_%d", encoding);
+       return buf;
+}
+
+int e2p_get_encoding_flags(int encoding)
+{
+       unsigned int i;
+
+       for (i = 0 ; i < ARRAY_SIZE(ext4_encoding_map); i++)
+               if (ext4_encoding_map[i].encoding_magic == encoding)
+                       return ext4_encoding_map[i].default_flags;
+
+       return 0;
+}
+
+int e2p_str2encoding_flags(int encoding, char *param, __u16 *flags)
+{
+       char *f = strtok(param, "-");
+       const struct enc_flags *fl;
+       unsigned int i, neg = 0;
+
+       if (encoding != EXT4_ENC_UTF8_12_1)
+               return -EINVAL;
+       while (f) {
+               neg = 0;
+               if (!strncmp("no", f, 2)) {
+                       neg = 1;
+                       f += 2;
+               }
+
+               for (i = 0; i < ARRAY_SIZE(encoding_flags); i++) {
+                       fl = &encoding_flags[i];
+                       if (!strcmp(fl->param, f)) {
+                               if (neg)
+                                       *flags &= ~fl->flag;
+                               else
+                                       *flags |= fl->flag;
+
+                               goto next_flag;
+                       }
+               }
+               return -EINVAL;
+       next_flag:
+               f = strtok(NULL, "-");
+       }
+       return 0;
+}
diff --git a/lib/e2p/errcode.c b/lib/e2p/errcode.c
new file mode 100644 (file)
index 0000000..27d4b15
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * errcode.c           - convert an error code to a string
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static const char *err_string[] = {
+       "",
+       "UNKNOWN",              /*  1 */
+       "EIO",                  /*  2 */
+       "ENOMEM",               /*  3 */
+       "EFSBADCRC",            /*  4 */
+       "EFSCORRUPTED",         /*  5 */
+       "ENOSPC",               /*  6 */
+       "ENOKEY",               /*  7 */
+       "EROFS",                /*  8 */
+       "EFBIG",                /*  9 */
+       "EEXIST",               /* 10 */
+       "ERANGE",               /* 11 */
+       "EOVERFLOW",            /* 12 */
+       "EBUSY",                /* 13 */
+       "ENOTDIR",              /* 14 */
+       "ENOTEMPTY",            /* 15 */
+       "ESHUTDOWN",            /* 16 */
+       "EFAULT",               /* 17 */
+};
+
+#define ARRAY_SIZE(array)                      \
+        (sizeof(array) / sizeof(array[0]))
+
+/* Return the name of an encoding or NULL */
+const char *e2p_errcode2str(int err)
+{
+       unsigned int i;
+       static char buf[32];
+
+       if (err < ARRAY_SIZE(err_string))
+               return err_string[err];
+
+       sprintf(buf, "UNKNOWN_ERRCODE_%d", err);
+       return buf;
+}
+
+
index b7f6c1d..2291060 100644 (file)
@@ -45,6 +45,10 @@ static struct feature feature_list[] = {
                        "snapshot_bitmap" },
        {       E2P_FEATURE_COMPAT, EXT4_FEATURE_COMPAT_SPARSE_SUPER2,
                        "sparse_super2" },
+       {       E2P_FEATURE_COMPAT, EXT4_FEATURE_COMPAT_FAST_COMMIT,
+                       "fast_commit" },
+       {       E2P_FEATURE_COMPAT, EXT4_FEATURE_COMPAT_STABLE_INODES,
+                       "stable_inodes" },
 
        {       E2P_FEATURE_RO_INCOMPAT, EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER,
                        "sparse_super" },
@@ -72,6 +76,10 @@ static struct feature feature_list[] = {
                        "read-only" },
        {       E2P_FEATURE_RO_INCOMPAT, EXT4_FEATURE_RO_COMPAT_PROJECT,
                        "project"},
+       {       E2P_FEATURE_RO_INCOMPAT, EXT4_FEATURE_RO_COMPAT_SHARED_BLOCKS,
+                       "shared_blocks"},
+       {       E2P_FEATURE_RO_INCOMPAT, EXT4_FEATURE_RO_COMPAT_VERITY,
+                       "verity"},
 
        {       E2P_FEATURE_INCOMPAT, EXT2_FEATURE_INCOMPAT_COMPRESSION,
                        "compression" },
@@ -105,37 +113,44 @@ static struct feature feature_list[] = {
                        "inline_data"},
        {       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_ENCRYPT,
                        "encrypt"},
+       {       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_CASEFOLD,
+                       "casefold"},
+       {       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_CASEFOLD,
+                       "fname_encoding"},
        {       0, 0, 0 },
 };
 
 static struct feature jrnl_feature_list[] = {
-       {       E2P_FEATURE_COMPAT, JFS_FEATURE_COMPAT_CHECKSUM,
+       {       E2P_FEATURE_COMPAT, JBD2_FEATURE_COMPAT_CHECKSUM,
                        "journal_checksum" },
 
-       {       E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_REVOKE,
+       {       E2P_FEATURE_INCOMPAT, JBD2_FEATURE_INCOMPAT_REVOKE,
                        "journal_incompat_revoke" },
-       {       E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_64BIT,
+       {       E2P_FEATURE_INCOMPAT, JBD2_FEATURE_INCOMPAT_64BIT,
                        "journal_64bit" },
-       {       E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_ASYNC_COMMIT,
+       {       E2P_FEATURE_INCOMPAT, JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT,
                        "journal_async_commit" },
-       {       E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_CSUM_V2,
+       {       E2P_FEATURE_INCOMPAT, JBD2_FEATURE_INCOMPAT_CSUM_V2,
                        "journal_checksum_v2" },
-       {       E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_CSUM_V3,
+       {       E2P_FEATURE_INCOMPAT, JBD2_FEATURE_INCOMPAT_CSUM_V3,
                        "journal_checksum_v3" },
        {       0, 0, 0 },
 };
 
-const char *e2p_feature2string(int compat, unsigned int mask)
+void e2p_feature_to_string(int compat, unsigned int mask, char *buf,
+                           size_t buf_len)
 {
        struct feature  *f;
-       static char buf[20];
        char    fchar;
        int     fnum;
 
        for (f = feature_list; f->string; f++) {
                if ((compat == f->compat) &&
-                   (mask == f->mask))
-                       return f->string;
+                   (mask == f->mask)) {
+                       strncpy(buf, f->string, buf_len);
+                       buf[buf_len - 1] = 0;
+                       return;
+               }
        }
        switch (compat) {
        case  E2P_FEATURE_COMPAT:
@@ -153,6 +168,13 @@ const char *e2p_feature2string(int compat, unsigned int mask)
        }
        for (fnum = 0; mask >>= 1; fnum++);
        sprintf(buf, "FEATURE_%c%d", fchar, fnum);
+}
+
+const char *e2p_feature2string(int compat, unsigned int mask)
+{
+       static char buf[20];
+
+       e2p_feature_to_string(compat, mask, buf, sizeof(buf) / sizeof(buf[0]));
        return buf;
 }
 
index 33becfe..a65e9a5 100644 (file)
@@ -31,7 +31,9 @@
 #include <unistd.h>
 #endif
 #include <fcntl.h>
+#if HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
+#endif
 
 #include "e2p.h"
 
index dcbff5b..c2e0455 100644 (file)
@@ -31,7 +31,9 @@
 #include <unistd.h>
 #endif
 #include <fcntl.h>
+#if HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
+#endif
 
 #include "e2p.h"
 
index 71031ff..9f719b4 100644 (file)
@@ -20,7 +20,9 @@
 #if HAVE_ERRNO_H
 #include <errno.h>
 #endif
+#if HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
+#endif
 
 #include "e2p.h"
 
diff --git a/lib/e2p/ljs.c b/lib/e2p/ljs.c
new file mode 100644 (file)
index 0000000..5972819
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * ljs.c                       - List the contents of an journal superblock
+ *
+ * Copyright (C) 1995, 1996, 1997  Theodore Ts'o <tytso@mit.edu>
+ *
+ * %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 <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <grp.h>
+#include <pwd.h>
+#include <time.h>
+
+#include "ext2fs/ext2_fs.h"
+#include "ext2fs/ext2fs.h"
+#include "e2p.h"
+#include "ext2fs/kernel-jbd.h"
+
+#ifdef WORDS_BIGENDIAN
+#define e2p_be32(x) (x)
+#else
+static __u32 e2p_swab32(__u32 val)
+{
+       return ((val>>24) | ((val>>8)&0xFF00) |
+               ((val<<8)&0xFF0000) | (val<<24));
+}
+
+#define e2p_be32(x) e2p_swab32(x)
+#endif
+
+/*
+ * This function is copied from kernel-jbd.h's function
+ * jbd2_journal_get_num_fc_blks() to avoid inter-library dependencies.
+ */
+static inline int get_num_fc_blks(journal_superblock_t *jsb)
+{
+       int num_fc_blocks = e2p_be32(jsb->s_num_fc_blks);
+
+       return num_fc_blocks ? num_fc_blocks : JBD2_DEFAULT_FAST_COMMIT_BLOCKS;
+}
+
+static const char *journal_checksum_type_str(__u8 type)
+{
+       switch (type) {
+       case JBD2_CRC32C_CHKSUM:
+               return "crc32c";
+       default:
+               return "unknown";
+       }
+}
+
+void e2p_list_journal_super(FILE *f, char *journal_sb_buf,
+                           int exp_block_size, int flags)
+{
+       journal_superblock_t *jsb = (journal_superblock_t *) journal_sb_buf;
+       __u32 *mask_ptr, mask, m;
+       unsigned int size;
+       int j, printed = 0;
+       unsigned int i, nr_users;
+       int num_fc_blks = 0;
+       int journal_blks = 0;
+
+       if (flags & E2P_LIST_JOURNAL_FLAG_FC)
+               num_fc_blks = get_num_fc_blks((journal_superblock_t *)journal_sb_buf);
+       journal_blks = ntohl(jsb->s_maxlen) - num_fc_blks;
+       fprintf(f, "%s", "Journal features:        ");
+       for (i=0, mask_ptr=&jsb->s_feature_compat; i <3; i++,mask_ptr++) {
+               mask = e2p_be32(*mask_ptr);
+               for (j=0,m=1; j < 32; j++, m<<=1) {
+                       if (mask & m) {
+                               fprintf(f, " %s", e2p_jrnl_feature2string(i, m));
+                               printed++;
+                       }
+               }
+       }
+       if (printed == 0)
+               fprintf(f, " (none)");
+       fputc('\n', f);
+       fputs("Total journal size:       ", f);
+       size = (ntohl(jsb->s_blocksize) / 1024) * ntohl(jsb->s_maxlen);
+       if (size < 8192)
+               fprintf(f, "%uk\n", size);
+       else
+               fprintf(f, "%uM\n", size >> 10);
+       nr_users = (unsigned int) ntohl(jsb->s_nr_users);
+       if (exp_block_size != (int) ntohl(jsb->s_blocksize))
+               fprintf(f, "Journal block size:       %u\n",
+                       (unsigned int)ntohl(jsb->s_blocksize));
+       fprintf(f, "Total journal blocks:     %u\n",
+               (unsigned int)(journal_blks + num_fc_blks));
+       fprintf(f, "Max transaction length:   %u\n",
+               (unsigned int)journal_blks);
+       fprintf(f, "Fast commit length:       %u\n",
+               (unsigned int)num_fc_blks);
+
+       if (ntohl(jsb->s_first) != 1)
+               fprintf(f, "Journal first block:      %u\n",
+                       (unsigned int)ntohl(jsb->s_first));
+       fprintf(f, "Journal sequence:         0x%08x\n"
+               "Journal start:            %u\n",
+               (unsigned int)ntohl(jsb->s_sequence),
+               (unsigned int)ntohl(jsb->s_start));
+       if (nr_users != 1)
+               fprintf(f, "Journal number of users:  %u\n", nr_users);
+       if (jsb->s_feature_compat & e2p_be32(JBD2_FEATURE_COMPAT_CHECKSUM))
+               fprintf(f, "%s", "Journal checksum type:    crc32\n");
+       if ((jsb->s_feature_incompat &
+            e2p_be32(JBD2_FEATURE_INCOMPAT_CSUM_V3)) ||
+           (jsb->s_feature_incompat &
+            e2p_be32(JBD2_FEATURE_INCOMPAT_CSUM_V2)))
+               fprintf(f, "Journal checksum type:    %s\n"
+                       "Journal checksum:         0x%08x\n",
+                       journal_checksum_type_str(jsb->s_checksum_type),
+                       e2p_be32(jsb->s_checksum));
+       if ((nr_users > 1) ||
+           !e2p_is_null_uuid(&jsb->s_users[0])) {
+               for (i=0; i < nr_users && i < JBD2_USERS_MAX; i++) {
+                       printf(i ? "                          %s\n"
+                              : "Journal users:            %s\n",
+                              e2p_uuid2str(&jsb->s_users[i * UUID_SIZE]));
+               }
+       }
+       if (jsb->s_errno != 0)
+               fprintf(f, "Journal errno:            %d\n",
+                       (int) ntohl(jsb->s_errno));
+}
index a7586e0..5aad15d 100644 (file)
@@ -224,7 +224,7 @@ static const char *quota_type2prefix(enum quota_type qtype)
 void list_super2(struct ext2_super_block * sb, FILE *f)
 {
        int inode_blocks_per_group;
-       char buf[80], *str;
+       char *str;
        time_t  tm;
        enum quota_type qtype;
 
@@ -232,18 +232,16 @@ void list_super2(struct ext2_super_block * sb, FILE *f)
                                    EXT2_INODE_SIZE(sb)) +
                                   EXT2_BLOCK_SIZE(sb) - 1) /
                                  EXT2_BLOCK_SIZE(sb));
-       if (sb->s_volume_name[0]) {
-               memset(buf, 0, sizeof(buf));
-               strncpy(buf, sb->s_volume_name, sizeof(sb->s_volume_name));
-       } else
-               strcpy(buf, "<none>");
-       fprintf(f, "Filesystem volume name:   %s\n", buf);
-       if (sb->s_last_mounted[0]) {
-               memset(buf, 0, sizeof(buf));
-               strncpy(buf, sb->s_last_mounted, sizeof(sb->s_last_mounted));
-       } else
-               strcpy(buf, "<not available>");
-       fprintf(f, "Last mounted on:          %s\n", buf);
+       if (sb->s_volume_name[0])
+               fprintf(f, "Filesystem volume name:   %.*s\n",
+                       EXT2_LEN_STR(sb->s_volume_name));
+       else
+               fprintf(f, "Filesystem volume name:   <none>\n");
+       if (sb->s_last_mounted[0])
+               fprintf(f, "Last mounted on:          %.*s\n",
+                       EXT2_LEN_STR(sb->s_last_mounted));
+       else
+               fprintf(f, "Last mounted on:          <not available>\n");
        fprintf(f, "Filesystem UUID:          %s\n", e2p_uuid2str(sb->s_uuid));
        fprintf(f, "Filesystem magic number:  0x%04X\n", sb->s_magic);
        fprintf(f, "Filesystem revision #:    %d", sb->s_rev_level);
@@ -259,7 +257,8 @@ void list_super2(struct ext2_super_block * sb, FILE *f)
        print_super_flags(sb, f);
        print_mntopts(sb, f);
        if (sb->s_mount_opts[0])
-               fprintf(f, "Mount options:            %s\n", sb->s_mount_opts);
+               fprintf(f, "Mount options:            %.*s\n",
+                       EXT2_LEN_STR(sb->s_mount_opts));
        fprintf(f, "Filesystem state:        ");
        print_fs_state (f, sb->s_state);
        fprintf(f, "\n");
@@ -272,9 +271,9 @@ void list_super2(struct ext2_super_block * sb, FILE *f)
        fprintf(f, "Inode count:              %u\n", sb->s_inodes_count);
        fprintf(f, "Block count:              %llu\n", e2p_blocks_count(sb));
        fprintf(f, "Reserved block count:     %llu\n", e2p_r_blocks_count(sb));
-       if (sb->s_overhead_blocks)
-               fprintf(f, "Overhead blocks:          %u\n",
-                       sb->s_overhead_blocks);
+       if (sb->s_overhead_clusters)
+               fprintf(f, "Overhead clusters:        %u\n",
+                       sb->s_overhead_clusters);
        fprintf(f, "Free blocks:              %llu\n", e2p_free_blocks_count(sb));
        fprintf(f, "Free inodes:              %u\n", sb->s_free_inodes_count);
        fprintf(f, "First block:              %u\n", sb->s_first_data_block);
@@ -419,30 +418,36 @@ void list_super2(struct ext2_super_block * sb, FILE *f)
        if (sb->s_first_error_time) {
                tm = sb->s_first_error_time;
                fprintf(f, "First error time:         %s", ctime(&tm));
-               memset(buf, 0, sizeof(buf));
-               strncpy(buf, (char *)sb->s_first_error_func,
-                       sizeof(sb->s_first_error_func));
-               fprintf(f, "First error function:     %s\n", buf);
+               fprintf(f, "First error function:     %.*s\n",
+                       EXT2_LEN_STR(sb->s_first_error_func));
                fprintf(f, "First error line #:       %u\n",
                        sb->s_first_error_line);
-               fprintf(f, "First error inode #:      %u\n",
-                       sb->s_first_error_ino);
-               fprintf(f, "First error block #:      %llu\n",
-                       sb->s_first_error_block);
+               if (sb->s_first_error_ino)
+                       fprintf(f, "First error inode #:      %u\n",
+                               sb->s_first_error_ino);
+               if (sb->s_first_error_block)
+                       fprintf(f, "First error block #:      %llu\n",
+                               sb->s_first_error_block);
+               if (sb->s_first_error_errcode)
+                       fprintf(f, "First error err:          %s\n",
+                               e2p_errcode2str(sb->s_first_error_errcode));
        }
        if (sb->s_last_error_time) {
                tm = sb->s_last_error_time;
                fprintf(f, "Last error time:          %s", ctime(&tm));
-               memset(buf, 0, sizeof(buf));
-               strncpy(buf, (char *)sb->s_last_error_func,
-                       sizeof(sb->s_last_error_func));
-               fprintf(f, "Last error function:      %s\n", buf);
+               fprintf(f, "Last error function:      %.*s\n",
+                       EXT2_LEN_STR(sb->s_last_error_func));
                fprintf(f, "Last error line #:        %u\n",
                        sb->s_last_error_line);
-               fprintf(f, "Last error inode #:       %u\n",
-                       sb->s_last_error_ino);
-               fprintf(f, "Last error block #:       %llu\n",
-                       sb->s_last_error_block);
+               if (sb->s_last_error_ino)
+                       fprintf(f, "Last error inode #:       %u\n",
+                               sb->s_last_error_ino);
+               if (sb->s_last_error_block)
+                       fprintf(f, "Last error block #:       %llu\n",
+                               sb->s_last_error_block);
+               if (sb->s_last_error_errcode)
+                       fprintf(f, "Last error err:           %s\n",
+                               e2p_errcode2str(sb->s_last_error_errcode));
        }
        if (ext2fs_has_feature_mmp(sb)) {
                fprintf(f, "MMP block number:         %llu\n",
@@ -470,6 +475,9 @@ void list_super2(struct ext2_super_block * sb, FILE *f)
        if (ext2fs_has_feature_csum_seed(sb))
                fprintf(f, "Checksum seed:            0x%08x\n",
                        sb->s_checksum_seed);
+       if (ext2fs_has_feature_casefold(sb))
+               fprintf(f, "Character encoding:       %s\n",
+                       e2p_encoding2str(sb->s_encoding));
 }
 
 void list_super (struct ext2_super_block * s)
index 7f08844..c5fd8ab 100644 (file)
@@ -30,7 +30,7 @@ char *e2p_os2string(int os_type)
         const char     *os;
        char            *ret;
 
-       if (os_type <= EXT2_OS_LITES)
+       if (os_type >= 0 && os_type <= EXT2_OS_LITES)
                os = os_tab[os_type];
        else
                os = "(unknown os)";
index b4a086f..61fd4ab 100644 (file)
@@ -43,10 +43,12 @@ static struct flags_name flags_array[] = {
        { EXT2_NOTAIL_FL, "t", "No_Tailmerging" },
        { EXT2_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" },
        { EXT4_EXTENTS_FL, "e", "Extents" },
-       { EXT4_HUGE_FILE_FL, "h", "Huge_file" },
        { FS_NOCOW_FL, "C", "No_COW" },
+       { FS_DAX_FL, "x", "DAX" },
+       { EXT4_CASEFOLD_FL, "F", "Casefold" },
        { EXT4_INLINE_DATA_FL, "N", "Inline_Data" },
        { EXT4_PROJINHERIT_FL, "P", "Project_Hierarchy" },
+       { EXT4_VERITY_FL, "V", "Verity" },
        { 0, NULL, NULL }
 };
 
index 202834f..2bc9337 100644 (file)
@@ -20,7 +20,9 @@
 #if HAVE_ERRNO_H
 #include <errno.h>
 #endif
+#if HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
+#endif
 
 #include "e2p.h"
 
diff --git a/lib/et/Android.bp b/lib/et/Android.bp
new file mode 100644 (file)
index 0000000..f74f7f0
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2017 The Android Open Source Project
+
+cc_library {
+    name: "libext2_com_err",
+    host_supported: true,
+    ramdisk_available: true,
+    vendor_ramdisk_available: true,
+    recovery_available: true,
+    unique_host_soname: true,
+    defaults: ["e2fsprogs-defaults"],
+    srcs: [
+        "error_message.c",
+        "et_name.c",
+        "init_et.c",
+        "com_err.c",
+        "com_right.c",
+    ],
+
+    target: {
+        windows: {
+            enabled: true,
+            cflags: [
+                "-Wno-unused-variable",
+            ],
+        },
+    },
+
+    header_libs: ["libext2-headers"],
+    export_include_dirs: ["."],
+    export_header_lib_headers: ["libext2-headers"],
+}
diff --git a/lib/et/Android.mk b/lib/et/Android.mk
deleted file mode 100644 (file)
index 8704f4c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-libext2_com_err_src_files := \
-       error_message.c \
-       et_name.c \
-       init_et.c \
-       com_err.c \
-       com_right.c
-
-libext2_com_err_c_includes := external/e2fsprogs/lib
-
-libext2_com_err_cflags := -O2 -g -W -Wall
-
-libext2_com_err_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_com_err_src_files)
-LOCAL_C_INCLUDES := $(libext2_com_err_c_includes)
-LOCAL_CFLAGS := $(libext2_com_err_cflags)
-LOCAL_SYSTEM_SHARED_LIBRARIES := libc
-LOCAL_MODULE := libext2_com_err
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_com_err_src_files)
-LOCAL_C_INCLUDES := $(libext2_com_err_c_includes)
-LOCAL_CFLAGS := $(libext2_com_err_cflags)
-LOCAL_STATIC_LIBRARIES := libc
-LOCAL_MODULE := libext2_com_err
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_com_err_src_files)
-LOCAL_C_INCLUDES := $(libext2_com_err_c_includes)
-LOCAL_CFLAGS := $(libext2_com_err_cflags)
-LOCAL_MODULE := libext2_com_err-host
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_SHARED_LIBRARY)
index 476f189..d411f23 100644 (file)
@@ -8,6 +8,7 @@ VPATH = @srcdir@
 top_builddir = ../..
 my_dir = lib/et
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 DEP_MAKEFILE = $(DEP_LIB_MAKEFILES)
 
@@ -100,8 +101,8 @@ TAGS:       $(SRCS)
        $(TAGS) $(SRCS)
 
 installdirs::
-       $(E) "  MKINSTALLDIRS $(libdir) $(includedir)/et $(datadir)/et $(bindir) $(man1dir) $(man3dir)"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+       $(E) "  MKDIR_P $(libdir) $(includedir)/et $(datadir)/et $(bindir) $(man1dir) $(man3dir)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(libdir) \
                $(DESTDIR)$(includedir)/et $(DESTDIR)$(datadir)/et \
                $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir) \
                $(DESTDIR)$(man3dir) $(DESTDIR)$(pkgconfigdir)
@@ -137,7 +138,7 @@ uninstall::
                $(DESTDIR)$(pkgconfigdir)/com_err.pc
        $(RM) -rf $(DESTDIR)$(includedir)/et $(DESTDIR)$(datadir)/et
 
-check:: compile_et
+fullcheck check:: compile_et
        for i in $(srcdir)/test_cases/*.et ; do \
                t=`basename $$i | sed -e 's/.et//'`; \
                _ET_DIR_OVERRIDE=$(srcdir) ./compile_et $$i ; \
index c9d3fca..3e7ae32 100644 (file)
@@ -394,7 +394,7 @@ any event, any invariant which the library assumes must be maintained.
 In general, it is not in the domain of non user-interface library
 routines to write error messages to the user's terminal, or halt the
 process.  Such forms of ``error handling'' should be reserved for
-failures of internal invariants and consistancy checks only, as it
+failures of internal invariants and consistency checks only, as it
 provides the user of the library no way to clean up for himself in the
 event of total failure.
 
@@ -441,7 +441,7 @@ available, try again later,'' or it may try a different server.
 
 Cleanup which is typically necessary may include, but not be limited
 to, freeing allocated memory which will not be needed any more,
-unlocking concurrancy locks, dropping reference counts, closing file
+unlocking concurrency locks, dropping reference counts, closing file
 descriptors, or otherwise undoing anything which the procedure did up
 to this point.  When there are a lot of things which can go wrong, it
 is generally good to write one block of error-handling code which is
index 2cceb54..a4ed535 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * com_right.c -- provide Heimdall / Kerberos4kth com_err interfaces
- *     for backwards compatbility
+ *     for backwards compatibility
  *
  * Copyright (c) 2003 by Theodore Ts'o
  *
index 4c4ba17..3cba7c7 100644 (file)
@@ -2,7 +2,6 @@
 #
 #
 
-datarootdir=@datarootdir@
 AWK=@AWK@
 DIR=@datadir@/et
 
index fe79122..cd9f57f 100644 (file)
@@ -35,7 +35,9 @@
 #if HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#if HAVE_FCNTL
 #include <fcntl.h>
+#endif
 #if HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
@@ -111,6 +113,11 @@ gettextf set_com_err_gettext(gettextf new_proc)
     return x;
 }
 
+#ifdef __GNU__
+#define SYS_ERR_BASE 0x40000000
+#else
+#define SYS_ERR_BASE 0
+#endif
 
 const char * error_message (errcode_t code)
 {
@@ -122,14 +129,14 @@ const char * error_message (errcode_t code)
 
     offset = (int) (code & ((1<<ERRCODE_RANGE)-1));
     table_num = code - offset;
-    if (!table_num) {
+    if (table_num == SYS_ERR_BASE) {
 #ifdef HAS_SYS_ERRLIST
-       if (offset < sys_nerr)
-           return(sys_errlist[offset]);
+       if (code < sys_nerr)
+           return(sys_errlist[code]);
        else
            goto oops;
 #else
-       cp = strerror(offset);
+       cp = strerror(code);
        if (cp)
            return(cp);
        else
@@ -196,8 +203,10 @@ oops:
  */
 static char *safe_getenv(const char *arg)
 {
+#if !defined(_WIN32)
        if ((getuid() != geteuid()) || (getgid() != getegid()))
                return NULL;
+#endif
 #if HAVE_PRCTL
        if (prctl(PR_GET_DUMPABLE, 0, 0, 0, 0) == 0)
                return NULL;
@@ -249,11 +258,20 @@ static void init_debug(void)
                debug_f = fopen("/dev/tty", "a");
        if (debug_f) {
                fd = fileno(debug_f);
+#if defined(HAVE_FCNTL)
                if (fd >= 0) {
                        flags = fcntl(fd, F_GETFD);
                        if (flags >= 0)
-                               fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
+                               flags = fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
+                       if (flags < 0) {
+                               fprintf(debug_f, "Couldn't set FD_CLOEXEC "
+                                       "on debug FILE: %s\n", strerror(errno));
+                               fclose(debug_f);
+                               debug_f = NULL;
+                               debug_mask = DEBUG_INIT;
+                       }
                }
+#endif
        } else
                debug_mask = DEBUG_INIT;
 
index a8d4c11..d2ad572 100644 (file)
@@ -14,7 +14,7 @@ static const char * const text[] = {
        N_("Bad key supplied"),
        N_("Can't encrypt data"),
        N_("Cannot encode/decode authentication info"),
-       N_("Principal attemping change is in wrong realm"),
+       N_("Principal attempting change is in wrong realm"),
        N_("Packet is too large"),
        N_("Version number is incorrect"),
        N_("Checksum does not match"),
index 7a247c5..703600c 100644 (file)
@@ -18,7 +18,7 @@ ec KADM_NO_CRED,      "Unable to fetch credentials"
 ec KADM_BAD_KEY,       "Bad key supplied"
 ec KADM_NO_ENCRYPT,    "Can't encrypt data"
 ec KADM_NO_AUTH,       "Cannot encode/decode authentication info"
-ec KADM_WRONG_REALM,   "Principal attemping change is in wrong realm"
+ec KADM_WRONG_REALM,   "Principal attempting change is in wrong realm"
 ec KADM_NO_ROOM,       "Packet is too large"
 ec KADM_BAD_VER,       "Version number is incorrect"
 ec KADM_BAD_CHK,       "Checksum does not match"
diff --git a/lib/ext2fs/Android.bp b/lib/ext2fs/Android.bp
new file mode 100644 (file)
index 0000000..fd5c4df
--- /dev/null
@@ -0,0 +1,124 @@
+// Copyright 2017 The Android Open Source Project
+
+cc_library {
+    name: "libext2fs",
+    host_supported: true,
+    ramdisk_available: true,
+    vendor_ramdisk_available: true,
+    recovery_available: true,
+    unique_host_soname: true,
+    defaults: ["e2fsprogs-defaults"],
+    srcs: [
+        "ext2_err.c",
+        "alloc.c",
+        "alloc_sb.c",
+        "alloc_stats.c",
+        "alloc_tables.c",
+        "atexit.c",
+        "badblocks.c",
+        "bb_inode.c",
+        "bitmaps.c",
+        "bitops.c",
+        "blkmap64_ba.c",
+        "blkmap64_rb.c",
+        "blknum.c",
+        "block.c",
+        "bmap.c",
+        "check_desc.c",
+        "crc16.c",
+        "crc32c.c",
+        "csum.c",
+        "closefs.c",
+        "dblist.c",
+        "dblist_dir.c",
+        "digest_encode.c",
+        "dirblock.c",
+        "dirhash.c",
+        "dir_iterate.c",
+        "dupfs.c",
+        "expanddir.c",
+        "ext_attr.c",
+        "extent.c",
+        "fallocate.c",
+        "fileio.c",
+        "finddev.c",
+        "flushb.c",
+        "freefs.c",
+        "gen_bitmap.c",
+        "gen_bitmap64.c",
+        "get_num_dirs.c",
+        "get_pathname.c",
+        "getsize.c",
+        "getsectsize.c",
+        "hashmap.c",
+        "i_block.c",
+        "icount.c",
+        "imager.c",
+        "ind_block.c",
+        "initialize.c",
+        "inline.c",
+        "inline_data.c",
+        "inode.c",
+        "io_manager.c",
+        "ismounted.c",
+        "link.c",
+        "llseek.c",
+        "lookup.c",
+        "mmp.c",
+        "mkdir.c",
+        "mkjournal.c",
+        "namei.c",
+        "native.c",
+        "newdir.c",
+        "nls_utf8.c",
+        "openfs.c",
+        "progress.c",
+        "punch.c",
+        "qcow2.c",
+        "rbtree.c",
+        "read_bb.c",
+        "read_bb_file.c",
+        "res_gdt.c",
+        "rw_bitmaps.c",
+        "sha256.c",
+        "sha512.c",
+        "swapfs.c",
+        "symlink.c",
+        "undo_io.c",
+        "unix_io.c",
+        "sparse_io.c",
+        "unlink.c",
+        "valid_blk.c",
+        "version.c",
+        // get rid of this?!
+        "test_io.c",
+    ],
+    shared_libs: [
+        "libext2_com_err",
+        "libsparse",
+        "libz",
+    ],
+    cflags: ["-Wno-unused-parameter"],
+    target: {
+        android: {
+            shared_libs: [ "libext2_uuid" ],
+        },
+        windows: {
+            enabled: true,
+            include_dirs: [ "external/e2fsprogs/include/mingw" ],
+            cflags: [
+                "-Wno-error=cpp",
+                "-Wno-format",
+                "-Wno-unused-variable",
+            ],
+            clang_cflags: [
+                "-Wno-error=typedef-redefinition",
+            ],
+            host_ldlibs: ["-lws2_32"],
+        },
+    },
+
+    header_libs: ["libext2-headers"],
+    export_include_dirs: ["."],
+    export_header_lib_headers: ["libext2-headers"],
+}
diff --git a/lib/ext2fs/Android.mk b/lib/ext2fs/Android.mk
deleted file mode 100644 (file)
index 356232f..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-libext2fs_src_files := \
-       ext2_err.c \
-       alloc.c \
-       alloc_sb.c \
-       alloc_stats.c \
-       alloc_tables.c \
-       atexit.c \
-       badblocks.c \
-       bb_inode.c \
-       bitmaps.c \
-       bitops.c \
-       blkmap64_ba.c \
-       blkmap64_rb.c \
-       blknum.c \
-       block.c \
-       bmap.c \
-       check_desc.c \
-       crc16.c \
-       crc32c.c \
-       csum.c \
-       closefs.c \
-       dblist.c \
-       dblist_dir.c \
-       digest_encode.c \
-       dirblock.c \
-       dirhash.c \
-       dir_iterate.c \
-       dupfs.c \
-       expanddir.c \
-       ext_attr.c \
-       extent.c \
-       fallocate.c \
-       fileio.c \
-       finddev.c \
-       flushb.c \
-       freefs.c \
-       gen_bitmap.c \
-       gen_bitmap64.c \
-       get_num_dirs.c \
-       get_pathname.c \
-       getsize.c \
-       getsectsize.c \
-       i_block.c \
-       icount.c \
-       imager.c \
-       ind_block.c \
-       initialize.c \
-       inline.c \
-       inline_data.c \
-       inode.c \
-       io_manager.c \
-       ismounted.c \
-       link.c \
-       llseek.c \
-       lookup.c \
-       mmp.c \
-       mkdir.c \
-       mkjournal.c \
-       namei.c \
-       native.c \
-       newdir.c \
-       openfs.c \
-       progress.c \
-       punch.c \
-       qcow2.c \
-       rbtree.c \
-       read_bb.c \
-       read_bb_file.c \
-       res_gdt.c \
-       rw_bitmaps.c \
-       sha256.c \
-       sha512.c \
-       swapfs.c \
-       symlink.c \
-       undo_io.c \
-       unix_io.c \
-       unlink.c \
-       valid_blk.c \
-       version.c
-
-# get rid of this?!
-libext2fs_src_files += test_io.c
-
-libext2fs_shared_libraries := \
-       libext2_com_err \
-       libext2_uuid \
-       libext2_blkid \
-       libext2_e2p
-
-libext2fs_system_shared_libraries := libc
-
-libext2fs_static_libraries := \
-       libext2_com_err \
-       libext2_uuid_static \
-       libext2_blkid \
-       libext2_e2p
-
-libext2fs_system_static_libraries := libc
-
-libext2fs_c_includes := external/e2fsprogs/lib
-
-libext2fs_cflags := -O2 -g -W -Wall
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2fs_src_files)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2fs_system_shared_libraries)
-LOCAL_SHARED_LIBRARIES := $(libext2fs_shared_libraries)
-LOCAL_C_INCLUDES := $(libext2fs_c_includes)
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(libext2fs_c_includes)
-LOCAL_CFLAGS := $(libext2fs_cflags)
-LOCAL_MODULE := libext2fs
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2fs_src_files)
-LOCAL_STATIC_LIBRARIES := $(libext2fs_static_libraries) $(libext2fs_system_static_libraries)
-LOCAL_C_INCLUDES := $(libext2fs_c_includes)
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(libext2fs_c_includes)
-LOCAL_CFLAGS := $(libext2fs_cflags) $(libext2fs_cflags_linux)
-LOCAL_MODULE := libext2fs
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2fs_src_files)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(libext2fs_shared_libraries))
-LOCAL_C_INCLUDES := $(libext2fs_c_includes)
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(libext2fs_c_includes)
-LOCAL_CFLAGS := $(libext2fs_cflags)
-LOCAL_MODULE := libext2fs-host
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_SHARED_LIBRARY)
index 2081da8..5d9af86 100644 (file)
@@ -4,8 +4,9 @@ VPATH = @srcdir@
 top_builddir = ../..
 my_dir = lib/ext2fs
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 DEPEND_CFLAGS = -I$(top_srcdir)/debugfs -I$(srcdir)/../../e2fsck -DDEBUGFS
-# This nastyness is needed because of jfs_user.h hackery; when we finally
+# This nastiness is needed because of jfs_user.h hackery; when we finally
 # clean up this mess, we should be able to drop it
 DEBUGFS_CFLAGS = -I$(srcdir)/../../e2fsck $(ALL_CFLAGS) -DDEBUGFS
 
@@ -93,6 +94,7 @@ OBJS= $(DEBUGFS_LIB_OBJS) $(RESIZE_LIB_OBJS) $(E2IMAGE_LIB_OBJS) \
        get_pathname.o \
        getsize.o \
        getsectsize.o \
+       hashmap.o \
        i_block.o \
        icount.o \
        ind_block.o \
@@ -111,6 +113,7 @@ OBJS= $(DEBUGFS_LIB_OBJS) $(RESIZE_LIB_OBJS) $(E2IMAGE_LIB_OBJS) \
        namei.o \
        native.o \
        newdir.o \
+       nls_utf8.o \
        openfs.o \
        progress.o \
        punch.o \
@@ -125,6 +128,7 @@ OBJS= $(DEBUGFS_LIB_OBJS) $(RESIZE_LIB_OBJS) $(E2IMAGE_LIB_OBJS) \
        $(TDB_OBJ) \
        undo_io.o \
        unix_io.o \
+       sparse_io.o \
        unlink.o \
        valid_blk.o \
        version.o \
@@ -171,6 +175,7 @@ SRCS= ext2_err.c \
        $(srcdir)/get_pathname.c \
        $(srcdir)/getsize.c \
        $(srcdir)/getsectsize.c \
+       $(srcdir)/hashmap.c \
        $(srcdir)/i_block.c \
        $(srcdir)/icount.c \
        $(srcdir)/ind_block.c \
@@ -191,6 +196,7 @@ SRCS= ext2_err.c \
        $(srcdir)/namei.c \
        $(srcdir)/native.c \
        $(srcdir)/newdir.c \
+       $(srcdir)/nls_utf8.c \
        $(srcdir)/openfs.c \
        $(srcdir)/progress.c \
        $(srcdir)/punch.c \
@@ -212,6 +218,7 @@ SRCS= ext2_err.c \
        $(srcdir)/tst_iscan.c \
        $(srcdir)/undo_io.c \
        $(srcdir)/unix_io.c \
+       $(srcdir)/sparse_io.c \
        $(srcdir)/unlink.c \
        $(srcdir)/valid_blk.c \
        $(srcdir)/version.c \
@@ -221,7 +228,7 @@ SRCS= ext2_err.c \
        $(DEBUG_SRCS)
 
 HFILES= bitops.h ext2fs.h ext2_io.h ext2_fs.h ext2_ext_attr.h ext3_extents.h \
-       tdb.h qcow2.h
+       tdb.h qcow2.h hashmap.h
 HFILES_IN=  ext2_err.h ext2_types.h
 
 LIBRARY= libext2fs
@@ -371,7 +378,7 @@ extent_cmds.c extent_cmds.h: $(top_srcdir)/debugfs/extent_cmds.ct
 
 debugfs.o: $(top_srcdir)/debugfs/debugfs.c
        $(E) "  CC $<"
-       $(Q) $(CC) $(DEBUGFS_CFLAGS) -c $< -o $@
+       $(Q) $(CC) $(DEBUGFS_CFLAGS) -DSKIP_GLOBDEFS -c $< -o $@
 
 extent_inode.o: $(top_srcdir)/debugfs/extent_inode.c
        $(E) "  CC $<"
@@ -501,7 +508,8 @@ tst_inline: $(srcdir)/inline.c $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
 tst_inline_data: inline_data.c $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_inline_data $(srcdir)/inline_data.c $(ALL_CFLAGS) \
-       -DDEBUG $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(SYSLIBS)
+               $(ALL_LDFLAGS) -DDEBUG $(STATIC_LIBEXT2FS) \
+               $(STATIC_LIBCOM_ERR) $(SYSLIBS)
 
 tst_csum: csum.c $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR) $(STATIC_LIBE2P) \
                $(top_srcdir)/lib/e2p/e2p.h
@@ -520,7 +528,7 @@ mkjournal: mkjournal.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
        $(Q) $(CC) -o mkjournal $(srcdir)/mkjournal.c -DDEBUG \
                $(STATIC_LIBEXT2FS) $(LIBCOM_ERR) $(ALL_CFLAGS) $(SYSLIBS)
 
-check:: tst_bitops tst_badblocks tst_iscan tst_types tst_icount \
+fullcheck check:: tst_bitops tst_badblocks tst_iscan tst_types tst_icount \
     tst_super_size tst_types tst_inode_size tst_csum tst_crc32c tst_bitmaps \
     tst_inline tst_inline_data tst_libext2fs tst_sha256 tst_sha512 \
     tst_digest_encode tst_getsize tst_getsectsize
@@ -548,8 +556,8 @@ check:: tst_bitops tst_badblocks tst_iscan tst_types tst_icount \
        $(TESTENV) ./tst_digest_encode
 
 installdirs::
-       $(E) "  MKINSTALLDIRS $(libdir) $(includedir)/ext2fs"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+       $(E) "  MKDIR_P $(libdir) $(includedir)/ext2fs"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(libdir) \
                $(DESTDIR)$(includedir)/ext2fs $(DESTDIR)$(pkgconfigdir)
 
 install:: all $(HFILES) $(HFILES_IN) installdirs ext2fs.pc
@@ -610,6 +618,18 @@ $(top_builddir)/$(my_dir)/ext2_types.h: $(srcdir)/ext2_types.h.in \
                $(top_builddir)/config.status
        cd $(top_builddir); CONFIG_FILES=$(my_dir)/ext2_types.h ./config.status
 
+$(srcdir)/utf8data.h:
+       $(Q) $(MAKE) $(MKUTF8DATA)
+       $(E) "MKUTF8DATA $@"
+       $(Q) $(MKUTF8DATA) -a $(top_srcdir)/util/ucd/DerivedAge-11.0.0.txt \
+               -c $(top_srcdir)/util/ucd/DerivedCombiningClass-11.0.0.txt \
+               -p $(top_srcdir)/util/ucd/DerivedCoreProperties-11.0.0.txt \
+               -d $(top_srcdir)/util/ucd/UnicodeData-11.0.0.txt \
+               -f $(top_srcdir)/util/ucd/CaseFolding-11.0.0.txt \
+               -n $(top_srcdir)/util/ucd/NormalizationCorrections-11.0.0.txt \
+               -t $(top_srcdir)/util/ucd/NormalizationTest-11.0.0.txt \
+               -o $@
+
 # +++ Dependency line eater +++
 # 
 # Makefile dependencies follow.  This must be the last section in
@@ -621,103 +641,107 @@ alloc.o: $(srcdir)/alloc.c $(top_builddir)/lib/config.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 alloc_sb.o: $(srcdir)/alloc_sb.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 alloc_stats.o: $(srcdir)/alloc_stats.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 alloc_tables.o: $(srcdir)/alloc_tables.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 $(srcdir)/ext2fsP.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 atexit.o: $(srcdir)/atexit.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 $(srcdir)/ext2fsP.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 badblocks.o: $(srcdir)/badblocks.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 bb_compat.o: $(srcdir)/bb_compat.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 bb_inode.o: $(srcdir)/bb_inode.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 bitmaps.o: $(srcdir)/bitmaps.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 $(srcdir)/ext2fsP.h \
- $(srcdir)/bmap64.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h $(srcdir)/bmap64.h
 bitops.o: $(srcdir)/bitops.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 blkmap64_ba.o: $(srcdir)/blkmap64_ba.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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 $(srcdir)/bmap64.h
-blkmap64_rb.o: $(srcdir)/blkmap64_rb.c $(srcdir)/ext2_fs.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(srcdir)/bmap64.h
+blkmap64_rb.o: $(srcdir)/blkmap64_rb.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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 $(srcdir)/bmap64.h $(srcdir)/rbtree.h
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(srcdir)/bmap64.h $(srcdir)/rbtree.h \
+ $(srcdir)/compiler.h
 block.o: $(srcdir)/block.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 bmap.o: $(srcdir)/bmap.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 check_desc.o: $(srcdir)/check_desc.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 closefs.o: $(srcdir)/closefs.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 crc16.o: $(srcdir)/crc16.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(srcdir)/crc16.h
@@ -726,337 +750,359 @@ crc32c.o: $(srcdir)/crc32c.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.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 crc32c_table.h
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h crc32c_table.h
 gen_crc32ctable.o: $(srcdir)/gen_crc32ctable.c $(srcdir)/crc32c_defs.h
 csum.o: $(srcdir)/csum.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 $(srcdir)/crc16.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/crc16.h
 dblist.o: $(srcdir)/dblist.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 dblist_dir.o: $(srcdir)/dblist_dir.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 digest_encode.o: $(srcdir)/digest_encode.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 dirblock.o: $(srcdir)/dirblock.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 dirhash.o: $(srcdir)/dirhash.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 dir_iterate.o: $(srcdir)/dir_iterate.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 dupfs.o: $(srcdir)/dupfs.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 expanddir.o: $(srcdir)/expanddir.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 $(srcdir)/ext2fsP.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 ext_attr.o: $(srcdir)/ext_attr.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2_ext_attr.h \
  $(srcdir)/ext4_acl.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 extent.o: $(srcdir)/extent.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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 $(srcdir)/e2image.h
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(srcdir)/e2image.h
 fileio.o: $(srcdir)/fileio.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 $(srcdir)/ext2fsP.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 finddev.o: $(srcdir)/finddev.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 $(srcdir)/ext2fsP.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 flushb.o: $(srcdir)/flushb.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 freefs.o: $(srcdir)/freefs.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 gen_bitmap.o: $(srcdir)/gen_bitmap.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 gen_bitmap64.o: $(srcdir)/gen_bitmap64.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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 $(srcdir)/bmap64.h
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(srcdir)/bmap64.h
 get_num_dirs.o: $(srcdir)/get_num_dirs.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 get_pathname.o: $(srcdir)/get_pathname.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 getsize.o: $(srcdir)/getsize.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 getsectsize.o: $(srcdir)/getsectsize.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
+hashmap.o: $(srcdir)/hashmap.c $(srcdir)/hashmap.h
 i_block.o: $(srcdir)/i_block.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 icount.o: $(srcdir)/icount.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 $(srcdir)/tdb.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/tdb.h
 ind_block.o: $(srcdir)/ind_block.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 initialize.o: $(srcdir)/initialize.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 inline.o: $(srcdir)/inline.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 inline_data.o: $(srcdir)/inline_data.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2_ext_attr.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 $(srcdir)/ext2fsP.h
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(srcdir)/ext2fsP.h
 inode.o: $(srcdir)/inode.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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 $(srcdir)/e2image.h
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(srcdir)/e2image.h
 inode_io.o: $(srcdir)/inode_io.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 imager.o: $(srcdir)/imager.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 io_manager.o: $(srcdir)/io_manager.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 ismounted.o: $(srcdir)/ismounted.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 link.o: $(srcdir)/link.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 llseek.o: $(srcdir)/llseek.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_types.h
 lookup.o: $(srcdir)/lookup.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 mkdir.o: $(srcdir)/mkdir.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 $(srcdir)/ext2fsP.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 mkjournal.o: $(srcdir)/mkjournal.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/e2p/e2p.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext2fs.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 $(srcdir)/kernel-jbd.h $(srcdir)/jfs_compat.h \
- $(srcdir)/kernel-list.h
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(srcdir)/kernel-jbd.h \
+ $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h $(srcdir)/compiler.h
 mmp.o: $(srcdir)/mmp.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)/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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 namei.o: $(srcdir)/namei.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 $(srcdir)/ext2fsP.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 native.o: $(srcdir)/native.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 newdir.o: $(srcdir)/newdir.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
+nls_utf8.o: $(srcdir)/nls_utf8.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)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h $(srcdir)/utf8data.h
 openfs.o: $(srcdir)/openfs.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 $(srcdir)/e2image.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/e2image.h
 progress.o: $(srcdir)/progress.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.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 $(srcdir)/ext2fsP.h
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(srcdir)/ext2fsP.h
 punch.o: $(srcdir)/punch.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 $(srcdir)/ext2fsP.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 qcow2.o: $(srcdir)/qcow2.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.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 $(srcdir)/qcow2.h
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(srcdir)/qcow2.h
 read_bb.o: $(srcdir)/read_bb.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 read_bb_file.o: $(srcdir)/read_bb_file.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 res_gdt.o: $(srcdir)/res_gdt.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 rw_bitmaps.o: $(srcdir)/rw_bitmaps.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 $(srcdir)/e2image.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/e2image.h
 sha256.o: $(srcdir)/sha256.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 sha512.o: $(srcdir)/sha512.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.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
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h
 swapfs.o: $(srcdir)/swapfs.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.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 \
@@ -1064,84 +1110,94 @@ test_io.o: $(srcdir)/test_io.c $(top_builddir)/lib/config.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 tst_badblocks.o: $(srcdir)/tst_badblocks.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 tst_bitops.o: $(srcdir)/tst_bitops.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 tst_byteswap.o: $(srcdir)/tst_byteswap.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 tst_getsize.o: $(srcdir)/tst_getsize.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 tst_iscan.o: $(srcdir)/tst_iscan.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 undo_io.o: $(srcdir)/undo_io.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 $(srcdir)/ext2fsP.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
 unix_io.o: $(srcdir)/unix_io.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/ext2fsP.h
+sparse_io.o: $(srcdir)/sparse_io.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)/hashmap.h $(srcdir)/bitops.h
 unlink.o: $(srcdir)/unlink.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 valid_blk.o: $(srcdir)/valid_blk.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
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
 version.o: $(srcdir)/version.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 $(top_srcdir)/version.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/version.h
 write_bb_file.o: $(srcdir)/write_bb_file.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
-rbtree.o: $(srcdir)/rbtree.c $(srcdir)/rbtree.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h
+rbtree.o: $(srcdir)/rbtree.c $(srcdir)/rbtree.h $(srcdir)/compiler.h
 tst_libext2fs.o: $(srcdir)/tst_libext2fs.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.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 $(top_srcdir)/lib/ss/ss.h $(top_builddir)/lib/ss/ss_err.h \
- $(top_srcdir)/debugfs/debugfs.h $(srcdir)/ext2fs.h \
- $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(top_srcdir)/lib/ss/ss.h \
+ $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/debugfs/debugfs.h \
+ $(srcdir)/ext2fs.h $(top_srcdir)/debugfs/../misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 debug_cmds.o: debug_cmds.c $(top_srcdir)/lib/ss/ss.h \
  $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h
@@ -1156,12 +1212,12 @@ debugfs.o: $(top_srcdir)/debugfs/debugfs.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h $(top_srcdir)/debugfs/../version.h \
  $(srcdir)/../../e2fsck/jfs_user.h $(srcdir)/kernel-jbd.h \
- $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h \
+ $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h $(srcdir)/compiler.h \
  $(top_srcdir)/lib/support/plausible.h
 util.o: $(top_srcdir)/debugfs/util.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/ss/ss.h \
@@ -1170,9 +1226,9 @@ util.o: $(top_srcdir)/debugfs/util.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 ncheck.o: $(top_srcdir)/debugfs/ncheck.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
@@ -1181,9 +1237,9 @@ ncheck.o: $(top_srcdir)/debugfs/ncheck.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 icheck.o: $(top_srcdir)/debugfs/icheck.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
@@ -1192,9 +1248,9 @@ icheck.o: $(top_srcdir)/debugfs/icheck.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 ls.o: $(top_srcdir)/debugfs/ls.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
@@ -1203,9 +1259,9 @@ ls.o: $(top_srcdir)/debugfs/ls.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 lsdel.o: $(top_srcdir)/debugfs/lsdel.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
@@ -1214,9 +1270,9 @@ lsdel.o: $(top_srcdir)/debugfs/lsdel.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 dump.o: $(top_srcdir)/debugfs/dump.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
@@ -1225,9 +1281,9 @@ dump.o: $(top_srcdir)/debugfs/dump.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 set_fields.o: $(top_srcdir)/debugfs/set_fields.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
@@ -1236,9 +1292,9 @@ set_fields.o: $(top_srcdir)/debugfs/set_fields.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 logdump.o: $(top_srcdir)/debugfs/logdump.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
@@ -1247,11 +1303,12 @@ logdump.o: $(top_srcdir)/debugfs/logdump.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/../../e2fsck/jfs_user.h \
- $(srcdir)/kernel-jbd.h $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h
+ $(srcdir)/kernel-jbd.h $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h \
+ $(srcdir)/compiler.h $(srcdir)/fast_commit.h
 htree.o: $(top_srcdir)/debugfs/htree.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
  $(top_srcdir)/lib/ss/ss.h $(top_builddir)/lib/ss/ss_err.h \
@@ -1259,9 +1316,9 @@ htree.o: $(top_srcdir)/debugfs/htree.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 unused.o: $(top_srcdir)/debugfs/unused.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
@@ -1270,9 +1327,9 @@ unused.o: $(top_srcdir)/debugfs/unused.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 filefrag.o: $(top_srcdir)/debugfs/filefrag.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
@@ -1281,9 +1338,9 @@ filefrag.o: $(top_srcdir)/debugfs/filefrag.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 extent_inode.o: $(top_srcdir)/debugfs/extent_inode.c \
  $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \
@@ -1292,9 +1349,9 @@ extent_inode.o: $(top_srcdir)/debugfs/extent_inode.c \
  $(srcdir)/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 zap.o: $(top_srcdir)/debugfs/zap.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
@@ -1303,9 +1360,9 @@ zap.o: $(top_srcdir)/debugfs/zap.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 quota.o: $(top_srcdir)/debugfs/quota.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
@@ -1314,9 +1371,9 @@ quota.o: $(top_srcdir)/debugfs/quota.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 xattrs.o: $(top_srcdir)/debugfs/xattrs.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/support/cstring.h \
@@ -1325,16 +1382,16 @@ xattrs.o: $(top_srcdir)/debugfs/xattrs.c $(top_builddir)/lib/config.h \
  $(srcdir)/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h
 e2freefrag.o: $(top_srcdir)/misc/e2freefrag.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)/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 $(top_srcdir)/misc/e2freefrag.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(top_srcdir)/misc/e2freefrag.h \
  $(top_srcdir)/debugfs/debugfs.h $(top_srcdir)/lib/ss/ss.h \
  $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/debugfs/../misc/create_inode.h \
  $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
@@ -1345,29 +1402,31 @@ create_inode.o: $(top_srcdir)/misc/create_inode.c \
  $(srcdir)/ext2fs.h $(top_builddir)/lib/ext2fs/ext2_types.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 $(srcdir)/fiemap.h \
- $(top_srcdir)/misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/support/nls-enable.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/fiemap.h $(top_srcdir)/misc/create_inode.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/nls-enable.h
 journal.o: $(top_srcdir)/debugfs/journal.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/journal.h \
  $(srcdir)/../../e2fsck/jfs_user.h $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.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 $(srcdir)/kernel-jbd.h $(srcdir)/jfs_compat.h \
- $(srcdir)/kernel-list.h
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(srcdir)/kernel-jbd.h \
+ $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h $(srcdir)/compiler.h
 revoke.o: $(top_srcdir)/e2fsck/revoke.c $(top_srcdir)/e2fsck/jfs_user.h \
  $(srcdir)/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(srcdir)/ext2fs.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 $(srcdir)/kernel-jbd.h \
- $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/kernel-jbd.h $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h \
+ $(srcdir)/compiler.h
 recovery.o: $(top_srcdir)/e2fsck/recovery.c $(top_srcdir)/e2fsck/jfs_user.h \
  $(srcdir)/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(srcdir)/ext2fs.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 $(srcdir)/kernel-jbd.h \
- $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(srcdir)/kernel-jbd.h $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h \
+ $(srcdir)/compiler.h
 do_journal.o: $(top_srcdir)/debugfs/do_journal.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
  $(top_srcdir)/lib/ss/ss.h $(top_builddir)/lib/ss/ss_err.h \
@@ -1375,9 +1434,9 @@ do_journal.o: $(top_srcdir)/debugfs/do_journal.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(srcdir)/hashmap.h $(srcdir)/bitops.h \
+ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/kernel-jbd.h \
- $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h \
+ $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h $(srcdir)/compiler.h \
  $(top_srcdir)/debugfs/journal.h $(srcdir)/../../e2fsck/jfs_user.h
diff --git a/lib/ext2fs/Makefile.pq b/lib/ext2fs/Makefile.pq
deleted file mode 100644 (file)
index 89082a7..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-TOPSRC=..\..
-LIBNAME=EXT2.LIB
-OBJFILE=EXT2.LST
-
-OBJS=  alloc.obj \
-       alloc_tables.obj \
-       badblocks.obj \
-       bb_compat.obj \
-       bb_inode.obj \
-       bitmaps.obj \
-       bitops.obj \
-       block.obj \
-       bmap.obj \
-       bmove.obj \
-       check_desc.obj \
-       closefs.obj \
-       cmp_bitmaps.obj \
-       dblist.obj \
-       dblist_dir.obj \
-       dirblock.obj \
-       dir_iterate.obj \
-       dupfs.obj \
-       expanddir.obj \
-       fileio.obj \
-       freefs.obj \
-       get_pathname.obj \
-       icount.obj \
-       initialize.obj \
-       inline.obj \
-       inline_data.obj \
-       inode.obj \
-       ismounted.obj \
-       link.obj \
-       lookup.obj \
-       mkdir.obj \
-       namei.obj \
-       native.obj \
-       newdir.obj \
-       openfs.obj \
-       read_bb.obj \
-       read_bb_file.obj \
-       rs_bitmap.obj \
-       rw_bitmaps.obj \
-       swapfs.obj \
-       unlink.obj \
-       valid_blk.obj \
-       version.obj
-
-!include $(TOPSRC)\powerquest\MCONFIG
-
index f96ac4b..3fd9216 100644 (file)
@@ -144,27 +144,38 @@ errcode_t ext2fs_new_inode(ext2_filsys fs, ext2_ino_t dir,
  * Stupid algorithm --- we now just search forward starting from the
  * goal.  Should put in a smarter one someday....
  */
-errcode_t ext2fs_new_block2(ext2_filsys fs, blk64_t goal,
-                          ext2fs_block_bitmap map, blk64_t *ret)
+errcode_t ext2fs_new_block3(ext2_filsys fs, blk64_t goal,
+                           ext2fs_block_bitmap map, blk64_t *ret,
+                           struct blk_alloc_ctx *ctx)
 {
        errcode_t retval;
        blk64_t b = 0;
        errcode_t (*gab)(ext2_filsys fs, blk64_t goal, blk64_t *ret);
+       errcode_t (*gab2)(ext2_filsys, blk64_t, blk64_t *,
+                         struct blk_alloc_ctx *);
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
-       if (!map && fs->get_alloc_block) {
+       if (!map) {
                /*
                 * In case there are clients out there whose get_alloc_block
                 * handlers call ext2fs_new_block2 with a NULL block map,
                 * temporarily swap out the function pointer so that we don't
                 * end up in an infinite loop.
                 */
-               gab = fs->get_alloc_block;
-               fs->get_alloc_block = NULL;
-               retval = gab(fs, goal, &b);
-               fs->get_alloc_block = gab;
-               goto allocated;
+               if (fs->get_alloc_block2) {
+                       gab2 = fs->get_alloc_block2;
+                       fs->get_alloc_block2 = NULL;
+                       retval = gab2(fs, goal, &b, ctx);
+                       fs->get_alloc_block2 = gab2;
+                       goto allocated;
+               } else if (fs->get_alloc_block) {
+                       gab = fs->get_alloc_block;
+                       fs->get_alloc_block = NULL;
+                       retval = gab(fs, goal, &b);
+                       fs->get_alloc_block = gab;
+                       goto allocated;
+               }
        }
        if (!map)
                map = fs->block_map;
@@ -190,6 +201,12 @@ allocated:
        return 0;
 }
 
+errcode_t ext2fs_new_block2(ext2_filsys fs, blk64_t goal,
+                          ext2fs_block_bitmap map, blk64_t *ret)
+{
+       return ext2fs_new_block3(fs, goal, map, ret, NULL);
+}
+
 errcode_t ext2fs_new_block(ext2_filsys fs, blk_t goal,
                           ext2fs_block_bitmap map, blk_t *ret)
 {
@@ -205,13 +222,17 @@ errcode_t ext2fs_new_block(ext2_filsys fs, blk_t goal,
  * This function zeros out the allocated block, and updates all of the
  * appropriate filesystem records.
  */
-errcode_t ext2fs_alloc_block2(ext2_filsys fs, blk64_t goal,
-                            char *block_buf, blk64_t *ret)
+errcode_t ext2fs_alloc_block3(ext2_filsys fs, blk64_t goal, char *block_buf,
+                             blk64_t *ret, struct blk_alloc_ctx *ctx)
 {
        errcode_t       retval;
        blk64_t         block;
 
-       if (fs->get_alloc_block) {
+       if (fs->get_alloc_block2) {
+               retval = (fs->get_alloc_block2)(fs, goal, &block, ctx);
+               if (retval)
+                       goto fail;
+       } else if (fs->get_alloc_block) {
                retval = (fs->get_alloc_block)(fs, goal, &block);
                if (retval)
                        goto fail;
@@ -222,7 +243,7 @@ errcode_t ext2fs_alloc_block2(ext2_filsys fs, blk64_t goal,
                                goto fail;
                }
 
-               retval = ext2fs_new_block2(fs, goal, 0, &block);
+               retval = ext2fs_new_block3(fs, goal, 0, &block, ctx);
                if (retval)
                        goto fail;
        }
@@ -242,15 +263,21 @@ fail:
        return retval;
 }
 
+errcode_t ext2fs_alloc_block2(ext2_filsys fs, blk64_t goal,
+                            char *block_buf, blk64_t *ret)
+{
+       return ext2fs_alloc_block3(fs, goal, block_buf, ret, NULL);
+}
+
 errcode_t ext2fs_alloc_block(ext2_filsys fs, blk_t goal,
                             char *block_buf, blk_t *ret)
 {
        errcode_t retval;
-       blk64_t val;
-       retval = ext2fs_alloc_block2(fs, goal, block_buf, &val);
+       blk64_t ret64, goal64 = goal;
+       retval = ext2fs_alloc_block3(fs, goal64, block_buf, &ret64, NULL);
        if (!retval)
-               *ret = (blk_t) val;
-       return retval;
+               *ret = (blk_t)ret64;
+        return retval;
 }
 
 errcode_t ext2fs_get_free_blocks2(ext2_filsys fs, blk64_t start, blk64_t finish,
@@ -326,10 +353,11 @@ blk64_t ext2fs_find_inode_goal(ext2_filsys fs, ext2_ino_t ino,
        ext2_extent_handle_t    handle = NULL;
        errcode_t               err;
 
-       if (inode == NULL || ext2fs_inode_data_blocks2(fs, inode) == 0)
-               goto no_blocks;
-
-       if (inode->i_flags & EXT4_INLINE_DATA_FL)
+       /* Make sure data stored in inode->i_block is neither fast symlink nor
+        * inline data.
+        */
+       if (inode == NULL || ext2fs_is_fast_symlink(inode) ||
+           inode->i_flags & EXT4_INLINE_DATA_FL)
                goto no_blocks;
 
        if (inode->i_flags & EXT4_EXTENTS_FL) {
index da0b15b..971a6ce 100644 (file)
@@ -33,7 +33,7 @@
  * This routine searches for free blocks that can allocate a full
  * group of bitmaps or inode tables for a flexbg group.  Returns the
  * block number with a correct offset were the bitmaps and inode
- * tables can be allocated continously and in order.
+ * tables can be allocated continuously and in order.
  */
 static blk64_t flexbg_offset(ext2_filsys fs, dgrp_t group, blk64_t start_blk,
                             ext2fs_block_bitmap bmap, int rem_grp,
@@ -107,7 +107,7 @@ errcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group,
        /*
         * Allocate the block and inode bitmaps, if necessary
         */
-       if (fs->stride) {
+       if (fs->stride && !flexbg_size) {
                retval = ext2fs_get_free_blocks2(fs, group_blk, last_blk,
                                                 1, bmap, &start_blk);
                if (retval)
@@ -222,12 +222,32 @@ errcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group,
                                                bmap, &new_blk);
                if (retval)
                        return retval;
-               if (flexbg_size)
-                       ext2fs_block_alloc_stats_range(fs, new_blk,
-                                      fs->inode_blocks_per_group, +1);
-               else
-                       ext2fs_mark_block_bitmap_range2(fs->block_map,
-                                       new_blk, fs->inode_blocks_per_group);
+
+               ext2fs_mark_block_bitmap_range2(bmap,
+                       new_blk, fs->inode_blocks_per_group);
+               if (flexbg_size) {
+                       blk64_t num, blk;
+                       num = fs->inode_blocks_per_group;
+                       blk = new_blk;
+                       while (num) {
+                               int gr = ext2fs_group_of_blk2(fs, blk);
+                               last_blk = ext2fs_group_last_block2(fs, gr);
+                               blk64_t n = num;
+
+                               if (blk + num > last_blk)
+                                       n = last_blk - blk + 1;
+
+                               ext2fs_bg_free_blocks_count_set(fs, gr,
+                                       ext2fs_bg_free_blocks_count(fs, gr) -
+                                       n/EXT2FS_CLUSTER_RATIO(fs));
+                               ext2fs_bg_flags_clear(fs, gr,
+                                       EXT2_BG_BLOCK_UNINIT);
+                               ext2fs_group_desc_csum_set(fs, gr);
+                               ext2fs_free_blocks_count_add(fs->super, -n);
+                               blk += n;
+                               num -= n;
+                       }
+               }
                ext2fs_inode_table_loc_set(fs, group, new_blk);
        }
        ext2fs_group_desc_csum_set(fs, group);
index b0e114b..11f10eb 100644 (file)
@@ -96,7 +96,7 @@ errcode_t ext2fs_update_bb_inode(ext2_filsys fs, ext2_badblocks_list bb_list)
         * Now set the bad blocks!
         *
         * First, mark the bad blocks as used.  This prevents a bad
-        * block from being used as an indirecto block for the bad
+        * block from being used as an indirect block for the bad
         * block inode (!).
         */
        if (bb_list) {
index 8402191..834a396 100644 (file)
@@ -62,7 +62,8 @@ errcode_t ext2fs_allocate_inode_bitmap(ext2_filsys fs,
 
        start = 1;
        end = fs->super->s_inodes_count;
-       real_end = (EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count);
+       real_end = (__u64)EXT2_INODES_PER_GROUP(fs->super) *
+               fs->group_desc_count;
 
        /* Are we permitted to use new-style bitmaps? */
        if (fs->flags & EXT2_FLAG_64BITS)
@@ -125,6 +126,7 @@ errcode_t ext2fs_allocate_subcluster_bitmap(ext2_filsys fs,
 {
        __u64                   start, end, real_end;
        ext2fs_generic_bitmap   bmap;
+       ext2fs_generic_bitmap_64 bmap64;
        errcode_t               retval;
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
@@ -147,14 +149,15 @@ errcode_t ext2fs_allocate_subcluster_bitmap(ext2_filsys fs,
                                           end, real_end, descr, &bmap);
        if (retval)
                return retval;
-       bmap->cluster_bits = 0;
+       bmap64 = (ext2fs_generic_bitmap_64) bmap;
+       bmap64->cluster_bits = 0;
        *ret = bmap;
        return 0;
 }
 
 int ext2fs_get_bitmap_granularity(ext2fs_block_bitmap bitmap)
 {
-       ext2fs_generic_bitmap bmap = bitmap;
+       ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) bitmap;
 
        if (!EXT2FS_IS_64_BITMAP(bmap))
                return 0;
index 833d1e9..c4a1d4e 100644 (file)
@@ -24,7 +24,7 @@
 /*
  * For the benefit of those who are trying to port Linux to another
  * architecture, here are some C-language equivalents.  You should
- * recode these in the native assmebly language, if at all possible.
+ * recode these in the native assembly language, if at all possible.
  *
  * C language equivalents written by Theodore Ts'o, 9/26/92.
  * Modified by Pete A. Zaitcev 7/14/95 to be portable to big endian
index bc59608..505b3c9 100644 (file)
@@ -108,7 +108,7 @@ extern void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
 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);
+                                         ext2_ino_t inode, int num);
 extern int ext2fs_mark_generic_bitmap(ext2fs_generic_bitmap bitmap,
                                         __u32 bitno);
 extern int ext2fs_unmark_generic_bitmap(ext2fs_generic_bitmap bitmap,
index 3707a61..85cb38d 100644 (file)
@@ -40,7 +40,7 @@ struct ext2fs_ba_private_struct {
 
 typedef struct ext2fs_ba_private_struct *ext2fs_ba_private;
 
-static errcode_t ba_alloc_private_data (ext2fs_generic_bitmap bitmap)
+static errcode_t ba_alloc_private_data (ext2fs_generic_bitmap_64 bitmap)
 {
        ext2fs_ba_private bp;
        errcode_t       retval;
@@ -69,7 +69,7 @@ static errcode_t ba_alloc_private_data (ext2fs_generic_bitmap bitmap)
 }
 
 static errcode_t ba_new_bmap(ext2_filsys fs EXT2FS_ATTR((unused)),
-                            ext2fs_generic_bitmap bitmap)
+                            ext2fs_generic_bitmap_64 bitmap)
 {
        ext2fs_ba_private bp;
        errcode_t       retval;
@@ -86,7 +86,7 @@ static errcode_t ba_new_bmap(ext2_filsys fs EXT2FS_ATTR((unused)),
        return 0;
 }
 
-static void ba_free_bmap(ext2fs_generic_bitmap bitmap)
+static void ba_free_bmap(ext2fs_generic_bitmap_64 bitmap)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private;
 
@@ -101,8 +101,8 @@ static void ba_free_bmap(ext2fs_generic_bitmap bitmap)
        bp = 0;
 }
 
-static errcode_t ba_copy_bmap(ext2fs_generic_bitmap src,
-                             ext2fs_generic_bitmap dest)
+static errcode_t ba_copy_bmap(ext2fs_generic_bitmap_64 src,
+                             ext2fs_generic_bitmap_64 dest)
 {
        ext2fs_ba_private src_bp = (ext2fs_ba_private) src->private;
        ext2fs_ba_private dest_bp;
@@ -121,7 +121,7 @@ static errcode_t ba_copy_bmap(ext2fs_generic_bitmap src,
        return 0;
 }
 
-static errcode_t ba_resize_bmap(ext2fs_generic_bitmap bmap,
+static errcode_t ba_resize_bmap(ext2fs_generic_bitmap_64 bmap,
                                __u64 new_end, __u64 new_real_end)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private) bmap->private;
@@ -162,7 +162,7 @@ static errcode_t ba_resize_bmap(ext2fs_generic_bitmap bmap,
 
 }
 
-static int ba_mark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
+static int ba_mark_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private;
        blk64_t bitno = (blk64_t) arg;
@@ -170,7 +170,7 @@ static int ba_mark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
        return ext2fs_set_bit64(bitno - bitmap->start, bp->bitarray);
 }
 
-static int ba_unmark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
+static int ba_unmark_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private;
        blk64_t bitno = (blk64_t) arg;
@@ -178,7 +178,7 @@ static int ba_unmark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
        return ext2fs_clear_bit64(bitno - bitmap->start, bp->bitarray);
 }
 
-static int ba_test_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
+static int ba_test_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private;
        blk64_t bitno = (blk64_t) arg;
@@ -186,7 +186,7 @@ static int ba_test_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
        return ext2fs_test_bit64(bitno - bitmap->start, bp->bitarray);
 }
 
-static void ba_mark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg,
+static void ba_mark_bmap_extent(ext2fs_generic_bitmap_64 bitmap, __u64 arg,
                                unsigned int num)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private;
@@ -197,7 +197,7 @@ static void ba_mark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg,
                ext2fs_fast_set_bit64(bitno + i - bitmap->start, bp->bitarray);
 }
 
-static void ba_unmark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg,
+static void ba_unmark_bmap_extent(ext2fs_generic_bitmap_64 bitmap, __u64 arg,
                                  unsigned int num)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private;
@@ -208,7 +208,7 @@ static void ba_unmark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg,
                ext2fs_fast_clear_bit64(bitno + i - bitmap->start, bp->bitarray);
 }
 
-static int ba_test_clear_bmap_extent(ext2fs_generic_bitmap bitmap,
+static int ba_test_clear_bmap_extent(ext2fs_generic_bitmap_64 bitmap,
                                     __u64 start, unsigned int len)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private;
@@ -282,7 +282,7 @@ static int ba_test_clear_bmap_extent(ext2fs_generic_bitmap bitmap,
 }
 
 
-static errcode_t ba_set_bmap_range(ext2fs_generic_bitmap bitmap,
+static errcode_t ba_set_bmap_range(ext2fs_generic_bitmap_64 bitmap,
                                     __u64 start, size_t num, void *in)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private;
@@ -292,7 +292,7 @@ static errcode_t ba_set_bmap_range(ext2fs_generic_bitmap bitmap,
        return 0;
 }
 
-static errcode_t ba_get_bmap_range(ext2fs_generic_bitmap bitmap,
+static errcode_t ba_get_bmap_range(ext2fs_generic_bitmap_64 bitmap,
                                     __u64 start, size_t num, void *out)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private;
@@ -302,7 +302,7 @@ static errcode_t ba_get_bmap_range(ext2fs_generic_bitmap bitmap,
        return 0;
 }
 
-static void ba_clear_bmap(ext2fs_generic_bitmap bitmap)
+static void ba_clear_bmap(ext2fs_generic_bitmap_64 bitmap)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private;
 
@@ -311,20 +311,20 @@ static void ba_clear_bmap(ext2fs_generic_bitmap bitmap)
 }
 
 #ifdef ENABLE_BMAP_STATS
-static void ba_print_stats(ext2fs_generic_bitmap bitmap)
+static void ba_print_stats(ext2fs_generic_bitmap_64 bitmap)
 {
        fprintf(stderr, "%16llu Bytes used by bitarray\n",
                ((bitmap->real_end - bitmap->start) >> 3) + 1 +
                sizeof(struct ext2fs_ba_private_struct));
 }
 #else
-static void ba_print_stats(ext2fs_generic_bitmap bitmap EXT2FS_ATTR((unused)))
+static void ba_print_stats(ext2fs_generic_bitmap_64 bitmap EXT2FS_ATTR((unused)))
 {
 }
 #endif
 
 /* Find the first zero bit between start and end, inclusive. */
-static errcode_t ba_find_first_zero(ext2fs_generic_bitmap bitmap,
+static errcode_t ba_find_first_zero(ext2fs_generic_bitmap_64 bitmap,
                                    __u64 start, __u64 end, __u64 *out)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private)bitmap->private;
@@ -398,7 +398,7 @@ static errcode_t ba_find_first_zero(ext2fs_generic_bitmap bitmap,
 }
 
 /* Find the first one bit between start and end, inclusive. */
-static errcode_t ba_find_first_set(ext2fs_generic_bitmap bitmap,
+static errcode_t ba_find_first_set(ext2fs_generic_bitmap_64 bitmap,
                                    __u64 start, __u64 end, __u64 *out)
 {
        ext2fs_ba_private bp = (ext2fs_ba_private)bitmap->private;
index 7e7e29d..1fd5527 100644 (file)
@@ -9,6 +9,7 @@
  * %End-Header%
  */
 
+#include "config.h"
 #include <stdio.h>
 #include <string.h>
 #if HAVE_UNISTD_H
@@ -22,6 +23,9 @@
 #if HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
+#if HAVE_LINUX_TYPES_H
+#include <linux/types.h>
+#endif
 
 #include "ext2_fs.h"
 #include "ext2fsP.h"
@@ -70,15 +74,15 @@ static void print_tree(struct rb_root *root)
        struct rb_node *node = NULL;
        struct bmap_rb_extent *ext;
 
-       printf("\t\t\t=================================\n");
+       fprintf(stderr, "\t\t\t=================================\n");
        node = ext2fs_rb_first(root);
        for (node = ext2fs_rb_first(root); node != NULL; 
             node = ext2fs_rb_next(node)) {
                ext = node_to_extent(node);
-               printf("\t\t\t--> (%llu -> %llu)\n",
+               fprintf(stderr, "\t\t\t--> (%llu -> %llu)\n",
                        ext->start, ext->start + ext->count);
        }
-       printf("\t\t\t=================================\n");
+       fprintf(stderr, "\t\t\t=================================\n");
 }
 
 static void check_tree(struct rb_root *root, const char *msg)
@@ -90,35 +94,41 @@ static void check_tree(struct rb_root *root, const char *msg)
             node = ext2fs_rb_next(node)) {
                ext = node_to_extent(node);
                if (ext->count == 0) {
-                       printf("Tree Error: count is zero\n");
-                       printf("extent: %llu -> %llu (%llu)\n", ext->start,
-                               ext->start + ext->count, ext->count);
+                       fprintf(stderr, "Tree Error: count is zero\n");
+                       fprintf(stderr, "extent: %llu -> %llu (%llu)\n",
+                               ext->start, ext->start + ext->count,
+                               ext->count);
                        goto err_out;
                }
                if (ext->start + ext->count < ext->start) {
-                       printf("Tree Error: start or count is crazy\n");
-                       printf("extent: %llu -> %llu (%llu)\n", ext->start,
-                               ext->start + ext->count, ext->count);
+                       fprintf(stderr,
+                               "Tree Error: start or count is crazy\n");
+                       fprintf(stderr, "extent: %llu -> %llu (%llu)\n",
+                               ext->start, ext->start + ext->count,
+                               ext->count);
                        goto err_out;
                }
 
                if (old) {
                        if (old->start > ext->start) {
-                               printf("Tree Error: start is crazy\n");
-                               printf("extent: %llu -> %llu (%llu)\n",
+                               fprintf(stderr, "Tree Error: start is crazy\n");
+                               fprintf(stderr, "extent: %llu -> %llu (%llu)\n",
                                        old->start, old->start + old->count,
                                        old->count);
-                               printf("extent next: %llu -> %llu (%llu)\n",
+                               fprintf(stderr,
+                                       "extent next: %llu -> %llu (%llu)\n",
                                        ext->start, ext->start + ext->count,
                                        ext->count);
                                goto err_out;
                        }
                        if ((old->start + old->count) >= ext->start) {
-                               printf("Tree Error: extent is crazy\n");
-                               printf("extent: %llu -> %llu (%llu)\n",
+                               fprintf(stderr,
+                                       "Tree Error: extent is crazy\n");
+                               fprintf(stderr, "extent: %llu -> %llu (%llu)\n",
                                        old->start, old->start + old->count,
                                        old->count);
-                               printf("extent next: %llu -> %llu (%llu)\n",
+                               fprintf(stderr,
+                                       "extent next: %llu -> %llu (%llu)\n",
                                        ext->start, ext->start + ext->count,
                                        ext->count);
                                goto err_out;
@@ -129,7 +139,7 @@ static void check_tree(struct rb_root *root, const char *msg)
        return;
 
 err_out:
-       printf("%s\n", msg);
+       fprintf(stderr, "%s\n", msg);
        print_tree(root);
        exit(1);
 }
@@ -167,7 +177,7 @@ static void rb_free_extent(struct ext2fs_rb_private *bp,
        ext2fs_free_mem(&ext);
 }
 
-static errcode_t rb_alloc_private_data (ext2fs_generic_bitmap bitmap)
+static errcode_t rb_alloc_private_data (ext2fs_generic_bitmap_64 bitmap)
 {
        struct ext2fs_rb_private *bp;
        errcode_t       retval;
@@ -191,7 +201,7 @@ static errcode_t rb_alloc_private_data (ext2fs_generic_bitmap bitmap)
 }
 
 static errcode_t rb_new_bmap(ext2_filsys fs EXT2FS_ATTR((unused)),
-                            ext2fs_generic_bitmap bitmap)
+                            ext2fs_generic_bitmap_64 bitmap)
 {
        errcode_t       retval;
 
@@ -215,7 +225,7 @@ static void rb_free_tree(struct rb_root *root)
        }
 }
 
-static void rb_free_bmap(ext2fs_generic_bitmap bitmap)
+static void rb_free_bmap(ext2fs_generic_bitmap_64 bitmap)
 {
        struct ext2fs_rb_private *bp;
 
@@ -226,8 +236,8 @@ static void rb_free_bmap(ext2fs_generic_bitmap bitmap)
        bp = 0;
 }
 
-static errcode_t rb_copy_bmap(ext2fs_generic_bitmap src,
-                             ext2fs_generic_bitmap dest)
+static errcode_t rb_copy_bmap(ext2fs_generic_bitmap_64 src,
+                             ext2fs_generic_bitmap_64 dest)
 {
        struct ext2fs_rb_private *src_bp, *dest_bp;
        struct bmap_rb_extent *src_ext, *dest_ext;
@@ -292,7 +302,7 @@ static void rb_truncate(__u64 new_max, struct rb_root *root)
        }
 }
 
-static errcode_t rb_resize_bmap(ext2fs_generic_bitmap bmap,
+static errcode_t rb_resize_bmap(ext2fs_generic_bitmap_64 bmap,
                                __u64 new_end, __u64 new_real_end)
 {
        struct ext2fs_rb_private *bp;
@@ -387,6 +397,9 @@ static int rb_insert_extent(__u64 start, __u64 count,
        struct bmap_rb_extent *ext;
        int retval = 0;
 
+       if (count == 0)
+               return 0;
+
        bp->rcursor_next = NULL;
        ext = bp->wcursor;
        if (ext) {
@@ -551,7 +564,7 @@ static int rb_remove_extent(__u64 start, __u64 count,
                        retval = 1;
                        continue;
                } else {
-                       /* modify the last extent in reigon to be removed */
+                       /* modify the last extent in region to be removed */
                        ext->count -= ((start + count) - ext->start);
                        ext->start = start + count;
                        retval = 1;
@@ -562,7 +575,7 @@ static int rb_remove_extent(__u64 start, __u64 count,
        return retval;
 }
 
-static int rb_mark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
+static int rb_mark_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg)
 {
        struct ext2fs_rb_private *bp;
        int retval;
@@ -575,7 +588,7 @@ static int rb_mark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
        return retval;
 }
 
-static int rb_unmark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
+static int rb_unmark_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg)
 {
        struct ext2fs_rb_private *bp;
        int retval;
@@ -590,7 +603,7 @@ static int rb_unmark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
 }
 
 inline
-static int rb_test_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
+static int rb_test_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg)
 {
        struct ext2fs_rb_private *bp;
 
@@ -600,7 +613,7 @@ static int rb_test_bmap(ext2fs_generic_bitmap bitmap, __u64 arg)
        return rb_test_bit(bp, arg);
 }
 
-static void rb_mark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg,
+static void rb_mark_bmap_extent(ext2fs_generic_bitmap_64 bitmap, __u64 arg,
                                unsigned int num)
 {
        struct ext2fs_rb_private *bp;
@@ -612,7 +625,7 @@ static void rb_mark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg,
        check_tree(&bp->root, __func__);
 }
 
-static void rb_unmark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg,
+static void rb_unmark_bmap_extent(ext2fs_generic_bitmap_64 bitmap, __u64 arg,
                                  unsigned int num)
 {
        struct ext2fs_rb_private *bp;
@@ -624,7 +637,7 @@ static void rb_unmark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg,
        check_tree(&bp->root, __func__);
 }
 
-static int rb_test_clear_bmap_extent(ext2fs_generic_bitmap bitmap,
+static int rb_test_clear_bmap_extent(ext2fs_generic_bitmap_64 bitmap,
                                     __u64 start, unsigned int len)
 {
        struct rb_node *parent = NULL, **n;
@@ -680,7 +693,7 @@ static int rb_test_clear_bmap_extent(ext2fs_generic_bitmap bitmap,
        return retval;
 }
 
-static errcode_t rb_set_bmap_range(ext2fs_generic_bitmap bitmap,
+static errcode_t rb_set_bmap_range(ext2fs_generic_bitmap_64 bitmap,
                                     __u64 start, size_t num, void *in)
 {
        struct ext2fs_rb_private *bp;
@@ -726,7 +739,7 @@ static errcode_t rb_set_bmap_range(ext2fs_generic_bitmap bitmap,
        return 0;
 }
 
-static errcode_t rb_get_bmap_range(ext2fs_generic_bitmap bitmap,
+static errcode_t rb_get_bmap_range(ext2fs_generic_bitmap_64 bitmap,
                                     __u64 start, size_t num, void *out)
 {
 
@@ -791,7 +804,7 @@ static errcode_t rb_get_bmap_range(ext2fs_generic_bitmap bitmap,
        return 0;
 }
 
-static void rb_clear_bmap(ext2fs_generic_bitmap bitmap)
+static void rb_clear_bmap(ext2fs_generic_bitmap_64 bitmap)
 {
        struct ext2fs_rb_private *bp;
 
@@ -804,7 +817,7 @@ static void rb_clear_bmap(ext2fs_generic_bitmap bitmap)
        check_tree(&bp->root, __func__);
 }
 
-static errcode_t rb_find_first_zero(ext2fs_generic_bitmap bitmap,
+static errcode_t rb_find_first_zero(ext2fs_generic_bitmap_64 bitmap,
                                   __u64 start, __u64 end, __u64 *out)
 {
        struct rb_node *parent = NULL, **n;
@@ -840,7 +853,7 @@ static errcode_t rb_find_first_zero(ext2fs_generic_bitmap bitmap,
        return 0;
 }
 
-static errcode_t rb_find_first_set(ext2fs_generic_bitmap bitmap,
+static errcode_t rb_find_first_set(ext2fs_generic_bitmap_64 bitmap,
                                   __u64 start, __u64 end, __u64 *out)
 {
        struct rb_node *parent = NULL, **n;
@@ -889,7 +902,7 @@ static errcode_t rb_find_first_set(ext2fs_generic_bitmap bitmap,
 }
 
 #ifdef ENABLE_BMAP_STATS
-static void rb_print_stats(ext2fs_generic_bitmap bitmap)
+static void rb_print_stats(ext2fs_generic_bitmap_64 bitmap)
 {
        struct ext2fs_rb_private *bp;
        struct rb_node *node = NULL;
@@ -950,7 +963,7 @@ static void rb_print_stats(ext2fs_generic_bitmap bitmap)
                eff);
 }
 #else
-static void rb_print_stats(ext2fs_generic_bitmap bitmap EXT2FS_ATTR((unused)))
+static void rb_print_stats(ext2fs_generic_bitmap_64 bitmap EXT2FS_ATTR((unused)))
 {
 }
 #endif
index ac80849..7c3c6b5 100644 (file)
@@ -71,7 +71,7 @@ blk64_t ext2fs_inode_data_blocks2(ext2_filsys fs,
        return (inode->i_blocks |
                (ext2fs_has_feature_huge_file(fs->super) ?
                 (__u64) inode->osd2.linux2.l_i_blocks_hi << 32 : 0)) -
-               (inode->i_file_acl ? fs->blocksize >> 9 : 0);
+               (inode->i_file_acl ? EXT2_CLUSTER_SIZE(fs->super) >> 9 : 0);
 }
 
 /*
@@ -86,6 +86,22 @@ blk64_t ext2fs_inode_i_blocks(ext2_filsys fs,
 }
 
 /*
+ * Return the inode i_blocks in stat (512 byte) units
+ */
+blk64_t ext2fs_get_stat_i_blocks(ext2_filsys fs,
+                                struct ext2_inode *inode)
+{
+       blk64_t ret = inode->i_blocks;
+
+       if (ext2fs_has_feature_huge_file(fs->super)) {
+               ret += ((long long) inode->osd2.linux2.l_i_blocks_hi) << 32;
+               if (inode->i_flags & EXT4_HUGE_FILE_FL)
+                       ret *= (fs->blocksize / 512);
+       }
+       return ret;
+}
+
+/*
  * Return the fs block count
  */
 blk64_t ext2fs_blocks_count(struct ext2_super_block *super)
@@ -185,9 +201,42 @@ struct ext2_group_desc *ext2fs_group_desc(ext2_filsys fs,
                                          struct opaque_ext2_group_desc *gdp,
                                          dgrp_t group)
 {
-       int desc_size = EXT2_DESC_SIZE(fs->super) & ~7;
-
-       return (struct ext2_group_desc *)((char *)gdp + group * desc_size);
+       struct ext2_group_desc *ret_gdp;
+       errcode_t       retval;
+       static char     *buf = 0;
+       static int      bufsize = 0;
+       blk64_t         blk;
+       int             desc_size = EXT2_DESC_SIZE(fs->super) & ~7;
+       int             desc_per_blk = EXT2_DESC_PER_BLOCK(fs->super);
+
+       if (group > fs->group_desc_count)
+               return NULL;
+       if (gdp)
+               return (struct ext2_group_desc *)((char *)gdp +
+                                                 group * desc_size);
+       /*
+        * If fs->group_desc wasn't read in when the file system was
+        * opened, then read it on demand here.
+        */
+       if (bufsize < fs->blocksize)
+               ext2fs_free_mem(&buf);
+       if (!buf) {
+               retval = ext2fs_get_mem(fs->blocksize, &buf);
+               if (retval)
+                       return NULL;
+               bufsize = fs->blocksize;
+       }
+       blk = ext2fs_descriptor_block_loc2(fs, fs->super->s_first_data_block,
+                                          group / desc_per_blk);
+       retval = io_channel_read_blk(fs->io, blk, 1, buf);
+       if (retval)
+               return NULL;
+       ret_gdp = (struct ext2_group_desc *)
+               (buf + ((group % desc_per_blk) * desc_size));
+#ifdef WORDS_BIGENDIAN
+       ext2fs_swap_group_desc2(fs, ret_gdp);
+#endif
+       return ret_gdp;
 }
 
 /* Do the same but as an ext4 group desc for internal use here */
@@ -208,7 +257,7 @@ __u32 ext2fs_block_bitmap_checksum(ext2_filsys fs, dgrp_t group)
 
        gdp = ext4fs_group_desc(fs, fs->group_desc, group);
        csum = gdp->bg_block_bitmap_csum_lo;
-       if (fs->super->s_desc_size >= EXT4_BG_BLOCK_BITMAP_CSUM_HI_LOCATION)
+       if (EXT2_DESC_SIZE(fs->super) >= EXT4_BG_BLOCK_BITMAP_CSUM_HI_LOCATION)
                csum |= ((__u32)gdp->bg_block_bitmap_csum_hi << 16);
        return csum;
 }
@@ -249,7 +298,7 @@ __u32 ext2fs_inode_bitmap_checksum(ext2_filsys fs, dgrp_t group)
 
        gdp = ext4fs_group_desc(fs, fs->group_desc, group);
        csum = gdp->bg_inode_bitmap_csum_lo;
-       if (fs->super->s_desc_size >= EXT4_BG_INODE_BITMAP_CSUM_HI_END)
+       if (EXT2_DESC_SIZE(fs->super) >= EXT4_BG_INODE_BITMAP_CSUM_HI_END)
                csum |= ((__u32)gdp->bg_inode_bitmap_csum_hi << 16);
        return csum;
 }
@@ -521,6 +570,9 @@ void ext2fs_file_acl_block_set(ext2_filsys fs, struct ext2_inode *inode,
 errcode_t ext2fs_inode_size_set(ext2_filsys fs, struct ext2_inode *inode,
                                ext2_off64_t size)
 {
+       if (size < 0)
+               return EINVAL;
+
        /* Only regular files get to be larger than 4GB */
        if (!LINUX_S_ISREG(inode->i_mode) && (size >> 32))
                return EXT2_ET_FILE_TOO_BIG;
index 601129d..06eed6e 100644 (file)
@@ -251,7 +251,7 @@ static int block_iterate_tind(blk_t *tind_block, blk_t ref_block,
        }
        check_for_ro_violation_return(ctx, ret);
        if (!*tind_block || (ret & BLOCK_ABORT)) {
-               ctx->bcount += limit*limit*limit;
+               ctx->bcount += ((unsigned long long) limit)*limit*limit;
                return ret;
        }
        if (*tind_block >= ext2fs_blocks_count(ctx->fs->super) ||
index 29da4ef..65c45c5 100644 (file)
@@ -207,6 +207,7 @@ static errcode_t extent_bmap(ext2_filsys fs, ext2_ino_t ino,
                             int *ret_flags, int *blocks_alloc,
                             blk64_t *phys_blk)
 {
+       struct blk_alloc_ctx    alloc_ctx;
        struct ext2fs_extent    extent;
        unsigned int            offset;
        errcode_t               retval = 0;
@@ -224,8 +225,10 @@ static errcode_t extent_bmap(ext2_filsys fs, ext2_ino_t ino,
        retval = ext2fs_extent_goto(handle, block);
        if (retval) {
                /* If the extent is not found, return phys_blk = 0 */
-               if (retval == EXT2_ET_EXTENT_NOT_FOUND)
+               if (retval == EXT2_ET_EXTENT_NOT_FOUND) {
+                       extent.e_lblk = block;
                        goto got_block;
+               }
                return retval;
        }
        retval = ext2fs_extent_get(handle, EXT2_EXTENT_CURRENT, &extent);
@@ -246,8 +249,12 @@ got_block:
                                     0, block-1, 0, blocks_alloc, &blk64);
                if (retval)
                        blk64 = ext2fs_find_inode_goal(fs, ino, inode, block);
-               retval = ext2fs_alloc_block2(fs, blk64, block_buf,
-                                            &blk64);
+               alloc_ctx.ino = ino;
+               alloc_ctx.inode = inode;
+               alloc_ctx.lblk = extent.e_lblk;
+               alloc_ctx.flags = BLOCK_ALLOC_DATA;
+               retval = ext2fs_alloc_block3(fs, blk64, block_buf, &blk64,
+                                            &alloc_ctx);
                if (retval)
                        return retval;
                blk64 &= ~EXT2FS_CLUSTER_MASK(fs);
@@ -300,9 +307,16 @@ errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode,
        ext2_extent_handle_t handle = 0;
        blk_t addr_per_block;
        blk_t   b, blk32;
+       blk64_t b64;
        char    *buf = 0;
        errcode_t       retval = 0;
        int             blocks_alloc = 0, inode_dirty = 0;
+       struct blk_alloc_ctx alloc_ctx = {
+               .ino    = ino,
+               .inode  = inode,
+               .lblk   = 0,
+               .flags  = BLOCK_ALLOC_DATA,
+       };
 
        if (!(bmap_flags & BMAP_SET))
                *phys_blk = 0;
@@ -359,7 +373,10 @@ errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode,
                            ext2fs_find_inode_goal(fs, ino, inode, block);
 
                if ((*phys_blk == 0) && (bmap_flags & BMAP_ALLOC)) {
-                       retval = ext2fs_alloc_block(fs, b, block_buf, &b);
+                       b64 = b;
+                       retval = ext2fs_alloc_block3(fs, b64, block_buf, &b64,
+                                                    &alloc_ctx);
+                       b = b64;
                        if (retval)
                                goto done;
                        inode_bmap(inode, block) = b;
@@ -382,7 +399,10 @@ errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode,
                        }
 
                        b = inode_bmap(inode, EXT2_IND_BLOCK-1);
-                       retval = ext2fs_alloc_block(fs, b, block_buf, &b);
+                       b64 = b;
+                       retval = ext2fs_alloc_block3(fs, b64, block_buf, &b64,
+                                                    &alloc_ctx);
+                       b = b64;
                        if (retval)
                                goto done;
                        inode_bmap(inode, EXT2_IND_BLOCK) = b;
@@ -407,7 +427,10 @@ errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode,
                        }
 
                        b = inode_bmap(inode, EXT2_IND_BLOCK);
-                       retval = ext2fs_alloc_block(fs, b, block_buf, &b);
+                       b64 = b;
+                       retval = ext2fs_alloc_block3(fs, b64, block_buf, &b64,
+                                                    &alloc_ctx);
+                       b = b64;
                        if (retval)
                                goto done;
                        inode_bmap(inode, EXT2_DIND_BLOCK) = b;
@@ -431,7 +454,10 @@ errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode,
                }
 
                b = inode_bmap(inode, EXT2_DIND_BLOCK);
-               retval = ext2fs_alloc_block(fs, b, block_buf, &b);
+               b64 = b;
+               retval = ext2fs_alloc_block3(fs, b64, block_buf, &b64,
+                                            &alloc_ctx);
+               b = b64;
                if (retval)
                        goto done;
                inode_bmap(inode, EXT2_TIND_BLOCK) = b;
index d8c7a3c..de33454 100644 (file)
@@ -37,7 +37,7 @@ struct ext2_bmap_statistics {
 };
 
 
-struct ext2fs_struct_generic_bitmap {
+struct ext2fs_struct_generic_bitmap_64 {
        errcode_t               magic;
        ext2_filsys             fs;
        struct ext2_bitmap_ops  *bitmap_ops;
@@ -53,6 +53,8 @@ struct ext2fs_struct_generic_bitmap {
 #endif
 };
 
+typedef struct ext2fs_struct_generic_bitmap_64 *ext2fs_generic_bitmap_64;
+
 #define EXT2FS_IS_32_BITMAP(bmap) \
        (((bmap)->magic == EXT2_ET_MAGIC_GENERIC_BITMAP) || \
         ((bmap)->magic == EXT2_ET_MAGIC_BLOCK_BITMAP) || \
@@ -66,37 +68,37 @@ struct ext2fs_struct_generic_bitmap {
 struct ext2_bitmap_ops {
        int     type;
        /* Generic bmap operators */
-       errcode_t (*new_bmap)(ext2_filsys fs, ext2fs_generic_bitmap bmap);
-       void    (*free_bmap)(ext2fs_generic_bitmap bitmap);
-       errcode_t (*copy_bmap)(ext2fs_generic_bitmap src,
-                            ext2fs_generic_bitmap dest);
-       errcode_t (*resize_bmap)(ext2fs_generic_bitmap bitmap,
+       errcode_t (*new_bmap)(ext2_filsys fs, ext2fs_generic_bitmap_64 bmap);
+       void    (*free_bmap)(ext2fs_generic_bitmap_64 bitmap);
+       errcode_t (*copy_bmap)(ext2fs_generic_bitmap_64 src,
+                            ext2fs_generic_bitmap_64 dest);
+       errcode_t (*resize_bmap)(ext2fs_generic_bitmap_64 bitmap,
                               __u64 new_end,
                               __u64 new_real_end);
        /* bit set/test operators */
-       int     (*mark_bmap)(ext2fs_generic_bitmap bitmap, __u64 arg);
-       int     (*unmark_bmap)(ext2fs_generic_bitmap bitmap, __u64 arg);
-       int     (*test_bmap)(ext2fs_generic_bitmap bitmap, __u64 arg);
-       void    (*mark_bmap_extent)(ext2fs_generic_bitmap bitmap, __u64 arg,
+       int     (*mark_bmap)(ext2fs_generic_bitmap_64 bitmap, __u64 arg);
+       int     (*unmark_bmap)(ext2fs_generic_bitmap_64 bitmap, __u64 arg);
+       int     (*test_bmap)(ext2fs_generic_bitmap_64 bitmap, __u64 arg);
+       void    (*mark_bmap_extent)(ext2fs_generic_bitmap_64 bitmap, __u64 arg,
                                    unsigned int num);
-       void    (*unmark_bmap_extent)(ext2fs_generic_bitmap bitmap, __u64 arg,
+       void    (*unmark_bmap_extent)(ext2fs_generic_bitmap_64 bitmap, __u64 arg,
                                      unsigned int num);
-       int     (*test_clear_bmap_extent)(ext2fs_generic_bitmap bitmap,
+       int     (*test_clear_bmap_extent)(ext2fs_generic_bitmap_64 bitmap,
                                          __u64 arg, unsigned int num);
-       errcode_t (*set_bmap_range)(ext2fs_generic_bitmap bitmap,
+       errcode_t (*set_bmap_range)(ext2fs_generic_bitmap_64 bitmap,
                                    __u64 start, size_t num, void *in);
-       errcode_t (*get_bmap_range)(ext2fs_generic_bitmap bitmap,
+       errcode_t (*get_bmap_range)(ext2fs_generic_bitmap_64 bitmap,
                                    __u64 start, size_t num, void *out);
-       void (*clear_bmap)(ext2fs_generic_bitmap bitmap);
-       void (*print_stats)(ext2fs_generic_bitmap);
+       void (*clear_bmap)(ext2fs_generic_bitmap_64 bitmap);
+       void (*print_stats)(ext2fs_generic_bitmap_64);
 
        /* Find the first zero bit between start and end, inclusive.
         * May be NULL, in which case a generic function is used. */
-       errcode_t (*find_first_zero)(ext2fs_generic_bitmap bitmap,
+       errcode_t (*find_first_zero)(ext2fs_generic_bitmap_64 bitmap,
                                     __u64 start, __u64 end, __u64 *out);
        /* Find the first set bit between start and end, inclusive.
         * May be NULL, in which case a generic function is used. */
-       errcode_t (*find_first_set)(ext2fs_generic_bitmap bitmap,
+       errcode_t (*find_first_set)(ext2fs_generic_bitmap_64 bitmap,
                                    __u64 start, __u64 end, __u64 *out);
 };
 
index b255759..69cbdd8 100644 (file)
@@ -260,10 +260,8 @@ static errcode_t write_backup_super(ext2_filsys fs, dgrp_t group,
        if (sgrp > ((1 << 16) - 1))
                sgrp = (1 << 16) - 1;
 
-       super_shadow->s_block_group_nr = sgrp;
-#ifdef WORDS_BIGENDIAN
-       ext2fs_swap_super(super_shadow);
-#endif
+       super_shadow->s_block_group_nr = ext2fs_cpu_to_le16(sgrp);
+
        retval = ext2fs_superblock_csum_set(fs, super_shadow);
        if (retval)
                return retval;
@@ -284,7 +282,7 @@ errcode_t ext2fs_flush2(ext2_filsys fs, int flags)
        unsigned long   fs_state;
        __u32           feature_incompat;
        struct ext2_super_block *super_shadow = 0;
-       struct ext2_group_desc *group_shadow = 0;
+       struct opaque_ext2_group_desc *group_shadow = 0;
 #ifdef WORDS_BIGENDIAN
        struct ext2_group_desc *gdp;
        dgrp_t          j;
@@ -295,6 +293,11 @@ errcode_t ext2fs_flush2(ext2_filsys fs, int flags)
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
+       if ((fs->flags & EXT2_FLAG_SUPER_ONLY) == 0 &&
+           !ext2fs_has_feature_journal_dev(fs->super) &&
+           fs->group_desc == NULL)
+               return EXT2_ET_NO_GDESC;
+
        fs_state = fs->super->s_state;
        feature_incompat = fs->super->s_feature_incompat;
 
@@ -316,39 +319,43 @@ errcode_t ext2fs_flush2(ext2_filsys fs, int flags)
                        goto errout;
        }
 
-       /* Prepare the group descriptors for writing */
+       /*
+        * Set the state of the FS to be non-valid.  (The state has
+        * already been backed up earlier, and will be restored after
+        * we write out the backup superblocks.)
+        */
+       fs->super->s_state &= ~EXT2_VALID_FS;
+       ext2fs_clear_feature_journal_needs_recovery(fs->super);
+
+       /* Byte swap the superblock and the group descriptors if necessary */
 #ifdef WORDS_BIGENDIAN
        retval = EXT2_ET_NO_MEMORY;
        retval = ext2fs_get_mem(SUPERBLOCK_SIZE, &super_shadow);
        if (retval)
                goto errout;
-       retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize,
-                                 &group_shadow);
-       if (retval)
-               goto errout;
        memcpy(super_shadow, fs->super, sizeof(struct ext2_super_block));
-       memcpy(group_shadow, fs->group_desc, (size_t) fs->blocksize *
-              fs->desc_blocks);
+       ext2fs_swap_super(super_shadow);
 
-       /* swap the group descriptors */
-       for (j = 0; j < fs->group_desc_count; j++) {
-               gdp = ext2fs_group_desc(fs, group_shadow, j);
-               ext2fs_swap_group_desc2(fs, gdp);
+       if (((fs->flags & EXT2_FLAG_SUPER_ONLY) == 0) &&
+           !ext2fs_has_feature_journal_dev(fs->super)) {
+               retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize,
+                                         &group_shadow);
+               if (retval)
+                       goto errout;
+               memcpy(group_shadow, fs->group_desc, (size_t) fs->blocksize *
+                      fs->desc_blocks);
+
+               for (j = 0; j < fs->group_desc_count; j++) {
+                       gdp = ext2fs_group_desc(fs, group_shadow, j);
+                       ext2fs_swap_group_desc2(fs, gdp);
+               }
        }
 #else
        super_shadow = fs->super;
-       group_shadow = ext2fs_group_desc(fs, fs->group_desc, 0);
+       group_shadow = fs->group_desc;
 #endif
 
        /*
-        * Set the state of the FS to be non-valid.  (The state has
-        * already been backed up earlier, and will be restored after
-        * we write out the backup superblocks.)
-        */
-       fs->super->s_state &= ~EXT2_VALID_FS;
-       ext2fs_clear_feature_journal_needs_recovery(fs->super);
-
-       /*
         * If this is an external journal device, don't write out the
         * block group descriptors or any of the backup superblocks
         */
diff --git a/lib/ext2fs/compiler.h b/lib/ext2fs/compiler.h
new file mode 100644 (file)
index 0000000..9aa9b4e
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _EXT2FS_COMPILER_H
+#define _EXT2FS_COMPILER_H
+
+#ifndef __has_builtin
+#define __has_builtin(x) 0
+#endif
+
+#undef offsetof
+#if __has_builtin(__builtin_offsetof)
+#define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
+#elif defined(__compiler_offsetof)
+#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
+#else
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+#endif
+
+#define container_of(ptr, type, member) ({                     \
+       const __typeof__( ((type *)0)->member ) *__mptr = (ptr);        \
+       (type *)( (char *)__mptr - offsetof(type,member) );})
+
+
+#endif /* _EXT2FS_COMPILER_H */
index e67850f..86184b6 100644 (file)
@@ -34,7 +34,8 @@ void ext2fs_init_csum_seed(ext2_filsys fs)
 {
        if (ext2fs_has_feature_csum_seed(fs->super))
                fs->csum_seed = fs->super->s_checksum_seed;
-       else if (ext2fs_has_feature_metadata_csum(fs->super))
+       else if (ext2fs_has_feature_metadata_csum(fs->super) ||
+                ext2fs_has_feature_ea_inode(fs->super))
                fs->csum_seed = ext2fs_crc32c_le(~0, fs->super->s_uuid,
                                                 sizeof(fs->super->s_uuid));
 }
@@ -265,14 +266,15 @@ static errcode_t __get_dirent_tail(ext2_filsys fs,
        d = dirent;
        top = EXT2_DIRENT_TAIL(dirent, fs->blocksize);
 
-       rec_len = translate(d->rec_len);
-       while (rec_len && !(rec_len & 0x3)) {
-               d = (struct ext2_dir_entry *)(((char *)d) + rec_len);
-               if ((void *)d >= top)
-                       break;
+       while ((void *) d < top) {
                rec_len = translate(d->rec_len);
+               if ((rec_len < 8) || (rec_len & 0x03))
+                       return EXT2_ET_DIR_CORRUPTED;
+               d = (struct ext2_dir_entry *)(((char *)d) + rec_len);
        }
 
+       if ((char *)d > ((char *)dirent + fs->blocksize))
+                       return EXT2_ET_DIR_CORRUPTED;
        if (d != top)
                return EXT2_ET_DIR_NO_SPACE_FOR_CSUM;
 
@@ -289,7 +291,8 @@ static errcode_t __get_dirent_tail(ext2_filsys fs,
 
 int ext2fs_dirent_has_tail(ext2_filsys fs, struct ext2_dir_entry *dirent)
 {
-       return __get_dirent_tail(fs, dirent, NULL, 0) == 0;
+       return __get_dirent_tail(fs, dirent, NULL, 0) !=
+               EXT2_ET_DIR_NO_SPACE_FOR_CSUM;
 }
 
 static errcode_t ext2fs_dirent_csum(ext2_filsys fs, ext2_ino_t inum,
@@ -357,20 +360,31 @@ static errcode_t ext2fs_dirent_csum_set(ext2_filsys fs, ext2_ino_t inum,
        return 0;
 }
 
-static errcode_t ext2fs_dx_csum(ext2_filsys fs, ext2_ino_t inum,
-                               struct ext2_dir_entry *dirent,
-                               __u32 *crc, int count_offset, int count,
-                               struct ext2_dx_tail *t)
+errcode_t ext2fs_dx_csum(ext2_filsys fs, ext2_ino_t inum,
+                        struct ext2_dir_entry *dirent,
+                        __u32 *crc, struct ext2_dx_tail **ret_t)
 {
        errcode_t retval;
        char *buf = (char *)dirent;
        int size;
-       __u32 old_csum, gen;
+       __u32 gen, dummy_csum = 0;
        struct ext2_inode inode;
+       struct ext2_dx_tail *t;
+       struct ext2_dx_countlimit *c;
+       int count_offset, limit, count;
+
+       retval = __get_dx_countlimit(fs, dirent, &c, &count_offset, 1);
+       if (retval)
+               return retval;
+       limit = ext2fs_le16_to_cpu(c->limit);
+       count = ext2fs_le16_to_cpu(c->count);
+       if (count_offset + (limit * sizeof(struct ext2_dx_entry)) >
+           fs->blocksize - sizeof(struct ext2_dx_tail))
+               return EXT2_ET_DIR_NO_SPACE_FOR_CSUM;
+       /* htree structs are accessed in LE order */
+       t = (struct ext2_dx_tail *)(((struct ext2_dx_entry *)c) + limit);
 
        size = count_offset + (count * sizeof(struct ext2_dx_entry));
-       old_csum = t->dt_checksum;
-       t->dt_checksum = 0;
 
        retval = ext2fs_read_inode(fs, inum, &inode);
        if (retval)
@@ -382,10 +396,11 @@ static errcode_t ext2fs_dx_csum(ext2_filsys fs, ext2_ino_t inum,
                                sizeof(inum));
        *crc = ext2fs_crc32c_le(*crc, (unsigned char *)&gen, sizeof(gen));
        *crc = ext2fs_crc32c_le(*crc, (unsigned char *)buf, size);
-       *crc = ext2fs_crc32c_le(*crc, (unsigned char *)t,
-                               sizeof(struct ext2_dx_tail));
-       t->dt_checksum = old_csum;
+       *crc = ext2fs_crc32c_le(*crc, (unsigned char *)t, 4);
+       *crc = ext2fs_crc32c_le(*crc, (unsigned char *)&dummy_csum, 4);
 
+       if (ret_t)
+               *ret_t = t;
        return 0;
 }
 
@@ -394,22 +409,9 @@ static int ext2fs_dx_csum_verify(ext2_filsys fs, ext2_ino_t inum,
 {
        __u32 calculated;
        errcode_t retval;
-       struct ext2_dx_countlimit *c;
        struct ext2_dx_tail *t;
-       int count_offset, limit, count;
 
-       retval = __get_dx_countlimit(fs, dirent, &c, &count_offset, 1);
-       if (retval)
-               return 1;
-       limit = ext2fs_le16_to_cpu(c->limit);
-       count = ext2fs_le16_to_cpu(c->count);
-       if (count_offset + (limit * sizeof(struct ext2_dx_entry)) >
-           fs->blocksize - sizeof(struct ext2_dx_tail))
-               return 0;
-       /* htree structs are accessed in LE order */
-       t = (struct ext2_dx_tail *)(((struct ext2_dx_entry *)c) + limit);
-       retval = ext2fs_dx_csum(fs, inum, dirent, &calculated, count_offset,
-                               count, t);
+       retval = ext2fs_dx_csum(fs, inum, dirent, &calculated, &t);
        if (retval)
                return 0;
 
@@ -421,22 +423,9 @@ static errcode_t ext2fs_dx_csum_set(ext2_filsys fs, ext2_ino_t inum,
 {
        __u32 crc;
        errcode_t retval = 0;
-       struct ext2_dx_countlimit *c;
        struct ext2_dx_tail *t;
-       int count_offset, limit, count;
-
-       retval = __get_dx_countlimit(fs, dirent, &c, &count_offset, 1);
-       if (retval)
-               return retval;
-       limit = ext2fs_le16_to_cpu(c->limit);
-       count = ext2fs_le16_to_cpu(c->count);
-       if (count_offset + (limit * sizeof(struct ext2_dx_entry)) >
-           fs->blocksize - sizeof(struct ext2_dx_tail))
-               return EXT2_ET_DIR_NO_SPACE_FOR_CSUM;
-       t = (struct ext2_dx_tail *)(((struct ext2_dx_entry *)c) + limit);
 
-       /* htree structs are accessed in LE order */
-       retval = ext2fs_dx_csum(fs, inum, dirent, &crc, count_offset, count, t);
+       retval = ext2fs_dx_csum(fs, inum, dirent, &crc, &t);
        if (retval)
                return retval;
        t->dt_checksum = ext2fs_cpu_to_le32(crc);
@@ -562,7 +551,7 @@ int ext2fs_inode_bitmap_csum_verify(ext2_filsys fs, dgrp_t group,
        provided = gdp->bg_inode_bitmap_csum_lo;
        calculated = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)bitmap,
                                      size);
-       if (fs->super->s_desc_size >= EXT4_BG_INODE_BITMAP_CSUM_HI_END)
+       if (EXT2_DESC_SIZE(fs->super) >= EXT4_BG_INODE_BITMAP_CSUM_HI_END)
                provided |= (__u32)gdp->bg_inode_bitmap_csum_hi << 16;
        else
                calculated &= 0xFFFF;
@@ -582,7 +571,7 @@ errcode_t ext2fs_inode_bitmap_csum_set(ext2_filsys fs, dgrp_t group,
 
        crc = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)bitmap, size);
        gdp->bg_inode_bitmap_csum_lo = crc & 0xFFFF;
-       if (fs->super->s_desc_size >= EXT4_BG_INODE_BITMAP_CSUM_HI_END)
+       if (EXT2_DESC_SIZE(fs->super) >= EXT4_BG_INODE_BITMAP_CSUM_HI_END)
                gdp->bg_inode_bitmap_csum_hi = crc >> 16;
 
        return 0;
@@ -600,7 +589,7 @@ int ext2fs_block_bitmap_csum_verify(ext2_filsys fs, dgrp_t group,
        provided = gdp->bg_block_bitmap_csum_lo;
        calculated = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)bitmap,
                                      size);
-       if (fs->super->s_desc_size >= EXT4_BG_BLOCK_BITMAP_CSUM_HI_LOCATION)
+       if (EXT2_DESC_SIZE(fs->super) >= EXT4_BG_BLOCK_BITMAP_CSUM_HI_LOCATION)
                provided |= (__u32)gdp->bg_block_bitmap_csum_hi << 16;
        else
                calculated &= 0xFFFF;
@@ -620,7 +609,7 @@ errcode_t ext2fs_block_bitmap_csum_set(ext2_filsys fs, dgrp_t group,
 
        crc = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)bitmap, size);
        gdp->bg_block_bitmap_csum_lo = crc & 0xFFFF;
-       if (fs->super->s_desc_size >= EXT4_BG_BLOCK_BITMAP_CSUM_HI_LOCATION)
+       if (EXT2_DESC_SIZE(fs->super) >= EXT4_BG_BLOCK_BITMAP_CSUM_HI_LOCATION)
                gdp->bg_block_bitmap_csum_hi = crc >> 16;
 
        return 0;
@@ -632,7 +621,7 @@ static errcode_t ext2fs_inode_csum(ext2_filsys fs, ext2_ino_t inum,
 {
        __u32 gen;
        struct ext2_inode_large *desc = inode;
-       size_t size = fs->super->s_inode_size;
+       size_t size = EXT2_INODE_SIZE(fs->super);
        __u16 old_lo;
        __u16 old_hi = 0;
 
index d90b300..075963f 100644 (file)
@@ -78,7 +78,7 @@ int ext2fs_digest_decode(const char *src, int len, char *dst)
 static const struct {
        unsigned char d[32];
        unsigned int len;
-       const unsigned char *ed;
+       const char *ed;
 } tests[] = {
        { { 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14,
            0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24,
@@ -126,9 +126,9 @@ static const struct {
 
 int main(int argc, char **argv)
 {
-       int i, ret, len, len2;
+       int i, ret, len;
        int errors = 0;
-       unsigned char tmp[1024], tmp2[1024];
+       char tmp[1024], tmp2[1024];
 
        if (argc == 3 && !strcmp(argv[1], "encode")) {
                memset(tmp, 0, sizeof(tmp));
@@ -145,7 +145,8 @@ int main(int argc, char **argv)
        }
        for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) {
                memset(tmp, 0, sizeof(tmp));
-               ret = ext2fs_digest_encode(tests[i].d, tests[i].len, tmp);
+               ret = ext2fs_digest_encode((const char *) tests[i].d,
+                                          tests[i].len, tmp);
                len = strlen(tmp);
                printf("Test Digest %d (returned %d): ", i, ret);
                if (ret != len) {
index c4ac94e..42fe98b 100644 (file)
 #include "config.h"
 #include <stdio.h>
 #include <string.h>
+#include <limits.h>
 
 #include "ext2_fs.h"
 #include "ext2fs.h"
+#include "ext2fsP.h"
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
 
 /*
  * Keyed 32-bit hash function using TEA in a Davis-Meyer function
@@ -154,8 +160,6 @@ static void str2hashbuf(const char *msg, int len, __u32 *buf, int num,
        if (len > num*4)
                len = num * 4;
        for (i=0; i < len; i++) {
-               if ((i % 4) == 0)
-                       val = pad;
                if (unsigned_flag)
                        c = (int) ucp[i];
                else
@@ -186,6 +190,11 @@ static void str2hashbuf(const char *msg, int len, __u32 *buf, int num,
  * A particular hash version specifies whether or not the seed is
  * represented, and whether or not the returned hash is 32 bits or 64
  * bits.  32 bit hashes will return 0 for the minor hash.
+ *
+ * This function doesn't do any normalization or casefolding of the
+ * input string.  To take charset encoding into account, use
+ * ext2fs_dirhash2.
+ *
  */
 errcode_t ext2fs_dirhash(int version, const char *name, int len,
                         const __u32 *seed,
@@ -259,3 +268,40 @@ errcode_t ext2fs_dirhash(int version, const char *name, int len,
                *ret_minor_hash = minor_hash;
        return 0;
 }
+
+/*
+ * Returns the hash of a filename considering normalization and
+ * casefolding.  This is a wrapper around ext2fs_dirhash with string
+ * encoding support based on the nls_table and the flags. Check
+ * ext2fs_dirhash for documentation on the input and output parameters.
+ */
+errcode_t ext2fs_dirhash2(int version, const char *name, int len,
+                         const struct ext2fs_nls_table *charset,
+                         int hash_flags, const __u32 *seed,
+                         ext2_dirhash_t *ret_hash,
+                         ext2_dirhash_t *ret_minor_hash)
+{
+       errcode_t r;
+       int dlen;
+
+       if (len && charset && (hash_flags & EXT4_CASEFOLD_FL)) {
+               char buff[PATH_MAX];
+
+               dlen = charset->ops->casefold(charset,
+                             (const unsigned char *) name, len,
+                             (unsigned char *) buff, sizeof(buff));
+               if (dlen < 0) {
+                       if (dlen == -EINVAL)
+                               goto opaque_seq;
+
+                       return dlen;
+               }
+               r = ext2fs_dirhash(version, buff, dlen, seed, ret_hash,
+                                  ret_minor_hash);
+               return r;
+       }
+
+opaque_seq:
+       return ext2fs_dirhash(version, name, len, seed, ret_hash,
+                             ret_minor_hash);
+}
index ac96964..0c76fee 100644 (file)
@@ -429,7 +429,7 @@ ec  EXT2_ET_MMP_FAILED,
        "MMP: device currently active"
 
 ec     EXT2_ET_MMP_FSCK_ON,
-       "MMP: fsck being run"
+       "MMP: e2fsck being run"
 
 ec     EXT2_ET_MMP_BAD_BLOCK,
        "MMP: block number beyond filesystem range"
@@ -471,7 +471,7 @@ ec  EXT2_ET_UNKNOWN_CSUM,
        "Unknown checksum algorithm"
 
 ec     EXT2_ET_MMP_CSUM_INVALID,
-       "MMP block checksum does not match MMP block"
+       "MMP block checksum does not match"
 
 ec     EXT2_ET_FILE_EXISTS,
        "Ext2 file already exists"
@@ -542,4 +542,10 @@ ec EXT2_ET_CORRUPT_JOURNAL_SB,
 ec     EXT2_ET_INODE_CORRUPTED,
        "Inode is corrupted"
 
+ec     EXT2_ET_EA_INODE_CORRUPTED,
+       "Inode containing extended attribute value is corrupted"
+
+ec     EXT2_ET_NO_GDESC,
+       "Group descriptors not loaded"
+
        end
index bbb0aaa..f2042ed 100644 (file)
@@ -29,7 +29,7 @@ struct ext2_ext_attr_entry {
        __u8    e_name_len;     /* length of name */
        __u8    e_name_index;   /* attribute name index */
        __u16   e_value_offs;   /* offset in disk block of value */
-       __u32   e_value_block;  /* disk block attribute is stored on (n/i) */
+       __u32   e_value_inum;   /* inode in which the value is stored */
        __u32   e_value_size;   /* size of attribute value */
        __u32   e_hash;         /* hash value of name and value */
 #if 0
index 27a7d3a..770a5ad 100644 (file)
 
 #include <ext2fs/ext2_types.h>         /* Changed from linux/types.h */
 
+#ifndef __GNUC_PREREQ
+#if defined(__GNUC__) && defined(__GNUC_MINOR__)
+#define __GNUC_PREREQ(maj, min) \
+       ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
+#define __GNUC_PREREQ(maj, min) 0
+#endif
+#endif
+
 /*
  * The second extended filesystem constants/structures
  */
@@ -229,9 +238,12 @@ struct ext2_dx_root_info {
 #define EXT2_HASH_LEGACY_UNSIGNED      3 /* reserved for userspace lib */
 #define EXT2_HASH_HALF_MD4_UNSIGNED    4 /* reserved for userspace lib */
 #define EXT2_HASH_TEA_UNSIGNED         5 /* reserved for userspace lib */
+#define EXT2_HASH_SIPHASH              6
 
 #define EXT2_HASH_FLAG_INCOMPAT        0x1
 
+#define EXT4_DX_BLOCK_MASK 0x0fffffff
+
 struct ext2_dx_entry {
        __le32 hash;
        __le32 block;
@@ -319,18 +331,21 @@ struct ext2_dx_tail {
 #define EXT2_TOPDIR_FL                 0x00020000 /* Top of directory hierarchies*/
 #define EXT4_HUGE_FILE_FL               0x00040000 /* Set to each huge file */
 #define EXT4_EXTENTS_FL                0x00080000 /* Inode uses extents */
+#define EXT4_VERITY_FL                 0x00100000 /* Verity protected inode */
 #define EXT4_EA_INODE_FL               0x00200000 /* Inode used for large EA */
 /* EXT4_EOFBLOCKS_FL 0x00400000 was here */
 #define FS_NOCOW_FL                    0x00800000 /* Do not cow file */
 #define EXT4_SNAPFILE_FL               0x01000000  /* Inode is a snapshot */
+#define FS_DAX_FL                      0x02000000 /* Inode is DAX */
 #define EXT4_SNAPFILE_DELETED_FL       0x04000000  /* Snapshot is being deleted */
 #define EXT4_SNAPFILE_SHRUNK_FL                0x08000000  /* Snapshot shrink has completed */
 #define EXT4_INLINE_DATA_FL            0x10000000 /* Inode has inline data */
 #define EXT4_PROJINHERIT_FL            0x20000000 /* Create with parents projid */
+#define EXT4_CASEFOLD_FL               0x40000000 /* Casefolded file */
 #define EXT2_RESERVED_FL               0x80000000 /* reserved for ext2 lib */
 
-#define EXT2_FL_USER_VISIBLE           0x204BDFFF /* User visible flags */
-#define EXT2_FL_USER_MODIFIABLE                0x204B80FF /* User modifiable flags */
+#define EXT2_FL_USER_VISIBLE           0x604BDFFF /* User visible flags */
+#define EXT2_FL_USER_MODIFIABLE                0x604B80FF /* User modifiable flags */
 
 /*
  * ioctl commands
@@ -376,17 +391,17 @@ struct ext4_new_group_input {
  * Structure of an inode on the disk
  */
 struct ext2_inode {
-       __u16   i_mode;         /* File mode */
+/*00*/ __u16   i_mode;         /* File mode */
        __u16   i_uid;          /* Low 16 bits of Owner Uid */
        __u32   i_size;         /* Size in bytes */
        __u32   i_atime;        /* Access time */
        __u32   i_ctime;        /* Inode change time */
-       __u32   i_mtime;        /* Modification time */
+/*10*/ __u32   i_mtime;        /* Modification time */
        __u32   i_dtime;        /* Deletion Time */
        __u16   i_gid;          /* Low 16 bits of Group Id */
        __u16   i_links_count;  /* Links count */
        __u32   i_blocks;       /* Blocks count */
-       __u32   i_flags;        /* File flags */
+/*20*/ __u32   i_flags;        /* File flags */
        union {
                struct {
                        __u32   l_i_version; /* was l_i_reserved1 */
@@ -395,11 +410,11 @@ struct ext2_inode {
                        __u32  h_i_translator;
                } hurd1;
        } osd1;                         /* OS dependent 1 */
-       __u32   i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
-       __u32   i_generation;   /* File version (for NFS) */
+/*28*/ __u32   i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
+/*64*/ __u32   i_generation;   /* File version (for NFS) */
        __u32   i_file_acl;     /* File ACL */
-       __u32   i_size_high;    /* Formerly i_dir_acl, directory ACL */
-       __u32   i_faddr;        /* Fragment address */
+       __u32   i_size_high;
+/*70*/ __u32   i_faddr;        /* Fragment address */
        union {
                struct {
                        __u16   l_i_blocks_hi;
@@ -424,17 +439,17 @@ struct ext2_inode {
  * Permanent part of an large inode on the disk
  */
 struct ext2_inode_large {
-       __u16   i_mode;         /* File mode */
+/*00*/ __u16   i_mode;         /* File mode */
        __u16   i_uid;          /* Low 16 bits of Owner Uid */
        __u32   i_size;         /* Size in bytes */
        __u32   i_atime;        /* Access time */
        __u32   i_ctime;        /* Inode Change time */
-       __u32   i_mtime;        /* Modification time */
+/*10*/ __u32   i_mtime;        /* Modification time */
        __u32   i_dtime;        /* Deletion Time */
        __u16   i_gid;          /* Low 16 bits of Group Id */
        __u16   i_links_count;  /* Links count */
        __u32   i_blocks;       /* Blocks count */
-       __u32   i_flags;        /* File flags */
+/*20*/ __u32   i_flags;        /* File flags */
        union {
                struct {
                        __u32   l_i_version; /* was l_i_reserved1 */
@@ -443,11 +458,11 @@ struct ext2_inode_large {
                        __u32  h_i_translator;
                } hurd1;
        } osd1;                         /* OS dependent 1 */
-       __u32   i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
-       __u32   i_generation;   /* File version (for NFS) */
+/*28*/ __u32   i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
+/*64*/ __u32   i_generation;   /* File version (for NFS) */
        __u32   i_file_acl;     /* File ACL */
-       __u32   i_size_high;    /* Formerly i_dir_acl, directory ACL */
-       __u32   i_faddr;        /* Fragment address */
+       __u32   i_size_high;
+/*70*/ __u32   i_faddr;        /* Fragment address */
        union {
                struct {
                        __u16   l_i_blocks_hi;
@@ -466,15 +481,15 @@ struct ext2_inode_large {
                        __u32   h_i_author;
                } hurd2;
        } osd2;                         /* OS dependent 2 */
-       __u16   i_extra_isize;
+/*80*/ __u16   i_extra_isize;
        __u16   i_checksum_hi;  /* crc32c(uuid+inum+inode) */
        __u32   i_ctime_extra;  /* extra Change time (nsec << 2 | epoch) */
        __u32   i_mtime_extra;  /* extra Modification time (nsec << 2 | epoch) */
        __u32   i_atime_extra;  /* extra Access time (nsec << 2 | epoch) */
-       __u32   i_crtime;       /* File creation time */
+/*90*/ __u32   i_crtime;       /* File creation time */
        __u32   i_crtime_extra; /* extra File creation time (nsec << 2 | epoch)*/
        __u32   i_version_hi;   /* high 32 bits for 64-bit version */
-       __u32   i_projid;       /* Project ID */
+/*9c*/ __u32   i_projid;       /* Project ID */
 };
 
 #define EXT4_INODE_CSUM_HI_EXTRA_END   \
@@ -484,8 +499,6 @@ struct ext2_inode_large {
 #define EXT4_EPOCH_BITS 2
 #define EXT4_EPOCH_MASK ((1 << EXT4_EPOCH_BITS) - 1)
 
-#define i_dir_acl      i_size_high
-
 #define i_checksum_lo  osd2.linux2.l_i_checksum_lo
 
 #define inode_includes(size, field)                    \
@@ -531,6 +544,7 @@ struct ext2_inode *EXT2_INODE(struct ext2_inode_large *large_inode)
 #define EXT2_VALID_FS                  0x0001  /* Unmounted cleanly */
 #define EXT2_ERROR_FS                  0x0002  /* Errors detected */
 #define EXT3_ORPHAN_FS                 0x0004  /* Orphans being recovered */
+#define EXT4_FC_REPLAY                 0x0020  /* Ext4 fast commit replay ongoing */
 
 /*
  * Misc. filesystem flags
@@ -626,30 +640,30 @@ struct ext4_encryption_key {
  * Structure of the super block
  */
 struct ext2_super_block {
-       __u32   s_inodes_count;         /* Inodes count */
+/*000*/        __u32   s_inodes_count;         /* Inodes count */
        __u32   s_blocks_count;         /* Blocks count */
        __u32   s_r_blocks_count;       /* Reserved blocks count */
        __u32   s_free_blocks_count;    /* Free blocks count */
-       __u32   s_free_inodes_count;    /* Free inodes count */
+/*010*/        __u32   s_free_inodes_count;    /* Free inodes count */
        __u32   s_first_data_block;     /* First Data Block */
        __u32   s_log_block_size;       /* Block size */
        __u32   s_log_cluster_size;     /* Allocation cluster size */
-       __u32   s_blocks_per_group;     /* # Blocks per group */
+/*020*/        __u32   s_blocks_per_group;     /* # Blocks per group */
        __u32   s_clusters_per_group;   /* # Fragments per group */
        __u32   s_inodes_per_group;     /* # Inodes per group */
        __u32   s_mtime;                /* Mount time */
-       __u32   s_wtime;                /* Write time */
+/*030*/        __u32   s_wtime;                /* Write time */
        __u16   s_mnt_count;            /* Mount count */
        __s16   s_max_mnt_count;        /* Maximal mount count */
        __u16   s_magic;                /* Magic signature */
        __u16   s_state;                /* File system state */
        __u16   s_errors;               /* Behaviour when detecting errors */
        __u16   s_minor_rev_level;      /* minor revision level */
-       __u32   s_lastcheck;            /* time of last check */
+/*040*/        __u32   s_lastcheck;            /* time of last check */
        __u32   s_checkinterval;        /* max. time between checks */
        __u32   s_creator_os;           /* OS */
        __u32   s_rev_level;            /* Revision level */
-       __u16   s_def_resuid;           /* Default uid for reserved blocks */
+/*050*/        __u16   s_def_resuid;           /* Default uid for reserved blocks */
        __u16   s_def_resgid;           /* Default gid for reserved blocks */
        /*
         * These fields are for EXT2_DYNAMIC_REV superblocks only.
@@ -668,12 +682,12 @@ struct ext2_super_block {
        __u16   s_inode_size;           /* size of inode structure */
        __u16   s_block_group_nr;       /* block group # of this superblock */
        __u32   s_feature_compat;       /* compatible feature set */
-       __u32   s_feature_incompat;     /* incompatible feature set */
+/*060*/        __u32   s_feature_incompat;     /* incompatible feature set */
        __u32   s_feature_ro_compat;    /* readonly-compatible feature set */
-       __u8    s_uuid[16];             /* 128-bit uuid for volume */
-       char    s_volume_name[EXT2_LABEL_LEN];  /* volume name */
-       char    s_last_mounted[64];     /* directory where last mounted */
-       __u32   s_algorithm_usage_bitmap; /* For compression */
+/*068*/        __u8    s_uuid[16];             /* 128-bit uuid for volume */
+/*078*/        __u8    s_volume_name[EXT2_LABEL_LEN];  /* volume name, no NUL? */
+/*088*/        __u8    s_last_mounted[64];     /* directory last mounted on, no NUL? */
+/*0c8*/        __u32   s_algorithm_usage_bitmap; /* For compression */
        /*
         * Performance hints.  Directory preallocation should only
         * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
@@ -684,66 +698,76 @@ struct ext2_super_block {
        /*
         * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
         */
-       __u8    s_journal_uuid[16];     /* uuid of journal superblock */
-       __u32   s_journal_inum;         /* inode number of journal file */
+/*0d0*/        __u8    s_journal_uuid[16];     /* uuid of journal superblock */
+/*0e0*/        __u32   s_journal_inum;         /* inode number of journal file */
        __u32   s_journal_dev;          /* device number of journal file */
        __u32   s_last_orphan;          /* start of list of inodes to delete */
-       __u32   s_hash_seed[4];         /* HTREE hash seed */
-       __u8    s_def_hash_version;     /* Default hash version to use */
-       __u8    s_jnl_backup_type;      /* Default type of journal backup */
+/*0ec*/        __u32   s_hash_seed[4];         /* HTREE hash seed */
+/*0fc*/        __u8    s_def_hash_version;     /* Default hash version to use */
+       __u8    s_jnl_backup_type;      /* Default type of journal backup */
        __u16   s_desc_size;            /* Group desc. size: INCOMPAT_64BIT */
-       __u32   s_default_mount_opts;
+/*100*/        __u32   s_default_mount_opts;   /* default EXT2_MOUNT_* flags used */
        __u32   s_first_meta_bg;        /* First metablock group */
        __u32   s_mkfs_time;            /* When the filesystem was created */
-       __u32   s_jnl_blocks[17];       /* Backup of the journal inode */
-       __u32   s_blocks_count_hi;      /* Blocks count high 32bits */
+/*10c*/        __u32   s_jnl_blocks[17];       /* Backup of the journal inode */
+/*150*/        __u32   s_blocks_count_hi;      /* Blocks count high 32bits */
        __u32   s_r_blocks_count_hi;    /* Reserved blocks count high 32 bits*/
-       __u32   s_free_blocks_hi;       /* Free blocks count */
+       __u32   s_free_blocks_hi;       /* Free blocks count */
        __u16   s_min_extra_isize;      /* All inodes have at least # bytes */
-       __u16   s_want_extra_isize;     /* New inodes should reserve # bytes */
-       __u32   s_flags;                /* Miscellaneous flags */
-       __u16   s_raid_stride;          /* RAID stride */
-       __u16   s_mmp_update_interval;  /* # seconds to wait in MMP checking */
-       __u64   s_mmp_block;            /* Block for multi-mount protection */
-       __u32   s_raid_stripe_width;    /* blocks on all data disks (N*stride)*/
+       __u16   s_want_extra_isize;     /* New inodes should reserve # bytes */
+/*160*/        __u32   s_flags;                /* Miscellaneous flags */
+       __u16   s_raid_stride;          /* RAID stride in blocks */
+       __u16   s_mmp_update_interval;  /* # seconds to wait in MMP checking */
+       __u64   s_mmp_block;            /* Block for multi-mount protection */
+/*170*/        __u32   s_raid_stripe_width;    /* blocks on all data disks (N*stride)*/
        __u8    s_log_groups_per_flex;  /* FLEX_BG group size */
-       __u8    s_checksum_type;        /* metadata checksum algorithm */
+       __u8    s_checksum_type;        /* metadata checksum algorithm */
        __u8    s_encryption_level;     /* versioning level for encryption */
        __u8    s_reserved_pad;         /* Padding to next 32bits */
        __u64   s_kbytes_written;       /* nr of lifetime kilobytes written */
-       __u32   s_snapshot_inum;        /* Inode number of active snapshot */
+/*180*/        __u32   s_snapshot_inum;        /* Inode number of active snapshot */
        __u32   s_snapshot_id;          /* sequential ID of active snapshot */
-       __u64   s_snapshot_r_blocks_count; /* reserved blocks for active
-                                             snapshot's future use */
-       __u32   s_snapshot_list;        /* inode number of the head of the on-disk snapshot list */
+       __u64   s_snapshot_r_blocks_count; /* active snapshot reserved blocks */
+/*190*/        __u32   s_snapshot_list;        /* inode number of disk snapshot list */
 #define EXT4_S_ERR_START ext4_offsetof(struct ext2_super_block, s_error_count)
        __u32   s_error_count;          /* number of fs errors */
        __u32   s_first_error_time;     /* first time an error happened */
        __u32   s_first_error_ino;      /* inode involved in first error */
-       __u64   s_first_error_block;    /* block involved of first error */
-       __u8    s_first_error_func[32]; /* function where the error happened */
-       __u32   s_first_error_line;     /* line number where error happened */
+/*1a0*/        __u64   s_first_error_block;    /* block involved in first error */
+       __u8    s_first_error_func[32]; /* function where error hit, no NUL? */
+/*1c8*/        __u32   s_first_error_line;     /* line number where error happened */
        __u32   s_last_error_time;      /* most recent time of an error */
-       __u32   s_last_error_ino;       /* inode involved in last error */
+/*1d0*/        __u32   s_last_error_ino;       /* inode involved in last error */
        __u32   s_last_error_line;      /* line number where error happened */
        __u64   s_last_error_block;     /* block involved of last error */
-       __u8    s_last_error_func[32];  /* function where the error happened */
+/*1e0*/        __u8    s_last_error_func[32];  /* function where error hit, no NUL? */
 #define EXT4_S_ERR_END ext4_offsetof(struct ext2_super_block, s_mount_opts)
-       __u8    s_mount_opts[64];
-       __u32   s_usr_quota_inum;       /* inode number of user quota file */
+/*200*/        __u8    s_mount_opts[64];       /* default mount options, no NUL? */
+/*240*/        __u32   s_usr_quota_inum;       /* inode number of user quota file */
        __u32   s_grp_quota_inum;       /* inode number of group quota file */
-       __u32   s_overhead_blocks;      /* overhead blocks/clusters in fs */
-       __u32   s_backup_bgs[2];        /* If sparse_super2 enabled */
-       __u8    s_encrypt_algos[4];     /* Encryption algorithms in use  */
-       __u8    s_encrypt_pw_salt[16];  /* Salt used for string2key algorithm */
-       __le32  s_lpf_ino;              /* Location of the lost+found inode */
+       __u32   s_overhead_clusters;    /* overhead blocks/clusters in fs */
+/*24c*/        __u32   s_backup_bgs[2];        /* If sparse_super2 enabled */
+/*254*/        __u8    s_encrypt_algos[4];     /* Encryption algorithms in use  */
+/*258*/        __u8    s_encrypt_pw_salt[16];  /* Salt used for string2key algorithm */
+/*268*/        __le32  s_lpf_ino;              /* Location of the lost+found inode */
        __le32  s_prj_quota_inum;       /* inode for tracking project quota */
-       __le32  s_checksum_seed;        /* crc32c(orig_uuid) if csum_seed set */
-       __le32  s_reserved[98];         /* Padding to the end of the block */
-       __u32   s_checksum;             /* crc32c(superblock) */
+/*270*/        __le32  s_checksum_seed;        /* crc32c(orig_uuid) if csum_seed set */
+/*274*/        __u8    s_wtime_hi;
+       __u8    s_mtime_hi;
+       __u8    s_mkfs_time_hi;
+       __u8    s_lastcheck_hi;
+       __u8    s_first_error_time_hi;
+       __u8    s_last_error_time_hi;
+       __u8    s_first_error_errcode;
+       __u8    s_last_error_errcode;
+/*27c*/ __le16 s_encoding;             /* Filename charset encoding */
+       __le16  s_encoding_flags;       /* Filename charset encoding flags */
+       __le32  s_reserved[95];         /* Padding to the end of the block */
+/*3fc*/        __u32   s_checksum;             /* crc32c(superblock) */
 };
 
 #define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START)
+#define EXT2_LEN_STR(buf) (int)sizeof(buf), (char *)buf
 
 /*
  * Codes for operating systems
@@ -791,6 +815,8 @@ struct ext2_super_block {
 /* #define EXT2_FEATURE_COMPAT_EXCLUDE_INODE   0x0080 not used, legacy */
 #define EXT2_FEATURE_COMPAT_EXCLUDE_BITMAP     0x0100
 #define EXT4_FEATURE_COMPAT_SPARSE_SUPER2      0x0200
+#define EXT4_FEATURE_COMPAT_FAST_COMMIT                0x0400
+#define EXT4_FEATURE_COMPAT_STABLE_INODES      0x0800
 
 
 #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER    0x0001
@@ -812,7 +838,8 @@ struct ext2_super_block {
 #define EXT4_FEATURE_RO_COMPAT_REPLICA         0x0800
 #define EXT4_FEATURE_RO_COMPAT_READONLY                0x1000
 #define EXT4_FEATURE_RO_COMPAT_PROJECT         0x2000 /* Project quota */
-
+#define EXT4_FEATURE_RO_COMPAT_SHARED_BLOCKS   0x4000
+#define EXT4_FEATURE_RO_COMPAT_VERITY          0x8000
 
 #define EXT2_FEATURE_INCOMPAT_COMPRESSION      0x0001
 #define EXT2_FEATURE_INCOMPAT_FILETYPE         0x0002
@@ -829,6 +856,7 @@ struct ext2_super_block {
 #define EXT4_FEATURE_INCOMPAT_LARGEDIR         0x4000 /* >2GB or 3-lvl htree */
 #define EXT4_FEATURE_INCOMPAT_INLINE_DATA      0x8000 /* data in inode */
 #define EXT4_FEATURE_INCOMPAT_ENCRYPT          0x10000
+#define EXT4_FEATURE_INCOMPAT_CASEFOLD         0x20000
 
 #define EXT4_FEATURE_COMPAT_FUNCS(name, ver, flagname) \
 static inline int ext2fs_has_feature_##name(struct ext2_super_block *sb) \
@@ -890,6 +918,8 @@ EXT4_FEATURE_COMPAT_FUNCS(dir_index,                2, DIR_INDEX)
 EXT4_FEATURE_COMPAT_FUNCS(lazy_bg,             2, LAZY_BG)
 EXT4_FEATURE_COMPAT_FUNCS(exclude_bitmap,      2, EXCLUDE_BITMAP)
 EXT4_FEATURE_COMPAT_FUNCS(sparse_super2,       4, SPARSE_SUPER2)
+EXT4_FEATURE_COMPAT_FUNCS(fast_commit,         4, FAST_COMMIT)
+EXT4_FEATURE_COMPAT_FUNCS(stable_inodes,       4, STABLE_INODES)
 
 EXT4_FEATURE_RO_COMPAT_FUNCS(sparse_super,     2, SPARSE_SUPER)
 EXT4_FEATURE_RO_COMPAT_FUNCS(large_file,       2, LARGE_FILE)
@@ -904,6 +934,8 @@ EXT4_FEATURE_RO_COMPAT_FUNCS(metadata_csum, 4, METADATA_CSUM)
 EXT4_FEATURE_RO_COMPAT_FUNCS(replica,          4, REPLICA)
 EXT4_FEATURE_RO_COMPAT_FUNCS(readonly,         4, READONLY)
 EXT4_FEATURE_RO_COMPAT_FUNCS(project,          4, PROJECT)
+EXT4_FEATURE_RO_COMPAT_FUNCS(shared_blocks,    4, SHARED_BLOCKS)
+EXT4_FEATURE_RO_COMPAT_FUNCS(verity,           4, VERITY)
 
 EXT4_FEATURE_INCOMPAT_FUNCS(compression,       2, COMPRESSION)
 EXT4_FEATURE_INCOMPAT_FUNCS(filetype,          2, FILETYPE)
@@ -920,14 +952,18 @@ EXT4_FEATURE_INCOMPAT_FUNCS(csum_seed,            4, CSUM_SEED)
 EXT4_FEATURE_INCOMPAT_FUNCS(largedir,          4, LARGEDIR)
 EXT4_FEATURE_INCOMPAT_FUNCS(inline_data,       4, INLINE_DATA)
 EXT4_FEATURE_INCOMPAT_FUNCS(encrypt,           4, ENCRYPT)
+EXT4_FEATURE_INCOMPAT_FUNCS(casefold,          4, CASEFOLD)
 
 #define EXT2_FEATURE_COMPAT_SUPP       0
 #define EXT2_FEATURE_INCOMPAT_SUPP    (EXT2_FEATURE_INCOMPAT_FILETYPE| \
-                                      EXT4_FEATURE_INCOMPAT_MMP)
+                                      EXT4_FEATURE_INCOMPAT_MMP| \
+                                      EXT4_FEATURE_INCOMPAT_LARGEDIR| \
+                                      EXT4_FEATURE_INCOMPAT_EA_INODE)
 #define EXT2_FEATURE_RO_COMPAT_SUPP    (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
                                         EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
                                         EXT4_FEATURE_RO_COMPAT_DIR_NLINK| \
-                                        EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
+                                        EXT2_FEATURE_RO_COMPAT_BTREE_DIR| \
+                                        EXT4_FEATURE_RO_COMPAT_VERITY)
 
 /*
  * Default values for user and/or group using reserved blocks
@@ -952,6 +988,12 @@ EXT4_FEATURE_INCOMPAT_FUNCS(encrypt,               4, ENCRYPT)
 #define EXT4_DEFM_DISCARD      0x0400
 #define EXT4_DEFM_NODELALLOC   0x0800
 
+static inline int ext4_hash_in_dirent(const struct ext2_inode *inode)
+{
+       return (inode->i_flags & EXT4_ENCRYPT_FL) &&
+               (inode->i_flags & EXT4_CASEFOLD_FL);
+}
+
 /*
  * Structure of a directory entry
  */
@@ -970,7 +1012,7 @@ struct ext2_dir_entry {
  * bigger than 255 chars, it's safe to reclaim the extra byte for the
  * file_type field.
  *
- * This structure is deprecated due to endianity issues. Please use struct
+ * This structure is deprecated due to endian issues. Please use struct
  * ext2_dir_entry and accessor functions
  *   ext2fs_dirent_name_len
  *   ext2fs_dirent_set_name_len
@@ -987,6 +1029,25 @@ struct ext2_dir_entry_2 {
 };
 
 /*
+ * Hashes for ext4_dir_entry for casefolded and ecrypted directories.
+ * This is located at the first 4 bit aligned location after the name.
+ */
+
+struct ext2_dir_entry_hash {
+       __le32 hash;
+       __le32 minor_hash;
+};
+
+#define EXT2_DIRENT_HASHES(entry) \
+       ((struct ext2_dir_entry_hash *) &entry->name[\
+               (ext2fs_dirent_name_len(entry) + \
+                       EXT2_DIR_ROUND) & ~EXT2_DIR_ROUND])
+#define EXT2_DIRENT_HASH(entry) \
+               ext2fs_le32_to_cpu(EXT2_DIRENT_HASHES(entry)->hash)
+#define EXT2_DIRENT_MINOR_HASH(entry) \
+               ext2fs_le32_to_cpu(EXT2_DIRENT_HASHES(entry)->minor_hash)
+
+/*
  * This is a bogus directory entry at the end of each leaf block that
  * records checksums.
  */
@@ -1026,12 +1087,21 @@ struct ext2_dir_entry_tail {
  * NOTE: It must be a multiple of 4
  */
 #define EXT2_DIR_ENTRY_HEADER_LEN      8
+#define EXT2_DIR_ENTRY_HASH_LEN                8
 #define EXT2_DIR_PAD                   4
 #define EXT2_DIR_ROUND                 (EXT2_DIR_PAD - 1)
-#define EXT2_DIR_REC_LEN(name_len)     (((name_len) + \
-                                         EXT2_DIR_ENTRY_HEADER_LEN + \
-                                         EXT2_DIR_ROUND) & \
-                                        ~EXT2_DIR_ROUND)
+#define EXT2_DIR_REC_LEN(name_len) ext2fs_dir_rec_len(name_len, 0)
+
+static inline unsigned int ext2fs_dir_rec_len(__u8 name_len,
+                                               int extended)
+{
+       int rec_len = (name_len + EXT2_DIR_ENTRY_HEADER_LEN + EXT2_DIR_ROUND);
+
+       rec_len &= ~EXT2_DIR_ROUND;
+       if (extended)
+               rec_len += EXT2_DIR_ENTRY_HASH_LEN;
+       return rec_len;
+}
 
 /*
  * Constants for ext4's extended time encoding
@@ -1048,7 +1118,7 @@ struct ext2_dir_entry_tail {
  * regardless of how old the timestamp is.
  *
  * The timestamp in the MMP structure will be updated by e2fsck at some
- * arbitary intervals (start of passes, after every few groups of inodes
+ * arbitrary intervals (start of passes, after every few groups of inodes
  * in pass1 and pass1b).  There is no guarantee that e2fsck is updating
  * the MMP block in a timely manner, and the updates it does are purely
  * for the convenience of the sysadmin and not for automatic validation.
@@ -1067,9 +1137,9 @@ struct ext2_dir_entry_tail {
 struct mmp_struct {
        __u32   mmp_magic;              /* Magic number for MMP */
        __u32   mmp_seq;                /* Sequence no. updated periodically */
-       __u64   mmp_time;               /* Time last updated */
-       char    mmp_nodename[64];       /* Node which last updated MMP block */
-       char    mmp_bdevname[32];       /* Bdev which last updated MMP block */
+       __u64   mmp_time;               /* Time last updated (seconds) */
+       __u8    mmp_nodename[64];       /* Node updating MMP block, no NUL? */
+       __u8    mmp_bdevname[32];       /* Bdev updating MMP block, no NUL? */
        __u16   mmp_check_interval;     /* Changed mmp_check_interval */
        __u16   mmp_pad1;
        __u32   mmp_pad2[226];
@@ -1101,4 +1171,8 @@ struct mmp_struct {
  */
 #define EXT4_INLINE_DATA_DOTDOT_SIZE   (4)
 
+#define EXT4_ENC_UTF8_12_1     1
+
+#define EXT4_ENC_STRICT_MODE_FL                        (1 << 0) /* Reject invalid sequences */
+
 #endif /* _LINUX_EXT2_FS_H */
index 6b7e977..95c25a7 100644 (file)
@@ -12,6 +12,8 @@
 #ifndef _EXT2FS_EXT2_IO_H
 #define _EXT2FS_EXT2_IO_H
 
+#include <ext2fs/ext2_types.h>
+
 /*
  * ext2_loff_t is defined here since unix_io.c needs it.
  */
@@ -31,6 +33,7 @@ typedef struct struct_io_stats *io_stats;
 #define CHANNEL_FLAGS_WRITETHROUGH     0x01
 #define CHANNEL_FLAGS_DISCARD_ZEROES   0x02
 #define CHANNEL_FLAGS_BLOCK_DEVICE     0x04
+#define CHANNEL_FLAGS_THREADS          0x08
 
 #define io_channel_discard_zeroes_data(i) (i->flags & CHANNEL_FLAGS_DISCARD_ZEROES)
 
@@ -102,6 +105,8 @@ struct struct_io_manager {
 #define IO_FLAG_EXCLUSIVE      0x0002
 #define IO_FLAG_DIRECT_IO      0x0004
 #define IO_FLAG_FORCE_BOUNCE   0x0008
+#define IO_FLAG_THREADS                0x0010
+#define IO_FLAG_NOCACHE                0x0020
 
 /*
  * Convenience functions....
@@ -141,6 +146,10 @@ extern errcode_t io_channel_cache_readahead(io_channel io,
 extern io_manager unix_io_manager;
 extern io_manager unixfd_io_manager;
 
+/* sparse_io.c */
+extern io_manager sparse_io_manager;
+extern io_manager sparsefd_io_manager;
+
 /* undo_io.c */
 extern io_manager undo_io_manager;
 extern errcode_t set_undo_io_backing_manager(io_manager manager);
index 07adc64..98cc65b 100644 (file)
@@ -1,6 +1,6 @@
-/* 
+/*
  * If linux/types.h is already been included, assume it has defined
- * everything we need.  (cross fingers)  Other header files may have 
+ * everything we need.  (cross fingers)  Other header files may have
  * also defined the types that we need.
  */
 #if (!defined(_LINUX_TYPES_H) && !defined(_BLKID_TYPES_H) && \
@@ -173,10 +173,14 @@ typedef long              __s64;
 #define EXT2_ENDIAN_H_
 
 #ifdef __CHECKER__
-#define __bitwise              __attribute__((bitwise))
+# ifndef __bitwise
+#  define __bitwise            __attribute__((bitwise))
+# endif
 #define __force                        __attribute__((force))
 #else
-#define __bitwise
+# ifndef __bitwise
+#  define __bitwise
+# endif
 #define __force
 #endif
 
index 8ff49ca..6a26abc 100644 (file)
@@ -77,8 +77,8 @@ typedef __u32 __bitwise               ext2_ino_t;
 typedef __u32 __bitwise                blk_t;
 typedef __u64 __bitwise                blk64_t;
 typedef __u32 __bitwise                dgrp_t;
-typedef __u32 __bitwise                ext2_off_t;
-typedef __u64 __bitwise                ext2_off64_t;
+typedef __s32 __bitwise                ext2_off_t;
+typedef __s64 __bitwise                ext2_off64_t;
 typedef __s64 __bitwise                e2_blkcnt_t;
 typedef __u32 __bitwise                ext2_dirhash_t;
 
@@ -94,6 +94,8 @@ typedef __u32 __bitwise               ext2_dirhash_t;
 #include <ext2fs/ext2_ext_attr.h>
 #endif
 
+#include "hashmap.h"
+
 /*
  * Portability help for Microsoft Visual C++
  */
@@ -109,9 +111,14 @@ typedef struct struct_ext2_filsys *ext2_filsys;
 #define EXT2FS_UNMARK_ERROR    1
 #define EXT2FS_TEST_ERROR      2
 
-typedef struct ext2fs_struct_generic_bitmap *ext2fs_generic_bitmap;
-typedef struct ext2fs_struct_generic_bitmap *ext2fs_inode_bitmap;
-typedef struct ext2fs_struct_generic_bitmap *ext2fs_block_bitmap;
+struct ext2fs_struct_generic_bitmap_base {
+       errcode_t               magic;
+       ext2_filsys             fs;
+};
+
+typedef struct ext2fs_struct_generic_bitmap_base *ext2fs_generic_bitmap;
+typedef struct ext2fs_struct_generic_bitmap_base *ext2fs_inode_bitmap;
+typedef struct ext2fs_struct_generic_bitmap_base *ext2fs_block_bitmap;
 
 #define EXT2_FIRST_INODE(s)    EXT2_FIRST_INO(s)
 
@@ -195,6 +202,11 @@ typedef struct ext2_file *ext2_file_t;
 #define EXT2_FLAG_DIRECT_IO            0x80000
 #define EXT2_FLAG_SKIP_MMP             0x100000
 #define EXT2_FLAG_IGNORE_CSUM_ERRORS   0x200000
+#define EXT2_FLAG_SHARE_DUP            0x400000
+#define EXT2_FLAG_IGNORE_SB_ERRORS     0x800000
+#define EXT2_FLAG_BBITMAP_TAIL_PROBLEM 0x1000000
+#define EXT2_FLAG_IBITMAP_TAIL_PROBLEM 0x2000000
+#define EXT2_FLAG_THREADS              0x4000000
 
 /*
  * Special flag in the ext2 inode i_flag field that means that this is
@@ -209,6 +221,13 @@ typedef struct ext2_file *ext2_file_t;
 #define EXT2_MKJOURNAL_LAZYINIT        0x0000002 /* don't zero journal inode before use*/
 #define EXT2_MKJOURNAL_NO_MNT_CHECK 0x0000004 /* don't check mount status */
 
+/*
+ * Normal journal area size to fast commit area size ratio. This is used to
+ * set default size of fast commit area.
+ */
+#define EXT2_JOURNAL_TO_FC_BLKS_RATIO          64
+
+struct blk_alloc_ctx;
 struct opaque_ext2_group_desc;
 
 struct struct_ext2_filsys {
@@ -264,6 +283,8 @@ struct struct_ext2_filsys {
         */
        errcode_t (*get_alloc_block)(ext2_filsys fs, blk64_t goal,
                                     blk64_t *ret);
+       errcode_t (*get_alloc_block2)(ext2_filsys fs, blk64_t goal,
+                                     blk64_t *ret, struct blk_alloc_ctx *ctx);
        void (*block_alloc_stats)(ext2_filsys fs, blk64_t blk, int inuse);
 
        /*
@@ -292,6 +313,11 @@ struct struct_ext2_filsys {
                               blk64_t len, blk64_t *pblk, blk64_t *plen);
        void (*block_alloc_stats_range)(ext2_filsys fs, blk64_t blk, blk_t num,
                                        int inuse);
+
+       /* hashmap for SHA of data blocks */
+       struct ext2fs_hashmap* block_sha_map;
+
+       const struct ext2fs_nls_table *encoding;
 };
 
 #if EXT2_FLAT_INCLUDES
@@ -326,7 +352,7 @@ struct struct_ext2_filsys {
  *
  * BLOCK_FLAG_DEPTH_TRAVERSE indicates that the iterator function for
  * the indirect, doubly indirect, etc. blocks should be called after
- * all of the blocks containined in the indirect blocks are processed.
+ * all of the blocks contained in the indirect blocks are processed.
  * This is useful if you are going to be deallocating blocks from an
  * inode.
  *
@@ -355,6 +381,17 @@ struct struct_ext2_filsys {
 #define BLOCK_COUNT_TIND       (-3)
 #define BLOCK_COUNT_TRANSLATOR (-4)
 
+#define BLOCK_ALLOC_UNKNOWN    0
+#define BLOCK_ALLOC_DATA       1
+#define BLOCK_ALLOC_METADATA   2
+
+struct blk_alloc_ctx {
+       ext2_ino_t              ino;
+       struct ext2_inode       *inode;
+       blk64_t                 lblk;
+       int                     flags;
+};
+
 #if 0
 /*
  * Flags for ext2fs_move_blocks
@@ -409,7 +446,7 @@ typedef struct ext2_extent_path *ext2_extent_path_t;
 /*
  * Flags used by ext2fs_extent_delete()
  */
-#define EXT2_EXTENT_DELETE_KEEP_EMPTY  0x001 /* keep node if last extnt gone */
+#define EXT2_EXTENT_DELETE_KEEP_EMPTY  0x001 /* keep node if last extent gone */
 
 /*
  * Flags used by ext2fs_extent_set_bmap()
@@ -532,6 +569,7 @@ typedef struct ext2_struct_inode_scan *ext2_inode_scan;
  * ext2_icount_t abstraction
  */
 #define EXT2_ICOUNT_OPT_INCREMENT      0x01
+#define EXT2_ICOUNT_OPT_FULLMAP                0x02
 
 typedef struct ext2_icount *ext2_icount_t;
 
@@ -549,6 +587,16 @@ typedef struct ext2_icount *ext2_icount_t;
 #define BMAP_RET_UNINIT        0x0001
 
 /*
+ * Flags for ext2fs_read_inode2
+ */
+#define READ_INODE_NOCSUM      0x0001
+
+/*
+ * Flags for ext2fs_write_inode2
+ */
+#define WRITE_INODE_NOCSUM     0x0001
+
+/*
  * Flags for imager.c functions
  */
 #define IMAGER_FLAG_INODEMAP   1
@@ -570,7 +618,9 @@ typedef struct ext2_icount *ext2_icount_t;
                                         EXT2_FEATURE_COMPAT_RESIZE_INODE|\
                                         EXT2_FEATURE_COMPAT_DIR_INDEX|\
                                         EXT2_FEATURE_COMPAT_EXT_ATTR|\
-                                        EXT4_FEATURE_COMPAT_SPARSE_SUPER2)
+                                        EXT4_FEATURE_COMPAT_SPARSE_SUPER2|\
+                                        EXT4_FEATURE_COMPAT_FAST_COMMIT|\
+                                        EXT4_FEATURE_COMPAT_STABLE_INODES)
 
 #ifdef CONFIG_MMP
 #define EXT4_LIB_INCOMPAT_MMP          EXT4_FEATURE_INCOMPAT_MMP
@@ -584,11 +634,14 @@ typedef struct ext2_icount *ext2_icount_t;
                                         EXT3_FEATURE_INCOMPAT_RECOVER|\
                                         EXT3_FEATURE_INCOMPAT_EXTENTS|\
                                         EXT4_FEATURE_INCOMPAT_FLEX_BG|\
+                                        EXT4_FEATURE_INCOMPAT_EA_INODE|\
                                         EXT4_LIB_INCOMPAT_MMP|\
                                         EXT4_FEATURE_INCOMPAT_64BIT|\
                                         EXT4_FEATURE_INCOMPAT_INLINE_DATA|\
                                         EXT4_FEATURE_INCOMPAT_ENCRYPT|\
-                                        EXT4_FEATURE_INCOMPAT_CSUM_SEED)
+                                        EXT4_FEATURE_INCOMPAT_CASEFOLD|\
+                                        EXT4_FEATURE_INCOMPAT_CSUM_SEED|\
+                                        EXT4_FEATURE_INCOMPAT_LARGEDIR)
 
 #define EXT2_LIB_FEATURE_RO_COMPAT_SUPP        (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|\
                                         EXT4_FEATURE_RO_COMPAT_HUGE_FILE|\
@@ -600,7 +653,9 @@ typedef struct ext2_icount *ext2_icount_t;
                                         EXT4_FEATURE_RO_COMPAT_QUOTA|\
                                         EXT4_FEATURE_RO_COMPAT_METADATA_CSUM|\
                                         EXT4_FEATURE_RO_COMPAT_READONLY |\
-                                        EXT4_FEATURE_RO_COMPAT_PROJECT)
+                                        EXT4_FEATURE_RO_COMPAT_PROJECT |\
+                                        EXT4_FEATURE_RO_COMPAT_SHARED_BLOCKS |\
+                                        EXT4_FEATURE_RO_COMPAT_VERITY)
 
 /*
  * These features are only allowed if EXT2_FLAG_SOFTSUPP_FEATURES is passed
@@ -640,6 +695,14 @@ struct ext2_xattr_handle;
 #define XATTR_CHANGED  2
 
 /*
+ * flags for ext2fs_rw_bitmaps()
+ */
+#define EXT2FS_BITMAPS_WRITE           0x0001
+#define EXT2FS_BITMAPS_BLOCK           0x0002
+#define EXT2FS_BITMAPS_INODE           0x0004
+#define EXT2FS_BITMAPS_VALID_FLAGS     0x0007
+
+/*
  * function prototypes
  */
 static inline int ext2fs_has_group_desc_csum(ext2_filsys fs)
@@ -662,6 +725,9 @@ extern errcode_t ext2fs_new_block(ext2_filsys fs, blk_t goal,
                                  ext2fs_block_bitmap map, blk_t *ret);
 extern errcode_t ext2fs_new_block2(ext2_filsys fs, blk64_t goal,
                                   ext2fs_block_bitmap map, blk64_t *ret);
+extern errcode_t ext2fs_new_block3(ext2_filsys fs, blk64_t goal,
+                                  ext2fs_block_bitmap map, blk64_t *ret,
+                                  struct blk_alloc_ctx *ctx);
 extern errcode_t ext2fs_get_free_blocks(ext2_filsys fs, blk_t start,
                                        blk_t finish, int num,
                                        ext2fs_block_bitmap map,
@@ -674,6 +740,10 @@ extern errcode_t ext2fs_alloc_block(ext2_filsys fs, blk_t goal,
                                    char *block_buf, blk_t *ret);
 extern errcode_t ext2fs_alloc_block2(ext2_filsys fs, blk64_t goal,
                                     char *block_buf, blk64_t *ret);
+extern errcode_t ext2fs_alloc_block3(ext2_filsys fs, blk64_t goal,
+                                    char *block_buf, blk64_t *ret,
+                                    struct blk_alloc_ctx *ctx);
+
 extern void ext2fs_set_alloc_block_callback(ext2_filsys fs,
                                            errcode_t (*func)(ext2_filsys fs,
                                                              blk64_t goal,
@@ -855,7 +925,9 @@ extern int ext2fs_group_blocks_count(ext2_filsys fs, dgrp_t group);
 extern blk64_t ext2fs_inode_data_blocks2(ext2_filsys fs,
                                         struct ext2_inode *inode);
 extern blk64_t ext2fs_inode_i_blocks(ext2_filsys fs,
-                                        struct ext2_inode *inode);
+                                    struct ext2_inode *inode);
+extern blk64_t ext2fs_get_stat_i_blocks(ext2_filsys fs,
+                                       struct ext2_inode *inode);
 extern blk64_t ext2fs_blocks_count(struct ext2_super_block *super);
 extern void ext2fs_blocks_count_set(struct ext2_super_block *super,
                                    blk64_t blk);
@@ -1027,6 +1099,9 @@ extern errcode_t ext2fs_get_dx_countlimit(ext2_filsys fs,
                                          struct ext2_dir_entry *dirent,
                                          struct ext2_dx_countlimit **cc,
                                          int *offset);
+extern errcode_t ext2fs_dx_csum(ext2_filsys fs, ext2_ino_t inum,
+                               struct ext2_dir_entry *dirent,
+                               __u32 *crc, struct ext2_dx_tail **ret_t);
 extern errcode_t ext2fs_extent_block_csum_set(ext2_filsys fs,
                                              ext2_ino_t inum,
                                              struct ext3_extent_header *eh);
@@ -1135,6 +1210,12 @@ extern errcode_t ext2fs_dirhash(int version, const char *name, int len,
                                ext2_dirhash_t *ret_hash,
                                ext2_dirhash_t *ret_minor_hash);
 
+extern errcode_t ext2fs_dirhash2(int version, const char *name, int len,
+                                const struct ext2fs_nls_table *charset,
+                                int hash_flags,
+                                const __u32 *seed,
+                                ext2_dirhash_t *ret_hash,
+                                ext2_dirhash_t *ret_minor_hash);
 
 /* dir_iterate.c */
 extern errcode_t ext2fs_get_rec_len(ext2_filsys fs,
@@ -1175,6 +1256,9 @@ extern errcode_t ext2fs_expand_dir(ext2_filsys fs, ext2_ino_t dir);
 /* ext_attr.c */
 extern __u32 ext2fs_ext_attr_hash_entry(struct ext2_ext_attr_entry *entry,
                                        void *data);
+extern errcode_t ext2fs_ext_attr_hash_entry2(ext2_filsys fs,
+                                            struct ext2_ext_attr_entry *entry,
+                                            void *data, __u32 *hash);
 extern errcode_t ext2fs_read_ext_attr(ext2_filsys fs, blk_t block, void *buf);
 extern errcode_t ext2fs_read_ext_attr2(ext2_filsys fs, blk64_t block,
                                       void *buf);
@@ -1221,6 +1305,12 @@ errcode_t ext2fs_xattr_inode_max_size(ext2_filsys fs, ext2_ino_t ino,
 #define XATTR_HANDLE_FLAG_RAW  0x0001
 errcode_t ext2fs_xattrs_flags(struct ext2_xattr_handle *handle,
                              unsigned int *new_flags, unsigned int *old_flags);
+extern void ext2fs_ext_attr_block_rehash(struct ext2_ext_attr_header *header,
+                                        struct ext2_ext_attr_entry *end);
+extern __u32 ext2fs_get_ea_inode_hash(struct ext2_inode *inode);
+extern void ext2fs_set_ea_inode_hash(struct ext2_inode *inode, __u32 hash);
+extern __u64 ext2fs_get_ea_inode_ref(struct ext2_inode *inode);
+extern void ext2fs_set_ea_inode_ref(struct ext2_inode *inode, __u64 ref_count);
 
 /* extent.c */
 extern errcode_t ext2fs_extent_header_verify(void *ptr, int size);
@@ -1248,7 +1338,13 @@ extern errcode_t ext2fs_extent_goto(ext2_extent_handle_t handle,
 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);
-size_t ext2fs_max_extent_depth(ext2_extent_handle_t handle);
+extern size_t ext2fs_max_extent_depth(ext2_extent_handle_t handle);
+extern errcode_t ext2fs_fix_extents_checksums(ext2_filsys fs, ext2_ino_t ino,
+                                             struct ext2_inode *inode);
+extern errcode_t ext2fs_count_blocks(ext2_filsys fs, ext2_ino_t ino,
+                                    struct ext2_inode *inode, blk64_t *ret_count);
+extern errcode_t ext2fs_decode_extent(struct ext2fs_extent *to, void *from,
+                                     int len);
 
 /* fallocate.c */
 #define EXT2_FALLOCATE_ZERO_BLOCKS     (0x1)
@@ -1367,6 +1463,8 @@ errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bmap,
                                        void *in);
 errcode_t ext2fs_convert_subcluster_bitmap(ext2_filsys fs,
                                           ext2fs_block_bitmap *bitmap);
+errcode_t ext2fs_count_used_clusters(ext2_filsys fs, blk64_t start,
+                                    blk64_t end, blk64_t *out);
 
 /* get_num_dirs.c */
 extern errcode_t ext2fs_get_num_dirs(ext2_filsys fs, ext2_ino_t *ret_num_dirs);
@@ -1405,6 +1503,7 @@ errcode_t ext2fs_write_ind_block(ext2_filsys fs, blk_t blk, void *buf);
 extern errcode_t ext2fs_initialize(const char *name, int flags,
                                   struct ext2_super_block *param,
                                   io_manager manager, ext2_filsys *ret_fs);
+extern errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs, int super_only);
 
 /* icount.c */
 extern void ext2fs_free_icount(ext2_icount_t icount);
@@ -1472,13 +1571,19 @@ extern int ext2fs_inode_scan_flags(ext2_inode_scan scan, int set_flags,
 extern errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
                                        struct ext2_inode * inode,
                                        int bufsize);
-extern errcode_t ext2fs_read_inode (ext2_filsys fs, ext2_ino_t ino,
+extern errcode_t ext2fs_read_inode(ext2_filsys fs, ext2_ino_t ino,
                            struct ext2_inode * inode);
+extern errcode_t ext2fs_read_inode2(ext2_filsys fs, ext2_ino_t ino,
+                                   struct ext2_inode * inode,
+                                   int bufsize, int flags);
 extern errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
                                         struct ext2_inode * inode,
                                         int bufsize);
 extern errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
                            struct ext2_inode * inode);
+extern errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino,
+                                    struct ext2_inode * inode,
+                                    int bufsize, int flags);
 extern errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino,
                            struct ext2_inode * inode);
 extern errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks);
@@ -1526,11 +1631,25 @@ extern errcode_t ext2fs_new_dir_block(ext2_filsys fs, ext2_ino_t dir_ino,
 extern errcode_t ext2fs_new_dir_inline_data(ext2_filsys fs, ext2_ino_t dir_ino,
                                ext2_ino_t parent_ino, __u32 *iblock);
 
+/* nls_utf8.c */
+extern const struct ext2fs_nls_table *ext2fs_load_nls_table(int encoding);
+extern int ext2fs_check_encoded_name(const struct ext2fs_nls_table *table,
+                                    char *s, size_t len, char **pos);
+extern int ext2fs_casefold_cmp(const struct ext2fs_nls_table *table,
+                              const unsigned char *str1, size_t len1,
+                              const unsigned char *str2, size_t len2);
+
 /* mkdir.c */
 extern errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
                              const char *name);
 
 /* mkjournal.c */
+struct ext2fs_journal_params {
+       blk_t num_journal_blocks;
+       blk_t num_fc_blocks;
+};
+extern errcode_t ext2fs_get_journal_params(
+               struct ext2fs_journal_params *params, ext2_filsys fs);
 extern errcode_t ext2fs_zero_blocks(ext2_filsys fs, blk_t blk, int num,
                                    blk_t *ret_blk, int *ret_count);
 extern errcode_t ext2fs_zero_blocks2(ext2_filsys fs, blk64_t blk, int num,
@@ -1538,12 +1657,18 @@ extern errcode_t ext2fs_zero_blocks2(ext2_filsys fs, blk64_t blk, int num,
 extern errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
                                                  __u32 num_blocks, int flags,
                                                  char  **ret_jsb);
+extern errcode_t ext2fs_create_journal_superblock2(ext2_filsys fs,
+                                                 struct ext2fs_journal_params *params,
+                                                 int flags, char  **ret_jsb);
 extern errcode_t ext2fs_add_journal_device(ext2_filsys fs,
                                           ext2_filsys journal_dev);
 extern errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks,
                                          int flags);
 extern errcode_t ext2fs_add_journal_inode2(ext2_filsys fs, blk_t num_blocks,
                                           blk64_t goal, int flags);
+extern errcode_t ext2fs_add_journal_inode3(ext2_filsys fs,
+                                   struct ext2fs_journal_params *params,
+                                   blk64_t goal, int flags);
 extern int ext2fs_default_journal_size(__u64 num_blocks);
 extern int ext2fs_journal_sb_start(int blocksize);
 
@@ -1573,6 +1698,10 @@ extern errcode_t ext2fs_get_pathname(ext2_filsys fs, ext2_ino_t dir, ext2_ino_t
                               char **name);
 
 /* link.c */
+#define EXT2FS_UNLINK_FORCE            0x1     /* Forcefully unlink even if
+                                                * the inode number doesn't
+                                                * match the dirent
+                                                */
 errcode_t ext2fs_link(ext2_filsys fs, ext2_ino_t dir, const char *name,
                      ext2_ino_t ino, int flags);
 errcode_t ext2fs_unlink(ext2_filsys fs, ext2_ino_t dir, const char *name,
@@ -1581,6 +1710,7 @@ errcode_t ext2fs_unlink(ext2_filsys fs, ext2_ino_t dir, const char *name,
 /* symlink.c */
 errcode_t ext2fs_symlink(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t ino,
                         const char *name, const char *target);
+int ext2fs_is_fast_symlink(struct ext2_inode *inode);
 
 /* mmp.c */
 errcode_t ext2fs_mmp_read(ext2_filsys fs, blk64_t mmp_blk, void *buf);
@@ -1680,6 +1810,8 @@ extern errcode_t ext2fs_get_arrayzero(unsigned long count,
 extern errcode_t ext2fs_free_mem(void *ptr);
 extern errcode_t ext2fs_resize_mem(unsigned long old_size,
                                   unsigned long size, void *ptr);
+extern errcode_t ext2fs_resize_array(unsigned long old_count, unsigned long count,
+                                    unsigned long size, void *ptr);
 extern void ext2fs_mark_super_dirty(ext2_filsys fs);
 extern void ext2fs_mark_changed(ext2_filsys fs);
 extern int ext2fs_test_changed(ext2_filsys fs);
@@ -1696,6 +1828,7 @@ extern blk_t ext2fs_group_first_block(ext2_filsys fs, dgrp_t group);
 extern blk_t ext2fs_group_last_block(ext2_filsys fs, dgrp_t group);
 extern blk_t ext2fs_inode_data_blocks(ext2_filsys fs,
                                      struct ext2_inode *inode);
+extern int ext2fs_htree_intnode_maxrecs(ext2_filsys fs, int blocks);
 extern unsigned int ext2fs_div_ceil(unsigned int a, unsigned int b);
 extern __u64 ext2fs_div64_ceil(__u64 a, __u64 b);
 extern int ext2fs_dirent_name_len(const struct ext2_dir_entry *entry);
@@ -1756,7 +1889,8 @@ _INLINE_ errcode_t ext2fs_get_memzero(unsigned long size, void *ptr)
        return 0;
 }
 
-_INLINE_ errcode_t ext2fs_get_array(unsigned long count, unsigned long size, void *ptr)
+_INLINE_ errcode_t ext2fs_get_array(unsigned long count, unsigned long size,
+                                   void *ptr)
 {
        if (count && (~0UL)/count < size)
                return EXT2_ET_NO_MEMORY;
@@ -1766,15 +1900,10 @@ _INLINE_ errcode_t ext2fs_get_array(unsigned long count, unsigned long size, voi
 _INLINE_ errcode_t ext2fs_get_arrayzero(unsigned long count,
                                        unsigned long size, void *ptr)
 {
-       void *pp;
-
        if (count && (~0UL)/count < size)
                return EXT2_ET_NO_MEMORY;
-       pp = calloc(count, size);
-       if (!pp)
-               return EXT2_ET_NO_MEMORY;
-       memcpy(ptr, &pp, sizeof(pp));
-       return 0;
+
+       return ext2fs_get_memzero((size_t)count * size, ptr);
 }
 
 /*
@@ -1808,6 +1937,36 @@ _INLINE_ errcode_t ext2fs_resize_mem(unsigned long EXT2FS_ATTR((unused)) old_siz
        memcpy(ptr, &p, sizeof(p));
        return 0;
 }
+
+/*
+ *  Resize array.  The 'ptr' arg must point to a pointer.
+ */
+_INLINE_ errcode_t ext2fs_resize_array(unsigned long size,
+                                      unsigned long old_count,
+                                      unsigned long count, void *ptr)
+{
+       unsigned long old_size;
+       errcode_t retval;
+
+       if (count && (~0UL)/count < size)
+               return EXT2_ET_NO_MEMORY;
+
+       size *= count;
+       old_size = size * old_count;
+       retval = ext2fs_resize_mem(old_size, size, ptr);
+       if (retval)
+               return retval;
+
+       if (size > old_size) {
+               void *p;
+
+               memcpy(&p, ptr, sizeof(p));
+               memset((char *)p + old_size, 0, size - old_size);
+               memcpy(ptr, &p, sizeof(p));
+       }
+
+       return 0;
+}
 #endif /* Custom memory routines */
 
 /*
@@ -1927,6 +2086,17 @@ _INLINE_ blk_t ext2fs_inode_data_blocks(ext2_filsys fs,
        return (blk_t) ext2fs_inode_data_blocks2(fs, inode);
 }
 
+_INLINE_ int ext2fs_htree_intnode_maxrecs(ext2_filsys fs, int blocks)
+{
+       int csum_size = 0;
+
+       if ((EXT2_SB(fs->super)->s_feature_ro_compat &
+            EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) != 0)
+               csum_size = sizeof(struct ext2_dx_tail);
+       return blocks * ((fs->blocksize - (8 + csum_size)) /
+                                               sizeof(struct ext2_dx_entry));
+}
+
 /*
  * This is an efficient, overflow safe way of calculating ceil((1.0 * a) / b)
  */
@@ -1980,6 +2150,18 @@ ext2fs_const_inode(const struct ext2_inode_large * large_inode)
 #undef _INLINE_
 #endif
 
+/* htree levels for ext4 */
+#define EXT4_HTREE_LEVEL_COMPAT 2
+#define EXT4_HTREE_LEVEL       3
+
+static inline unsigned int ext2_dir_htree_level(ext2_filsys fs)
+{
+       if (ext2fs_has_feature_largedir(fs->super))
+               return EXT4_HTREE_LEVEL;
+
+       return EXT4_HTREE_LEVEL_COMPAT;
+}
+
 #ifdef __cplusplus
 }
 #endif
index 8de9d33..a20a050 100644 (file)
@@ -9,10 +9,23 @@
  * %End-Header%
  */
 
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
 #include "ext2fs.h"
 
 #define EXT2FS_MAX_NESTED_LINKS  8
 
+static inline int ext2fsP_is_disk_device(mode_t mode)
+{
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+       return S_ISBLK(mode) || S_ISCHR(mode);
+#else
+       return S_ISBLK(mode);
+#endif
+}
+
 /*
  * Badblocks list
  */
@@ -79,6 +92,25 @@ struct ext2_inode_cache_ent {
        struct ext2_inode       *inode;
 };
 
+/*
+ * NLS defintions
+ */
+struct ext2fs_nls_table {
+       int version;
+       const struct ext2fs_nls_ops *ops;
+};
+
+struct ext2fs_nls_ops {
+       int (*casefold)(const struct ext2fs_nls_table *charset,
+                       const unsigned char *str, size_t len,
+                       unsigned char *dest, size_t dlen);
+       int (*validate)(const struct ext2fs_nls_table *table,
+                       char *s, size_t len, char **pos);
+       int (*casefold_cmp)(const struct ext2fs_nls_table *table,
+                           const unsigned char *str1, size_t len1,
+                           const unsigned char *str2, size_t len2);
+};
+
 /* Function prototypes */
 
 extern int ext2fs_process_dir_block(ext2_filsys        fs,
@@ -174,3 +206,5 @@ extern int ext2fs_file_block_offset_too_big(ext2_filsys fs,
 typedef void (*ext2_exit_fn)(void *);
 errcode_t ext2fs_add_exit_fn(ext2_exit_fn fn, void *data);
 errcode_t ext2fs_remove_exit_fn(ext2_exit_fn fn, void *data);
+
+#define EXT2FS_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2*!!(cond)]))
index f73a332..309fbc8 100644 (file)
@@ -59,7 +59,7 @@ struct ext3_extent_header {
        __le16  eh_magic;       /* probably will support different formats */
        __le16  eh_entries;     /* number of valid entries */
        __le16  eh_max;         /* capacity of store in entries */
-       __le16  eh_depth;       /* has tree real underlaying blocks? */
+       __le16  eh_depth;       /* has tree real underlying blocks? */
        __le32  eh_generation;  /* generation of the tree */
 };
 
index 69ff79d..8d4d974 100644 (file)
@@ -50,6 +50,13 @@ typedef struct {
 
 typedef struct {
         __le32                  a_version;
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
         posix_acl_xattr_entry   a_entries[0];
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic pop
+#endif
 } posix_acl_xattr_header;
 
index ce2f48f..4580d2e 100644 (file)
 
 #include "ext2fs.h"
 
+static errcode_t read_ea_inode_hash(ext2_filsys fs, ext2_ino_t ino, __u32 *hash)
+{
+       struct ext2_inode inode;
+       errcode_t retval;
+
+       retval = ext2fs_read_inode(fs, ino, &inode);
+       if (retval)
+               return retval;
+       *hash = ext2fs_get_ea_inode_hash(&inode);
+       return 0;
+}
+
 #define NAME_HASH_SHIFT 5
 #define VALUE_HASH_SHIFT 16
 
@@ -46,7 +58,7 @@ __u32 ext2fs_ext_attr_hash_entry(struct ext2_ext_attr_entry *entry, void *data)
        }
 
        /* The hash needs to be calculated on the data in little-endian. */
-       if (entry->e_value_block == 0 && entry->e_value_size != 0) {
+       if (entry->e_value_inum == 0 && entry->e_value_size != 0) {
                __u32 *value = (__u32 *)data;
                for (n = (entry->e_value_size + EXT2_EXT_ATTR_ROUND) >>
                         EXT2_EXT_ATTR_PAD_BITS; n; n--) {
@@ -59,6 +71,85 @@ __u32 ext2fs_ext_attr_hash_entry(struct ext2_ext_attr_entry *entry, void *data)
        return hash;
 }
 
+/*
+ * ext2fs_ext_attr_hash_entry2()
+ *
+ * Compute the hash of an extended attribute.
+ * This version of the function supports hashing entries that reference
+ * external inodes (ea_inode feature).
+ */
+errcode_t ext2fs_ext_attr_hash_entry2(ext2_filsys fs,
+                                     struct ext2_ext_attr_entry *entry,
+                                     void *data, __u32 *hash)
+{
+       *hash = ext2fs_ext_attr_hash_entry(entry, data);
+
+       if (entry->e_value_inum) {
+               __u32 ea_inode_hash;
+               errcode_t retval;
+
+               retval = read_ea_inode_hash(fs, entry->e_value_inum,
+                                           &ea_inode_hash);
+               if (retval)
+                       return retval;
+
+               *hash = (*hash << VALUE_HASH_SHIFT) ^
+                       (*hash >> (8*sizeof(*hash) - VALUE_HASH_SHIFT)) ^
+                       ea_inode_hash;
+       }
+       return 0;
+}
+
+#undef NAME_HASH_SHIFT
+#undef VALUE_HASH_SHIFT
+
+#define BLOCK_HASH_SHIFT 16
+
+/* Mirrors ext4_xattr_rehash() implementation in kernel. */
+void ext2fs_ext_attr_block_rehash(struct ext2_ext_attr_header *header,
+                                 struct ext2_ext_attr_entry *end)
+{
+       struct ext2_ext_attr_entry *here;
+       __u32 hash = 0;
+
+       here = (struct ext2_ext_attr_entry *)(header+1);
+       while (here < end && !EXT2_EXT_IS_LAST_ENTRY(here)) {
+               if (!here->e_hash) {
+                       /* Block is not shared if an entry's hash value == 0 */
+                       hash = 0;
+                       break;
+               }
+               hash = (hash << BLOCK_HASH_SHIFT) ^
+                      (hash >> (8*sizeof(hash) - BLOCK_HASH_SHIFT)) ^
+                      here->e_hash;
+               here = EXT2_EXT_ATTR_NEXT(here);
+       }
+       header->h_hash = hash;
+}
+
+#undef BLOCK_HASH_SHIFT
+
+__u32 ext2fs_get_ea_inode_hash(struct ext2_inode *inode)
+{
+       return inode->i_atime;
+}
+
+void ext2fs_set_ea_inode_hash(struct ext2_inode *inode, __u32 hash)
+{
+       inode->i_atime = hash;
+}
+
+__u64 ext2fs_get_ea_inode_ref(struct ext2_inode *inode)
+{
+       return ((__u64)inode->i_ctime << 32) | inode->osd1.linux1.l_i_version;
+}
+
+void ext2fs_set_ea_inode_ref(struct ext2_inode *inode, __u64 ref_count)
+{
+       inode->i_ctime = (__u32)(ref_count >> 32);
+       inode->osd1.linux1.l_i_version = (__u32)ref_count;
+}
+
 static errcode_t check_ext_attr_header(struct ext2_ext_attr_header *header)
 {
        if ((header->h_magic != EXT2_EXT_ATTR_MAGIC_v1 &&
@@ -69,9 +160,6 @@ static errcode_t check_ext_attr_header(struct ext2_ext_attr_header *header)
        return 0;
 }
 
-#undef NAME_HASH_SHIFT
-#undef VALUE_HASH_SHIFT
-
 errcode_t ext2fs_read_ext_attr3(ext2_filsys fs, blk64_t block, void *buf,
                                ext2_ino_t inum)
 {
@@ -207,17 +295,19 @@ errcode_t ext2fs_adjust_ea_refcount(ext2_filsys fs, blk_t blk,
 struct ext2_xattr {
        char *name;
        void *value;
-       size_t value_len;
+       unsigned int value_len;
+       ext2_ino_t ea_ino;
 };
 
 struct ext2_xattr_handle {
        errcode_t magic;
        ext2_filsys fs;
        struct ext2_xattr *attrs;
-       size_t length, count;
+       int capacity;
+       int count;
+       int ibody_count;
        ext2_ino_t ino;
        unsigned int flags;
-       int dirty;
 };
 
 static errcode_t ext2fs_xattrs_expand(struct ext2_xattr_handle *h,
@@ -226,14 +316,14 @@ static errcode_t ext2fs_xattrs_expand(struct ext2_xattr_handle *h,
        struct ext2_xattr *new_attrs;
        errcode_t err;
 
-       err = ext2fs_get_arrayzero(h->length + expandby,
+       err = ext2fs_get_arrayzero(h->capacity + expandby,
                                   sizeof(struct ext2_xattr), &new_attrs);
        if (err)
                return err;
 
-       memcpy(new_attrs, h->attrs, h->length * sizeof(struct ext2_xattr));
+       memcpy(new_attrs, h->attrs, h->capacity * sizeof(struct ext2_xattr));
        ext2fs_free_mem(&h->attrs);
-       h->length += expandby;
+       h->capacity += expandby;
        h->attrs = new_attrs;
 
        return 0;
@@ -246,6 +336,7 @@ struct ea_name_index {
 
 /* Keep these names sorted in order of decreasing specificity. */
 static struct ea_name_index ea_names[] = {
+       {10, "gnu."},
        {3, "system.posix_acl_default"},
        {2, "system.posix_acl_access"},
        {8, "system.richacl"},
@@ -256,44 +347,6 @@ static struct ea_name_index ea_names[] = {
        {0, NULL},
 };
 
-static int find_ea_index(char *fullname, char **name, int *index);
-
-/* Push empty attributes to the end and inlinedata to the front. */
-static int attr_compare(const void *a, const void *b)
-{
-       const struct ext2_xattr *xa = a, *xb = b;
-       char *xa_suffix, *xb_suffix;
-       int xa_idx, xb_idx;
-       int cmp;
-
-       if (xa->name == NULL)
-               return +1;
-       else if (xb->name == NULL)
-               return -1;
-       else if (!strcmp(xa->name, "system.data"))
-               return -1;
-       else if (!strcmp(xb->name, "system.data"))
-               return +1;
-
-       /*
-        * Duplicate the kernel's sorting algorithm because xattr blocks
-        * require sorted keys.
-        */
-       xa_suffix = xa->name;
-       xb_suffix = xb->name;
-       xa_idx = xb_idx = 0;
-       find_ea_index(xa->name, &xa_suffix, &xa_idx);
-       find_ea_index(xb->name, &xb_suffix, &xb_idx);
-       cmp = xa_idx - xb_idx;
-       if (cmp)
-               return cmp;
-       cmp = strlen(xa_suffix) - strlen(xb_suffix);
-       if (cmp)
-               return cmp;
-       cmp = strcmp(xa_suffix, xb_suffix);
-       return cmp;
-}
-
 static const char *find_ea_prefix(int index)
 {
        struct ea_name_index *e;
@@ -305,13 +358,13 @@ static const char *find_ea_prefix(int index)
        return NULL;
 }
 
-static int find_ea_index(char *fullname, char **name, int *index)
+static int find_ea_index(const char *fullname, const char **name, int *index)
 {
        struct ea_name_index *e;
 
        for (e = ea_names; e->name; e++) {
                if (strncmp(fullname, e->name, strlen(e->name)) == 0) {
-                       *name = (char *)fullname + strlen(e->name);
+                       *name = fullname + strlen(e->name);
                        *index = e->index;
                        return 1;
                }
@@ -473,12 +526,13 @@ posix_acl_xattr_count(size_t size)
 static errcode_t convert_posix_acl_to_disk_buffer(const void *value, size_t size,
                                                  void *out_buf, size_t *size_out)
 {
-       posix_acl_xattr_header *header = (posix_acl_xattr_header*) value;
-       posix_acl_xattr_entry *entry = (posix_acl_xattr_entry *)(header+1), *end;
+       const posix_acl_xattr_header *header =
+               (const posix_acl_xattr_header*) value;
+       const posix_acl_xattr_entry *end, *entry =
+               (const posix_acl_xattr_entry *)(header+1);
        ext4_acl_header *ext_acl;
        size_t s;
-       void *e;
-       int err;
+       char *e;
 
        int count;
 
@@ -528,11 +582,10 @@ static errcode_t convert_disk_buffer_to_posix_acl(const void *value, size_t size
 {
        posix_acl_xattr_header *header;
        posix_acl_xattr_entry *entry;
-       ext4_acl_header *ext_acl = (ext4_acl_header *) value;
+       const ext4_acl_header *ext_acl = (const ext4_acl_header *) value;
        errcode_t err;
        const char *cp;
        char *out;
-       int count;
 
        if ((!value) ||
            (size < sizeof(ext4_acl_header)) ||
@@ -547,7 +600,7 @@ static errcode_t convert_disk_buffer_to_posix_acl(const void *value, size_t size
        header->a_version = ext2fs_cpu_to_le32(POSIX_ACL_XATTR_VERSION);
        entry = (posix_acl_xattr_entry *) (out + sizeof(posix_acl_xattr_header));
 
-       cp = value + sizeof(ext4_acl_header);
+       cp = (const char *) value + sizeof(ext4_acl_header);
        size -= sizeof(ext4_acl_header);
 
        while (size > 0) {
@@ -583,75 +636,65 @@ static errcode_t convert_disk_buffer_to_posix_acl(const void *value, size_t size
        return 0;
 }
 
-
-static errcode_t write_xattrs_to_buffer(struct ext2_xattr_handle *handle,
-                                       struct ext2_xattr **pos,
-                                       void *entries_start,
-                                       unsigned int storage_size,
-                                       unsigned int value_offset_correction,
-                                       int write_hash)
+static errcode_t
+write_xattrs_to_buffer(ext2_filsys fs, struct ext2_xattr *attrs, int count,
+                      void *entries_start, unsigned int storage_size,
+                      unsigned int value_offset_correction, int write_hash)
 {
-       struct ext2_xattr *x = *pos;
+       struct ext2_xattr *x;
        struct ext2_ext_attr_entry *e = entries_start;
        char *end = (char *) entries_start + storage_size;
-       char *shortname;
-       unsigned int entry_size, value_size;
+       const char *shortname;
+       unsigned int value_size;
        int idx, ret;
+       errcode_t err;
 
        memset(entries_start, 0, storage_size);
-       /* For all remaining x...  */
-       for (; x < handle->attrs + handle->length; x++) {
-               if (!x->name)
-                       continue;
-
+       for (x = attrs; x < attrs + count; x++) {
                /* Calculate index and shortname position */
                shortname = x->name;
                ret = find_ea_index(x->name, &shortname, &idx);
 
-               /* Calculate entry and value size */
-               entry_size = (sizeof(*e) + strlen(shortname) +
-                             EXT2_EXT_ATTR_PAD - 1) &
-                            ~(EXT2_EXT_ATTR_PAD - 1);
                value_size = ((x->value_len + EXT2_EXT_ATTR_PAD - 1) /
                              EXT2_EXT_ATTR_PAD) * EXT2_EXT_ATTR_PAD;
 
-               /*
-                * Would entry collide with value?
-                * Note that we must leave sufficient room for a (u32)0 to
-                * mark the end of the entries.
-                */
-               if ((char *)e + entry_size + sizeof(__u32) > end - value_size)
-                       break;
-
                /* Fill out e appropriately */
                e->e_name_len = strlen(shortname);
                e->e_name_index = (ret ? idx : 0);
-               e->e_value_offs = end - value_size - (char *)entries_start +
-                               value_offset_correction;
-               e->e_value_block = 0;
+
                e->e_value_size = x->value_len;
+               e->e_value_inum = x->ea_ino;
 
-               /* Store name and value */
-               end -= value_size;
+               /* Store name */
                memcpy((char *)e + sizeof(*e), shortname, e->e_name_len);
-               memcpy(end, x->value, e->e_value_size);
+               if (x->ea_ino) {
+                       e->e_value_offs = 0;
+               } else {
+                       end -= value_size;
+                       e->e_value_offs = end - (char *) entries_start +
+                                               value_offset_correction;
+                       memcpy(end, x->value, e->e_value_size);
+               }
 
-               if (write_hash)
-                       e->e_hash = ext2fs_ext_attr_hash_entry(e, end);
-               else
+               if (write_hash || x->ea_ino) {
+                       err = ext2fs_ext_attr_hash_entry2(fs, e,
+                                                         x->ea_ino ? 0 : end,
+                                                         &e->e_hash);
+                       if (err)
+                               return err;
+               } else
                        e->e_hash = 0;
 
                e = EXT2_EXT_ATTR_NEXT(e);
                *(__u32 *)e = 0;
        }
-       *pos = x;
-
        return 0;
 }
 
 errcode_t ext2fs_xattrs_write(struct ext2_xattr_handle *handle)
 {
-       struct ext2_xattr *x;
+       ext2_filsys fs = handle->fs;
+       const unsigned int inode_size = EXT2_INODE_SIZE(fs->super);
        struct ext2_inode_large *inode;
        char *start, *block_buf = NULL;
        struct ext2_ext_attr_header *header;
@@ -662,24 +705,23 @@ errcode_t ext2fs_xattrs_write(struct ext2_xattr_handle *handle)
        errcode_t err;
 
        EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EA_HANDLE);
-       i = EXT2_INODE_SIZE(handle->fs->super);
+       i = inode_size;
        if (i < sizeof(*inode))
                i = sizeof(*inode);
        err = ext2fs_get_memzero(i, &inode);
        if (err)
                return err;
 
-       err = ext2fs_read_inode_full(handle->fs, handle->ino,
-                                    (struct ext2_inode *)inode,
-                                    EXT2_INODE_SIZE(handle->fs->super));
+       err = ext2fs_read_inode_full(fs, handle->ino, EXT2_INODE(inode),
+                                    inode_size);
        if (err)
                goto out;
 
        /* If extra_isize isn't set, we need to set it now */
        if (inode->i_extra_isize == 0 &&
-           EXT2_INODE_SIZE(handle->fs->super) > EXT2_GOOD_OLD_INODE_SIZE) {
+           inode_size > EXT2_GOOD_OLD_INODE_SIZE) {
                char *p = (char *)inode;
-               size_t extra = handle->fs->super->s_want_extra_isize;
+               size_t extra = fs->super->s_want_extra_isize;
 
                if (extra == 0)
                        extra = sizeof(__u32);
@@ -691,58 +733,45 @@ errcode_t ext2fs_xattrs_write(struct ext2_xattr_handle *handle)
                goto out;
        }
 
-       /*
-        * Force the inlinedata attr to the front and the empty entries
-        * to the end.
-        */
-       x = handle->attrs;
-       qsort(x, handle->length, sizeof(struct ext2_xattr), attr_compare);
-
        /* Does the inode have space for EA? */
        if (inode->i_extra_isize < sizeof(inode->i_extra_isize) ||
-           EXT2_INODE_SIZE(handle->fs->super) <= EXT2_GOOD_OLD_INODE_SIZE +
-                                                 inode->i_extra_isize +
-                                                 sizeof(__u32))
+           inode_size <= EXT2_GOOD_OLD_INODE_SIZE + inode->i_extra_isize +
+                                                               sizeof(__u32))
                goto write_ea_block;
 
        /* Write the inode EA */
        ea_inode_magic = EXT2_EXT_ATTR_MAGIC;
        memcpy(((char *) inode) + EXT2_GOOD_OLD_INODE_SIZE +
               inode->i_extra_isize, &ea_inode_magic, sizeof(__u32));
-       storage_size = EXT2_INODE_SIZE(handle->fs->super) -
-               EXT2_GOOD_OLD_INODE_SIZE - inode->i_extra_isize -
-               sizeof(__u32);
+       storage_size = inode_size - EXT2_GOOD_OLD_INODE_SIZE -
+                               inode->i_extra_isize - sizeof(__u32);
        start = ((char *) inode) + EXT2_GOOD_OLD_INODE_SIZE +
-               inode->i_extra_isize + sizeof(__u32);
+                               inode->i_extra_isize + sizeof(__u32);
 
-       err = write_xattrs_to_buffer(handle, &x, start, storage_size, 0, 0);
+       err = write_xattrs_to_buffer(fs, handle->attrs, handle->ibody_count,
+                                    start, storage_size, 0, 0);
        if (err)
                goto out;
-
 write_ea_block:
        /* Are we done? */
-       if (x >= handle->attrs + handle->count)
+       if (handle->ibody_count == handle->count &&
+           !ext2fs_file_acl_block(fs, EXT2_INODE(inode)))
                goto skip_ea_block;
 
        /* Write the EA block */
-       err = ext2fs_get_memzero(handle->fs->blocksize, &block_buf);
+       err = ext2fs_get_memzero(fs->blocksize, &block_buf);
        if (err)
                goto out;
 
-       storage_size = handle->fs->blocksize -
-               sizeof(struct ext2_ext_attr_header);
+       storage_size = fs->blocksize - sizeof(struct ext2_ext_attr_header);
        start = block_buf + sizeof(struct ext2_ext_attr_header);
 
-       err = write_xattrs_to_buffer(handle, &x, start, storage_size,
-                                    start - block_buf, 1);
+       err = write_xattrs_to_buffer(fs, handle->attrs + handle->ibody_count,
+                                    handle->count - handle->ibody_count, start,
+                                    storage_size, start - block_buf, 1);
        if (err)
                goto out2;
 
-       if (x < handle->attrs + handle->length) {
-               err = EXT2_ET_EA_NO_SPACE;
-               goto out2;
-       }
-
        /* Write a header on the EA block */
        header = (struct ext2_ext_attr_header *) block_buf;
        header->h_magic = EXT2_EXT_ATTR_MAGIC;
@@ -750,31 +779,28 @@ write_ea_block:
        header->h_blocks = 1;
 
        /* Get a new block for writing */
-       err = prep_ea_block_for_write(handle->fs, handle->ino, inode);
+       err = prep_ea_block_for_write(fs, handle->ino, inode);
        if (err)
                goto out2;
 
        /* Finally, write the new EA block */
-       blk = ext2fs_file_acl_block(handle->fs,
-                                   (struct ext2_inode *)inode);
-       err = ext2fs_write_ext_attr3(handle->fs, blk, block_buf,
-                                    handle->ino);
+       blk = ext2fs_file_acl_block(fs, EXT2_INODE(inode));
+       err = ext2fs_write_ext_attr3(fs, blk, block_buf, handle->ino);
        if (err)
                goto out2;
 
 skip_ea_block:
-       blk = ext2fs_file_acl_block(handle->fs, (struct ext2_inode *)inode);
+       blk = ext2fs_file_acl_block(fs, (struct ext2_inode *)inode);
        if (!block_buf && blk) {
                /* xattrs shrunk, free the block */
-               err = ext2fs_free_ext_attr(handle->fs, handle->ino, inode);
+               err = ext2fs_free_ext_attr(fs, handle->ino, inode);
                if (err)
                        goto out;
        }
 
        /* Write the inode */
-       err = ext2fs_write_inode_full(handle->fs, handle->ino,
-                                     (struct ext2_inode *)inode,
-                                     EXT2_INODE_SIZE(handle->fs->super));
+       err = ext2fs_write_inode_full(fs, handle->ino, EXT2_INODE(inode),
+                                     inode_size);
        if (err)
                goto out2;
 
@@ -782,15 +808,14 @@ out2:
        ext2fs_free_mem(&block_buf);
 out:
        ext2fs_free_mem(&inode);
-       handle->dirty = 0;
        return err;
 }
 
 static errcode_t read_xattrs_from_buffer(struct ext2_xattr_handle *handle,
+                                        struct ext2_inode_large *inode,
                                         struct ext2_ext_attr_entry *entries,
                                         unsigned int storage_size,
-                                        char *value_start,
-                                        size_t *nr_read)
+                                        char *value_start)
 {
        struct ext2_xattr *x;
        struct ext2_ext_attr_entry *entry, *end;
@@ -800,10 +825,6 @@ static errcode_t read_xattrs_from_buffer(struct ext2_xattr_handle *handle,
        unsigned int values_size = storage_size +
                        ((char *)entries - value_start);
 
-       x = handle->attrs;
-       while (x->name)
-               x++;
-
        /* find the end */
        end = entries;
        remain = storage_size;
@@ -826,48 +847,23 @@ static errcode_t read_xattrs_from_buffer(struct ext2_xattr_handle *handle,
        remain = storage_size;
        while (remain >= sizeof(struct ext2_ext_attr_entry) &&
               !EXT2_EXT_IS_LAST_ENTRY(entry)) {
-               __u32 hash;
-
-               /* header eats this space */
-               remain -= sizeof(struct ext2_ext_attr_entry);
-
-               /* attribute len eats this space */
-               remain -= EXT2_EXT_ATTR_SIZE(entry->e_name_len);
-
-               /* check value size */
-               if (entry->e_value_size > remain)
-                       return EXT2_ET_EA_BAD_VALUE_SIZE;
-
-               if (entry->e_value_offs + entry->e_value_size > values_size)
-                       return EXT2_ET_EA_BAD_VALUE_OFFSET;
-
-               if (entry->e_value_size > 0 &&
-                   value_start + entry->e_value_offs <
-                   (char *)end + sizeof(__u32))
-                       return EXT2_ET_EA_BAD_VALUE_OFFSET;
-
-               /* e_value_block must be 0 in inode's ea */
-               if (entry->e_value_block != 0)
-                       return EXT2_ET_BAD_EA_BLOCK_NUM;
-
-               hash = ext2fs_ext_attr_hash_entry(entry, value_start +
-                                                        entry->e_value_offs);
-
-               /* e_hash may be 0 in older inode's ea */
-               if (entry->e_hash != 0 && entry->e_hash != hash)
-                       return EXT2_ET_BAD_EA_HASH;
-
-               remain -= entry->e_value_size;
 
                /* Allocate space for more attrs? */
-               if (x == handle->attrs + handle->length) {
+               if (handle->count == handle->capacity) {
                        err = ext2fs_xattrs_expand(handle, 4);
                        if (err)
                                return err;
-                       x = handle->attrs + handle->length - 4;
                }
 
-               /* Extract name/value */
+               x = handle->attrs + handle->count;
+
+               /* header eats this space */
+               remain -= sizeof(struct ext2_ext_attr_entry);
+
+               /* attribute len eats this space */
+               remain -= EXT2_EXT_ATTR_SIZE(entry->e_name_len);
+
+               /* Extract name */
                prefix = find_ea_prefix(entry->e_name_index);
                prefix_len = (prefix ? strlen(prefix) : 0);
                err = ext2fs_get_memzero(entry->e_name_len + prefix_len + 1,
@@ -881,14 +877,96 @@ static errcode_t read_xattrs_from_buffer(struct ext2_xattr_handle *handle,
                               (char *)entry + sizeof(*entry),
                               entry->e_name_len);
 
-               err = ext2fs_get_mem(entry->e_value_size, &x->value);
-               if (err)
-                       return err;
+               /* Check & copy value */
+               if (!ext2fs_has_feature_ea_inode(handle->fs->super) &&
+                   entry->e_value_inum != 0)
+                       return EXT2_ET_BAD_EA_BLOCK_NUM;
+
+               if (entry->e_value_inum == 0) {
+                       if (entry->e_value_size > remain)
+                               return EXT2_ET_EA_BAD_VALUE_SIZE;
+
+                       if (entry->e_value_offs + entry->e_value_size > values_size)
+                               return EXT2_ET_EA_BAD_VALUE_OFFSET;
+
+                       if (entry->e_value_size > 0 &&
+                           value_start + entry->e_value_offs <
+                           (char *)end + sizeof(__u32))
+                               return EXT2_ET_EA_BAD_VALUE_OFFSET;
+
+                       remain -= entry->e_value_size;
+
+                       err = ext2fs_get_mem(entry->e_value_size, &x->value);
+                       if (err)
+                               return err;
+                       memcpy(x->value, value_start + entry->e_value_offs,
+                              entry->e_value_size);
+               } else {
+                       struct ext2_inode *ea_inode;
+                       ext2_file_t ea_file;
+
+                       if (entry->e_value_offs != 0)
+                               return EXT2_ET_EA_BAD_VALUE_OFFSET;
+
+                       if (entry->e_value_size > (64 * 1024))
+                               return EXT2_ET_EA_BAD_VALUE_SIZE;
+
+                       err = ext2fs_get_mem(entry->e_value_size, &x->value);
+                       if (err)
+                               return err;
+
+                       err = ext2fs_file_open(handle->fs, entry->e_value_inum,
+                                              0, &ea_file);
+                       if (err)
+                               return err;
+
+                       ea_inode = ext2fs_file_get_inode(ea_file);
+                       if ((ea_inode->i_flags & EXT4_INLINE_DATA_FL) ||
+                           !(ea_inode->i_flags & EXT4_EA_INODE_FL) ||
+                           ea_inode->i_links_count == 0)
+                               err = EXT2_ET_EA_INODE_CORRUPTED;
+                       else if ((__u64) ext2fs_file_get_size(ea_file) !=
+                                entry->e_value_size)
+                               err = EXT2_ET_EA_BAD_VALUE_SIZE;
+                       else
+                               err = ext2fs_file_read(ea_file, x->value,
+                                                      entry->e_value_size, 0);
+                       ext2fs_file_close(ea_file);
+                       if (err)
+                               return err;
+               }
+
+               x->ea_ino = entry->e_value_inum;
                x->value_len = entry->e_value_size;
-               memcpy(x->value, value_start + entry->e_value_offs,
-                      entry->e_value_size);
-               x++;
-               (*nr_read)++;
+
+               /* e_hash may be 0 in older inode's ea */
+               if (entry->e_hash != 0) {
+                       __u32 hash;
+                       void *data = (entry->e_value_inum != 0) ?
+                                       0 : value_start + entry->e_value_offs;
+
+                       err = ext2fs_ext_attr_hash_entry2(handle->fs, entry,
+                                                         data, &hash);
+                       if (err)
+                               return err;
+                       if (entry->e_hash != hash) {
+                               struct ext2_inode child;
+
+                               /* Check whether this is an old Lustre-style
+                                * ea_inode reference.
+                                */
+                               err = ext2fs_read_inode(handle->fs,
+                                                       entry->e_value_inum,
+                                                       &child);
+                               if (err)
+                                       return err;
+                               if (child.i_mtime != handle->ino ||
+                                   child.i_generation != inode->i_generation)
+                                       return EXT2_ET_BAD_EA_HASH;
+                       }
+               }
+
+               handle->count++;
                entry = EXT2_EXT_ATTR_NEXT(entry);
        }
 
@@ -898,15 +976,16 @@ static errcode_t read_xattrs_from_buffer(struct ext2_xattr_handle *handle,
 static void xattrs_free_keys(struct ext2_xattr_handle *h)
 {
        struct ext2_xattr *a = h->attrs;
-       size_t i;
+       int i;
 
-       for (i = 0; i < h->length; i++) {
+       for (i = 0; i < h->capacity; i++) {
                if (a[i].name)
                        ext2fs_free_mem(&a[i].name);
                if (a[i].value)
                        ext2fs_free_mem(&a[i].value);
        }
        h->count = 0;
+       h->ibody_count = 0;
 }
 
 errcode_t ext2fs_xattrs_read(struct ext2_xattr_handle *handle)
@@ -957,11 +1036,13 @@ errcode_t ext2fs_xattrs_read(struct ext2_xattr_handle *handle)
                start = ((char *) inode) + EXT2_GOOD_OLD_INODE_SIZE +
                        inode->i_extra_isize + sizeof(__u32);
 
-               err = read_xattrs_from_buffer(handle,
-                       (struct ext2_ext_attr_entry *) start, storage_size,
-                                             start, &handle->count);
+               err = read_xattrs_from_buffer(handle, inode,
+                                       (struct ext2_ext_attr_entry *) start,
+                                       storage_size, start);
                if (err)
                        goto out;
+
+               handle->ibody_count = handle->count;
        }
 
 read_ea_block:
@@ -994,9 +1075,9 @@ read_ea_block:
                storage_size = handle->fs->blocksize -
                        sizeof(struct ext2_ext_attr_header);
                start = block_buf + sizeof(struct ext2_ext_attr_header);
-               err = read_xattrs_from_buffer(handle,
-                       (struct ext2_ext_attr_entry *) start, storage_size,
-                                             block_buf, &handle->count);
+               err = read_xattrs_from_buffer(handle, inode,
+                                       (struct ext2_ext_attr_entry *) start,
+                                       storage_size, block_buf);
                if (err)
                        goto out3;
 
@@ -1020,20 +1101,20 @@ errcode_t ext2fs_xattrs_iterate(struct ext2_xattr_handle *h,
                                void *data)
 {
        struct ext2_xattr *x;
+       int dirty = 0;
        int ret;
 
        EXT2_CHECK_MAGIC(h, EXT2_ET_MAGIC_EA_HANDLE);
-       for (x = h->attrs; x < h->attrs + h->length; x++) {
-               if (!x->name)
-                       continue;
-
+       for (x = h->attrs; x < h->attrs + h->count; x++) {
                ret = func(x->name, x->value, x->value_len, data);
                if (ret & XATTR_CHANGED)
-                       h->dirty = 1;
+                       dirty = 1;
                if (ret & XATTR_ABORT)
-                       return 0;
+                       break;
        }
 
+       if (dirty)
+               return ext2fs_xattrs_write(h);
        return 0;
 }
 
@@ -1045,8 +1126,8 @@ errcode_t ext2fs_xattr_get(struct ext2_xattr_handle *h, const char *key,
        errcode_t err;
 
        EXT2_CHECK_MAGIC(h, EXT2_ET_MAGIC_EA_HANDLE);
-       for (x = h->attrs; x < h->attrs + h->length; x++) {
-               if (!x->name || strcmp(x->name, key))
+       for (x = h->attrs; x < h->attrs + h->count; x++) {
+               if (strcmp(x->name, key))
                        continue;
 
                if (!(h->flags & XATTR_HANDLE_FLAG_RAW) &&
@@ -1109,7 +1190,7 @@ errcode_t ext2fs_xattr_inode_max_size(ext2_filsys fs, ext2_ino_t ino,
                        inode->i_extra_isize + sizeof(__u32);
                entry = (struct ext2_ext_attr_entry *) start;
                while (!EXT2_EXT_IS_LAST_ENTRY(entry)) {
-                       if (!entry->e_value_block && entry->e_value_size) {
+                       if (!entry->e_value_inum && entry->e_value_size) {
                                unsigned int offs = entry->e_value_offs;
                                if (offs < minoff)
                                        minoff = offs;
@@ -1129,101 +1210,450 @@ out:
        return err;
 }
 
-errcode_t ext2fs_xattr_set(struct ext2_xattr_handle *handle,
-                          const char *key,
-                          const void *value,
-                          size_t value_len)
+static errcode_t xattr_create_ea_inode(ext2_filsys fs, const void *value,
+                                      size_t value_len, ext2_ino_t *ea_ino)
 {
-       struct ext2_xattr *x, *last_empty;
-       char *new_value;
-       errcode_t err;
+       struct ext2_inode inode;
+       ext2_ino_t ino;
+       ext2_file_t file;
+       __u32 hash;
+       errcode_t ret;
+
+       ret = ext2fs_new_inode(fs, 0, 0, 0, &ino);
+       if (ret)
+               return ret;
+
+       memset(&inode, 0, sizeof(inode));
+       inode.i_flags |= EXT4_EA_INODE_FL;
+       if (ext2fs_has_feature_extents(fs->super))
+               inode.i_flags |= EXT4_EXTENTS_FL;
+       inode.i_size = 0;
+       inode.i_mode = LINUX_S_IFREG | 0600;
+       inode.i_links_count = 1;
+       ret = ext2fs_write_new_inode(fs, ino, &inode);
+       if (ret)
+               return ret;
+       /*
+        * ref_count and hash utilize inode's i_*time fields.
+        * ext2fs_write_new_inode() call above initializes these fields with
+        * current time. That's why ref count and hash updates are done
+        * separately below.
+        */
+       ext2fs_set_ea_inode_ref(&inode, 1);
+       hash = ext2fs_crc32c_le(fs->csum_seed, value, value_len);
+       ext2fs_set_ea_inode_hash(&inode, hash);
 
-       EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EA_HANDLE);
-       last_empty = NULL;
+       ret = ext2fs_write_inode(fs, ino, &inode);
+       if (ret)
+               return ret;
 
-       err = ext2fs_get_mem(value_len, &new_value);
-       if (err)
-               return err;
-       if (!(handle->flags & XATTR_HANDLE_FLAG_RAW) &&
-           ((strcmp(key, "system.posix_acl_default") == 0) ||
-            (strcmp(key, "system.posix_acl_access") == 0))) {
-               err = convert_posix_acl_to_disk_buffer(value, value_len,
-                                                      new_value, &value_len);
-               if (err)
-                       goto errout;
-       } else
-               memcpy(new_value, value, value_len);
+       ret = ext2fs_file_open(fs, ino, EXT2_FILE_WRITE, &file);
+       if (ret)
+               return ret;
+       ret = ext2fs_file_write(file, value, value_len, NULL);
+       ext2fs_file_close(file);
+       if (ret)
+               return ret;
+
+       ext2fs_inode_alloc_stats2(fs, ino, 1 /* inuse */, 0 /* isdir */);
+
+       *ea_ino = ino;
+       return 0;
+}
+
+static errcode_t xattr_inode_dec_ref(ext2_filsys fs, ext2_ino_t ino)
+{
+       struct ext2_inode_large inode;
+       __u64 ref_count;
+       errcode_t ret;
+
+       ret = ext2fs_read_inode_full(fs, ino, (struct ext2_inode *)&inode,
+                                    sizeof(inode));
+       if (ret)
+               goto out;
+
+       ref_count = ext2fs_get_ea_inode_ref(EXT2_INODE(&inode));
+       ref_count--;
+       ext2fs_set_ea_inode_ref(EXT2_INODE(&inode), ref_count);
+
+       if (ref_count)
+               goto write_out;
 
-       for (x = handle->attrs; x < handle->attrs + handle->length; x++) {
-               if (!x->name) {
-                       last_empty = x;
+       inode.i_links_count = 0;
+       inode.i_dtime = fs->now ? fs->now : time(0);
+
+       ret = ext2fs_free_ext_attr(fs, ino, &inode);
+       if (ret)
+               goto write_out;
+
+       if (ext2fs_inode_has_valid_blocks2(fs, (struct ext2_inode *)&inode)) {
+               ret = ext2fs_punch(fs, ino, (struct ext2_inode *)&inode, NULL,
+                                  0, ~0ULL);
+               if (ret)
+                       goto out;
+       }
+
+       ext2fs_inode_alloc_stats2(fs, ino, -1 /* inuse */, 0 /* is_dir */);
+
+write_out:
+       ret = ext2fs_write_inode_full(fs, ino, (struct ext2_inode *)&inode,
+                                     sizeof(inode));
+out:
+       return ret;
+}
+
+static errcode_t xattr_update_entry(ext2_filsys fs, struct ext2_xattr *x,
+                                   const char *name, const void *value,
+                                   size_t value_len, int in_inode)
+{
+       ext2_ino_t ea_ino = 0;
+       void *new_value = NULL;
+       char *new_name = NULL;
+       int name_len;
+       errcode_t ret;
+
+       if (!x->name) {
+               name_len = strlen(name);
+               ret = ext2fs_get_mem(name_len + 1, &new_name);
+               if (ret)
+                       goto fail;
+               memcpy(new_name, name, name_len + 1);
+       }
+
+       ret = ext2fs_get_mem(value_len, &new_value);
+       if (ret)
+               goto fail;
+       memcpy(new_value, value, value_len);
+
+       if (in_inode) {
+               ret = xattr_create_ea_inode(fs, value, value_len, &ea_ino);
+               if (ret)
+                       goto fail;
+       }
+
+       if (x->ea_ino) {
+               ret = xattr_inode_dec_ref(fs, x->ea_ino);
+               if (ret)
+                       goto fail;
+       }
+
+       if (!x->name)
+               x->name = new_name;
+
+       if (x->value)
+               ext2fs_free_mem(&x->value);
+       x->value = new_value;
+       x->value_len = value_len;
+       x->ea_ino = ea_ino;
+       return 0;
+fail:
+       if (new_name)
+               ext2fs_free_mem(&new_name);
+       if (new_value)
+               ext2fs_free_mem(&new_value);
+       if (ea_ino)
+               xattr_inode_dec_ref(fs, ea_ino);
+       return ret;
+}
+
+static int xattr_find_position(struct ext2_xattr *attrs, int count,
+                              const char *name)
+{
+       struct ext2_xattr *x;
+       int i;
+       const char *shortname, *x_shortname;
+       int name_idx, x_name_idx;
+       int shortname_len, x_shortname_len;
+
+       find_ea_index(name, &shortname, &name_idx);
+       shortname_len = strlen(shortname);
+
+       for (i = 0, x = attrs; i < count; i++, x++) {
+               find_ea_index(x->name, &x_shortname, &x_name_idx);
+               if (name_idx < x_name_idx)
+                       break;
+               if (name_idx > x_name_idx)
                        continue;
+
+               x_shortname_len = strlen(x_shortname);
+               if (shortname_len < x_shortname_len)
+                       break;
+               if (shortname_len > x_shortname_len)
+                       continue;
+
+               if (memcmp(shortname, x_shortname, shortname_len) <= 0)
+                       break;
+       }
+       return i;
+}
+
+static errcode_t xattr_array_update(struct ext2_xattr_handle *h,
+                                   const char *name,
+                                   const void *value, size_t value_len,
+                                   int ibody_free, int block_free,
+                                   int old_idx, int in_inode)
+{
+       struct ext2_xattr tmp;
+       int add_to_ibody;
+       int needed;
+       int name_len, name_idx;
+       const char *shortname;
+       int new_idx;
+       int ret;
+
+       find_ea_index(name, &shortname, &name_idx);
+       name_len = strlen(shortname);
+
+       needed = EXT2_EXT_ATTR_LEN(name_len);
+       if (!in_inode)
+               needed += EXT2_EXT_ATTR_SIZE(value_len);
+
+       if (old_idx >= 0 && old_idx < h->ibody_count) {
+               ibody_free += EXT2_EXT_ATTR_LEN(name_len);
+               if (!h->attrs[old_idx].ea_ino)
+                       ibody_free += EXT2_EXT_ATTR_SIZE(
+                                               h->attrs[old_idx].value_len);
+       }
+
+       if (needed <= ibody_free) {
+               if (old_idx < 0) {
+                       new_idx = h->ibody_count;
+                       add_to_ibody = 1;
+                       goto add_new;
                }
 
-               /* Replace xattr */
-               if (strcmp(x->name, key) == 0) {
-                       ext2fs_free_mem(&x->value);
-                       x->value = new_value;
-                       x->value_len = value_len;
-                       handle->dirty = 1;
-                       return 0;
+               /* Update the existing entry. */
+               ret = xattr_update_entry(h->fs, &h->attrs[old_idx], name,
+                                        value, value_len, in_inode);
+               if (ret)
+                       return ret;
+               if (h->ibody_count <= old_idx) {
+                       /* Move entry from block to the end of ibody. */
+                       tmp = h->attrs[old_idx];
+                       memmove(h->attrs + h->ibody_count + 1,
+                               h->attrs + h->ibody_count,
+                               (old_idx - h->ibody_count) * sizeof(*h->attrs));
+                       h->attrs[h->ibody_count] = tmp;
+                       h->ibody_count++;
                }
+               return 0;
        }
 
-       /* Add attr to empty slot */
-       if (last_empty) {
-               err = ext2fs_get_mem(strlen(key) + 1, &last_empty->name);
-               if (err)
-                       goto errout;
-               strcpy(last_empty->name, key);
-               last_empty->value = new_value;
-               last_empty->value_len = value_len;
-               handle->dirty = 1;
-               handle->count++;
+       if (h->ibody_count <= old_idx) {
+               block_free += EXT2_EXT_ATTR_LEN(name_len);
+               if (!h->attrs[old_idx].ea_ino)
+                       block_free +=
+                               EXT2_EXT_ATTR_SIZE(h->attrs[old_idx].value_len);
+       }
+
+       if (needed > block_free)
+               return EXT2_ET_EA_NO_SPACE;
+
+       if (old_idx >= 0) {
+               /* Update the existing entry. */
+               ret = xattr_update_entry(h->fs, &h->attrs[old_idx], name,
+                                        value, value_len, in_inode);
+               if (ret)
+                       return ret;
+               if (old_idx < h->ibody_count) {
+                       /*
+                        * Move entry from ibody to the block. Note that
+                        * entries in the block are sorted.
+                        */
+                       new_idx = xattr_find_position(h->attrs + h->ibody_count,
+                               h->count - h->ibody_count, name);
+                       new_idx += h->ibody_count - 1;
+                       tmp = h->attrs[old_idx];
+                       memmove(h->attrs + old_idx, h->attrs + old_idx + 1,
+                               (new_idx - old_idx) * sizeof(*h->attrs));
+                       h->attrs[new_idx] = tmp;
+                       h->ibody_count--;
+               }
                return 0;
        }
 
-       /* Expand array, append slot */
-       err = ext2fs_xattrs_expand(handle, 4);
-       if (err)
-               goto errout;
+       new_idx = xattr_find_position(h->attrs + h->ibody_count,
+                                     h->count - h->ibody_count, name);
+       new_idx += h->ibody_count;
+       add_to_ibody = 0;
 
-       x = handle->attrs + handle->length - 4;
-       err = ext2fs_get_mem(strlen(key) + 1, &x->name);
-       if (err)
-               goto errout;
-       strcpy(x->name, key);
+add_new:
+       if (h->count == h->capacity) {
+               ret = ext2fs_xattrs_expand(h, 4);
+               if (ret)
+                       return ret;
+       }
 
-       err = ext2fs_get_mem(value_len, &x->value);
-       if (err)
-               goto errout;
-       memcpy(x->value, value, value_len);
-       x->value_len = value_len;
-       handle->dirty = 1;
-       handle->count++;
+       ret = xattr_update_entry(h->fs, &h->attrs[h->count], name, value,
+                                value_len, in_inode);
+       if (ret)
+               return ret;
+
+       tmp = h->attrs[h->count];
+       memmove(h->attrs + new_idx + 1, h->attrs + new_idx,
+               (h->count - new_idx)*sizeof(*h->attrs));
+       h->attrs[new_idx] = tmp;
+       if (add_to_ibody)
+               h->ibody_count++;
+       h->count++;
        return 0;
-errout:
+}
+
+static int space_used(struct ext2_xattr *attrs, int count)
+{
+       int total = 0;
+       struct ext2_xattr *x;
+       const char *shortname;
+       int i, len, name_idx;
+
+       for (i = 0, x = attrs; i < count; i++, x++) {
+               find_ea_index(x->name, &shortname, &name_idx);
+               len = strlen(shortname);
+               total += EXT2_EXT_ATTR_LEN(len);
+               if (!x->ea_ino)
+                       total += EXT2_EXT_ATTR_SIZE(x->value_len);
+       }
+       return total;
+}
+
+/*
+ * The minimum size of EA value when you start storing it in an external inode
+ * size of block - size of header - size of 1 entry - 4 null bytes
+ */
+#define EXT4_XATTR_MIN_LARGE_EA_SIZE(b)        \
+       ((b) - EXT2_EXT_ATTR_LEN(3) - sizeof(struct ext2_ext_attr_header) - 4)
+
+errcode_t ext2fs_xattr_set(struct ext2_xattr_handle *h,
+                          const char *name,
+                          const void *value,
+                          size_t value_len)
+{
+       ext2_filsys fs = h->fs;
+       const int inode_size = EXT2_INODE_SIZE(fs->super);
+       struct ext2_inode_large *inode = NULL;
+       struct ext2_xattr *x;
+       char *new_value;
+       int ibody_free, block_free;
+       int in_inode = 0;
+       int old_idx = -1;
+       int extra_isize;
+       errcode_t ret;
+
+       EXT2_CHECK_MAGIC(h, EXT2_ET_MAGIC_EA_HANDLE);
+
+       ret = ext2fs_get_mem(value_len, &new_value);
+       if (ret)
+               return ret;
+       if (!(h->flags & XATTR_HANDLE_FLAG_RAW) &&
+           ((strcmp(name, "system.posix_acl_default") == 0) ||
+            (strcmp(name, "system.posix_acl_access") == 0))) {
+               ret = convert_posix_acl_to_disk_buffer(value, value_len,
+                                                      new_value, &value_len);
+               if (ret)
+                       goto out;
+       } else if (value_len)
+               memcpy(new_value, value, value_len);
+
+       /* Imitate kernel behavior by skipping update if value is the same. */
+       for (x = h->attrs; x < h->attrs + h->count; x++) {
+               if (!strcmp(x->name, name)) {
+                       if (!x->ea_ino && x->value_len == value_len &&
+                           (!value_len ||
+                            !memcmp(x->value, new_value, value_len))) {
+                               ret = 0;
+                               goto out;
+                       }
+                       old_idx = x - h->attrs;
+                       break;
+               }
+       }
+
+       ret = ext2fs_get_memzero(inode_size, &inode);
+       if (ret)
+               goto out;
+       ret = ext2fs_read_inode_full(fs, h->ino,
+                                    (struct ext2_inode *)inode,
+                                    inode_size);
+       if (ret)
+               goto out;
+       if (inode_size > EXT2_GOOD_OLD_INODE_SIZE) {
+               extra_isize = inode->i_extra_isize;
+               if (extra_isize == 0) {
+                       extra_isize = fs->super->s_want_extra_isize;
+                       if (extra_isize == 0)
+                               extra_isize = sizeof(__u32);
+               }
+               ibody_free = inode_size - EXT2_GOOD_OLD_INODE_SIZE;
+               ibody_free -= extra_isize;
+               /* Extended attribute magic and final null entry. */
+               ibody_free -= sizeof(__u32) * 2;
+               ibody_free -= space_used(h->attrs, h->ibody_count);
+       } else
+               ibody_free = 0;
+
+       /* Inline data can only go to ibody. */
+       if (strcmp(name, "system.data") == 0) {
+               if (h->ibody_count <= old_idx) {
+                       ret = EXT2_ET_FILESYSTEM_CORRUPTED;
+                       goto out;
+               }
+               ret = xattr_array_update(h, name, new_value, value_len,
+                                        ibody_free,
+                                        0 /* block_free */, old_idx,
+                                        0 /* in_inode */);
+               if (ret)
+                       goto out;
+               goto write_out;
+       }
+
+       block_free = fs->blocksize;
+       block_free -= sizeof(struct ext2_ext_attr_header);
+       /* Final null entry. */
+       block_free -= sizeof(__u32);
+       block_free -= space_used(h->attrs + h->ibody_count,
+                                h->count - h->ibody_count);
+
+       if (ext2fs_has_feature_ea_inode(fs->super) &&
+           value_len > EXT4_XATTR_MIN_LARGE_EA_SIZE(fs->blocksize))
+               in_inode = 1;
+
+       ret = xattr_array_update(h, name, new_value, value_len, ibody_free,
+                                block_free, old_idx, in_inode);
+       if (ret == EXT2_ET_EA_NO_SPACE && !in_inode &&
+           ext2fs_has_feature_ea_inode(fs->super))
+               ret = xattr_array_update(h, name, new_value, value_len,
+                       ibody_free, block_free, old_idx, 1 /* in_inode */);
+       if (ret)
+               goto out;
+
+write_out:
+       ret = ext2fs_xattrs_write(h);
+out:
+       if (inode)
+               ext2fs_free_mem(&inode);
        ext2fs_free_mem(&new_value);
-       return err;
+       return ret;
 }
 
 errcode_t ext2fs_xattr_remove(struct ext2_xattr_handle *handle,
                              const char *key)
 {
        struct ext2_xattr *x;
+       struct ext2_xattr *end = handle->attrs + handle->count;
 
        EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EA_HANDLE);
-       for (x = handle->attrs; x < handle->attrs + handle->length; x++) {
-               if (!x->name)
-                       continue;
-
+       for (x = handle->attrs; x < end; x++) {
                if (strcmp(x->name, key) == 0) {
                        ext2fs_free_mem(&x->name);
                        ext2fs_free_mem(&x->value);
-                       x->value_len = 0;
-                       handle->dirty = 1;
+                       if (x->ea_ino)
+                               xattr_inode_dec_ref(handle->fs, x->ea_ino);
+                       memmove(x, x + 1, (end - x - 1)*sizeof(*x));
+                       memset(end - 1, 0, sizeof(*end));
+                       if (x < handle->attrs + handle->ibody_count)
+                               handle->ibody_count--;
                        handle->count--;
-                       return 0;
+                       return ext2fs_xattrs_write(handle);
                }
        }
 
@@ -1246,8 +1676,8 @@ errcode_t ext2fs_xattrs_open(ext2_filsys fs, ext2_ino_t ino,
                return err;
 
        h->magic = EXT2_ET_MAGIC_EA_HANDLE;
-       h->length = 4;
-       err = ext2fs_get_arrayzero(h->length, sizeof(struct ext2_xattr),
+       h->capacity = 4;
+       err = ext2fs_get_arrayzero(h->capacity, sizeof(struct ext2_xattr),
                                   &h->attrs);
        if (err) {
                ext2fs_free_mem(&h);
@@ -1263,15 +1693,8 @@ errcode_t ext2fs_xattrs_open(ext2_filsys fs, ext2_ino_t ino,
 errcode_t ext2fs_xattrs_close(struct ext2_xattr_handle **handle)
 {
        struct ext2_xattr_handle *h = *handle;
-       errcode_t err;
 
        EXT2_CHECK_MAGIC(h, EXT2_ET_MAGIC_EA_HANDLE);
-       if (h->dirty) {
-               err = ext2fs_xattrs_write(h);
-               if (err)
-                       return err;
-       }
-
        xattrs_free_keys(h);
        ext2fs_free_mem(&h->attrs);
        ext2fs_free_mem(handle);
index a9cdae7..bde6b0f 100644 (file)
@@ -1737,6 +1737,118 @@ size_t ext2fs_max_extent_depth(ext2_extent_handle_t handle)
        return last_result;
 }
 
+errcode_t ext2fs_fix_extents_checksums(ext2_filsys fs, ext2_ino_t ino,
+                                      struct ext2_inode *inode)
+{
+       ext2_extent_handle_t    handle;
+       struct ext2fs_extent    extent;
+       errcode_t               errcode;
+       int                     save_flags = fs->flags;
+
+       if (!ext2fs_has_feature_metadata_csum(fs->super) ||
+           (inode && !(inode->i_flags & EXT4_EXTENTS_FL)))
+               return 0;
+
+       errcode = ext2fs_extent_open2(fs, ino, inode, &handle);
+       if (errcode) {
+               if (errcode == EXT2_ET_INODE_NOT_EXTENT)
+                       errcode = 0;
+               return errcode;
+       }
+
+       fs->flags &= ~EXT2_FLAG_IGNORE_CSUM_ERRORS;
+       errcode = ext2fs_extent_get(handle, EXT2_EXTENT_ROOT, &extent);
+       if (errcode)
+               goto out;
+
+       do {
+               /* Skip to the end of a block of leaf nodes */
+               if (extent.e_flags & EXT2_EXTENT_FLAGS_LEAF) {
+                       errcode = ext2fs_extent_get(handle,
+                                                   EXT2_EXTENT_LAST_SIB,
+                                                   &extent);
+                       if (errcode)
+                               break;
+               }
+
+               errcode = ext2fs_extent_get(handle, EXT2_EXTENT_NEXT, &extent);
+               if (errcode == EXT2_ET_EXTENT_CSUM_INVALID)
+                       errcode = update_path(handle);
+       } while (errcode == 0);
+
+out:
+       /* Ok if we run off the end */
+       if (errcode == EXT2_ET_EXTENT_NO_NEXT)
+               errcode = 0;
+       ext2fs_extent_free(handle);
+       fs->flags = save_flags;
+       return errcode;
+}
+
+errcode_t ext2fs_decode_extent(struct ext2fs_extent *to, void *addr, int len)
+{
+       struct ext3_extent *from = (struct ext3_extent *)addr;
+
+       if (len != sizeof(struct ext3_extent))
+               return EXT2_ET_INVALID_ARGUMENT;
+
+       to->e_pblk = ext2fs_le32_to_cpu(from->ee_start) +
+               ((__u64) ext2fs_le16_to_cpu(from->ee_start_hi)
+                       << 32);
+       to->e_lblk = ext2fs_le32_to_cpu(from->ee_block);
+       to->e_len = ext2fs_le16_to_cpu(from->ee_len);
+       to->e_flags |= EXT2_EXTENT_FLAGS_LEAF;
+       if (to->e_len > EXT_INIT_MAX_LEN) {
+               to->e_len -= EXT_INIT_MAX_LEN;
+               to->e_flags |= EXT2_EXTENT_FLAGS_UNINIT;
+       }
+
+       return 0;
+}
+
+errcode_t ext2fs_count_blocks(ext2_filsys fs, ext2_ino_t ino,
+                             struct ext2_inode *inode, blk64_t *ret_count)
+{
+       ext2_extent_handle_t    handle;
+       struct ext2fs_extent    extent;
+       errcode_t               errcode;
+       int                     i;
+       blk64_t                 blkcount = 0;
+       blk64_t                 *intermediate_nodes;
+
+       errcode = ext2fs_extent_open2(fs, ino, inode, &handle);
+       if (errcode)
+               goto out;
+
+       errcode = ext2fs_extent_get(handle, EXT2_EXTENT_ROOT, &extent);
+       if (errcode)
+               goto out;
+
+       ext2fs_get_array(handle->max_depth, sizeof(blk64_t),
+                               &intermediate_nodes);
+       blkcount = handle->level;
+       while (!errcode) {
+               if (extent.e_flags & EXT2_EXTENT_FLAGS_LEAF) {
+                       blkcount += extent.e_len;
+                       for (i = 0; i < handle->level; i++) {
+                               if (intermediate_nodes[i] !=
+                                       handle->path[i].end_blk) {
+                                       blkcount++;
+                                       intermediate_nodes[i] =
+                                               handle->path[i].end_blk;
+                               }
+                       }
+               }
+               errcode = ext2fs_extent_get(handle, EXT2_EXTENT_NEXT, &extent);
+       }
+       ext2fs_free_mem(&intermediate_nodes);
+out:
+       *ret_count = blkcount;
+       ext2fs_extent_free(handle);
+
+       return 0;
+}
+
 #ifdef DEBUG
 /*
  * Override debugfs's prompt
index 01c709a..5cde7d5 100644 (file)
@@ -726,7 +726,6 @@ start_again:
                left_adjacent = NULL;
        }
        goal = left_extent.e_pblk + (range_start - left_extent.e_lblk);
-       goal_distance = range_start - next;
 
        do {
                err = ext2fs_extent_get(handle, EXT2_EXTENT_NEXT_LEAF,
@@ -749,12 +748,11 @@ start_again:
                        range_end = right_extent.e_lblk - 1;
                        right_adjacent = &right_extent;
                }
+               goal_distance = range_start - next;
                if (err != EXT2_ET_EXTENT_NO_NEXT &&
-                   goal_distance > (range_end - right_extent.e_lblk)) {
+                   goal_distance > (range_end - right_extent.e_lblk))
                        goal = right_extent.e_pblk -
                                        (right_extent.e_lblk - range_start);
-                       goal_distance = range_end - right_extent.e_lblk;
-               }
 
                dbg_printf("%s: ino=%d rstart=%llu rend=%llu\n", __func__, ino,
                           range_start, range_end);
@@ -779,7 +777,6 @@ start_again:
                left_adjacent = &left_extent;
                range_start = next;
                goal = left_extent.e_pblk + (range_start - left_extent.e_lblk);
-               goal_distance = range_start - next;
        } while (range_end < end);
 
 errout:
@@ -808,7 +805,8 @@ errcode_t ext2fs_fallocate(ext2_filsys fs, int flags, ext2_ino_t ino,
                           blk64_t start, blk64_t len)
 {
        struct ext2_inode       inode_buf;
-       blk64_t                 blk, x;
+       blk64_t                 blk, x, zero_blk, last = 0;
+       int                     zero_len = 0;
        errcode_t               err;
 
        if (((flags & EXT2_FALLOCATE_FORCE_INIT) &&
@@ -844,15 +842,32 @@ errcode_t ext2fs_fallocate(ext2_filsys fs, int flags, ext2_ino_t ino,
                if (x)
                        continue;
 
-               err = ext2fs_bmap2(fs, ino, inode, NULL,
-                                  BMAP_ALLOC | BMAP_UNINIT | BMAP_ZERO, blk,
-                                  0, &x);
+               err = ext2fs_bmap2(fs, ino, inode, NULL, BMAP_ALLOC,
+                                  blk, 0, &x);
                if (err)
-                       return err;
+                       goto errout;
+               if ((zero_len && (x != last+1)) ||
+                   (zero_len >= 65536)) {
+                       err = ext2fs_zero_blocks2(fs, zero_blk, zero_len,
+                                                 NULL, NULL);
+                       zero_len = 0;
+                       if (err)
+                               goto errout;
+               }
+               if (zero_len == 0) {
+                       zero_blk = x;
+                       zero_len = 1;
+               } else {
+                       zero_len++;
+               }
+               last = x;
        }
 
 out:
        if (inode == &inode_buf)
                ext2fs_write_inode(fs, ino, inode);
+errout:
+       if (zero_len)
+               ext2fs_zero_blocks2(fs, zero_blk, zero_len, NULL, NULL);
        return err;
 }
diff --git a/lib/ext2fs/fast_commit.h b/lib/ext2fs/fast_commit.h
new file mode 100644 (file)
index 0000000..b83e181
--- /dev/null
@@ -0,0 +1,203 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __FAST_COMMIT_H__
+#define __FAST_COMMIT_H__
+
+#include "jfs_compat.h"
+
+/*
+ * Note this file is present in e2fsprogs/lib/ext2fs/fast_commit.h and
+ * linux/fs/ext4/fast_commit.h. These file should always be byte identical.
+ */
+
+/* Fast commit tags */
+#define EXT4_FC_TAG_ADD_RANGE          0x0001
+#define EXT4_FC_TAG_DEL_RANGE          0x0002
+#define EXT4_FC_TAG_CREAT              0x0003
+#define EXT4_FC_TAG_LINK               0x0004
+#define EXT4_FC_TAG_UNLINK             0x0005
+#define EXT4_FC_TAG_INODE              0x0006
+#define EXT4_FC_TAG_PAD                        0x0007
+#define EXT4_FC_TAG_TAIL               0x0008
+#define EXT4_FC_TAG_HEAD               0x0009
+
+#define EXT4_FC_SUPPORTED_FEATURES     0x0
+
+/* On disk fast commit tlv value structures */
+
+/* Fast commit on disk tag length structure */
+struct ext4_fc_tl {
+       __le16 fc_tag;
+       __le16 fc_len;
+};
+
+/* Value structure for tag EXT4_FC_TAG_HEAD. */
+struct ext4_fc_head {
+       __le32 fc_features;
+       __le32 fc_tid;
+};
+
+/* Value structure for EXT4_FC_TAG_ADD_RANGE. */
+struct ext4_fc_add_range {
+       __le32 fc_ino;
+       __u8 fc_ex[12];
+};
+
+/* Value structure for tag EXT4_FC_TAG_DEL_RANGE. */
+struct ext4_fc_del_range {
+       __le32 fc_ino;
+       __le32 fc_lblk;
+       __le32 fc_len;
+};
+
+/*
+ * This is the value structure for tags EXT4_FC_TAG_CREAT, EXT4_FC_TAG_LINK
+ * and EXT4_FC_TAG_UNLINK.
+ */
+struct ext4_fc_dentry_info {
+       __le32 fc_parent_ino;
+       __le32 fc_ino;
+       __u8 fc_dname[0];
+};
+
+/* Value structure for EXT4_FC_TAG_INODE and EXT4_FC_TAG_INODE_PARTIAL. */
+struct ext4_fc_inode {
+       __le32 fc_ino;
+       __u8 fc_raw_inode[0];
+};
+
+/* Value structure for tag EXT4_FC_TAG_TAIL. */
+struct ext4_fc_tail {
+       __le32 fc_tid;
+       __le32 fc_crc;
+};
+
+/*
+ * Fast commit reason codes
+ */
+enum {
+       /*
+        * Commit status codes:
+        */
+       EXT4_FC_REASON_OK = 0,
+       EXT4_FC_REASON_INELIGIBLE,
+       EXT4_FC_REASON_ALREADY_COMMITTED,
+       EXT4_FC_REASON_FC_START_FAILED,
+       EXT4_FC_REASON_FC_FAILED,
+
+       /*
+        * Fast commit ineligiblity reasons:
+        */
+       EXT4_FC_REASON_XATTR = 0,
+       EXT4_FC_REASON_CROSS_RENAME,
+       EXT4_FC_REASON_JOURNAL_FLAG_CHANGE,
+       EXT4_FC_REASON_NOMEM,
+       EXT4_FC_REASON_SWAP_BOOT,
+       EXT4_FC_REASON_RESIZE,
+       EXT4_FC_REASON_RENAME_DIR,
+       EXT4_FC_REASON_FALLOC_RANGE,
+       EXT4_FC_REASON_INODE_JOURNAL_DATA,
+       EXT4_FC_COMMIT_FAILED,
+       EXT4_FC_REASON_MAX
+};
+
+#ifdef __KERNEL__
+/*
+ * In memory list of dentry updates that are performed on the file
+ * system used by fast commit code.
+ */
+struct ext4_fc_dentry_update {
+       int fcd_op;             /* Type of update create / unlink / link */
+       int fcd_parent;         /* Parent inode number */
+       int fcd_ino;            /* Inode number */
+       struct qstr fcd_name;   /* Dirent name */
+       unsigned char fcd_iname[DNAME_INLINE_LEN];      /* Dirent name string */
+       struct list_head fcd_list;
+};
+
+struct ext4_fc_stats {
+       unsigned int fc_ineligible_reason_count[EXT4_FC_REASON_MAX];
+       unsigned long fc_num_commits;
+       unsigned long fc_ineligible_commits;
+       unsigned long fc_numblks;
+};
+
+#define EXT4_FC_REPLAY_REALLOC_INCREMENT       4
+
+/*
+ * Physical block regions added to different inodes due to fast commit
+ * recovery. These are set during the SCAN phase. During the replay phase,
+ * our allocator excludes these from its allocation. This ensures that
+ * we don't accidentally allocating a block that is going to be used by
+ * another inode.
+ */
+struct ext4_fc_alloc_region {
+       ext4_lblk_t lblk;
+       ext4_fsblk_t pblk;
+       int ino, len;
+};
+
+/*
+ * Fast commit replay state.
+ */
+struct ext4_fc_replay_state {
+       int fc_replay_num_tags;
+       int fc_replay_expected_off;
+       int fc_current_pass;
+       int fc_cur_tag;
+       int fc_crc;
+       struct ext4_fc_alloc_region *fc_regions;
+       int fc_regions_size, fc_regions_used, fc_regions_valid;
+       int *fc_modified_inodes;
+       int fc_modified_inodes_used, fc_modified_inodes_size;
+};
+
+#define region_last(__region) (((__region)->lblk) + ((__region)->len) - 1)
+#endif
+
+#define fc_for_each_tl(__start, __end, __tl)                           \
+       for (tl = (struct ext4_fc_tl *)(__start);                       \
+            (__u8 *)tl < (__u8 *)(__end);                              \
+               tl = (struct ext4_fc_tl *)((__u8 *)tl +                 \
+                                       sizeof(struct ext4_fc_tl) +     \
+                                       + le16_to_cpu(tl->fc_len)))
+
+static inline const char *tag2str(__u16 tag)
+{
+       switch (tag) {
+       case EXT4_FC_TAG_LINK:
+               return "ADD_ENTRY";
+       case EXT4_FC_TAG_UNLINK:
+               return "DEL_ENTRY";
+       case EXT4_FC_TAG_ADD_RANGE:
+               return "ADD_RANGE";
+       case EXT4_FC_TAG_CREAT:
+               return "CREAT_DENTRY";
+       case EXT4_FC_TAG_DEL_RANGE:
+               return "DEL_RANGE";
+       case EXT4_FC_TAG_INODE:
+               return "INODE";
+       case EXT4_FC_TAG_PAD:
+               return "PAD";
+       case EXT4_FC_TAG_TAIL:
+               return "TAIL";
+       case EXT4_FC_TAG_HEAD:
+               return "HEAD";
+       default:
+               return "ERROR";
+       }
+}
+
+/* Get length of a particular tlv */
+static inline int ext4_fc_tag_len(struct ext4_fc_tl *tl)
+{
+       return le16_to_cpu(tl->fc_len);
+}
+
+/* Get a pointer to "value" of a tlv */
+static inline __u8 *ext4_fc_tag_val(struct ext4_fc_tl *tl)
+{
+       return (__u8 *)tl + sizeof(*tl);
+}
+
+#endif /* __FAST_COMMIT_H__ */
index a331bc1..33ab8fb 100644 (file)
@@ -31,17 +31,37 @@ struct fiemap {
        __u32 fm_mapped_extents;/* number of extents that were mapped (out) */
        __u32 fm_extent_count;  /* size of fm_extents array (in) */
        __u32 fm_reserved;
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
        struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic pop
+#endif
 };
 
 #if defined(__linux__) && !defined(FS_IOC_FIEMAP)
 #define FS_IOC_FIEMAP  _IOWR('f', 11, struct fiemap)
 #endif
 
+#if defined(__linux__) && !defined(FS_IOC_GETSTATE)
+#define EXT4_IOC_GETSTATE              _IOW('f', 41, __u32)
+#endif
+
+#if defined(__linux__) && !defined(EXT4_IOC_GET_ES_CACHE)
+#define EXT4_IOC_GET_ES_CACHE          _IOWR('f', 42, struct fiemap)
+#endif
+
+#if defined(__linux__) && !defined(EXT4_STATE_FLAG_EXT_PRECACHED)
+#define EXT4_STATE_FLAG_EXT_PRECACHED  0x00000001
+#endif
+
 #define FIEMAP_MAX_OFFSET      (~0ULL)
 
 #define FIEMAP_FLAG_SYNC       0x00000001 /* sync file data before map */
 #define FIEMAP_FLAG_XATTR      0x00000002 /* map extended attribute tree */
+#define FIEMAP_FLAG_CACHE      0x00000004 /* request caching of the extents */
 
 #define FIEMAP_FLAGS_COMPAT    (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR)
 
@@ -67,4 +87,7 @@ struct fiemap {
 #define FIEMAP_EXTENT_SHARED           0x00002000 /* Space shared with other
                                                    * files. */
 
+#define EXT4_FIEMAP_EXTENT_HOLE                0x08000000 /* Entry in extent status
+                                                     cache for a hole*/
+
 #endif /* _LINUX_FIEMAP_H */
index 810a7fd..a0b5d97 100644 (file)
@@ -32,6 +32,12 @@ struct ext2_file {
        char                    *buf;
 };
 
+struct block_entry {
+       blk64_t         physblock;
+       unsigned char   sha[EXT2FS_SHA512_LENGTH];
+};
+typedef struct block_entry *block_entry_t;
+
 #define BMAP_BUFFER (file->buf + fs->blocksize)
 
 errcode_t ext2fs_file_open2(ext2_filsys fs, ext2_ino_t ino,
@@ -389,6 +395,8 @@ errcode_t ext2fs_file_write(ext2_file_t file, const void *buf,
        errcode_t       retval = 0;
        unsigned int    start, c, count = 0;
        const char      *ptr = (const char *) buf;
+       block_entry_t   new_block = NULL, old_block = NULL;
+       int             bmap_flags = 0;
 
        EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE);
        fs = file->fs;
@@ -424,22 +432,59 @@ errcode_t ext2fs_file_write(ext2_file_t file, const void *buf,
                if (retval)
                        goto fail;
 
+               file->flags |= EXT2_FILE_BUF_DIRTY;
+               memcpy(file->buf+start, ptr, c);
+
                /*
                 * OK, the physical block hasn't been allocated yet.
                 * Allocate it.
                 */
                if (!file->physblock) {
+                       bmap_flags = (file->ino ? BMAP_ALLOC : 0);
+                       if (fs->flags & EXT2_FLAG_SHARE_DUP) {
+                               new_block = calloc(1, sizeof(*new_block));
+                               if (!new_block) {
+                                       retval = EXT2_ET_NO_MEMORY;
+                                       goto fail;
+                               }
+                               ext2fs_sha512((const unsigned char*)file->buf,
+                                               fs->blocksize, new_block->sha);
+                               old_block = ext2fs_hashmap_lookup(
+                                                       fs->block_sha_map,
+                                                       new_block->sha,
+                                                       sizeof(new_block->sha));
+                       }
+
+                       if (old_block) {
+                               file->physblock = old_block->physblock;
+                               bmap_flags |= BMAP_SET;
+                               free(new_block);
+                               new_block = NULL;
+                       }
+
                        retval = ext2fs_bmap2(fs, file->ino, &file->inode,
                                              BMAP_BUFFER,
-                                             file->ino ? BMAP_ALLOC : 0,
+                                             bmap_flags,
                                              file->blockno, 0,
                                              &file->physblock);
-                       if (retval)
+                       if (retval) {
+                               free(new_block);
+                               new_block = NULL;
                                goto fail;
+                       }
+
+                       if (new_block) {
+                               new_block->physblock = file->physblock;
+                               ext2fs_hashmap_add(fs->block_sha_map, new_block,
+                                       new_block->sha, sizeof(new_block->sha));
+                       }
+
+                       if (bmap_flags & BMAP_SET) {
+                               ext2fs_iblk_add_blocks(fs, &file->inode, 1);
+                               ext2fs_write_inode(fs, file->ino, &file->inode);
+                       }
                }
 
-               file->flags |= EXT2_FILE_BUF_DIRTY;
-               memcpy(file->buf+start, ptr, c);
                file->pos += c;
                ptr += c;
                count += c;
index 311608d..cd85ef5 100644 (file)
@@ -31,6 +31,9 @@
 #if HAVE_SYS_MKDEV_H
 #include <sys/mkdev.h>
 #endif
+#ifdef HAVE_SYS_SYSMACROS_H
+#include <sys/sysmacros.h>
+#endif
 
 #include "ext2_fs.h"
 #include "ext2fs.h"
@@ -101,7 +104,8 @@ static int scan_dir(char *dirname, dev_t device, struct dir_list **list,
                        goto skip_to_next;
                if (S_ISDIR(st.st_mode))
                        add_to_dirlist(path, list);
-               if (S_ISBLK(st.st_mode) && st.st_rdev == device) {
+               if (ext2fsP_is_disk_device(st.st_mode) &&
+                   st.st_rdev == device) {
                        cp = malloc(strlen(path)+1);
                        if (!cp) {
                                closedir(dir);
index 98821fc..bb7daf4 100644 (file)
@@ -58,22 +58,31 @@ errcode_t ext2fs_sync_device(int fd, int flushb)
         * still is a race condition for those kernels, but this
         * reduces it greatly.)
         */
+#if defined(HAVE_FSYNC)
        if (fsync (fd) == -1)
                return errno;
+#endif
 
        if (flushb) {
+               errcode_t       retval = 0;
 
 #ifdef BLKFLSBUF
                if (ioctl (fd, BLKFLSBUF, 0) == 0)
                        return 0;
+               retval = errno;
 #elif defined(__linux__)
 #warning BLKFLSBUF not defined
 #endif
 #ifdef FDFLUSH
-               return ioctl(fd, FDFLUSH, 0);   /* In case this is a floppy */
+               /* In case this is a floppy */
+               if (ioctl(fd, FDFLUSH, 0) == 0)
+                       return 0;
+               if (retval == 0)
+                       retval = errno;
 #elif defined(__linux__)
 #warning FDFLUSH not defined
 #endif
+               return retval;
        }
        return 0;
 }
index ea9742e..68b8e9a 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "ext2_fs.h"
 #include "ext2fsP.h"
+#include "hashmap.h"
 
 void ext2fs_free(ext2_filsys fs)
 {
@@ -59,6 +60,9 @@ void ext2fs_free(ext2_filsys fs)
        if (fs->mmp_cmp)
                ext2fs_free_mem(&fs->mmp_cmp);
 
+       if (fs->block_sha_map)
+               ext2fs_hashmap_free(fs->block_sha_map);
+
        fs->magic = 0;
 
        ext2fs_zero_blocks2(NULL, 0, 0, NULL, NULL);
index 6cd6fe6..1536d4b 100644 (file)
@@ -28,7 +28,7 @@
 #include "ext2_fs.h"
 #include "ext2fsP.h"
 
-struct ext2fs_struct_generic_bitmap {
+struct ext2fs_struct_generic_bitmap_32 {
        errcode_t       magic;
        ext2_filsys     fs;
        __u32           start, end;
@@ -39,6 +39,8 @@ struct ext2fs_struct_generic_bitmap {
        __u32           reserved[7];
 };
 
+typedef struct ext2fs_struct_generic_bitmap_32 *ext2fs_generic_bitmap_32;
+
 #define EXT2FS_IS_32_BITMAP(bmap) \
        (((bmap)->magic == EXT2_ET_MAGIC_GENERIC_BITMAP) || \
         ((bmap)->magic == EXT2_ET_MAGIC_BLOCK_BITMAP) || \
@@ -53,9 +55,11 @@ struct ext2fs_struct_generic_bitmap {
  * Used by previously inlined function, so we have to export this and
  * not change the function signature
  */
-void ext2fs_warn_bitmap2(ext2fs_generic_bitmap bitmap,
+void ext2fs_warn_bitmap2(ext2fs_generic_bitmap gen_bitmap,
                            int code, unsigned long arg)
 {
+       ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap;
+
 #ifndef OMIT_COM_ERR
        if (bitmap->description)
                com_err(0, bitmap->base_error_code+code,
@@ -79,11 +83,11 @@ errcode_t ext2fs_make_generic_bitmap(errcode_t magic, ext2_filsys fs,
                                     const char *descr, char *init_map,
                                     ext2fs_generic_bitmap *ret)
 {
-       ext2fs_generic_bitmap   bitmap;
+       ext2fs_generic_bitmap_32 bitmap;
        errcode_t               retval;
        size_t                  size;
 
-       retval = ext2fs_get_mem(sizeof(struct ext2fs_struct_generic_bitmap),
+       retval = ext2fs_get_mem(sizeof(struct ext2fs_struct_generic_bitmap_32),
                                &bitmap);
        if (retval)
                return retval;
@@ -127,7 +131,7 @@ errcode_t ext2fs_make_generic_bitmap(errcode_t magic, ext2_filsys fs,
                memcpy(bitmap->bitmap, init_map, size);
        else
                memset(bitmap->bitmap, 0, size);
-       *ret = bitmap;
+       *ret = (ext2fs_generic_bitmap) bitmap;
        return 0;
 }
 
@@ -141,9 +145,11 @@ errcode_t ext2fs_allocate_generic_bitmap(__u32 start,
                                          start, end, real_end, descr, 0, ret);
 }
 
-errcode_t ext2fs_copy_generic_bitmap(ext2fs_generic_bitmap src,
+errcode_t ext2fs_copy_generic_bitmap(ext2fs_generic_bitmap gen_src,
                                     ext2fs_generic_bitmap *dest)
 {
+       ext2fs_generic_bitmap_32 src = (ext2fs_generic_bitmap_32) gen_src;
+
        return (ext2fs_make_generic_bitmap(src->magic, src->fs,
                                           src->start, src->end,
                                           src->real_end,
@@ -151,9 +157,11 @@ errcode_t ext2fs_copy_generic_bitmap(ext2fs_generic_bitmap src,
                                           dest));
 }
 
-void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap bitmap)
+void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap gen_bitmap)
 {
-       if (check_magic(bitmap))
+       ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap;
+
+       if (check_magic(gen_bitmap))
                return;
 
        bitmap->magic = 0;
@@ -171,6 +179,8 @@ void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap bitmap)
 int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap,
                                        blk_t bitno)
 {
+       ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap;
+
        if (!EXT2FS_IS_32_BITMAP(bitmap)) {
                if (EXT2FS_IS_64_BITMAP(bitmap)) {
                        ext2fs_warn_bitmap32(bitmap, __func__);
@@ -183,16 +193,18 @@ int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap,
                return 0;
        }
 
-       if ((bitno < bitmap->start) || (bitno > bitmap->end)) {
+       if ((bitno < bitmap32->start) || (bitno > bitmap32->end)) {
                ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR, bitno);
                return 0;
        }
-       return ext2fs_test_bit(bitno - bitmap->start, bitmap->bitmap);
+       return ext2fs_test_bit(bitno - bitmap32->start, bitmap32->bitmap);
 }
 
 int ext2fs_mark_generic_bitmap(ext2fs_generic_bitmap bitmap,
                                         __u32 bitno)
 {
+       ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap;
+
        if (!EXT2FS_IS_32_BITMAP(bitmap)) {
                if (EXT2FS_IS_64_BITMAP(bitmap)) {
                        ext2fs_warn_bitmap32(bitmap, __func__);
@@ -205,16 +217,18 @@ int ext2fs_mark_generic_bitmap(ext2fs_generic_bitmap bitmap,
                return 0;
        }
 
-       if ((bitno < bitmap->start) || (bitno > bitmap->end)) {
+       if ((bitno < bitmap32->start) || (bitno > bitmap32->end)) {
                ext2fs_warn_bitmap2(bitmap, EXT2FS_MARK_ERROR, bitno);
                return 0;
        }
-       return ext2fs_set_bit(bitno - bitmap->start, bitmap->bitmap);
+       return ext2fs_set_bit(bitno - bitmap32->start, bitmap32->bitmap);
 }
 
 int ext2fs_unmark_generic_bitmap(ext2fs_generic_bitmap bitmap,
                                           blk_t bitno)
 {
+       ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap;
+
        if (!EXT2FS_IS_32_BITMAP(bitmap)) {
                if (EXT2FS_IS_64_BITMAP(bitmap)) {
                        ext2fs_warn_bitmap32(bitmap, __func__);
@@ -227,15 +241,17 @@ int ext2fs_unmark_generic_bitmap(ext2fs_generic_bitmap bitmap,
                return 0;
        }
 
-       if ((bitno < bitmap->start) || (bitno > bitmap->end)) {
+       if ((bitno < bitmap32->start) || (bitno > bitmap32->end)) {
                ext2fs_warn_bitmap2(bitmap, EXT2FS_UNMARK_ERROR, bitno);
                return 0;
        }
-       return ext2fs_clear_bit(bitno - bitmap->start, bitmap->bitmap);
+       return ext2fs_clear_bit(bitno - bitmap32->start, bitmap32->bitmap);
 }
 
 __u32 ext2fs_get_generic_bitmap_start(ext2fs_generic_bitmap bitmap)
 {
+       ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap;
+
        if (!EXT2FS_IS_32_BITMAP(bitmap)) {
                if (EXT2FS_IS_64_BITMAP(bitmap)) {
                        ext2fs_warn_bitmap32(bitmap, __func__);
@@ -248,11 +264,13 @@ __u32 ext2fs_get_generic_bitmap_start(ext2fs_generic_bitmap bitmap)
                return 0;
        }
 
-       return bitmap->start;
+       return bitmap32->start;
 }
 
 __u32 ext2fs_get_generic_bitmap_end(ext2fs_generic_bitmap bitmap)
 {
+       ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap;
+
        if (!EXT2FS_IS_32_BITMAP(bitmap)) {
                if (EXT2FS_IS_64_BITMAP(bitmap)) {
                        ext2fs_warn_bitmap32(bitmap, __func__);
@@ -264,11 +282,13 @@ __u32 ext2fs_get_generic_bitmap_end(ext2fs_generic_bitmap bitmap)
 #endif
                return 0;
        }
-       return bitmap->end;
+       return bitmap32->end;
 }
 
 void ext2fs_clear_generic_bitmap(ext2fs_generic_bitmap bitmap)
 {
+       ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap;
+
        if (!EXT2FS_IS_32_BITMAP(bitmap)) {
                if (EXT2FS_IS_64_BITMAP(bitmap)) {
                        ext2fs_warn_bitmap32(bitmap, __func__);
@@ -282,14 +302,16 @@ void ext2fs_clear_generic_bitmap(ext2fs_generic_bitmap bitmap)
                return;
        }
 
-       memset(bitmap->bitmap, 0,
-              (size_t) (((bitmap->real_end - bitmap->start) / 8) + 1));
+       memset(bitmap32->bitmap, 0,
+              (size_t) (((bitmap32->real_end - bitmap32->start) / 8) + 1));
 }
 
-errcode_t ext2fs_fudge_generic_bitmap_end(ext2fs_inode_bitmap bitmap,
+errcode_t ext2fs_fudge_generic_bitmap_end(ext2fs_inode_bitmap gen_bitmap,
                                          errcode_t magic, errcode_t neq,
                                          ext2_ino_t end, ext2_ino_t *oend)
 {
+       ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap;
+
        EXT2_CHECK_MAGIC(bitmap, magic);
 
        if (end > bitmap->real_end)
@@ -302,8 +324,9 @@ errcode_t ext2fs_fudge_generic_bitmap_end(ext2fs_inode_bitmap bitmap,
 
 errcode_t ext2fs_resize_generic_bitmap(errcode_t magic,
                                       __u32 new_end, __u32 new_real_end,
-                                      ext2fs_generic_bitmap bmap)
+                                      ext2fs_generic_bitmap gen_bmap)
 {
+       ext2fs_generic_bitmap_32 bmap = (ext2fs_generic_bitmap_32) gen_bmap;
        errcode_t       retval;
        size_t          size, new_size;
        __u32           bitno;
@@ -344,9 +367,11 @@ errcode_t ext2fs_resize_generic_bitmap(errcode_t magic,
 }
 
 errcode_t ext2fs_compare_generic_bitmap(errcode_t magic, errcode_t neq,
-                                       ext2fs_generic_bitmap bm1,
-                                       ext2fs_generic_bitmap bm2)
+                                       ext2fs_generic_bitmap gen_bm1,
+                                       ext2fs_generic_bitmap gen_bm2)
 {
+       ext2fs_generic_bitmap_32 bm1 = (ext2fs_generic_bitmap_32) gen_bm1;
+       ext2fs_generic_bitmap_32 bm2 = (ext2fs_generic_bitmap_32) gen_bm2;
        blk_t   i;
 
        if (!bm1 || bm1->magic != magic)
@@ -361,15 +386,16 @@ errcode_t ext2fs_compare_generic_bitmap(errcode_t magic, errcode_t neq,
                return neq;
 
        for (i = bm1->end - ((bm1->end - bm1->start) % 8); i <= bm1->end; i++)
-               if (ext2fs_fast_test_block_bitmap(bm1, i) !=
-                   ext2fs_fast_test_block_bitmap(bm2, i))
+               if (ext2fs_fast_test_block_bitmap(gen_bm1, i) !=
+                   ext2fs_fast_test_block_bitmap(gen_bm2, i))
                        return neq;
 
        return 0;
 }
 
-void ext2fs_set_generic_bitmap_padding(ext2fs_generic_bitmap map)
+void ext2fs_set_generic_bitmap_padding(ext2fs_generic_bitmap gen_map)
 {
+       ext2fs_generic_bitmap_32 map = (ext2fs_generic_bitmap_32) gen_map;
        __u32   i, j;
 
        /* Protect loop from wrap-around if map->real_end is maxed */
@@ -379,33 +405,37 @@ void ext2fs_set_generic_bitmap_padding(ext2fs_generic_bitmap map)
                ext2fs_set_bit(j, map->bitmap);
 }
 
-errcode_t ext2fs_get_generic_bitmap_range(ext2fs_generic_bitmap bmap,
+errcode_t ext2fs_get_generic_bitmap_range(ext2fs_generic_bitmap gen_bmap,
                                          errcode_t magic,
                                          __u32 start, __u32 num,
                                          void *out)
 {
+       ext2fs_generic_bitmap_32 bmap = (ext2fs_generic_bitmap_32) gen_bmap;
+
        if (!bmap || (bmap->magic != magic))
                return magic;
 
        if ((start < bmap->start) || (start+num-1 > bmap->real_end))
                return EXT2_ET_INVALID_ARGUMENT;
 
-       memcpy(out, bmap->bitmap + (start >> 3), (num+7) >> 3);
+       memcpy(out, bmap->bitmap + ((start - bmap->start) >> 3), (num+7) >> 3);
        return 0;
 }
 
-errcode_t ext2fs_set_generic_bitmap_range(ext2fs_generic_bitmap bmap,
+errcode_t ext2fs_set_generic_bitmap_range(ext2fs_generic_bitmap gen_bmap,
                                          errcode_t magic,
                                          __u32 start, __u32 num,
                                          void *in)
 {
+       ext2fs_generic_bitmap_32 bmap = (ext2fs_generic_bitmap_32) gen_bmap;
+
        if (!bmap || (bmap->magic != magic))
                return magic;
 
        if ((start < bmap->start) || (start+num-1 > bmap->real_end))
                return EXT2_ET_INVALID_ARGUMENT;
 
-       memcpy(bmap->bitmap + (start >> 3), in, (num+7) >> 3);
+       memcpy(bmap->bitmap + ((start - bmap->start) >> 3), in, (num+7) >> 3);
        return 0;
 }
 
@@ -432,10 +462,11 @@ int ext2fs_mem_is_zero(const char *mem, size_t len)
 /*
  * Return true if all of the bits in a specified range are clear
  */
-static int ext2fs_test_clear_generic_bitmap_range(ext2fs_generic_bitmap bitmap,
+static int ext2fs_test_clear_generic_bitmap_range(ext2fs_generic_bitmap gen_bitmap,
                                                  unsigned int start,
                                                  unsigned int len)
 {
+       ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap;
        size_t start_byte, len_byte = len >> 3;
        unsigned int start_bit, len_bit = len % 8;
        int first_bit = 0;
@@ -504,14 +535,15 @@ static int ext2fs_test_clear_generic_bitmap_range(ext2fs_generic_bitmap bitmap,
        return ext2fs_mem_is_zero(ADDR + start_byte, len_byte);
 }
 
-errcode_t ext2fs_find_first_zero_generic_bitmap(ext2fs_generic_bitmap bitmap,
+errcode_t ext2fs_find_first_zero_generic_bitmap(ext2fs_generic_bitmap gen_bitmap,
                                                __u32 start, __u32 end,
                                                __u32 *out)
 {
+       ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap;
        blk_t b;
 
        if (start < bitmap->start || end > bitmap->end || start > end) {
-               ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR, start);
+               ext2fs_warn_bitmap2(gen_bitmap, EXT2FS_TEST_ERROR, start);
                return EINVAL;
        }
 
@@ -527,14 +559,15 @@ errcode_t ext2fs_find_first_zero_generic_bitmap(ext2fs_generic_bitmap bitmap,
        return ENOENT;
 }
 
-errcode_t ext2fs_find_first_set_generic_bitmap(ext2fs_generic_bitmap bitmap,
+errcode_t ext2fs_find_first_set_generic_bitmap(ext2fs_generic_bitmap gen_bitmap,
                                               __u32 start, __u32 end,
                                               __u32 *out)
 {
+       ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap;
        blk_t b;
 
        if (start < bitmap->start || end > bitmap->end || start > end) {
-               ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR, start);
+               ext2fs_warn_bitmap2(gen_bitmap, EXT2FS_TEST_ERROR, start);
                return EINVAL;
        }
 
@@ -550,11 +583,14 @@ errcode_t ext2fs_find_first_set_generic_bitmap(ext2fs_generic_bitmap bitmap,
        return ENOENT;
 }
 
-int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
+int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap gen_bitmap,
                                   blk_t block, int num)
 {
+       ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap;
+
        EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_BLOCK_BITMAP);
-       if ((block < bitmap->start) || (block+num-1 > bitmap->real_end)) {
+       if ((block < bitmap->start) || (block > bitmap->real_end) ||
+           (block+num-1 > bitmap->real_end)) {
                ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST,
                                   block, bitmap->description);
                return 0;
@@ -563,11 +599,14 @@ int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
                                                      bitmap, block, num);
 }
 
-int ext2fs_test_inode_bitmap_range(ext2fs_inode_bitmap bitmap,
-                                  ino_t inode, int num)
+int ext2fs_test_inode_bitmap_range(ext2fs_inode_bitmap gen_bitmap,
+                                  ext2_ino_t inode, int num)
 {
+       ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap;
+
        EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_INODE_BITMAP);
-       if ((inode < bitmap->start) || (inode+num-1 > bitmap->real_end)) {
+       if ((inode < bitmap->start) || (inode > bitmap->real_end) ||
+           (inode+num-1 > bitmap->real_end)) {
                ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_TEST,
                                   inode, bitmap->description);
                return 0;
@@ -576,12 +615,14 @@ int ext2fs_test_inode_bitmap_range(ext2fs_inode_bitmap bitmap,
                                                      bitmap, inode, num);
 }
 
-void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
+void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap gen_bitmap,
                                    blk_t block, int num)
 {
+       ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap;
        int     i;
 
-       if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
+       if ((block < bitmap->start) || (block > bitmap->end) ||
+           (block+num-1 > bitmap->end)) {
                ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block,
                                   bitmap->description);
                return;
@@ -590,12 +631,14 @@ void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
                ext2fs_fast_set_bit(block + i - bitmap->start, bitmap->bitmap);
 }
 
-void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
-                                              blk_t block, int num)
+void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap gen_bitmap,
+                                     blk_t block, int num)
 {
+       ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap;
        int     i;
 
-       if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
+       if ((block < bitmap->start) || (block > bitmap->end) ||
+           (block+num-1 > bitmap->end)) {
                ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK, block,
                                   bitmap->description);
                return;
index 3fc7349..b237066 100644 (file)
@@ -68,7 +68,7 @@
  * e2fsck can request an encoding which is optimized for that.
  */
 
-static void warn_bitmap(ext2fs_generic_bitmap bitmap,
+static void warn_bitmap(ext2fs_generic_bitmap_64 bitmap,
                        int code, __u64 arg)
 {
 #ifndef OMIT_COM_ERR
@@ -93,7 +93,7 @@ errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic,
                                    const char *descr,
                                    ext2fs_generic_bitmap *ret)
 {
-       ext2fs_generic_bitmap   bitmap;
+       ext2fs_generic_bitmap_64 bitmap;
        struct ext2_bitmap_ops  *ops;
        ext2_ino_t num_dirs;
        errcode_t retval;
@@ -119,7 +119,7 @@ errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic,
                return EINVAL;
        }
 
-       retval = ext2fs_get_memzero(sizeof(struct ext2fs_struct_generic_bitmap),
+       retval = ext2fs_get_memzero(sizeof(struct ext2fs_struct_generic_bitmap_64),
                                    &bitmap);
        if (retval)
                return retval;
@@ -170,12 +170,12 @@ errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic,
                return retval;
        }
 
-       *ret = bitmap;
+       *ret = (ext2fs_generic_bitmap) bitmap;
        return 0;
 }
 
 #ifdef ENABLE_BMAP_STATS
-static void ext2fs_print_bmap_statistics(ext2fs_generic_bitmap bitmap)
+static void ext2fs_print_bmap_statistics(ext2fs_generic_bitmap_64 bitmap)
 {
        struct ext2_bmap_statistics *stats = &bitmap->stats;
 #ifdef ENABLE_BMAP_STATS_OPS
@@ -241,13 +241,15 @@ static void ext2fs_print_bmap_statistics(ext2fs_generic_bitmap bitmap)
 }
 #endif
 
-void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap)
+void ext2fs_free_generic_bmap(ext2fs_generic_bitmap gen_bmap)
 {
+       ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap;
+
        if (!bmap)
                return;
 
        if (EXT2FS_IS_32_BITMAP(bmap)) {
-               ext2fs_free_generic_bitmap(bmap);
+               ext2fs_free_generic_bitmap(gen_bmap);
                return;
        }
 
@@ -271,24 +273,25 @@ void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap)
        ext2fs_free_mem(&bmap);
 }
 
-errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src,
+errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap gen_src,
                                   ext2fs_generic_bitmap *dest)
 {
+       ext2fs_generic_bitmap_64 src = (ext2fs_generic_bitmap_64) gen_src;
        char *descr, *new_descr;
-       ext2fs_generic_bitmap   new_bmap;
+       ext2fs_generic_bitmap_64 new_bmap;
        errcode_t retval;
 
        if (!src)
                return EINVAL;
 
        if (EXT2FS_IS_32_BITMAP(src))
-               return ext2fs_copy_generic_bitmap(src, dest);
+               return ext2fs_copy_generic_bitmap(gen_src, dest);
 
        if (!EXT2FS_IS_64_BITMAP(src))
                return EINVAL;
 
        /* Allocate a new bitmap struct */
-       retval = ext2fs_get_memzero(sizeof(struct ext2fs_struct_generic_bitmap),
+       retval = ext2fs_get_memzero(sizeof(struct ext2fs_struct_generic_bitmap_64),
                                    &new_bmap);
        if (retval)
                return retval;
@@ -336,21 +339,23 @@ errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src,
                return retval;
        }
 
-       *dest = new_bmap;
+       *dest = (ext2fs_generic_bitmap) new_bmap;
 
        return 0;
 }
 
-errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap,
+errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap gen_bmap,
                                     __u64 new_end,
                                     __u64 new_real_end)
 {
+       ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap;
+
        if (!bmap)
                return EINVAL;
 
        if (EXT2FS_IS_32_BITMAP(bmap))
-               return ext2fs_resize_generic_bitmap(bmap->magic, new_end,
-                                                   new_real_end, bmap);
+               return ext2fs_resize_generic_bitmap(gen_bmap->magic, new_end,
+                                                   new_real_end, gen_bmap);
 
        if (!EXT2FS_IS_64_BITMAP(bmap))
                return EINVAL;
@@ -360,10 +365,12 @@ errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap,
        return bmap->bitmap_ops->resize_bmap(bmap, new_end, new_real_end);
 }
 
-errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap,
+errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap gen_bitmap,
                                        errcode_t neq,
                                        __u64 end, __u64 *oend)
 {
+       ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap;
+
        if (!bitmap)
                return EINVAL;
 
@@ -371,7 +378,8 @@ errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap,
                ext2_ino_t tmp_oend;
                int retval;
 
-               retval = ext2fs_fudge_generic_bitmap_end(bitmap, bitmap->magic,
+               retval = ext2fs_fudge_generic_bitmap_end(gen_bitmap,
+                                                        bitmap->magic,
                                                         neq, end, &tmp_oend);
                if (oend)
                        *oend = tmp_oend;
@@ -389,13 +397,15 @@ errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap,
        return 0;
 }
 
-__u64 ext2fs_get_generic_bmap_start(ext2fs_generic_bitmap bitmap)
+__u64 ext2fs_get_generic_bmap_start(ext2fs_generic_bitmap gen_bitmap)
 {
+       ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap;
+
        if (!bitmap)
                return EINVAL;
 
        if (EXT2FS_IS_32_BITMAP(bitmap))
-               return ext2fs_get_generic_bitmap_start(bitmap);
+               return ext2fs_get_generic_bitmap_start(gen_bitmap);
 
        if (!EXT2FS_IS_64_BITMAP(bitmap))
                return EINVAL;
@@ -403,13 +413,15 @@ __u64 ext2fs_get_generic_bmap_start(ext2fs_generic_bitmap bitmap)
        return bitmap->start;
 }
 
-__u64 ext2fs_get_generic_bmap_end(ext2fs_generic_bitmap bitmap)
+__u64 ext2fs_get_generic_bmap_end(ext2fs_generic_bitmap gen_bitmap)
 {
+       ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap;
+
        if (!bitmap)
                return EINVAL;
 
        if (EXT2FS_IS_32_BITMAP(bitmap))
-               return ext2fs_get_generic_bitmap_end(bitmap);
+               return ext2fs_get_generic_bitmap_end(gen_bitmap);
 
        if (!EXT2FS_IS_64_BITMAP(bitmap))
                return EINVAL;
@@ -417,27 +429,31 @@ __u64 ext2fs_get_generic_bmap_end(ext2fs_generic_bitmap bitmap)
        return bitmap->end;
 }
 
-void ext2fs_clear_generic_bmap(ext2fs_generic_bitmap bitmap)
+void ext2fs_clear_generic_bmap(ext2fs_generic_bitmap gen_bitmap)
 {
+       ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap;
+
        if (EXT2FS_IS_32_BITMAP(bitmap))
-               ext2fs_clear_generic_bitmap(bitmap);
+               ext2fs_clear_generic_bitmap(gen_bitmap);
        else
-               bitmap->bitmap_ops->clear_bmap (bitmap);
+               bitmap->bitmap_ops->clear_bmap(bitmap);
 }
 
-int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap,
+int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap gen_bitmap,
                             __u64 arg)
 {
+       ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap;
+
        if (!bitmap)
                return 0;
 
        if (EXT2FS_IS_32_BITMAP(bitmap)) {
                if (arg & ~0xffffffffULL) {
-                       ext2fs_warn_bitmap2(bitmap,
+                       ext2fs_warn_bitmap2(gen_bitmap,
                                            EXT2FS_MARK_ERROR, 0xffffffff);
                        return 0;
                }
-               return ext2fs_mark_generic_bitmap(bitmap, arg);
+               return ext2fs_mark_generic_bitmap(gen_bitmap, arg);
        }
 
        if (!EXT2FS_IS_64_BITMAP(bitmap))
@@ -462,19 +478,21 @@ int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap,
        return bitmap->bitmap_ops->mark_bmap(bitmap, arg);
 }
 
-int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap,
+int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap gen_bitmap,
                               __u64 arg)
 {
+       ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap;
+
        if (!bitmap)
                return 0;
 
        if (EXT2FS_IS_32_BITMAP(bitmap)) {
                if (arg & ~0xffffffffULL) {
-                       ext2fs_warn_bitmap2(bitmap, EXT2FS_UNMARK_ERROR,
+                       ext2fs_warn_bitmap2(gen_bitmap, EXT2FS_UNMARK_ERROR,
                                            0xffffffff);
                        return 0;
                }
-               return ext2fs_unmark_generic_bitmap(bitmap, arg);
+               return ext2fs_unmark_generic_bitmap(gen_bitmap, arg);
        }
 
        if (!EXT2FS_IS_64_BITMAP(bitmap))
@@ -492,19 +510,20 @@ int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap,
        return bitmap->bitmap_ops->unmark_bmap(bitmap, arg);
 }
 
-int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap,
+int ext2fs_test_generic_bmap(ext2fs_generic_bitmap gen_bitmap,
                             __u64 arg)
 {
+       ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap;
        if (!bitmap)
                return 0;
 
        if (EXT2FS_IS_32_BITMAP(bitmap)) {
                if (arg & ~0xffffffffULL) {
-                       ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR,
+                       ext2fs_warn_bitmap2(gen_bitmap, EXT2FS_TEST_ERROR,
                                            0xffffffff);
                        return 0;
                }
-               return ext2fs_test_generic_bitmap(bitmap, arg);
+               return ext2fs_test_generic_bitmap(gen_bitmap, arg);
        }
 
        if (!EXT2FS_IS_64_BITMAP(bitmap))
@@ -529,20 +548,22 @@ int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap,
        return bitmap->bitmap_ops->test_bmap(bitmap, arg);
 }
 
-errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bmap,
+errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap gen_bmap,
                                        __u64 start, unsigned int num,
                                        void *in)
 {
+       ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap;
+
        if (!bmap)
                return EINVAL;
 
        if (EXT2FS_IS_32_BITMAP(bmap)) {
                if ((start+num-1) & ~0xffffffffULL) {
-                       ext2fs_warn_bitmap2(bmap, EXT2FS_UNMARK_ERROR,
+                       ext2fs_warn_bitmap2(gen_bmap, EXT2FS_UNMARK_ERROR,
                                            0xffffffff);
                        return EINVAL;
                }
-               return ext2fs_set_generic_bitmap_range(bmap, bmap->magic,
+               return ext2fs_set_generic_bitmap_range(gen_bmap, bmap->magic,
                                                       start, num, in);
        }
 
@@ -554,20 +575,22 @@ errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bmap,
        return bmap->bitmap_ops->set_bmap_range(bmap, start, num, in);
 }
 
-errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bmap,
+errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap gen_bmap,
                                        __u64 start, unsigned int num,
                                        void *out)
 {
+       ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap;
+
        if (!bmap)
                return EINVAL;
 
        if (EXT2FS_IS_32_BITMAP(bmap)) {
                if ((start+num-1) & ~0xffffffffULL) {
-                       ext2fs_warn_bitmap2(bmap,
+                       ext2fs_warn_bitmap2(gen_bmap,
                                            EXT2FS_UNMARK_ERROR, 0xffffffff);
                        return EINVAL;
                }
-               return ext2fs_get_generic_bitmap_range(bmap, bmap->magic,
+               return ext2fs_get_generic_bitmap_range(gen_bmap, bmap->magic,
                                                       start, num, out);
        }
 
@@ -580,9 +603,11 @@ errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bmap,
 }
 
 errcode_t ext2fs_compare_generic_bmap(errcode_t neq,
-                                     ext2fs_generic_bitmap bm1,
-                                     ext2fs_generic_bitmap bm2)
+                                     ext2fs_generic_bitmap gen_bm1,
+                                     ext2fs_generic_bitmap gen_bm2)
 {
+       ext2fs_generic_bitmap_64 bm1 = (ext2fs_generic_bitmap_64) gen_bm1;
+       ext2fs_generic_bitmap_64 bm2 = (ext2fs_generic_bitmap_64) gen_bm2;
        blk64_t i;
 
        if (!bm1 || !bm2)
@@ -592,7 +617,8 @@ errcode_t ext2fs_compare_generic_bmap(errcode_t neq,
 
        /* Now we know both bitmaps have the same magic */
        if (EXT2FS_IS_32_BITMAP(bm1))
-               return ext2fs_compare_generic_bitmap(bm1->magic, neq, bm1, bm2);
+               return ext2fs_compare_generic_bitmap(bm1->magic, neq,
+                                                    gen_bm1, gen_bm2);
 
        if (!EXT2FS_IS_64_BITMAP(bm1))
                return EINVAL;
@@ -602,19 +628,20 @@ errcode_t ext2fs_compare_generic_bmap(errcode_t neq,
                return neq;
 
        for (i = bm1->end - ((bm1->end - bm1->start) % 8); i <= bm1->end; i++)
-               if (ext2fs_test_generic_bmap(bm1, i) !=
-                   ext2fs_test_generic_bmap(bm2, i))
+               if (ext2fs_test_generic_bmap(gen_bm1, i) !=
+                   ext2fs_test_generic_bmap(gen_bm2, i))
                        return neq;
 
        return 0;
 }
 
-void ext2fs_set_generic_bmap_padding(ext2fs_generic_bitmap bmap)
+void ext2fs_set_generic_bmap_padding(ext2fs_generic_bitmap gen_bmap)
 {
+       ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap;
        __u64   start, num;
 
        if (EXT2FS_IS_32_BITMAP(bmap)) {
-               ext2fs_set_generic_bitmap_padding(bmap);
+               ext2fs_set_generic_bitmap_padding(gen_bmap);
                return;
        }
 
@@ -624,9 +651,10 @@ void ext2fs_set_generic_bmap_padding(ext2fs_generic_bitmap bmap)
        /* XXX ought to warn on error */
 }
 
-int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap bmap,
+int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap gen_bmap,
                                    blk64_t block, unsigned int num)
 {
+       ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap;
        __u64   end = block + num;
 
        if (!bmap)
@@ -637,7 +665,8 @@ int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap bmap,
                                                 bmap, block);
 
        if (EXT2FS_IS_32_BITMAP(bmap)) {
-               if ((block+num-1) & ~0xffffffffULL) {
+               if ((block & ~0xffffffffULL) ||
+                   ((block+num-1) & ~0xffffffffULL)) {
                        ext2fs_warn_bitmap2((ext2fs_generic_bitmap) bmap,
                                            EXT2FS_UNMARK_ERROR, 0xffffffff);
                        return EINVAL;
@@ -657,7 +686,8 @@ int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap bmap,
        end >>= bmap->cluster_bits;
        num = end - block;
 
-       if ((block < bmap->start) || (block+num-1 > bmap->end)) {
+       if ((block < bmap->start) || (block > bmap->end) ||
+           (block+num-1 > bmap->end)) {
                ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST, block,
                                   bmap->description);
                return EINVAL;
@@ -666,16 +696,18 @@ int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap bmap,
        return bmap->bitmap_ops->test_clear_bmap_extent(bmap, block, num);
 }
 
-void ext2fs_mark_block_bitmap_range2(ext2fs_block_bitmap bmap,
+void ext2fs_mark_block_bitmap_range2(ext2fs_block_bitmap gen_bmap,
                                     blk64_t block, unsigned int num)
 {
+       ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap;
        __u64   end = block + num;
 
        if (!bmap)
                return;
 
        if (EXT2FS_IS_32_BITMAP(bmap)) {
-               if ((block+num-1) & ~0xffffffffULL) {
+               if ((block & ~0xffffffffULL) ||
+                   ((block+num-1) & ~0xffffffffULL)) {
                        ext2fs_warn_bitmap2((ext2fs_generic_bitmap) bmap,
                                            EXT2FS_UNMARK_ERROR, 0xffffffff);
                        return;
@@ -695,7 +727,8 @@ void ext2fs_mark_block_bitmap_range2(ext2fs_block_bitmap bmap,
        end >>= bmap->cluster_bits;
        num = end - block;
 
-       if ((block < bmap->start) || (block+num-1 > bmap->end)) {
+       if ((block < bmap->start) || (block > bmap->end) ||
+           (block+num-1 > bmap->end)) {
                ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block,
                                   bmap->description);
                return;
@@ -704,16 +737,18 @@ void ext2fs_mark_block_bitmap_range2(ext2fs_block_bitmap bmap,
        bmap->bitmap_ops->mark_bmap_extent(bmap, block, num);
 }
 
-void ext2fs_unmark_block_bitmap_range2(ext2fs_block_bitmap bmap,
+void ext2fs_unmark_block_bitmap_range2(ext2fs_block_bitmap gen_bmap,
                                       blk64_t block, unsigned int num)
 {
+       ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap;
        __u64   end = block + num;
 
        if (!bmap)
                return;
 
        if (EXT2FS_IS_32_BITMAP(bmap)) {
-               if ((block+num-1) & ~0xffffffffULL) {
+               if ((block & ~0xffffffffULL) ||
+                   ((block+num-1) & ~0xffffffffULL)) {
                        ext2fs_warn_bitmap2((ext2fs_generic_bitmap) bmap,
                                            EXT2FS_UNMARK_ERROR, 0xffffffff);
                        return;
@@ -733,7 +768,8 @@ void ext2fs_unmark_block_bitmap_range2(ext2fs_block_bitmap bmap,
        end >>= bmap->cluster_bits;
        num = end - block;
 
-       if ((block < bmap->start) || (block+num-1 > bmap->end)) {
+       if ((block < bmap->start) || (block > bmap->end) ||
+           (block+num-1 > bmap->end)) {
                ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK, block,
                                   bmap->description);
                return;
@@ -742,8 +778,10 @@ void ext2fs_unmark_block_bitmap_range2(ext2fs_block_bitmap bmap,
        bmap->bitmap_ops->unmark_bmap_extent(bmap, block, num);
 }
 
-void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap, const char *func)
+void ext2fs_warn_bitmap32(ext2fs_generic_bitmap gen_bitmap, const char *func)
 {
+       ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap;
+
 #ifndef OMIT_COM_ERR
        if (bitmap && bitmap->description)
                com_err(0, EXT2_ET_MAGIC_GENERIC_BITMAP,
@@ -758,49 +796,45 @@ void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap, const char *func)
 errcode_t ext2fs_convert_subcluster_bitmap(ext2_filsys fs,
                                           ext2fs_block_bitmap *bitmap)
 {
-       ext2fs_block_bitmap     cmap, bmap;
+       ext2fs_generic_bitmap_64 bmap, cmap;
+       ext2fs_block_bitmap     gen_bmap = *bitmap, gen_cmap;
        errcode_t               retval;
-       blk64_t                 i, b_end, c_end;
-       int                     n, ratio;
-
-       bmap = *bitmap;
+       blk64_t                 i, next, b_end, c_end;
 
-       if (fs->cluster_ratio_bits == ext2fs_get_bitmap_granularity(bmap))
+       bmap = (ext2fs_generic_bitmap_64) gen_bmap;
+       if (fs->cluster_ratio_bits == ext2fs_get_bitmap_granularity(gen_bmap))
                return 0;       /* Nothing to do */
 
        retval = ext2fs_allocate_block_bitmap(fs, "converted cluster bitmap",
-                                             &cmap);
+                                             &gen_cmap);
        if (retval)
                return retval;
 
+       cmap = (ext2fs_generic_bitmap_64) gen_cmap;
        i = bmap->start;
        b_end = bmap->end;
        bmap->end = bmap->real_end;
        c_end = cmap->end;
        cmap->end = cmap->real_end;
-       n = 0;
-       ratio = 1 << fs->cluster_ratio_bits;
        while (i < bmap->real_end) {
-               if (ext2fs_test_block_bitmap2(bmap, i)) {
-                       ext2fs_mark_block_bitmap2(cmap, i);
-                       i += ratio - n;
-                       n = 0;
-                       continue;
-               }
-               i++; n++;
-               if (n >= ratio)
-                       n = 0;
+               retval = ext2fs_find_first_set_block_bitmap2(gen_bmap,
+                                               i, bmap->real_end, &next);
+               if (retval)
+                       break;
+               ext2fs_mark_block_bitmap2(gen_cmap, next);
+               i = EXT2FS_C2B(fs, EXT2FS_B2C(fs, next) + 1);
        }
        bmap->end = b_end;
        cmap->end = c_end;
-       ext2fs_free_block_bitmap(bmap);
-       *bitmap = cmap;
+       ext2fs_free_block_bitmap(gen_bmap);
+       *bitmap = (ext2fs_block_bitmap) cmap;
        return 0;
 }
 
 errcode_t ext2fs_find_first_zero_generic_bmap(ext2fs_generic_bitmap bitmap,
                                              __u64 start, __u64 end, __u64 *out)
 {
+       ext2fs_generic_bitmap_64 bmap64 = (ext2fs_generic_bitmap_64) bitmap;
        __u64 cstart, cend, cout;
        errcode_t retval;
 
@@ -826,27 +860,27 @@ errcode_t ext2fs_find_first_zero_generic_bmap(ext2fs_generic_bitmap bitmap,
        if (!EXT2FS_IS_64_BITMAP(bitmap))
                return EINVAL;
 
-       cstart = start >> bitmap->cluster_bits;
-       cend = end >> bitmap->cluster_bits;
+       cstart = start >> bmap64->cluster_bits;
+       cend = end >> bmap64->cluster_bits;
 
-       if (cstart < bitmap->start || cend > bitmap->end || start > end) {
-               warn_bitmap(bitmap, EXT2FS_TEST_ERROR, start);
+       if (cstart < bmap64->start || cend > bmap64->end || start > end) {
+               warn_bitmap(bmap64, EXT2FS_TEST_ERROR, start);
                return EINVAL;
        }
 
-       if (bitmap->bitmap_ops->find_first_zero) {
-               retval = bitmap->bitmap_ops->find_first_zero(bitmap, cstart,
+       if (bmap64->bitmap_ops->find_first_zero) {
+               retval = bmap64->bitmap_ops->find_first_zero(bmap64, cstart,
                                                             cend, &cout);
                if (retval)
                        return retval;
        found:
-               cout <<= bitmap->cluster_bits;
+               cout <<= bmap64->cluster_bits;
                *out = (cout >= start) ? cout : start;
                return 0;
        }
 
        for (cout = cstart; cout <= cend; cout++)
-               if (!bitmap->bitmap_ops->test_bmap(bitmap, cout))
+               if (!bmap64->bitmap_ops->test_bmap(bmap64, cout))
                        goto found;
 
        return ENOENT;
@@ -855,6 +889,7 @@ errcode_t ext2fs_find_first_zero_generic_bmap(ext2fs_generic_bitmap bitmap,
 errcode_t ext2fs_find_first_set_generic_bmap(ext2fs_generic_bitmap bitmap,
                                             __u64 start, __u64 end, __u64 *out)
 {
+       ext2fs_generic_bitmap_64 bmap64 = (ext2fs_generic_bitmap_64) bitmap;
        __u64 cstart, cend, cout;
        errcode_t retval;
 
@@ -880,28 +915,63 @@ errcode_t ext2fs_find_first_set_generic_bmap(ext2fs_generic_bitmap bitmap,
        if (!EXT2FS_IS_64_BITMAP(bitmap))
                return EINVAL;
 
-       cstart = start >> bitmap->cluster_bits;
-       cend = end >> bitmap->cluster_bits;
+       cstart = start >> bmap64->cluster_bits;
+       cend = end >> bmap64->cluster_bits;
 
-       if (cstart < bitmap->start || cend > bitmap->end || start > end) {
-               warn_bitmap(bitmap, EXT2FS_TEST_ERROR, start);
+       if (cstart < bmap64->start || cend > bmap64->end || start > end) {
+               warn_bitmap(bmap64, EXT2FS_TEST_ERROR, start);
                return EINVAL;
        }
 
-       if (bitmap->bitmap_ops->find_first_set) {
-               retval = bitmap->bitmap_ops->find_first_set(bitmap, cstart,
+       if (bmap64->bitmap_ops->find_first_set) {
+               retval = bmap64->bitmap_ops->find_first_set(bmap64, cstart,
                                                            cend, &cout);
                if (retval)
                        return retval;
        found:
-               cout <<= bitmap->cluster_bits;
+               cout <<= bmap64->cluster_bits;
                *out = (cout >= start) ? cout : start;
                return 0;
        }
 
        for (cout = cstart; cout <= cend; cout++)
-               if (bitmap->bitmap_ops->test_bmap(bitmap, cout))
+               if (bmap64->bitmap_ops->test_bmap(bmap64, cout))
                        goto found;
 
        return ENOENT;
 }
+
+errcode_t ext2fs_count_used_clusters(ext2_filsys fs, blk64_t start,
+                                    blk64_t end, blk64_t *out)
+{
+       blk64_t         next;
+       blk64_t         tot_set = 0;
+       errcode_t       retval;
+
+       while (start < end) {
+               retval = ext2fs_find_first_set_block_bitmap2(fs->block_map,
+                                                       start, end, &next);
+               if (retval) {
+                       if (retval == ENOENT)
+                               retval = 0;
+                       break;
+               }
+               start = next;
+
+               retval = ext2fs_find_first_zero_block_bitmap2(fs->block_map,
+                                                       start, end, &next);
+               if (retval == 0) {
+                       tot_set += next - start;
+                       start  = next + 1;
+               } else if (retval == ENOENT) {
+                       retval = 0;
+                       tot_set += end - start + 1;
+                       break;
+               } else
+                       break;
+       }
+
+       if (!retval)
+               *out = EXT2FS_NUM_B2C(fs, tot_set);
+       return retval;
+}
index 4c9c765..8cfaf6e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * get_pathname.c --- do directry/inode -> name translation
+ * get_pathname.c --- do directory/inode -> name translation
  *
  * Copyright (C) 1993, 1994, 1995 Theodore Ts'o.
  *
index 89c33d4..be06775 100644 (file)
@@ -71,8 +71,8 @@
 #define HAVE_GET_FILE_SIZE_EX 1
 #endif
 
-errcode_t ext2fs_get_device_size(const char *file, int blocksize,
-                                blk_t *retblocks)
+errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
+                                 blk64_t *retblocks)
 {
        HANDLE dev;
        PARTITION_INFORMATION pi;
@@ -151,9 +151,12 @@ errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
        if (fd < 0)
                return errno;
 
-#ifdef DKIOCGETBLOCKCOUNT      /* For Apple Darwin */
-       if (ioctl(fd, DKIOCGETBLOCKCOUNT, &size64) >= 0) {
-               *retblocks = size64 / (blocksize / 512);
+#if defined DKIOCGETBLOCKCOUNT && defined DKIOCGETBLOCKSIZE    /* For Apple Darwin */
+       unsigned int size;
+
+       if (ioctl(fd, DKIOCGETBLOCKCOUNT, &size64) >= 0 &&
+           ioctl(fd, DKIOCGETBLOCKSIZE, &size) >= 0) {
+               *retblocks = size64 * size / blocksize;
                goto out;
        }
 #endif
@@ -272,6 +275,8 @@ out:
        return rc;
 }
 
+#endif /* WIN32 */
+
 errcode_t ext2fs_get_device_size(const char *file, int blocksize,
                                 blk_t *retblocks)
 {
@@ -287,8 +292,6 @@ errcode_t ext2fs_get_device_size(const char *file, int blocksize,
        return 0;
 }
 
-#endif /* WIN32 */
-
 #ifdef DEBUG
 int main(int argc, char **argv)
 {
diff --git a/lib/ext2fs/hashmap.c b/lib/ext2fs/hashmap.c
new file mode 100644 (file)
index 0000000..ffe61ce
--- /dev/null
@@ -0,0 +1,101 @@
+#include "hashmap.h"
+#include <string.h>
+
+struct ext2fs_hashmap {
+       uint32_t size;
+       uint32_t(*hash)(const void *key, size_t len);
+       void(*free)(void*);
+       struct ext2fs_hashmap_entry *first;
+       struct ext2fs_hashmap_entry *last;
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+       struct ext2fs_hashmap_entry *entries[0];
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic pop
+#endif
+};
+
+uint32_t ext2fs_djb2_hash(const void *str, size_t size)
+{
+       int c;
+       const char *s = str;
+       uint32_t hash = 5381;
+
+       while (size-- > 0) {
+               c = *s++;
+               hash = ((hash << 5) + hash) + c;
+       }
+       return hash;
+}
+
+struct ext2fs_hashmap *ext2fs_hashmap_create(
+                               uint32_t(*hash_fct)(const void*, size_t),
+                               void(*free_fct)(void*), size_t size)
+{
+       struct ext2fs_hashmap *h = calloc(sizeof(struct ext2fs_hashmap) +
+                               sizeof(struct ext2fs_hashmap_entry) * size, 1);
+       h->size = size;
+       h->free = free_fct;
+       h->hash = hash_fct;
+       h->first = h->last = NULL;
+       return h;
+}
+
+void ext2fs_hashmap_add(struct ext2fs_hashmap *h, void *data, const void *key,
+                       size_t key_len)
+{
+       uint32_t hash = h->hash(key, key_len) % h->size;
+       struct ext2fs_hashmap_entry *e = malloc(sizeof(*e));
+
+       e->data = data;
+       e->key = key;
+       e->key_len = key_len;
+       e->next = h->entries[hash];
+       h->entries[hash] = e;
+
+       e->list_prev = NULL;
+       e->list_next = h->first;
+       if (h->first)
+               h->first->list_prev = e;
+       h->first = e;
+       if (!h->last)
+               h->last = e;
+}
+
+void *ext2fs_hashmap_lookup(struct ext2fs_hashmap *h, const void *key,
+                           size_t key_len)
+{
+       struct ext2fs_hashmap_entry *iter;
+       uint32_t hash = h->hash(key, key_len) % h->size;
+
+       for (iter = h->entries[hash]; iter; iter = iter->next)
+               if (iter->key_len == key_len && !memcmp(iter->key, key, key_len))
+                       return iter->data;
+       return NULL;
+}
+
+void *ext2fs_hashmap_iter_in_order(struct ext2fs_hashmap *h,
+                                  struct ext2fs_hashmap_entry **it)
+{
+       *it = *it ? (*it)->list_next : h->first;
+       return *it ? (*it)->data : NULL;
+}
+
+void ext2fs_hashmap_free(struct ext2fs_hashmap *h)
+{
+       size_t  i;
+
+       for (i = 0; i < h->size; ++i) {
+               struct ext2fs_hashmap_entry *it = h->entries[i];
+               while (it) {
+                       struct ext2fs_hashmap_entry *tmp = it->next;
+                       if (h->free)
+                               h->free(it->data);
+                       free(it);
+                       it = tmp;
+               }
+       }
+       free(h);
+}
diff --git a/lib/ext2fs/hashmap.h b/lib/ext2fs/hashmap.h
new file mode 100644 (file)
index 0000000..dcfa745
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef HASHMAP_H
+# define HASHMAP_H
+
+# include <stdlib.h>
+# include <stdint.h>
+
+#ifndef __GNUC_PREREQ
+#if defined(__GNUC__) && defined(__GNUC_MINOR__)
+#define __GNUC_PREREQ(maj, min) \
+       ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
+#define __GNUC_PREREQ(maj, min) 0
+#endif
+#endif
+
+struct ext2fs_hashmap;
+
+struct ext2fs_hashmap_entry {
+       void *data;
+       const void *key;
+       size_t key_len;
+       struct ext2fs_hashmap_entry *next;
+       struct ext2fs_hashmap_entry *list_next;
+       struct ext2fs_hashmap_entry *list_prev;
+};
+
+struct ext2fs_hashmap *ext2fs_hashmap_create(
+                               uint32_t(*hash_fct)(const void*, size_t),
+                               void(*free_fct)(void*), size_t size);
+void ext2fs_hashmap_add(struct ext2fs_hashmap *h, void *data, const void *key,
+                       size_t key_len);
+void *ext2fs_hashmap_lookup(struct ext2fs_hashmap *h, const void *key,
+                           size_t key_len);
+void *ext2fs_hashmap_iter_in_order(struct ext2fs_hashmap *h,
+                                  struct ext2fs_hashmap_entry **it);
+void ext2fs_hashmap_del(struct ext2fs_hashmap *h,
+                       struct ext2fs_hashmap_entry *e);
+void ext2fs_hashmap_free(struct ext2fs_hashmap *h);
+
+uint32_t ext2fs_djb2_hash(const void *str, size_t size);
+
+#endif /* !HASHMAP_H */
index 594b1cc..888a90b 100644 (file)
@@ -61,6 +61,7 @@ struct ext2_icount {
        char                    *tdb_fn;
        TDB_CONTEXT             *tdb;
 #endif
+       __u16                   *fullmap;
 };
 
 /*
@@ -88,11 +89,14 @@ void ext2fs_free_icount(ext2_icount_t icount)
        if (icount->tdb)
                tdb_close(icount->tdb);
        if (icount->tdb_fn) {
-               unlink(icount->tdb_fn);
+               (void) unlink(icount->tdb_fn);
                free(icount->tdb_fn);
        }
 #endif
 
+       if (icount->fullmap)
+               ext2fs_free_mem(&icount->fullmap);
+
        ext2fs_free_mem(&icount);
 }
 
@@ -107,6 +111,21 @@ static errcode_t alloc_icount(ext2_filsys fs, int flags, ext2_icount_t *ret)
        if (retval)
                return retval;
        memset(icount, 0, sizeof(struct ext2_icount));
+       icount->magic = EXT2_ET_MAGIC_ICOUNT;
+       icount->num_inodes = fs->super->s_inodes_count;
+
+       if ((flags & EXT2_ICOUNT_OPT_FULLMAP) &&
+           (flags & EXT2_ICOUNT_OPT_INCREMENT)) {
+               unsigned sz = sizeof(*icount->fullmap) * icount->num_inodes;
+
+               retval = ext2fs_get_mem(sz, &icount->fullmap);
+               /* If we can't allocate, fall back */
+               if (!retval) {
+                       memset(icount->fullmap, 0, sz);
+                       *ret = icount;
+                       return 0;
+               }
+       }
 
        retval = ext2fs_allocate_inode_bitmap(fs, "icount", &icount->single);
        if (retval)
@@ -120,9 +139,6 @@ static errcode_t alloc_icount(ext2_filsys fs, int flags, ext2_icount_t *ret)
        } else
                icount->multiple = 0;
 
-       icount->magic = EXT2_ET_MAGIC_ICOUNT;
-       icount->num_inodes = fs->super->s_inodes_count;
-
        *ret = icount;
        return 0;
 
@@ -256,6 +272,9 @@ errcode_t ext2fs_create_icount2(ext2_filsys fs, int flags, unsigned int size,
        if (retval)
                return retval;
 
+       if (icount->fullmap)
+               goto successout;
+
        if (size) {
                icount->size = size;
        } else {
@@ -295,6 +314,7 @@ errcode_t ext2fs_create_icount2(ext2_filsys fs, int flags, unsigned int size,
                icount->count = hint->count;
        }
 
+successout:
        *ret = icount;
        return 0;
 
@@ -433,6 +453,11 @@ static errcode_t set_inode_count(ext2_icount_t icount, ext2_ino_t ino,
                return 0;
        }
 #endif
+       if (icount->fullmap) {
+               icount->fullmap[ino] = icount_16_xlate(count);
+               return 0;
+       }
+
        el = get_icount_el(icount, ino, 1);
        if (!el)
                return EXT2_ET_NO_MEMORY;
@@ -463,6 +488,11 @@ static errcode_t get_inode_count(ext2_icount_t icount, ext2_ino_t ino,
                return 0;
        }
 #endif
+       if (icount->fullmap) {
+               *count = icount->fullmap[ino];
+               return 0;
+       }
+
        el = get_icount_el(icount, ino, 0);
        if (!el) {
                *count = 0;
@@ -504,14 +534,16 @@ errcode_t ext2fs_icount_fetch(ext2_icount_t icount, ext2_ino_t ino, __u16 *ret)
        if (!ino || (ino > icount->num_inodes))
                return EXT2_ET_INVALID_ARGUMENT;
 
-       if (ext2fs_test_inode_bitmap2(icount->single, ino)) {
-               *ret = 1;
-               return 0;
-       }
-       if (icount->multiple &&
-           !ext2fs_test_inode_bitmap2(icount->multiple, ino)) {
-               *ret = 0;
-               return 0;
+       if (!icount->fullmap) {
+               if (ext2fs_test_inode_bitmap2(icount->single, ino)) {
+                       *ret = 1;
+                       return 0;
+               }
+               if (icount->multiple &&
+                       !ext2fs_test_inode_bitmap2(icount->multiple, ino)) {
+                       *ret = 0;
+                       return 0;
+               }
        }
        get_inode_count(icount, ino, &val);
        *ret = icount_16_xlate(val);
@@ -528,7 +560,10 @@ errcode_t ext2fs_icount_increment(ext2_icount_t icount, ext2_ino_t ino,
        if (!ino || (ino > icount->num_inodes))
                return EXT2_ET_INVALID_ARGUMENT;
 
-       if (ext2fs_test_inode_bitmap2(icount->single, ino)) {
+       if (icount->fullmap) {
+               curr_value = icount_16_xlate(icount->fullmap[ino] + 1);
+               icount->fullmap[ino] = curr_value;
+       } else if (ext2fs_test_inode_bitmap2(icount->single, ino)) {
                /*
                 * If the existing count is 1, then we know there is
                 * no entry in the list.
@@ -585,6 +620,16 @@ errcode_t ext2fs_icount_decrement(ext2_icount_t icount, ext2_ino_t ino,
 
        EXT2_CHECK_MAGIC(icount, EXT2_ET_MAGIC_ICOUNT);
 
+       if (icount->fullmap) {
+               if (!icount->fullmap[ino])
+                       return EXT2_ET_INVALID_ARGUMENT;
+
+               curr_value = --icount->fullmap[ino];
+               if (ret)
+                       *ret = icount_16_xlate(curr_value);
+               return 0;
+       }
+
        if (ext2fs_test_inode_bitmap2(icount->single, ino)) {
                ext2fs_unmark_inode_bitmap2(icount->single, ino);
                if (icount->multiple)
@@ -626,6 +671,9 @@ errcode_t ext2fs_icount_store(ext2_icount_t icount, ext2_ino_t ino,
 
        EXT2_CHECK_MAGIC(icount, EXT2_ET_MAGIC_ICOUNT);
 
+       if (icount->fullmap)
+               return set_inode_count(icount, ino, count);
+
        if (count == 1) {
                ext2fs_mark_inode_bitmap2(icount->single, ino);
                if (icount->multiple)
index b643cc6..586227f 100644 (file)
@@ -61,19 +61,20 @@ static int check_zero_block(char *buf, int blocksize)
 
 errcode_t ext2fs_image_inode_write(ext2_filsys fs, int fd, int flags)
 {
-       unsigned int    group, left, c, d;
+       dgrp_t          group;
+       ssize_t         left, c, d;
        char            *buf, *cp;
        blk64_t         blk;
        ssize_t         actual;
        errcode_t       retval;
-       off_t           r;
+       ext2_loff_t     r;
 
        buf = malloc(fs->blocksize * BUF_BLOCKS);
        if (!buf)
                return ENOMEM;
 
        for (group = 0; group < fs->group_desc_count; group++) {
-               blk = ext2fs_inode_table_loc(fs, (unsigned)group);
+               blk = ext2fs_inode_table_loc(fs, group);
                if (!blk) {
                        retval = EXT2_ET_MISSING_INODE_TABLE;
                        goto errout;
@@ -98,7 +99,8 @@ errcode_t ext2fs_image_inode_write(ext2_filsys fs, int fd, int flags)
                                        blk++;
                                        left--;
                                        cp += fs->blocksize;
-                                       r = lseek(fd, fs->blocksize, SEEK_CUR);
+                                       r = ext2fs_llseek(fd, fs->blocksize,
+                                                         SEEK_CUR);
                                        if (r < 0) {
                                                retval = errno;
                                                goto errout;
@@ -106,23 +108,25 @@ errcode_t ext2fs_image_inode_write(ext2_filsys fs, int fd, int flags)
                                        continue;
                                }
                                /* Find non-zero blocks */
-                               for (d=1; d < c; d++) {
-                                       if (check_zero_block(cp + d*fs->blocksize, fs->blocksize))
+                               for (d = 1; d < c; d++) {
+                                       if (check_zero_block(cp +
+                                                            d * fs->blocksize,
+                                                            fs->blocksize))
                                                break;
                                }
                        skip_sparse:
-                               actual = write(fd, cp, fs->blocksize * d);
+                               actual = write(fd, cp, d * fs->blocksize);
                                if (actual == -1) {
                                        retval = errno;
                                        goto errout;
                                }
-                               if (actual != (ssize_t) (fs->blocksize * d)) {
+                               if (actual != d * fs->blocksize) {
                                        retval = EXT2_ET_SHORT_WRITE;
                                        goto errout;
                                }
                                blk += d;
                                left -= d;
-                               cp += fs->blocksize * d;
+                               cp += d * fs->blocksize;
                                c -= d;
                        }
                }
@@ -140,7 +144,8 @@ errout:
 errcode_t ext2fs_image_inode_read(ext2_filsys fs, int fd,
                                  int flags EXT2FS_ATTR((unused)))
 {
-       unsigned int    group, c, left;
+       dgrp_t          group;
+       ssize_t         c, left;
        char            *buf;
        blk64_t         blk;
        ssize_t         actual;
@@ -151,7 +156,7 @@ errcode_t ext2fs_image_inode_read(ext2_filsys fs, int fd,
                return ENOMEM;
 
        for (group = 0; group < fs->group_desc_count; group++) {
-               blk = ext2fs_inode_table_loc(fs, (unsigned)group);
+               blk = ext2fs_inode_table_loc(fs, group);
                if (!blk) {
                        retval = EXT2_ET_MISSING_INODE_TABLE;
                        goto errout;
@@ -166,7 +171,7 @@ errcode_t ext2fs_image_inode_read(ext2_filsys fs, int fd,
                                retval = errno;
                                goto errout;
                        }
-                       if (actual != (ssize_t) (fs->blocksize * c)) {
+                       if (actual != fs->blocksize * c) {
                                retval = EXT2_ET_SHORT_READ;
                                goto errout;
                        }
@@ -194,6 +199,14 @@ errcode_t ext2fs_image_super_write(ext2_filsys fs, int fd,
        char            *buf, *cp;
        ssize_t         actual;
        errcode_t       retval;
+#ifdef WORDS_BIGENDIAN
+       unsigned int    groups_per_block;
+       struct          ext2_group_desc *gdp;
+       int             j;
+#endif
+
+       if (fs->group_desc == NULL)
+               return EXT2_ET_NO_GDESC;
 
        buf = malloc(fs->blocksize);
        if (!buf)
@@ -203,7 +216,17 @@ errcode_t ext2fs_image_super_write(ext2_filsys fs, int fd,
         * Write out the superblock
         */
        memset(buf, 0, fs->blocksize);
+#ifdef WORDS_BIGENDIAN
+       /*
+        * We're writing out superblock so let's convert
+        * it to little endian and then back if needed
+        */
+       ext2fs_swap_super(fs->super);
+       memcpy(buf, fs->super, SUPERBLOCK_SIZE);
+       ext2fs_swap_super(fs->super);
+#else
        memcpy(buf, fs->super, SUPERBLOCK_SIZE);
+#endif
        actual = write(fd, buf, fs->blocksize);
        if (actual == -1) {
                retval = errno;
@@ -217,13 +240,39 @@ errcode_t ext2fs_image_super_write(ext2_filsys fs, int fd,
        /*
         * Now write out the block group descriptors
         */
+
        cp = (char *) fs->group_desc;
-       actual = write(fd, cp, fs->blocksize * fs->desc_blocks);
+
+#ifdef WORDS_BIGENDIAN
+       /*
+        * Convert group descriptors to little endian and back
+        * if needed
+        */
+       groups_per_block = EXT2_DESC_PER_BLOCK(fs->super);
+       for (j=0; j < groups_per_block*fs->desc_blocks; j++) {
+               gdp = ext2fs_group_desc(fs, fs->group_desc, j);
+               if (gdp)
+                       ext2fs_swap_group_desc2(fs, gdp);
+       }
+#endif
+
+       actual = write(fd, cp, (ssize_t)fs->blocksize * fs->desc_blocks);
+
+
+#ifdef WORDS_BIGENDIAN
+       groups_per_block = EXT2_DESC_PER_BLOCK(fs->super);
+       for (j=0; j < groups_per_block*fs->desc_blocks; j++) {
+               gdp = ext2fs_group_desc(fs, fs->group_desc, j);
+               if (gdp)
+                       ext2fs_swap_group_desc2(fs, gdp);
+       }
+#endif
+
        if (actual == -1) {
                retval = errno;
                goto errout;
        }
-       if (actual != (ssize_t) (fs->blocksize * fs->desc_blocks)) {
+       if (actual != (ssize_t)fs->blocksize * fs->desc_blocks) {
                retval = EXT2_ET_SHORT_WRITE;
                goto errout;
        }
@@ -245,7 +294,7 @@ errcode_t ext2fs_image_super_read(ext2_filsys fs, int fd,
        ssize_t         actual, size;
        errcode_t       retval;
 
-       size = fs->blocksize * (fs->group_desc_count + 1);
+       size = (ssize_t)fs->blocksize * (fs->group_desc_count + 1);
        buf = malloc(size);
        if (!buf)
                return ENOMEM;
@@ -269,7 +318,7 @@ errcode_t ext2fs_image_super_read(ext2_filsys fs, int fd,
        memcpy(fs->super, buf, SUPERBLOCK_SIZE);
 
        memcpy(fs->group_desc, buf + fs->blocksize,
-              fs->blocksize * fs->group_desc_count);
+              (ssize_t)fs->blocksize * fs->group_desc_count);
 
        retval = 0;
 
@@ -298,7 +347,8 @@ errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags)
                }
                bmap = fs->inode_map;
                itr = 1;
-               cnt = EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count;
+               cnt = (__u64)EXT2_INODES_PER_GROUP(fs->super) *
+                       fs->group_desc_count;
                size = (EXT2_INODES_PER_GROUP(fs->super) / 8);
        } else {
                if (!fs->block_map) {
@@ -308,8 +358,8 @@ errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags)
                }
                bmap = fs->block_map;
                itr = fs->super->s_first_data_block;
-               cnt = EXT2_GROUPS_TO_BLOCKS(fs->super, fs->group_desc_count);
-               size = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
+               cnt = EXT2_GROUPS_TO_CLUSTERS(fs->super, fs->group_desc_count);
+               size = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8;
        }
        total_size = size * fs->group_desc_count;
 
@@ -373,7 +423,8 @@ errcode_t ext2fs_image_bitmap_read(ext2_filsys fs, int fd, int flags)
                }
                bmap = fs->inode_map;
                itr = 1;
-               cnt = EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count;
+               cnt = (__u64)EXT2_INODES_PER_GROUP(fs->super) *
+                       fs->group_desc_count;
                size = (EXT2_INODES_PER_GROUP(fs->super) / 8);
        } else {
                if (!fs->block_map) {
index 32f4321..edd692b 100644 (file)
 #include "ext2_fs.h"
 #include "ext2fs.h"
 
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
 #if defined(__linux__)    &&   defined(EXT2_OS_LINUX)
 #define CREATOR_OS EXT2_OS_LINUX
 #else
@@ -103,6 +107,7 @@ errcode_t ext2fs_initialize(const char *name, int flags,
        char            *buf = 0;
        char            c;
        double          reserved_ratio;
+       char            *time_env;
 
        if (!param || !ext2fs_blocks_count(param))
                return EXT2_ET_INVALID_ARGUMENT;
@@ -119,11 +124,17 @@ errcode_t ext2fs_initialize(const char *name, int flags,
 #ifdef WORDS_BIGENDIAN
        fs->flags |= EXT2_FLAG_SWAP_BYTES;
 #endif
+
+       time_env = getenv("E2FSPROGS_FAKE_TIME");
+       if (time_env)
+               fs->now = strtoul(time_env, NULL, 0);
+
        io_flags = IO_FLAG_RW;
        if (flags & EXT2_FLAG_EXCLUSIVE)
                io_flags |= IO_FLAG_EXCLUSIVE;
        if (flags & EXT2_FLAG_DIRECT_IO)
                io_flags |= IO_FLAG_DIRECT_IO;
+       io_flags |= O_BINARY;
        retval = manager->open(name, io_flags, &fs->io);
        if (retval)
                goto cleanup;
@@ -175,6 +186,13 @@ errcode_t ext2fs_initialize(const char *name, int flags,
        set_field(s_flags, 0);
        assign_field(s_backup_bgs[0]);
        assign_field(s_backup_bgs[1]);
+
+       assign_field(s_encoding);
+       assign_field(s_encoding_flags);
+
+       if (ext2fs_has_feature_casefold(param))
+               fs->encoding = ext2fs_load_nls_table(param->s_encoding);
+
        if (super->s_feature_incompat & ~EXT2_LIB_FEATURE_INCOMPAT_SUPP) {
                retval = EXT2_ET_UNSUPP_FEATURE;
                goto cleanup;
@@ -284,7 +302,7 @@ retry:
        i = fs->blocksize >= 4096 ? 1 : 4096 / fs->blocksize;
 
        if (ext2fs_has_feature_64bit(super) &&
-           (ext2fs_blocks_count(super) / i) > (1ULL << 32))
+           (ext2fs_blocks_count(super) / i) >= (1ULL << 32))
                set_field(s_inodes_count, ~0U);
        else
                set_field(s_inodes_count, ext2fs_blocks_count(super) / i);
@@ -371,6 +389,13 @@ ipg_retry:
                retval = EXT2_ET_RES_GDT_BLOCKS;
                goto cleanup;
        }
+       /* Enable meta_bg if we'd lose more than 3/4 of a BG to GDT blocks. */
+       if (super->s_reserved_gdt_blocks + fs->desc_blocks >
+           super->s_blocks_per_group * 3 / 4) {
+               ext2fs_set_feature_meta_bg(fs->super);
+               ext2fs_clear_feature_resize_inode(fs->super);
+               set_field(s_reserved_gdt_blocks, 0);
+       }
 
        /*
         * Calculate the maximum number of bookkeeping blocks per
@@ -381,11 +406,6 @@ ipg_retry:
        overhead = (int) (3 + fs->inode_blocks_per_group +
                          super->s_reserved_gdt_blocks);
 
-       /* Enable meta_bg if we'd lose more than 3/4 of a BG to GDT blocks. */
-       if (super->s_reserved_gdt_blocks + fs->desc_blocks >
-           super->s_blocks_per_group * 3 / 4)
-               ext2fs_set_feature_meta_bg(fs->super);
-
        if (ext2fs_has_feature_meta_bg(fs->super))
                overhead++;
        else
@@ -555,3 +575,97 @@ cleanup:
        ext2fs_free(fs);
        return retval;
 }
+
+errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs, int super_only)
+{
+       blk64_t         blk;
+       ext2_ino_t      ino;
+       unsigned int    group = 0;
+       unsigned int    count = 0;
+       int             total_free = 0;
+       int             group_free = 0;
+       int             last_allocated = 0;
+       int             uninit;
+
+       /*
+        * First calculate the block statistics
+        */
+       uninit = 1;
+       for (blk = fs->super->s_first_data_block;
+            blk < ext2fs_blocks_count(fs->super); blk++) {
+               if (!ext2fs_fast_test_block_bitmap2(fs->block_map, blk)) {
+                       group_free++;
+                       total_free++;
+               } else {
+                       uninit = 0;
+               }
+               count++;
+               if ((count == fs->super->s_blocks_per_group) ||
+                   (blk == ext2fs_blocks_count(fs->super)-1)) {
+                       ext2fs_bg_free_blocks_count_set(fs, group,
+                                                       group_free);
+                       if (!super_only) {
+                               if (uninit && blk !=
+                                       ext2fs_blocks_count(fs->super) - 1)
+                                       ext2fs_bg_flags_set(fs, group,
+                                                       EXT2_BG_BLOCK_UNINIT);
+                               else
+                                       ext2fs_bg_flags_clear(fs, group,
+                                                       EXT2_BG_BLOCK_UNINIT);
+                       }
+                       count = 0;
+                       group_free = 0;
+                       uninit = 1;
+                       group++;
+               }
+       }
+       total_free = EXT2FS_C2B(fs, total_free);
+       ext2fs_free_blocks_count_set(fs->super, total_free);
+
+       /*
+        * Next, calculate the inode statistics
+        */
+       group_free = 0;
+       total_free = 0;
+       last_allocated = 0;
+       count = 0;
+       group = 0;
+
+       /* Protect loop from wrap-around if s_inodes_count maxed */
+       for (ino = 1; ino <= fs->super->s_inodes_count && ino > 0; ino++) {
+               if (!ext2fs_test_inode_bitmap2(fs->inode_map, ino)) {
+                       group_free++;
+                       total_free++;
+               } else {
+                       last_allocated = ino;
+               }
+               count++;
+               if ((count == fs->super->s_inodes_per_group) ||
+                   (ino == fs->super->s_inodes_count)) {
+                       if (!super_only) {
+                               if (last_allocated) {
+                                       ext2fs_bg_flags_clear(fs, group,
+                                               EXT2_BG_INODE_UNINIT);
+                                       ext2fs_bg_itable_unused_set(fs, group,
+                                               fs->super->s_inodes_per_group -
+                                               (last_allocated %
+                                               fs->super->s_inodes_per_group));
+                               } else {
+                                       ext2fs_bg_flags_set(fs, group,
+                                               EXT2_BG_INODE_UNINIT);
+                                       ext2fs_bg_itable_unused_set(fs, group,
+                                                                       0);
+                               }
+                               ext2fs_bg_free_inodes_count_set(fs, group,
+                                                               group_free);
+                       }
+                       group++;
+                       count = 0;
+                       group_free = 0;
+                       last_allocated = 0;
+               }
+       }
+       fs->super->s_free_inodes_count = total_free;
+       ext2fs_mark_super_dirty(fs);
+       return 0;
+}
index c0fc4ed..b62fb67 100644 (file)
@@ -42,11 +42,6 @@ static errcode_t ext2fs_inline_data_ea_set(struct ext2_inline_data *data)
 
        retval = ext2fs_xattr_set(handle, "system.data",
                                  data->ea_data, data->ea_size);
-       if (retval)
-               goto err;
-
-       retval = ext2fs_xattrs_write(handle);
-
 err:
        (void) ext2fs_xattrs_close(&handle);
        return retval;
@@ -270,11 +265,6 @@ errcode_t ext2fs_inline_data_ea_remove(ext2_filsys fs, ext2_ino_t ino)
                goto err;
 
        retval = ext2fs_xattr_remove(handle, "system.data");
-       if (retval)
-               goto err;
-
-       retval = ext2fs_xattrs_write(handle);
-
 err:
        (void) ext2fs_xattrs_close(&handle);
        return retval;
@@ -321,7 +311,7 @@ static errcode_t ext2fs_inline_data_convert_dir(ext2_filsys fs, ext2_ino_t ino,
        dir->name[1] = '.';
 
        /*
-        * Ajust the last rec_len
+        * Adjust the last rec_len
         */
        offset = EXT2_DIR_REC_LEN(1) + EXT2_DIR_REC_LEN(2);
        dir = (struct ext2_dir_entry *) (bbuf + offset);
@@ -545,7 +535,10 @@ errcode_t ext2fs_inline_data_set(ext2_filsys fs, ext2_ino_t ino,
                                 void *buf, size_t size)
 {
        struct ext2_inode inode_buf;
-       struct ext2_inline_data data;
+       struct ext2_inline_data data = {
+               .fs = fs,
+               .ino = ino,
+       };
        errcode_t retval;
        size_t free_ea_size, existing_size, free_inode_size;
 
@@ -558,37 +551,34 @@ errcode_t ext2fs_inline_data_set(ext2_filsys fs, ext2_ino_t ino,
 
        if (size <= EXT4_MIN_INLINE_DATA_SIZE) {
                memcpy((void *)inode->i_block, buf, size);
-               return ext2fs_write_inode(fs, ino, inode);
-       }
-
-       retval = ext2fs_xattr_inode_max_size(fs, ino, &free_ea_size);
-       if (retval)
-               return retval;
+       } else {
+               retval = ext2fs_xattr_inode_max_size(fs, ino, &free_ea_size);
+               if (retval)
+                       return retval;
 
-       retval = ext2fs_inline_data_size(fs, ino, &existing_size);
-       if (retval)
-               return retval;
+               retval = ext2fs_inline_data_size(fs, ino, &existing_size);
+               if (retval)
+                       return retval;
 
-       if (existing_size < EXT4_MIN_INLINE_DATA_SIZE)
-               free_inode_size = EXT4_MIN_INLINE_DATA_SIZE - existing_size;
-       else
-               free_inode_size = 0;
+               if (existing_size < EXT4_MIN_INLINE_DATA_SIZE) {
+                       free_inode_size = EXT4_MIN_INLINE_DATA_SIZE -
+                                         existing_size;
+               } else {
+                       free_inode_size = 0;
+               }
 
-       if (size != existing_size &&
-           size > existing_size + free_ea_size + free_inode_size)
-               return EXT2_ET_INLINE_DATA_NO_SPACE;
+               if (size != existing_size &&
+                   size > existing_size + free_ea_size + free_inode_size)
+                       return EXT2_ET_INLINE_DATA_NO_SPACE;
 
-       memcpy((void *)inode->i_block, buf, EXT4_MIN_INLINE_DATA_SIZE);
+               memcpy((void *)inode->i_block, buf, EXT4_MIN_INLINE_DATA_SIZE);
+               if (size > EXT4_MIN_INLINE_DATA_SIZE)
+                       data.ea_size = size - EXT4_MIN_INLINE_DATA_SIZE;
+               data.ea_data = (char *) buf + EXT4_MIN_INLINE_DATA_SIZE;
+       }
        retval = ext2fs_write_inode(fs, ino, inode);
        if (retval)
                return retval;
-       data.fs = fs;
-       data.ino = ino;
-       if (size > EXT4_MIN_INLINE_DATA_SIZE)
-               data.ea_size = size - EXT4_MIN_INLINE_DATA_SIZE;
-       else
-               data.ea_size = 0;
-       data.ea_data = (char *) buf + EXT4_MIN_INLINE_DATA_SIZE;
        return ext2fs_inline_data_ea_set(&data);
 }
 
@@ -613,7 +603,7 @@ static errcode_t file_test(ext2_filsys fs)
        /* create a new file */
        retval = ext2fs_new_inode(fs, 2, 010755, 0, &newfile);
        if (retval) {
-               com_err("file_test", retval, "while allocaing a new inode");
+               com_err("file_test", retval, "while allocating a new inode");
                return 1;
        }
 
@@ -623,7 +613,7 @@ static errcode_t file_test(ext2_filsys fs)
        inode.i_mode = LINUX_S_IFREG;
        retval = ext2fs_write_new_inode(fs, newfile, &inode);
        if (retval) {
-               com_err("file_test", retval, "while writting a new inode");
+               com_err("file_test", retval, "while writing a new inode");
                return 1;
        }
 
@@ -703,7 +693,7 @@ static errcode_t dir_test(ext2_filsys fs)
        const char *parent_name = "test";
        ext2_ino_t parent, dir, tmp;
        errcode_t retval;
-       char dirname[PATH_MAX];
+       char dirname[32];
        int i;
 
        retval = ext2fs_mkdir(fs, 11, 11, stub_name);
@@ -811,7 +801,7 @@ int main(int argc, char *argv[])
        retval = ext2fs_allocate_tables(fs);
        if (retval) {
                com_err("setup", retval,
-                       "while allocating tables for test filesysmte");
+                       "while allocating tables for test filesystem");
                exit(1);
        }
 
index ba7ad2c..c4377ee 100644 (file)
@@ -151,7 +151,7 @@ errcode_t ext2fs_open_inode_scan(ext2_filsys fs, int buffer_blocks,
         */
        if (fs->badblocks == 0) {
                /*
-                * Temporarly save fs->get_blocks and set it to zero,
+                * Temporarily save fs->get_blocks and set it to zero,
                 * for compatibility with old e2fsck's.
                 */
                save_get_blocks = fs->get_blocks;
@@ -179,6 +179,14 @@ errcode_t ext2fs_open_inode_scan(ext2_filsys fs, int buffer_blocks,
                                    EXT2_INODE_SCAN_DEFAULT_BUFFER_BLOCKS;
        scan->current_block = ext2fs_inode_table_loc(scan->fs,
                                                     scan->current_group);
+       if (scan->current_block &&
+           ((scan->current_block < fs->super->s_first_data_block) ||
+            (scan->current_block + fs->inode_blocks_per_group - 1 >=
+             ext2fs_blocks_count(fs->super)))) {
+               ext2fs_free_mem(&scan);
+               return EXT2_ET_GDESC_BAD_INODE_TABLE;
+       }
+
        scan->inodes_left = EXT2_INODES_PER_GROUP(scan->fs->super);
        scan->blocks_left = scan->fs->inode_blocks_per_group;
        if (ext2fs_has_group_desc_csum(fs)) {
@@ -288,7 +296,11 @@ static errcode_t get_next_blockgroup(ext2_inode_scan scan)
                         (fs->blocksize / scan->inode_size - 1)) *
                        scan->inode_size / fs->blocksize;
        }
-
+       if (scan->current_block &&
+           ((scan->current_block < fs->super->s_first_data_block) ||
+            (scan->current_block + fs->inode_blocks_per_group - 1 >=
+             ext2fs_blocks_count(fs->super))))
+               return EXT2_ET_GDESC_BAD_INODE_TABLE;
        return 0;
 }
 
@@ -297,6 +309,7 @@ errcode_t ext2fs_inode_scan_goto_blockgroup(ext2_inode_scan scan,
 {
        scan->current_group = group - 1;
        scan->groups_left = scan->fs->group_desc_count - group;
+       scan->bad_block_ptr = 0;
        return get_next_blockgroup(scan);
 }
 
@@ -320,6 +333,12 @@ static errcode_t check_for_inode_bad_blocks(ext2_inode_scan scan,
        if (blk == 0)
                return 0;
 
+       /* Make sure bad_block_ptr is still valid */
+       if (scan->bad_block_ptr >= bb->num) {
+               scan->scan_flags &= ~EXT2_SF_CHK_BADBLOCKS;
+               return 0;
+       }
+
        /*
         * If the current block is greater than the bad block listed
         * in the bad block list, then advance the pointer until this
@@ -630,7 +649,8 @@ errcode_t ext2fs_get_next_inode_full(ext2_inode_scan scan, ext2_ino_t *ino,
         * need to read in more blocks.
         */
        if (scan->bytes_left < scan->inode_size) {
-               memcpy(scan->temp_buffer, scan->ptr, scan->bytes_left);
+               if (scan->bytes_left)
+                       memcpy(scan->temp_buffer, scan->ptr, scan->bytes_left);
                extra_bytes = scan->bytes_left;
 
                retval = get_next_blocks(scan);
@@ -727,11 +747,13 @@ errcode_t ext2fs_get_next_inode(ext2_inode_scan scan, ext2_ino_t *ino,
 /*
  * Functions to read and write a single inode.
  */
-errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
-                                struct ext2_inode * inode, int bufsize)
+errcode_t ext2fs_read_inode2(ext2_filsys fs, ext2_ino_t ino,
+                            struct ext2_inode * inode, int bufsize,
+                            int flags)
 {
        blk64_t         block_nr;
-       unsigned long   group, block, offset;
+       dgrp_t          group;
+       unsigned long   block, offset;
        char            *ptr;
        errcode_t       retval;
        unsigned        i;
@@ -769,7 +791,7 @@ errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
        }
        if (fs->flags & EXT2_FLAG_IMAGE_FILE) {
                inodes_per_block = fs->blocksize / EXT2_INODE_SIZE(fs->super);
-               block_nr = fs->image_header->offset_inode / fs->blocksize;
+               block_nr = ext2fs_le32_to_cpu(fs->image_header->offset_inode) / fs->blocksize;
                block_nr += (ino - 1) / inodes_per_block;
                offset = ((ino - 1) % inodes_per_block) *
                        EXT2_INODE_SIZE(fs->super);
@@ -781,10 +803,14 @@ errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
                offset = ((ino - 1) % EXT2_INODES_PER_GROUP(fs->super)) *
                        EXT2_INODE_SIZE(fs->super);
                block = offset >> EXT2_BLOCK_SIZE_BITS(fs->super);
-               if (!ext2fs_inode_table_loc(fs, (unsigned) group))
+               block_nr = ext2fs_inode_table_loc(fs, group);
+               if (!block_nr)
                        return EXT2_ET_MISSING_INODE_TABLE;
-               block_nr = ext2fs_inode_table_loc(fs, group) +
-                       block;
+               if ((block_nr < fs->super->s_first_data_block) ||
+                   (block_nr + fs->inode_blocks_per_group - 1 >=
+                    ext2fs_blocks_count(fs->super)))
+                       return EXT2_ET_GDESC_BAD_INODE_TABLE;
+               block_nr += block;
                io = fs->io;
        }
        offset &= (EXT2_BLOCK_SIZE(fs->super) - 1);
@@ -832,24 +858,33 @@ errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
        }
        memcpy(inode, iptr, (bufsize > length) ? length : bufsize);
 
-       if (!(fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) && fail_csum)
+       if (!(fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) &&
+           !(flags & READ_INODE_NOCSUM) && fail_csum)
                return EXT2_ET_INODE_CSUM_INVALID;
 
        return 0;
 }
 
+errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
+                                struct ext2_inode * inode, int bufsize)
+{
+       return ext2fs_read_inode2(fs, ino, inode, bufsize, 0);
+}
+
 errcode_t ext2fs_read_inode(ext2_filsys fs, ext2_ino_t ino,
                            struct ext2_inode * inode)
 {
-       return ext2fs_read_inode_full(fs, ino, inode,
-                                       sizeof(struct ext2_inode));
+       return ext2fs_read_inode2(fs, ino, inode,
+                                 sizeof(struct ext2_inode), 0);
 }
 
-errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
-                                 struct ext2_inode * inode, int bufsize)
+errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino,
+                             struct ext2_inode * inode, int bufsize,
+                             int flags)
 {
        blk64_t block_nr;
-       unsigned long group, block, offset;
+       dgrp_t group;
+       unsigned long block, offset;
        errcode_t retval = 0;
        struct ext2_inode_large *w_inode;
        char *ptr;
@@ -875,13 +910,9 @@ errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
                return retval;
 
        if (bufsize < length) {
-               int old_flags = fs->flags;
-               fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
-               retval = ext2fs_read_inode_full(fs, ino,
-                                               (struct ext2_inode *)w_inode,
-                                               length);
-               fs->flags = (old_flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) |
-                           (fs->flags & ~EXT2_FLAG_IGNORE_CSUM_ERRORS);
+               retval = ext2fs_read_inode2(fs, ino,
+                                           (struct ext2_inode *)w_inode,
+                                           length, READ_INODE_NOCSUM);
                if (retval)
                        goto errout;
        }
@@ -911,19 +942,28 @@ errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
        ext2fs_swap_inode_full(fs, w_inode, w_inode, 1, length);
 #endif
 
-       retval = ext2fs_inode_csum_set(fs, ino, w_inode);
-       if (retval)
-               goto errout;
+       if ((flags & WRITE_INODE_NOCSUM) == 0) {
+               retval = ext2fs_inode_csum_set(fs, ino, w_inode);
+               if (retval)
+                       goto errout;
+       }
 
        group = (ino - 1) / EXT2_INODES_PER_GROUP(fs->super);
        offset = ((ino - 1) % EXT2_INODES_PER_GROUP(fs->super)) *
                EXT2_INODE_SIZE(fs->super);
        block = offset >> EXT2_BLOCK_SIZE_BITS(fs->super);
-       if (!ext2fs_inode_table_loc(fs, (unsigned) group)) {
+       block_nr = ext2fs_inode_table_loc(fs, (unsigned) group);
+       if (!block_nr) {
                retval = EXT2_ET_MISSING_INODE_TABLE;
                goto errout;
        }
-       block_nr = ext2fs_inode_table_loc(fs, (unsigned) group) + block;
+       if ((block_nr < fs->super->s_first_data_block) ||
+           (block_nr + fs->inode_blocks_per_group - 1 >=
+            ext2fs_blocks_count(fs->super))) {
+               retval = EXT2_ET_GDESC_BAD_INODE_TABLE;
+               goto errout;
+       }
+       block_nr += block;
 
        offset &= (EXT2_BLOCK_SIZE(fs->super) - 1);
 
@@ -963,11 +1003,17 @@ errout:
        return retval;
 }
 
+errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
+                                 struct ext2_inode * inode, int bufsize)
+{
+       return ext2fs_write_inode2(fs, ino, inode, bufsize, 0);
+}
+
 errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
                             struct ext2_inode *inode)
 {
-       return ext2fs_write_inode_full(fs, ino, inode,
-                                      sizeof(struct ext2_inode));
+       return ext2fs_write_inode2(fs, ino, inode,
+                                  sizeof(struct ext2_inode), 0);
 }
 
 /*
index f3d94c8..d7474a6 100644 (file)
@@ -215,9 +215,9 @@ static errcode_t inode_read_blk64(io_channel channel,
        data = (struct inode_private_data *) channel->private_data;
        EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_INODE_IO_CHANNEL);
 
-       if ((retval = ext2fs_file_lseek(data->file,
-                                       block * channel->block_size,
-                                       EXT2_SEEK_SET, 0)))
+       if ((retval = ext2fs_file_llseek(data->file,
+                               (ext2_off64_t)(block * channel->block_size),
+                               EXT2_SEEK_SET, 0)))
                return retval;
 
        count = (count < 0) ? -count : (count * channel->block_size);
@@ -241,9 +241,9 @@ static errcode_t inode_write_blk64(io_channel channel,
        data = (struct inode_private_data *) channel->private_data;
        EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_INODE_IO_CHANNEL);
 
-       if ((retval = ext2fs_file_lseek(data->file,
-                                       block * channel->block_size,
-                                       EXT2_SEEK_SET, 0)))
+       if ((retval = ext2fs_file_llseek(data->file,
+                               (ext2_off64_t) (block * channel->block_size),
+                               EXT2_SEEK_SET, 0)))
                return retval;
 
        count = (count < 0) ? -count : (count * channel->block_size);
index bcac0f1..46d330d 100644 (file)
 #if HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
+#ifdef HAVE_SYS_SYSMACROS_H
+#include <sys/sysmacros.h>
+#endif
 
 #include "ext2_fs.h"
 #include "ext2fs.h"
+#include "ext2fsP.h"
 
 #ifdef HAVE_SETMNTENT
 /*
@@ -63,7 +67,7 @@ static int check_loop_mounted(const char *mnt_fsname, dev_t mnt_rdev,
                                dev_t file_dev, ino_t file_ino)
 {
 #if defined(HAVE_LINUX_LOOP_H) && defined(HAVE_LINUX_MAJOR_H)
-       struct loop_info64 loopinfo;
+       struct loop_info64 loopinfo = {0, };
        int loop_fd, ret;
 
        if (major(mnt_rdev) == LOOP_MAJOR) {
@@ -112,7 +116,7 @@ static errcode_t check_mntent_file(const char *mtab_file, const char *file,
                return errno;
        }
        if (stat(file, &st_buf) == 0) {
-               if (S_ISBLK(st_buf.st_mode)) {
+               if (ext2fsP_is_disk_device(st_buf.st_mode)) {
 #ifndef __GNU__ /* The GNU hurd is broken with respect to stat devices */
                        file_rdev = st_buf.st_rdev;
 #endif /* __GNU__ */
@@ -124,10 +128,21 @@ static errcode_t check_mntent_file(const char *mtab_file, const char *file,
        while ((mnt = getmntent (f)) != NULL) {
                if (mnt->mnt_fsname[0] != '/')
                        continue;
-               if (strcmp(file, mnt->mnt_fsname) == 0)
+               if (stat(mnt->mnt_dir, &st_buf) != 0)
+                       continue;
+               if (strcmp(file, mnt->mnt_fsname) == 0) {
+                       if (file_rdev && (file_rdev != st_buf.st_dev)) {
+#ifdef DEBUG
+                               printf("Bogus entry in %s!  "
+                                      "(%s does not exist)\n",
+                                      mtab_file, mnt->mnt_dir);
+#endif /* DEBUG */
+                               continue;
+                       }
                        break;
+               }
                if (stat(mnt->mnt_fsname, &st_buf) == 0) {
-                       if (S_ISBLK(st_buf.st_mode)) {
+                       if (ext2fsP_is_disk_device(st_buf.st_mode)) {
 #ifndef __GNU__
                                if (file_rdev && (file_rdev == st_buf.st_rdev))
                                        break;
@@ -164,32 +179,6 @@ static errcode_t check_mntent_file(const char *mtab_file, const char *file,
 #endif /* __GNU__ */
                goto errout;
        }
-#ifndef __GNU__ /* The GNU hurd is deficient; what else is new? */
-       /* Validate the entry in case /etc/mtab is out of date */
-       /*
-        * We need to be paranoid, because some broken distributions
-        * (read: Slackware) don't initialize /etc/mtab before checking
-        * all of the non-root filesystems on the disk.
-        */
-       if (stat(mnt->mnt_dir, &st_buf) < 0) {
-               retval = errno;
-               if (retval == ENOENT) {
-#ifdef DEBUG
-                       printf("Bogus entry in %s!  (%s does not exist)\n",
-                              mtab_file, mnt->mnt_dir);
-#endif /* DEBUG */
-                       retval = 0;
-               }
-               goto errout;
-       }
-       if (file_rdev && (st_buf.st_dev != file_rdev)) {
-#ifdef DEBUG
-               printf("Bogus entry in %s!  (%s not mounted on %s)\n",
-                      mtab_file, file, mnt->mnt_dir);
-#endif /* DEBUG */
-               goto errout;
-       }
-#endif /* __GNU__ */
        *mount_flags = EXT2_MF_MOUNTED;
 
 #ifdef MNTOPT_RO
@@ -238,7 +227,7 @@ static errcode_t check_mntent(const char *file, int *mount_flags,
 #ifdef __linux__
        retval = check_mntent_file("/proc/mounts", file, mount_flags,
                                   mtpt, mtlen);
-       if (retval == 0 && (*mount_flags != 0))
+       if (retval == 0)
                return 0;
 #endif /* __linux__ */
 #if defined(MOUNTED) || defined(_PATH_MOUNTED)
@@ -307,7 +296,7 @@ static int is_swap_device(const char *file)
        file_dev = 0;
 #ifndef __GNU__ /* The GNU hurd is broken with respect to stat devices */
        if ((stat(file, &st_buf) == 0) &&
-           S_ISBLK(st_buf.st_mode))
+           ext2fsP_is_disk_device(st_buf.st_mode))
                file_dev = st_buf.st_rdev;
 #endif /* __GNU__ */
 
@@ -334,7 +323,7 @@ valid_first_line:
                }
 #ifndef __GNU__
                if (file_dev && (stat(buf, &st_buf) == 0) &&
-                   S_ISBLK(st_buf.st_mode) &&
+                   ext2fsP_is_disk_device(st_buf.st_mode) &&
                    file_dev == st_buf.st_rdev) {
                        ret++;
                        break;
@@ -363,6 +352,7 @@ errcode_t ext2fs_check_mount_point(const char *device, int *mount_flags,
                                  char *mtpt, int mtlen)
 {
        errcode_t       retval = 0;
+       int             busy = 0;
 
        if (getenv("EXT2FS_PRETEND_RO_MOUNT")) {
                *mount_flags = EXT2_MF_MOUNTED | EXT2_MF_READONLY;
@@ -377,6 +367,30 @@ errcode_t ext2fs_check_mount_point(const char *device, int *mount_flags,
                return 0;
        }
 
+#ifdef __linux__ /* This only works on Linux 2.6+ systems */
+       {
+               struct stat st_buf;
+
+               if (stat(device, &st_buf) == 0 &&
+                   ext2fsP_is_disk_device(st_buf.st_mode)) {
+                       int fd = open(device, O_RDONLY | O_EXCL);
+
+                       if (fd >= 0) {
+                               /*
+                                * The device is not busy so it's
+                                * definitelly not mounted. No need to
+                                * to perform any more checks.
+                                */
+                               close(fd);
+                               *mount_flags = 0;
+                               return 0;
+                       } else if (errno == EBUSY) {
+                               busy = 1;
+                       }
+               }
+       }
+#endif
+
        if (is_swap_device(device)) {
                *mount_flags = EXT2_MF_MOUNTED | EXT2_MF_SWAP;
                strncpy(mtpt, "<swap>", mtlen);
@@ -397,20 +411,8 @@ errcode_t ext2fs_check_mount_point(const char *device, int *mount_flags,
        if (retval)
                return retval;
 
-#ifdef __linux__ /* This only works on Linux 2.6+ systems */
-       {
-               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
+       if (busy)
+               *mount_flags |= EXT2_MF_BUSY;
 
        return 0;
 }
index 75a0596..96fe34a 100644 (file)
@@ -7,19 +7,33 @@
 #ifdef HAVE_NETINET_IN_H
 #include <netinet/in.h>
 #endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#else
 #include <arpa/inet.h>
+#endif
+#include <stdbool.h>
 
 #define printk printf
 #define KERN_ERR ""
 #define KERN_DEBUG ""
 
-#define READ 0
-#define WRITE 1
-
-#define cpu_to_be32(n) htonl(n)
-#define be32_to_cpu(n) ntohl(n)
-#define cpu_to_be16(n) htons(n)
-#define be16_to_cpu(n) ntohs(n)
+#define REQ_OP_READ 0
+#define REQ_OP_WRITE 1
+
+#define cpu_to_le16(x) ext2fs_cpu_to_le16(x)
+#define cpu_to_be16(x) ext2fs_cpu_to_be16(x)
+#define cpu_to_le32(x) ext2fs_cpu_to_le32(x)
+#define cpu_to_be32(x) ext2fs_cpu_to_be32(x)
+#define cpu_to_le64(x) ext2fs_cpu_to_le64(x)
+#define cpu_to_be64(x) ext2fs_cpu_to_be64(x)
+
+#define le16_to_cpu(x) ext2fs_le16_to_cpu(x)
+#define be16_to_cpu(x) ext2fs_be16_to_cpu(x)
+#define le32_to_cpu(x) ext2fs_le32_to_cpu(x)
+#define be32_to_cpu(x) ext2fs_be32_to_cpu(x)
+#define le64_to_cpu(x) ext2fs_le64_to_cpu(x)
+#define be64_to_cpu(x) ext2fs_be64_to_cpu(x)
 
 typedef unsigned int tid_t;
 typedef struct journal_s journal_t;
@@ -28,14 +42,14 @@ typedef struct kdev_s *kdev_t;
 struct buffer_head;
 struct inode;
 
+typedef unsigned int gfp_t;
 #define GFP_KERNEL     0
-#define JFS_TAG_SIZE32 JBD_TAG_SIZE32
-#define JFS_BARRIER    0
+#define GFP_NOFS       0
+#define __GFP_NOFAIL   0
+#define JBD2_TAG_SIZE32        JBD_TAG_SIZE32
+#define JBD2_BARRIER   0
 typedef __u64 u64;
-#define JFS_CRC32_CHKSUM       JBD2_CRC32_CHKSUM
-#define JFS_CRC32_CHKSUM_SIZE  JBD2_CRC32_CHKSUM_SIZE
 #define put_bh(x)      brelse(x)
-#define be64_to_cpu(x) ext2fs_be64_to_cpu(x)
 
 static inline __u32 jbd2_chksum(journal_t *j EXT2FS_ATTR((unused)),
                                __u32 crc, const void *address,
@@ -47,15 +61,21 @@ static inline __u32 jbd2_chksum(journal_t *j EXT2FS_ATTR((unused)),
 #define spin_lock_init(x)
 #define spin_lock(x)
 #define spin_unlock(x)
-#define yield()
 #define SLAB_HWCACHE_ALIGN     0
 #define SLAB_TEMPORARY         0
 #define KMEM_CACHE(__struct, __flags) kmem_cache_create(#__struct,\
                 sizeof(struct __struct), __alignof__(struct __struct),\
                 (__flags), NULL)
 
-#define blkdev_issue_flush(kdev, a, b) sync_blockdev(kdev)
+#define blkdev_issue_flush(kdev, a)    sync_blockdev(kdev)
 #define is_power_of_2(x)       ((x) != 0 && (((x) & ((x) - 1)) == 0))
+#define pr_emerg(fmt)
+#define pr_err(...)
+
+enum passtype {PASS_SCAN, PASS_REVOKE, PASS_REPLAY};
+
+#define JBD2_FC_REPLAY_STOP            0
+#define JBD2_FC_REPLAY_CONTINUE                1
 
 struct journal_s
 {
@@ -66,13 +86,16 @@ struct journal_s
        int                     j_format_version;
        unsigned long           j_head;
        unsigned long           j_tail;
+       unsigned long           j_fc_first;
+       unsigned long           j_fc_off;
+       unsigned long           j_fc_last;
        unsigned long           j_free;
        unsigned long           j_first, j_last;
        kdev_t                  j_dev;
        kdev_t                  j_fs_dev;
        int                     j_blocksize;
        unsigned int            j_blk_offset;
-       unsigned int            j_maxlen;
+       unsigned int            j_total_len;
        struct inode *          j_inode;
        tid_t                   j_tail_sequence;
        tid_t                   j_transaction_sequence;
@@ -81,15 +104,12 @@ struct journal_s
        struct jbd2_revoke_table_s *j_revoke_table[2];
        tid_t                   j_failed_commit;
        __u32                   j_csum_seed;
-};
+       int (*j_fc_replay_callback)(struct journal_s *journal,
+                                   struct buffer_head *bh,
+                                   enum passtype pass, int off,
+                                   tid_t expected_tid);
 
-#define J_ASSERT(assert)                                               \
-       do { if (!(assert)) {                                           \
-               printf ("Assertion failure in %s() at %s line %d: "     \
-                       "\"%s\"\n",                                     \
-                       __FUNCTION__, __FILE__, __LINE__, # assert);    \
-               fatal_error(e2fsck_global_ctx, 0);                      \
-       } } while (0)
+};
 
 #define is_journal_abort(x) 0
 
diff --git a/lib/ext2fs/jfs_dat.h b/lib/ext2fs/jfs_dat.h
deleted file mode 100644 (file)
index 62778c6..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * jfs_dat.h --- stripped down header file which only contains the JFS
- *     on-disk data structures
- */
-
-#define JFS_MAGIC_NUMBER 0xc03b3998U /* The first 4 bytes of /dev/random! */
-
-/*
- * On-disk structures
- */
-
-/*
- * Descriptor block types:
- */
-
-#define JFS_DESCRIPTOR_BLOCK   1
-#define JFS_COMMIT_BLOCK       2
-#define JFS_SUPERBLOCK         3
-
-/*
- * Standard header for all descriptor blocks:
- */
-typedef struct journal_header_s
-{
-       __u32           h_magic;
-       __u32           h_blocktype;
-       __u32           h_sequence;
-} journal_header_t;
-
-
-/*
- * The block tag: used to describe a single buffer in the journal
- */
-typedef struct journal_block_tag_s
-{
-       __u32           t_blocknr;      /* The on-disk block number */
-       __u32           t_flags;        /* See below */
-} journal_block_tag_t;
-
-/* Definitions for the journal tag flags word: */
-#define JFS_FLAG_ESCAPE                1       /* on-disk block is escaped */
-#define JFS_FLAG_SAME_UUID     2       /* block has same uuid as previous */
-#define JFS_FLAG_DELETED       4       /* block deleted by this transaction */
-#define JFS_FLAG_LAST_TAG      8       /* last tag in this descriptor block */
-
-
-/*
- * The journal superblock
- */
-typedef struct journal_superblock_s
-{
-       journal_header_t s_header;
-
-       /* Static information describing the journal */
-       __u32           s_blocksize;    /* journal device blocksize */
-       __u32           s_maxlen;       /* total blocks in journal file */
-       __u32           s_first;        /* first block of log information */
-
-       /* Dynamic information describing the current state of the log */
-       __u32           s_sequence;     /* first commit ID expected in log */
-       __u32           s_start;        /* blocknr of start of log */
-
-} journal_superblock_t;
-
index a7507b5..2978ccb 100644 (file)
@@ -24,7 +24,7 @@
 #define __FUNCTION__ ""
 #endif
 
-#define journal_oom_retry 1
+#define journal_oom_retry 0
 
 #ifdef __STDC__
 #ifdef CONFIG_JBD_DEBUG
@@ -73,13 +73,14 @@ extern void * __jbd_kmalloc (char *where, size_t size, int flags, int retry);
 #define jbd_rep_kmalloc(size, flags) \
        __jbd_kmalloc(__FUNCTION__, (size), (flags), 1)
 
-#define JFS_MIN_JOURNAL_BLOCKS 1024
+#define JBD2_MIN_JOURNAL_BLOCKS 1024
+#define JBD2_DEFAULT_FAST_COMMIT_BLOCKS 256
 
 /*
  * Internal structures used by the logging mechanism:
  */
 
-#define JFS_MAGIC_NUMBER 0xc03b3998U /* The first 4 bytes of /dev/random! */
+#define JBD2_MAGIC_NUMBER 0xc03b3998U /* The first 4 bytes of /dev/random! */
 
 /*
  * On-disk structures
@@ -89,20 +90,21 @@ extern void * __jbd_kmalloc (char *where, size_t size, int flags, int retry);
  * Descriptor block types:
  */
 
-#define JFS_DESCRIPTOR_BLOCK   1
-#define JFS_COMMIT_BLOCK       2
-#define JFS_SUPERBLOCK_V1      3
-#define JFS_SUPERBLOCK_V2      4
-#define JFS_REVOKE_BLOCK       5
+#define JBD2_DESCRIPTOR_BLOCK  1
+#define JBD2_COMMIT_BLOCK      2
+#define JBD2_SUPERBLOCK_V1     3
+#define JBD2_SUPERBLOCK_V2     4
+#define JBD2_REVOKE_BLOCK      5
+#define JBD2_FC_BLOCK          6
 
 /*
  * Standard header for all descriptor blocks:
  */
 typedef struct journal_header_s
 {
-       __u32           h_magic;
-       __u32           h_blocktype;
-       __u32           h_sequence;
+       __be32          h_magic;
+       __be32          h_blocktype;
+       __be32          h_sequence;
 } journal_header_t;
 
 /*
@@ -135,15 +137,15 @@ typedef struct journal_header_s
  * Checksum v1, v2, and v3 are mutually exclusive features.
  */
 struct commit_header {
-       __u32           h_magic;
-       __u32           h_blocktype;
-       __u32           h_sequence;
+       __be32          h_magic;
+       __be32          h_blocktype;
+       __be32          h_sequence;
        unsigned char   h_chksum_type;
        unsigned char   h_chksum_size;
        unsigned char   h_padding[2];
-       __u32           h_chksum[JBD2_CHECKSUM_BYTES];
-       __u64           h_commit_sec;
-       __u32           h_commit_nsec;
+       __be32          h_chksum[JBD2_CHECKSUM_BYTES];
+       __be64          h_commit_sec;
+       __be32          h_commit_nsec;
 };
 
 /*
@@ -151,22 +153,22 @@ struct commit_header {
  */
 typedef struct journal_block_tag3_s
 {
-       __u32           t_blocknr;      /* The on-disk block number */
-       __u32           t_flags;        /* See below */
-       __u32           t_blocknr_high; /* most-significant high 32bits. */
-       __u32           t_checksum;     /* crc32c(uuid+seq+block) */
+       __be32          t_blocknr;      /* The on-disk block number */
+       __be32          t_flags;        /* See below */
+       __be32          t_blocknr_high; /* most-significant high 32bits. */
+       __be32          t_checksum;     /* crc32c(uuid+seq+block) */
 } journal_block_tag3_t;
 
 typedef struct journal_block_tag_s
 {
-       __u32           t_blocknr;      /* The on-disk block number */
-       __u16           t_checksum;     /* truncated crc32c(uuid+seq+block) */
-       __u16           t_flags;        /* See below */
-       __u32           t_blocknr_high; /* most-significant high 32bits. */
+       __be32          t_blocknr;      /* The on-disk block number */
+       __be16          t_checksum;     /* truncated crc32c(uuid+seq+block) */
+       __be16          t_flags;        /* See below */
+       __be32          t_blocknr_high; /* most-significant high 32bits. */
 } journal_block_tag_t;
 
-/* Tail of descriptor block, for checksumming */
-struct journal_block_tail {
+/* Tail of descriptor or revoke block, for checksumming */
+struct jbd2_journal_block_tail {
        __be32          t_checksum;
 };
 
@@ -177,24 +179,19 @@ struct journal_block_tail {
 typedef struct journal_revoke_header_s
 {
        journal_header_t r_header;
-       int              r_count;       /* Count of bytes used in the block */
-} journal_revoke_header_t;
-
-/* Tail of revoke block, for checksumming */
-struct journal_revoke_tail {
-       __be32          r_checksum;
-};
+       __be32           r_count;       /* Count of bytes used in the block */
+} jbd2_journal_revoke_header_t;
 
 /* Definitions for the journal tag flags word: */
-#define JFS_FLAG_ESCAPE                1       /* on-disk block is escaped */
-#define JFS_FLAG_SAME_UUID     2       /* block has same uuid as previous */
-#define JFS_FLAG_DELETED       4       /* block deleted by this transaction */
-#define JFS_FLAG_LAST_TAG      8       /* last tag in this descriptor block */
+#define JBD2_FLAG_ESCAPE               1       /* on-disk block is escaped */
+#define JBD2_FLAG_SAME_UUID    2       /* block has same uuid as previous */
+#define JBD2_FLAG_DELETED      4       /* block deleted by this transaction */
+#define JBD2_FLAG_LAST_TAG     8       /* last tag in this descriptor block */
 
 
 #define UUID_SIZE 16
-#define JFS_USERS_MAX 48
-#define JFS_USERS_SIZE (UUID_SIZE * JFS_USERS_MAX)
+#define JBD2_USERS_MAX 48
+#define JBD2_USERS_SIZE (UUID_SIZE * JBD2_USERS_MAX)
 /*
  * The journal superblock.  All fields are in big-endian byte order.
  */
@@ -205,14 +202,14 @@ typedef struct journal_superblock_s
 
 /* 0x000C */
        /* Static information describing the journal */
-       __u32   s_blocksize;            /* journal device blocksize */
-       __u32   s_maxlen;               /* total blocks in journal file */
-       __u32   s_first;                /* first block of log information */
+       __be32  s_blocksize;            /* journal device blocksize */
+       __be32  s_maxlen;               /* total blocks in journal file */
+       __be32  s_first;                /* first block of log information */
 
 /* 0x0018 */
        /* Dynamic information describing the current state of the log */
-       __u32   s_sequence;             /* first commit ID expected in log */
-       __u32   s_start;                /* blocknr of start of log */
+       __be32  s_sequence;             /* first commit ID expected in log */
+       __be32  s_start;                /* blocknr of start of log */
 
 /* 0x0020 */
        /* Error value, as set by journal_abort(). */
@@ -220,63 +217,68 @@ typedef struct journal_superblock_s
 
 /* 0x0024 */
        /* Remaining fields are only valid in a version-2 superblock */
-       __u32   s_feature_compat;       /* compatible feature set */
-       __u32   s_feature_incompat;     /* incompatible feature set */
-       __u32   s_feature_ro_compat;    /* readonly-compatible feature set */
+       __be32  s_feature_compat;       /* compatible feature set */
+       __be32  s_feature_incompat;     /* incompatible feature set */
+       __be32  s_feature_ro_compat;    /* readonly-compatible feature set */
 /* 0x0030 */
        __u8    s_uuid[16];             /* 128-bit uuid for journal */
 
 /* 0x0040 */
-       __u32   s_nr_users;             /* Nr of filesystems sharing log */
+       __be32  s_nr_users;             /* Nr of filesystems sharing log */
 
-       __u32   s_dynsuper;             /* Blocknr of dynamic superblock copy*/
+       __be32  s_dynsuper;             /* Blocknr of dynamic superblock copy*/
 
 /* 0x0048 */
-       __u32   s_max_transaction;      /* Limit of journal blocks per trans.*/
-       __u32   s_max_trans_data;       /* Limit of data blocks per trans. */
+       __be32  s_max_transaction;      /* Limit of journal blocks per trans.*/
+       __be32  s_max_trans_data;       /* Limit of data blocks per trans. */
 
 /* 0x0050 */
        __u8    s_checksum_type;        /* checksum type */
        __u8    s_padding2[3];
-       __u32   s_padding[42];
-       __u32   s_checksum;             /* crc32c(superblock) */
+/* 0x0054 */
+       __be32  s_num_fc_blks;          /* Number of fast commit blocks */
+/* 0x0058 */
+       __be32  s_padding[41];
+       __be32  s_checksum;             /* crc32c(superblock) */
 
 /* 0x0100 */
-       __u8    s_users[JFS_USERS_SIZE];                /* ids of all fs'es sharing the log */
+       __u8    s_users[JBD2_USERS_SIZE];               /* ids of all fs'es sharing the log */
 
 /* 0x0400 */
 } journal_superblock_t;
 
-#define JFS_HAS_COMPAT_FEATURE(j,mask)                                 \
+#define JBD2_HAS_COMPAT_FEATURE(j,mask)                                        \
        ((j)->j_format_version >= 2 &&                                  \
         ((j)->j_superblock->s_feature_compat & ext2fs_cpu_to_be32((mask))))
-#define JFS_HAS_RO_COMPAT_FEATURE(j,mask)                              \
+#define JBD2_HAS_RO_COMPAT_FEATURE(j,mask)                             \
        ((j)->j_format_version >= 2 &&                                  \
         ((j)->j_superblock->s_feature_ro_compat & ext2fs_cpu_to_be32((mask))))
-#define JFS_HAS_INCOMPAT_FEATURE(j,mask)                               \
+#define JBD2_HAS_INCOMPAT_FEATURE(j,mask)                              \
        ((j)->j_format_version >= 2 &&                                  \
         ((j)->j_superblock->s_feature_incompat & ext2fs_cpu_to_be32((mask))))
 
-#define JFS_FEATURE_COMPAT_CHECKSUM            0x00000001
+#define JBD2_FEATURE_COMPAT_CHECKSUM           0x00000001
 
-#define JFS_FEATURE_INCOMPAT_REVOKE            0x00000001
-#define JFS_FEATURE_INCOMPAT_64BIT             0x00000002
-#define JFS_FEATURE_INCOMPAT_ASYNC_COMMIT      0x00000004
-#define JFS_FEATURE_INCOMPAT_CSUM_V2           0x00000008
-#define JFS_FEATURE_INCOMPAT_CSUM_V3           0x00000010
+#define JBD2_FEATURE_INCOMPAT_REVOKE           0x00000001
+#define JBD2_FEATURE_INCOMPAT_64BIT            0x00000002
+#define JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT     0x00000004
+#define JBD2_FEATURE_INCOMPAT_CSUM_V2          0x00000008
+#define JBD2_FEATURE_INCOMPAT_CSUM_V3          0x00000010
+#define JBD2_FEATURE_INCOMPAT_FAST_COMMIT      0x00000020
 
 /* Features known to this kernel version: */
-#define JFS_KNOWN_COMPAT_FEATURES      0
-#define JFS_KNOWN_ROCOMPAT_FEATURES    0
-#define JFS_KNOWN_INCOMPAT_FEATURES    (JFS_FEATURE_INCOMPAT_REVOKE|\
-                                        JFS_FEATURE_INCOMPAT_ASYNC_COMMIT|\
-                                        JFS_FEATURE_INCOMPAT_64BIT|\
-                                        JFS_FEATURE_INCOMPAT_CSUM_V2|\
-                                        JFS_FEATURE_INCOMPAT_CSUM_V3)
+#define JBD2_KNOWN_COMPAT_FEATURES     0
+#define JBD2_KNOWN_ROCOMPAT_FEATURES   0
+#define JBD2_KNOWN_INCOMPAT_FEATURES   (JBD2_FEATURE_INCOMPAT_REVOKE|\
+                                        JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT| \
+                                        JBD2_FEATURE_INCOMPAT_64BIT|\
+                                        JBD2_FEATURE_INCOMPAT_CSUM_V2| \
+                                        JBD2_FEATURE_INCOMPAT_CSUM_V3 | \
+                                        JBD2_FEATURE_INCOMPAT_FAST_COMMIT)
 
 #ifdef NO_INLINE_FUNCS
 extern size_t journal_tag_bytes(journal_t *journal);
-extern int journal_has_csum_v2or3(journal_t *journal);
+extern int jbd2_journal_has_csum_v2or3(journal_t *journal);
 extern int tid_gt(tid_t x, tid_t y) EXT2FS_ATTR((unused));
 extern int tid_geq(tid_t x, tid_t y) EXT2FS_ATTR((unused));
 #endif
@@ -301,94 +303,95 @@ extern int tid_geq(tid_t x, tid_t y) EXT2FS_ATTR((unused));
 #endif /* INCLUDE_INLINE_FUNCS */
 
 /* journal feature predicate functions */
-#define JFS_FEATURE_COMPAT_FUNCS(name, flagname) \
-_INLINE_ int jfs_has_feature_##name(journal_t *j); \
-_INLINE_ int jfs_has_feature_##name(journal_t *j) \
+#define JBD2_FEATURE_COMPAT_FUNCS(name, flagname) \
+_INLINE_ int jbd2_has_feature_##name(journal_t *j); \
+_INLINE_ int jbd2_has_feature_##name(journal_t *j) \
 { \
        return ((j)->j_format_version >= 2 && \
                ((j)->j_superblock->s_feature_compat & \
-                ext2fs_cpu_to_be32(JFS_FEATURE_COMPAT_##flagname)) != 0); \
+                ext2fs_cpu_to_be32(JBD2_FEATURE_COMPAT_##flagname)) != 0); \
 } \
-_INLINE_ void jfs_set_feature_##name(journal_t *j); \
-_INLINE_ void jfs_set_feature_##name(journal_t *j) \
+_INLINE_ void jbd2_set_feature_##name(journal_t *j); \
+_INLINE_ void jbd2_set_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_compat |= \
-               ext2fs_cpu_to_be32(JFS_FEATURE_COMPAT_##flagname); \
+               ext2fs_cpu_to_be32(JBD2_FEATURE_COMPAT_##flagname); \
 } \
-_INLINE_ void jfs_clear_feature_##name(journal_t *j); \
-_INLINE_ void jfs_clear_feature_##name(journal_t *j) \
+_INLINE_ void jbd2_clear_feature_##name(journal_t *j); \
+_INLINE_ void jbd2_clear_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_compat &= \
-               ~ext2fs_cpu_to_be32(JFS_FEATURE_COMPAT_##flagname); \
+               ~ext2fs_cpu_to_be32(JBD2_FEATURE_COMPAT_##flagname); \
 }
 
-#define JFS_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
-_INLINE_ int jfs_has_feature_##name(journal_t *j);     \
-_INLINE_ int jfs_has_feature_##name(journal_t *j) \
+#define JBD2_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
+_INLINE_ int jbd2_has_feature_##name(journal_t *j);    \
+_INLINE_ int jbd2_has_feature_##name(journal_t *j) \
 { \
        return ((j)->j_format_version >= 2 && \
                ((j)->j_superblock->s_feature_ro_compat & \
-                ext2fs_cpu_to_be32(JFS_FEATURE_RO_COMPAT_##flagname)) != 0); \
+                ext2fs_cpu_to_be32(JBD2_FEATURE_RO_COMPAT_##flagname)) != 0); \
 } \
-_INLINE_ void jfs_set_feature_##name(journal_t *j); \
-_INLINE_ void jfs_set_feature_##name(journal_t *j) \
+_INLINE_ void jbd2_set_feature_##name(journal_t *j); \
+_INLINE_ void jbd2_set_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_ro_compat |= \
-               ext2fs_cpu_to_be32(JFS_FEATURE_RO_COMPAT_##flagname); \
+               ext2fs_cpu_to_be32(JBD2_FEATURE_RO_COMPAT_##flagname); \
 } \
-_INLINE_ void jfs_clear_feature_##name(journal_t *j); \
-_INLINE_ void jfs_clear_feature_##name(journal_t *j) \
+_INLINE_ void jbd2_clear_feature_##name(journal_t *j); \
+_INLINE_ void jbd2_clear_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_ro_compat &= \
-               ~ext2fs_cpu_to_be32(JFS_FEATURE_RO_COMPAT_##flagname); \
+               ~ext2fs_cpu_to_be32(JBD2_FEATURE_RO_COMPAT_##flagname); \
 }
 
-#define JFS_FEATURE_INCOMPAT_FUNCS(name, flagname) \
-_INLINE_ int jfs_has_feature_##name(journal_t *j); \
-_INLINE_ int jfs_has_feature_##name(journal_t *j) \
+#define JBD2_FEATURE_INCOMPAT_FUNCS(name, flagname) \
+_INLINE_ int jbd2_has_feature_##name(journal_t *j); \
+_INLINE_ int jbd2_has_feature_##name(journal_t *j) \
 { \
        return ((j)->j_format_version >= 2 && \
                ((j)->j_superblock->s_feature_incompat & \
-                ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_##flagname)) != 0); \
+                ext2fs_cpu_to_be32(JBD2_FEATURE_INCOMPAT_##flagname)) != 0); \
 } \
-_INLINE_ void jfs_set_feature_##name(journal_t *j); \
-_INLINE_ void jfs_set_feature_##name(journal_t *j) \
+_INLINE_ void jbd2_set_feature_##name(journal_t *j); \
+_INLINE_ void jbd2_set_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_incompat |= \
-               ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_##flagname); \
+               ext2fs_cpu_to_be32(JBD2_FEATURE_INCOMPAT_##flagname); \
 } \
-_INLINE_ void jfs_clear_feature_##name(journal_t *j); \
-_INLINE_ void jfs_clear_feature_##name(journal_t *j) \
+_INLINE_ void jbd2_clear_feature_##name(journal_t *j); \
+_INLINE_ void jbd2_clear_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_incompat &= \
-               ~ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_##flagname); \
+               ~ext2fs_cpu_to_be32(JBD2_FEATURE_INCOMPAT_##flagname); \
 }
 
 #else
-#define JFS_FEATURE_COMPAT_FUNCS(name, flagname) \
-extern int jfs_has_feature_##name(journal_t *j); \
-extern void jfs_set_feature_##name(journal_t *j); \
-extern void jfs_clear_feature_##name(journal_t *j);
+#define JBD2_FEATURE_COMPAT_FUNCS(name, flagname) \
+extern int jbd2_has_feature_##name(journal_t *j); \
+extern void jbd2_set_feature_##name(journal_t *j); \
+extern void jbd2_clear_feature_##name(journal_t *j);
 
-#define JFS_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
-extern int jfs_has_feature_##name(journal_t *j); \
-extern void jfs_set_feature_##name(journal_t *j); \
-extern void jfs_clear_feature_##name(journal_t *j);
+#define JBD2_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
+extern int jbd2_has_feature_##name(journal_t *j); \
+extern void jbd2_set_feature_##name(journal_t *j); \
+extern void jbd2_clear_feature_##name(journal_t *j);
 
-#define JFS_FEATURE_INCOMPAT_FUNCS(name, flagname) \
-extern int jfs_has_feature_##name(journal_t *j); \
-extern void jfs_set_feature_##name(journal_t *j); \
-extern void jfs_clear_feature_##name(journal_t *j);
+#define JBD2_FEATURE_INCOMPAT_FUNCS(name, flagname) \
+extern int jbd2_has_feature_##name(journal_t *j); \
+extern void jbd2_set_feature_##name(journal_t *j); \
+extern void jbd2_clear_feature_##name(journal_t *j);
 
 #endif /* (defined(E2FSCK_INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS)) */
 
-JFS_FEATURE_COMPAT_FUNCS(checksum,             CHECKSUM)
+JBD2_FEATURE_COMPAT_FUNCS(checksum,            CHECKSUM)
 
-JFS_FEATURE_INCOMPAT_FUNCS(revoke,             REVOKE)
-JFS_FEATURE_INCOMPAT_FUNCS(64bit,              64BIT)
-JFS_FEATURE_INCOMPAT_FUNCS(async_commit,       ASYNC_COMMIT)
-JFS_FEATURE_INCOMPAT_FUNCS(csum2,              CSUM_V2)
-JFS_FEATURE_INCOMPAT_FUNCS(csum3,              CSUM_V3)
+JBD2_FEATURE_INCOMPAT_FUNCS(revoke,            REVOKE)
+JBD2_FEATURE_INCOMPAT_FUNCS(64bit,             64BIT)
+JBD2_FEATURE_INCOMPAT_FUNCS(async_commit,      ASYNC_COMMIT)
+JBD2_FEATURE_INCOMPAT_FUNCS(csum2,             CSUM_V2)
+JBD2_FEATURE_INCOMPAT_FUNCS(csum3,             CSUM_V3)
+JBD2_FEATURE_INCOMPAT_FUNCS(fast_commit,       FAST_COMMIT)
 
 #if (defined(E2FSCK_INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS))
 /*
@@ -398,28 +401,35 @@ _INLINE_ size_t journal_tag_bytes(journal_t *journal)
 {
        size_t sz;
 
-       if (jfs_has_feature_csum3(journal))
+       if (jbd2_has_feature_csum3(journal))
                return sizeof(journal_block_tag3_t);
 
        sz = sizeof(journal_block_tag_t);
 
-       if (jfs_has_feature_csum2(journal))
+       if (jbd2_has_feature_csum2(journal))
                sz += sizeof(__u16);
 
-       if (jfs_has_feature_64bit(journal))
+       if (jbd2_has_feature_64bit(journal))
                return sz;
 
        return sz - sizeof(__u32);
 }
 
-_INLINE_ int journal_has_csum_v2or3(journal_t *journal)
+_INLINE_ int jbd2_journal_has_csum_v2or3(journal_t *journal)
 {
-       if (jfs_has_feature_csum2(journal) || jfs_has_feature_csum3(journal))
+       if (jbd2_has_feature_csum2(journal) || jbd2_has_feature_csum3(journal))
                return 1;
 
        return 0;
 }
 
+_INLINE_ int jbd2_journal_get_num_fc_blks(journal_superblock_t *jsb)
+{
+       int num_fc_blocks = be32_to_cpu(jsb->s_num_fc_blks);
+
+       return num_fc_blocks ? num_fc_blocks : JBD2_DEFAULT_FAST_COMMIT_BLOCKS;
+}
+
 /* Comparison functions for transaction IDs: perform comparisons using
  * modulo arithmetic so that they work over sequence number wraps. */
 
index 01f4f6b..dd7b8e0 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _LINUX_LIST_H
 #define _LINUX_LIST_H
 
+#include "compiler.h"
+
 /*
  * Simple doubly linked list implementation.
  *
@@ -101,7 +103,7 @@ static __inline__ void list_splice(struct list_head *list, struct list_head *hea
 }
 
 #define list_entry(ptr, type, member) \
-       ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
+       container_of(ptr, type, member)
 
 #define list_for_each(pos, head) \
         for (pos = (head)->next; pos != (head); pos = pos->next)
index 65dc887..469eea8 100644 (file)
 
 #include "ext2_fs.h"
 #include "ext2fs.h"
+#include "ext2fsP.h"
+
+#define EXT2_DX_ROOT_OFF 24
+
+struct dx_frame {
+       void *buf;
+       blk64_t pblock;
+       struct ext2_dx_countlimit *head;
+       struct ext2_dx_entry *entries;
+       struct ext2_dx_entry *at;
+};
+
+struct dx_lookup_info {
+       const char *name;
+       int namelen;
+       int hash_alg;
+       __u32 hash;
+       int levels;
+       struct dx_frame frames[EXT4_HTREE_LEVEL];
+};
+
+static errcode_t alloc_dx_frame(ext2_filsys fs, struct dx_frame *frame)
+{
+       return ext2fs_get_mem(fs->blocksize, &frame->buf);
+}
+
+static void dx_release(struct dx_lookup_info *info)
+{
+       struct ext2_dx_root_info *root;
+       int level;
+
+       for (level = 0; level < info->levels; level++) {
+               if (info->frames[level].buf == NULL)
+                       break;
+               ext2fs_free_mem(&(info->frames[level].buf));
+       }
+       info->levels = 0;
+}
+
+static void dx_search_entry(struct dx_frame *frame, int count, __u32 hash)
+{
+       struct ext2_dx_entry *p, *q, *m;
+
+       p = frame->entries + 1;
+       q = frame->entries + count - 1;
+       while (p <= q) {
+               m = p + (q - p) / 2;
+               if (ext2fs_le32_to_cpu(m->hash) > hash)
+                       q = m - 1;
+               else
+                       p = m + 1;
+       }
+       frame->at = p - 1;
+}
+
+static errcode_t load_logical_dir_block(ext2_filsys fs, ext2_ino_t dir,
+                                       struct ext2_inode *diri, blk64_t block,
+                                       blk64_t *pblk, void *buf)
+{
+       errcode_t errcode;
+       int ret_flags;
+
+       errcode = ext2fs_bmap2(fs, dir, diri, NULL, 0, block, &ret_flags,
+                              pblk);
+       if (errcode)
+               return errcode;
+       if (ret_flags & BMAP_RET_UNINIT)
+               return EXT2_ET_DIR_CORRUPTED;
+       return ext2fs_read_dir_block4(fs, *pblk, buf, 0, dir);
+}
+
+static errcode_t dx_lookup(ext2_filsys fs, ext2_ino_t dir,
+                          struct ext2_inode *diri, struct dx_lookup_info *info)
+{
+       struct ext2_dx_root_info *root;
+       errcode_t errcode;
+       int level = 0;
+       int count, limit;
+       int hash_alg;
+       int hash_flags = diri->i_flags & EXT4_CASEFOLD_FL;
+       __u32 hash, minor_hash;
+       struct dx_frame *frame;
+
+       errcode = alloc_dx_frame(fs, &(info->frames[0]));
+       if (errcode)
+               return errcode;
+       info->levels = 1;
+
+       errcode = load_logical_dir_block(fs, dir, diri, 0,
+                                        &(info->frames[0].pblock),
+                                        info->frames[0].buf);
+       if (errcode)
+               goto out_err;
+       root = info->frames[0].buf + EXT2_DX_ROOT_OFF;
+       hash_alg = root->hash_version;
+       if (hash_alg != EXT2_HASH_TEA && hash_alg != EXT2_HASH_HALF_MD4 &&
+           hash_alg != EXT2_HASH_LEGACY) {
+               errcode = EXT2_ET_DIRHASH_UNSUPP;
+               goto out_err;
+       }
+       if (hash_alg <= EXT2_HASH_TEA &&
+           fs->super->s_flags & EXT2_FLAGS_UNSIGNED_HASH)
+               hash_alg += 3;
+       if (root->indirect_levels >= ext2_dir_htree_level(fs)) {
+               errcode = EXT2_ET_DIR_CORRUPTED;
+               goto out_err;
+       }
+       info->hash_alg = hash_alg;
+
+       errcode = ext2fs_dirhash2(hash_alg, info->name, info->namelen,
+                                 fs->encoding, hash_flags,
+                                 fs->super->s_hash_seed, &info->hash,
+                                 &minor_hash);
+       if (errcode)
+               goto out_err;
+
+       for (level = 0; level <= root->indirect_levels; level++) {
+               frame = &(info->frames[level]);
+               if (level > 0) {
+                       errcode = alloc_dx_frame(fs, frame);
+                       if (errcode)
+                               goto out_err;
+                       info->levels++;
+
+                       errcode = load_logical_dir_block(fs, dir, diri,
+                               ext2fs_le32_to_cpu(info->frames[level-1].at->block) & 0x0fffffff,
+                               &(frame->pblock), frame->buf);
+                       if (errcode)
+                               goto out_err;
+               }
+               errcode = ext2fs_get_dx_countlimit(fs, frame->buf,
+                                                  &(frame->head), NULL);
+               if (errcode)
+                       goto out_err;
+               count = ext2fs_le16_to_cpu(frame->head->count);
+               limit = ext2fs_le16_to_cpu(frame->head->limit);
+               frame->entries = (struct ext2_dx_entry *)(frame->head);
+               if (!count || count > limit) {
+                       errcode = EXT2_ET_DIR_CORRUPTED;
+                       goto out_err;
+               }
+
+               dx_search_entry(frame, count, info->hash);
+       }
+       return 0;
+out_err:
+       dx_release(info);
+       return errcode;
+}
 
 struct link_struct  {
        ext2_filsys     fs;
@@ -31,7 +180,9 @@ struct link_struct  {
        struct ext2_super_block *sb;
 };
 
-static int link_proc(struct ext2_dir_entry *dirent,
+static int link_proc(ext2_ino_t dir EXT2FS_ATTR((unused)),
+                    int entru EXT2FS_ATTR((unused)),
+                    struct ext2_dir_entry *dirent,
                     int        offset,
                     int        blocksize,
                     char       *buf,
@@ -71,40 +222,6 @@ static int link_proc(struct ext2_dir_entry *dirent,
        }
 
        /*
-        * Since ext2fs_link blows away htree data, we need to be
-        * careful -- if metadata_csum is enabled and we're passed in
-        * a dirent that contains htree data, we need to create the
-        * fake entry at the end of the block that hides the checksum.
-        */
-
-       /* De-convert a dx_node block */
-       if (csum_size &&
-           curr_rec_len == ls->fs->blocksize &&
-           !dirent->inode) {
-               curr_rec_len -= csum_size;
-               ls->err = ext2fs_set_rec_len(ls->fs, curr_rec_len, dirent);
-               if (ls->err)
-                       return DIRENT_ABORT;
-               t = EXT2_DIRENT_TAIL(buf, ls->fs->blocksize);
-               ext2fs_initialize_dirent_tail(ls->fs, t);
-               ret = DIRENT_CHANGED;
-       }
-
-       /* De-convert a dx_root block */
-       if (csum_size &&
-           curr_rec_len == ls->fs->blocksize - EXT2_DIR_REC_LEN(1) &&
-           offset == EXT2_DIR_REC_LEN(1) &&
-           dirent->name[0] == '.' && dirent->name[1] == '.') {
-               curr_rec_len -= csum_size;
-               ls->err = ext2fs_set_rec_len(ls->fs, curr_rec_len, dirent);
-               if (ls->err)
-                       return DIRENT_ABORT;
-               t = EXT2_DIRENT_TAIL(buf, ls->fs->blocksize);
-               ext2fs_initialize_dirent_tail(ls->fs, t);
-               ret = DIRENT_CHANGED;
-       }
-
-       /*
         * If the directory entry is used, see if we can split the
         * directory entry to make room for the new name.  If so,
         * truncate it and return.
@@ -144,6 +261,343 @@ static int link_proc(struct ext2_dir_entry *dirent,
        return DIRENT_ABORT|DIRENT_CHANGED;
 }
 
+static errcode_t add_dirent_to_buf(ext2_filsys fs, e2_blkcnt_t blockcnt,
+                                  char *buf, ext2_ino_t dir,
+                                  struct ext2_inode *diri, const char *name,
+                                  ext2_ino_t ino, int flags, blk64_t *pblkp)
+{
+       struct dir_context ctx;
+       struct link_struct ls;
+       errcode_t retval;
+
+       retval = load_logical_dir_block(fs, dir, diri, blockcnt, pblkp, buf);
+       if (retval)
+               return retval;
+       ctx.errcode = 0;
+       ctx.func = link_proc;
+       ctx.dir = dir;
+       ctx.flags = DIRENT_FLAG_INCLUDE_EMPTY;
+       ctx.buf = buf;
+       ctx.priv_data = &ls;
+
+       ls.fs = fs;
+       ls.name = name;
+       ls.namelen = strlen(name);
+       ls.inode = ino;
+       ls.flags = flags;
+       ls.done = 0;
+       ls.sb = fs->super;
+       ls.blocksize = fs->blocksize;
+       ls.err = 0;
+
+       ext2fs_process_dir_block(fs, pblkp, blockcnt, 0, 0, &ctx);
+       if (ctx.errcode)
+               return ctx.errcode;
+       if (ls.err)
+               return ls.err;
+       if (!ls.done)
+               return EXT2_ET_DIR_NO_SPACE;
+       return 0;
+}
+
+struct dx_hash_map {
+       __u32 hash;
+       int size;
+       int off;
+};
+
+static EXT2_QSORT_TYPE dx_hash_map_cmp(const void *ap, const void *bp)
+{
+       const struct dx_hash_map *a = ap, *b = bp;
+
+       if (a->hash < b->hash)
+               return -1;
+       if (a->hash > b->hash)
+               return 1;
+       return 0;
+}
+
+static errcode_t dx_move_dirents(ext2_filsys fs, struct dx_hash_map *map,
+                                int count, void *from, void *to)
+{
+       struct ext2_dir_entry *de;
+       int i;
+       int rec_len;
+       errcode_t retval;
+       int csum_size = 0;
+       void *base = to;
+
+       if (ext2fs_has_feature_metadata_csum(fs->super))
+               csum_size = sizeof(struct ext2_dir_entry_tail);
+
+       for (i = 0; i < count; i++) {
+               de = from + map[i].off;
+               rec_len = EXT2_DIR_REC_LEN(ext2fs_dirent_name_len(de));
+               memcpy(to, de, rec_len);
+               retval = ext2fs_set_rec_len(fs, rec_len, to);
+               if (retval)
+                       return retval;
+               to += rec_len;
+       }
+       /*
+        * Update rec_len of the last dir entry to stretch to the end of block
+        */
+       to -= rec_len;
+       rec_len = fs->blocksize - (to - base) - csum_size;
+       retval = ext2fs_set_rec_len(fs, rec_len, to);
+       if (retval)
+               return retval;
+       if (csum_size)
+               ext2fs_initialize_dirent_tail(fs,
+                               EXT2_DIRENT_TAIL(base, fs->blocksize));
+       return 0;
+}
+
+static errcode_t dx_insert_entry(ext2_filsys fs, ext2_ino_t dir,
+                                struct dx_lookup_info *info, int level,
+                                __u32 hash, blk64_t lblk)
+{
+       int pcount;
+       struct ext2_dx_entry *top, *new;
+
+       pcount = ext2fs_le16_to_cpu(info->frames[level].head->count);
+       top = info->frames[level].entries + pcount;
+       new = info->frames[level].at + 1;
+       memmove(new + 1, new, (char *)top - (char *)new);
+       new->hash = ext2fs_cpu_to_le32(hash);
+       new->block = ext2fs_cpu_to_le32(lblk);
+       info->frames[level].head->count = ext2fs_cpu_to_le16(pcount + 1);
+       return ext2fs_write_dir_block4(fs, info->frames[level].pblock,
+                                      info->frames[level].buf, 0, dir);
+}
+
+static errcode_t dx_split_leaf(ext2_filsys fs, ext2_ino_t dir,
+                              struct ext2_inode *diri,
+                              struct dx_lookup_info *info, void *buf,
+                              blk64_t leaf_pblk, blk64_t new_lblk,
+                              blk64_t new_pblk)
+{
+       int hash_flags = diri->i_flags & EXT4_CASEFOLD_FL;
+       struct ext2_dir_entry *de;
+       void *buf2;
+       errcode_t retval = 0;
+       int rec_len;
+       int offset, move_size;
+       int i, count = 0;
+       struct dx_hash_map *map;
+       int continued;
+       __u32 minor_hash;
+
+       retval = ext2fs_get_mem(fs->blocksize, &buf2);
+       if (retval)
+               return retval;
+       retval = ext2fs_get_array(fs->blocksize / 12,
+                                 sizeof(struct dx_hash_map), &map);
+       if (retval) {
+               ext2fs_free_mem(&buf2);
+               return retval;
+       }
+       for (offset = 0; offset < fs->blocksize; offset += rec_len) {
+               de = buf + offset;
+               retval = ext2fs_get_rec_len(fs, de, &rec_len);
+               if (retval)
+                       goto out;
+               if (ext2fs_dirent_name_len(de) > 0 && de->inode) {
+                       map[count].off = offset;
+                       map[count].size = rec_len;
+                       retval = ext2fs_dirhash2(info->hash_alg, de->name,
+                                       ext2fs_dirent_name_len(de),
+                                       fs->encoding, hash_flags,
+                                       fs->super->s_hash_seed,
+                                       &(map[count].hash),
+                                       &minor_hash);
+                       if (retval)
+                               goto out;
+                       count++;
+               }
+       }
+       qsort(map, count, sizeof(struct dx_hash_map), dx_hash_map_cmp);
+       move_size = 0;
+       /* Find place to split block */
+       for (i = count - 1; i >= 0; i--) {
+               if (move_size + map[i].size / 2 > fs->blocksize / 2)
+                       break;
+               move_size += map[i].size;
+       }
+       /* Let i be the first entry to move */
+       i++;
+       /* Move selected directory entries to new block */
+       retval = dx_move_dirents(fs, map + i, count - i, buf, buf2);
+       if (retval)
+               goto out;
+       retval = ext2fs_write_dir_block4(fs, new_pblk, buf2, 0, dir);
+       if (retval)
+               goto out;
+       /* Repack remaining entries in the old block */
+       retval = dx_move_dirents(fs, map, i, buf, buf2);
+       if (retval)
+               goto out;
+       retval = ext2fs_write_dir_block4(fs, leaf_pblk, buf2, 0, dir);
+       if (retval)
+               goto out;
+       /* Update parent node */
+       continued = map[i].hash == map[i-1].hash;
+       retval = dx_insert_entry(fs, dir, info, info->levels - 1,
+                                map[i].hash + continued, new_lblk);
+out:
+       ext2fs_free_mem(&buf2);
+       ext2fs_free_mem(&map);
+       return retval;
+}
+
+static errcode_t dx_grow_tree(ext2_filsys fs, ext2_ino_t dir,
+                             struct ext2_inode *diri,
+                             struct dx_lookup_info *info, void *buf,
+                             blk64_t leaf_pblk)
+{
+       int i;
+       errcode_t retval;
+       ext2_off64_t size = EXT2_I_SIZE(diri);
+       blk64_t lblk, pblk;
+       struct ext2_dir_entry *de;
+       struct ext2_dx_countlimit *head;
+       int csum_size = 0;
+       int count;
+
+       if (ext2fs_has_feature_metadata_csum(fs->super))
+               csum_size = sizeof(struct ext2_dx_tail);
+
+       /* Find level which can accommodate new child */
+       for (i = info->levels - 1; i >= 0; i--)
+               if (ext2fs_le16_to_cpu(info->frames[i].head->count) <
+                   ext2fs_le16_to_cpu(info->frames[i].head->limit))
+                       break;
+       /* Need to grow tree depth? */
+       if (i < 0 && info->levels >= ext2_dir_htree_level(fs))
+               return EXT2_ET_DIR_NO_SPACE;
+       lblk = size / fs->blocksize;
+       size += fs->blocksize;
+       retval = ext2fs_inode_size_set(fs, diri, size);
+       if (retval)
+               return retval;
+       retval = ext2fs_fallocate(fs,
+                       EXT2_FALLOCATE_FORCE_INIT | EXT2_FALLOCATE_ZERO_BLOCKS,
+                       dir, diri, 0, lblk, 1);
+       if (retval)
+               return retval;
+       retval = ext2fs_write_inode(fs, dir, diri);
+       if (retval)
+               return retval;
+       retval = ext2fs_bmap2(fs, dir, diri, NULL, 0, lblk, NULL, &pblk);
+       if (retval)
+               return retval;
+       /* Only leaf addition needed? */
+       if (i == info->levels - 1)
+               return dx_split_leaf(fs, dir, diri, info, buf, leaf_pblk,
+                                    lblk, pblk);
+
+       de = buf;
+       de->inode = 0;
+       ext2fs_dirent_set_name_len(de, 0);
+       ext2fs_dirent_set_file_type(de, 0);
+       retval = ext2fs_set_rec_len(fs, fs->blocksize, de);
+       if (retval)
+               return retval;
+       head = buf + 8;
+       count = ext2fs_le16_to_cpu(info->frames[i+1].head->count);
+       /* Growing tree depth? */
+       if (i < 0) {
+               struct ext2_dx_root_info *root;
+
+               memcpy(head, info->frames[0].entries,
+                      count * sizeof(struct ext2_dx_entry));
+               head->limit = ext2fs_cpu_to_le16(
+                               (fs->blocksize - (8 + csum_size)) /
+                               sizeof(struct ext2_dx_entry));
+               /* head->count gets set by memcpy above to correct value */
+
+               /* Now update tree root */
+               info->frames[0].head->count = ext2fs_cpu_to_le16(1);
+               info->frames[0].entries[0].block = ext2fs_cpu_to_le32(lblk);
+               root = info->frames[0].buf + EXT2_DX_ROOT_OFF;
+               root->indirect_levels++;
+       } else {
+               /* Splitting internal node in two */
+               int count1 = count / 2;
+               int count2 = count - count1;
+               __u32 split_hash = ext2fs_le32_to_cpu(info->frames[i+1].entries[count1].hash);
+
+               memcpy(head, info->frames[i+1].entries + count1,
+                      count2 * sizeof(struct ext2_dx_entry));
+               head->count = ext2fs_cpu_to_le16(count2);
+               head->limit = ext2fs_cpu_to_le16(
+                               (fs->blocksize - (8 + csum_size)) /
+                               sizeof(struct ext2_dx_entry));
+               info->frames[i+1].head->count = ext2fs_cpu_to_le16(count1);
+
+               /* Update parent node */
+               retval = dx_insert_entry(fs, dir, info, i, split_hash, lblk);
+               if (retval)
+                       return retval;
+
+       }
+       /* Writeout split block / updated root */
+       retval = ext2fs_write_dir_block4(fs, info->frames[i+1].pblock,
+                                        info->frames[i+1].buf, 0, dir);
+       if (retval)
+               return retval;
+       /* Writeout new tree block */
+       retval = ext2fs_write_dir_block4(fs, pblk, buf, 0, dir);
+       if (retval)
+               return retval;
+       return 0;
+}
+
+static errcode_t dx_link(ext2_filsys fs, ext2_ino_t dir,
+                        struct ext2_inode *diri, const char *name,
+                        ext2_ino_t ino, int flags)
+{
+       struct dx_lookup_info dx_info;
+       errcode_t retval;
+       void *blockbuf;
+       int restart = 0;
+       blk64_t leaf_pblk;
+
+       retval = ext2fs_get_mem(fs->blocksize, &blockbuf);
+       if (retval)
+               return retval;
+
+       dx_info.name = name;
+       dx_info.namelen = strlen(name);
+again:
+       retval = dx_lookup(fs, dir, diri, &dx_info);
+       if (retval)
+               goto free_buf;
+
+       retval = add_dirent_to_buf(fs,
+               ext2fs_le32_to_cpu(dx_info.frames[dx_info.levels-1].at->block) & 0x0fffffff,
+               blockbuf, dir, diri, name, ino, flags, &leaf_pblk);
+       /*
+        * Success or error other than ENOSPC...? We are done. We may need upto
+        * two tries to add entry. One to split htree node and another to add
+        * new leaf block.
+        */
+       if (restart >= dx_info.levels || retval != EXT2_ET_DIR_NO_SPACE)
+               goto free_frames;
+       retval = dx_grow_tree(fs, dir, diri, &dx_info, blockbuf, leaf_pblk);
+       if (retval)
+               goto free_frames;
+       /* Restart everything now that the tree is larger */
+       restart++;
+       dx_release(&dx_info);
+       goto again;
+free_frames:
+       dx_release(&dx_info);
+free_buf:
+       ext2fs_free_mem(&blockbuf);
+       return retval;
+}
+
 /*
  * Note: the low 3 bits of the flags field are used as the directory
  * entry filetype.
@@ -163,6 +617,12 @@ errcode_t ext2fs_link(ext2_filsys fs, ext2_ino_t dir, const char *name,
        if (!(fs->flags & EXT2_FLAG_RW))
                return EXT2_ET_RO_FILSYS;
 
+       if ((retval = ext2fs_read_inode(fs, dir, &inode)) != 0)
+               return retval;
+
+       if (inode.i_flags & EXT2_INDEX_FL)
+               return dx_link(fs, dir, &inode, name, ino, flags);
+
        ls.fs = fs;
        ls.name = name;
        ls.namelen = name ? strlen(name) : 0;
@@ -173,8 +633,8 @@ errcode_t ext2fs_link(ext2_filsys fs, ext2_ino_t dir, const char *name,
        ls.blocksize = fs->blocksize;
        ls.err = 0;
 
-       retval = ext2fs_dir_iterate(fs, dir, DIRENT_FLAG_INCLUDE_EMPTY,
-                                   0, link_proc, &ls);
+       retval = ext2fs_dir_iterate2(fs, dir, DIRENT_FLAG_INCLUDE_EMPTY,
+                                    NULL, link_proc, &ls);
        if (retval)
                return retval;
        if (ls.err)
@@ -182,20 +642,5 @@ errcode_t ext2fs_link(ext2_filsys fs, ext2_ino_t dir, const char *name,
 
        if (!ls.done)
                return EXT2_ET_DIR_NO_SPACE;
-
-       if ((retval = ext2fs_read_inode(fs, dir, &inode)) != 0)
-               return retval;
-
-       /*
-        * If this function changes to preserve the htree, remove the
-        * two hunks in link_proc that shove checksum tails into the
-        * former dx_root/dx_node blocks.
-        */
-       if (inode.i_flags & EXT2_INDEX_FL) {
-               inode.i_flags &= ~EXT2_INDEX_FL;
-               if ((retval = ext2fs_write_inode(fs, dir, &inode)) != 0)
-                       return retval;
-       }
-
        return 0;
 }
index 2a63aad..437c8ff 100644 (file)
@@ -43,6 +43,7 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
        blk64_t                 blk;
        char                    *block = 0;
        int                     inline_data = 0;
+       int                     drop_refcount = 0;
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
@@ -144,6 +145,14 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
        }
 
        /*
+        * Update accounting....
+        */
+       if (!inline_data)
+               ext2fs_block_alloc_stats2(fs, blk, +1);
+       ext2fs_inode_alloc_stats2(fs, ino, +1, 1);
+       drop_refcount = 1;
+
+       /*
         * Link the directory into the filesystem hierarchy
         */
        if (name) {
@@ -174,17 +183,16 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
                if (retval)
                        goto cleanup;
        }
-
-       /*
-        * Update accounting....
-        */
-       if (!inline_data)
-               ext2fs_block_alloc_stats2(fs, blk, +1);
-       ext2fs_inode_alloc_stats2(fs, ino, +1, 1);
+       drop_refcount = 0;
 
 cleanup:
        if (block)
                ext2fs_free_mem(&block);
+       if (drop_refcount) {
+               if (!inline_data)
+                       ext2fs_block_alloc_stats2(fs, blk, -1);
+               ext2fs_inode_alloc_stats2(fs, ino, -1, 1);
+       }
        return retval;
 
 }
index 7f78291..732ba7d 100644 (file)
@@ -12,6 +12,7 @@
 #include "config.h"
 #include <stdio.h>
 #include <string.h>
+#include <assert.h>
 #if HAVE_UNISTD_H
 #include <unistd.h>
 #endif
  * This function automatically sets up the journal superblock and
  * returns it as an allocated block.
  */
-errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
-                                          __u32 num_blocks, int flags,
-                                          char  **ret_jsb)
+errcode_t ext2fs_create_journal_superblock2(ext2_filsys fs,
+                                          struct ext2fs_journal_params *jparams,
+                                          int flags, char **ret_jsb)
 {
        errcode_t               retval;
        journal_superblock_t    *jsb;
 
-       if (num_blocks < JFS_MIN_JOURNAL_BLOCKS)
+       if (jparams->num_journal_blocks < JBD2_MIN_JOURNAL_BLOCKS)
                return EXT2_ET_JOURNAL_TOO_SMALL;
 
        if ((retval = ext2fs_get_mem(fs->blocksize, &jsb)))
@@ -58,16 +59,17 @@ errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
 
        memset (jsb, 0, fs->blocksize);
 
-       jsb->s_header.h_magic = htonl(JFS_MAGIC_NUMBER);
+       jsb->s_header.h_magic = htonl(JBD2_MAGIC_NUMBER);
        if (flags & EXT2_MKJOURNAL_V1_SUPER)
-               jsb->s_header.h_blocktype = htonl(JFS_SUPERBLOCK_V1);
+               jsb->s_header.h_blocktype = htonl(JBD2_SUPERBLOCK_V1);
        else
-               jsb->s_header.h_blocktype = htonl(JFS_SUPERBLOCK_V2);
+               jsb->s_header.h_blocktype = htonl(JBD2_SUPERBLOCK_V2);
        jsb->s_blocksize = htonl(fs->blocksize);
-       jsb->s_maxlen = htonl(num_blocks);
+       jsb->s_maxlen = htonl(jparams->num_journal_blocks + jparams->num_fc_blocks);
        jsb->s_nr_users = htonl(1);
        jsb->s_first = htonl(1);
        jsb->s_sequence = htonl(1);
+       jsb->s_num_fc_blks = htonl(jparams->num_fc_blocks);
        memcpy(jsb->s_uuid, fs->super->s_uuid, sizeof(fs->super->s_uuid));
        /*
         * If we're creating an external journal device, we need to
@@ -82,20 +84,32 @@ errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
        return 0;
 }
 
+errcode_t ext2fs_create_journal_superblock(ext2_filsys fs, __u32 num_blocks,
+                                       int flags, char **ret_sb)
+{
+       struct ext2fs_journal_params jparams;
+
+       jparams.num_journal_blocks = num_blocks;
+       jparams.num_fc_blocks = 0;
+
+       return ext2fs_create_journal_superblock2(fs, &jparams, flags, ret_sb);
+}
+
 /*
  * This function writes a journal using POSIX routines.  It is used
  * for creating external journals and creating journals on live
  * filesystems.
  */
 static errcode_t write_journal_file(ext2_filsys fs, char *filename,
-                                   blk_t num_blocks, int flags)
+                                   struct ext2fs_journal_params *jparams,
+                                   int flags)
 {
        errcode_t       retval;
        char            *buf = 0;
        int             fd, ret_size;
        blk_t           i;
 
-       if ((retval = ext2fs_create_journal_superblock(fs, num_blocks, flags,
+       if ((retval = ext2fs_create_journal_superblock2(fs, jparams, flags,
                                                       &buf)))
                return retval;
 
@@ -119,7 +133,7 @@ static errcode_t write_journal_file(ext2_filsys fs, char *filename,
        if (flags & EXT2_MKJOURNAL_LAZYINIT)
                goto success;
 
-       for (i = 1; i < num_blocks; i++) {
+       for (i = 1; i < jparams->num_journal_blocks + jparams->num_fc_blocks; i++) {
                ret_size = write(fd, buf, fs->blocksize);
                if (ret_size < 0) {
                        retval = errno;
@@ -262,7 +276,8 @@ static blk64_t get_midpoint_journal_block(ext2_filsys fs)
  * This function creates a journal using direct I/O routines.
  */
 static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
-                                    blk_t num_blocks, blk64_t goal, int flags)
+                                    struct ext2fs_journal_params *jparams,
+                                    blk64_t goal, int flags)
 {
        char                    *buf;
        errcode_t               retval;
@@ -271,7 +286,7 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
        int                     falloc_flags = EXT2_FALLOCATE_FORCE_INIT;
        blk64_t                 zblk;
 
-       if ((retval = ext2fs_create_journal_superblock(fs, num_blocks, flags,
+       if ((retval = ext2fs_create_journal_superblock2(fs, jparams, flags,
                                                       &buf)))
                return retval;
 
@@ -295,7 +310,8 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
        if (!(flags & EXT2_MKJOURNAL_LAZYINIT))
                falloc_flags |= EXT2_FALLOCATE_ZERO_BLOCKS;
 
-       inode_size = (unsigned long long)fs->blocksize * num_blocks;
+       inode_size = (unsigned long long)fs->blocksize *
+                       (jparams->num_journal_blocks + jparams->num_fc_blocks);
        inode.i_mtime = inode.i_ctime = fs->now ? fs->now : time(0);
        inode.i_links_count = 1;
        inode.i_mode = LINUX_S_IFREG | 0600;
@@ -304,7 +320,8 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
                goto out2;
 
        retval = ext2fs_fallocate(fs, falloc_flags, journal_ino,
-                                 &inode, goal, 0, num_blocks);
+                                 &inode, goal, 0,
+                                 jparams->num_journal_blocks + jparams->num_fc_blocks);
        if (retval)
                goto out2;
 
@@ -358,6 +375,43 @@ int ext2fs_default_journal_size(__u64 num_blocks)
        return 262144;                          /* 1 GB */
 }
 
+errcode_t ext2fs_get_journal_params(struct ext2fs_journal_params *params,
+               ext2_filsys fs)
+{
+       blk_t total_blks;
+       int ret;
+
+       memset(params, 0, sizeof(*params));
+       if (ext2fs_has_feature_journal_dev(fs->super)) {
+               total_blks = ext2fs_blocks_count(fs->super);
+               if (total_blks < JBD2_MIN_JOURNAL_BLOCKS)
+                       return EXT2_ET_JOURNAL_TOO_SMALL;
+
+               if (!ext2fs_has_feature_fast_commit(fs->super)) {
+                       params->num_journal_blocks = total_blks;
+                       params->num_fc_blocks = 0;
+                       return 0;
+               }
+               params->num_journal_blocks = ext2fs_blocks_count(fs->super) *
+                               EXT2_JOURNAL_TO_FC_BLKS_RATIO /
+                               (EXT2_JOURNAL_TO_FC_BLKS_RATIO + 1);
+               if (JBD2_MIN_JOURNAL_BLOCKS > params->num_journal_blocks)
+                       params->num_journal_blocks = JBD2_MIN_JOURNAL_BLOCKS;
+               params->num_fc_blocks = total_blks - params->num_journal_blocks;
+               return 0;
+       }
+
+       ret = ext2fs_default_journal_size(ext2fs_blocks_count(fs->super));
+       if (ret < 0)
+               return EXT2_ET_JOURNAL_TOO_SMALL;
+
+       params->num_journal_blocks = ret;
+       if (ext2fs_has_feature_fast_commit(fs->super))
+               params->num_fc_blocks = params->num_journal_blocks /
+                       EXT2_JOURNAL_TO_FC_BLKS_RATIO;
+       return 0;
+}
+
 int ext2fs_journal_sb_start(int blocksize)
 {
        if (blocksize == EXT2_MIN_BLOCK_SIZE)
@@ -392,8 +446,8 @@ errcode_t ext2fs_add_journal_device(ext2_filsys fs, ext2_filsys journal_dev)
                return retval;
 
        jsb = (journal_superblock_t *) buf;
-       if ((jsb->s_header.h_magic != (unsigned) ntohl(JFS_MAGIC_NUMBER)) ||
-           (jsb->s_header.h_blocktype != (unsigned) ntohl(JFS_SUPERBLOCK_V2)))
+       if ((jsb->s_header.h_magic != (unsigned) ntohl(JBD2_MAGIC_NUMBER)) ||
+           (jsb->s_header.h_blocktype != (unsigned) ntohl(JBD2_SUPERBLOCK_V2)))
                return EXT2_ET_NO_JOURNAL_SB;
 
        if (ntohl(jsb->s_blocksize) != (unsigned long) fs->blocksize)
@@ -401,6 +455,8 @@ errcode_t ext2fs_add_journal_device(ext2_filsys fs, ext2_filsys journal_dev)
 
        /* Check and see if this filesystem has already been added */
        nr_users = ntohl(jsb->s_nr_users);
+       if (nr_users > JBD2_USERS_MAX)
+               return EXT2_ET_CORRUPT_JOURNAL_SB;
        for (i=0; i < nr_users; i++) {
                if (memcmp(fs->super->s_uuid,
                           &jsb->s_users[i*16], 16) == 0)
@@ -432,7 +488,7 @@ errcode_t ext2fs_add_journal_device(ext2_filsys fs, ext2_filsys journal_dev)
  * POSIX routines if the filesystem is mounted, or using direct I/O
  * functions if it is not.
  */
-errcode_t ext2fs_add_journal_inode2(ext2_filsys fs, blk_t num_blocks,
+errcode_t ext2fs_add_journal_inode3(ext2_filsys fs, struct ext2fs_journal_params *jparams,
                                    blk64_t goal, int flags)
 {
        errcode_t               retval;
@@ -484,7 +540,7 @@ errcode_t ext2fs_add_journal_inode2(ext2_filsys fs, blk_t num_blocks,
                 * filesystems is extremely rare these days...  Ignore it. */
                flags &= ~EXT2_MKJOURNAL_LAZYINIT;
 
-               if ((retval = write_journal_file(fs, jfile, num_blocks, flags)))
+               if ((retval = write_journal_file(fs, jfile, jparams, flags)))
                        goto errout;
 
                /* Get inode number of the journal file */
@@ -526,7 +582,7 @@ errcode_t ext2fs_add_journal_inode2(ext2_filsys fs, blk_t num_blocks,
                }
                journal_ino = EXT2_JOURNAL_INO;
                if ((retval = write_journal_inode(fs, journal_ino,
-                                                 num_blocks, goal, flags)))
+                                                 jparams, goal, flags)))
                        return retval;
        }
 
@@ -544,6 +600,18 @@ errout:
        return retval;
 }
 
+errcode_t ext2fs_add_journal_inode2(ext2_filsys fs, blk_t num_blocks,
+                                   blk64_t goal, int flags)
+{
+       struct ext2fs_journal_params jparams;
+       errcode_t ret;
+
+       jparams.num_journal_blocks = num_blocks;
+       jparams.num_fc_blocks = 0;
+
+       return ext2fs_add_journal_inode3(fs, &jparams, goal, flags);
+}
+
 errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, int flags)
 {
        return ext2fs_add_journal_inode2(fs, num_blocks, ~0ULL, flags);
@@ -570,7 +638,7 @@ main(int argc, char **argv)
                exit(1);
        }
 
-       retval = ext2fs_add_journal_inode(fs, JFS_MIN_JOURNAL_BLOCKS, 0);
+       retval = ext2fs_add_journal_inode(fs, JBD2_MIN_JOURNAL_BLOCKS, 0);
        if (retval) {
                com_err(argv[0], retval, "while adding journal to %s",
                        device_name);
index 9a771de..c21ae27 100644 (file)
 #define O_DIRECT 0
 #endif
 
+#if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic push
 #ifndef CONFIG_MMP
 #pragma GCC diagnostic ignored "-Wunused-parameter"
 #endif
+#endif
 
 errcode_t ext2fs_mmp_read(ext2_filsys fs, blk64_t mmp_blk, void *buf)
 {
@@ -55,8 +57,21 @@ errcode_t ext2fs_mmp_read(ext2_filsys fs, blk64_t mmp_blk, void *buf)
         * regardless of how the io_manager is doing reads, to avoid caching of
         * the MMP block by the io_manager or the VM.  It needs to be fresh. */
        if (fs->mmp_fd <= 0) {
-               fs->mmp_fd = open(fs->device_name, O_RDWR | O_DIRECT);
+               int flags = O_RDWR | O_DIRECT;
+
+retry:
+               fs->mmp_fd = open(fs->device_name, flags);
                if (fs->mmp_fd < 0) {
+                       struct stat st;
+
+                       /* Avoid O_DIRECT for filesystem image files if open
+                        * fails, since it breaks when running on tmpfs. */
+                       if (errno == EINVAL && (flags & O_DIRECT) &&
+                           stat(fs->device_name, &st) == 0 &&
+                           S_ISREG(st.st_mode)) {
+                               flags &= ~O_DIRECT;
+                               goto retry;
+                       }
                        retval = EXT2_ET_MMP_OPEN_DIRECT;
                        goto out;
                }
@@ -157,9 +172,11 @@ unsigned ext2fs_mmp_new_seq(void)
 #ifdef CONFIG_MMP
        unsigned new_seq;
        struct timeval tv;
+       unsigned long pid = getpid();
 
        gettimeofday(&tv, 0);
-       srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec);
+       pid = (pid >> 16) | ((pid & 0xFFFF) << 16);
+       srand(pid ^ getuid() ^ tv.tv_sec ^ tv.tv_usec);
 
        gettimeofday(&tv, 0);
        /* Crank the random number generator a few times */
@@ -194,12 +211,12 @@ static errcode_t ext2fs_mmp_reset(ext2_filsys fs)
        mmp_s->mmp_magic = EXT4_MMP_MAGIC;
        mmp_s->mmp_seq = EXT4_MMP_SEQ_CLEAN;
        mmp_s->mmp_time = 0;
-#if _BSD_SOURCE || _XOPEN_SOURCE >= 500
-       gethostname(mmp_s->mmp_nodename, sizeof(mmp_s->mmp_nodename));
+#ifdef HAVE_GETHOSTNAME
+       gethostname((char *) mmp_s->mmp_nodename, sizeof(mmp_s->mmp_nodename));
 #else
        mmp_s->mmp_nodename[0] = '\0';
 #endif
-       strncpy(mmp_s->mmp_bdevname, fs->device_name,
+       strncpy((char *) mmp_s->mmp_bdevname, fs->device_name,
                sizeof(mmp_s->mmp_bdevname));
 
        mmp_s->mmp_check_interval = fs->super->s_mmp_update_interval;
@@ -269,6 +286,10 @@ out:
 #endif
 }
 
+#ifndef min
+#define min(x, y) ((x) < (y) ? (x) : (y))
+#endif
+
 /*
  * Make sure that the fs is not mounted or being fsck'ed while opening the fs.
  */
@@ -316,7 +337,7 @@ errcode_t ext2fs_mmp_start(ext2_filsys fs)
        if (mmp_s->mmp_check_interval > mmp_check_interval)
                mmp_check_interval = mmp_s->mmp_check_interval;
 
-       sleep(2 * mmp_check_interval + 1);
+       sleep(min(mmp_check_interval * 2 + 1, mmp_check_interval + 60));
 
        retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, fs->mmp_buf);
        if (retval)
@@ -332,19 +353,19 @@ clean_seq:
                goto mmp_error;
 
        mmp_s->mmp_seq = seq = ext2fs_mmp_new_seq();
-#if _BSD_SOURCE || _XOPEN_SOURCE >= 500
-       gethostname(mmp_s->mmp_nodename, sizeof(mmp_s->mmp_nodename));
+#ifdef HAVE_GETHOSTNAME
+       gethostname((char *) mmp_s->mmp_nodename, sizeof(mmp_s->mmp_nodename));
 #else
        strcpy(mmp_s->mmp_nodename, "unknown host");
 #endif
-       strncpy(mmp_s->mmp_bdevname, fs->device_name,
+       strncpy((char *) mmp_s->mmp_bdevname, fs->device_name,
                sizeof(mmp_s->mmp_bdevname));
 
        retval = ext2fs_mmp_write(fs, fs->super->s_mmp_block, fs->mmp_buf);
        if (retval)
                goto mmp_error;
 
-       sleep(2 * mmp_check_interval + 1);
+       sleep(min(2 * mmp_check_interval + 1, mmp_check_interval + 60));
 
        retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, fs->mmp_buf);
        if (retval)
@@ -461,4 +482,6 @@ mmp_error:
        return EXT2_ET_OP_NOT_SUPPORTED;
 #endif
 }
+#if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic pop
+#endif
index 307aecc..1064ab5 100644 (file)
@@ -50,7 +50,21 @@ static errcode_t follow_link(ext2_filsys fs, ext2_ino_t root, ext2_ino_t dir,
        if (link_count++ >= EXT2FS_MAX_NESTED_LINKS)
                return EXT2_ET_SYMLINK_LOOP;
 
-       if (ext2fs_inode_data_blocks(fs,&ei)) {
+       if (ext2fs_is_fast_symlink(&ei))
+               pathname = (char *)&(ei.i_block[0]);
+       else if (ei.i_flags & EXT4_INLINE_DATA_FL) {
+               retval = ext2fs_get_memzero(ei.i_size, &buffer);
+               if (retval)
+                       return retval;
+
+               retval = ext2fs_inline_data_get(fs, inode,
+                                               &ei, buffer, NULL);
+               if (retval) {
+                       ext2fs_free_mem(&buffer);
+                       return retval;
+               }
+               pathname = buffer;
+       } else {
                retval = ext2fs_bmap2(fs, inode, &ei, NULL, 0, 0, NULL, &blk);
                if (retval)
                        return retval;
@@ -65,8 +79,8 @@ static errcode_t follow_link(ext2_filsys fs, ext2_ino_t root, ext2_ino_t dir,
                        return retval;
                }
                pathname = buffer;
-       } else
-               pathname = (char *)&(ei.i_block[0]);
+       }
+
        retval = open_namei(fs, root, dir, pathname, ei.i_size, 1,
                            link_count, buf, res_inode);
        if (buffer)
@@ -128,7 +142,7 @@ static errcode_t open_namei(ext2_filsys fs, ext2_ino_t root, ext2_ino_t base,
        errcode_t retval;
 
 #ifdef NAMEI_DEBUG
-       printf("open_namei: root=%lu, dir=%lu, path=%*s, lc=%d\n",
+       printf("open_namei: root=%lu, dir=%lu, path=%.*s, lc=%d\n",
               root, base, pathlen, pathname, link_count);
 #endif
        retval = dir_namei(fs, root, base, pathname, pathlen,
diff --git a/lib/ext2fs/nls_utf8.c b/lib/ext2fs/nls_utf8.c
new file mode 100644 (file)
index 0000000..43bab9a
--- /dev/null
@@ -0,0 +1,1000 @@
+/*
+ * Copyright (c) 2014 SGI.
+ * Copyright (c) 2018 Collabora Ltd.
+ * All rights reserved.
+ *
+ * This program 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.
+ *
+ * This program is distributed in the hope that it would 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 code is adapted from the Linux Kernel.  We have a
+ * userspace version here such that the hashes will match that
+ * implementation.
+ */
+
+#include "config.h"
+#include <stdint.h>
+#include <unistd.h>
+#include <string.h>
+#include <limits.h>
+#include <errno.h>
+
+#include "ext2_fs.h"
+#include "ext2fs.h"
+#include "ext2fsP.h"
+
+/* Encoding a unicode version number as a single unsigned int. */
+#define UNICODE_MAJ_SHIFT              (16)
+#define UNICODE_MIN_SHIFT              (8)
+
+#define UNICODE_AGE(MAJ, MIN, REV)                     \
+       (((unsigned int)(MAJ) << UNICODE_MAJ_SHIFT) |   \
+        ((unsigned int)(MIN) << UNICODE_MIN_SHIFT) |   \
+        ((unsigned int)(REV)))
+
+/* Needed in struct utf8cursor below. */
+#define UTF8HANGULLEAF (12)
+
+/*
+ * Cursor structure used by the normalizer.
+ */
+struct utf8cursor {
+       const struct utf8data   *data;
+       const char      *s;
+       const char      *p;
+       const char      *ss;
+       const char      *sp;
+       unsigned int    len;
+       unsigned int    slen;
+       short int       ccc;
+       short int       nccc;
+       unsigned char   hangul[UTF8HANGULLEAF];
+};
+
+/*
+ * Initialize a utf8cursor to normalize a string.
+ * Returns 0 on success.
+ * Returns -1 on failure.
+ */
+// extern int utf8cursor(struct utf8cursor *u8c, const struct utf8data *data,
+//                   const char *s);
+// extern int utf8ncursor(struct utf8cursor *u8c, const struct utf8data *data,
+//                    const char *s, size_t len);
+
+/*
+ * Get the next byte in the normalization.
+ * Returns a value > 0 && < 256 on success.
+ * Returns 0 when the end of the normalization is reached.
+ * Returns -1 if the string being normalized is not valid UTF-8.
+ */
+// extern int utf8byte(struct utf8cursor *u8c);
+
+
+struct utf8data {
+       unsigned int maxage;
+       unsigned int offset;
+};
+
+#define __INCLUDED_FROM_UTF8NORM_C__
+#include "utf8data.h"
+#undef __INCLUDED_FROM_UTF8NORM_C__
+
+#define ARRAY_SIZE(array)                      \
+        (sizeof(array) / sizeof(array[0]))
+
+#if 0
+/* Highest unicode version supported by the data tables. */
+static int utf8version_is_supported(uint8_t maj, uint8_t min, uint8_t rev)
+{
+       int i = ARRAY_SIZE(utf8agetab) - 1;
+       unsigned int sb_utf8version = UNICODE_AGE(maj, min, rev);
+
+       while (i >= 0 && utf8agetab[i] != 0) {
+               if (sb_utf8version == utf8agetab[i])
+                       return 1;
+               i--;
+       }
+       return 0;
+}
+#endif
+
+#if 0
+static int utf8version_latest(void)
+{
+       return utf8vers;
+}
+#endif
+
+/*
+ * UTF-8 valid ranges.
+ *
+ * The UTF-8 encoding spreads the bits of a 32bit word over several
+ * bytes. This table gives the ranges that can be held and how they'd
+ * be represented.
+ *
+ * 0x00000000 0x0000007F: 0xxxxxxx
+ * 0x00000000 0x000007FF: 110xxxxx 10xxxxxx
+ * 0x00000000 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ *
+ * There is an additional requirement on UTF-8, in that only the
+ * shortest representation of a 32bit value is to be used.  A decoder
+ * must not decode sequences that do not satisfy this requirement.
+ * Thus the allowed ranges have a lower bound.
+ *
+ * 0x00000000 0x0000007F: 0xxxxxxx
+ * 0x00000080 0x000007FF: 110xxxxx 10xxxxxx
+ * 0x00000800 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
+ * 0x00010000 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00200000 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x04000000 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ *
+ * Actual unicode characters are limited to the range 0x0 - 0x10FFFF,
+ * 17 planes of 65536 values.  This limits the sequences actually seen
+ * even more, to just the following.
+ *
+ *          0 -     0x7F: 0                   - 0x7F
+ *       0x80 -    0x7FF: 0xC2 0x80           - 0xDF 0xBF
+ *      0x800 -   0xFFFF: 0xE0 0xA0 0x80      - 0xEF 0xBF 0xBF
+ *    0x10000 - 0x10FFFF: 0xF0 0x90 0x80 0x80 - 0xF4 0x8F 0xBF 0xBF
+ *
+ * Within those ranges the surrogates 0xD800 - 0xDFFF are not allowed.
+ *
+ * Note that the longest sequence seen with valid usage is 4 bytes,
+ * the same a single UTF-32 character.  This makes the UTF-8
+ * representation of Unicode strictly smaller than UTF-32.
+ *
+ * The shortest sequence requirement was introduced by:
+ *    Corrigendum #1: UTF-8 Shortest Form
+ * It can be found here:
+ *    http://www.unicode.org/versions/corrigendum1.html
+ *
+ */
+
+/*
+ * Return the number of bytes used by the current UTF-8 sequence.
+ * Assumes the input points to the first byte of a valid UTF-8
+ * sequence.
+ */
+static inline int utf8clen(const char *s)
+{
+       unsigned char c = *s;
+
+       return 1 + (c >= 0xC0) + (c >= 0xE0) + (c >= 0xF0);
+}
+
+/*
+ * Decode a 3-byte UTF-8 sequence.
+ */
+static unsigned int
+utf8decode3(const char *str)
+{
+       unsigned int            uc;
+
+       uc = *str++ & 0x0F;
+       uc <<= 6;
+       uc |= *str++ & 0x3F;
+       uc <<= 6;
+       uc |= *str++ & 0x3F;
+
+       return uc;
+}
+
+/*
+ * Encode a 3-byte UTF-8 sequence.
+ */
+static int
+utf8encode3(char *str, unsigned int val)
+{
+       str[2] = (val & 0x3F) | 0x80;
+       val >>= 6;
+       str[1] = (val & 0x3F) | 0x80;
+       val >>= 6;
+       str[0] = val | 0xE0;
+
+       return 3;
+}
+
+/*
+ * utf8trie_t
+ *
+ * A compact binary tree, used to decode UTF-8 characters.
+ *
+ * Internal nodes are one byte for the node itself, and up to three
+ * bytes for an offset into the tree.  The first byte contains the
+ * following information:
+ *  NEXTBYTE  - flag        - advance to next byte if set
+ *  BITNUM    - 3 bit field - the bit number to tested
+ *  OFFLEN    - 2 bit field - number of bytes in the offset
+ * if offlen == 0 (non-branching node)
+ *  RIGHTPATH - 1 bit field - set if the following node is for the
+ *                            right-hand path (tested bit is set)
+ *  TRIENODE  - 1 bit field - set if the following node is an internal
+ *                            node, otherwise it is a leaf node
+ * if offlen != 0 (branching node)
+ *  LEFTNODE  - 1 bit field - set if the left-hand node is internal
+ *  RIGHTNODE - 1 bit field - set if the right-hand node is internal
+ *
+ * Due to the way utf8 works, there cannot be branching nodes with
+ * NEXTBYTE set, and moreover those nodes always have a righthand
+ * descendant.
+ */
+typedef const unsigned char utf8trie_t;
+#define BITNUM         0x07
+#define NEXTBYTE       0x08
+#define OFFLEN         0x30
+#define OFFLEN_SHIFT   4
+#define RIGHTPATH      0x40
+#define TRIENODE       0x80
+#define RIGHTNODE      0x40
+#define LEFTNODE       0x80
+
+/*
+ * utf8leaf_t
+ *
+ * The leaves of the trie are embedded in the trie, and so the same
+ * underlying datatype: unsigned char.
+ *
+ * leaf[0]: The unicode version, stored as a generation number that is
+ *          an index into utf8agetab[].  With this we can filter code
+ *          points based on the unicode version in which they were
+ *          defined.  The CCC of a non-defined code point is 0.
+ * leaf[1]: Canonical Combining Class. During normalization, we need
+ *          to do a stable sort into ascending order of all characters
+ *          with a non-zero CCC that occur between two characters with
+ *          a CCC of 0, or at the begin or end of a string.
+ *          The unicode standard guarantees that all CCC values are
+ *          between 0 and 254 inclusive, which leaves 255 available as
+ *          a special value.
+ *          Code points with CCC 0 are known as stoppers.
+ * leaf[2]: Decomposition. If leaf[1] == 255, then leaf[2] is the
+ *          start of a NUL-terminated string that is the decomposition
+ *          of the character.
+ *          The CCC of a decomposable character is the same as the CCC
+ *          of the first character of its decomposition.
+ *          Some characters decompose as the empty string: these are
+ *          characters with the Default_Ignorable_Code_Point property.
+ *          These do affect normalization, as they all have CCC 0.
+ *
+ * The decompositions in the trie have been fully expanded, with the
+ * exception of Hangul syllables, which are decomposed algorithmically.
+ *
+ * Casefolding, if applicable, is also done using decompositions.
+ *
+ * The trie is constructed in such a way that leaves exist for all
+ * UTF-8 sequences that match the criteria from the "UTF-8 valid
+ * ranges" comment above, and only for those sequences.  Therefore a
+ * lookup in the trie can be used to validate the UTF-8 input.
+ */
+typedef const unsigned char utf8leaf_t;
+
+#define LEAF_GEN(LEAF) ((LEAF)[0])
+#define LEAF_CCC(LEAF) ((LEAF)[1])
+#define LEAF_STR(LEAF) ((const char *)((LEAF) + 2))
+
+#define MINCCC         (0)
+#define MAXCCC         (254)
+#define STOPPER                (0)
+#define        DECOMPOSE       (255)
+
+/* Marker for hangul syllable decomposition. */
+#define HANGUL         ((char)(255))
+/* Size of the synthesized leaf used for Hangul syllable decomposition. */
+#define UTF8HANGULLEAF (12)
+
+/*
+ * Hangul decomposition (algorithm from Section 3.12 of Unicode 6.3.0)
+ *
+ * AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+ * D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+ *
+ * SBase = 0xAC00
+ * LBase = 0x1100
+ * VBase = 0x1161
+ * TBase = 0x11A7
+ * LCount = 19
+ * VCount = 21
+ * TCount = 28
+ * NCount = 588 (VCount * TCount)
+ * SCount = 11172 (LCount * NCount)
+ *
+ * Decomposition:
+ *   SIndex = s - SBase
+ *
+ * LV (Canonical/Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *
+ * LVT (Canonical)
+ *   LVIndex = (SIndex / TCount) * TCount
+ *   TIndex = (Sindex % TCount)
+ *   LVPart = SBase + LVIndex
+ *   TPart = TBase + TIndex
+ *
+ * LVT (Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   TIndex = (Sindex % TCount)
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *   if (TIndex == 0) {
+ *          d = <LPart, VPart>
+ *   } else {
+ *          TPart = TBase + TIndex
+ *          d = <LPart, TPart, VPart>
+ *   }
+ */
+
+/* Constants */
+#define SB     (0xAC00)
+#define LB     (0x1100)
+#define VB     (0x1161)
+#define TB     (0x11A7)
+#define LC     (19)
+#define VC     (21)
+#define TC     (28)
+#define NC     (VC * TC)
+#define SC     (LC * NC)
+
+/* Algorithmic decomposition of hangul syllable. */
+static utf8leaf_t *
+utf8hangul(const char *str, unsigned char *hangul)
+{
+       unsigned int    si;
+       unsigned int    li;
+       unsigned int    vi;
+       unsigned int    ti;
+       unsigned char   *h;
+
+       /* Calculate the SI, LI, VI, and TI values. */
+       si = utf8decode3(str) - SB;
+       li = si / NC;
+       vi = (si % NC) / TC;
+       ti = si % TC;
+
+       /* Fill in base of leaf. */
+       h = hangul;
+       LEAF_GEN(h) = 2;
+       LEAF_CCC(h) = DECOMPOSE;
+       h += 2;
+
+       /* Add LPart, a 3-byte UTF-8 sequence. */
+       h += utf8encode3((char *)h, li + LB);
+
+       /* Add VPart, a 3-byte UTF-8 sequence. */
+       h += utf8encode3((char *)h, vi + VB);
+
+       /* Add TPart if required, also a 3-byte UTF-8 sequence. */
+       if (ti)
+               h += utf8encode3((char *)h, ti + TB);
+
+       /* Terminate string. */
+       h[0] = '\0';
+
+       return hangul;
+}
+
+/*
+ * Use trie to scan s, touching at most len bytes.
+ * Returns the leaf if one exists, NULL otherwise.
+ *
+ * A non-NULL return guarantees that the UTF-8 sequence starting at s
+ * is well-formed and corresponds to a known unicode code point.  The
+ * shorthand for this will be "is valid UTF-8 unicode".
+ */
+static utf8leaf_t *utf8nlookup(const struct utf8data *data,
+                              unsigned char *hangul, const char *s, size_t len)
+{
+       utf8trie_t      *trie;
+       int             offlen;
+       int             offset;
+       int             mask;
+       int             node;
+
+       if (!data)
+               return NULL;
+       if (len == 0)
+               return NULL;
+
+       trie = utf8data + data->offset;
+       node = 1;
+       while (node) {
+               offlen = (*trie & OFFLEN) >> OFFLEN_SHIFT;
+               if (*trie & NEXTBYTE) {
+                       if (--len == 0)
+                               return NULL;
+                       s++;
+               }
+               mask = 1 << (*trie & BITNUM);
+               if (*s & mask) {
+                       /* Right leg */
+                       if (offlen) {
+                               /* Right node at offset of trie */
+                               node = (*trie & RIGHTNODE);
+                               offset = trie[offlen];
+                               while (--offlen) {
+                                       offset <<= 8;
+                                       offset |= trie[offlen];
+                               }
+                               trie += offset;
+                       } else if (*trie & RIGHTPATH) {
+                               /* Right node after this node */
+                               node = (*trie & TRIENODE);
+                               trie++;
+                       } else {
+                               /* No right node. */
+                               return NULL;
+                       }
+               } else {
+                       /* Left leg */
+                       if (offlen) {
+                               /* Left node after this node. */
+                               node = (*trie & LEFTNODE);
+                               trie += offlen + 1;
+                       } else if (*trie & RIGHTPATH) {
+                               /* No left node. */
+                               return NULL;
+                       } else {
+                               /* Left node after this node */
+                               node = (*trie & TRIENODE);
+                               trie++;
+                       }
+               }
+       }
+       /*
+        * Hangul decomposition is done algorithmically. These are the
+        * codepoints >= 0xAC00 and <= 0xD7A3. Their UTF-8 encoding is
+        * always 3 bytes long, so s has been advanced twice, and the
+        * start of the sequence is at s-2.
+        */
+       if (LEAF_CCC(trie) == DECOMPOSE && LEAF_STR(trie)[0] == HANGUL)
+               trie = utf8hangul(s - 2, hangul);
+       return trie;
+}
+
+/*
+ * Use trie to scan s.
+ * Returns the leaf if one exists, NULL otherwise.
+ *
+ * Forwards to utf8nlookup().
+ */
+static utf8leaf_t *utf8lookup(const struct utf8data *data,
+                             unsigned char *hangul, const char *s)
+{
+       return utf8nlookup(data, hangul, s, (size_t)-1);
+}
+
+#if 0
+/*
+ * Maximum age of any character in s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ * Return 0 if only non-assigned code points are used.
+ */
+static int utf8agemax(const struct utf8data *data, const char *s)
+{
+       utf8leaf_t      *leaf;
+       int             age = 0;
+       int             leaf_age;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!data)
+               return -1;
+
+       while (*s) {
+               leaf = utf8lookup(data, hangul, s);
+               if (!leaf)
+                       return -1;
+
+               leaf_age = utf8agetab[LEAF_GEN(leaf)];
+               if (leaf_age <= data->maxage && leaf_age > age)
+                       age = leaf_age;
+               s += utf8clen(s);
+       }
+       return age;
+}
+#endif
+
+#if 0
+/*
+ * Minimum age of any character in s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ * Return 0 if non-assigned code points are used.
+ */
+static int utf8agemin(const struct utf8data *data, const char *s)
+{
+       utf8leaf_t      *leaf;
+       int             age;
+       int             leaf_age;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!data)
+               return -1;
+       age = data->maxage;
+       while (*s) {
+               leaf = utf8lookup(data, hangul, s);
+               if (!leaf)
+                       return -1;
+               leaf_age = utf8agetab[LEAF_GEN(leaf)];
+               if (leaf_age <= data->maxage && leaf_age < age)
+                       age = leaf_age;
+               s += utf8clen(s);
+       }
+       return age;
+}
+#endif
+
+#if 0
+/*
+ * Maximum age of any character in s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+static int utf8nagemax(const struct utf8data *data, const char *s, size_t len)
+{
+       utf8leaf_t      *leaf;
+       int             age = 0;
+       int             leaf_age;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!data)
+               return -1;
+
+       while (len && *s) {
+               leaf = utf8nlookup(data, hangul, s, len);
+               if (!leaf)
+                       return -1;
+               leaf_age = utf8agetab[LEAF_GEN(leaf)];
+               if (leaf_age <= data->maxage && leaf_age > age)
+                       age = leaf_age;
+               len -= utf8clen(s);
+               s += utf8clen(s);
+       }
+       return age;
+}
+#endif
+
+#if 0
+/*
+ * Maximum age of any character in s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+static int utf8nagemin(const struct utf8data *data, const char *s, size_t len)
+{
+       utf8leaf_t      *leaf;
+       int             leaf_age;
+       int             age;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!data)
+               return -1;
+       age = data->maxage;
+       while (len && *s) {
+               leaf = utf8nlookup(data, hangul, s, len);
+               if (!leaf)
+                       return -1;
+               leaf_age = utf8agetab[LEAF_GEN(leaf)];
+               if (leaf_age <= data->maxage && leaf_age < age)
+                       age = leaf_age;
+               len -= utf8clen(s);
+               s += utf8clen(s);
+       }
+       return age;
+}
+#endif
+
+#if 0
+/*
+ * Length of the normalization of s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ *
+ * A string of Default_Ignorable_Code_Point has length 0.
+ */
+static ssize_t utf8len(const struct utf8data *data, const char *s)
+{
+       utf8leaf_t      *leaf;
+       size_t          ret = 0;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!data)
+               return -1;
+       while (*s) {
+               leaf = utf8lookup(data, hangul, s);
+               if (!leaf)
+                       return -1;
+               if (utf8agetab[LEAF_GEN(leaf)] > data->maxage)
+                       ret += utf8clen(s);
+               else if (LEAF_CCC(leaf) == DECOMPOSE)
+                       ret += strlen(LEAF_STR(leaf));
+               else
+                       ret += utf8clen(s);
+               s += utf8clen(s);
+       }
+       return ret;
+}
+#endif
+
+#if 0
+/*
+ * Length of the normalization of s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+static ssize_t utf8nlen(const struct utf8data *data, const char *s, size_t len)
+{
+       utf8leaf_t      *leaf;
+       size_t          ret = 0;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!data)
+               return -1;
+       while (len && *s) {
+               leaf = utf8nlookup(data, hangul, s, len);
+               if (!leaf)
+                       return -1;
+               if (utf8agetab[LEAF_GEN(leaf)] > data->maxage)
+                       ret += utf8clen(s);
+               else if (LEAF_CCC(leaf) == DECOMPOSE)
+                       ret += strlen(LEAF_STR(leaf));
+               else
+                       ret += utf8clen(s);
+               len -= utf8clen(s);
+               s += utf8clen(s);
+       }
+       return ret;
+}
+#endif
+
+/*
+ * Set up an utf8cursor for use by utf8byte().
+ *
+ *   u8c    : pointer to cursor.
+ *   data   : const struct utf8data to use for normalization.
+ *   s      : string.
+ *   len    : length of s.
+ *
+ * Returns -1 on error, 0 on success.
+ */
+static int utf8ncursor(struct utf8cursor *u8c, const struct utf8data *data,
+               const char *s, size_t len)
+{
+       if (!data)
+               return -1;
+       if (!s)
+               return -1;
+       u8c->data = data;
+       u8c->s = s;
+       u8c->p = NULL;
+       u8c->ss = NULL;
+       u8c->sp = NULL;
+       u8c->len = len;
+       u8c->slen = 0;
+       u8c->ccc = STOPPER;
+       u8c->nccc = STOPPER;
+       /* Check we didn't clobber the maximum length. */
+       if (u8c->len != len)
+               return -1;
+       /* The first byte of s may not be an utf8 continuation. */
+       if (len > 0 && (*s & 0xC0) == 0x80)
+               return -1;
+       return 0;
+}
+
+#if 0
+/*
+ * Set up an utf8cursor for use by utf8byte().
+ *
+ *   u8c    : pointer to cursor.
+ *   data   : const struct utf8data to use for normalization.
+ *   s      : NUL-terminated string.
+ *
+ * Returns -1 on error, 0 on success.
+ */
+static int utf8cursor(struct utf8cursor *u8c, const struct utf8data *data,
+              const char *s)
+{
+       return utf8ncursor(u8c, data, s, (unsigned int)-1);
+}
+#endif
+
+/*
+ * Get one byte from the normalized form of the string described by u8c.
+ *
+ * Returns the byte cast to an unsigned char on succes, and -1 on failure.
+ *
+ * The cursor keeps track of the location in the string in u8c->s.
+ * When a character is decomposed, the current location is stored in
+ * u8c->p, and u8c->s is set to the start of the decomposition. Note
+ * that bytes from a decomposition do not count against u8c->len.
+ *
+ * Characters are emitted if they match the current CCC in u8c->ccc.
+ * Hitting end-of-string while u8c->ccc == STOPPER means we're done,
+ * and the function returns 0 in that case.
+ *
+ * Sorting by CCC is done by repeatedly scanning the string.  The
+ * values of u8c->s and u8c->p are stored in u8c->ss and u8c->sp at
+ * the start of the scan.  The first pass finds the lowest CCC to be
+ * emitted and stores it in u8c->nccc, the second pass emits the
+ * characters with this CCC and finds the next lowest CCC. This limits
+ * the number of passes to 1 + the number of different CCCs in the
+ * sequence being scanned.
+ *
+ * Therefore:
+ *  u8c->p  != NULL -> a decomposition is being scanned.
+ *  u8c->ss != NULL -> this is a repeating scan.
+ *  u8c->ccc == -1   -> this is the first scan of a repeating scan.
+ */
+static int utf8byte(struct utf8cursor *u8c)
+{
+       utf8leaf_t *leaf;
+       int ccc;
+
+       for (;;) {
+               /* Check for the end of a decomposed character. */
+               if (u8c->p && *u8c->s == '\0') {
+                       u8c->s = u8c->p;
+                       u8c->p = NULL;
+               }
+
+               /* Check for end-of-string. */
+               if (!u8c->p && (u8c->len == 0 || *u8c->s == '\0')) {
+                       /* There is no next byte. */
+                       if (u8c->ccc == STOPPER)
+                               return 0;
+                       /* End-of-string during a scan counts as a stopper. */
+                       ccc = STOPPER;
+                       goto ccc_mismatch;
+               } else if ((*u8c->s & 0xC0) == 0x80) {
+                       /* This is a continuation of the current character. */
+                       if (!u8c->p)
+                               u8c->len--;
+                       return (unsigned char)*u8c->s++;
+               }
+
+               /* Look up the data for the current character. */
+               if (u8c->p) {
+                       leaf = utf8lookup(u8c->data, u8c->hangul, u8c->s);
+               } else {
+                       leaf = utf8nlookup(u8c->data, u8c->hangul,
+                                          u8c->s, u8c->len);
+               }
+
+               /* No leaf found implies that the input is a binary blob. */
+               if (!leaf)
+                       return -1;
+
+               ccc = LEAF_CCC(leaf);
+               /* Characters that are too new have CCC 0. */
+               if (utf8agetab[LEAF_GEN(leaf)] > u8c->data->maxage) {
+                       ccc = STOPPER;
+               } else if (ccc == DECOMPOSE) {
+                       u8c->len -= utf8clen(u8c->s);
+                       u8c->p = u8c->s + utf8clen(u8c->s);
+                       u8c->s = LEAF_STR(leaf);
+                       /* Empty decomposition implies CCC 0. */
+                       if (*u8c->s == '\0') {
+                               if (u8c->ccc == STOPPER)
+                                       continue;
+                               ccc = STOPPER;
+                               goto ccc_mismatch;
+                       }
+
+                       leaf = utf8lookup(u8c->data, u8c->hangul, u8c->s);
+                       if (!leaf)
+                               return -1;
+                       ccc = LEAF_CCC(leaf);
+               }
+
+               /*
+                * If this is not a stopper, then see if it updates
+                * the next canonical class to be emitted.
+                */
+               if (ccc != STOPPER && u8c->ccc < ccc && ccc < u8c->nccc)
+                       u8c->nccc = ccc;
+
+               /*
+                * Return the current byte if this is the current
+                * combining class.
+                */
+               if (ccc == u8c->ccc) {
+                       if (!u8c->p)
+                               u8c->len--;
+                       return (unsigned char)*u8c->s++;
+               }
+
+               /* Current combining class mismatch. */
+ccc_mismatch:
+               if (u8c->nccc == STOPPER) {
+                       /*
+                        * Scan forward for the first canonical class
+                        * to be emitted.  Save the position from
+                        * which to restart.
+                        */
+                       u8c->ccc = MINCCC - 1;
+                       u8c->nccc = ccc;
+                       u8c->sp = u8c->p;
+                       u8c->ss = u8c->s;
+                       u8c->slen = u8c->len;
+                       if (!u8c->p)
+                               u8c->len -= utf8clen(u8c->s);
+                       u8c->s += utf8clen(u8c->s);
+               } else if (ccc != STOPPER) {
+                       /* Not a stopper, and not the ccc we're emitting. */
+                       if (!u8c->p)
+                               u8c->len -= utf8clen(u8c->s);
+                       u8c->s += utf8clen(u8c->s);
+               } else if (u8c->nccc != MAXCCC + 1) {
+                       /* At a stopper, restart for next ccc. */
+                       u8c->ccc = u8c->nccc;
+                       u8c->nccc = MAXCCC + 1;
+                       u8c->s = u8c->ss;
+                       u8c->p = u8c->sp;
+                       u8c->len = u8c->slen;
+               } else {
+                       /* All done, proceed from here. */
+                       u8c->ccc = STOPPER;
+                       u8c->nccc = STOPPER;
+                       u8c->sp = NULL;
+                       u8c->ss = NULL;
+                       u8c->slen = 0;
+               }
+       }
+}
+
+#if 0
+/*
+ * Look for the correct const struct utf8data for a unicode version.
+ * Returns NULL if the version requested is too new.
+ *
+ * Two normalization forms are supported: nfdi and nfdicf.
+ *
+ * nfdi:
+ *  - Apply unicode normalization form NFD.
+ *  - Remove any Default_Ignorable_Code_Point.
+ *
+ * nfdicf:
+ *  - Apply unicode normalization form NFD.
+ *  - Remove any Default_Ignorable_Code_Point.
+ *  - Apply a full casefold (C + F).
+ */
+static const struct utf8data *utf8nfdi(unsigned int maxage)
+{
+       int i = ARRAY_SIZE(utf8nfdidata) - 1;
+
+       while (maxage < utf8nfdidata[i].maxage)
+               i--;
+       if (maxage > utf8nfdidata[i].maxage)
+               return NULL;
+       return &utf8nfdidata[i];
+}
+#endif
+
+static const struct utf8data *utf8nfdicf(unsigned int maxage)
+{
+       int i = ARRAY_SIZE(utf8nfdicfdata) - 1;
+
+       while (maxage < utf8nfdicfdata[i].maxage)
+               i--;
+       if (maxage > utf8nfdicfdata[i].maxage)
+               return NULL;
+       return &utf8nfdicfdata[i];
+}
+
+static int utf8_casefold(const struct ext2fs_nls_table *table,
+                         const unsigned char *str, size_t len,
+                         unsigned char *dest, size_t dlen)
+{
+       const struct utf8data *data = utf8nfdicf(table->version);
+       struct utf8cursor cur;
+       size_t nlen = 0;
+
+       if (utf8ncursor(&cur, data, (const char *) str, len) < 0)
+               goto invalid_seq;
+
+       for (nlen = 0; nlen < dlen; nlen++) {
+               int c = utf8byte(&cur);
+
+               dest[nlen] = c;
+               if (!c)
+                       return nlen;
+               if (c == -1)
+                       break;
+       }
+
+       return -ENAMETOOLONG;
+
+invalid_seq:
+       if (dlen < len)
+               return -ENAMETOOLONG;
+
+       /* Signal invalid sequence */
+       return -EINVAL;
+}
+
+static int utf8_validate(const struct ext2fs_nls_table *table,
+                        char *s, size_t len, char **pos)
+{
+       const struct utf8data *data = utf8nfdicf(table->version);
+       utf8leaf_t      *leaf;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!data)
+               return -1;
+       while (len && *s) {
+               leaf = utf8nlookup(data, hangul, s, len);
+               if (!leaf) {
+                       *pos = s;
+                       return 1;
+               }
+               len -= utf8clen(s);
+               s += utf8clen(s);
+       }
+       return 0;
+}
+
+static int utf8_casefold_cmp(const struct ext2fs_nls_table *table,
+                            const unsigned char *str1, size_t len1,
+                            const unsigned char *str2, size_t len2)
+{
+       const struct utf8data *data = utf8nfdicf(table->version);
+       int c1, c2;
+       struct utf8cursor cur1, cur2;
+
+       if (utf8ncursor(&cur1, data, (const char *) str1, len1) < 0)
+               return -1;
+       if (utf8ncursor(&cur2, data, (const char *) str2, len2) < 0)
+               return -1;
+
+       do {
+               c1 = utf8byte(&cur1);
+               c2 = utf8byte(&cur2);
+
+               if (c1 < 0 || c2 < 0)
+                       return -1;
+               if (c1 != c2)
+                       return c1 - c2;
+       } while (c1);
+
+       return 0;
+}
+
+static const struct ext2fs_nls_ops utf8_ops = {
+       .casefold = utf8_casefold,
+       .validate = utf8_validate,
+       .casefold_cmp = utf8_casefold_cmp,
+};
+
+static const struct ext2fs_nls_table nls_utf8 = {
+       .ops = &utf8_ops,
+       .version = UNICODE_AGE(12, 1, 0),
+};
+
+const struct ext2fs_nls_table *ext2fs_load_nls_table(int encoding)
+{
+       if (encoding == EXT4_ENC_UTF8_12_1)
+               return &nls_utf8;
+
+       return NULL;
+}
+
+int ext2fs_check_encoded_name(const struct ext2fs_nls_table *table,
+                             char *name, size_t len, char **pos)
+{
+       return table->ops->validate(table, name, len, pos);
+}
+
+int ext2fs_casefold_cmp(const struct ext2fs_nls_table *table,
+                       const unsigned char *str1, size_t len1,
+                       const unsigned char *str2, size_t len2)
+{
+       return table->ops->casefold_cmp(table, str1, len1, str2, len2);
+}
index f0d16ae..234f6b1 100644 (file)
@@ -378,7 +378,7 @@ _MapNtStatus(
 
 
 //
-// Helper functions to make things easyer
+// Helper functions to make things easier
 //
 
 static
@@ -398,7 +398,7 @@ _OpenNtName(
        IO_STATUS_BLOCK IoStatusBlock;
 
        //
-       // Make Unicode name from inlut string
+       // Make Unicode name from input string
        //
 
        UnicodeString.Buffer = &Buffer[0];
@@ -411,7 +411,7 @@ _OpenNtName(
 
        if(!NT_SUCCESS(Status))
        {
-               return Status; // Unpappable character?
+               return Status; // Unmappable character?
        }
 
        //
@@ -673,7 +673,7 @@ _NormalizeDeviceName(
        else if('f' == *Device)
        {
                //
-               // 3-d letted should be a digit.
+               // 3-d letter should be a digit.
                //
 
                if((*(Device + 3) != '\0') ||
index ba39e01..5ec8ed5 100644 (file)
@@ -29,7 +29,6 @@
 
 #include "ext2_fs.h"
 
-
 #include "ext2fs.h"
 #include "e2image.h"
 
@@ -94,6 +93,12 @@ errcode_t ext2fs_open(const char *name, int flags, int superblock,
                            manager, ret_fs);
 }
 
+static void block_sha_map_free_entry(void *data)
+{
+       free(data);
+       return;
+}
+
 /*
  *  Note: if superblock is non-zero, block-size must also be non-zero.
  *     Superblock and block_size can be zero to use the default size.
@@ -121,11 +126,15 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
        blk64_t         group_block, blk;
        char            *dest, *cp;
        int             group_zero_adjust = 0;
+       unsigned int    inode_size;
+       __u64           groups_cnt;
 #ifdef WORDS_BIGENDIAN
        unsigned int    groups_per_block;
        struct ext2_group_desc *gdp;
        int             j;
 #endif
+       char            *time_env;
+       int             csum_retries = 0;
 
        EXT2_CHECK_MAGIC(manager, EXT2_ET_MAGIC_IO_MANAGER);
 
@@ -139,6 +148,11 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
        /* don't overwrite sb backups unless flag is explicitly cleared */
        fs->flags |= EXT2_FLAG_MASTER_SB_ONLY;
        fs->umask = 022;
+
+       time_env = getenv("E2FSPROGS_FAKE_TIME");
+       if (time_env)
+               fs->now = strtoul(time_env, NULL, 0);
+
        retval = ext2fs_get_mem(strlen(name)+1, &fs->device_name);
        if (retval)
                goto cleanup;
@@ -156,6 +170,8 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                io_flags |= IO_FLAG_EXCLUSIVE;
        if (flags & EXT2_FLAG_DIRECT_IO)
                io_flags |= IO_FLAG_DIRECT_IO;
+       if (flags & EXT2_FLAG_THREADS)
+               io_flags |= IO_FLAG_THREADS;
        retval = manager->open(fs->device_name, io_flags, &fs->io);
        if (retval)
                goto cleanup;
@@ -177,10 +193,10 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                                             fs->image_header);
                if (retval)
                        goto cleanup;
-               if (fs->image_header->magic_number != EXT2_ET_MAGIC_E2IMAGE)
+               if (ext2fs_le32_to_cpu(fs->image_header->magic_number) != EXT2_ET_MAGIC_E2IMAGE)
                        return EXT2_ET_MAGIC_E2IMAGE;
                superblock = 1;
-               block_size = fs->image_header->fs_blocksize;
+               block_size = ext2fs_le32_to_cpu(fs->image_header->fs_blocksize);
        }
 
        /*
@@ -208,6 +224,7 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                if (retval)
                        goto cleanup;
        }
+retry:
        retval = io_channel_read_blk(fs->io, superblock, -SUPERBLOCK_SIZE,
                                     fs->super);
        if (retval)
@@ -219,8 +236,11 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                retval = 0;
                if (!ext2fs_verify_csum_type(fs, fs->super))
                        retval = EXT2_ET_UNKNOWN_CSUM;
-               if (!ext2fs_superblock_csum_verify(fs, fs->super))
+               if (!ext2fs_superblock_csum_verify(fs, fs->super)) {
+                       if (csum_retries++ < 3)
+                               goto retry;
                        retval = EXT2_ET_SB_CSUM_INVALID;
+               }
        }
 
 #ifdef WORDS_BIGENDIAN
@@ -275,8 +295,8 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                }
        }
 
-       if ((fs->super->s_log_block_size + EXT2_MIN_BLOCK_LOG_SIZE) >
-           EXT2_MAX_BLOCK_LOG_SIZE) {
+       if (fs->super->s_log_block_size >
+           (unsigned) (EXT2_MAX_BLOCK_LOG_SIZE - EXT2_MIN_BLOCK_LOG_SIZE)) {
                retval = EXT2_ET_CORRUPT_SUPERBLOCK;
                goto cleanup;
        }
@@ -297,7 +317,10 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                goto cleanup;
        }
        fs->fragsize = fs->blocksize = EXT2_BLOCK_SIZE(fs->super);
-       if (EXT2_INODE_SIZE(fs->super) < EXT2_GOOD_OLD_INODE_SIZE) {
+       inode_size = EXT2_INODE_SIZE(fs->super);
+       if ((inode_size < EXT2_GOOD_OLD_INODE_SIZE) ||
+           (inode_size > fs->blocksize) ||
+           (inode_size & (inode_size - 1))) {
                retval = EXT2_ET_CORRUPT_SUPERBLOCK;
                goto cleanup;
        }
@@ -308,12 +331,6 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                        retval = EXT2_ET_BAD_DESC_SIZE;
                        goto cleanup;
                }
-       } else {
-               if (fs->super->s_desc_size &&
-                   fs->super->s_desc_size != EXT2_MIN_DESC_SIZE) {
-                       retval = EXT2_ET_BAD_DESC_SIZE;
-                       goto cleanup;
-               }
        }
 
        fs->cluster_ratio_bits = fs->super->s_log_cluster_size -
@@ -367,16 +384,24 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                retval = EXT2_ET_CORRUPT_SUPERBLOCK;
                goto cleanup;
        }
-       fs->group_desc_count = ext2fs_div64_ceil(ext2fs_blocks_count(fs->super) -
-                                                fs->super->s_first_data_block,
-                                                blocks_per_group);
-       if (fs->group_desc_count * EXT2_INODES_PER_GROUP(fs->super) !=
+       groups_cnt = ext2fs_div64_ceil(ext2fs_blocks_count(fs->super) -
+                                      fs->super->s_first_data_block,
+                                      blocks_per_group);
+       if (groups_cnt >> 32) {
+               retval = EXT2_ET_CORRUPT_SUPERBLOCK;
+               goto cleanup;
+       }
+       fs->group_desc_count =  groups_cnt;
+       if (!(flags & EXT2_FLAG_IGNORE_SB_ERRORS) &&
+           (__u64)fs->group_desc_count * EXT2_INODES_PER_GROUP(fs->super) !=
            fs->super->s_inodes_count) {
                retval = EXT2_ET_CORRUPT_SUPERBLOCK;
                goto cleanup;
        }
        fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count,
                                          EXT2_DESC_PER_BLOCK(fs->super));
+       if (flags & EXT2_FLAG_SUPER_ONLY)
+               goto skip_read_bg;
        retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize,
                                &fs->group_desc);
        if (retval)
@@ -400,7 +425,8 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
 #ifdef WORDS_BIGENDIAN
        groups_per_block = EXT2_DESC_PER_BLOCK(fs->super);
 #endif
-       if (ext2fs_has_feature_meta_bg(fs->super)) {
+       if (ext2fs_has_feature_meta_bg(fs->super) &&
+           !(flags & EXT2_FLAG_IMAGE_FILE)) {
                first_meta_bg = fs->super->s_first_meta_bg;
                if (first_meta_bg > fs->desc_blocks)
                        first_meta_bg = fs->desc_blocks;
@@ -416,11 +442,18 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                gdp = (struct ext2_group_desc *) dest;
                for (j=0; j < groups_per_block*first_meta_bg; j++) {
                        gdp = ext2fs_group_desc(fs, fs->group_desc, j);
-                       ext2fs_swap_group_desc2(fs, gdp);
+                       if (gdp)
+                               ext2fs_swap_group_desc2(fs, gdp);
                }
 #endif
                dest += fs->blocksize*first_meta_bg;
        }
+
+       for (i = first_meta_bg ; i < fs->desc_blocks; i++) {
+               blk = ext2fs_descriptor_block_loc2(fs, group_block, i);
+               io_channel_cache_readahead(fs->io, blk, 1);
+       }
+
        for (i=first_meta_bg ; i < fs->desc_blocks; i++) {
                blk = ext2fs_descriptor_block_loc2(fs, group_block, i);
                retval = io_channel_read_blk64(fs->io, blk, 1, dest);
@@ -430,7 +463,8 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                for (j=0; j < groups_per_block; j++) {
                        gdp = ext2fs_group_desc(fs, fs->group_desc,
                                                i * groups_per_block + j);
-                       ext2fs_swap_group_desc2(fs, gdp);
+                       if (gdp)
+                               ext2fs_swap_group_desc2(fs, gdp);
                }
 #endif
                dest += fs->blocksize;
@@ -456,7 +490,7 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                if (fs->flags & EXT2_FLAG_RW)
                        ext2fs_mark_super_dirty(fs);
        }
-
+skip_read_bg:
        if (ext2fs_has_feature_mmp(fs->super) &&
            !(flags & EXT2_FLAG_SKIP_MMP) &&
            (flags & (EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE))) {
@@ -468,6 +502,19 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                }
        }
 
+       if (fs->flags & EXT2_FLAG_SHARE_DUP) {
+               fs->block_sha_map = ext2fs_hashmap_create(ext2fs_djb2_hash,
+                                       block_sha_map_free_entry, 4096);
+               if (!fs->block_sha_map) {
+                       retval = EXT2_ET_NO_MEMORY;
+                       goto cleanup;
+               }
+               ext2fs_set_feature_shared_blocks(fs->super);
+       }
+
+       if (ext2fs_has_feature_casefold(fs->super))
+               fs->encoding = ext2fs_load_nls_table(fs->super->s_encoding);
+
        fs->flags &= ~EXT2_FLAG_NOFREE_ON_ERROR;
        *ret_fs = fs;
 
index 4037f93..ee701f7 100644 (file)
@@ -114,7 +114,7 @@ static int qcow2_read_l1_table(struct ext2_qcow2_image *img)
 }
 
 static int qcow2_read_l2_table(struct ext2_qcow2_image *img,
-                              ext2_off64_t offset, blk64_t **l2_table)
+                              __u64 offset, blk64_t **l2_table)
 {
        int fd = img->fd;
        size_t size;
@@ -131,8 +131,8 @@ static int qcow2_read_l2_table(struct ext2_qcow2_image *img,
        return 0;
 }
 
-static int qcow2_copy_data(int fdin, int fdout, ext2_off64_t off_in,
-                          ext2_off64_t off_out, void *buf, size_t count)
+static int qcow2_copy_data(int fdin, int fdout, __u64 off_in,
+                          __u64 off_out, void *buf, size_t count)
 {
        size_t size;
 
@@ -162,10 +162,11 @@ int qcow2_write_raw_image(int qcow2_fd, int raw_fd,
        struct ext2_qcow2_image img;
        errcode_t ret = 0;
        unsigned int l1_index, l2_index;
-       ext2_off64_t offset;
+       __u64 offset;
        blk64_t *l1_table, *l2_table = NULL;
        void *copy_buf = NULL;
        size_t size;
+       unsigned int max_l1_size;
 
        if (hdr->crypt_method)
                return -QCOW_ENCRYPTED;
@@ -175,12 +176,21 @@ int qcow2_write_raw_image(int qcow2_fd, int raw_fd,
        img.l2_cache = NULL;
        img.l1_table = NULL;
        img.cluster_bits = ext2fs_be32_to_cpu(hdr->cluster_bits);
+       if (img.cluster_bits < 9 || img.cluster_bits > 31)
+               return -QCOW_CORRUPTED;
        img.cluster_size = 1 << img.cluster_bits;
        img.l1_size = ext2fs_be32_to_cpu(hdr->l1_size);
        img.l1_offset = ext2fs_be64_to_cpu(hdr->l1_table_offset);
        img.l2_size = 1 << (img.cluster_bits - 3);
        img.image_size = ext2fs_be64_to_cpu(hdr->size);
 
+       if (img.l1_offset & (img.cluster_size - 1))
+               return -QCOW_CORRUPTED;
+
+       max_l1_size = (img.image_size >> ((2 * img.cluster_bits) - 3)) +
+               img.cluster_size;
+       if (img.l1_size > max_l1_size)
+               return -QCOW_CORRUPTED;
 
        ret = ext2fs_get_memzero(img.cluster_size, &l2_table);
        if (ret)
@@ -202,7 +212,7 @@ int qcow2_write_raw_image(int qcow2_fd, int raw_fd,
        l1_table = img.l1_table;
        /* Walk through l1 table */
        for (l1_index = 0; l1_index < img.l1_size; l1_index++) {
-               ext2_off64_t off_out;
+               __u64 off_out;
 
                offset = ext2fs_be64_to_cpu(l1_table[l1_index]) &
                         ~QCOW_OFLAG_COPIED;
index 81e0ec9..b649c9c 100644 (file)
 
 #define QCOW_MAGIC (('Q' << 24) | ('F' << 16) | ('I' << 8) | 0xfb)
 #define QCOW_VERSION           2
-#define QCOW_OFLAG_COPIED      (1LL << 63)
-#define QCOW_OFLAG_COMPRESSED  (1LL << 62)
+#define QCOW_OFLAG_COPIED      (1ULL << 63)
+#define QCOW_OFLAG_COMPRESSED  (1ULL << 62)
 
 #define QCOW_COMPRESSED                1
 #define QCOW_ENCRYPTED         2
+#define QCOW_CORRUPTED         3
 
 struct ext2_qcow2_hdr {
        __u32   magic;
index 9439303..5b92099 100644 (file)
@@ -15,7 +15,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 
   linux/lib/rbtree.c
 */
index b767a90..dfeeb23 100644 (file)
 
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 
   linux/include/linux/rbtree.h
 
   To use rbtrees you'll have to implement your own insert and search cores.
-  This will avoid us to use callbacks and to drop drammatically performances.
+  This will avoid us to use callbacks and to drop dramatically performances.
   I know it's not the cleaner way,  but in C (not in C++) to get
   performances and genericity...
 
@@ -96,17 +96,7 @@ static inline struct page * rb_insert_page_cache(struct inode * inode,
 
 #include <stdlib.h>
 #include <stdint.h>
-
-#undef offsetof
-#ifdef __compiler_offsetof
-#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
-#else
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-#endif
-
-#define container_of(ptr, type, member) ({                     \
-       const __typeof__( ((type *)0)->member ) *__mptr = (ptr);        \
-       (type *)( (char *)__mptr - offsetof(type,member) );})
+#include "compiler.h"
 
 struct rb_node
 {
index eaa9cf8..6bcf01e 100644 (file)
@@ -104,7 +104,7 @@ errcode_t ext2fs_create_resize_inode(ext2_filsys fs)
        if (fs->blocksize == 1024 && sb_blk == 0)
                sb_blk = 1;
 
-       /* Maximum possible file size (we donly use the dindirect blocks) */
+       /* Maximum possible file size (we only use double indirect blocks) */
        apb = EXT2_ADDR_PER_BLOCK(sb);
        if ((dindir_blk = inode.i_block[EXT2_DIND_BLOCK])) {
 #ifdef RES_GDT_DEBUG
index ae593d4..e3f6312 100644 (file)
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
+#ifdef HAVE_PTHREAD_H
+#include <pthread.h>
+#endif
 
 #include "ext2_fs.h"
 #include "ext2fs.h"
 #include "e2image.h"
 
+#ifdef HAVE_PTHREAD
+typedef pthread_mutex_t mutex_t;
+
+static void unix_pthread_mutex_lock(mutex_t *mutex)
+{
+       if (mutex)
+               pthread_mutex_lock(mutex);
+}
+static void unix_pthread_mutex_unlock(mutex_t *mutex)
+{
+       if (mutex)
+               pthread_mutex_unlock(mutex);
+}
+#else
+typedef int mutex_t;
+#define unix_pthread_mutex_lock(mutex_t) do {} while (0)
+#define unix_pthread_mutex_unlock(mutex_t) do {} while (0)
+#endif
+
 static errcode_t write_bitmaps(ext2_filsys fs, int do_inode, int do_block)
 {
        dgrp_t          i;
@@ -94,6 +116,7 @@ static errcode_t write_bitmaps(ext2_filsys fs, int do_inode, int do_block)
                if (retval)
                        return retval;
                ext2fs_group_desc_csum_set(fs, i);
+               fs->flags |= EXT2_FLAG_DIRTY;
 
                blk = ext2fs_block_bitmap_loc(fs, i);
                if (blk) {
@@ -125,6 +148,7 @@ static errcode_t write_bitmaps(ext2_filsys fs, int do_inode, int do_block)
                if (retval)
                        goto errout;
                ext2fs_group_desc_csum_set(fs, i);
+               fs->flags |= EXT2_FLAG_DIRTY;
 
                blk = ext2fs_inode_bitmap_loc(fs, i);
                if (blk) {
@@ -193,21 +217,22 @@ static errcode_t mark_uninit_bg_group_blocks(ext2_filsys fs)
        return 0;
 }
 
-static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
+static int bitmap_tail_verify(unsigned char *bitmap, int first, int last)
+{
+       int i;
+
+       for (i = first; i <= last; i++)
+               if (bitmap[i] != 0xff)
+                       return 0;
+       return 1;
+}
+
+static errcode_t read_bitmaps_range_prepare(ext2_filsys fs, int flags)
 {
-       dgrp_t i;
-       char *block_bitmap = 0, *inode_bitmap = 0;
-       char *buf;
        errcode_t retval;
        int block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8;
        int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
-       int csum_flag;
-       unsigned int    cnt;
-       blk64_t blk;
-       blk64_t blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block);
-       blk64_t   blk_cnt;
-       ext2_ino_t ino_itr = 1;
-       ext2_ino_t ino_cnt;
+       char *buf;
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
@@ -217,12 +242,11 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
 
        fs->write_bitmaps = ext2fs_write_bitmaps;
 
-       csum_flag = ext2fs_has_group_desc_csum(fs);
-
        retval = ext2fs_get_mem(strlen(fs->device_name) + 80, &buf);
        if (retval)
                return retval;
-       if (do_block) {
+
+       if (flags & EXT2FS_BITMAPS_BLOCK) {
                if (fs->block_map)
                        ext2fs_free_block_bitmap(fs->block_map);
                strcpy(buf, "block bitmap for ");
@@ -230,12 +254,9 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
                retval = ext2fs_allocate_block_bitmap(fs, buf, &fs->block_map);
                if (retval)
                        goto cleanup;
-               retval = io_channel_alloc_buf(fs->io, 0, &block_bitmap);
-               if (retval)
-                       goto cleanup;
-       } else
-               block_nbytes = 0;
-       if (do_inode) {
+       }
+
+       if (flags & EXT2FS_BITMAPS_INODE) {
                if (fs->inode_map)
                        ext2fs_free_inode_bitmap(fs->inode_map);
                strcpy(buf, "inode bitmap for ");
@@ -243,17 +264,64 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
                retval = ext2fs_allocate_inode_bitmap(fs, buf, &fs->inode_map);
                if (retval)
                        goto cleanup;
+       }
+       ext2fs_free_mem(&buf);
+       return retval;
+
+cleanup:
+       if (flags & EXT2FS_BITMAPS_BLOCK) {
+               ext2fs_free_block_bitmap(fs->block_map);
+               fs->block_map = 0;
+       }
+       if (flags & EXT2FS_BITMAPS_INODE) {
+               ext2fs_free_inode_bitmap(fs->inode_map);
+               fs->inode_map = 0;
+       }
+       ext2fs_free_mem(&buf);
+       return retval;
+}
+
+static errcode_t read_bitmaps_range_start(ext2_filsys fs, int flags,
+                                         dgrp_t start, dgrp_t end,
+                                         mutex_t *mutex,
+                                         int *tail_flags)
+{
+       dgrp_t i;
+       char *block_bitmap = 0, *inode_bitmap = 0;
+       errcode_t retval = 0;
+       int block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8;
+       int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
+       int csum_flag;
+       unsigned int    cnt;
+       blk64_t blk;
+       blk64_t blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block);
+       blk64_t   blk_cnt;
+       ext2_ino_t ino_itr = 1;
+       ext2_ino_t ino_cnt;
+
+       csum_flag = ext2fs_has_group_desc_csum(fs);
+
+       if (flags & EXT2FS_BITMAPS_BLOCK) {
+               retval = io_channel_alloc_buf(fs->io, 0, &block_bitmap);
+               if (retval)
+                       goto cleanup;
+       } else {
+               block_nbytes = 0;
+       }
+
+       if (flags & EXT2FS_BITMAPS_INODE) {
                retval = io_channel_alloc_buf(fs->io, 0, &inode_bitmap);
                if (retval)
                        goto cleanup;
-       } else
+       } else {
                inode_nbytes = 0;
-       ext2fs_free_mem(&buf);
+       }
 
+       /* io should be null */
        if (fs->flags & EXT2_FLAG_IMAGE_FILE) {
-               blk = (fs->image_header->offset_inodemap / fs->blocksize);
+               blk = (ext2fs_le32_to_cpu(fs->image_header->offset_inodemap) / fs->blocksize);
                ino_cnt = fs->super->s_inodes_count;
-               while (inode_nbytes > 0) {
+               while (inode_bitmap && ino_cnt > 0) {
                        retval = io_channel_read_blk64(fs->image_io, blk++,
                                                     1, inode_bitmap);
                        if (retval)
@@ -265,15 +333,14 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
                                               ino_itr, cnt, inode_bitmap);
                        if (retval)
                                goto cleanup;
-                       ino_itr += fs->blocksize << 3;
-                       ino_cnt -= fs->blocksize << 3;
-                       inode_nbytes -= fs->blocksize;
+                       ino_itr += cnt;
+                       ino_cnt -= cnt;
                }
-               blk = (fs->image_header->offset_blockmap /
+               blk = (ext2fs_le32_to_cpu(fs->image_header->offset_blockmap) /
                       fs->blocksize);
                blk_cnt = EXT2_GROUPS_TO_CLUSTERS(fs->super,
                                                  fs->group_desc_count);
-               while (block_nbytes > 0) {
+               while (block_bitmap && blk_cnt > 0) {
                        retval = io_channel_read_blk64(fs->image_io, blk++,
                                                     1, block_bitmap);
                        if (retval)
@@ -285,19 +352,21 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
                                       blk_itr, cnt, block_bitmap);
                        if (retval)
                                goto cleanup;
-                       blk_itr += fs->blocksize << 3;
-                       blk_cnt -= fs->blocksize << 3;
-                       block_nbytes -= fs->blocksize;
+                       blk_itr += cnt;
+                       blk_cnt -= cnt;
                }
-               goto success_cleanup;
+               goto cleanup;
        }
 
-       for (i = 0; i < fs->group_desc_count; i++) {
+       blk_itr += ((blk64_t)start * (block_nbytes << 3));
+       ino_itr += ((blk64_t)start * (inode_nbytes << 3));
+       for (i = start; i <= end; i++) {
                if (block_bitmap) {
                        blk = ext2fs_block_bitmap_loc(fs, i);
-                       if (csum_flag &&
-                           ext2fs_bg_flags_test(fs, i, EXT2_BG_BLOCK_UNINIT) &&
-                           ext2fs_group_desc_csum_verify(fs, i))
+                       if ((csum_flag &&
+                            ext2fs_bg_flags_test(fs, i, EXT2_BG_BLOCK_UNINIT) &&
+                            ext2fs_group_desc_csum_verify(fs, i)) ||
+                           (blk >= ext2fs_blocks_count(fs->super)))
                                blk = 0;
                        if (blk) {
                                retval = io_channel_read_blk64(fs->io, blk,
@@ -315,20 +384,26 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
                                        EXT2_ET_BLOCK_BITMAP_CSUM_INVALID;
                                        goto cleanup;
                                }
+                               if (!bitmap_tail_verify((unsigned char *) block_bitmap,
+                                                       block_nbytes, fs->blocksize - 1))
+                                       *tail_flags |= EXT2_FLAG_BBITMAP_TAIL_PROBLEM;
                        } else
                                memset(block_bitmap, 0, block_nbytes);
                        cnt = block_nbytes << 3;
+                       unix_pthread_mutex_lock(mutex);
                        retval = ext2fs_set_block_bitmap_range2(fs->block_map,
                                               blk_itr, cnt, block_bitmap);
+                       unix_pthread_mutex_unlock(mutex);
                        if (retval)
                                goto cleanup;
                        blk_itr += block_nbytes << 3;
                }
                if (inode_bitmap) {
                        blk = ext2fs_inode_bitmap_loc(fs, i);
-                       if (csum_flag &&
-                           ext2fs_bg_flags_test(fs, i, EXT2_BG_INODE_UNINIT) &&
-                           ext2fs_group_desc_csum_verify(fs, i))
+                       if ((csum_flag &&
+                            ext2fs_bg_flags_test(fs, i, EXT2_BG_INODE_UNINIT) &&
+                            ext2fs_group_desc_csum_verify(fs, i)) ||
+                           (blk >= ext2fs_blocks_count(fs->super)))
                                blk = 0;
                        if (blk) {
                                retval = io_channel_read_blk64(fs->io, blk,
@@ -347,57 +422,227 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
                                        EXT2_ET_INODE_BITMAP_CSUM_INVALID;
                                        goto cleanup;
                                }
+                               if (!bitmap_tail_verify((unsigned char *) inode_bitmap,
+                                                       inode_nbytes, fs->blocksize - 1))
+                                       *tail_flags |= EXT2_FLAG_IBITMAP_TAIL_PROBLEM;
                        } else
                                memset(inode_bitmap, 0, inode_nbytes);
                        cnt = inode_nbytes << 3;
+                       unix_pthread_mutex_lock(mutex);
                        retval = ext2fs_set_inode_bitmap_range2(fs->inode_map,
                                               ino_itr, cnt, inode_bitmap);
+                       unix_pthread_mutex_unlock(mutex);
                        if (retval)
                                goto cleanup;
                        ino_itr += inode_nbytes << 3;
                }
        }
 
+cleanup:
+       if (inode_bitmap)
+               ext2fs_free_mem(&inode_bitmap);
+       if (block_bitmap)
+               ext2fs_free_mem(&block_bitmap);
+       return retval;
+}
+
+static errcode_t read_bitmaps_range_end(ext2_filsys fs, int flags,
+                                       int tail_flags)
+{
+       errcode_t retval;
+
        /* Mark group blocks for any BLOCK_UNINIT groups */
-       if (do_block) {
+       if (flags & EXT2FS_BITMAPS_BLOCK) {
                retval = mark_uninit_bg_group_blocks(fs);
                if (retval)
-                       goto cleanup;
+                       return retval;
+               fs->flags &= ~EXT2_FLAG_BBITMAP_TAIL_PROBLEM;
        }
+       if (flags & EXT2FS_BITMAPS_INODE)
+               fs->flags &= ~EXT2_FLAG_IBITMAP_TAIL_PROBLEM;
+       fs->flags |= tail_flags;
 
-success_cleanup:
-       if (inode_bitmap)
-               ext2fs_free_mem(&inode_bitmap);
-       if (block_bitmap)
-               ext2fs_free_mem(&block_bitmap);
        return 0;
+}
 
-cleanup:
-       if (do_block) {
-               ext2fs_free_mem(&fs->block_map);
+static void read_bitmaps_cleanup_on_error(ext2_filsys fs, int flags)
+{
+       if (flags & EXT2FS_BITMAPS_BLOCK) {
+               ext2fs_free_block_bitmap(fs->block_map);
                fs->block_map = 0;
        }
-       if (do_inode) {
-               ext2fs_free_mem(&fs->inode_map);
+       if (flags & EXT2FS_BITMAPS_INODE) {
+               ext2fs_free_inode_bitmap(fs->inode_map);
                fs->inode_map = 0;
        }
-       if (inode_bitmap)
-               ext2fs_free_mem(&inode_bitmap);
-       if (block_bitmap)
-               ext2fs_free_mem(&block_bitmap);
-       if (buf)
-               ext2fs_free_mem(&buf);
+}
+
+static errcode_t read_bitmaps_range(ext2_filsys fs, int flags,
+                                   dgrp_t start, dgrp_t end)
+{
+       errcode_t retval;
+       int tail_flags = 0;
+
+       retval = read_bitmaps_range_prepare(fs, flags);
+       if (retval)
+               return retval;
+
+       retval = read_bitmaps_range_start(fs, flags, start, end,
+                                         NULL, &tail_flags);
+       if (retval == 0)
+               retval = read_bitmaps_range_end(fs, flags, tail_flags);
+       if (retval)
+               read_bitmaps_cleanup_on_error(fs, flags);
+       return retval;
+}
+
+#ifdef HAVE_PTHREAD
+struct read_bitmaps_thread_info {
+       ext2_filsys     rbt_fs;
+       int             rbt_flags;
+       dgrp_t          rbt_grp_start;
+       dgrp_t          rbt_grp_end;
+       errcode_t       rbt_retval;
+       pthread_mutex_t *rbt_mutex;
+       int             rbt_tail_flags;
+};
+
+static void *read_bitmaps_thread(void *data)
+{
+       struct read_bitmaps_thread_info *rbt = data;
+
+       rbt->rbt_retval = read_bitmaps_range_start(rbt->rbt_fs, rbt->rbt_flags,
+                               rbt->rbt_grp_start, rbt->rbt_grp_end,
+                               rbt->rbt_mutex, &rbt->rbt_tail_flags);
+       return NULL;
+}
+#endif
+
+errcode_t ext2fs_rw_bitmaps(ext2_filsys fs, int flags, int num_threads)
+{
+#ifdef HAVE_PTHREAD
+       pthread_attr_t  attr;
+       pthread_t *thread_ids = NULL;
+       struct read_bitmaps_thread_info *thread_infos = NULL;
+       pthread_mutex_t rbt_mutex = PTHREAD_MUTEX_INITIALIZER;
+       errcode_t retval;
+       errcode_t rc;
+       unsigned flexbg_size = 1 << fs->super->s_log_groups_per_flex;
+       dgrp_t average_group;
+       int i, tail_flags = 0;
+       io_manager manager = unix_io_manager;
+#endif
+
+       if (flags & ~EXT2FS_BITMAPS_VALID_FLAGS)
+               return EXT2_ET_INVALID_ARGUMENT;
+
+       if (flags & EXT2FS_BITMAPS_WRITE)
+               return write_bitmaps(fs, flags & EXT2FS_BITMAPS_INODE,
+                                    flags & EXT2FS_BITMAPS_BLOCK);
+
+#ifdef HAVE_PTHREAD
+       if (((fs->io->flags & CHANNEL_FLAGS_THREADS) == 0) ||
+           (num_threads == 1) || (fs->flags & EXT2_FLAG_IMAGE_FILE))
+               goto fallback;
+
+#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_CONF)
+       if (num_threads < 0)
+               num_threads = sysconf(_SC_NPROCESSORS_CONF);
+#endif
+       /*
+        * Guess for now; eventually we should probably define
+        * ext2fs_get_num_cpus() and teach it how to get this info on
+        * MacOS, FreeBSD, etc.
+        * ref: https://stackoverflow.com/questions/150355
+        */
+       if (num_threads < 0)
+               num_threads = 4;
+
+       if (num_threads > fs->group_desc_count)
+               num_threads = fs->group_desc_count;
+       average_group = fs->group_desc_count / num_threads;
+       if (ext2fs_has_feature_flex_bg(fs->super)) {
+               average_group = (average_group / flexbg_size) * flexbg_size;
+       }
+       if (average_group == 0)
+               goto fallback;
+
+       io_channel_set_options(fs->io, "cache=off");
+       retval = pthread_attr_init(&attr);
+       if (retval)
+               return retval;
+
+       thread_ids = calloc(sizeof(pthread_t), num_threads);
+       if (!thread_ids)
+               return ENOMEM;
+
+       thread_infos = calloc(sizeof(struct read_bitmaps_thread_info),
+                               num_threads);
+       if (!thread_infos)
+               goto out;
+
+       retval = read_bitmaps_range_prepare(fs, flags);
+       if (retval)
+               goto out;
+
+//     fprintf(stdout, "Multiple threads triggered to read bitmaps\n");
+       for (i = 0; i < num_threads; i++) {
+               thread_infos[i].rbt_fs = fs;
+               thread_infos[i].rbt_flags = flags;
+               thread_infos[i].rbt_mutex = &rbt_mutex;
+               thread_infos[i].rbt_tail_flags = 0;
+               if (i == 0)
+                       thread_infos[i].rbt_grp_start = 0;
+               else
+                       thread_infos[i].rbt_grp_start = average_group * i + 1;
+
+               if (i == num_threads - 1)
+                       thread_infos[i].rbt_grp_end = fs->group_desc_count - 1;
+               else
+                       thread_infos[i].rbt_grp_end = average_group * (i + 1);
+               retval = pthread_create(&thread_ids[i], &attr,
+                                       &read_bitmaps_thread, &thread_infos[i]);
+               if (retval)
+                       break;
+       }
+       for (i = 0; i < num_threads; i++) {
+               if (!thread_ids[i])
+                       break;
+               rc = pthread_join(thread_ids[i], NULL);
+               if (rc && !retval)
+                       retval = rc;
+               rc = thread_infos[i].rbt_retval;
+               if (rc && !retval)
+                       retval = rc;
+               tail_flags |= thread_infos[i].rbt_tail_flags;
+       }
+out:
+       rc = pthread_attr_destroy(&attr);
+       if (rc && !retval)
+               retval = rc;
+       free(thread_infos);
+       free(thread_ids);
+
+       if (retval == 0)
+               retval = read_bitmaps_range_end(fs, flags, tail_flags);
+       if (retval)
+               read_bitmaps_cleanup_on_error(fs, flags);
+       /* XXX should save and restore cache setting */
+       io_channel_set_options(fs->io, "cache=on");
        return retval;
+fallback:
+#endif /* HAVE_PTHREAD */
+       return read_bitmaps_range(fs, flags, 0, fs->group_desc_count - 1);
 }
 
 errcode_t ext2fs_read_inode_bitmap(ext2_filsys fs)
 {
-       return read_bitmaps(fs, 1, 0);
+       return ext2fs_rw_bitmaps(fs, EXT2FS_BITMAPS_INODE, -1);
 }
 
 errcode_t ext2fs_read_block_bitmap(ext2_filsys fs)
 {
-       return read_bitmaps(fs, 0, 1);
+       return ext2fs_rw_bitmaps(fs, EXT2FS_BITMAPS_BLOCK, -1);
 }
 
 errcode_t ext2fs_write_inode_bitmap(ext2_filsys fs)
@@ -412,10 +657,15 @@ errcode_t ext2fs_write_block_bitmap (ext2_filsys fs)
 
 errcode_t ext2fs_read_bitmaps(ext2_filsys fs)
 {
-       if (fs->inode_map && fs->block_map)
-               return 0;
+       int flags = 0;
 
-       return read_bitmaps(fs, !fs->inode_map, !fs->block_map);
+       if (!fs->inode_map)
+               flags |= EXT2FS_BITMAPS_INODE;
+       if (!fs->block_map)
+               flags |= EXT2FS_BITMAPS_BLOCK;
+       if (flags == 0)
+               return 0;
+       return ext2fs_rw_bitmaps(fs, flags, -1);
 }
 
 errcode_t ext2fs_write_bitmaps(ext2_filsys fs)
index 103c338..f67848d 100644 (file)
@@ -235,7 +235,6 @@ int main(int argc, char **argv)
        int i;
        int errors = 0;
        unsigned char tmp[32];
-       struct hash_state md;
 
        for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) {
                unsigned char *msg = (unsigned char *) tests[i].msg;
index f113053..fe2dd52 100644 (file)
@@ -283,7 +283,6 @@ int main(int argc, char **argv)
        int i;
        int errors = 0;
        unsigned char tmp[64];
-       struct hash_state md;
 
        for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) {
                unsigned char *msg = (unsigned char *) tests[i].msg;
diff --git a/lib/ext2fs/sparse_io.c b/lib/ext2fs/sparse_io.c
new file mode 100644 (file)
index 0000000..f287e76
--- /dev/null
@@ -0,0 +1,554 @@
+#include "config.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdint.h>
+#include "ext2_fs.h"
+#include "ext2fs.h"
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+#if !defined(ENABLE_LIBSPARSE)
+static errcode_t sparse_open(const char *name EXT2FS_ATTR((unused)),
+                            int flags EXT2FS_ATTR((unused)),
+                            io_channel *channel EXT2FS_ATTR((unused)))
+{
+       return EXT2_ET_UNIMPLEMENTED;
+}
+static errcode_t sparse_close(io_channel channel EXT2FS_ATTR((unused)))
+{
+       return EXT2_ET_UNIMPLEMENTED;
+}
+static struct struct_io_manager struct_sparse_manager = {
+       .magic                  = EXT2_ET_MAGIC_IO_MANAGER,
+       .name                   = "Android sparse I/O Manager",
+       .open                   = sparse_open,
+       .close                  = sparse_close,
+};
+static struct struct_io_manager struct_sparsefd_manager = {
+       .magic                  = EXT2_ET_MAGIC_IO_MANAGER,
+       .name                   = "Android sparse fd I/O Manager",
+       .open                   = sparse_open,
+       .close                  = sparse_close,
+};
+#else
+#include <sparse/sparse.h>
+
+struct sparse_map {
+       int                     fd;
+       char                    **blocks;
+       int                     block_size;
+       uint64_t                blocks_count;
+       char                    *file;
+       struct sparse_file      *sparse_file;
+       io_channel              channel;
+};
+
+struct sparse_io_params {
+       int                     fd;
+       char                    *file;
+       uint64_t                blocks_count;
+       unsigned int            block_size;
+};
+
+static errcode_t sparse_write_blk(io_channel channel, unsigned long block,
+                                 int count, const void *buf);
+
+static void free_sparse_blocks(struct sparse_map *sm)
+{
+       uint64_t i;
+
+       for (i = 0; i < sm->blocks_count; ++i)
+               free(sm->blocks[i]);
+       free(sm->blocks);
+       sm->blocks = NULL;
+}
+
+static int sparse_import_segment(void *priv, const void *data, size_t len,
+                                unsigned int block, unsigned int nr_blocks)
+{
+       struct sparse_map *sm = priv;
+
+       /* Ignore chunk headers, only write the data */
+       if (!nr_blocks || len % sm->block_size)
+               return 0;
+
+       return sparse_write_blk(sm->channel, block, nr_blocks, data);
+}
+
+static errcode_t io_manager_import_sparse(struct sparse_io_params *params,
+                                         struct sparse_map *sm, io_channel io)
+{
+       int fd;
+       errcode_t retval;
+       struct sparse_file *sparse_file;
+
+       if (params->fd < 0) {
+               fd = open(params->file, O_RDONLY);
+               if (fd < 0) {
+                       retval = -1;
+                       goto err_open;
+               }
+       } else
+               fd = params->fd;
+       sparse_file = sparse_file_import(fd, false, false);
+       if (!sparse_file) {
+               retval = -1;
+               goto err_sparse;
+       }
+
+       sm->block_size = sparse_file_block_size(sparse_file);
+       sm->blocks_count = (sparse_file_len(sparse_file, 0, 0) - 1)
+                               / sm->block_size + 1;
+       sm->blocks = calloc(sm->blocks_count, sizeof(char*));
+       if (!sm->blocks) {
+               retval = -1;
+               goto err_alloc;
+       }
+       io->block_size = sm->block_size;
+
+       retval = sparse_file_foreach_chunk(sparse_file, true, false,
+                                          sparse_import_segment, sm);
+
+       if (retval)
+               free_sparse_blocks(sm);
+err_alloc:
+       sparse_file_destroy(sparse_file);
+err_sparse:
+       close(fd);
+err_open:
+       return retval;
+}
+
+static errcode_t io_manager_configure(struct sparse_io_params *params,
+                                     int flags, io_channel io)
+{
+       errcode_t retval;
+       uint64_t img_size;
+       struct sparse_map *sm = calloc(1, sizeof(*sm));
+       if (!sm)
+               return EXT2_ET_NO_MEMORY;
+
+       sm->file = params->file;
+       sm->channel = io;
+       io->private_data = sm;
+       retval = io_manager_import_sparse(params, sm, io);
+       if (retval) {
+               if (!params->block_size || !params->blocks_count) {
+                       retval = EINVAL;
+                       goto err_params;
+               }
+               sm->block_size = params->block_size;
+               sm->blocks_count = params->blocks_count;
+               sm->blocks = calloc(params->blocks_count, sizeof(void*));
+               if (!sm->blocks) {
+                       retval = EXT2_ET_NO_MEMORY;
+                       goto err_alloc;
+               }
+       }
+       io->block_size = sm->block_size;
+       img_size = (uint64_t)sm->block_size * sm->blocks_count;
+
+       if (flags & IO_FLAG_RW) {
+               sm->sparse_file = sparse_file_new(sm->block_size, img_size);
+               if (!sm->sparse_file) {
+                       retval = EXT2_ET_NO_MEMORY;
+                       goto err_alloc;
+               }
+               if (params->fd < 0) {
+                       sm->fd = open(params->file, O_CREAT | O_RDWR | O_TRUNC | O_BINARY,
+                                     0644);
+                       if (sm->fd < 0) {
+                               retval = errno;
+                               goto err_open;
+                       }
+               } else
+                       sm->fd = params->fd;
+       } else {
+               sm->fd = -1;
+               sm->sparse_file = NULL;
+       }
+       return 0;
+
+err_open:
+       sparse_file_destroy(sm->sparse_file);
+err_alloc:
+       free_sparse_blocks(sm);
+err_params:
+       free(sm);
+       return retval;
+}
+
+static errcode_t sparse_open_channel(struct sparse_io_params *sparse_params,
+                                    int flags, io_channel *channel)
+{
+       errcode_t retval;
+       io_channel io;
+
+       io = calloc(1, sizeof(struct struct_io_channel));
+       io->magic = EXT2_ET_MAGIC_IO_CHANNEL;
+       io->block_size = 0;
+       io->refcount = 1;
+
+       retval = io_manager_configure(sparse_params, flags, io);
+       if (retval) {
+               free(io);
+               return retval;
+       }
+
+       *channel = io;
+       return 0;
+}
+
+static errcode_t read_sparse_argv(const char *name, bool is_fd,
+                                 struct sparse_io_params *sparse_params)
+{
+       int ret;
+       sparse_params->fd = -1;
+       sparse_params->block_size = 0;
+       sparse_params->blocks_count = 0;
+
+       sparse_params->file = malloc(strlen(name) + 1);
+       if (!sparse_params->file) {
+               fprintf(stderr, "failed to alloc %zu\n", strlen(name) + 1);
+               return EXT2_ET_NO_MEMORY;
+       }
+
+       if (is_fd) {
+               ret = sscanf(name, "(%d):%llu:%u", &sparse_params->fd,
+                            (unsigned long long *)&sparse_params->blocks_count,
+                            &sparse_params->block_size);
+       } else {
+               ret = sscanf(name, "(%[^)])%*[:]%llu%*[:]%u", sparse_params->file,
+                            (unsigned long long *)&sparse_params->blocks_count,
+                            &sparse_params->block_size);
+       }
+
+       if (ret < 1) {
+               free(sparse_params->file);
+               return EINVAL;
+       }
+       return 0;
+}
+
+static errcode_t sparse_open(const char *name, int flags, io_channel *channel)
+{
+       errcode_t retval;
+       struct sparse_io_params sparse_params;
+
+       retval = read_sparse_argv(name, false, &sparse_params);
+       if (retval)
+               return EXT2_ET_BAD_DEVICE_NAME;
+
+       retval = sparse_open_channel(&sparse_params, flags, channel);
+       if (retval)
+               return retval;
+       (*channel)->manager = sparse_io_manager;
+
+       return retval;
+}
+
+static errcode_t sparsefd_open(const char *name, int flags, io_channel *channel)
+{
+       errcode_t retval;
+       struct sparse_io_params sparse_params;
+
+       retval = read_sparse_argv(name, true, &sparse_params);
+       if (retval)
+               return EXT2_ET_BAD_DEVICE_NAME;
+
+       retval = sparse_open_channel(&sparse_params, flags, channel);
+       if (retval)
+               return retval;
+       (*channel)->manager = sparsefd_io_manager;
+
+       return retval;
+}
+
+static errcode_t sparse_merge_blocks(struct sparse_map *sm, uint64_t start,
+                                       uint64_t num)
+{
+       char *buf;
+       uint64_t i;
+       unsigned int block_size = sm->block_size;
+       errcode_t retval = 0;
+
+       buf = calloc(num, block_size);
+       if (!buf) {
+               fprintf(stderr, "failed to alloc %llu\n",
+                       (unsigned long long)num * block_size);
+               return EXT2_ET_NO_MEMORY;
+       }
+
+       for (i = 0; i < num; i++) {
+               memcpy(buf + i * block_size, sm->blocks[start + i] , block_size);
+               free(sm->blocks[start + i]);
+               sm->blocks[start + i] = NULL;
+       }
+
+       /* free_sparse_blocks will release this buf. */
+       sm->blocks[start] = buf;
+
+       retval = sparse_file_add_data(sm->sparse_file, sm->blocks[start],
+                                       block_size * num, start);
+
+       return retval;
+}
+
+static errcode_t sparse_close_channel(io_channel channel)
+{
+       uint64_t i;
+       errcode_t retval = 0;
+       struct sparse_map *sm = channel->private_data;
+
+       if (sm->sparse_file) {
+               int64_t chunk_start = (sm->blocks[0] == NULL) ? -1 : 0;
+               for (i = 0; i < sm->blocks_count; ++i) {
+                       if (!sm->blocks[i] && chunk_start != -1) {
+                               retval = sparse_merge_blocks(sm, chunk_start, i - chunk_start);
+                               chunk_start = -1;
+                       } else if (sm->blocks[i] && chunk_start == -1) {
+                               chunk_start = i;
+                       }
+                       if (retval)
+                               goto ret;
+               }
+               if (chunk_start != -1) {
+                       retval = sparse_merge_blocks(sm, chunk_start,
+                                                       sm->blocks_count - chunk_start);
+                       if (retval)
+                               goto ret;
+               }
+               retval = sparse_file_write(sm->sparse_file, sm->fd,
+                                          /*gzip*/0, /*sparse*/1, /*crc*/0);
+       }
+
+ret:
+       if (sm->sparse_file)
+               sparse_file_destroy(sm->sparse_file);
+       free_sparse_blocks(sm);
+       free(sm->file);
+       free(sm);
+       free(channel);
+       return retval;
+}
+
+static errcode_t sparse_close(io_channel channel)
+{
+       errcode_t retval;
+       struct sparse_map *sm = channel->private_data;
+       int fd = sm->fd;
+
+       retval = sparse_close_channel(channel);
+       if (fd >= 0)
+               close(fd);
+
+       return retval;
+}
+
+static errcode_t sparse_set_blksize(io_channel channel, int blksize)
+{
+       channel->block_size = blksize;
+       return 0;
+}
+
+static blk64_t block_to_sparse_block(blk64_t block, blk64_t *offset,
+                              io_channel channel, struct sparse_map *sm)
+{
+       int ratio;
+       blk64_t ret = block;
+
+       ratio = sm->block_size / channel->block_size;
+       ret /= ratio;
+       *offset = (block % ratio) * channel->block_size;
+
+       return ret;
+}
+
+static errcode_t check_block_size(io_channel channel, struct sparse_map *sm)
+{
+       if (sm->block_size >= channel->block_size)
+               return 0;
+       return EXT2_ET_UNEXPECTED_BLOCK_SIZE;
+}
+
+static errcode_t sparse_read_blk64(io_channel channel, blk64_t block,
+                                  int count, void *buf)
+{
+       int i;
+       char *out = buf;
+       blk64_t offset = 0, cur_block;
+       struct sparse_map *sm = channel->private_data;
+
+       if (check_block_size(channel, sm))
+               return EXT2_ET_UNEXPECTED_BLOCK_SIZE;
+
+       if (count < 0) { //partial read
+               count = -count;
+               cur_block = block_to_sparse_block(block, &offset, channel, sm);
+               if (sm->blocks[cur_block])
+                       memcpy(out, (sm->blocks[cur_block]) + offset, count);
+               else
+                       memset(out, 0, count);
+       } else {
+               for (i = 0; i < count; ++i) {
+                       cur_block = block_to_sparse_block(block + i, &offset,
+                                                   channel, sm);
+                       if (sm->blocks[cur_block])
+                               memcpy(out + (i * channel->block_size),
+                                      sm->blocks[cur_block] + offset,
+                                      channel->block_size);
+                       else if (sm->blocks)
+                               memset(out + (i * channel->block_size), 0,
+                                      channel->block_size);
+               }
+       }
+       return 0;
+}
+
+static errcode_t sparse_read_blk(io_channel channel, unsigned long block,
+                                int count, void *buf)
+{
+       return sparse_read_blk64(channel, block, count, buf);
+}
+
+static errcode_t sparse_write_blk64(io_channel channel, blk64_t block,
+                                   int count, const void *buf)
+{
+       int i;
+       blk64_t offset = 0, cur_block;
+       const char *in = buf;
+       struct sparse_map *sm = channel->private_data;
+
+       if (check_block_size(channel, sm))
+               return EXT2_ET_UNEXPECTED_BLOCK_SIZE;
+
+       if (count < 0) { //partial write
+               count = -count;
+               cur_block = block_to_sparse_block(block, &offset, channel,
+                                                 sm);
+               if (!sm->blocks[cur_block]) {
+                       sm->blocks[cur_block] = calloc(1, sm->block_size);
+                       if (!sm->blocks[cur_block])
+                               return EXT2_ET_NO_MEMORY;
+               }
+               memcpy(sm->blocks[cur_block] + offset, in, count);
+       } else {
+               for (i = 0; i < count; ++i) {
+                       if (block + i >= sm->blocks_count)
+                               return 0;
+                       cur_block = block_to_sparse_block(block + i, &offset,
+                                                   channel, sm);
+                       if (!sm->blocks[cur_block]) {
+                               sm->blocks[cur_block] =
+                                       calloc(1, sm->block_size);
+                               if (!sm->blocks[cur_block])
+                                       return EXT2_ET_NO_MEMORY;
+                       }
+                       memcpy(sm->blocks[cur_block] + offset,
+                              in + (i * channel->block_size),
+                              channel->block_size);
+               }
+       }
+       return 0;
+}
+
+static errcode_t sparse_write_blk(io_channel channel, unsigned long block,
+                                 int count, const void *buf)
+{
+       return sparse_write_blk64(channel, block, count, buf);
+}
+
+static errcode_t sparse_discard(io_channel channel __attribute__((unused)),
+                               blk64_t blk, unsigned long long count)
+{
+       blk64_t cur_block, offset;
+       struct sparse_map *sm = channel->private_data;
+
+       if (check_block_size(channel, sm))
+               return EXT2_ET_UNEXPECTED_BLOCK_SIZE;
+
+       for (unsigned long long i = 0; i < count; ++i) {
+               if (blk + i >= sm->blocks_count)
+                       return 0;
+               cur_block = block_to_sparse_block(blk + i, &offset, channel,
+                                                 sm);
+               if (!sm->blocks[cur_block])
+                       continue;
+               free(sm->blocks[cur_block]);
+               sm->blocks[cur_block] = NULL;
+       }
+       return 0;
+}
+
+static errcode_t sparse_zeroout(io_channel channel, blk64_t blk,
+                               unsigned long long count)
+{
+       return sparse_discard(channel, blk, count);
+}
+
+static errcode_t sparse_flush(io_channel channel __attribute__((unused)))
+{
+       return 0;
+}
+
+static errcode_t sparse_set_option(io_channel channel __attribute__((unused)),
+                                   const char *option __attribute__((unused)),
+                                   const char *arg __attribute__((unused)))
+{
+       return 0;
+}
+
+static errcode_t sparse_cache_readahead(
+                       io_channel channel __attribute__((unused)),
+                       blk64_t blk __attribute__((unused)),
+                       unsigned long long count __attribute__((unused)))
+{
+       return 0;
+}
+
+static struct struct_io_manager struct_sparse_manager = {
+       .magic                  = EXT2_ET_MAGIC_IO_MANAGER,
+       .name                   = "Android sparse I/O Manager",
+       .open                   = sparse_open,
+       .close                  = sparse_close,
+       .set_blksize            = sparse_set_blksize,
+       .read_blk               = sparse_read_blk,
+       .write_blk              = sparse_write_blk,
+       .flush                  = sparse_flush,
+       .write_byte             = NULL,
+       .set_option             = sparse_set_option,
+       .get_stats              = NULL,
+       .read_blk64             = sparse_read_blk64,
+       .write_blk64            = sparse_write_blk64,
+       .discard                = sparse_discard,
+       .cache_readahead        = sparse_cache_readahead,
+       .zeroout                = sparse_zeroout,
+};
+
+static struct struct_io_manager struct_sparsefd_manager = {
+       .magic                  = EXT2_ET_MAGIC_IO_MANAGER,
+       .name                   = "Android sparse fd I/O Manager",
+       .open                   = sparsefd_open,
+       .close                  = sparse_close,
+       .set_blksize            = sparse_set_blksize,
+       .read_blk               = sparse_read_blk,
+       .write_blk              = sparse_write_blk,
+       .flush                  = sparse_flush,
+       .write_byte             = NULL,
+       .set_option             = sparse_set_option,
+       .get_stats              = NULL,
+       .read_blk64             = sparse_read_blk64,
+       .write_blk64            = sparse_write_blk64,
+       .discard                = sparse_discard,
+       .cache_readahead        = sparse_cache_readahead,
+       .zeroout                = sparse_zeroout,
+};
+
+#endif
+
+io_manager sparse_io_manager = &struct_sparse_manager;
+io_manager sparsefd_io_manager = &struct_sparsefd_manager;
index d63fc55..bc9f323 100644 (file)
 
 #include "ext2_fs.h"
 #include "ext2fs.h"
+#include "ext2fsP.h"
 #include <ext2fs/ext2_ext_attr.h>
 
-#ifdef WORDS_BIGENDIAN
 void ext2fs_swap_super(struct ext2_super_block * sb)
 {
-       int i;
+       int i;
+
        sb->s_inodes_count = ext2fs_swab32(sb->s_inodes_count);
        sb->s_blocks_count = ext2fs_swab32(sb->s_blocks_count);
        sb->s_r_blocks_count = ext2fs_swab32(sb->s_r_blocks_count);
@@ -56,52 +57,83 @@ void ext2fs_swap_super(struct ext2_super_block * sb)
        sb->s_feature_compat = ext2fs_swab32(sb->s_feature_compat);
        sb->s_feature_incompat = ext2fs_swab32(sb->s_feature_incompat);
        sb->s_feature_ro_compat = ext2fs_swab32(sb->s_feature_ro_compat);
+       /* sb->s_uuid is __u8 and does not need swabbing */
+       /* sb->s_volume_name is char and does not need swabbing */
+       /* sb->s_last_mounted is char and does not need swabbing */
        sb->s_algorithm_usage_bitmap = ext2fs_swab32(sb->s_algorithm_usage_bitmap);
+       /* sb->s_prealloc_blocks is __u8 and does not need swabbing */
+       /* sb->s_prealloc_dir_blocks is __u8 and does not need swabbing */
        sb->s_reserved_gdt_blocks = ext2fs_swab16(sb->s_reserved_gdt_blocks);
+       /* sb->s_journal_uuid is __u8 and does not need swabbing */
        sb->s_journal_inum = ext2fs_swab32(sb->s_journal_inum);
        sb->s_journal_dev = ext2fs_swab32(sb->s_journal_dev);
        sb->s_last_orphan = ext2fs_swab32(sb->s_last_orphan);
+       for (i = 0; i < 4; i++)
+               sb->s_hash_seed[i] = ext2fs_swab32(sb->s_hash_seed[i]);
+       /* sb->s_def_hash_version is __u8 and does not need swabbing */
+       /* sb->s_jnl_backup_type is __u8 and does not need swabbing */
        sb->s_desc_size = ext2fs_swab16(sb->s_desc_size);
        sb->s_default_mount_opts = ext2fs_swab32(sb->s_default_mount_opts);
        sb->s_first_meta_bg = ext2fs_swab32(sb->s_first_meta_bg);
        sb->s_mkfs_time = ext2fs_swab32(sb->s_mkfs_time);
+       /* if journal backup is for a valid extent-based journal... */
+       if (ext2fs_extent_header_verify(sb->s_jnl_blocks,
+                                       sizeof(sb->s_jnl_blocks)) == 0) {
+               /* ... swap only the journal i_size and i_size_high,
+                * and the extent data is not swapped on read */
+               i = 15;
+       } else {
+               /* direct/indirect journal: swap it all */
+               i = 0;
+       }
+       for (; i < 17; i++)
+               sb->s_jnl_blocks[i] = ext2fs_swab32(sb->s_jnl_blocks[i]);
        sb->s_blocks_count_hi = ext2fs_swab32(sb->s_blocks_count_hi);
        sb->s_r_blocks_count_hi = ext2fs_swab32(sb->s_r_blocks_count_hi);
        sb->s_free_blocks_hi = ext2fs_swab32(sb->s_free_blocks_hi);
        sb->s_min_extra_isize = ext2fs_swab16(sb->s_min_extra_isize);
        sb->s_want_extra_isize = ext2fs_swab16(sb->s_want_extra_isize);
        sb->s_flags = ext2fs_swab32(sb->s_flags);
+       sb->s_raid_stride = ext2fs_swab16(sb->s_raid_stride);
        sb->s_mmp_update_interval = ext2fs_swab16(sb->s_mmp_update_interval);
        sb->s_mmp_block = ext2fs_swab64(sb->s_mmp_block);
+       sb->s_raid_stripe_width = ext2fs_swab32(sb->s_raid_stripe_width);
+       /* sb->s_log_groups_per_flex is __u8 and does not need swabbing */
+       /* sb->s_checksum_type is __u8 and does not need swabbing */
+       /* sb->s_encryption_level is __u8 and does not need swabbing */
+       /* sb->s_reserved_pad is __u8 and does not need swabbing */
        sb->s_kbytes_written = ext2fs_swab64(sb->s_kbytes_written);
        sb->s_snapshot_inum = ext2fs_swab32(sb->s_snapshot_inum);
        sb->s_snapshot_id = ext2fs_swab32(sb->s_snapshot_id);
        sb->s_snapshot_r_blocks_count =
                ext2fs_swab64(sb->s_snapshot_r_blocks_count);
        sb->s_snapshot_list = ext2fs_swab32(sb->s_snapshot_list);
+       sb->s_error_count = ext2fs_swab32(sb->s_error_count);
+       sb->s_first_error_time = ext2fs_swab32(sb->s_first_error_time);
+       sb->s_first_error_ino = ext2fs_swab32(sb->s_first_error_ino);
+       sb->s_first_error_block = ext2fs_swab64(sb->s_first_error_block);
+       /* sb->s_first_error_func is __u8 and does not need swabbing */
+       sb->s_last_error_time = ext2fs_swab32(sb->s_last_error_time);
+       sb->s_last_error_ino = ext2fs_swab32(sb->s_last_error_ino);
+       sb->s_last_error_block = ext2fs_swab64(sb->s_last_error_block);
+       /* sb->s_last_error_func is __u8 and does not need swabbing */
+       /* sb->s_mount_opts is __u8 and does not need swabbing */
        sb->s_usr_quota_inum = ext2fs_swab32(sb->s_usr_quota_inum);
        sb->s_grp_quota_inum = ext2fs_swab32(sb->s_grp_quota_inum);
-       sb->s_overhead_blocks = ext2fs_swab32(sb->s_overhead_blocks);
-       sb->s_checksum = ext2fs_swab32(sb->s_checksum);
-
-       for (i=0; i < 4; i++)
-               sb->s_hash_seed[i] = ext2fs_swab32(sb->s_hash_seed[i]);
-
-       /* if journal backup is for a valid extent-based journal... */
-       if (ext2fs_extent_header_verify(sb->s_jnl_blocks,
-                                       sizeof(sb->s_jnl_blocks)) == 0) {
-               /* ... swap only the journal i_size and i_size_high,
-                * and the extent data is not swapped on read */
-               i = 15;
-       } else {
-               /* direct/indirect journal: swap it all */
-               i = 0;
-       }
-       for (; i < 17; i++)
-               sb->s_jnl_blocks[i] = ext2fs_swab32(sb->s_jnl_blocks[i]);
+       sb->s_overhead_clusters = ext2fs_swab32(sb->s_overhead_clusters);
        sb->s_backup_bgs[0] = ext2fs_swab32(sb->s_backup_bgs[0]);
        sb->s_backup_bgs[1] = ext2fs_swab32(sb->s_backup_bgs[1]);
+       /* sb->s_encrypt_algos is __u8 and does not need swabbing */
+       /* sb->s_encrypt_pw_salt is __u8 and does not need swabbing */
+       sb->s_lpf_ino = ext2fs_swab32(sb->s_lpf_ino);
+       sb->s_prj_quota_inum = ext2fs_swab32(sb->s_prj_quota_inum);
        sb->s_checksum_seed = ext2fs_swab32(sb->s_checksum_seed);
+       /* s_*_time_hi are __u8 and does not need swabbing */
+       sb->s_encoding = ext2fs_swab16(sb->s_encoding);
+       sb->s_encoding_flags = ext2fs_swab16(sb->s_encoding_flags);
+       /* catch when new fields are used from s_reserved */
+       EXT2FS_BUILD_BUG_ON(sizeof(sb->s_reserved) != 95 * sizeof(__le32));
+       sb->s_checksum = ext2fs_swab32(sb->s_checksum);
 }
 
 void ext2fs_swap_group_desc2(ext2_filsys fs, struct ext2_group_desc *gdp)
@@ -143,6 +175,7 @@ void ext2fs_swap_group_desc2(ext2_filsys fs, struct ext2_group_desc *gdp)
                ext2fs_swab16(gdp4->bg_block_bitmap_csum_hi);
        gdp4->bg_inode_bitmap_csum_hi =
                ext2fs_swab16(gdp4->bg_inode_bitmap_csum_hi);
+       EXT2FS_BUILD_BUG_ON(sizeof(gdp4->bg_reserved) != sizeof(__u32));
 }
 
 void ext2fs_swap_group_desc(struct ext2_group_desc *gdp)
@@ -170,7 +203,7 @@ void ext2fs_swap_ext_attr_entry(struct ext2_ext_attr_entry *to_entry,
                                struct ext2_ext_attr_entry *from_entry)
 {
        to_entry->e_value_offs  = ext2fs_swab16(from_entry->e_value_offs);
-       to_entry->e_value_block = ext2fs_swab32(from_entry->e_value_block);
+       to_entry->e_value_inum  = ext2fs_swab32(from_entry->e_value_inum);
        to_entry->e_value_size  = ext2fs_swab32(from_entry->e_value_size);
        to_entry->e_hash        = ext2fs_swab32(from_entry->e_hash);
 }
@@ -210,18 +243,24 @@ void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t,
                            struct ext2_inode_large *f, int hostorder,
                            int bufsize)
 {
-       unsigned i, has_data_blocks, extra_isize, attr_magic;
-       int has_extents = 0;
-       int has_inline_data = 0;
-       int islnk = 0;
+       unsigned i, extra_isize, attr_magic;
+       int has_extents, has_inline_data, islnk, fast_symlink;
        int inode_size;
        __u32 *eaf, *eat;
 
-       if (hostorder && LINUX_S_ISLNK(f->i_mode))
-               islnk = 1;
+       /*
+        * Note that t and f may point to the same address. That's why
+        * if (hostorder) condition is executed before swab calls and
+        * if (!hostorder) afterwards.
+        */
+       if (hostorder) {
+               islnk = LINUX_S_ISLNK(f->i_mode);
+               fast_symlink = ext2fs_is_fast_symlink(EXT2_INODE(f));
+               has_extents = (f->i_flags & EXT4_EXTENTS_FL) != 0;
+               has_inline_data = (f->i_flags & EXT4_INLINE_DATA_FL) != 0;
+       }
+
        t->i_mode = ext2fs_swab16(f->i_mode);
-       if (!hostorder && LINUX_S_ISLNK(t->i_mode))
-               islnk = 1;
        t->i_uid = ext2fs_swab16(f->i_uid);
        t->i_size = ext2fs_swab32(f->i_size);
        t->i_atime = ext2fs_swab32(f->i_atime);
@@ -231,27 +270,21 @@ void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t,
        t->i_gid = ext2fs_swab16(f->i_gid);
        t->i_links_count = ext2fs_swab16(f->i_links_count);
        t->i_file_acl = ext2fs_swab32(f->i_file_acl);
-       if (hostorder)
-               has_data_blocks = ext2fs_inode_data_blocks(fs,
-                                          (struct ext2_inode *) f);
        t->i_blocks = ext2fs_swab32(f->i_blocks);
-       if (!hostorder)
-               has_data_blocks = ext2fs_inode_data_blocks(fs,
-                                          (struct ext2_inode *) t);
-       if (hostorder && (f->i_flags & EXT4_EXTENTS_FL))
-               has_extents = 1;
-       if (hostorder && (f->i_flags & EXT4_INLINE_DATA_FL))
-               has_inline_data = 1;
        t->i_flags = ext2fs_swab32(f->i_flags);
-       if (!hostorder && (t->i_flags & EXT4_EXTENTS_FL))
-               has_extents = 1;
-       if (!hostorder && (t->i_flags & EXT4_INLINE_DATA_FL))
-               has_inline_data = 1;
-       t->i_dir_acl = ext2fs_swab32(f->i_dir_acl);
+       t->i_size_high = ext2fs_swab32(f->i_size_high);
+
+       if (!hostorder) {
+               islnk = LINUX_S_ISLNK(t->i_mode);
+               fast_symlink = ext2fs_is_fast_symlink(EXT2_INODE(t));
+               has_extents = (t->i_flags & EXT4_EXTENTS_FL) != 0;
+               has_inline_data = (t->i_flags & EXT4_INLINE_DATA_FL) != 0;
+       }
+
        /*
         * Extent data and inline data are swapped on access, not here
         */
-       if (!has_extents && !has_inline_data && (!islnk || has_data_blocks)) {
+       if (!has_extents && !has_inline_data && (!islnk || !fast_symlink)) {
                for (i = 0; i < EXT2_N_BLOCKS; i++)
                        t->i_block[i] = ext2fs_swab32(f->i_block[i]);
        } else if (t != f) {
@@ -326,7 +359,9 @@ void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t,
        if (inode_includes(inode_size, i_version_hi))
                t->i_version_hi = ext2fs_swab32(f->i_version_hi);
        if (inode_includes(inode_size, i_projid))
-                t->i_projid = ext2fs_swab16(f->i_projid);
+                t->i_projid = ext2fs_swab32(f->i_projid);
+       /* catch new static fields added after i_projid */
+       EXT2FS_BUILD_BUG_ON(sizeof(struct ext2_inode_large) != 160);
 
        i = sizeof(struct ext2_inode) + extra_isize + sizeof(__u32);
        if (bufsize < (int) i)
@@ -381,10 +416,11 @@ errcode_t ext2fs_dirent_swab_in2(ext2_filsys fs, char *buf,
        errcode_t       retval;
        char            *p, *end;
        struct ext2_dir_entry *dirent;
-       unsigned int    name_len, rec_len;
+       unsigned int    name_len, rec_len, left;
 
        p = (char *) buf;
        end = (char *) buf + size;
+       left = size;
        while (p < end-8) {
                dirent = (struct ext2_dir_entry *) p;
                dirent->inode = ext2fs_swab32(dirent->inode);
@@ -401,6 +437,9 @@ errcode_t ext2fs_dirent_swab_in2(ext2_filsys fs, char *buf,
                        retval = EXT2_ET_DIR_CORRUPTED;
                } else if (((name_len & 0xFF) + 8) > rec_len)
                        retval = EXT2_ET_DIR_CORRUPTED;
+               if (rec_len > left)
+                       return EXT2_ET_DIR_CORRUPTED;
+               left -= rec_len;
                p += rec_len;
        }
 
@@ -436,6 +475,9 @@ errcode_t ext2fs_dirent_swab_out2(ext2_filsys fs, char *buf,
                dirent->inode = ext2fs_swab32(dirent->inode);
                dirent->rec_len = ext2fs_swab16(dirent->rec_len);
                dirent->name_len = ext2fs_swab16(dirent->name_len);
+               if (rec_len > size)
+                       return EXT2_ET_DIR_CORRUPTED;
+               size -= rec_len;
 
                if (flags & EXT2_DIRBLOCK_V2_STRUCT)
                        dirent->name_len = ext2fs_swab16(dirent->name_len);
@@ -443,5 +485,3 @@ errcode_t ext2fs_dirent_swab_out2(ext2_filsys fs, char *buf,
 
        return 0;
 }
-
-#endif
index 0e6f9a9..a66fb7e 100644 (file)
 #include "ext2_fs.h"
 #include "ext2fs.h"
 
+#ifndef HAVE_STRNLEN
+/*
+ * Incredibly, libc5 doesn't appear to have strnlen.  So we have to
+ * provide our own.
+ */
+static int my_strnlen(const char * s, int count)
+{
+       const char *cp = s;
+
+       while (count-- && *cp)
+               cp++;
+       return cp - s;
+}
+#define strnlen(str, x) my_strnlen((str),(x))
+#endif
+
 errcode_t ext2fs_symlink(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t ino,
                         const char *name, const char *target)
 {
@@ -38,12 +54,16 @@ errcode_t ext2fs_symlink(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t ino,
        int                     fastlink, inlinelink;
        unsigned int            target_len;
        char                    *block_buf = 0;
+       int                     drop_refcount = 0;
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
-       /* The Linux kernel doesn't allow for links longer than a block */
+       /*
+        * The Linux kernel doesn't allow for links longer than a block
+        * (counting the NUL terminator)
+        */
        target_len = strnlen(target, fs->blocksize + 1);
-       if (target_len > fs->blocksize) {
+       if (target_len >= fs->blocksize) {
                retval = EXT2_ET_INVALID_ARGUMENT;
                goto cleanup;
        }
@@ -51,10 +71,10 @@ errcode_t ext2fs_symlink(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t ino,
        /*
         * Allocate a data block for slow links
         */
-       retval = ext2fs_get_mem(fs->blocksize+1, &block_buf);
+       retval = ext2fs_get_mem(fs->blocksize, &block_buf);
        if (retval)
                goto cleanup;
-       memset(block_buf, 0, fs->blocksize+1);
+       memset(block_buf, 0, fs->blocksize);
        strncpy(block_buf, target, fs->blocksize);
 
        memset(&inode, 0, sizeof(struct ext2_inode));
@@ -87,9 +107,7 @@ errcode_t ext2fs_symlink(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t ino,
        ext2fs_inode_size_set(fs, &inode, target_len);
        /* The time fields are set by ext2fs_write_new_inode() */
 
-       inlinelink = !fastlink &&
-                    ext2fs_has_feature_inline_data(fs->super) &&
-                    (target_len < fs->blocksize);
+       inlinelink = !fastlink && ext2fs_has_feature_inline_data(fs->super);
        if (fastlink) {
                /* Fast symlinks, target stored in inode */
                strcpy((char *)&inode.i_block, target);
@@ -146,6 +164,14 @@ need_block:
        }
 
        /*
+        * Update accounting....
+        */
+       if (!fastlink && !inlinelink)
+               ext2fs_block_alloc_stats2(fs, blk, +1);
+       ext2fs_inode_alloc_stats2(fs, ino, +1, 0);
+       drop_refcount = 1;
+
+       /*
         * Link the symlink into the filesystem hierarchy
         */
        if (name) {
@@ -161,16 +187,26 @@ need_block:
                if (retval)
                        goto cleanup;
        }
-
-       /*
-        * Update accounting....
-        */
-       if (!fastlink && !inlinelink)
-               ext2fs_block_alloc_stats2(fs, blk, +1);
-       ext2fs_inode_alloc_stats2(fs, ino, +1, 0);
+       drop_refcount = 0;
 
 cleanup:
        if (block_buf)
                ext2fs_free_mem(&block_buf);
+       if (drop_refcount) {
+               if (!fastlink && !inlinelink)
+                       ext2fs_block_alloc_stats2(fs, blk, -1);
+               ext2fs_inode_alloc_stats2(fs, ino, -1, 0);
+       }
        return retval;
 }
+
+/*
+ * Test whether an inode is a fast symlink.
+ *
+ * A fast symlink has its symlink data stored in inode->i_block.
+ */
+int ext2fs_is_fast_symlink(struct ext2_inode *inode)
+{
+       return LINUX_S_ISLNK(inode->i_mode) && EXT2_I_SIZE(inode) &&
+              EXT2_I_SIZE(inode) < sizeof(inode->i_block);
+}
index b36c485..5091b12 100644 (file)
@@ -26,7 +26,7 @@ Last Changed Date: 2007-06-22 13:36:10 -0400 (Fri, 22 Jun 2007)
 
    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 */
 
 #ifdef CONFIG_STAND_ALONE
@@ -79,12 +79,10 @@ static char *rep_strdup(const char *s)
 {
        char *ret;
        int length;
+
        if (!s)
                return NULL;
-
-       if (!length)
-               length = strlen(s);
-
+       length = strlen(s);
        ret = malloc(length + 1);
        if (ret) {
                strncpy(ret, s, length);
@@ -712,7 +710,7 @@ int tdb_lockall_unmark(struct tdb_context *tdb)
        return _tdb_unlockall(tdb, F_WRLCK | TDB_MARK_LOCK);
 }
 
-/* lock entire database with write lock - nonblocking varient */
+/* lock entire database with write lock - nonblocking variant */
 int tdb_lockall_nonblock(struct tdb_context *tdb)
 {
        return _tdb_lockall(tdb, F_WRLCK, F_SETLK);
@@ -730,7 +728,7 @@ int tdb_lockall_read(struct tdb_context *tdb)
        return _tdb_lockall(tdb, F_RDLCK, F_SETLKW);
 }
 
-/* lock entire database with read lock - nonblock varient */
+/* lock entire database with read lock - nonblock variant */
 int tdb_lockall_read_nonblock(struct tdb_context *tdb)
 {
        return _tdb_lockall(tdb, F_RDLCK, F_SETLK);
@@ -1276,7 +1274,7 @@ void tdb_io_init(struct tdb_context *tdb)
     although once a transaction is started then an exclusive lock is
     gained until the transaction is committed or cancelled
 
-  - the commit stategy involves first saving away all modified data
+  - the commit strategy involves first saving away all modified data
     into a linearised buffer in the transaction recovery area, then
     marking the transaction recovery area with a magic value to
     indicate a valid recovery record. In total 4 fsync/msync calls are
@@ -2323,7 +2321,7 @@ static int update_tailer(struct tdb_context *tdb, tdb_off_t offset,
 }
 
 /* Add an element into the freelist. Merge adjacent records if
-   neccessary. */
+   necessary. */
 int tdb_free(struct tdb_context *tdb, tdb_off_t offset, struct list_struct *rec)
 {
        tdb_off_t right, left;
@@ -2674,7 +2672,7 @@ static int tdb_next_lock(struct tdb_context *tdb, struct tdb_traverse_lock *tloc
                           that we have done at least one fcntl lock at the
                           start of a search to guarantee that memory is
                           coherent on SMP systems. If records are added by
-                          others during the search then thats OK, and we
+                          others during the search then that's OK, and we
                           could possibly miss those with this trick, but we
                           could miss them anyway without this trick, so the
                           semantics don't change.
@@ -2762,7 +2760,7 @@ static int tdb_traverse_internal(struct tdb_context *tdb,
        struct list_struct rec;
        int ret, count = 0;
 
-       /* This was in the initializaton, above, but the IRIX compiler
+       /* This was in the initialization, above, but the IRIX compiler
         * did not like it.  crh
         */
        tl->next = tdb->travlocks.next;
@@ -4051,7 +4049,7 @@ int tdb_close(struct tdb_context *tdb)
        return ret;
 }
 
-/* register a loging function */
+/* register a logging function */
 void tdb_set_logging_function(struct tdb_context *tdb,
                               const struct tdb_logging_context *log_ctx)
 {
index 6a4086c..de7aa33 100644 (file)
@@ -24,7 +24,7 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 */
 
 #ifdef  __cplusplus
index b1d0d57..f4181c1 100644 (file)
@@ -3,7 +3,7 @@ Index: tdb/tdb.c
 --- tdb.orig/tdb.c
 +++ tdb/tdb.c
 @@ -29,11 +29,82 @@ Last Changed Date: 2007-06-22 13:36:10 -
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
  */
  
 -#include "replace.h"
index f7c50d1..480e68f 100644 (file)
@@ -146,8 +146,10 @@ static void test_abort(io_channel channel, unsigned long block)
 
 static char *safe_getenv(const char *arg)
 {
+#if !defined(_WIN32)
        if ((getuid() != geteuid()) || (getgid() != getegid()))
                return NULL;
+#endif
 #if HAVE_PRCTL
        if (prctl(PR_GET_DUMPABLE, 0, 0, 0, 0) == 0)
                return NULL;
@@ -195,6 +197,7 @@ static errcode_t test_open(const char *name, int flags, io_channel *channel)
        io->read_error = 0;
        io->write_error = 0;
        io->refcount = 1;
+       io->flags = 0;
 
        memset(data, 0, sizeof(struct test_private_data));
        data->magic = EXT2_ET_MAGIC_TEST_IO_CHANNEL;
@@ -235,8 +238,11 @@ static errcode_t test_open(const char *name, int flags, io_channel *channel)
        if ((value = safe_getenv("TEST_IO_WRITE_ABORT")) != NULL)
                data->write_abort_count = strtoul(value, NULL, 0);
 
-       if (data->real)
+       if (data->real) {
                io->align = data->real->align;
+               if (data->real->flags & CHANNEL_FLAGS_THREADS)
+                       io->flags |= CHANNEL_FLAGS_THREADS;
+       }
 
        *channel = io;
        return 0;
index 574fb7a..f6196b3 100644 (file)
@@ -190,7 +190,8 @@ errout:
        ext2fs_close_free(&test_fs);
 }
 
-void setup_cmd(int argc, char **argv)
+void setup_cmd(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+              void *infop EXT2FS_ATTR((unused)))
 {
        int             c, err;
        unsigned int    blocks = 128;
@@ -234,7 +235,8 @@ void setup_cmd(int argc, char **argv)
        setup_filesystem(argv[0], blocks, inodes, type, flags);
 }
 
-void close_cmd(int argc, char **argv)
+void close_cmd(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+              void *infop EXT2FS_ATTR((unused)))
 {
        if (check_fs_open(argv[0]))
                return;
@@ -269,7 +271,9 @@ void dump_bitmap(ext2fs_generic_bitmap bmap, unsigned int start, unsigned num)
        free(buf);
 }
 
-void dump_inode_bitmap_cmd(int argc, char **argv)
+void dump_inode_bitmap_cmd(int argc, char **argv,
+                          int sci_idx EXT2FS_ATTR((unused)),
+                          void *infop EXT2FS_ATTR((unused)))
 {
        if (check_fs_open(argv[0]))
                return;
@@ -278,7 +282,9 @@ void dump_inode_bitmap_cmd(int argc, char **argv)
        dump_bitmap(test_fs->inode_map, 1, test_fs->super->s_inodes_count);
 }
        
-void dump_block_bitmap_cmd(int argc, char **argv)
+void dump_block_bitmap_cmd(int argc, char **argv,
+                          int sci_idx EXT2FS_ATTR((unused)),
+                          void *infop EXT2FS_ATTR((unused)))
 {
        if (check_fs_open(argv[0]))
                return;
@@ -288,7 +294,8 @@ void dump_block_bitmap_cmd(int argc, char **argv)
                    test_fs->super->s_blocks_count);
 }
        
-void do_setb(int argc, char *argv[])
+void do_setb(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int block, num;
        int err;
@@ -326,7 +333,8 @@ void do_setb(int argc, char *argv[])
                        test_result, op_result);
 }
 
-void do_clearb(int argc, char *argv[])
+void do_clearb(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+              void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int block, num;
        int err;
@@ -364,7 +372,8 @@ void do_clearb(int argc, char *argv[])
                        test_result, op_result);
 }
 
-void do_testb(int argc, char *argv[])
+void do_testb(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int block, num;
        int err;
@@ -399,7 +408,8 @@ void do_testb(int argc, char *argv[])
        printf("Block %u is %s\n", block, test_result ? "set" : "clear");
 }
 
-void do_ffzb(int argc, char *argv[])
+void do_ffzb(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int start, end;
        int err;
@@ -432,7 +442,8 @@ void do_ffzb(int argc, char *argv[])
        printf("First unmarked block is %llu\n", out);
 }
 
-void do_ffsb(int argc, char *argv[])
+void do_ffsb(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int start, end;
        int err;
@@ -466,7 +477,8 @@ void do_ffsb(int argc, char *argv[])
 }
 
 
-void do_zerob(int argc, char *argv[])
+void do_zerob(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        if (check_fs_open(argv[0]))
                return;
@@ -475,7 +487,8 @@ void do_zerob(int argc, char *argv[])
        ext2fs_clear_block_bitmap(test_fs->block_map);
 }
 
-void do_seti(int argc, char *argv[])
+void do_seti(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int inode;
        int err;
@@ -504,7 +517,8 @@ void do_seti(int argc, char *argv[])
        }
 }
 
-void do_cleari(int argc, char *argv[])
+void do_cleari(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+              void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int inode;
        int err;
@@ -533,7 +547,8 @@ void do_cleari(int argc, char *argv[])
        }
 }
 
-void do_testi(int argc, char *argv[])
+void do_testi(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int inode;
        int err;
@@ -555,7 +570,8 @@ void do_testi(int argc, char *argv[])
        printf("Inode %u is %s\n", inode, test_result ? "set" : "clear");
 }
 
-void do_ffzi(int argc, char *argv[])
+void do_ffzi(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int start, end;
        int err;
@@ -588,7 +604,8 @@ void do_ffzi(int argc, char *argv[])
        printf("First unmarked inode is %u\n", out);
 }
 
-void do_ffsi(int argc, char *argv[])
+void do_ffsi(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+            void *infop EXT2FS_ATTR((unused)))
 {
        unsigned int start, end;
        int err;
@@ -621,7 +638,8 @@ void do_ffsi(int argc, char *argv[])
        printf("First marked inode is %u\n", out);
 }
 
-void do_zeroi(int argc, char *argv[])
+void do_zeroi(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
+             void *infop EXT2FS_ATTR((unused)))
 {
        if (check_fs_open(argv[0]))
                return;
index 7492592..dc116b1 100644 (file)
@@ -1,3 +1,4 @@
+setb 12 0
 setb 12
 setb 12
 clearb 12
@@ -37,6 +38,7 @@ setb 15
 testb 12 7
 clearb 15
 testb 12 7
+setb 12 0
 setb 12 7
 dump_bb
 seti 2
index 6b22666..9cfea13 100644 (file)
@@ -1,5 +1,7 @@
 tst_bitmaps 1.0.  Type '?' for a list of commands.
 
+tst_bitmaps: setb 12 0
+Marking blocks 12 to 11
 tst_bitmaps: setb 12
 Setting block 12, was clear before
 tst_bitmaps: setb 12
@@ -79,6 +81,8 @@ tst_bitmaps: clearb 15
 Clearing block 15, was set before
 tst_bitmaps: testb 12 7
 Blocks 12 to 18 are all clear.
+tst_bitmaps: setb 12 0
+Marking blocks 12 to 11
 tst_bitmaps: setb 12 7
 Marking blocks 12 to 18
 tst_bitmaps: dump_bb
index a90bff2..3e7497c 100644 (file)
@@ -43,7 +43,8 @@ static int print_blocks_proc(ext2_filsys fs EXT2FS_ATTR((unused)),
 }
 
 
-void do_block_iterate(int argc, char **argv)
+void do_block_iterate(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                     void *infop EXT2FS_ATTR((unused)))
 {
        const char      *usage = "block_iterate <file> <flags";
        ext2_ino_t      ino;
index 0adac41..80a5269 100644 (file)
@@ -135,14 +135,24 @@ int main(int argc, char **argv)
        check_field(s_mount_opts, 64);
        check_field(s_usr_quota_inum, 4);
        check_field(s_grp_quota_inum, 4);
-       check_field(s_overhead_blocks, 4);
+       check_field(s_overhead_clusters, 4);
        check_field(s_backup_bgs, 8);
        check_field(s_encrypt_algos, 4);
        check_field(s_encrypt_pw_salt, 16);
        check_field(s_lpf_ino, 4);
        check_field(s_prj_quota_inum, 4);
        check_field(s_checksum_seed, 4);
-       check_field(s_reserved, 98 * 4);
+       check_field(s_wtime_hi, 1);
+       check_field(s_mtime_hi, 1);
+       check_field(s_mkfs_time_hi, 1);
+       check_field(s_lastcheck_hi, 1);
+       check_field(s_first_error_time_hi, 1);
+       check_field(s_last_error_time_hi, 1);
+       check_field(s_first_error_errcode, 1);
+       check_field(s_last_error_errcode, 1);
+       check_field(s_encoding, 2);
+       check_field(s_encoding_flags, 2);
+       check_field(s_reserved, 95 * 4);
        check_field(s_checksum, 4);
        do_field("Superblock end", 0, 0, cur_offset, 1024);
 #endif
index 776d5b8..eb56f53 100644 (file)
@@ -381,7 +381,7 @@ static errcode_t undo_write_tdb(io_channel channel,
                 * Read one block using the backing I/O manager
                 * The backing I/O manager block size may be
                 * different from the tdb_data_size.
-                * Also we need to recalcuate the block number with respect
+                * Also we need to recalculate the block number with respect
                 * to the backing I/O manager.
                 */
                offset = block_num * data->tdb_data_size +
@@ -698,6 +698,8 @@ static errcode_t undo_open(const char *name, int flags, io_channel *channel)
        int             undo_fd = -1;
        errcode_t       retval;
 
+       /* We don't support multi-threading, at least for now */
+       flags &= ~IO_FLAG_THREADS;
        if (name == 0)
                return EXT2_ET_BAD_DEVICE_NAME;
        retval = ext2fs_get_mem(sizeof(struct struct_io_channel), &io);
index f4e6148..73f5667 100644 (file)
@@ -67,6 +67,9 @@
 #if HAVE_LINUX_FALLOC_H
 #include <linux/falloc.h>
 #endif
+#ifdef HAVE_PTHREAD
+#include <pthread.h>
+#endif
 
 #if defined(__linux__) && defined(_IO) && !defined(BLKROGET)
 #define BLKROGET   _IO(0x12, 94) /* Get read-only status (0 = read_write).  */
@@ -76,6 +79,7 @@
 
 #include "ext2_fs.h"
 #include "ext2fs.h"
+#include "ext2fsP.h"
 
 /*
  * For checking structure magic numbers...
@@ -106,11 +110,58 @@ struct unix_private_data {
        struct unix_cache cache[CACHE_SIZE];
        void    *bounce;
        struct struct_io_stats io_stats;
+#ifdef HAVE_PTHREAD
+       pthread_mutex_t cache_mutex;
+       pthread_mutex_t bounce_mutex;
+       pthread_mutex_t stats_mutex;
+#endif
 };
 
 #define IS_ALIGNED(n, align) ((((uintptr_t) n) & \
                               ((uintptr_t) ((align)-1))) == 0)
 
+typedef enum lock_kind {
+       CACHE_MTX, BOUNCE_MTX, STATS_MTX
+} kind_t;
+
+#ifdef HAVE_PTHREAD
+static inline pthread_mutex_t *get_mutex(struct unix_private_data *data,
+                                        kind_t kind)
+{
+       if (data->flags & IO_FLAG_THREADS) {
+               switch (kind) {
+               case CACHE_MTX:
+                       return &data->cache_mutex;
+               case BOUNCE_MTX:
+                       return &data->bounce_mutex;
+               case STATS_MTX:
+                       return &data->stats_mutex;
+               }
+       }
+       return NULL;
+}
+#endif
+
+static inline void mutex_lock(struct unix_private_data *data, kind_t kind)
+{
+#ifdef HAVE_PTHREAD
+       pthread_mutex_t *mtx = get_mutex(data,kind);
+
+       if (mtx)
+               pthread_mutex_lock(mtx);
+#endif
+}
+
+static inline void mutex_unlock(struct unix_private_data *data, kind_t kind)
+{
+#ifdef HAVE_PTHREAD
+       pthread_mutex_t *mtx = get_mutex(data,kind);
+
+       if (mtx)
+               pthread_mutex_unlock(mtx);
+#endif
+}
+
 static errcode_t unix_get_stats(io_channel channel, io_stats *stats)
 {
        errcode_t       retval = 0;
@@ -121,8 +172,11 @@ static errcode_t unix_get_stats(io_channel channel, io_stats *stats)
        data = (struct unix_private_data *) channel->private_data;
        EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
 
-       if (stats)
+       if (stats) {
+               mutex_lock(data, STATS_MTX);
                *stats = &data->io_stats;
+               mutex_unlock(data, STATS_MTX);
+       }
 
        return retval;
 }
@@ -165,8 +219,10 @@ static errcode_t raw_read_blk(io_channel channel,
        unsigned char   *buf = bufv;
        ssize_t         really_read = 0;
 
-       size = (count < 0) ? -count : count * channel->block_size;
+       size = (count < 0) ? -count : (ext2_loff_t) count * channel->block_size;
+       mutex_lock(data, STATS_MTX);
        data->io_stats.bytes_read += size;
+       mutex_unlock(data, STATS_MTX);
        location = ((ext2_loff_t) block * channel->block_size) + data->offset;
 
        if (data->flags & IO_FLAG_FORCE_BOUNCE) {
@@ -185,6 +241,7 @@ static errcode_t raw_read_blk(io_channel channel,
                actual = pread64(data->dev, buf, size, location);
                if (actual == size)
                        return 0;
+               actual = 0;
        }
 #elif HAVE_PREAD
        /* Try an aligned pread */
@@ -195,6 +252,7 @@ static errcode_t raw_read_blk(io_channel channel,
                actual = pread(data->dev, buf, size, location);
                if (actual == size)
                        return 0;
+               actual = 0;
        }
 #endif /* HAVE_PREAD */
 
@@ -229,8 +287,10 @@ static errcode_t raw_read_blk(io_channel channel,
         */
 bounce_read:
        while (size > 0) {
+               mutex_lock(data, BOUNCE_MTX);
                actual = read(data->dev, data->bounce, channel->block_size);
                if (actual != channel->block_size) {
+                       mutex_unlock(data, BOUNCE_MTX);
                        actual = really_read;
                        buf -= really_read;
                        size += really_read;
@@ -243,11 +303,13 @@ bounce_read:
                really_read += actual;
                size -= actual;
                buf += actual;
+               mutex_unlock(data, BOUNCE_MTX);
        }
        return 0;
 
 error_out:
-       memset((char *) buf+actual, 0, size-actual);
+       if (actual >= 0 && actual < size)
+               memset((char *) buf+actual, 0, size-actual);
        if (channel->read_error)
                retval = (channel->read_error)(channel, block, count, buf,
                                               size, actual, retval);
@@ -271,9 +333,11 @@ static errcode_t raw_write_blk(io_channel channel,
                if (count < 0)
                        size = -count;
                else
-                       size = count * channel->block_size;
+                       size = (ext2_loff_t) count * channel->block_size;
        }
+       mutex_lock(data, STATS_MTX);
        data->io_stats.bytes_written += size;
+       mutex_unlock(data, STATS_MTX);
 
        location = ((ext2_loff_t) block * channel->block_size) + data->offset;
 
@@ -337,15 +401,17 @@ static errcode_t raw_write_blk(io_channel channel,
         */
 bounce_write:
        while (size > 0) {
+               mutex_lock(data, BOUNCE_MTX);
                if (size < channel->block_size) {
                        actual = read(data->dev, data->bounce,
                                      channel->block_size);
                        if (actual != channel->block_size) {
                                if (actual < 0) {
+                                       mutex_unlock(data, BOUNCE_MTX);
                                        retval = errno;
                                        goto error_out;
                                }
-                               memset(data->bounce + actual, 0,
+                               memset((char *) data->bounce + actual, 0,
                                       channel->block_size - actual);
                        }
                }
@@ -358,6 +424,7 @@ bounce_write:
                        goto error_out;
                }
                actual = write(data->dev, data->bounce, channel->block_size);
+               mutex_unlock(data, BOUNCE_MTX);
                if (actual < 0) {
                        retval = errno;
                        goto error_out;
@@ -477,24 +544,28 @@ static void reuse_cache(io_channel channel, struct unix_private_data *data,
        cache->access_time = ++data->access_time;
 }
 
+#define FLUSH_INVALIDATE       0x01
+#define FLUSH_NOLOCK           0x02
+
 /*
  * Flush all of the blocks in the cache
  */
 static errcode_t flush_cached_blocks(io_channel channel,
                                     struct unix_private_data *data,
-                                    int invalidate)
-
+                                    int flags)
 {
        struct unix_cache       *cache;
        errcode_t               retval, retval2;
        int                     i;
 
        retval2 = 0;
+       if ((flags & FLUSH_NOLOCK) == 0)
+               mutex_lock(data, CACHE_MTX);
        for (i=0, cache = data->cache; i < CACHE_SIZE; i++, cache++) {
                if (!cache->in_use)
                        continue;
 
-               if (invalidate)
+               if (flags & FLUSH_INVALIDATE)
                        cache->in_use = 0;
 
                if (!cache->dirty)
@@ -507,6 +578,8 @@ static errcode_t flush_cached_blocks(io_channel channel,
                else
                        cache->dirty = 0;
        }
+       if ((flags & FLUSH_NOLOCK) == 0)
+               mutex_unlock(data, CACHE_MTX);
        return retval2;
 }
 #endif /* NO_IO_CACHE */
@@ -565,6 +638,14 @@ static errcode_t unix_open_channel(const char *name, int fd,
        if (safe_getenv("UNIX_IO_FORCE_BOUNCE"))
                flags |= IO_FLAG_FORCE_BOUNCE;
 
+#ifdef __linux__
+       /*
+        * We need to make sure any previous errors in the block
+        * device are thrown away, sigh.
+        */
+       (void) fsync(fd);
+#endif
+
        retval = ext2fs_get_mem(sizeof(struct struct_io_channel), &io);
        if (retval)
                goto cleanup;
@@ -585,6 +666,7 @@ static errcode_t unix_open_channel(const char *name, int fd,
        io->read_error = 0;
        io->write_error = 0;
        io->refcount = 1;
+       io->flags = 0;
 
        memset(data, 0, sizeof(struct unix_private_data));
        data->magic = EXT2_ET_MAGIC_UNIX_IO_CHANNEL;
@@ -608,7 +690,7 @@ static errcode_t unix_open_channel(const char *name, int fd,
         * zero.
         */
        if (ext2fs_fstat(data->dev, &st) == 0) {
-               if (S_ISBLK(st.st_mode))
+               if (ext2fsP_is_disk_device(st.st_mode))
                        io->flags |= CHANNEL_FLAGS_BLOCK_DEVICE;
                else
                        io->flags |= CHANNEL_FLAGS_DISCARD_ZEROES;
@@ -679,7 +761,7 @@ static errcode_t unix_open_channel(const char *name, int fd,
             (ut.release[4] == '1') && (ut.release[5] >= '0') &&
             (ut.release[5] < '8')) &&
            (ext2fs_fstat(data->dev, &st) == 0) &&
-           (S_ISBLK(st.st_mode))) {
+           (ext2fsP_is_disk_device(st.st_mode))) {
                struct rlimit   rlim;
 
                rlim.rlim_cur = rlim.rlim_max = (unsigned long) RLIM_INFINITY;
@@ -692,6 +774,25 @@ static errcode_t unix_open_channel(const char *name, int fd,
                }
        }
 #endif
+#ifdef HAVE_PTHREAD
+       if (flags & IO_FLAG_THREADS) {
+               io->flags |= CHANNEL_FLAGS_THREADS;
+               retval = pthread_mutex_init(&data->cache_mutex, NULL);
+               if (retval)
+                       goto cleanup;
+               retval = pthread_mutex_init(&data->bounce_mutex, NULL);
+               if (retval) {
+                       pthread_mutex_destroy(&data->cache_mutex);
+                       goto cleanup;
+               }
+               retval = pthread_mutex_init(&data->stats_mutex, NULL);
+               if (retval) {
+                       pthread_mutex_destroy(&data->cache_mutex);
+                       pthread_mutex_destroy(&data->bounce_mutex);
+                       goto cleanup;
+               }
+       }
+#endif
        *channel = io;
        return 0;
 
@@ -718,9 +819,10 @@ static errcode_t unixfd_open(const char *str_fd, int flags,
        int fd_flags;
 
        fd = atoi(str_fd);
+#if defined(HAVE_FCNTL)
        fd_flags = fcntl(fd, F_GETFD);
        if (fd_flags == -1)
-               return -EBADF;
+               return EBADF;
 
        flags = 0;
        if (fd_flags & O_RDWR)
@@ -731,6 +833,7 @@ static errcode_t unixfd_open(const char *str_fd, int flags,
        if (fd_flags & O_DIRECT)
                flags |= IO_FLAG_DIRECT_IO;
 #endif
+#endif  /* HAVE_FCNTL */
 
        return unix_open_channel(str_fd, fd, flags, channel, unixfd_io_manager);
 }
@@ -782,6 +885,13 @@ static errcode_t unix_close(io_channel channel)
        if (close(data->dev) < 0)
                retval = errno;
        free_cache(data);
+#ifdef HAVE_PTHREAD
+       if (data->flags & IO_FLAG_THREADS) {
+               pthread_mutex_destroy(&data->cache_mutex);
+               pthread_mutex_destroy(&data->bounce_mutex);
+               pthread_mutex_destroy(&data->stats_mutex);
+       }
+#endif
 
        ext2fs_free_mem(&channel->private_data);
        if (channel->name)
@@ -793,24 +903,27 @@ static errcode_t unix_close(io_channel channel)
 static errcode_t unix_set_blksize(io_channel channel, int blksize)
 {
        struct unix_private_data *data;
-       errcode_t               retval;
+       errcode_t               retval = 0;
 
        EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
        data = (struct unix_private_data *) channel->private_data;
        EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
 
        if (channel->block_size != blksize) {
+               mutex_lock(data, CACHE_MTX);
+               mutex_lock(data, BOUNCE_MTX);
 #ifndef NO_IO_CACHE
-               if ((retval = flush_cached_blocks(channel, data, 0)))
+               if ((retval = flush_cached_blocks(channel, data, FLUSH_NOLOCK)))
                        return retval;
 #endif
 
                channel->block_size = blksize;
                free_cache(data);
-               if ((retval = alloc_cache(channel, data)))
-                       return retval;
+               retval = alloc_cache(channel, data);
+               mutex_unlock(data, BOUNCE_MTX);
+               mutex_unlock(data, CACHE_MTX);
        }
-       return 0;
+       return retval;
 }
 
 static errcode_t unix_read_blk64(io_channel channel, unsigned long long block,
@@ -818,7 +931,7 @@ static errcode_t unix_read_blk64(io_channel channel, unsigned long long block,
 {
        struct unix_private_data *data;
        struct unix_cache *cache, *reuse[READ_DIRECT_SIZE];
-       errcode_t       retval;
+       errcode_t       retval = 0;
        char            *cp;
        int             i, j;
 
@@ -829,6 +942,8 @@ static errcode_t unix_read_blk64(io_channel channel, unsigned long long block,
 #ifdef NO_IO_CACHE
        return raw_read_blk(channel, data, block, count, buf);
 #else
+       if (data->flags & IO_FLAG_NOCACHE)
+               return raw_read_blk(channel, data, block, count, buf);
        /*
         * If we're doing an odd-sized read or a very large read,
         * flush out the cache and then do a direct read.
@@ -840,6 +955,7 @@ static errcode_t unix_read_blk64(io_channel channel, unsigned long long block,
        }
 
        cp = buf;
+       mutex_lock(data, CACHE_MTX);
        while (count > 0) {
                /* If it's in the cache, use it! */
                if ((cache = find_cached_block(data, block, &reuse[0]))) {
@@ -862,10 +978,11 @@ static errcode_t unix_read_blk64(io_channel channel, unsigned long long block,
                        if ((retval = raw_read_blk(channel, data, block, 1,
                                                   cache->buf))) {
                                cache->in_use = 0;
-                               return retval;
+                               break;
                        }
                        memcpy(cp, cache->buf, channel->block_size);
-                       return 0;
+                       retval = 0;
+                       break;
                }
 
                /*
@@ -879,7 +996,7 @@ static errcode_t unix_read_blk64(io_channel channel, unsigned long long block,
                printf("Reading %d blocks starting at %lu\n", i, block);
 #endif
                if ((retval = raw_read_blk(channel, data, block, i, cp)))
-                       return retval;
+                       break;
 
                /* Save the results in the cache */
                for (j=0; j < i; j++) {
@@ -890,7 +1007,8 @@ static errcode_t unix_read_blk64(io_channel channel, unsigned long long block,
                        cp += channel->block_size;
                }
        }
-       return 0;
+       mutex_unlock(data, CACHE_MTX);
+       return retval;
 #endif /* NO_IO_CACHE */
 }
 
@@ -916,12 +1034,15 @@ static errcode_t unix_write_blk64(io_channel channel, unsigned long long block,
 #ifdef NO_IO_CACHE
        return raw_write_blk(channel, data, block, count, buf);
 #else
+       if (data->flags & IO_FLAG_NOCACHE)
+               return raw_write_blk(channel, data, block, count, buf);
        /*
         * If we're doing an odd-sized write or a very large write,
         * flush out the cache completely and then do a direct write.
         */
        if (count < 0 || count > WRITE_DIRECT_SIZE) {
-               if ((retval = flush_cached_blocks(channel, data, 1)))
+               if ((retval = flush_cached_blocks(channel, data,
+                                                 FLUSH_INVALIDATE)))
                        return retval;
                return raw_write_blk(channel, data, block, count, buf);
        }
@@ -936,6 +1057,7 @@ static errcode_t unix_write_blk64(io_channel channel, unsigned long long block,
                retval = raw_write_blk(channel, data, block, count, buf);
 
        cp = buf;
+       mutex_lock(data, CACHE_MTX);
        while (count > 0) {
                cache = find_cached_block(data, block, &reuse);
                if (!cache) {
@@ -949,6 +1071,7 @@ static errcode_t unix_write_blk64(io_channel channel, unsigned long long block,
                block++;
                cp += channel->block_size;
        }
+       mutex_unlock(data, CACHE_MTX);
        return retval;
 #endif /* NO_IO_CACHE */
 }
@@ -999,7 +1122,7 @@ static errcode_t unix_write_byte(io_channel channel, unsigned long offset,
        /*
         * Flush out the cache completely
         */
-       if ((retval = flush_cached_blocks(channel, data, 1)))
+       if ((retval = flush_cached_blocks(channel, data, FLUSH_INVALIDATE)))
                return retval;
 #endif
 
@@ -1030,8 +1153,10 @@ static errcode_t unix_flush(io_channel channel)
 #ifndef NO_IO_CACHE
        retval = flush_cached_blocks(channel, data, 0);
 #endif
+#ifdef HAVE_FSYNC
        if (!retval && fsync(data->dev) != 0)
                return errno;
+#endif
        return retval;
 }
 
@@ -1040,6 +1165,7 @@ static errcode_t unix_set_option(io_channel channel, const char *option,
 {
        struct unix_private_data *data;
        unsigned long long tmp;
+       errcode_t retval;
        char *end;
 
        EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
@@ -1058,6 +1184,20 @@ static errcode_t unix_set_option(io_channel channel, const char *option,
                        return EXT2_ET_INVALID_ARGUMENT;
                return 0;
        }
+       if (!strcmp(option, "cache")) {
+               if (!arg)
+                       return EXT2_ET_INVALID_ARGUMENT;
+               if (!strcmp(arg, "on")) {
+                       data->flags &= ~IO_FLAG_NOCACHE;
+                       return 0;
+               }
+               if (!strcmp(arg, "off")) {
+                       retval = flush_cached_blocks(channel, data, 0);
+                       data->flags |= IO_FLAG_NOCACHE;
+                       return retval;
+               }
+               return EXT2_ET_INVALID_ARGUMENT;
+       }
        return EXT2_ET_INVALID_ARGUMENT;
 }
 
@@ -1110,9 +1250,36 @@ unimplemented:
        return EXT2_ET_UNIMPLEMENTED;
 }
 
+/*
+ * If we know about ZERO_RANGE, try that before we try PUNCH_HOLE because
+ * ZERO_RANGE doesn't unmap preallocated blocks.  We prefer fallocate because
+ * it always invalidates page cache, and libext2fs requires that reads after
+ * ZERO_RANGE return zeroes.
+ */
+static int __unix_zeroout(int fd, off_t offset, off_t len)
+{
+       int ret = -1;
+
+#if defined(HAVE_FALLOCATE) && defined(FALLOC_FL_ZERO_RANGE)
+       ret = fallocate(fd, FALLOC_FL_ZERO_RANGE, offset, len);
+       if (ret == 0)
+               return 0;
+#endif
+#if defined(HAVE_FALLOCATE) && defined(FALLOC_FL_PUNCH_HOLE) && defined(FALLOC_FL_KEEP_SIZE)
+       ret = fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
+                       offset,  len);
+       if (ret == 0)
+               return 0;
+#endif
+       errno = EOPNOTSUPP;
+       return ret;
+}
+
 /* parameters might not be used if OS doesn't support zeroout */
+#if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
 static errcode_t unix_zeroout(io_channel channel, unsigned long long block,
                              unsigned long long count)
 {
@@ -1126,10 +1293,7 @@ static errcode_t unix_zeroout(io_channel channel, unsigned long long block,
        if (safe_getenv("UNIX_IO_NOZEROOUT"))
                goto unimplemented;
 
-       if (channel->flags & CHANNEL_FLAGS_BLOCK_DEVICE) {
-               /* Not implemented until the BLKZEROOUT mess is fixed */
-               goto unimplemented;
-       } else {
+       if (!(channel->flags & CHANNEL_FLAGS_BLOCK_DEVICE)) {
                /* Regular file, try to use truncate/punch/zero. */
                struct stat statbuf;
 
@@ -1149,26 +1313,11 @@ static errcode_t unix_zeroout(io_channel channel, unsigned long long block,
                        if (ret)
                                goto err;
                }
-#if defined(HAVE_FALLOCATE) && (defined(FALLOC_FL_ZERO_RANGE) || \
-       (defined(FALLOC_FL_PUNCH_HOLE) && defined(FALLOC_FL_KEEP_SIZE)))
-#if defined(FALLOC_FL_PUNCH_HOLE) && defined(FALLOC_FL_KEEP_SIZE)
-               ret = fallocate(data->dev,
-                               FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
-                               (off_t)(block) * channel->block_size + data->offset,
-                               (off_t)(count) * channel->block_size);
-               if (ret == 0)
-                       goto err;
-#endif
-#ifdef FALLOC_FL_ZERO_RANGE
-               ret = fallocate(data->dev,
-                               FALLOC_FL_ZERO_RANGE,
-                               (off_t)(block) * channel->block_size + data->offset,
-                               (off_t)(count) * channel->block_size);
-#endif
-#else
-               goto unimplemented;
-#endif /* HAVE_FALLOCATE && (ZERO_RANGE || (PUNCH_HOLE && KEEP_SIZE)) */
        }
+
+       ret = __unix_zeroout(data->dev,
+                       (off_t)(block) * channel->block_size + data->offset,
+                       (off_t)(count) * channel->block_size);
 err:
        if (ret < 0) {
                if (errno == EOPNOTSUPP)
@@ -1179,7 +1328,9 @@ err:
 unimplemented:
        return EXT2_ET_UNIMPLEMENTED;
 }
+#if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic pop
+#endif
 
 static struct struct_io_manager struct_unix_manager = {
        .magic          = EXT2_ET_MAGIC_IO_MANAGER,
index 8ab27ee..3ec04cf 100644 (file)
@@ -49,7 +49,7 @@ static int unlink_proc(struct ext2_dir_entry *dirent,
                if (strncmp(ls->name, dirent->name, ext2fs_dirent_name_len(dirent)))
                        return 0;
        }
-       if (ls->inode) {
+       if (!(ls->flags & EXT2FS_UNLINK_FORCE) && ls->inode) {
                if (dirent->inode != ls->inode)
                        return 0;
        } else {
@@ -70,7 +70,7 @@ static int unlink_proc(struct ext2_dir_entry *dirent,
 #endif
 errcode_t ext2fs_unlink(ext2_filsys fs, ext2_ino_t dir,
                        const char *name, ext2_ino_t ino,
-                       int flags EXT2FS_ATTR((unused)))
+                       int flags)
 {
        errcode_t       retval;
        struct link_struct ls;
@@ -86,7 +86,7 @@ errcode_t ext2fs_unlink(ext2_filsys fs, ext2_ino_t dir,
        ls.name = name;
        ls.namelen = name ? strlen(name) : 0;
        ls.inode = ino;
-       ls.flags = 0;
+       ls.flags = flags;
        ls.done = 0;
        ls.prev = 0;
 
diff --git a/lib/ext2fs/utf8data.h b/lib/ext2fs/utf8data.h
new file mode 100644 (file)
index 0000000..76e4f0e
--- /dev/null
@@ -0,0 +1,4109 @@
+/* This file is generated code, do not edit. */
+#ifndef __INCLUDED_FROM_UTF8NORM_C__
+#error Only nls_utf8-norm.c should include this file.
+#endif
+
+static const unsigned int utf8vers = 0xc0100;
+
+static const unsigned int utf8agetab[] = {
+       0,
+       0x10100,
+       0x20000,
+       0x20100,
+       0x30000,
+       0x30100,
+       0x30200,
+       0x40000,
+       0x40100,
+       0x50000,
+       0x50100,
+       0x50200,
+       0x60000,
+       0x60100,
+       0x60200,
+       0x60300,
+       0x70000,
+       0x80000,
+       0x90000,
+       0xa0000,
+       0xb0000,
+       0xc0000,
+       0xc0100
+};
+
+static const struct utf8data utf8nfdicfdata[] = {
+       { 0, 0 },
+       { 0x10100, 0 },
+       { 0x20000, 0 },
+       { 0x20100, 0 },
+       { 0x30000, 0 },
+       { 0x30100, 0 },
+       { 0x30200, 1792 },
+       { 0x40000, 3200 },
+       { 0x40100, 3200 },
+       { 0x50000, 3200 },
+       { 0x50100, 3200 },
+       { 0x50200, 3200 },
+       { 0x60000, 3200 },
+       { 0x60100, 3200 },
+       { 0x60200, 3200 },
+       { 0x60300, 3200 },
+       { 0x70000, 3200 },
+       { 0x80000, 3200 },
+       { 0x90000, 3200 },
+       { 0xa0000, 3200 },
+       { 0xb0000, 3200 },
+       { 0xc0000, 3200 },
+       { 0xc0100, 3200 }
+};
+
+static const struct utf8data utf8nfdidata[] = {
+       { 0, 896 },
+       { 0x10100, 896 },
+       { 0x20000, 896 },
+       { 0x20100, 896 },
+       { 0x30000, 896 },
+       { 0x30100, 896 },
+       { 0x30200, 2496 },
+       { 0x40000, 20736 },
+       { 0x40100, 20736 },
+       { 0x50000, 20736 },
+       { 0x50100, 20736 },
+       { 0x50200, 20736 },
+       { 0x60000, 20736 },
+       { 0x60100, 20736 },
+       { 0x60200, 20736 },
+       { 0x60300, 20736 },
+       { 0x70000, 20736 },
+       { 0x80000, 20736 },
+       { 0x90000, 20736 },
+       { 0xa0000, 20736 },
+       { 0xb0000, 20736 },
+       { 0xc0000, 20736 },
+       { 0xc0100, 20736 }
+};
+
+static const unsigned char utf8data[64256] = {
+       /* nfdicf_30100 */
+       0xd7,0x07,0x66,0x84,0x0c,0x01,0x00,0xc6,0xd5,0x16,0xe4,0x99,0x1a,0xe3,0x63,0x15,
+       0xe2,0x4c,0x0e,0xc1,0xe0,0x4e,0x0d,0xcf,0x86,0x65,0x2d,0x0d,0x01,0x00,0xd4,0xb8,
+       0xd3,0x27,0xe2,0x89,0xa3,0xe1,0xce,0x35,0xe0,0x2c,0x22,0xcf,0x86,0xc5,0xe4,0x15,
+       0x6d,0xe3,0x60,0x68,0xe2,0xf6,0x65,0xe1,0x29,0x65,0xe0,0xee,0x64,0xcf,0x86,0xe5,
+       0xb3,0x64,0x64,0x96,0x64,0x0b,0x00,0xd2,0x0e,0xe1,0xb5,0x3c,0xe0,0xba,0xa3,0xcf,
+       0x86,0xcf,0x06,0x01,0x00,0xd1,0x0c,0xe0,0x1e,0xa9,0xcf,0x86,0xcf,0x06,0x02,0xff,
+       0xff,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01,
+       0x00,0xe4,0xe1,0x45,0xe3,0x3b,0x45,0xd2,0x06,0xcf,0x06,0x01,0x00,0xe1,0x87,0xad,
+       0xd0,0x21,0xcf,0x86,0xe5,0x81,0xaa,0xe4,0x00,0xaa,0xe3,0xbf,0xa9,0xe2,0x9e,0xa9,
+       0xe1,0x8d,0xa9,0x10,0x08,0x01,0xff,0xe8,0xb1,0x88,0x00,0x01,0xff,0xe6,0x9b,0xb4,
+       0x00,0xcf,0x86,0xe5,0x63,0xac,0xd4,0x19,0xe3,0xa2,0xab,0xe2,0x81,0xab,0xe1,0x70,
+       0xab,0x10,0x08,0x01,0xff,0xe9,0xb9,0xbf,0x00,0x01,0xff,0xe8,0xab,0x96,0x00,0xe3,
+       0x09,0xac,0xe2,0xe8,0xab,0xe1,0xd7,0xab,0x10,0x08,0x01,0xff,0xe7,0xb8,0xb7,0x00,
+       0x01,0xff,0xe9,0x9b,0xbb,0x00,0x83,0xe2,0x19,0xfa,0xe1,0xf2,0xf6,0xe0,0x6f,0xf5,
+       0xcf,0x86,0xd5,0x31,0xc4,0xe3,0x54,0x4e,0xe2,0xf5,0x4c,0xe1,0xa4,0xcc,0xe0,0x9c,
+       0x4b,0xcf,0x86,0xe5,0x8e,0x49,0xe4,0xaf,0x46,0xe3,0x11,0xbd,0xe2,0x68,0xbc,0xe1,
+       0x43,0xbc,0xe0,0x1c,0xbc,0xcf,0x86,0xe5,0xe9,0xbb,0x94,0x07,0x63,0xd4,0xbb,0x07,
+       0x00,0x07,0x00,0xe4,0xdb,0xf4,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd2,0x0b,
+       0xe1,0xea,0xe1,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0xd9,0xe2,0xcf,0x86,
+       0xe5,0x9e,0xe2,0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0xd9,0xe2,0xcf,0x06,
+       0x13,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x74,0xf4,0xe3,0x5d,0xf3,
+       0xd2,0xa0,0xe1,0x13,0xe7,0xd0,0x21,0xcf,0x86,0xe5,0x14,0xe4,0xe4,0x90,0xe3,0xe3,
+       0x4e,0xe3,0xe2,0x2d,0xe3,0xe1,0x1b,0xe3,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00,
+       0x05,0xff,0xe4,0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0x70,0xe5,0xe3,0x2f,0xe5,
+       0xe2,0x0e,0xe5,0xe1,0xfd,0xe4,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff,
+       0xe5,0x93,0xb6,0x00,0xd4,0x34,0xd3,0x18,0xe2,0xf7,0xe5,0xe1,0xe6,0xe5,0x10,0x09,
+       0x05,0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00,0xe2,0x17,
+       0xe6,0x91,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff,0xe5,0xac,
+       0x88,0x00,0x05,0xff,0xe5,0xac,0xbe,0x00,0xe3,0x5d,0xe6,0xd2,0x14,0xe1,0x2c,0xe6,
+       0x10,0x08,0x05,0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0xe1,
+       0x38,0xe6,0x10,0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00,
+       0xd1,0xd5,0xd0,0x6a,0xcf,0x86,0xe5,0x8d,0xeb,0xd4,0x19,0xe3,0xc6,0xea,0xe2,0xa4,
+       0xea,0xe1,0x93,0xea,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,0xe6,0xb5,
+       0xb7,0x00,0xd3,0x18,0xe2,0x10,0xeb,0xe1,0xff,0xea,0x10,0x09,0x05,0xff,0xf0,0xa3,
+       0xbd,0x9e,0x00,0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0x28,0xeb,0x10,
+       0x08,0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1,0x11,0x10,
+       0x08,0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00,0x10,0x08,
+       0x05,0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86,0xe5,0x2a,
+       0xed,0xd4,0x1a,0xe3,0x62,0xec,0xe2,0x48,0xec,0xe1,0x35,0xec,0x10,0x08,0x05,0xff,
+       0xe7,0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2,0xaa,0xec,
+       0xe1,0x98,0xec,0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3,
+       0x00,0xd2,0x13,0xe1,0xc6,0xec,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00,0x05,0xff,
+       0xe7,0xa9,0x80,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc,0x00,0x05,
+       0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x05,
+       0xff,0xe7,0xaa,0xae,0x00,0xe0,0xdc,0xef,0xcf,0x86,0xd5,0x1d,0xe4,0x51,0xee,0xe3,
+       0x0d,0xee,0xe2,0xeb,0xed,0xe1,0xda,0xed,0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f,
+       0x00,0x05,0xff,0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0xf8,0xee,0xe2,0xd4,0xee,0xe1,
+       0xc3,0xee,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,0x8a,0x00,
+       0xd3,0x18,0xe2,0x43,0xef,0xe1,0x32,0xef,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1,
+       0x00,0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0x5b,0xef,0x10,0x08,0x05,
+       0xff,0xe8,0x9a,0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05,
+       0xff,0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8,
+       0x9e,0x86,0x00,0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       /* nfdi_30100 */
+       0x57,0x04,0x01,0x00,0xc6,0xd5,0x16,0xe4,0xc2,0x59,0xe3,0xfb,0x54,0xe2,0x74,0x4f,
+       0xc1,0xe0,0xa0,0x4d,0xcf,0x86,0x65,0x84,0x4d,0x01,0x00,0xd4,0xb8,0xd3,0x27,0xe2,
+       0x0c,0xa0,0xe1,0xdf,0x8d,0xe0,0x39,0x71,0xcf,0x86,0xc5,0xe4,0x98,0x69,0xe3,0xe3,
+       0x64,0xe2,0x79,0x62,0xe1,0xac,0x61,0xe0,0x71,0x61,0xcf,0x86,0xe5,0x36,0x61,0x64,
+       0x19,0x61,0x0b,0x00,0xd2,0x0e,0xe1,0xc2,0xa0,0xe0,0x3d,0xa0,0xcf,0x86,0xcf,0x06,
+       0x01,0x00,0xd1,0x0c,0xe0,0xa1,0xa5,0xcf,0x86,0xcf,0x06,0x02,0xff,0xff,0xd0,0x08,
+       0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01,0x00,0xe4,0x9e,
+       0xb6,0xe3,0x18,0xae,0xd2,0x06,0xcf,0x06,0x01,0x00,0xe1,0x0a,0xaa,0xd0,0x21,0xcf,
+       0x86,0xe5,0x04,0xa7,0xe4,0x83,0xa6,0xe3,0x42,0xa6,0xe2,0x21,0xa6,0xe1,0x10,0xa6,
+       0x10,0x08,0x01,0xff,0xe8,0xb1,0x88,0x00,0x01,0xff,0xe6,0x9b,0xb4,0x00,0xcf,0x86,
+       0xe5,0xe6,0xa8,0xd4,0x19,0xe3,0x25,0xa8,0xe2,0x04,0xa8,0xe1,0xf3,0xa7,0x10,0x08,
+       0x01,0xff,0xe9,0xb9,0xbf,0x00,0x01,0xff,0xe8,0xab,0x96,0x00,0xe3,0x8c,0xa8,0xe2,
+       0x6b,0xa8,0xe1,0x5a,0xa8,0x10,0x08,0x01,0xff,0xe7,0xb8,0xb7,0x00,0x01,0xff,0xe9,
+       0x9b,0xbb,0x00,0x83,0xe2,0x9c,0xf6,0xe1,0x75,0xf3,0xe0,0xf2,0xf1,0xcf,0x86,0xd5,
+       0x31,0xc4,0xe3,0x6d,0xcc,0xe2,0x46,0xca,0xe1,0x27,0xc9,0xe0,0xb7,0xbf,0xcf,0x86,
+       0xe5,0xaa,0xbb,0xe4,0xa3,0xba,0xe3,0x94,0xb9,0xe2,0xeb,0xb8,0xe1,0xc6,0xb8,0xe0,
+       0x9f,0xb8,0xcf,0x86,0xe5,0x6c,0xb8,0x94,0x07,0x63,0x57,0xb8,0x07,0x00,0x07,0x00,
+       0xe4,0x5e,0xf1,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd2,0x0b,0xe1,0x6d,0xde,
+       0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0x5c,0xdf,0xcf,0x86,0xe5,0x21,0xdf,
+       0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0x5c,0xdf,0xcf,0x06,0x13,0x00,0xcf,
+       0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0xf7,0xf0,0xe3,0xe0,0xef,0xd2,0xa0,0xe1,
+       0x96,0xe3,0xd0,0x21,0xcf,0x86,0xe5,0x97,0xe0,0xe4,0x13,0xe0,0xe3,0xd1,0xdf,0xe2,
+       0xb0,0xdf,0xe1,0x9e,0xdf,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00,0x05,0xff,0xe4,
+       0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0xf3,0xe1,0xe3,0xb2,0xe1,0xe2,0x91,0xe1,
+       0xe1,0x80,0xe1,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff,0xe5,0x93,0xb6,
+       0x00,0xd4,0x34,0xd3,0x18,0xe2,0x7a,0xe2,0xe1,0x69,0xe2,0x10,0x09,0x05,0xff,0xf0,
+       0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00,0xe2,0x9a,0xe2,0x91,0x11,
+       0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff,0xe5,0xac,0x88,0x00,0x05,
+       0xff,0xe5,0xac,0xbe,0x00,0xe3,0xe0,0xe2,0xd2,0x14,0xe1,0xaf,0xe2,0x10,0x08,0x05,
+       0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0xe1,0xbb,0xe2,0x10,
+       0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00,0xd1,0xd5,0xd0,
+       0x6a,0xcf,0x86,0xe5,0x10,0xe8,0xd4,0x19,0xe3,0x49,0xe7,0xe2,0x27,0xe7,0xe1,0x16,
+       0xe7,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,0xe6,0xb5,0xb7,0x00,0xd3,
+       0x18,0xe2,0x93,0xe7,0xe1,0x82,0xe7,0x10,0x09,0x05,0xff,0xf0,0xa3,0xbd,0x9e,0x00,
+       0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0xab,0xe7,0x10,0x08,0x05,0xff,
+       0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,
+       0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00,0x10,0x08,0x05,0xff,0xe7,
+       0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86,0xe5,0xad,0xe9,0xd4,0x1a,
+       0xe3,0xe5,0xe8,0xe2,0xcb,0xe8,0xe1,0xb8,0xe8,0x10,0x08,0x05,0xff,0xe7,0x9b,0xb4,
+       0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2,0x2d,0xe9,0xe1,0x1b,0xe9,
+       0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3,0x00,0xd2,0x13,
+       0xe1,0x49,0xe9,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00,0x05,0xff,0xe7,0xa9,0x80,
+       0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc,0x00,0x05,0xff,0xf0,0xa5,
+       0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x05,0xff,0xe7,0xaa,
+       0xae,0x00,0xe0,0x5f,0xec,0xcf,0x86,0xd5,0x1d,0xe4,0xd4,0xea,0xe3,0x90,0xea,0xe2,
+       0x6e,0xea,0xe1,0x5d,0xea,0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f,0x00,0x05,0xff,
+       0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0x7b,0xeb,0xe2,0x57,0xeb,0xe1,0x46,0xeb,0x10,
+       0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,0x8a,0x00,0xd3,0x18,0xe2,
+       0xc6,0xeb,0xe1,0xb5,0xeb,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1,0x00,0x05,0xff,
+       0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0xde,0xeb,0x10,0x08,0x05,0xff,0xe8,0x9a,
+       0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x9c,
+       0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8,0x9e,0x86,0x00,
+       0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       /* nfdicf_30200 */
+       0xd7,0x07,0x66,0x84,0x05,0x01,0x00,0xc6,0xd5,0x16,0xe4,0x99,0x13,0xe3,0x63,0x0e,
+       0xe2,0x4c,0x07,0xc1,0xe0,0x4e,0x06,0xcf,0x86,0x65,0x2d,0x06,0x01,0x00,0xd4,0x2a,
+       0xe3,0xd0,0x35,0xe2,0x88,0x9c,0xe1,0xcd,0x2e,0xe0,0x2b,0x1b,0xcf,0x86,0xc5,0xe4,
+       0x14,0x66,0xe3,0x5f,0x61,0xe2,0xf5,0x5e,0xe1,0x28,0x5e,0xe0,0xed,0x5d,0xcf,0x86,
+       0xe5,0xb2,0x5d,0x64,0x95,0x5d,0x0b,0x00,0x83,0xe2,0xa7,0xf3,0xe1,0x80,0xf0,0xe0,
+       0xfd,0xee,0xcf,0x86,0xd5,0x31,0xc4,0xe3,0xe2,0x47,0xe2,0x83,0x46,0xe1,0x32,0xc6,
+       0xe0,0x2a,0x45,0xcf,0x86,0xe5,0x1c,0x43,0xe4,0x3d,0x40,0xe3,0x9f,0xb6,0xe2,0xf6,
+       0xb5,0xe1,0xd1,0xb5,0xe0,0xaa,0xb5,0xcf,0x86,0xe5,0x77,0xb5,0x94,0x07,0x63,0x62,
+       0xb5,0x07,0x00,0x07,0x00,0xe4,0x69,0xee,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,
+       0xd2,0x0b,0xe1,0x78,0xdb,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0x67,0xdc,
+       0xcf,0x86,0xe5,0x2c,0xdc,0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0x67,0xdc,
+       0xcf,0x06,0x13,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x02,0xee,0xe3,
+       0xeb,0xec,0xd2,0xa0,0xe1,0xa1,0xe0,0xd0,0x21,0xcf,0x86,0xe5,0xa2,0xdd,0xe4,0x1e,
+       0xdd,0xe3,0xdc,0xdc,0xe2,0xbb,0xdc,0xe1,0xa9,0xdc,0x10,0x08,0x05,0xff,0xe4,0xb8,
+       0xbd,0x00,0x05,0xff,0xe4,0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0xfe,0xde,0xe3,
+       0xbd,0xde,0xe2,0x9c,0xde,0xe1,0x8b,0xde,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,
+       0x05,0xff,0xe5,0x93,0xb6,0x00,0xd4,0x34,0xd3,0x18,0xe2,0x85,0xdf,0xe1,0x74,0xdf,
+       0x10,0x09,0x05,0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00,
+       0xe2,0xa5,0xdf,0x91,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff,
+       0xe5,0xac,0x88,0x00,0x05,0xff,0xe5,0xac,0xbe,0x00,0xe3,0xeb,0xdf,0xd2,0x14,0xe1,
+       0xba,0xdf,0x10,0x08,0x05,0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,
+       0x00,0xe1,0xc6,0xdf,0x10,0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0,
+       0xa2,0x00,0xd1,0xd5,0xd0,0x6a,0xcf,0x86,0xe5,0x1b,0xe5,0xd4,0x19,0xe3,0x54,0xe4,
+       0xe2,0x32,0xe4,0xe1,0x21,0xe4,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,
+       0xe6,0xb5,0xb7,0x00,0xd3,0x18,0xe2,0x9e,0xe4,0xe1,0x8d,0xe4,0x10,0x09,0x05,0xff,
+       0xf0,0xa3,0xbd,0x9e,0x00,0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0xb6,
+       0xe4,0x10,0x08,0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1,
+       0x11,0x10,0x08,0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00,
+       0x10,0x08,0x05,0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86,
+       0xe5,0xb8,0xe6,0xd4,0x1a,0xe3,0xf0,0xe5,0xe2,0xd6,0xe5,0xe1,0xc3,0xe5,0x10,0x08,
+       0x05,0xff,0xe7,0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2,
+       0x38,0xe6,0xe1,0x26,0xe6,0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4,
+       0x83,0xa3,0x00,0xd2,0x13,0xe1,0x54,0xe6,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00,
+       0x05,0xff,0xe7,0xa9,0x80,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc,
+       0x00,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7,
+       0x00,0x05,0xff,0xe7,0xaa,0xae,0x00,0xe0,0x6a,0xe9,0xcf,0x86,0xd5,0x1d,0xe4,0xdf,
+       0xe7,0xe3,0x9b,0xe7,0xe2,0x79,0xe7,0xe1,0x68,0xe7,0x10,0x09,0x05,0xff,0xf0,0xa3,
+       0x8d,0x9f,0x00,0x05,0xff,0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0x86,0xe8,0xe2,0x62,
+       0xe8,0xe1,0x51,0xe8,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,
+       0x8a,0x00,0xd3,0x18,0xe2,0xd1,0xe8,0xe1,0xc0,0xe8,0x10,0x09,0x05,0xff,0xf0,0xa6,
+       0xbe,0xb1,0x00,0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0xe9,0xe8,0x10,
+       0x08,0x05,0xff,0xe8,0x9a,0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10,
+       0x08,0x05,0xff,0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05,
+       0xff,0xe8,0x9e,0x86,0x00,0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00,
+       /* nfdi_30200 */
+       0x57,0x04,0x01,0x00,0xc6,0xd5,0x16,0xe4,0x82,0x53,0xe3,0xbb,0x4e,0xe2,0x34,0x49,
+       0xc1,0xe0,0x60,0x47,0xcf,0x86,0x65,0x44,0x47,0x01,0x00,0xd4,0x2a,0xe3,0x1c,0x9a,
+       0xe2,0xcb,0x99,0xe1,0x9e,0x87,0xe0,0xf8,0x6a,0xcf,0x86,0xc5,0xe4,0x57,0x63,0xe3,
+       0xa2,0x5e,0xe2,0x38,0x5c,0xe1,0x6b,0x5b,0xe0,0x30,0x5b,0xcf,0x86,0xe5,0xf5,0x5a,
+       0x64,0xd8,0x5a,0x0b,0x00,0x83,0xe2,0xea,0xf0,0xe1,0xc3,0xed,0xe0,0x40,0xec,0xcf,
+       0x86,0xd5,0x31,0xc4,0xe3,0xbb,0xc6,0xe2,0x94,0xc4,0xe1,0x75,0xc3,0xe0,0x05,0xba,
+       0xcf,0x86,0xe5,0xf8,0xb5,0xe4,0xf1,0xb4,0xe3,0xe2,0xb3,0xe2,0x39,0xb3,0xe1,0x14,
+       0xb3,0xe0,0xed,0xb2,0xcf,0x86,0xe5,0xba,0xb2,0x94,0x07,0x63,0xa5,0xb2,0x07,0x00,
+       0x07,0x00,0xe4,0xac,0xeb,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd2,0x0b,0xe1,
+       0xbb,0xd8,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0xaa,0xd9,0xcf,0x86,0xe5,
+       0x6f,0xd9,0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0xaa,0xd9,0xcf,0x06,0x13,
+       0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x45,0xeb,0xe3,0x2e,0xea,0xd2,
+       0xa0,0xe1,0xe4,0xdd,0xd0,0x21,0xcf,0x86,0xe5,0xe5,0xda,0xe4,0x61,0xda,0xe3,0x1f,
+       0xda,0xe2,0xfe,0xd9,0xe1,0xec,0xd9,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00,0x05,
+       0xff,0xe4,0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0x41,0xdc,0xe3,0x00,0xdc,0xe2,
+       0xdf,0xdb,0xe1,0xce,0xdb,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff,0xe5,
+       0x93,0xb6,0x00,0xd4,0x34,0xd3,0x18,0xe2,0xc8,0xdc,0xe1,0xb7,0xdc,0x10,0x09,0x05,
+       0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00,0xe2,0xe8,0xdc,
+       0x91,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff,0xe5,0xac,0x88,
+       0x00,0x05,0xff,0xe5,0xac,0xbe,0x00,0xe3,0x2e,0xdd,0xd2,0x14,0xe1,0xfd,0xdc,0x10,
+       0x08,0x05,0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0xe1,0x09,
+       0xdd,0x10,0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00,0xd1,
+       0xd5,0xd0,0x6a,0xcf,0x86,0xe5,0x5e,0xe2,0xd4,0x19,0xe3,0x97,0xe1,0xe2,0x75,0xe1,
+       0xe1,0x64,0xe1,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,0xe6,0xb5,0xb7,
+       0x00,0xd3,0x18,0xe2,0xe1,0xe1,0xe1,0xd0,0xe1,0x10,0x09,0x05,0xff,0xf0,0xa3,0xbd,
+       0x9e,0x00,0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0xf9,0xe1,0x10,0x08,
+       0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1,0x11,0x10,0x08,
+       0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00,0x10,0x08,0x05,
+       0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86,0xe5,0xfb,0xe3,
+       0xd4,0x1a,0xe3,0x33,0xe3,0xe2,0x19,0xe3,0xe1,0x06,0xe3,0x10,0x08,0x05,0xff,0xe7,
+       0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2,0x7b,0xe3,0xe1,
+       0x69,0xe3,0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3,0x00,
+       0xd2,0x13,0xe1,0x97,0xe3,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00,0x05,0xff,0xe7,
+       0xa9,0x80,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc,0x00,0x05,0xff,
+       0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x05,0xff,
+       0xe7,0xaa,0xae,0x00,0xe0,0xad,0xe6,0xcf,0x86,0xd5,0x1d,0xe4,0x22,0xe5,0xe3,0xde,
+       0xe4,0xe2,0xbc,0xe4,0xe1,0xab,0xe4,0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f,0x00,
+       0x05,0xff,0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0xc9,0xe5,0xe2,0xa5,0xe5,0xe1,0x94,
+       0xe5,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,0x8a,0x00,0xd3,
+       0x18,0xe2,0x14,0xe6,0xe1,0x03,0xe6,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1,0x00,
+       0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0x2c,0xe6,0x10,0x08,0x05,0xff,
+       0xe8,0x9a,0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,
+       0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8,0x9e,
+       0x86,0x00,0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       /* nfdicf_c0100 */
+       0xd7,0xb0,0x56,0x04,0x01,0x00,0x95,0xa8,0xd4,0x5e,0xd3,0x2e,0xd2,0x16,0xd1,0x0a,
+       0x10,0x04,0x01,0x00,0x01,0xff,0x61,0x00,0x10,0x06,0x01,0xff,0x62,0x00,0x01,0xff,
+       0x63,0x00,0xd1,0x0c,0x10,0x06,0x01,0xff,0x64,0x00,0x01,0xff,0x65,0x00,0x10,0x06,
+       0x01,0xff,0x66,0x00,0x01,0xff,0x67,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x06,0x01,0xff,
+       0x68,0x00,0x01,0xff,0x69,0x00,0x10,0x06,0x01,0xff,0x6a,0x00,0x01,0xff,0x6b,0x00,
+       0xd1,0x0c,0x10,0x06,0x01,0xff,0x6c,0x00,0x01,0xff,0x6d,0x00,0x10,0x06,0x01,0xff,
+       0x6e,0x00,0x01,0xff,0x6f,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x06,0x01,0xff,
+       0x70,0x00,0x01,0xff,0x71,0x00,0x10,0x06,0x01,0xff,0x72,0x00,0x01,0xff,0x73,0x00,
+       0xd1,0x0c,0x10,0x06,0x01,0xff,0x74,0x00,0x01,0xff,0x75,0x00,0x10,0x06,0x01,0xff,
+       0x76,0x00,0x01,0xff,0x77,0x00,0x92,0x16,0xd1,0x0c,0x10,0x06,0x01,0xff,0x78,0x00,
+       0x01,0xff,0x79,0x00,0x10,0x06,0x01,0xff,0x7a,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+       0xc6,0xe5,0xf9,0x14,0xe4,0x6f,0x0d,0xe3,0x39,0x08,0xe2,0x22,0x01,0xc1,0xd0,0x24,
+       0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x07,0x63,0xd8,0x43,0x01,0x00,0x93,0x13,0x52,
+       0x04,0x01,0x00,0x91,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xce,0xbc,0x00,0x01,0x00,
+       0x01,0x00,0xcf,0x86,0xe5,0xb3,0x44,0xd4,0x7f,0xd3,0x3f,0xd2,0x20,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x61,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x81,0x00,0x10,0x08,0x01,
+       0xff,0x61,0xcc,0x82,0x00,0x01,0xff,0x61,0xcc,0x83,0x00,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0x61,0xcc,0x88,0x00,0x01,0xff,0x61,0xcc,0x8a,0x00,0x10,0x07,0x01,0xff,0xc3,
+       0xa6,0x00,0x01,0xff,0x63,0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0x65,0xcc,0x80,0x00,0x01,0xff,0x65,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,
+       0x82,0x00,0x01,0xff,0x65,0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,
+       0x80,0x00,0x01,0xff,0x69,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0x82,0x00,
+       0x01,0xff,0x69,0xcc,0x88,0x00,0xd3,0x3b,0xd2,0x1f,0xd1,0x0f,0x10,0x07,0x01,0xff,
+       0xc3,0xb0,0x00,0x01,0xff,0x6e,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x80,
+       0x00,0x01,0xff,0x6f,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x82,
+       0x00,0x01,0xff,0x6f,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x88,0x00,0x01,
+       0x00,0xd2,0x1f,0xd1,0x0f,0x10,0x07,0x01,0xff,0xc3,0xb8,0x00,0x01,0xff,0x75,0xcc,
+       0x80,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x82,0x00,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x88,0x00,0x01,0xff,0x79,0xcc,0x81,0x00,
+       0x10,0x07,0x01,0xff,0xc3,0xbe,0x00,0x01,0xff,0x73,0x73,0x00,0xe1,0xd4,0x03,0xe0,
+       0xeb,0x01,0xcf,0x86,0xd5,0xfb,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0x61,0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,
+       0x61,0xcc,0x86,0x00,0x01,0xff,0x61,0xcc,0x86,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0x61,0xcc,0xa8,0x00,0x01,0xff,0x61,0xcc,0xa8,0x00,0x10,0x08,0x01,0xff,0x63,0xcc,
+       0x81,0x00,0x01,0xff,0x63,0xcc,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0x63,0xcc,0x82,0x00,0x01,0xff,0x63,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x63,0xcc,
+       0x87,0x00,0x01,0xff,0x63,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x63,0xcc,
+       0x8c,0x00,0x01,0xff,0x63,0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0x8c,0x00,
+       0x01,0xff,0x64,0xcc,0x8c,0x00,0xd3,0x3b,0xd2,0x1b,0xd1,0x0b,0x10,0x07,0x01,0xff,
+       0xc4,0x91,0x00,0x01,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x84,0x00,0x01,0xff,0x65,
+       0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0x86,0x00,0x01,0xff,0x65,
+       0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x87,0x00,0x01,0xff,0x65,0xcc,0x87,
+       0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0xa8,0x00,0x01,0xff,0x65,
+       0xcc,0xa8,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x8c,0x00,0x01,0xff,0x65,0xcc,0x8c,
+       0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x67,0xcc,0x82,0x00,0x01,0xff,0x67,0xcc,0x82,
+       0x00,0x10,0x08,0x01,0xff,0x67,0xcc,0x86,0x00,0x01,0xff,0x67,0xcc,0x86,0x00,0xd4,
+       0x7b,0xd3,0x3b,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x67,0xcc,0x87,0x00,0x01,
+       0xff,0x67,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x67,0xcc,0xa7,0x00,0x01,0xff,0x67,
+       0xcc,0xa7,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x68,0xcc,0x82,0x00,0x01,0xff,0x68,
+       0xcc,0x82,0x00,0x10,0x07,0x01,0xff,0xc4,0xa7,0x00,0x01,0x00,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0x69,0xcc,0x83,0x00,0x01,0xff,0x69,0xcc,0x83,0x00,0x10,0x08,
+       0x01,0xff,0x69,0xcc,0x84,0x00,0x01,0xff,0x69,0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0x69,0xcc,0x86,0x00,0x01,0xff,0x69,0xcc,0x86,0x00,0x10,0x08,0x01,0xff,
+       0x69,0xcc,0xa8,0x00,0x01,0xff,0x69,0xcc,0xa8,0x00,0xd3,0x37,0xd2,0x17,0xd1,0x0c,
+       0x10,0x08,0x01,0xff,0x69,0xcc,0x87,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xc4,0xb3,
+       0x00,0x01,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6a,0xcc,0x82,0x00,0x01,0xff,0x6a,
+       0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x6b,0xcc,0xa7,0x00,0x01,0xff,0x6b,0xcc,0xa7,
+       0x00,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x6c,0xcc,0x81,0x00,0x10,
+       0x08,0x01,0xff,0x6c,0xcc,0x81,0x00,0x01,0xff,0x6c,0xcc,0xa7,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x6c,0xcc,0xa7,0x00,0x01,0xff,0x6c,0xcc,0x8c,0x00,0x10,0x08,0x01,
+       0xff,0x6c,0xcc,0x8c,0x00,0x01,0xff,0xc5,0x80,0x00,0xcf,0x86,0xd5,0xed,0xd4,0x72,
+       0xd3,0x37,0xd2,0x17,0xd1,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xc5,0x82,0x00,0x10,
+       0x04,0x01,0x00,0x01,0xff,0x6e,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e,
+       0xcc,0x81,0x00,0x01,0xff,0x6e,0xcc,0xa7,0x00,0x10,0x08,0x01,0xff,0x6e,0xcc,0xa7,
+       0x00,0x01,0xff,0x6e,0xcc,0x8c,0x00,0xd2,0x1b,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e,
+       0xcc,0x8c,0x00,0x01,0xff,0xca,0xbc,0x6e,0x00,0x10,0x07,0x01,0xff,0xc5,0x8b,0x00,
+       0x01,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc,
+       0x84,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x86,0x00,0x01,0xff,0x6f,0xcc,0x86,0x00,
+       0xd3,0x3b,0xd2,0x1b,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8b,0x00,0x01,0xff,
+       0x6f,0xcc,0x8b,0x00,0x10,0x07,0x01,0xff,0xc5,0x93,0x00,0x01,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x72,0xcc,0x81,0x00,0x01,0xff,0x72,0xcc,0x81,0x00,0x10,0x08,0x01,
+       0xff,0x72,0xcc,0xa7,0x00,0x01,0xff,0x72,0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x72,0xcc,0x8c,0x00,0x01,0xff,0x72,0xcc,0x8c,0x00,0x10,0x08,0x01,
+       0xff,0x73,0xcc,0x81,0x00,0x01,0xff,0x73,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0x73,0xcc,0x82,0x00,0x01,0xff,0x73,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x73,
+       0xcc,0xa7,0x00,0x01,0xff,0x73,0xcc,0xa7,0x00,0xd4,0x7b,0xd3,0x3b,0xd2,0x20,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0x73,0xcc,0x8c,0x00,0x01,0xff,0x73,0xcc,0x8c,0x00,0x10,
+       0x08,0x01,0xff,0x74,0xcc,0xa7,0x00,0x01,0xff,0x74,0xcc,0xa7,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x74,0xcc,0x8c,0x00,0x01,0xff,0x74,0xcc,0x8c,0x00,0x10,0x07,0x01,
+       0xff,0xc5,0xa7,0x00,0x01,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,
+       0x83,0x00,0x01,0xff,0x75,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x84,0x00,
+       0x01,0xff,0x75,0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x86,0x00,
+       0x01,0xff,0x75,0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x8a,0x00,0x01,0xff,
+       0x75,0xcc,0x8a,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,
+       0x8b,0x00,0x01,0xff,0x75,0xcc,0x8b,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0xa8,0x00,
+       0x01,0xff,0x75,0xcc,0xa8,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x82,0x00,
+       0x01,0xff,0x77,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x79,0xcc,0x82,0x00,0x01,0xff,
+       0x79,0xcc,0x82,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x79,0xcc,0x88,0x00,
+       0x01,0xff,0x7a,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x81,0x00,0x01,0xff,
+       0x7a,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x7a,0xcc,0x87,0x00,0x01,0xff,
+       0x7a,0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x8c,0x00,0x01,0xff,0x73,0x00,
+       0xe0,0x65,0x01,0xcf,0x86,0xd5,0xb4,0xd4,0x5a,0xd3,0x2f,0xd2,0x16,0xd1,0x0b,0x10,
+       0x04,0x01,0x00,0x01,0xff,0xc9,0x93,0x00,0x10,0x07,0x01,0xff,0xc6,0x83,0x00,0x01,
+       0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xc6,0x85,0x00,0x01,0x00,0x10,0x07,0x01,0xff,
+       0xc9,0x94,0x00,0x01,0xff,0xc6,0x88,0x00,0xd2,0x19,0xd1,0x0b,0x10,0x04,0x01,0x00,
+       0x01,0xff,0xc9,0x96,0x00,0x10,0x07,0x01,0xff,0xc9,0x97,0x00,0x01,0xff,0xc6,0x8c,
+       0x00,0x51,0x04,0x01,0x00,0x10,0x07,0x01,0xff,0xc7,0x9d,0x00,0x01,0xff,0xc9,0x99,
+       0x00,0xd3,0x32,0xd2,0x19,0xd1,0x0e,0x10,0x07,0x01,0xff,0xc9,0x9b,0x00,0x01,0xff,
+       0xc6,0x92,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xc9,0xa0,0x00,0xd1,0x0b,0x10,0x07,
+       0x01,0xff,0xc9,0xa3,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xc9,0xa9,0x00,0x01,0xff,
+       0xc9,0xa8,0x00,0xd2,0x0f,0x91,0x0b,0x10,0x07,0x01,0xff,0xc6,0x99,0x00,0x01,0x00,
+       0x01,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xc9,0xaf,0x00,0x01,0xff,0xc9,0xb2,0x00,
+       0x10,0x04,0x01,0x00,0x01,0xff,0xc9,0xb5,0x00,0xd4,0x5d,0xd3,0x34,0xd2,0x1b,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x9b,0x00,0x01,0xff,0x6f,0xcc,0x9b,0x00,0x10,
+       0x07,0x01,0xff,0xc6,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xc6,0xa5,
+       0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xca,0x80,0x00,0x01,0xff,0xc6,0xa8,0x00,0xd2,
+       0x0f,0x91,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xca,0x83,0x00,0x01,0x00,0xd1,0x0b,
+       0x10,0x07,0x01,0xff,0xc6,0xad,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xca,0x88,0x00,
+       0x01,0xff,0x75,0xcc,0x9b,0x00,0xd3,0x33,0xd2,0x1d,0xd1,0x0f,0x10,0x08,0x01,0xff,
+       0x75,0xcc,0x9b,0x00,0x01,0xff,0xca,0x8a,0x00,0x10,0x07,0x01,0xff,0xca,0x8b,0x00,
+       0x01,0xff,0xc6,0xb4,0x00,0xd1,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xc6,0xb6,0x00,
+       0x10,0x04,0x01,0x00,0x01,0xff,0xca,0x92,0x00,0xd2,0x0f,0x91,0x0b,0x10,0x07,0x01,
+       0xff,0xc6,0xb9,0x00,0x01,0x00,0x01,0x00,0x91,0x0b,0x10,0x07,0x01,0xff,0xc6,0xbd,
+       0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0xd4,0xd4,0x44,0xd3,0x16,0x52,0x04,0x01,
+       0x00,0x51,0x07,0x01,0xff,0xc7,0x86,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xc7,0x89,
+       0x00,0xd2,0x12,0x91,0x0b,0x10,0x07,0x01,0xff,0xc7,0x89,0x00,0x01,0x00,0x01,0xff,
+       0xc7,0x8c,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x61,0xcc,0x8c,0x00,0x10,
+       0x08,0x01,0xff,0x61,0xcc,0x8c,0x00,0x01,0xff,0x69,0xcc,0x8c,0x00,0xd3,0x46,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x8c,0x00,0x01,0xff,0x6f,0xcc,0x8c,
+       0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8c,0x00,0x01,0xff,0x75,0xcc,0x8c,0x00,0xd1,
+       0x12,0x10,0x08,0x01,0xff,0x75,0xcc,0x8c,0x00,0x01,0xff,0x75,0xcc,0x88,0xcc,0x84,
+       0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x84,0x00,0x01,0xff,0x75,0xcc,0x88,
+       0xcc,0x81,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x81,
+       0x00,0x01,0xff,0x75,0xcc,0x88,0xcc,0x8c,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,
+       0xcc,0x8c,0x00,0x01,0xff,0x75,0xcc,0x88,0xcc,0x80,0x00,0xd1,0x0e,0x10,0x0a,0x01,
+       0xff,0x75,0xcc,0x88,0xcc,0x80,0x00,0x01,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0x88,
+       0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x88,0xcc,0x84,0x00,0xd4,0x87,0xd3,0x41,0xd2,
+       0x26,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0x87,0xcc,0x84,0x00,0x01,0xff,0x61,
+       0xcc,0x87,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xc3,0xa6,0xcc,0x84,0x00,0x01,0xff,
+       0xc3,0xa6,0xcc,0x84,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xc7,0xa5,0x00,0x01,0x00,
+       0x10,0x08,0x01,0xff,0x67,0xcc,0x8c,0x00,0x01,0xff,0x67,0xcc,0x8c,0x00,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0x6b,0xcc,0x8c,0x00,0x01,0xff,0x6b,0xcc,0x8c,0x00,
+       0x10,0x08,0x01,0xff,0x6f,0xcc,0xa8,0x00,0x01,0xff,0x6f,0xcc,0xa8,0x00,0xd1,0x14,
+       0x10,0x0a,0x01,0xff,0x6f,0xcc,0xa8,0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc,0xa8,0xcc,
+       0x84,0x00,0x10,0x09,0x01,0xff,0xca,0x92,0xcc,0x8c,0x00,0x01,0xff,0xca,0x92,0xcc,
+       0x8c,0x00,0xd3,0x38,0xd2,0x1a,0xd1,0x0f,0x10,0x08,0x01,0xff,0x6a,0xcc,0x8c,0x00,
+       0x01,0xff,0xc7,0xb3,0x00,0x10,0x07,0x01,0xff,0xc7,0xb3,0x00,0x01,0x00,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0x67,0xcc,0x81,0x00,0x01,0xff,0x67,0xcc,0x81,0x00,0x10,0x07,
+       0x04,0xff,0xc6,0x95,0x00,0x04,0xff,0xc6,0xbf,0x00,0xd2,0x24,0xd1,0x10,0x10,0x08,
+       0x04,0xff,0x6e,0xcc,0x80,0x00,0x04,0xff,0x6e,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,
+       0x61,0xcc,0x8a,0xcc,0x81,0x00,0x01,0xff,0x61,0xcc,0x8a,0xcc,0x81,0x00,0xd1,0x12,
+       0x10,0x09,0x01,0xff,0xc3,0xa6,0xcc,0x81,0x00,0x01,0xff,0xc3,0xa6,0xcc,0x81,0x00,
+       0x10,0x09,0x01,0xff,0xc3,0xb8,0xcc,0x81,0x00,0x01,0xff,0xc3,0xb8,0xcc,0x81,0x00,
+       0xe2,0x31,0x02,0xe1,0xc3,0x44,0xe0,0xc8,0x01,0xcf,0x86,0xd5,0xfb,0xd4,0x80,0xd3,
+       0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x61,0xcc,0x8f,0x00,0x01,0xff,0x61,
+       0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x61,0xcc,0x91,0x00,0x01,0xff,0x61,0xcc,0x91,
+       0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0x8f,0x00,0x01,0xff,0x65,0xcc,0x8f,
+       0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x91,0x00,0x01,0xff,0x65,0xcc,0x91,0x00,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x8f,0x00,0x01,0xff,0x69,0xcc,0x8f,
+       0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0x91,0x00,0x01,0xff,0x69,0xcc,0x91,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8f,0x00,0x01,0xff,0x6f,0xcc,0x8f,0x00,0x10,
+       0x08,0x01,0xff,0x6f,0xcc,0x91,0x00,0x01,0xff,0x6f,0xcc,0x91,0x00,0xd3,0x40,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x72,0xcc,0x8f,0x00,0x01,0xff,0x72,0xcc,0x8f,
+       0x00,0x10,0x08,0x01,0xff,0x72,0xcc,0x91,0x00,0x01,0xff,0x72,0xcc,0x91,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x8f,0x00,0x01,0xff,0x75,0xcc,0x8f,0x00,0x10,
+       0x08,0x01,0xff,0x75,0xcc,0x91,0x00,0x01,0xff,0x75,0xcc,0x91,0x00,0xd2,0x20,0xd1,
+       0x10,0x10,0x08,0x04,0xff,0x73,0xcc,0xa6,0x00,0x04,0xff,0x73,0xcc,0xa6,0x00,0x10,
+       0x08,0x04,0xff,0x74,0xcc,0xa6,0x00,0x04,0xff,0x74,0xcc,0xa6,0x00,0xd1,0x0b,0x10,
+       0x07,0x04,0xff,0xc8,0x9d,0x00,0x04,0x00,0x10,0x08,0x04,0xff,0x68,0xcc,0x8c,0x00,
+       0x04,0xff,0x68,0xcc,0x8c,0x00,0xd4,0x79,0xd3,0x31,0xd2,0x16,0xd1,0x0b,0x10,0x07,
+       0x06,0xff,0xc6,0x9e,0x00,0x07,0x00,0x10,0x07,0x04,0xff,0xc8,0xa3,0x00,0x04,0x00,
+       0xd1,0x0b,0x10,0x07,0x04,0xff,0xc8,0xa5,0x00,0x04,0x00,0x10,0x08,0x04,0xff,0x61,
+       0xcc,0x87,0x00,0x04,0xff,0x61,0xcc,0x87,0x00,0xd2,0x24,0xd1,0x10,0x10,0x08,0x04,
+       0xff,0x65,0xcc,0xa7,0x00,0x04,0xff,0x65,0xcc,0xa7,0x00,0x10,0x0a,0x04,0xff,0x6f,
+       0xcc,0x88,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc,0x88,0xcc,0x84,0x00,0xd1,0x14,0x10,
+       0x0a,0x04,0xff,0x6f,0xcc,0x83,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc,0x83,0xcc,0x84,
+       0x00,0x10,0x08,0x04,0xff,0x6f,0xcc,0x87,0x00,0x04,0xff,0x6f,0xcc,0x87,0x00,0xd3,
+       0x27,0xe2,0x21,0x43,0xd1,0x14,0x10,0x0a,0x04,0xff,0x6f,0xcc,0x87,0xcc,0x84,0x00,
+       0x04,0xff,0x6f,0xcc,0x87,0xcc,0x84,0x00,0x10,0x08,0x04,0xff,0x79,0xcc,0x84,0x00,
+       0x04,0xff,0x79,0xcc,0x84,0x00,0xd2,0x13,0x51,0x04,0x08,0x00,0x10,0x08,0x08,0xff,
+       0xe2,0xb1,0xa5,0x00,0x08,0xff,0xc8,0xbc,0x00,0xd1,0x0b,0x10,0x04,0x08,0x00,0x08,
+       0xff,0xc6,0x9a,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,0xa6,0x00,0x08,0x00,0xcf,0x86,
+       0x95,0x5f,0x94,0x5b,0xd3,0x2f,0xd2,0x16,0xd1,0x0b,0x10,0x04,0x08,0x00,0x08,0xff,
+       0xc9,0x82,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xc6,0x80,0x00,0xd1,0x0e,0x10,0x07,
+       0x09,0xff,0xca,0x89,0x00,0x09,0xff,0xca,0x8c,0x00,0x10,0x07,0x09,0xff,0xc9,0x87,
+       0x00,0x09,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x09,0xff,0xc9,0x89,0x00,0x09,0x00,
+       0x10,0x07,0x09,0xff,0xc9,0x8b,0x00,0x09,0x00,0xd1,0x0b,0x10,0x07,0x09,0xff,0xc9,
+       0x8d,0x00,0x09,0x00,0x10,0x07,0x09,0xff,0xc9,0x8f,0x00,0x09,0x00,0x01,0x00,0x01,
+       0x00,0xd1,0x8b,0xd0,0x0c,0xcf,0x86,0xe5,0x10,0x43,0x64,0xef,0x42,0x01,0xe6,0xcf,
+       0x86,0xd5,0x2a,0xe4,0x99,0x43,0xe3,0x7f,0x43,0xd2,0x11,0xe1,0x5e,0x43,0x10,0x07,
+       0x01,0xff,0xcc,0x80,0x00,0x01,0xff,0xcc,0x81,0x00,0xe1,0x65,0x43,0x10,0x09,0x01,
+       0xff,0xcc,0x88,0xcc,0x81,0x00,0x01,0xff,0xce,0xb9,0x00,0xd4,0x0f,0x93,0x0b,0x92,
+       0x07,0x61,0xab,0x43,0x01,0xea,0x06,0xe6,0x06,0xe6,0xd3,0x2c,0xd2,0x16,0xd1,0x0b,
+       0x10,0x07,0x0a,0xff,0xcd,0xb1,0x00,0x0a,0x00,0x10,0x07,0x0a,0xff,0xcd,0xb3,0x00,
+       0x0a,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xca,0xb9,0x00,0x01,0x00,0x10,0x07,0x0a,
+       0xff,0xcd,0xb7,0x00,0x0a,0x00,0xd2,0x07,0x61,0x97,0x43,0x00,0x00,0x51,0x04,0x09,
+       0x00,0x10,0x06,0x01,0xff,0x3b,0x00,0x10,0xff,0xcf,0xb3,0x00,0xe0,0x31,0x01,0xcf,
+       0x86,0xd5,0xd3,0xd4,0x5f,0xd3,0x21,0x52,0x04,0x00,0x00,0xd1,0x0d,0x10,0x04,0x01,
+       0x00,0x01,0xff,0xc2,0xa8,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x81,
+       0x00,0x01,0xff,0xc2,0xb7,0x00,0xd2,0x1f,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb5,
+       0xcc,0x81,0x00,0x01,0xff,0xce,0xb7,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,
+       0xcc,0x81,0x00,0x00,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00,
+       0x00,0x00,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00,0x01,0xff,0xcf,0x89,0xcc,
+       0x81,0x00,0xd3,0x3c,0xd2,0x20,0xd1,0x12,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x88,
+       0xcc,0x81,0x00,0x01,0xff,0xce,0xb1,0x00,0x10,0x07,0x01,0xff,0xce,0xb2,0x00,0x01,
+       0xff,0xce,0xb3,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xce,0xb4,0x00,0x01,0xff,0xce,
+       0xb5,0x00,0x10,0x07,0x01,0xff,0xce,0xb6,0x00,0x01,0xff,0xce,0xb7,0x00,0xd2,0x1c,
+       0xd1,0x0e,0x10,0x07,0x01,0xff,0xce,0xb8,0x00,0x01,0xff,0xce,0xb9,0x00,0x10,0x07,
+       0x01,0xff,0xce,0xba,0x00,0x01,0xff,0xce,0xbb,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,
+       0xce,0xbc,0x00,0x01,0xff,0xce,0xbd,0x00,0x10,0x07,0x01,0xff,0xce,0xbe,0x00,0x01,
+       0xff,0xce,0xbf,0x00,0xe4,0x85,0x43,0xd3,0x35,0xd2,0x19,0xd1,0x0e,0x10,0x07,0x01,
+       0xff,0xcf,0x80,0x00,0x01,0xff,0xcf,0x81,0x00,0x10,0x04,0x00,0x00,0x01,0xff,0xcf,
+       0x83,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xcf,0x84,0x00,0x01,0xff,0xcf,0x85,0x00,
+       0x10,0x07,0x01,0xff,0xcf,0x86,0x00,0x01,0xff,0xcf,0x87,0x00,0xe2,0x2b,0x43,0xd1,
+       0x0e,0x10,0x07,0x01,0xff,0xcf,0x88,0x00,0x01,0xff,0xcf,0x89,0x00,0x10,0x09,0x01,
+       0xff,0xce,0xb9,0xcc,0x88,0x00,0x01,0xff,0xcf,0x85,0xcc,0x88,0x00,0xcf,0x86,0xd5,
+       0x94,0xd4,0x3c,0xd3,0x13,0x92,0x0f,0x51,0x04,0x01,0x00,0x10,0x07,0x01,0xff,0xcf,
+       0x83,0x00,0x01,0x00,0x01,0x00,0xd2,0x07,0x61,0x3a,0x43,0x01,0x00,0xd1,0x12,0x10,
+       0x09,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00,0x10,
+       0x09,0x01,0xff,0xcf,0x89,0xcc,0x81,0x00,0x0a,0xff,0xcf,0x97,0x00,0xd3,0x2c,0xd2,
+       0x11,0xe1,0x46,0x43,0x10,0x07,0x01,0xff,0xce,0xb2,0x00,0x01,0xff,0xce,0xb8,0x00,
+       0xd1,0x10,0x10,0x09,0x01,0xff,0xcf,0x92,0xcc,0x88,0x00,0x01,0xff,0xcf,0x86,0x00,
+       0x10,0x07,0x01,0xff,0xcf,0x80,0x00,0x04,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x06,
+       0xff,0xcf,0x99,0x00,0x06,0x00,0x10,0x07,0x01,0xff,0xcf,0x9b,0x00,0x04,0x00,0xd1,
+       0x0b,0x10,0x07,0x01,0xff,0xcf,0x9d,0x00,0x04,0x00,0x10,0x07,0x01,0xff,0xcf,0x9f,
+       0x00,0x04,0x00,0xd4,0x58,0xd3,0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xcf,
+       0xa1,0x00,0x04,0x00,0x10,0x07,0x01,0xff,0xcf,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10,
+       0x07,0x01,0xff,0xcf,0xa5,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xcf,0xa7,0x00,0x01,
+       0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xcf,0xa9,0x00,0x01,0x00,0x10,0x07,
+       0x01,0xff,0xcf,0xab,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xcf,0xad,0x00,
+       0x01,0x00,0x10,0x07,0x01,0xff,0xcf,0xaf,0x00,0x01,0x00,0xd3,0x2b,0xd2,0x12,0x91,
+       0x0e,0x10,0x07,0x01,0xff,0xce,0xba,0x00,0x01,0xff,0xcf,0x81,0x00,0x01,0x00,0xd1,
+       0x0e,0x10,0x07,0x05,0xff,0xce,0xb8,0x00,0x05,0xff,0xce,0xb5,0x00,0x10,0x04,0x06,
+       0x00,0x07,0xff,0xcf,0xb8,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x04,0x07,0x00,0x07,0xff,
+       0xcf,0xb2,0x00,0x10,0x07,0x07,0xff,0xcf,0xbb,0x00,0x07,0x00,0xd1,0x0b,0x10,0x04,
+       0x08,0x00,0x08,0xff,0xcd,0xbb,0x00,0x10,0x07,0x08,0xff,0xcd,0xbc,0x00,0x08,0xff,
+       0xcd,0xbd,0x00,0xe3,0xed,0x46,0xe2,0x3d,0x05,0xe1,0x27,0x02,0xe0,0x66,0x01,0xcf,
+       0x86,0xd5,0xf0,0xd4,0x7e,0xd3,0x40,0xd2,0x22,0xd1,0x12,0x10,0x09,0x04,0xff,0xd0,
+       0xb5,0xcc,0x80,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x88,0x00,0x10,0x07,0x01,0xff,0xd1,
+       0x92,0x00,0x01,0xff,0xd0,0xb3,0xcc,0x81,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,
+       0x94,0x00,0x01,0xff,0xd1,0x95,0x00,0x10,0x07,0x01,0xff,0xd1,0x96,0x00,0x01,0xff,
+       0xd1,0x96,0xcc,0x88,0x00,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x98,0x00,
+       0x01,0xff,0xd1,0x99,0x00,0x10,0x07,0x01,0xff,0xd1,0x9a,0x00,0x01,0xff,0xd1,0x9b,
+       0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0xba,0xcc,0x81,0x00,0x04,0xff,0xd0,0xb8,
+       0xcc,0x80,0x00,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x86,0x00,0x01,0xff,0xd1,0x9f,
+       0x00,0xd3,0x38,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd0,0xb0,0x00,0x01,0xff,
+       0xd0,0xb1,0x00,0x10,0x07,0x01,0xff,0xd0,0xb2,0x00,0x01,0xff,0xd0,0xb3,0x00,0xd1,
+       0x0e,0x10,0x07,0x01,0xff,0xd0,0xb4,0x00,0x01,0xff,0xd0,0xb5,0x00,0x10,0x07,0x01,
+       0xff,0xd0,0xb6,0x00,0x01,0xff,0xd0,0xb7,0x00,0xd2,0x1e,0xd1,0x10,0x10,0x07,0x01,
+       0xff,0xd0,0xb8,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x86,0x00,0x10,0x07,0x01,0xff,0xd0,
+       0xba,0x00,0x01,0xff,0xd0,0xbb,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd0,0xbc,0x00,
+       0x01,0xff,0xd0,0xbd,0x00,0x10,0x07,0x01,0xff,0xd0,0xbe,0x00,0x01,0xff,0xd0,0xbf,
+       0x00,0xe4,0x25,0x42,0xd3,0x38,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x80,
+       0x00,0x01,0xff,0xd1,0x81,0x00,0x10,0x07,0x01,0xff,0xd1,0x82,0x00,0x01,0xff,0xd1,
+       0x83,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x84,0x00,0x01,0xff,0xd1,0x85,0x00,
+       0x10,0x07,0x01,0xff,0xd1,0x86,0x00,0x01,0xff,0xd1,0x87,0x00,0xd2,0x1c,0xd1,0x0e,
+       0x10,0x07,0x01,0xff,0xd1,0x88,0x00,0x01,0xff,0xd1,0x89,0x00,0x10,0x07,0x01,0xff,
+       0xd1,0x8a,0x00,0x01,0xff,0xd1,0x8b,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x8c,
+       0x00,0x01,0xff,0xd1,0x8d,0x00,0x10,0x07,0x01,0xff,0xd1,0x8e,0x00,0x01,0xff,0xd1,
+       0x8f,0x00,0xcf,0x86,0xd5,0x07,0x64,0xcf,0x41,0x01,0x00,0xd4,0x58,0xd3,0x2c,0xd2,
+       0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xa1,0x00,0x01,0x00,0x10,0x07,0x01,0xff,
+       0xd1,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xa5,0x00,0x01,0x00,
+       0x10,0x07,0x01,0xff,0xd1,0xa7,0x00,0x01,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,
+       0xff,0xd1,0xa9,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xab,0x00,0x01,0x00,0xd1,
+       0x0b,0x10,0x07,0x01,0xff,0xd1,0xad,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xaf,
+       0x00,0x01,0x00,0xd3,0x33,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xb1,0x00,
+       0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xb3,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,
+       0xff,0xd1,0xb5,0x00,0x01,0x00,0x10,0x09,0x01,0xff,0xd1,0xb5,0xcc,0x8f,0x00,0x01,
+       0xff,0xd1,0xb5,0xcc,0x8f,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xb9,
+       0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xbb,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,
+       0x01,0xff,0xd1,0xbd,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xbf,0x00,0x01,0x00,
+       0xe0,0x41,0x01,0xcf,0x86,0xd5,0x8e,0xd4,0x36,0xd3,0x11,0xe2,0x91,0x41,0xe1,0x88,
+       0x41,0x10,0x07,0x01,0xff,0xd2,0x81,0x00,0x01,0x00,0xd2,0x0f,0x51,0x04,0x04,0x00,
+       0x10,0x07,0x06,0xff,0xd2,0x8b,0x00,0x06,0x00,0xd1,0x0b,0x10,0x07,0x04,0xff,0xd2,
+       0x8d,0x00,0x04,0x00,0x10,0x07,0x04,0xff,0xd2,0x8f,0x00,0x04,0x00,0xd3,0x2c,0xd2,
+       0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0x91,0x00,0x01,0x00,0x10,0x07,0x01,0xff,
+       0xd2,0x93,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0x95,0x00,0x01,0x00,
+       0x10,0x07,0x01,0xff,0xd2,0x97,0x00,0x01,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,
+       0xff,0xd2,0x99,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0x9b,0x00,0x01,0x00,0xd1,
+       0x0b,0x10,0x07,0x01,0xff,0xd2,0x9d,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0x9f,
+       0x00,0x01,0x00,0xd4,0x58,0xd3,0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,
+       0xa1,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10,
+       0x07,0x01,0xff,0xd2,0xa5,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xa7,0x00,0x01,
+       0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0xa9,0x00,0x01,0x00,0x10,0x07,
+       0x01,0xff,0xd2,0xab,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0xad,0x00,
+       0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xaf,0x00,0x01,0x00,0xd3,0x2c,0xd2,0x16,0xd1,
+       0x0b,0x10,0x07,0x01,0xff,0xd2,0xb1,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xb3,
+       0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0xb5,0x00,0x01,0x00,0x10,0x07,
+       0x01,0xff,0xd2,0xb7,0x00,0x01,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,
+       0xb9,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xbb,0x00,0x01,0x00,0xd1,0x0b,0x10,
+       0x07,0x01,0xff,0xd2,0xbd,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xbf,0x00,0x01,
+       0x00,0xcf,0x86,0xd5,0xdc,0xd4,0x5a,0xd3,0x36,0xd2,0x20,0xd1,0x10,0x10,0x07,0x01,
+       0xff,0xd3,0x8f,0x00,0x01,0xff,0xd0,0xb6,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0,
+       0xb6,0xcc,0x86,0x00,0x01,0xff,0xd3,0x84,0x00,0xd1,0x0b,0x10,0x04,0x01,0x00,0x06,
+       0xff,0xd3,0x86,0x00,0x10,0x04,0x06,0x00,0x01,0xff,0xd3,0x88,0x00,0xd2,0x16,0xd1,
+       0x0b,0x10,0x04,0x01,0x00,0x06,0xff,0xd3,0x8a,0x00,0x10,0x04,0x06,0x00,0x01,0xff,
+       0xd3,0x8c,0x00,0xe1,0x69,0x40,0x10,0x04,0x01,0x00,0x06,0xff,0xd3,0x8e,0x00,0xd3,
+       0x41,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0xb0,0xcc,0x86,0x00,0x01,0xff,
+       0xd0,0xb0,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0,0xb0,0xcc,0x88,0x00,0x01,0xff,
+       0xd0,0xb0,0xcc,0x88,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0x95,0x00,0x01,0x00,
+       0x10,0x09,0x01,0xff,0xd0,0xb5,0xcc,0x86,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x86,0x00,
+       0xd2,0x1d,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0x99,0x00,0x01,0x00,0x10,0x09,0x01,
+       0xff,0xd3,0x99,0xcc,0x88,0x00,0x01,0xff,0xd3,0x99,0xcc,0x88,0x00,0xd1,0x12,0x10,
+       0x09,0x01,0xff,0xd0,0xb6,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb6,0xcc,0x88,0x00,0x10,
+       0x09,0x01,0xff,0xd0,0xb7,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb7,0xcc,0x88,0x00,0xd4,
+       0x82,0xd3,0x41,0xd2,0x1d,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0xa1,0x00,0x01,0x00,
+       0x10,0x09,0x01,0xff,0xd0,0xb8,0xcc,0x84,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x84,0x00,
+       0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0xb8,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb8,0xcc,
+       0x88,0x00,0x10,0x09,0x01,0xff,0xd0,0xbe,0xcc,0x88,0x00,0x01,0xff,0xd0,0xbe,0xcc,
+       0x88,0x00,0xd2,0x1d,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0xa9,0x00,0x01,0x00,0x10,
+       0x09,0x01,0xff,0xd3,0xa9,0xcc,0x88,0x00,0x01,0xff,0xd3,0xa9,0xcc,0x88,0x00,0xd1,
+       0x12,0x10,0x09,0x04,0xff,0xd1,0x8d,0xcc,0x88,0x00,0x04,0xff,0xd1,0x8d,0xcc,0x88,
+       0x00,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x84,0x00,0x01,0xff,0xd1,0x83,0xcc,0x84,
+       0x00,0xd3,0x41,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x88,0x00,
+       0x01,0xff,0xd1,0x83,0xcc,0x88,0x00,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x8b,0x00,
+       0x01,0xff,0xd1,0x83,0xcc,0x8b,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd1,0x87,0xcc,
+       0x88,0x00,0x01,0xff,0xd1,0x87,0xcc,0x88,0x00,0x10,0x07,0x08,0xff,0xd3,0xb7,0x00,
+       0x08,0x00,0xd2,0x1d,0xd1,0x12,0x10,0x09,0x01,0xff,0xd1,0x8b,0xcc,0x88,0x00,0x01,
+       0xff,0xd1,0x8b,0xcc,0x88,0x00,0x10,0x07,0x09,0xff,0xd3,0xbb,0x00,0x09,0x00,0xd1,
+       0x0b,0x10,0x07,0x09,0xff,0xd3,0xbd,0x00,0x09,0x00,0x10,0x07,0x09,0xff,0xd3,0xbf,
+       0x00,0x09,0x00,0xe1,0x26,0x02,0xe0,0x78,0x01,0xcf,0x86,0xd5,0xb0,0xd4,0x58,0xd3,
+       0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x06,0xff,0xd4,0x81,0x00,0x06,0x00,0x10,0x07,
+       0x06,0xff,0xd4,0x83,0x00,0x06,0x00,0xd1,0x0b,0x10,0x07,0x06,0xff,0xd4,0x85,0x00,
+       0x06,0x00,0x10,0x07,0x06,0xff,0xd4,0x87,0x00,0x06,0x00,0xd2,0x16,0xd1,0x0b,0x10,
+       0x07,0x06,0xff,0xd4,0x89,0x00,0x06,0x00,0x10,0x07,0x06,0xff,0xd4,0x8b,0x00,0x06,
+       0x00,0xd1,0x0b,0x10,0x07,0x06,0xff,0xd4,0x8d,0x00,0x06,0x00,0x10,0x07,0x06,0xff,
+       0xd4,0x8f,0x00,0x06,0x00,0xd3,0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x09,0xff,0xd4,
+       0x91,0x00,0x09,0x00,0x10,0x07,0x09,0xff,0xd4,0x93,0x00,0x09,0x00,0xd1,0x0b,0x10,
+       0x07,0x0a,0xff,0xd4,0x95,0x00,0x0a,0x00,0x10,0x07,0x0a,0xff,0xd4,0x97,0x00,0x0a,
+       0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x0a,0xff,0xd4,0x99,0x00,0x0a,0x00,0x10,0x07,
+       0x0a,0xff,0xd4,0x9b,0x00,0x0a,0x00,0xd1,0x0b,0x10,0x07,0x0a,0xff,0xd4,0x9d,0x00,
+       0x0a,0x00,0x10,0x07,0x0a,0xff,0xd4,0x9f,0x00,0x0a,0x00,0xd4,0x58,0xd3,0x2c,0xd2,
+       0x16,0xd1,0x0b,0x10,0x07,0x0a,0xff,0xd4,0xa1,0x00,0x0a,0x00,0x10,0x07,0x0a,0xff,
+       0xd4,0xa3,0x00,0x0a,0x00,0xd1,0x0b,0x10,0x07,0x0b,0xff,0xd4,0xa5,0x00,0x0b,0x00,
+       0x10,0x07,0x0c,0xff,0xd4,0xa7,0x00,0x0c,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x10,
+       0xff,0xd4,0xa9,0x00,0x10,0x00,0x10,0x07,0x10,0xff,0xd4,0xab,0x00,0x10,0x00,0xd1,
+       0x0b,0x10,0x07,0x10,0xff,0xd4,0xad,0x00,0x10,0x00,0x10,0x07,0x10,0xff,0xd4,0xaf,
+       0x00,0x10,0x00,0xd3,0x35,0xd2,0x19,0xd1,0x0b,0x10,0x04,0x00,0x00,0x01,0xff,0xd5,
+       0xa1,0x00,0x10,0x07,0x01,0xff,0xd5,0xa2,0x00,0x01,0xff,0xd5,0xa3,0x00,0xd1,0x0e,
+       0x10,0x07,0x01,0xff,0xd5,0xa4,0x00,0x01,0xff,0xd5,0xa5,0x00,0x10,0x07,0x01,0xff,
+       0xd5,0xa6,0x00,0x01,0xff,0xd5,0xa7,0x00,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,
+       0xd5,0xa8,0x00,0x01,0xff,0xd5,0xa9,0x00,0x10,0x07,0x01,0xff,0xd5,0xaa,0x00,0x01,
+       0xff,0xd5,0xab,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5,0xac,0x00,0x01,0xff,0xd5,
+       0xad,0x00,0x10,0x07,0x01,0xff,0xd5,0xae,0x00,0x01,0xff,0xd5,0xaf,0x00,0xcf,0x86,
+       0xe5,0x08,0x3f,0xd4,0x70,0xd3,0x38,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5,
+       0xb0,0x00,0x01,0xff,0xd5,0xb1,0x00,0x10,0x07,0x01,0xff,0xd5,0xb2,0x00,0x01,0xff,
+       0xd5,0xb3,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5,0xb4,0x00,0x01,0xff,0xd5,0xb5,
+       0x00,0x10,0x07,0x01,0xff,0xd5,0xb6,0x00,0x01,0xff,0xd5,0xb7,0x00,0xd2,0x1c,0xd1,
+       0x0e,0x10,0x07,0x01,0xff,0xd5,0xb8,0x00,0x01,0xff,0xd5,0xb9,0x00,0x10,0x07,0x01,
+       0xff,0xd5,0xba,0x00,0x01,0xff,0xd5,0xbb,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5,
+       0xbc,0x00,0x01,0xff,0xd5,0xbd,0x00,0x10,0x07,0x01,0xff,0xd5,0xbe,0x00,0x01,0xff,
+       0xd5,0xbf,0x00,0xe3,0x87,0x3e,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd6,0x80,
+       0x00,0x01,0xff,0xd6,0x81,0x00,0x10,0x07,0x01,0xff,0xd6,0x82,0x00,0x01,0xff,0xd6,
+       0x83,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd6,0x84,0x00,0x01,0xff,0xd6,0x85,0x00,
+       0x10,0x07,0x01,0xff,0xd6,0x86,0x00,0x00,0x00,0xe0,0x2f,0x3f,0xcf,0x86,0xe5,0xc0,
+       0x3e,0xe4,0x97,0x3e,0xe3,0x76,0x3e,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,
+       0x04,0x01,0x00,0x01,0xff,0xd5,0xa5,0xd6,0x82,0x00,0xe4,0x3e,0x25,0xe3,0xc3,0x1a,
+       0xe2,0x7b,0x81,0xe1,0xc0,0x13,0xd0,0x1e,0xcf,0x86,0xc5,0xe4,0x08,0x4b,0xe3,0x53,
+       0x46,0xe2,0xe9,0x43,0xe1,0x1c,0x43,0xe0,0xe1,0x42,0xcf,0x86,0xe5,0xa6,0x42,0x64,
+       0x89,0x42,0x0b,0x00,0xcf,0x86,0xe5,0xfa,0x01,0xe4,0x03,0x56,0xe3,0x76,0x01,0xe2,
+       0x8e,0x53,0xd1,0x0c,0xe0,0xef,0x52,0xcf,0x86,0x65,0x8d,0x52,0x04,0x00,0xe0,0x0d,
+       0x01,0xcf,0x86,0xd5,0x0a,0xe4,0x10,0x53,0x63,0xff,0x52,0x0a,0x00,0xd4,0x80,0xd3,
+       0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x80,0x00,0x01,0xff,0xe2,
+       0xb4,0x81,0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x82,0x00,0x01,0xff,0xe2,0xb4,0x83,
+       0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x84,0x00,0x01,0xff,0xe2,0xb4,0x85,
+       0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x86,0x00,0x01,0xff,0xe2,0xb4,0x87,0x00,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x88,0x00,0x01,0xff,0xe2,0xb4,0x89,
+       0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x8a,0x00,0x01,0xff,0xe2,0xb4,0x8b,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x8c,0x00,0x01,0xff,0xe2,0xb4,0x8d,0x00,0x10,
+       0x08,0x01,0xff,0xe2,0xb4,0x8e,0x00,0x01,0xff,0xe2,0xb4,0x8f,0x00,0xd3,0x40,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x90,0x00,0x01,0xff,0xe2,0xb4,0x91,
+       0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x92,0x00,0x01,0xff,0xe2,0xb4,0x93,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x94,0x00,0x01,0xff,0xe2,0xb4,0x95,0x00,0x10,
+       0x08,0x01,0xff,0xe2,0xb4,0x96,0x00,0x01,0xff,0xe2,0xb4,0x97,0x00,0xd2,0x20,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x98,0x00,0x01,0xff,0xe2,0xb4,0x99,0x00,0x10,
+       0x08,0x01,0xff,0xe2,0xb4,0x9a,0x00,0x01,0xff,0xe2,0xb4,0x9b,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0xe2,0xb4,0x9c,0x00,0x01,0xff,0xe2,0xb4,0x9d,0x00,0x10,0x08,0x01,
+       0xff,0xe2,0xb4,0x9e,0x00,0x01,0xff,0xe2,0xb4,0x9f,0x00,0xcf,0x86,0xe5,0x42,0x52,
+       0x94,0x50,0xd3,0x3c,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0xa0,0x00,
+       0x01,0xff,0xe2,0xb4,0xa1,0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0xa2,0x00,0x01,0xff,
+       0xe2,0xb4,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0xa4,0x00,0x01,0xff,
+       0xe2,0xb4,0xa5,0x00,0x10,0x04,0x00,0x00,0x0d,0xff,0xe2,0xb4,0xa7,0x00,0x52,0x04,
+       0x00,0x00,0x91,0x0c,0x10,0x04,0x00,0x00,0x0d,0xff,0xe2,0xb4,0xad,0x00,0x00,0x00,
+       0x01,0x00,0xd2,0x1b,0xe1,0xfc,0x52,0xe0,0xad,0x52,0xcf,0x86,0x95,0x0f,0x94,0x0b,
+       0x93,0x07,0x62,0x92,0x52,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xd1,0x13,0xe0,
+       0xd3,0x53,0xcf,0x86,0x95,0x0a,0xe4,0xa8,0x53,0x63,0x97,0x53,0x04,0x00,0x04,0x00,
+       0xd0,0x0d,0xcf,0x86,0x95,0x07,0x64,0x22,0x54,0x08,0x00,0x04,0x00,0xcf,0x86,0x55,
+       0x04,0x04,0x00,0x54,0x04,0x04,0x00,0xd3,0x07,0x62,0x2f,0x54,0x04,0x00,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8f,0xb0,0x00,0x11,0xff,0xe1,0x8f,0xb1,0x00,
+       0x10,0x08,0x11,0xff,0xe1,0x8f,0xb2,0x00,0x11,0xff,0xe1,0x8f,0xb3,0x00,0x91,0x10,
+       0x10,0x08,0x11,0xff,0xe1,0x8f,0xb4,0x00,0x11,0xff,0xe1,0x8f,0xb5,0x00,0x00,0x00,
+       0xd4,0x1c,0xe3,0xe0,0x56,0xe2,0x17,0x56,0xe1,0xda,0x55,0xe0,0xbb,0x55,0xcf,0x86,
+       0x95,0x0a,0xe4,0xa4,0x55,0x63,0x88,0x55,0x04,0x00,0x04,0x00,0xe3,0xd2,0x01,0xe2,
+       0x2b,0x5a,0xd1,0x0c,0xe0,0x4c,0x59,0xcf,0x86,0x65,0x25,0x59,0x0a,0x00,0xe0,0x9c,
+       0x59,0xcf,0x86,0xd5,0xc5,0xd4,0x45,0xd3,0x31,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x12,
+       0xff,0xd0,0xb2,0x00,0x12,0xff,0xd0,0xb4,0x00,0x10,0x07,0x12,0xff,0xd0,0xbe,0x00,
+       0x12,0xff,0xd1,0x81,0x00,0x51,0x07,0x12,0xff,0xd1,0x82,0x00,0x10,0x07,0x12,0xff,
+       0xd1,0x8a,0x00,0x12,0xff,0xd1,0xa3,0x00,0x92,0x10,0x91,0x0c,0x10,0x08,0x12,0xff,
+       0xea,0x99,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x14,0xff,0xe1,0x83,0x90,0x00,0x14,0xff,0xe1,0x83,0x91,0x00,0x10,0x08,
+       0x14,0xff,0xe1,0x83,0x92,0x00,0x14,0xff,0xe1,0x83,0x93,0x00,0xd1,0x10,0x10,0x08,
+       0x14,0xff,0xe1,0x83,0x94,0x00,0x14,0xff,0xe1,0x83,0x95,0x00,0x10,0x08,0x14,0xff,
+       0xe1,0x83,0x96,0x00,0x14,0xff,0xe1,0x83,0x97,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x14,0xff,0xe1,0x83,0x98,0x00,0x14,0xff,0xe1,0x83,0x99,0x00,0x10,0x08,0x14,0xff,
+       0xe1,0x83,0x9a,0x00,0x14,0xff,0xe1,0x83,0x9b,0x00,0xd1,0x10,0x10,0x08,0x14,0xff,
+       0xe1,0x83,0x9c,0x00,0x14,0xff,0xe1,0x83,0x9d,0x00,0x10,0x08,0x14,0xff,0xe1,0x83,
+       0x9e,0x00,0x14,0xff,0xe1,0x83,0x9f,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x14,0xff,0xe1,0x83,0xa0,0x00,0x14,0xff,0xe1,0x83,0xa1,0x00,0x10,0x08,
+       0x14,0xff,0xe1,0x83,0xa2,0x00,0x14,0xff,0xe1,0x83,0xa3,0x00,0xd1,0x10,0x10,0x08,
+       0x14,0xff,0xe1,0x83,0xa4,0x00,0x14,0xff,0xe1,0x83,0xa5,0x00,0x10,0x08,0x14,0xff,
+       0xe1,0x83,0xa6,0x00,0x14,0xff,0xe1,0x83,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x14,0xff,0xe1,0x83,0xa8,0x00,0x14,0xff,0xe1,0x83,0xa9,0x00,0x10,0x08,0x14,0xff,
+       0xe1,0x83,0xaa,0x00,0x14,0xff,0xe1,0x83,0xab,0x00,0xd1,0x10,0x10,0x08,0x14,0xff,
+       0xe1,0x83,0xac,0x00,0x14,0xff,0xe1,0x83,0xad,0x00,0x10,0x08,0x14,0xff,0xe1,0x83,
+       0xae,0x00,0x14,0xff,0xe1,0x83,0xaf,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x14,0xff,0xe1,0x83,0xb0,0x00,0x14,0xff,0xe1,0x83,0xb1,0x00,0x10,0x08,0x14,0xff,
+       0xe1,0x83,0xb2,0x00,0x14,0xff,0xe1,0x83,0xb3,0x00,0xd1,0x10,0x10,0x08,0x14,0xff,
+       0xe1,0x83,0xb4,0x00,0x14,0xff,0xe1,0x83,0xb5,0x00,0x10,0x08,0x14,0xff,0xe1,0x83,
+       0xb6,0x00,0x14,0xff,0xe1,0x83,0xb7,0x00,0xd2,0x1c,0xd1,0x10,0x10,0x08,0x14,0xff,
+       0xe1,0x83,0xb8,0x00,0x14,0xff,0xe1,0x83,0xb9,0x00,0x10,0x08,0x14,0xff,0xe1,0x83,
+       0xba,0x00,0x00,0x00,0xd1,0x0c,0x10,0x04,0x00,0x00,0x14,0xff,0xe1,0x83,0xbd,0x00,
+       0x10,0x08,0x14,0xff,0xe1,0x83,0xbe,0x00,0x14,0xff,0xe1,0x83,0xbf,0x00,0xe2,0x9d,
+       0x08,0xe1,0x48,0x04,0xe0,0x1c,0x02,0xcf,0x86,0xe5,0x11,0x01,0xd4,0x84,0xd3,0x40,
+       0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x61,0xcc,0xa5,0x00,0x01,0xff,0x61,0xcc,
+       0xa5,0x00,0x10,0x08,0x01,0xff,0x62,0xcc,0x87,0x00,0x01,0xff,0x62,0xcc,0x87,0x00,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0x62,0xcc,0xa3,0x00,0x01,0xff,0x62,0xcc,0xa3,0x00,
+       0x10,0x08,0x01,0xff,0x62,0xcc,0xb1,0x00,0x01,0xff,0x62,0xcc,0xb1,0x00,0xd2,0x24,
+       0xd1,0x14,0x10,0x0a,0x01,0xff,0x63,0xcc,0xa7,0xcc,0x81,0x00,0x01,0xff,0x63,0xcc,
+       0xa7,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0x87,0x00,0x01,0xff,0x64,0xcc,
+       0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x64,0xcc,0xa3,0x00,0x01,0xff,0x64,0xcc,
+       0xa3,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0xb1,0x00,0x01,0xff,0x64,0xcc,0xb1,0x00,
+       0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x64,0xcc,0xa7,0x00,0x01,0xff,
+       0x64,0xcc,0xa7,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0xad,0x00,0x01,0xff,0x64,0xcc,
+       0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x65,0xcc,0x84,0xcc,0x80,0x00,0x01,0xff,
+       0x65,0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x65,0xcc,0x84,0xcc,0x81,0x00,
+       0x01,0xff,0x65,0xcc,0x84,0xcc,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0x65,0xcc,0xad,0x00,0x01,0xff,0x65,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,
+       0xb0,0x00,0x01,0xff,0x65,0xcc,0xb0,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x65,0xcc,
+       0xa7,0xcc,0x86,0x00,0x01,0xff,0x65,0xcc,0xa7,0xcc,0x86,0x00,0x10,0x08,0x01,0xff,
+       0x66,0xcc,0x87,0x00,0x01,0xff,0x66,0xcc,0x87,0x00,0xd4,0x84,0xd3,0x40,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0x67,0xcc,0x84,0x00,0x01,0xff,0x67,0xcc,0x84,0x00,
+       0x10,0x08,0x01,0xff,0x68,0xcc,0x87,0x00,0x01,0xff,0x68,0xcc,0x87,0x00,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0x68,0xcc,0xa3,0x00,0x01,0xff,0x68,0xcc,0xa3,0x00,0x10,0x08,
+       0x01,0xff,0x68,0xcc,0x88,0x00,0x01,0xff,0x68,0xcc,0x88,0x00,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0x68,0xcc,0xa7,0x00,0x01,0xff,0x68,0xcc,0xa7,0x00,0x10,0x08,
+       0x01,0xff,0x68,0xcc,0xae,0x00,0x01,0xff,0x68,0xcc,0xae,0x00,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0x69,0xcc,0xb0,0x00,0x01,0xff,0x69,0xcc,0xb0,0x00,0x10,0x0a,0x01,0xff,
+       0x69,0xcc,0x88,0xcc,0x81,0x00,0x01,0xff,0x69,0xcc,0x88,0xcc,0x81,0x00,0xd3,0x40,
+       0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x6b,0xcc,0x81,0x00,0x01,0xff,0x6b,0xcc,
+       0x81,0x00,0x10,0x08,0x01,0xff,0x6b,0xcc,0xa3,0x00,0x01,0xff,0x6b,0xcc,0xa3,0x00,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0x6b,0xcc,0xb1,0x00,0x01,0xff,0x6b,0xcc,0xb1,0x00,
+       0x10,0x08,0x01,0xff,0x6c,0xcc,0xa3,0x00,0x01,0xff,0x6c,0xcc,0xa3,0x00,0xd2,0x24,
+       0xd1,0x14,0x10,0x0a,0x01,0xff,0x6c,0xcc,0xa3,0xcc,0x84,0x00,0x01,0xff,0x6c,0xcc,
+       0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x6c,0xcc,0xb1,0x00,0x01,0xff,0x6c,0xcc,
+       0xb1,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6c,0xcc,0xad,0x00,0x01,0xff,0x6c,0xcc,
+       0xad,0x00,0x10,0x08,0x01,0xff,0x6d,0xcc,0x81,0x00,0x01,0xff,0x6d,0xcc,0x81,0x00,
+       0xcf,0x86,0xe5,0x15,0x01,0xd4,0x88,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0x6d,0xcc,0x87,0x00,0x01,0xff,0x6d,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x6d,
+       0xcc,0xa3,0x00,0x01,0xff,0x6d,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e,
+       0xcc,0x87,0x00,0x01,0xff,0x6e,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x6e,0xcc,0xa3,
+       0x00,0x01,0xff,0x6e,0xcc,0xa3,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e,
+       0xcc,0xb1,0x00,0x01,0xff,0x6e,0xcc,0xb1,0x00,0x10,0x08,0x01,0xff,0x6e,0xcc,0xad,
+       0x00,0x01,0xff,0x6e,0xcc,0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x83,
+       0xcc,0x81,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x6f,
+       0xcc,0x83,0xcc,0x88,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x88,0x00,0xd3,0x48,0xd2,
+       0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x84,0xcc,0x80,0x00,0x01,0xff,0x6f,
+       0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x84,0xcc,0x81,0x00,0x01,
+       0xff,0x6f,0xcc,0x84,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x70,0xcc,0x81,
+       0x00,0x01,0xff,0x70,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x70,0xcc,0x87,0x00,0x01,
+       0xff,0x70,0xcc,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x72,0xcc,0x87,
+       0x00,0x01,0xff,0x72,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x72,0xcc,0xa3,0x00,0x01,
+       0xff,0x72,0xcc,0xa3,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x72,0xcc,0xa3,0xcc,0x84,
+       0x00,0x01,0xff,0x72,0xcc,0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x72,0xcc,0xb1,
+       0x00,0x01,0xff,0x72,0xcc,0xb1,0x00,0xd4,0x8c,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x73,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x87,0x00,0x10,0x08,0x01,
+       0xff,0x73,0xcc,0xa3,0x00,0x01,0xff,0x73,0xcc,0xa3,0x00,0xd1,0x14,0x10,0x0a,0x01,
+       0xff,0x73,0xcc,0x81,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x81,0xcc,0x87,0x00,0x10,
+       0x0a,0x01,0xff,0x73,0xcc,0x8c,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x8c,0xcc,0x87,
+       0x00,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x73,0xcc,0xa3,0xcc,0x87,0x00,0x01,
+       0xff,0x73,0xcc,0xa3,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x74,0xcc,0x87,0x00,0x01,
+       0xff,0x74,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x74,0xcc,0xa3,0x00,0x01,
+       0xff,0x74,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x74,0xcc,0xb1,0x00,0x01,0xff,0x74,
+       0xcc,0xb1,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x74,0xcc,0xad,
+       0x00,0x01,0xff,0x74,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0xa4,0x00,0x01,
+       0xff,0x75,0xcc,0xa4,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0xb0,0x00,0x01,
+       0xff,0x75,0xcc,0xb0,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0xad,0x00,0x01,0xff,0x75,
+       0xcc,0xad,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x83,0xcc,0x81,
+       0x00,0x01,0xff,0x75,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x84,
+       0xcc,0x88,0x00,0x01,0xff,0x75,0xcc,0x84,0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0x76,0xcc,0x83,0x00,0x01,0xff,0x76,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x76,
+       0xcc,0xa3,0x00,0x01,0xff,0x76,0xcc,0xa3,0x00,0xe0,0x11,0x02,0xcf,0x86,0xd5,0xe2,
+       0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x80,0x00,
+       0x01,0xff,0x77,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x77,0xcc,0x81,0x00,0x01,0xff,
+       0x77,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x88,0x00,0x01,0xff,
+       0x77,0xcc,0x88,0x00,0x10,0x08,0x01,0xff,0x77,0xcc,0x87,0x00,0x01,0xff,0x77,0xcc,
+       0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0xa3,0x00,0x01,0xff,
+       0x77,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x78,0xcc,0x87,0x00,0x01,0xff,0x78,0xcc,
+       0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x78,0xcc,0x88,0x00,0x01,0xff,0x78,0xcc,
+       0x88,0x00,0x10,0x08,0x01,0xff,0x79,0xcc,0x87,0x00,0x01,0xff,0x79,0xcc,0x87,0x00,
+       0xd3,0x33,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x7a,0xcc,0x82,0x00,0x01,0xff,
+       0x7a,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0xa3,0x00,0x01,0xff,0x7a,0xcc,
+       0xa3,0x00,0xe1,0x12,0x59,0x10,0x08,0x01,0xff,0x7a,0xcc,0xb1,0x00,0x01,0xff,0x7a,
+       0xcc,0xb1,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x8a,0x00,0x01,
+       0xff,0x79,0xcc,0x8a,0x00,0x10,0x08,0x01,0xff,0x61,0xca,0xbe,0x00,0x02,0xff,0x73,
+       0xcc,0x87,0x00,0x51,0x04,0x0a,0x00,0x10,0x07,0x0a,0xff,0x73,0x73,0x00,0x0a,0x00,
+       0xd4,0x98,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x61,0xcc,0xa3,0x00,
+       0x01,0xff,0x61,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x61,0xcc,0x89,0x00,0x01,0xff,
+       0x61,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0x82,0xcc,0x81,0x00,
+       0x01,0xff,0x61,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0x82,0xcc,
+       0x80,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x80,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,
+       0x01,0xff,0x61,0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x89,0x00,
+       0x10,0x0a,0x01,0xff,0x61,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,
+       0x83,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,
+       0x61,0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0x86,0xcc,0x81,0x00,
+       0x01,0xff,0x61,0xcc,0x86,0xcc,0x81,0x00,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,
+       0x01,0xff,0x61,0xcc,0x86,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x86,0xcc,0x80,0x00,
+       0x10,0x0a,0x01,0xff,0x61,0xcc,0x86,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x86,0xcc,
+       0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0x86,0xcc,0x83,0x00,0x01,0xff,
+       0x61,0xcc,0x86,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0xa3,0xcc,0x86,0x00,
+       0x01,0xff,0x61,0xcc,0xa3,0xcc,0x86,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0x65,0xcc,0xa3,0x00,0x01,0xff,0x65,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,
+       0x89,0x00,0x01,0xff,0x65,0xcc,0x89,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,
+       0x83,0x00,0x01,0xff,0x65,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x65,0xcc,0x82,0xcc,
+       0x81,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x81,0x00,0xcf,0x86,0xe5,0x31,0x01,0xd4,
+       0x90,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x65,0xcc,0x82,0xcc,0x80,
+       0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x65,0xcc,0x82,
+       0xcc,0x89,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,
+       0xff,0x65,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x83,0x00,0x10,
+       0x0a,0x01,0xff,0x65,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,0x65,0xcc,0xa3,0xcc,0x82,
+       0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x89,0x00,0x01,0xff,0x69,
+       0xcc,0x89,0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0xa3,0x00,0x01,0xff,0x69,0xcc,0xa3,
+       0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0xa3,0x00,0x01,0xff,0x6f,0xcc,0xa3,
+       0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x89,0x00,0xd3,
+       0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x81,0x00,0x01,
+       0xff,0x6f,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x80,
+       0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x80,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,
+       0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x89,0x00,0x10,0x0a,0x01,
+       0xff,0x6f,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x83,0x00,0xd2,
+       0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,0x6f,
+       0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x81,0x00,0x01,
+       0xff,0x6f,0xcc,0x9b,0xcc,0x81,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b,
+       0xcc,0x80,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x6f,
+       0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x89,0x00,0xd4,0x98,0xd3,
+       0x48,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x83,0x00,0x01,
+       0xff,0x6f,0xcc,0x9b,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0xa3,
+       0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,
+       0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x89,
+       0x00,0x01,0xff,0x75,0xcc,0x89,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,
+       0xcc,0x9b,0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x81,0x00,0x10,0x0a,0x01,
+       0xff,0x75,0xcc,0x9b,0xcc,0x80,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x80,0x00,0xd1,
+       0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x75,0xcc,0x9b,
+       0xcc,0x89,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x83,0x00,0x01,0xff,0x75,
+       0xcc,0x9b,0xcc,0x83,0x00,0xd3,0x44,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,
+       0xcc,0x9b,0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0xa3,0x00,0x10,0x08,0x01,
+       0xff,0x79,0xcc,0x80,0x00,0x01,0xff,0x79,0xcc,0x80,0x00,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0x79,0xcc,0xa3,0x00,0x01,0xff,0x79,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x79,
+       0xcc,0x89,0x00,0x01,0xff,0x79,0xcc,0x89,0x00,0xd2,0x1c,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0x79,0xcc,0x83,0x00,0x01,0xff,0x79,0xcc,0x83,0x00,0x10,0x08,0x0a,0xff,0xe1,
+       0xbb,0xbb,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xe1,0xbb,0xbd,0x00,0x0a,
+       0x00,0x10,0x08,0x0a,0xff,0xe1,0xbb,0xbf,0x00,0x0a,0x00,0xe1,0xbf,0x02,0xe0,0xa1,
+       0x01,0xcf,0x86,0xd5,0xc6,0xd4,0x6c,0xd3,0x18,0xe2,0x0e,0x59,0xe1,0xf7,0x58,0x10,
+       0x09,0x01,0xff,0xce,0xb1,0xcc,0x93,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0x00,0xd2,
+       0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x93,0x00,0x01,0xff,0xce,0xb1,
+       0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,
+       0xce,0xb1,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,
+       0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,
+       0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82,
+       0x00,0xd3,0x18,0xe2,0x4a,0x59,0xe1,0x33,0x59,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc,
+       0x93,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,
+       0xff,0xce,0xb5,0xcc,0x93,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0x00,0x10,0x0b,0x01,
+       0xff,0xce,0xb5,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0xcc,0x80,
+       0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0xb5,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,
+       0xce,0xb5,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd4,0x6c,0xd3,0x18,0xe2,0x74,0x59,
+       0xe1,0x5d,0x59,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x93,0x00,0x01,0xff,0xce,0xb7,
+       0xcc,0x94,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x93,0x00,
+       0x01,0xff,0xce,0xb7,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,
+       0x80,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,
+       0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x81,
+       0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb7,
+       0xcc,0x94,0xcd,0x82,0x00,0xd3,0x18,0xe2,0xb0,0x59,0xe1,0x99,0x59,0x10,0x09,0x01,
+       0xff,0xce,0xb9,0xcc,0x93,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0x00,0xd2,0x28,0xd1,
+       0x12,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x93,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,
+       0x00,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb9,
+       0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x93,0xcc,
+       0x81,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xce,
+       0xb9,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcd,0x82,0x00,0xcf,
+       0x86,0xd5,0xac,0xd4,0x5a,0xd3,0x18,0xe2,0xed,0x59,0xe1,0xd6,0x59,0x10,0x09,0x01,
+       0xff,0xce,0xbf,0xcc,0x93,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0x00,0xd2,0x28,0xd1,
+       0x12,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x93,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,
+       0x00,0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf,
+       0xcc,0x94,0xcc,0x80,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc,
+       0x81,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd3,0x18,0xe2,
+       0x17,0x5a,0xe1,0x00,0x5a,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x93,0x00,0x01,0xff,
+       0xcf,0x85,0xcc,0x94,0x00,0xd2,0x1c,0xd1,0x0d,0x10,0x04,0x00,0x00,0x01,0xff,0xcf,
+       0x85,0xcc,0x94,0x00,0x10,0x04,0x00,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcc,0x80,
+       0x00,0xd1,0x0f,0x10,0x04,0x00,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcc,0x81,0x00,
+       0x10,0x04,0x00,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcd,0x82,0x00,0xe4,0xd3,0x5a,
+       0xd3,0x18,0xe2,0x52,0x5a,0xe1,0x3b,0x5a,0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x93,
+       0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,
+       0xcf,0x89,0xcc,0x93,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,
+       0xcf,0x89,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x80,0x00,
+       0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xcf,
+       0x89,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82,
+       0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd,0x82,0x00,0xe0,0xd9,0x02,0xcf,0x86,0xe5,
+       0x91,0x01,0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb1,
+       0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d,
+       0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,
+       0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,
+       0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00,
+       0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xce,
+       0xb1,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,
+       0xce,0xb1,0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xce,0xb9,0x00,
+       0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce,
+       0xb1,0xcc,0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0xb1,
+       0xcc,0x93,0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0xce,
+       0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01,
+       0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd3,0x64,0xd2,0x30,0xd1,0x16,
+       0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,
+       0x94,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x80,0xce,0xb9,
+       0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,
+       0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,
+       0x94,0xcc,0x81,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd,0x82,
+       0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x30,
+       0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce,
+       0xb7,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x80,
+       0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,
+       0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce,
+       0xb7,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,
+       0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,
+       0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,
+       0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,
+       0xcf,0x89,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,
+       0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x81,
+       0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00,0x10,0x0d,
+       0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,
+       0x94,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89,
+       0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d,
+       0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,
+       0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,
+       0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00,
+       0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xcf,
+       0x89,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd3,0x49,0xd2,0x26,0xd1,0x12,0x10,0x09,
+       0x01,0xff,0xce,0xb1,0xcc,0x86,0x00,0x01,0xff,0xce,0xb1,0xcc,0x84,0x00,0x10,0x0b,
+       0x01,0xff,0xce,0xb1,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xce,0xb9,0x00,
+       0xd1,0x0f,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x81,0xce,0xb9,0x00,0x00,0x00,0x10,
+       0x09,0x01,0xff,0xce,0xb1,0xcd,0x82,0x00,0x01,0xff,0xce,0xb1,0xcd,0x82,0xce,0xb9,
+       0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x86,0x00,0x01,0xff,
+       0xce,0xb1,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x80,0x00,0x01,0xff,
+       0xce,0xb1,0xcc,0x81,0x00,0xe1,0xf3,0x5a,0x10,0x09,0x01,0xff,0xce,0xb1,0xce,0xb9,
+       0x00,0x01,0x00,0xcf,0x86,0xd5,0xbd,0xd4,0x7e,0xd3,0x44,0xd2,0x21,0xd1,0x0d,0x10,
+       0x04,0x01,0x00,0x01,0xff,0xc2,0xa8,0xcd,0x82,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,
+       0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xce,0xb9,0x00,0xd1,0x0f,0x10,0x0b,
+       0x01,0xff,0xce,0xb7,0xcc,0x81,0xce,0xb9,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce,
+       0xb7,0xcd,0x82,0x00,0x01,0xff,0xce,0xb7,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x24,0xd1,
+       0x12,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc,0x80,0x00,0x01,0xff,0xce,0xb5,0xcc,0x81,
+       0x00,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x80,0x00,0x01,0xff,0xce,0xb7,0xcc,0x81,
+       0x00,0xe1,0x02,0x5b,0x10,0x09,0x01,0xff,0xce,0xb7,0xce,0xb9,0x00,0x01,0xff,0xe1,
+       0xbe,0xbf,0xcc,0x80,0x00,0xd3,0x18,0xe2,0x28,0x5b,0xe1,0x11,0x5b,0x10,0x09,0x01,
+       0xff,0xce,0xb9,0xcc,0x86,0x00,0x01,0xff,0xce,0xb9,0xcc,0x84,0x00,0xe2,0x4c,0x5b,
+       0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x86,0x00,0x01,0xff,0xce,0xb9,0xcc,
+       0x84,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x80,0x00,0x01,0xff,0xce,0xb9,0xcc,
+       0x81,0x00,0xd4,0x51,0xd3,0x18,0xe2,0x6f,0x5b,0xe1,0x58,0x5b,0x10,0x09,0x01,0xff,
+       0xcf,0x85,0xcc,0x86,0x00,0x01,0xff,0xcf,0x85,0xcc,0x84,0x00,0xd2,0x24,0xd1,0x12,
+       0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x86,0x00,0x01,0xff,0xcf,0x85,0xcc,0x84,0x00,
+       0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x80,0x00,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00,
+       0xe1,0x8f,0x5b,0x10,0x09,0x01,0xff,0xcf,0x81,0xcc,0x94,0x00,0x01,0xff,0xc2,0xa8,
+       0xcc,0x80,0x00,0xd3,0x3b,0xd2,0x18,0x51,0x04,0x00,0x00,0x10,0x0b,0x01,0xff,0xcf,
+       0x89,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xce,0xb9,0x00,0xd1,0x0f,0x10,
+       0x0b,0x01,0xff,0xcf,0x89,0xcc,0x81,0xce,0xb9,0x00,0x00,0x00,0x10,0x09,0x01,0xff,
+       0xcf,0x89,0xcd,0x82,0x00,0x01,0xff,0xcf,0x89,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x24,
+       0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf,0xcc,
+       0x81,0x00,0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc,
+       0x81,0x00,0xe1,0x99,0x5b,0x10,0x09,0x01,0xff,0xcf,0x89,0xce,0xb9,0x00,0x01,0xff,
+       0xc2,0xb4,0x00,0xe0,0x0c,0x68,0xcf,0x86,0xe5,0x23,0x02,0xe4,0x25,0x01,0xe3,0x85,
+       0x5e,0xd2,0x2a,0xe1,0x5f,0x5c,0xe0,0xdd,0x5b,0xcf,0x86,0xe5,0xbb,0x5b,0x94,0x1b,
+       0xe3,0xa4,0x5b,0x92,0x14,0x91,0x10,0x10,0x08,0x01,0xff,0xe2,0x80,0x82,0x00,0x01,
+       0xff,0xe2,0x80,0x83,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd1,0xd6,0xd0,0x46,0xcf,
+       0x86,0x55,0x04,0x01,0x00,0xd4,0x29,0xd3,0x13,0x52,0x04,0x01,0x00,0x51,0x04,0x01,
+       0x00,0x10,0x07,0x01,0xff,0xcf,0x89,0x00,0x01,0x00,0x92,0x12,0x51,0x04,0x01,0x00,
+       0x10,0x06,0x01,0xff,0x6b,0x00,0x01,0xff,0x61,0xcc,0x8a,0x00,0x01,0x00,0xe3,0x25,
+       0x5d,0x92,0x10,0x51,0x04,0x01,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0x8e,0x00,0x01,
+       0x00,0x01,0x00,0xcf,0x86,0xd5,0x0a,0xe4,0x42,0x5d,0x63,0x2d,0x5d,0x06,0x00,0x94,
+       0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xb0,0x00,0x01,
+       0xff,0xe2,0x85,0xb1,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xb2,0x00,0x01,0xff,0xe2,
+       0x85,0xb3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xb4,0x00,0x01,0xff,0xe2,
+       0x85,0xb5,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xb6,0x00,0x01,0xff,0xe2,0x85,0xb7,
+       0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xb8,0x00,0x01,0xff,0xe2,
+       0x85,0xb9,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xba,0x00,0x01,0xff,0xe2,0x85,0xbb,
+       0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xbc,0x00,0x01,0xff,0xe2,0x85,0xbd,
+       0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xbe,0x00,0x01,0xff,0xe2,0x85,0xbf,0x00,0x01,
+       0x00,0xe0,0x34,0x5d,0xcf,0x86,0xe5,0x13,0x5d,0xe4,0xf2,0x5c,0xe3,0xe1,0x5c,0xe2,
+       0xd4,0x5c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x04,0xff,0xe2,0x86,0x84,0x00,
+       0xe3,0x23,0x61,0xe2,0xf0,0x60,0xd1,0x0c,0xe0,0x9d,0x60,0xcf,0x86,0x65,0x7e,0x60,
+       0x01,0x00,0xd0,0x62,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x18,
+       0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x08,0x01,0xff,0xe2,0x93,0x90,0x00,
+       0x01,0xff,0xe2,0x93,0x91,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x93,
+       0x92,0x00,0x01,0xff,0xe2,0x93,0x93,0x00,0x10,0x08,0x01,0xff,0xe2,0x93,0x94,0x00,
+       0x01,0xff,0xe2,0x93,0x95,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x93,0x96,0x00,
+       0x01,0xff,0xe2,0x93,0x97,0x00,0x10,0x08,0x01,0xff,0xe2,0x93,0x98,0x00,0x01,0xff,
+       0xe2,0x93,0x99,0x00,0xcf,0x86,0xe5,0x57,0x60,0x94,0x80,0xd3,0x40,0xd2,0x20,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0xe2,0x93,0x9a,0x00,0x01,0xff,0xe2,0x93,0x9b,0x00,0x10,
+       0x08,0x01,0xff,0xe2,0x93,0x9c,0x00,0x01,0xff,0xe2,0x93,0x9d,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0xe2,0x93,0x9e,0x00,0x01,0xff,0xe2,0x93,0x9f,0x00,0x10,0x08,0x01,
+       0xff,0xe2,0x93,0xa0,0x00,0x01,0xff,0xe2,0x93,0xa1,0x00,0xd2,0x20,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0xe2,0x93,0xa2,0x00,0x01,0xff,0xe2,0x93,0xa3,0x00,0x10,0x08,0x01,
+       0xff,0xe2,0x93,0xa4,0x00,0x01,0xff,0xe2,0x93,0xa5,0x00,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0xe2,0x93,0xa6,0x00,0x01,0xff,0xe2,0x93,0xa7,0x00,0x10,0x08,0x01,0xff,0xe2,
+       0x93,0xa8,0x00,0x01,0xff,0xe2,0x93,0xa9,0x00,0x01,0x00,0xd4,0x0c,0xe3,0x33,0x62,
+       0xe2,0x2c,0x62,0xcf,0x06,0x04,0x00,0xe3,0x0c,0x65,0xe2,0xff,0x63,0xe1,0x2e,0x02,
+       0xe0,0x84,0x01,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x08,0xff,0xe2,0xb0,0xb0,0x00,0x08,0xff,0xe2,0xb0,0xb1,0x00,0x10,0x08,
+       0x08,0xff,0xe2,0xb0,0xb2,0x00,0x08,0xff,0xe2,0xb0,0xb3,0x00,0xd1,0x10,0x10,0x08,
+       0x08,0xff,0xe2,0xb0,0xb4,0x00,0x08,0xff,0xe2,0xb0,0xb5,0x00,0x10,0x08,0x08,0xff,
+       0xe2,0xb0,0xb6,0x00,0x08,0xff,0xe2,0xb0,0xb7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x08,0xff,0xe2,0xb0,0xb8,0x00,0x08,0xff,0xe2,0xb0,0xb9,0x00,0x10,0x08,0x08,0xff,
+       0xe2,0xb0,0xba,0x00,0x08,0xff,0xe2,0xb0,0xbb,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe2,0xb0,0xbc,0x00,0x08,0xff,0xe2,0xb0,0xbd,0x00,0x10,0x08,0x08,0xff,0xe2,0xb0,
+       0xbe,0x00,0x08,0xff,0xe2,0xb0,0xbf,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x08,0xff,0xe2,0xb1,0x80,0x00,0x08,0xff,0xe2,0xb1,0x81,0x00,0x10,0x08,0x08,0xff,
+       0xe2,0xb1,0x82,0x00,0x08,0xff,0xe2,0xb1,0x83,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe2,0xb1,0x84,0x00,0x08,0xff,0xe2,0xb1,0x85,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,
+       0x86,0x00,0x08,0xff,0xe2,0xb1,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe2,0xb1,0x88,0x00,0x08,0xff,0xe2,0xb1,0x89,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,
+       0x8a,0x00,0x08,0xff,0xe2,0xb1,0x8b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe2,0xb1,
+       0x8c,0x00,0x08,0xff,0xe2,0xb1,0x8d,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,0x8e,0x00,
+       0x08,0xff,0xe2,0xb1,0x8f,0x00,0x94,0x7c,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x08,0xff,0xe2,0xb1,0x90,0x00,0x08,0xff,0xe2,0xb1,0x91,0x00,0x10,0x08,0x08,0xff,
+       0xe2,0xb1,0x92,0x00,0x08,0xff,0xe2,0xb1,0x93,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe2,0xb1,0x94,0x00,0x08,0xff,0xe2,0xb1,0x95,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,
+       0x96,0x00,0x08,0xff,0xe2,0xb1,0x97,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe2,0xb1,0x98,0x00,0x08,0xff,0xe2,0xb1,0x99,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,
+       0x9a,0x00,0x08,0xff,0xe2,0xb1,0x9b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe2,0xb1,
+       0x9c,0x00,0x08,0xff,0xe2,0xb1,0x9d,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,0x9e,0x00,
+       0x00,0x00,0x08,0x00,0xcf,0x86,0xd5,0x07,0x64,0xef,0x61,0x08,0x00,0xd4,0x63,0xd3,
+       0x32,0xd2,0x1b,0xd1,0x0c,0x10,0x08,0x09,0xff,0xe2,0xb1,0xa1,0x00,0x09,0x00,0x10,
+       0x07,0x09,0xff,0xc9,0xab,0x00,0x09,0xff,0xe1,0xb5,0xbd,0x00,0xd1,0x0b,0x10,0x07,
+       0x09,0xff,0xc9,0xbd,0x00,0x09,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xe2,0xb1,0xa8,
+       0x00,0xd2,0x18,0xd1,0x0c,0x10,0x04,0x09,0x00,0x09,0xff,0xe2,0xb1,0xaa,0x00,0x10,
+       0x04,0x09,0x00,0x09,0xff,0xe2,0xb1,0xac,0x00,0xd1,0x0b,0x10,0x04,0x09,0x00,0x0a,
+       0xff,0xc9,0x91,0x00,0x10,0x07,0x0a,0xff,0xc9,0xb1,0x00,0x0a,0xff,0xc9,0x90,0x00,
+       0xd3,0x27,0xd2,0x17,0xd1,0x0b,0x10,0x07,0x0b,0xff,0xc9,0x92,0x00,0x0a,0x00,0x10,
+       0x08,0x0a,0xff,0xe2,0xb1,0xb3,0x00,0x0a,0x00,0x91,0x0c,0x10,0x04,0x09,0x00,0x09,
+       0xff,0xe2,0xb1,0xb6,0x00,0x09,0x00,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10,
+       0x07,0x0b,0xff,0xc8,0xbf,0x00,0x0b,0xff,0xc9,0x80,0x00,0xe0,0x83,0x01,0xcf,0x86,
+       0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,
+       0x81,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x83,0x00,0x08,0x00,0xd1,0x0c,
+       0x10,0x08,0x08,0xff,0xe2,0xb2,0x85,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,
+       0x87,0x00,0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0x89,0x00,
+       0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x8b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,
+       0x08,0xff,0xe2,0xb2,0x8d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x8f,0x00,
+       0x08,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0x91,0x00,
+       0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x93,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,
+       0x08,0xff,0xe2,0xb2,0x95,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x97,0x00,
+       0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0x99,0x00,0x08,0x00,
+       0x10,0x08,0x08,0xff,0xe2,0xb2,0x9b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff,
+       0xe2,0xb2,0x9d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x9f,0x00,0x08,0x00,
+       0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa1,0x00,
+       0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa3,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,
+       0x08,0xff,0xe2,0xb2,0xa5,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa7,0x00,
+       0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa9,0x00,0x08,0x00,
+       0x10,0x08,0x08,0xff,0xe2,0xb2,0xab,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff,
+       0xe2,0xb2,0xad,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xaf,0x00,0x08,0x00,
+       0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xb1,0x00,0x08,0x00,
+       0x10,0x08,0x08,0xff,0xe2,0xb2,0xb3,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff,
+       0xe2,0xb2,0xb5,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xb7,0x00,0x08,0x00,
+       0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xb9,0x00,0x08,0x00,0x10,0x08,
+       0x08,0xff,0xe2,0xb2,0xbb,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,
+       0xbd,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xbf,0x00,0x08,0x00,0xcf,0x86,
+       0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,
+       0x81,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x83,0x00,0x08,0x00,0xd1,0x0c,
+       0x10,0x08,0x08,0xff,0xe2,0xb3,0x85,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,
+       0x87,0x00,0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0x89,0x00,
+       0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x8b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,
+       0x08,0xff,0xe2,0xb3,0x8d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x8f,0x00,
+       0x08,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0x91,0x00,
+       0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x93,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,
+       0x08,0xff,0xe2,0xb3,0x95,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x97,0x00,
+       0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0x99,0x00,0x08,0x00,
+       0x10,0x08,0x08,0xff,0xe2,0xb3,0x9b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff,
+       0xe2,0xb3,0x9d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x9f,0x00,0x08,0x00,
+       0xd4,0x3b,0xd3,0x1c,0x92,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0xa1,0x00,
+       0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0xa3,0x00,0x08,0x00,0x08,0x00,0xd2,0x10,
+       0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x0b,0xff,0xe2,0xb3,0xac,0x00,0xe1,0x3b,
+       0x5f,0x10,0x04,0x0b,0x00,0x0b,0xff,0xe2,0xb3,0xae,0x00,0xe3,0x40,0x5f,0x92,0x10,
+       0x51,0x04,0x0b,0xe6,0x10,0x08,0x0d,0xff,0xe2,0xb3,0xb3,0x00,0x0d,0x00,0x00,0x00,
+       0xe2,0x98,0x08,0xd1,0x0b,0xe0,0x11,0x67,0xcf,0x86,0xcf,0x06,0x01,0x00,0xe0,0x65,
+       0x6c,0xcf,0x86,0xe5,0xa7,0x05,0xd4,0x06,0xcf,0x06,0x04,0x00,0xd3,0x0c,0xe2,0xf8,
+       0x67,0xe1,0x8f,0x67,0xcf,0x06,0x04,0x00,0xe2,0xdb,0x01,0xe1,0x26,0x01,0xd0,0x09,
+       0xcf,0x86,0x65,0xf4,0x67,0x0a,0x00,0xcf,0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2,
+       0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a,
+       0xff,0xea,0x99,0x83,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x85,
+       0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x87,0x00,0x0a,0x00,0xd2,0x18,0xd1,
+       0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x89,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,
+       0x99,0x8b,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x8d,0x00,0x0a,
+       0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x8f,0x00,0x0a,0x00,0xd3,0x30,0xd2,0x18,0xd1,
+       0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x91,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,
+       0x99,0x93,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x95,0x00,0x0a,
+       0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x97,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,
+       0x08,0x0a,0xff,0xea,0x99,0x99,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x9b,
+       0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x9d,0x00,0x0a,0x00,0x10,
+       0x08,0x0a,0xff,0xea,0x99,0x9f,0x00,0x0a,0x00,0xe4,0x5d,0x67,0xd3,0x30,0xd2,0x18,
+       0xd1,0x0c,0x10,0x08,0x0c,0xff,0xea,0x99,0xa1,0x00,0x0c,0x00,0x10,0x08,0x0a,0xff,
+       0xea,0x99,0xa3,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0xa5,0x00,
+       0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0xa7,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,
+       0x10,0x08,0x0a,0xff,0xea,0x99,0xa9,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99,
+       0xab,0x00,0x0a,0x00,0xe1,0x0c,0x67,0x10,0x08,0x0a,0xff,0xea,0x99,0xad,0x00,0x0a,
+       0x00,0xe0,0x35,0x67,0xcf,0x86,0x95,0xab,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,
+       0x10,0x08,0x0a,0xff,0xea,0x9a,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9a,
+       0x83,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9a,0x85,0x00,0x0a,0x00,
+       0x10,0x08,0x0a,0xff,0xea,0x9a,0x87,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,
+       0x0a,0xff,0xea,0x9a,0x89,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9a,0x8b,0x00,
+       0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9a,0x8d,0x00,0x0a,0x00,0x10,0x08,
+       0x0a,0xff,0xea,0x9a,0x8f,0x00,0x0a,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,
+       0x0a,0xff,0xea,0x9a,0x91,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9a,0x93,0x00,
+       0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9a,0x95,0x00,0x0a,0x00,0x10,0x08,
+       0x0a,0xff,0xea,0x9a,0x97,0x00,0x0a,0x00,0xe2,0x92,0x66,0xd1,0x0c,0x10,0x08,0x10,
+       0xff,0xea,0x9a,0x99,0x00,0x10,0x00,0x10,0x08,0x10,0xff,0xea,0x9a,0x9b,0x00,0x10,
+       0x00,0x0b,0x00,0xe1,0x10,0x02,0xd0,0xb9,0xcf,0x86,0xd5,0x07,0x64,0x9e,0x66,0x08,
+       0x00,0xd4,0x58,0xd3,0x28,0xd2,0x10,0x51,0x04,0x09,0x00,0x10,0x08,0x0a,0xff,0xea,
+       0x9c,0xa3,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9c,0xa5,0x00,0x0a,
+       0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xa7,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,
+       0x08,0x0a,0xff,0xea,0x9c,0xa9,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xab,
+       0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9c,0xad,0x00,0x0a,0x00,0x10,
+       0x08,0x0a,0xff,0xea,0x9c,0xaf,0x00,0x0a,0x00,0xd3,0x28,0xd2,0x10,0x51,0x04,0x0a,
+       0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xb3,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,
+       0xff,0xea,0x9c,0xb5,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xb7,0x00,0x0a,
+       0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9c,0xb9,0x00,0x0a,0x00,0x10,
+       0x08,0x0a,0xff,0xea,0x9c,0xbb,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,
+       0x9c,0xbd,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xbf,0x00,0x0a,0x00,0xcf,
+       0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,
+       0x9d,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x83,0x00,0x0a,0x00,0xd1,
+       0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x85,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,
+       0x9d,0x87,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x89,
+       0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x8b,0x00,0x0a,0x00,0xd1,0x0c,0x10,
+       0x08,0x0a,0xff,0xea,0x9d,0x8d,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x8f,
+       0x00,0x0a,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x91,
+       0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x93,0x00,0x0a,0x00,0xd1,0x0c,0x10,
+       0x08,0x0a,0xff,0xea,0x9d,0x95,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x97,
+       0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x99,0x00,0x0a,
+       0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x9b,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,
+       0xff,0xea,0x9d,0x9d,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x9f,0x00,0x0a,
+       0x00,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa1,
+       0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa3,0x00,0x0a,0x00,0xd1,0x0c,0x10,
+       0x08,0x0a,0xff,0xea,0x9d,0xa5,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa7,
+       0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa9,0x00,0x0a,
+       0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xab,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,
+       0xff,0xea,0x9d,0xad,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xaf,0x00,0x0a,
+       0x00,0x53,0x04,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x04,0x0a,0x00,0x0a,0xff,0xea,
+       0x9d,0xba,0x00,0x10,0x04,0x0a,0x00,0x0a,0xff,0xea,0x9d,0xbc,0x00,0xd1,0x0c,0x10,
+       0x04,0x0a,0x00,0x0a,0xff,0xe1,0xb5,0xb9,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xbf,
+       0x00,0x0a,0x00,0xe0,0x71,0x01,0xcf,0x86,0xd5,0xa6,0xd4,0x4e,0xd3,0x30,0xd2,0x18,
+       0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9e,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,
+       0xea,0x9e,0x83,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9e,0x85,0x00,
+       0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9e,0x87,0x00,0x0a,0x00,0xd2,0x10,0x51,0x04,
+       0x0a,0x00,0x10,0x04,0x0a,0x00,0x0a,0xff,0xea,0x9e,0x8c,0x00,0xe1,0x9a,0x64,0x10,
+       0x04,0x0a,0x00,0x0c,0xff,0xc9,0xa5,0x00,0xd3,0x28,0xd2,0x18,0xd1,0x0c,0x10,0x08,
+       0x0c,0xff,0xea,0x9e,0x91,0x00,0x0c,0x00,0x10,0x08,0x0d,0xff,0xea,0x9e,0x93,0x00,
+       0x0d,0x00,0x51,0x04,0x10,0x00,0x10,0x08,0x10,0xff,0xea,0x9e,0x97,0x00,0x10,0x00,
+       0xd2,0x18,0xd1,0x0c,0x10,0x08,0x10,0xff,0xea,0x9e,0x99,0x00,0x10,0x00,0x10,0x08,
+       0x10,0xff,0xea,0x9e,0x9b,0x00,0x10,0x00,0xd1,0x0c,0x10,0x08,0x10,0xff,0xea,0x9e,
+       0x9d,0x00,0x10,0x00,0x10,0x08,0x10,0xff,0xea,0x9e,0x9f,0x00,0x10,0x00,0xd4,0x63,
+       0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0c,0xff,0xea,0x9e,0xa1,0x00,0x0c,0x00,
+       0x10,0x08,0x0c,0xff,0xea,0x9e,0xa3,0x00,0x0c,0x00,0xd1,0x0c,0x10,0x08,0x0c,0xff,
+       0xea,0x9e,0xa5,0x00,0x0c,0x00,0x10,0x08,0x0c,0xff,0xea,0x9e,0xa7,0x00,0x0c,0x00,
+       0xd2,0x1a,0xd1,0x0c,0x10,0x08,0x0c,0xff,0xea,0x9e,0xa9,0x00,0x0c,0x00,0x10,0x07,
+       0x0d,0xff,0xc9,0xa6,0x00,0x10,0xff,0xc9,0x9c,0x00,0xd1,0x0e,0x10,0x07,0x10,0xff,
+       0xc9,0xa1,0x00,0x10,0xff,0xc9,0xac,0x00,0x10,0x07,0x12,0xff,0xc9,0xaa,0x00,0x14,
+       0x00,0xd3,0x35,0xd2,0x1d,0xd1,0x0e,0x10,0x07,0x10,0xff,0xca,0x9e,0x00,0x10,0xff,
+       0xca,0x87,0x00,0x10,0x07,0x11,0xff,0xca,0x9d,0x00,0x11,0xff,0xea,0xad,0x93,0x00,
+       0xd1,0x0c,0x10,0x08,0x11,0xff,0xea,0x9e,0xb5,0x00,0x11,0x00,0x10,0x08,0x11,0xff,
+       0xea,0x9e,0xb7,0x00,0x11,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x14,0xff,0xea,0x9e,
+       0xb9,0x00,0x14,0x00,0x10,0x08,0x15,0xff,0xea,0x9e,0xbb,0x00,0x15,0x00,0xd1,0x0c,
+       0x10,0x08,0x15,0xff,0xea,0x9e,0xbd,0x00,0x15,0x00,0x10,0x08,0x15,0xff,0xea,0x9e,
+       0xbf,0x00,0x15,0x00,0xcf,0x86,0xe5,0xd4,0x63,0x94,0x2f,0x93,0x2b,0xd2,0x10,0x51,
+       0x04,0x00,0x00,0x10,0x08,0x15,0xff,0xea,0x9f,0x83,0x00,0x15,0x00,0xd1,0x0f,0x10,
+       0x08,0x15,0xff,0xea,0x9e,0x94,0x00,0x15,0xff,0xca,0x82,0x00,0x10,0x08,0x15,0xff,
+       0xe1,0xb6,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe4,0xb4,0x66,0xd3,0x1d,0xe2,
+       0x5b,0x64,0xe1,0x0a,0x64,0xe0,0xf7,0x63,0xcf,0x86,0xe5,0xd8,0x63,0x94,0x0b,0x93,
+       0x07,0x62,0xc3,0x63,0x08,0x00,0x08,0x00,0x08,0x00,0xd2,0x0f,0xe1,0x5a,0x65,0xe0,
+       0x27,0x65,0xcf,0x86,0x65,0x0c,0x65,0x0a,0x00,0xd1,0xab,0xd0,0x1a,0xcf,0x86,0xe5,
+       0x17,0x66,0xe4,0xfa,0x65,0xe3,0xe1,0x65,0xe2,0xd4,0x65,0x91,0x08,0x10,0x04,0x00,
+       0x00,0x0c,0x00,0x0c,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0xd4,0x0b,0x93,0x07,0x62,
+       0x27,0x66,0x11,0x00,0x00,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x11,0xff,
+       0xe1,0x8e,0xa0,0x00,0x11,0xff,0xe1,0x8e,0xa1,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,
+       0xa2,0x00,0x11,0xff,0xe1,0x8e,0xa3,0x00,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,
+       0xa4,0x00,0x11,0xff,0xe1,0x8e,0xa5,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xa6,0x00,
+       0x11,0xff,0xe1,0x8e,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,
+       0xa8,0x00,0x11,0xff,0xe1,0x8e,0xa9,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xaa,0x00,
+       0x11,0xff,0xe1,0x8e,0xab,0x00,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xac,0x00,
+       0x11,0xff,0xe1,0x8e,0xad,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xae,0x00,0x11,0xff,
+       0xe1,0x8e,0xaf,0x00,0xe0,0xb2,0x65,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,
+       0xd2,0x20,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb0,0x00,0x11,0xff,0xe1,0x8e,
+       0xb1,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb2,0x00,0x11,0xff,0xe1,0x8e,0xb3,0x00,
+       0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb4,0x00,0x11,0xff,0xe1,0x8e,0xb5,0x00,
+       0x10,0x08,0x11,0xff,0xe1,0x8e,0xb6,0x00,0x11,0xff,0xe1,0x8e,0xb7,0x00,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb8,0x00,0x11,0xff,0xe1,0x8e,0xb9,0x00,
+       0x10,0x08,0x11,0xff,0xe1,0x8e,0xba,0x00,0x11,0xff,0xe1,0x8e,0xbb,0x00,0xd1,0x10,
+       0x10,0x08,0x11,0xff,0xe1,0x8e,0xbc,0x00,0x11,0xff,0xe1,0x8e,0xbd,0x00,0x10,0x08,
+       0x11,0xff,0xe1,0x8e,0xbe,0x00,0x11,0xff,0xe1,0x8e,0xbf,0x00,0xd3,0x40,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8f,0x80,0x00,0x11,0xff,0xe1,0x8f,0x81,0x00,
+       0x10,0x08,0x11,0xff,0xe1,0x8f,0x82,0x00,0x11,0xff,0xe1,0x8f,0x83,0x00,0xd1,0x10,
+       0x10,0x08,0x11,0xff,0xe1,0x8f,0x84,0x00,0x11,0xff,0xe1,0x8f,0x85,0x00,0x10,0x08,
+       0x11,0xff,0xe1,0x8f,0x86,0x00,0x11,0xff,0xe1,0x8f,0x87,0x00,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x11,0xff,0xe1,0x8f,0x88,0x00,0x11,0xff,0xe1,0x8f,0x89,0x00,0x10,0x08,
+       0x11,0xff,0xe1,0x8f,0x8a,0x00,0x11,0xff,0xe1,0x8f,0x8b,0x00,0xd1,0x10,0x10,0x08,
+       0x11,0xff,0xe1,0x8f,0x8c,0x00,0x11,0xff,0xe1,0x8f,0x8d,0x00,0x10,0x08,0x11,0xff,
+       0xe1,0x8f,0x8e,0x00,0x11,0xff,0xe1,0x8f,0x8f,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8f,0x90,0x00,0x11,0xff,0xe1,0x8f,0x91,0x00,
+       0x10,0x08,0x11,0xff,0xe1,0x8f,0x92,0x00,0x11,0xff,0xe1,0x8f,0x93,0x00,0xd1,0x10,
+       0x10,0x08,0x11,0xff,0xe1,0x8f,0x94,0x00,0x11,0xff,0xe1,0x8f,0x95,0x00,0x10,0x08,
+       0x11,0xff,0xe1,0x8f,0x96,0x00,0x11,0xff,0xe1,0x8f,0x97,0x00,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x11,0xff,0xe1,0x8f,0x98,0x00,0x11,0xff,0xe1,0x8f,0x99,0x00,0x10,0x08,
+       0x11,0xff,0xe1,0x8f,0x9a,0x00,0x11,0xff,0xe1,0x8f,0x9b,0x00,0xd1,0x10,0x10,0x08,
+       0x11,0xff,0xe1,0x8f,0x9c,0x00,0x11,0xff,0xe1,0x8f,0x9d,0x00,0x10,0x08,0x11,0xff,
+       0xe1,0x8f,0x9e,0x00,0x11,0xff,0xe1,0x8f,0x9f,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x11,0xff,0xe1,0x8f,0xa0,0x00,0x11,0xff,0xe1,0x8f,0xa1,0x00,0x10,0x08,
+       0x11,0xff,0xe1,0x8f,0xa2,0x00,0x11,0xff,0xe1,0x8f,0xa3,0x00,0xd1,0x10,0x10,0x08,
+       0x11,0xff,0xe1,0x8f,0xa4,0x00,0x11,0xff,0xe1,0x8f,0xa5,0x00,0x10,0x08,0x11,0xff,
+       0xe1,0x8f,0xa6,0x00,0x11,0xff,0xe1,0x8f,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x11,0xff,0xe1,0x8f,0xa8,0x00,0x11,0xff,0xe1,0x8f,0xa9,0x00,0x10,0x08,0x11,0xff,
+       0xe1,0x8f,0xaa,0x00,0x11,0xff,0xe1,0x8f,0xab,0x00,0xd1,0x10,0x10,0x08,0x11,0xff,
+       0xe1,0x8f,0xac,0x00,0x11,0xff,0xe1,0x8f,0xad,0x00,0x10,0x08,0x11,0xff,0xe1,0x8f,
+       0xae,0x00,0x11,0xff,0xe1,0x8f,0xaf,0x00,0xd1,0x0c,0xe0,0xeb,0x63,0xcf,0x86,0xcf,
+       0x06,0x02,0xff,0xff,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,
+       0xcf,0x06,0x01,0x00,0xd4,0xae,0xd3,0x09,0xe2,0x54,0x64,0xcf,0x06,0x01,0x00,0xd2,
+       0x27,0xe1,0x1f,0x70,0xe0,0x26,0x6e,0xcf,0x86,0xe5,0x3f,0x6d,0xe4,0xce,0x6c,0xe3,
+       0x99,0x6c,0xe2,0x78,0x6c,0xe1,0x67,0x6c,0x10,0x08,0x01,0xff,0xe5,0x88,0x87,0x00,
+       0x01,0xff,0xe5,0xba,0xa6,0x00,0xe1,0x74,0x74,0xe0,0xe8,0x73,0xcf,0x86,0xe5,0x22,
+       0x73,0xd4,0x3b,0x93,0x37,0xd2,0x1d,0xd1,0x0e,0x10,0x07,0x01,0xff,0x66,0x66,0x00,
+       0x01,0xff,0x66,0x69,0x00,0x10,0x07,0x01,0xff,0x66,0x6c,0x00,0x01,0xff,0x66,0x66,
+       0x69,0x00,0xd1,0x0f,0x10,0x08,0x01,0xff,0x66,0x66,0x6c,0x00,0x01,0xff,0x73,0x74,
+       0x00,0x10,0x07,0x01,0xff,0x73,0x74,0x00,0x00,0x00,0x00,0x00,0xe3,0xc8,0x72,0xd2,
+       0x11,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0xff,0xd5,0xb4,0xd5,0xb6,0x00,
+       0xd1,0x12,0x10,0x09,0x01,0xff,0xd5,0xb4,0xd5,0xa5,0x00,0x01,0xff,0xd5,0xb4,0xd5,
+       0xab,0x00,0x10,0x09,0x01,0xff,0xd5,0xbe,0xd5,0xb6,0x00,0x01,0xff,0xd5,0xb4,0xd5,
+       0xad,0x00,0xd3,0x09,0xe2,0x40,0x74,0xcf,0x06,0x01,0x00,0xd2,0x13,0xe1,0x30,0x75,
+       0xe0,0xc1,0x74,0xcf,0x86,0xe5,0x9e,0x74,0x64,0x8d,0x74,0x06,0xff,0x00,0xe1,0x96,
+       0x75,0xe0,0x63,0x75,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x7c,
+       0xd3,0x3c,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xef,0xbd,0x81,0x00,
+       0x10,0x08,0x01,0xff,0xef,0xbd,0x82,0x00,0x01,0xff,0xef,0xbd,0x83,0x00,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xef,0xbd,0x84,0x00,0x01,0xff,0xef,0xbd,0x85,0x00,0x10,0x08,
+       0x01,0xff,0xef,0xbd,0x86,0x00,0x01,0xff,0xef,0xbd,0x87,0x00,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xef,0xbd,0x88,0x00,0x01,0xff,0xef,0xbd,0x89,0x00,0x10,0x08,
+       0x01,0xff,0xef,0xbd,0x8a,0x00,0x01,0xff,0xef,0xbd,0x8b,0x00,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xef,0xbd,0x8c,0x00,0x01,0xff,0xef,0xbd,0x8d,0x00,0x10,0x08,0x01,0xff,
+       0xef,0xbd,0x8e,0x00,0x01,0xff,0xef,0xbd,0x8f,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xef,0xbd,0x90,0x00,0x01,0xff,0xef,0xbd,0x91,0x00,0x10,0x08,
+       0x01,0xff,0xef,0xbd,0x92,0x00,0x01,0xff,0xef,0xbd,0x93,0x00,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xef,0xbd,0x94,0x00,0x01,0xff,0xef,0xbd,0x95,0x00,0x10,0x08,0x01,0xff,
+       0xef,0xbd,0x96,0x00,0x01,0xff,0xef,0xbd,0x97,0x00,0x92,0x1c,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xef,0xbd,0x98,0x00,0x01,0xff,0xef,0xbd,0x99,0x00,0x10,0x08,0x01,0xff,
+       0xef,0xbd,0x9a,0x00,0x01,0x00,0x01,0x00,0x83,0xe2,0x87,0xb3,0xe1,0x60,0xb0,0xe0,
+       0xdd,0xae,0xcf,0x86,0xe5,0x81,0x9b,0xc4,0xe3,0xc1,0x07,0xe2,0x62,0x06,0xe1,0x11,
+       0x86,0xe0,0x09,0x05,0xcf,0x86,0xe5,0xfb,0x02,0xd4,0x1c,0xe3,0x7f,0x76,0xe2,0xd6,
+       0x75,0xe1,0xb1,0x75,0xe0,0x8a,0x75,0xcf,0x86,0xe5,0x57,0x75,0x94,0x07,0x63,0x42,
+       0x75,0x07,0x00,0x07,0x00,0xe3,0x2b,0x78,0xe2,0xf0,0x77,0xe1,0x77,0x01,0xe0,0x88,
+       0x77,0xcf,0x86,0xe5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,
+       0x05,0xff,0xf0,0x90,0x90,0xa8,0x00,0x05,0xff,0xf0,0x90,0x90,0xa9,0x00,0x10,0x09,
+       0x05,0xff,0xf0,0x90,0x90,0xaa,0x00,0x05,0xff,0xf0,0x90,0x90,0xab,0x00,0xd1,0x12,
+       0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xac,0x00,0x05,0xff,0xf0,0x90,0x90,0xad,0x00,
+       0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xae,0x00,0x05,0xff,0xf0,0x90,0x90,0xaf,0x00,
+       0xd2,0x24,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb0,0x00,0x05,0xff,0xf0,
+       0x90,0x90,0xb1,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb2,0x00,0x05,0xff,0xf0,
+       0x90,0x90,0xb3,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb4,0x00,0x05,
+       0xff,0xf0,0x90,0x90,0xb5,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb6,0x00,0x05,
+       0xff,0xf0,0x90,0x90,0xb7,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x05,0xff,
+       0xf0,0x90,0x90,0xb8,0x00,0x05,0xff,0xf0,0x90,0x90,0xb9,0x00,0x10,0x09,0x05,0xff,
+       0xf0,0x90,0x90,0xba,0x00,0x05,0xff,0xf0,0x90,0x90,0xbb,0x00,0xd1,0x12,0x10,0x09,
+       0x05,0xff,0xf0,0x90,0x90,0xbc,0x00,0x05,0xff,0xf0,0x90,0x90,0xbd,0x00,0x10,0x09,
+       0x05,0xff,0xf0,0x90,0x90,0xbe,0x00,0x05,0xff,0xf0,0x90,0x90,0xbf,0x00,0xd2,0x24,
+       0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x80,0x00,0x05,0xff,0xf0,0x90,0x91,
+       0x81,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x82,0x00,0x05,0xff,0xf0,0x90,0x91,
+       0x83,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x84,0x00,0x05,0xff,0xf0,
+       0x90,0x91,0x85,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x86,0x00,0x05,0xff,0xf0,
+       0x90,0x91,0x87,0x00,0x94,0x4c,0x93,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x05,0xff,
+       0xf0,0x90,0x91,0x88,0x00,0x05,0xff,0xf0,0x90,0x91,0x89,0x00,0x10,0x09,0x05,0xff,
+       0xf0,0x90,0x91,0x8a,0x00,0x05,0xff,0xf0,0x90,0x91,0x8b,0x00,0xd1,0x12,0x10,0x09,
+       0x05,0xff,0xf0,0x90,0x91,0x8c,0x00,0x05,0xff,0xf0,0x90,0x91,0x8d,0x00,0x10,0x09,
+       0x07,0xff,0xf0,0x90,0x91,0x8e,0x00,0x07,0xff,0xf0,0x90,0x91,0x8f,0x00,0x05,0x00,
+       0x05,0x00,0xd0,0xa0,0xcf,0x86,0xd5,0x07,0x64,0x30,0x76,0x07,0x00,0xd4,0x07,0x63,
+       0x3d,0x76,0x07,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90,
+       0x93,0x98,0x00,0x12,0xff,0xf0,0x90,0x93,0x99,0x00,0x10,0x09,0x12,0xff,0xf0,0x90,
+       0x93,0x9a,0x00,0x12,0xff,0xf0,0x90,0x93,0x9b,0x00,0xd1,0x12,0x10,0x09,0x12,0xff,
+       0xf0,0x90,0x93,0x9c,0x00,0x12,0xff,0xf0,0x90,0x93,0x9d,0x00,0x10,0x09,0x12,0xff,
+       0xf0,0x90,0x93,0x9e,0x00,0x12,0xff,0xf0,0x90,0x93,0x9f,0x00,0xd2,0x24,0xd1,0x12,
+       0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa0,0x00,0x12,0xff,0xf0,0x90,0x93,0xa1,0x00,
+       0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa2,0x00,0x12,0xff,0xf0,0x90,0x93,0xa3,0x00,
+       0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa4,0x00,0x12,0xff,0xf0,0x90,0x93,
+       0xa5,0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa6,0x00,0x12,0xff,0xf0,0x90,0x93,
+       0xa7,0x00,0xcf,0x86,0xe5,0xc6,0x75,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,
+       0x09,0x12,0xff,0xf0,0x90,0x93,0xa8,0x00,0x12,0xff,0xf0,0x90,0x93,0xa9,0x00,0x10,
+       0x09,0x12,0xff,0xf0,0x90,0x93,0xaa,0x00,0x12,0xff,0xf0,0x90,0x93,0xab,0x00,0xd1,
+       0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xac,0x00,0x12,0xff,0xf0,0x90,0x93,0xad,
+       0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xae,0x00,0x12,0xff,0xf0,0x90,0x93,0xaf,
+       0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb0,0x00,0x12,0xff,
+       0xf0,0x90,0x93,0xb1,0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb2,0x00,0x12,0xff,
+       0xf0,0x90,0x93,0xb3,0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb4,0x00,
+       0x12,0xff,0xf0,0x90,0x93,0xb5,0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb6,0x00,
+       0x12,0xff,0xf0,0x90,0x93,0xb7,0x00,0x93,0x28,0x92,0x24,0xd1,0x12,0x10,0x09,0x12,
+       0xff,0xf0,0x90,0x93,0xb8,0x00,0x12,0xff,0xf0,0x90,0x93,0xb9,0x00,0x10,0x09,0x12,
+       0xff,0xf0,0x90,0x93,0xba,0x00,0x12,0xff,0xf0,0x90,0x93,0xbb,0x00,0x00,0x00,0x12,
+       0x00,0xd4,0x1f,0xe3,0xdf,0x76,0xe2,0x6a,0x76,0xe1,0x09,0x76,0xe0,0xea,0x75,0xcf,
+       0x86,0xe5,0xb7,0x75,0x94,0x0a,0xe3,0xa2,0x75,0x62,0x99,0x75,0x07,0x00,0x07,0x00,
+       0xe3,0xde,0x78,0xe2,0xaf,0x78,0xd1,0x09,0xe0,0x4c,0x78,0xcf,0x06,0x0b,0x00,0xe0,
+       0x7f,0x78,0xcf,0x86,0xe5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,
+       0x09,0x11,0xff,0xf0,0x90,0xb3,0x80,0x00,0x11,0xff,0xf0,0x90,0xb3,0x81,0x00,0x10,
+       0x09,0x11,0xff,0xf0,0x90,0xb3,0x82,0x00,0x11,0xff,0xf0,0x90,0xb3,0x83,0x00,0xd1,
+       0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x84,0x00,0x11,0xff,0xf0,0x90,0xb3,0x85,
+       0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x86,0x00,0x11,0xff,0xf0,0x90,0xb3,0x87,
+       0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x88,0x00,0x11,0xff,
+       0xf0,0x90,0xb3,0x89,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x8a,0x00,0x11,0xff,
+       0xf0,0x90,0xb3,0x8b,0x00,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x8c,0x00,
+       0x11,0xff,0xf0,0x90,0xb3,0x8d,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x8e,0x00,
+       0x11,0xff,0xf0,0x90,0xb3,0x8f,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x11,
+       0xff,0xf0,0x90,0xb3,0x90,0x00,0x11,0xff,0xf0,0x90,0xb3,0x91,0x00,0x10,0x09,0x11,
+       0xff,0xf0,0x90,0xb3,0x92,0x00,0x11,0xff,0xf0,0x90,0xb3,0x93,0x00,0xd1,0x12,0x10,
+       0x09,0x11,0xff,0xf0,0x90,0xb3,0x94,0x00,0x11,0xff,0xf0,0x90,0xb3,0x95,0x00,0x10,
+       0x09,0x11,0xff,0xf0,0x90,0xb3,0x96,0x00,0x11,0xff,0xf0,0x90,0xb3,0x97,0x00,0xd2,
+       0x24,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x98,0x00,0x11,0xff,0xf0,0x90,
+       0xb3,0x99,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x9a,0x00,0x11,0xff,0xf0,0x90,
+       0xb3,0x9b,0x00,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x9c,0x00,0x11,0xff,
+       0xf0,0x90,0xb3,0x9d,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x9e,0x00,0x11,0xff,
+       0xf0,0x90,0xb3,0x9f,0x00,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x11,
+       0xff,0xf0,0x90,0xb3,0xa0,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa1,0x00,0x10,0x09,0x11,
+       0xff,0xf0,0x90,0xb3,0xa2,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa3,0x00,0xd1,0x12,0x10,
+       0x09,0x11,0xff,0xf0,0x90,0xb3,0xa4,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa5,0x00,0x10,
+       0x09,0x11,0xff,0xf0,0x90,0xb3,0xa6,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa7,0x00,0xd2,
+       0x24,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xa8,0x00,0x11,0xff,0xf0,0x90,
+       0xb3,0xa9,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xaa,0x00,0x11,0xff,0xf0,0x90,
+       0xb3,0xab,0x00,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xac,0x00,0x11,0xff,
+       0xf0,0x90,0xb3,0xad,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xae,0x00,0x11,0xff,
+       0xf0,0x90,0xb3,0xaf,0x00,0x93,0x23,0x92,0x1f,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,
+       0x90,0xb3,0xb0,0x00,0x11,0xff,0xf0,0x90,0xb3,0xb1,0x00,0x10,0x09,0x11,0xff,0xf0,
+       0x90,0xb3,0xb2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x15,0xe4,0x91,
+       0x7b,0xe3,0x9b,0x79,0xe2,0x94,0x78,0xe1,0xe4,0x77,0xe0,0x9d,0x77,0xcf,0x06,0x0c,
+       0x00,0xe4,0xeb,0x7e,0xe3,0x44,0x7e,0xe2,0xed,0x7d,0xd1,0x0c,0xe0,0xb2,0x7d,0xcf,
+       0x86,0x65,0x93,0x7d,0x14,0x00,0xe0,0xb6,0x7d,0xcf,0x86,0x55,0x04,0x00,0x00,0xd4,
+       0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x80,0x00,
+       0x10,0xff,0xf0,0x91,0xa3,0x81,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x82,0x00,
+       0x10,0xff,0xf0,0x91,0xa3,0x83,0x00,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,
+       0x84,0x00,0x10,0xff,0xf0,0x91,0xa3,0x85,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,
+       0x86,0x00,0x10,0xff,0xf0,0x91,0xa3,0x87,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10,
+       0xff,0xf0,0x91,0xa3,0x88,0x00,0x10,0xff,0xf0,0x91,0xa3,0x89,0x00,0x10,0x09,0x10,
+       0xff,0xf0,0x91,0xa3,0x8a,0x00,0x10,0xff,0xf0,0x91,0xa3,0x8b,0x00,0xd1,0x12,0x10,
+       0x09,0x10,0xff,0xf0,0x91,0xa3,0x8c,0x00,0x10,0xff,0xf0,0x91,0xa3,0x8d,0x00,0x10,
+       0x09,0x10,0xff,0xf0,0x91,0xa3,0x8e,0x00,0x10,0xff,0xf0,0x91,0xa3,0x8f,0x00,0xd3,
+       0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x90,0x00,0x10,0xff,
+       0xf0,0x91,0xa3,0x91,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x92,0x00,0x10,0xff,
+       0xf0,0x91,0xa3,0x93,0x00,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x94,0x00,
+       0x10,0xff,0xf0,0x91,0xa3,0x95,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x96,0x00,
+       0x10,0xff,0xf0,0x91,0xa3,0x97,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,
+       0x91,0xa3,0x98,0x00,0x10,0xff,0xf0,0x91,0xa3,0x99,0x00,0x10,0x09,0x10,0xff,0xf0,
+       0x91,0xa3,0x9a,0x00,0x10,0xff,0xf0,0x91,0xa3,0x9b,0x00,0xd1,0x12,0x10,0x09,0x10,
+       0xff,0xf0,0x91,0xa3,0x9c,0x00,0x10,0xff,0xf0,0x91,0xa3,0x9d,0x00,0x10,0x09,0x10,
+       0xff,0xf0,0x91,0xa3,0x9e,0x00,0x10,0xff,0xf0,0x91,0xa3,0x9f,0x00,0xd1,0x11,0xe0,
+       0x12,0x81,0xcf,0x86,0xe5,0x09,0x81,0xe4,0xd2,0x80,0xcf,0x06,0x00,0x00,0xe0,0xdb,
+       0x82,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x09,0xe3,0x10,0x81,0xcf,0x06,
+       0x0c,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xe2,0x3b,0x82,0xe1,0x16,0x82,0xd0,0x06,
+       0xcf,0x06,0x00,0x00,0xcf,0x86,0xa5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,
+       0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa0,0x00,0x14,0xff,0xf0,0x96,0xb9,0xa1,
+       0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa2,0x00,0x14,0xff,0xf0,0x96,0xb9,0xa3,
+       0x00,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa4,0x00,0x14,0xff,0xf0,0x96,
+       0xb9,0xa5,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa6,0x00,0x14,0xff,0xf0,0x96,
+       0xb9,0xa7,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa8,0x00,
+       0x14,0xff,0xf0,0x96,0xb9,0xa9,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xaa,0x00,
+       0x14,0xff,0xf0,0x96,0xb9,0xab,0x00,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,
+       0xac,0x00,0x14,0xff,0xf0,0x96,0xb9,0xad,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,
+       0xae,0x00,0x14,0xff,0xf0,0x96,0xb9,0xaf,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,
+       0x09,0x14,0xff,0xf0,0x96,0xb9,0xb0,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb1,0x00,0x10,
+       0x09,0x14,0xff,0xf0,0x96,0xb9,0xb2,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb3,0x00,0xd1,
+       0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xb4,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb5,
+       0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xb6,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb7,
+       0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xb8,0x00,0x14,0xff,
+       0xf0,0x96,0xb9,0xb9,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xba,0x00,0x14,0xff,
+       0xf0,0x96,0xb9,0xbb,0x00,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xbc,0x00,
+       0x14,0xff,0xf0,0x96,0xb9,0xbd,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xbe,0x00,
+       0x14,0xff,0xf0,0x96,0xb9,0xbf,0x00,0x14,0x00,0xd2,0x14,0xe1,0x25,0x82,0xe0,0x1c,
+       0x82,0xcf,0x86,0xe5,0xdd,0x81,0xe4,0x9a,0x81,0xcf,0x06,0x12,0x00,0xd1,0x0b,0xe0,
+       0x51,0x83,0xcf,0x86,0xcf,0x06,0x00,0x00,0xe0,0x95,0x8b,0xcf,0x86,0xd5,0x22,0xe4,
+       0xd0,0x88,0xe3,0x93,0x88,0xe2,0x38,0x88,0xe1,0x31,0x88,0xe0,0x2a,0x88,0xcf,0x86,
+       0xe5,0xfb,0x87,0xe4,0xe2,0x87,0x93,0x07,0x62,0xd1,0x87,0x12,0xe6,0x12,0xe6,0xe4,
+       0x36,0x89,0xe3,0x2f,0x89,0xd2,0x09,0xe1,0xb8,0x88,0xcf,0x06,0x10,0x00,0xe1,0x1f,
+       0x89,0xe0,0xec,0x88,0xcf,0x86,0xe5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,
+       0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa2,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xa3,
+       0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa4,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xa5,
+       0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa6,0x00,0x12,0xff,0xf0,0x9e,
+       0xa4,0xa7,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa8,0x00,0x12,0xff,0xf0,0x9e,
+       0xa4,0xa9,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xaa,0x00,
+       0x12,0xff,0xf0,0x9e,0xa4,0xab,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xac,0x00,
+       0x12,0xff,0xf0,0x9e,0xa4,0xad,0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,
+       0xae,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xaf,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,
+       0xb0,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb1,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,
+       0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb2,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb3,0x00,0x10,
+       0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb4,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb5,0x00,0xd1,
+       0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb6,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb7,
+       0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb8,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb9,
+       0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xba,0x00,0x12,0xff,
+       0xf0,0x9e,0xa4,0xbb,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xbc,0x00,0x12,0xff,
+       0xf0,0x9e,0xa4,0xbd,0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xbe,0x00,
+       0x12,0xff,0xf0,0x9e,0xa4,0xbf,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa5,0x80,0x00,
+       0x12,0xff,0xf0,0x9e,0xa5,0x81,0x00,0x94,0x1e,0x93,0x1a,0x92,0x16,0x91,0x12,0x10,
+       0x09,0x12,0xff,0xf0,0x9e,0xa5,0x82,0x00,0x12,0xff,0xf0,0x9e,0xa5,0x83,0x00,0x12,
+       0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       /* nfdi_c0100 */
+       0x57,0x04,0x01,0x00,0xc6,0xe5,0xac,0x13,0xe4,0x41,0x0c,0xe3,0x7a,0x07,0xe2,0xf3,
+       0x01,0xc1,0xd0,0x1f,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x15,0x53,0x04,0x01,0x00,
+       0x52,0x04,0x01,0x00,0x91,0x09,0x10,0x04,0x01,0x00,0x01,0xff,0x00,0x01,0x00,0x01,
+       0x00,0xcf,0x86,0xd5,0xe4,0xd4,0x7c,0xd3,0x3c,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0x41,0xcc,0x80,0x00,0x01,0xff,0x41,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x41,
+       0xcc,0x82,0x00,0x01,0xff,0x41,0xcc,0x83,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,
+       0xcc,0x88,0x00,0x01,0xff,0x41,0xcc,0x8a,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x43,
+       0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0x80,0x00,0x01,
+       0xff,0x45,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x82,0x00,0x01,0xff,0x45,
+       0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x80,0x00,0x01,0xff,0x49,
+       0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0x82,0x00,0x01,0xff,0x49,0xcc,0x88,
+       0x00,0xd3,0x38,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x4e,0xcc,0x83,
+       0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0x80,0x00,0x01,0xff,0x4f,0xcc,0x81,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0x82,0x00,0x01,0xff,0x4f,0xcc,0x83,0x00,0x10,
+       0x08,0x01,0xff,0x4f,0xcc,0x88,0x00,0x01,0x00,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,
+       0x00,0x01,0xff,0x55,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x81,0x00,0x01,
+       0xff,0x55,0xcc,0x82,0x00,0x91,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x88,0x00,0x01,
+       0xff,0x59,0xcc,0x81,0x00,0x01,0x00,0xd4,0x7c,0xd3,0x3c,0xd2,0x20,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x61,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x81,0x00,0x10,0x08,0x01,
+       0xff,0x61,0xcc,0x82,0x00,0x01,0xff,0x61,0xcc,0x83,0x00,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0x61,0xcc,0x88,0x00,0x01,0xff,0x61,0xcc,0x8a,0x00,0x10,0x04,0x01,0x00,0x01,
+       0xff,0x63,0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0x80,
+       0x00,0x01,0xff,0x65,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x82,0x00,0x01,
+       0xff,0x65,0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x80,0x00,0x01,
+       0xff,0x69,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0x82,0x00,0x01,0xff,0x69,
+       0xcc,0x88,0x00,0xd3,0x38,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x6e,
+       0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x80,0x00,0x01,0xff,0x6f,0xcc,0x81,
+       0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x82,0x00,0x01,0xff,0x6f,0xcc,0x83,
+       0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x88,0x00,0x01,0x00,0xd2,0x1c,0xd1,0x0c,0x10,
+       0x04,0x01,0x00,0x01,0xff,0x75,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x81,
+       0x00,0x01,0xff,0x75,0xcc,0x82,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x88,
+       0x00,0x01,0xff,0x79,0xcc,0x81,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x79,0xcc,0x88,
+       0x00,0xe1,0x9a,0x03,0xe0,0xd3,0x01,0xcf,0x86,0xd5,0xf4,0xd4,0x80,0xd3,0x40,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x84,
+       0x00,0x10,0x08,0x01,0xff,0x41,0xcc,0x86,0x00,0x01,0xff,0x61,0xcc,0x86,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0xa8,0x00,0x01,0xff,0x61,0xcc,0xa8,0x00,0x10,
+       0x08,0x01,0xff,0x43,0xcc,0x81,0x00,0x01,0xff,0x63,0xcc,0x81,0x00,0xd2,0x20,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0x43,0xcc,0x82,0x00,0x01,0xff,0x63,0xcc,0x82,0x00,0x10,
+       0x08,0x01,0xff,0x43,0xcc,0x87,0x00,0x01,0xff,0x63,0xcc,0x87,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x43,0xcc,0x8c,0x00,0x01,0xff,0x63,0xcc,0x8c,0x00,0x10,0x08,0x01,
+       0xff,0x44,0xcc,0x8c,0x00,0x01,0xff,0x64,0xcc,0x8c,0x00,0xd3,0x34,0xd2,0x14,0x51,
+       0x04,0x01,0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x84,0x00,0x01,0xff,0x65,0xcc,0x84,
+       0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0x86,0x00,0x01,0xff,0x65,0xcc,0x86,
+       0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x87,0x00,0x01,0xff,0x65,0xcc,0x87,0x00,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0xa8,0x00,0x01,0xff,0x65,0xcc,0xa8,
+       0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x8c,0x00,0x01,0xff,0x65,0xcc,0x8c,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0x47,0xcc,0x82,0x00,0x01,0xff,0x67,0xcc,0x82,0x00,0x10,
+       0x08,0x01,0xff,0x47,0xcc,0x86,0x00,0x01,0xff,0x67,0xcc,0x86,0x00,0xd4,0x74,0xd3,
+       0x34,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x47,0xcc,0x87,0x00,0x01,0xff,0x67,
+       0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x47,0xcc,0xa7,0x00,0x01,0xff,0x67,0xcc,0xa7,
+       0x00,0x91,0x10,0x10,0x08,0x01,0xff,0x48,0xcc,0x82,0x00,0x01,0xff,0x68,0xcc,0x82,
+       0x00,0x01,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x83,0x00,0x01,
+       0xff,0x69,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0x84,0x00,0x01,0xff,0x69,
+       0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x86,0x00,0x01,0xff,0x69,
+       0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0xa8,0x00,0x01,0xff,0x69,0xcc,0xa8,
+       0x00,0xd3,0x30,0xd2,0x10,0x91,0x0c,0x10,0x08,0x01,0xff,0x49,0xcc,0x87,0x00,0x01,
+       0x00,0x01,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4a,0xcc,0x82,0x00,0x01,0xff,0x6a,
+       0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x4b,0xcc,0xa7,0x00,0x01,0xff,0x6b,0xcc,0xa7,
+       0x00,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x4c,0xcc,0x81,0x00,0x10,
+       0x08,0x01,0xff,0x6c,0xcc,0x81,0x00,0x01,0xff,0x4c,0xcc,0xa7,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x6c,0xcc,0xa7,0x00,0x01,0xff,0x4c,0xcc,0x8c,0x00,0x10,0x08,0x01,
+       0xff,0x6c,0xcc,0x8c,0x00,0x01,0x00,0xcf,0x86,0xd5,0xd4,0xd4,0x60,0xd3,0x30,0xd2,
+       0x10,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x4e,0xcc,0x81,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0x6e,0xcc,0x81,0x00,0x01,0xff,0x4e,0xcc,0xa7,0x00,0x10,
+       0x08,0x01,0xff,0x6e,0xcc,0xa7,0x00,0x01,0xff,0x4e,0xcc,0x8c,0x00,0xd2,0x10,0x91,
+       0x0c,0x10,0x08,0x01,0xff,0x6e,0xcc,0x8c,0x00,0x01,0x00,0x01,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x4f,0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc,0x84,0x00,0x10,0x08,0x01,
+       0xff,0x4f,0xcc,0x86,0x00,0x01,0xff,0x6f,0xcc,0x86,0x00,0xd3,0x34,0xd2,0x14,0x91,
+       0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0x8b,0x00,0x01,0xff,0x6f,0xcc,0x8b,0x00,0x01,
+       0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x52,0xcc,0x81,0x00,0x01,0xff,0x72,0xcc,0x81,
+       0x00,0x10,0x08,0x01,0xff,0x52,0xcc,0xa7,0x00,0x01,0xff,0x72,0xcc,0xa7,0x00,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x52,0xcc,0x8c,0x00,0x01,0xff,0x72,0xcc,0x8c,
+       0x00,0x10,0x08,0x01,0xff,0x53,0xcc,0x81,0x00,0x01,0xff,0x73,0xcc,0x81,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0x53,0xcc,0x82,0x00,0x01,0xff,0x73,0xcc,0x82,0x00,0x10,
+       0x08,0x01,0xff,0x53,0xcc,0xa7,0x00,0x01,0xff,0x73,0xcc,0xa7,0x00,0xd4,0x74,0xd3,
+       0x34,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x53,0xcc,0x8c,0x00,0x01,0xff,0x73,
+       0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x54,0xcc,0xa7,0x00,0x01,0xff,0x74,0xcc,0xa7,
+       0x00,0x91,0x10,0x10,0x08,0x01,0xff,0x54,0xcc,0x8c,0x00,0x01,0xff,0x74,0xcc,0x8c,
+       0x00,0x01,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x83,0x00,0x01,
+       0xff,0x75,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x84,0x00,0x01,0xff,0x75,
+       0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x86,0x00,0x01,0xff,0x75,
+       0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x8a,0x00,0x01,0xff,0x75,0xcc,0x8a,
+       0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x8b,0x00,0x01,
+       0xff,0x75,0xcc,0x8b,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0xa8,0x00,0x01,0xff,0x75,
+       0xcc,0xa8,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc,0x82,0x00,0x01,0xff,0x77,
+       0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x59,0xcc,0x82,0x00,0x01,0xff,0x79,0xcc,0x82,
+       0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x59,0xcc,0x88,0x00,0x01,0xff,0x5a,
+       0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x81,0x00,0x01,0xff,0x5a,0xcc,0x87,
+       0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x7a,0xcc,0x87,0x00,0x01,0xff,0x5a,0xcc,0x8c,
+       0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x8c,0x00,0x01,0x00,0xd0,0x4a,0xcf,0x86,0x55,
+       0x04,0x01,0x00,0xd4,0x2c,0xd3,0x18,0x92,0x14,0x91,0x10,0x10,0x08,0x01,0xff,0x4f,
+       0xcc,0x9b,0x00,0x01,0xff,0x6f,0xcc,0x9b,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,
+       0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x55,0xcc,0x9b,0x00,0x93,
+       0x14,0x92,0x10,0x91,0x0c,0x10,0x08,0x01,0xff,0x75,0xcc,0x9b,0x00,0x01,0x00,0x01,
+       0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0xb4,0xd4,0x24,0x53,0x04,0x01,0x00,0x52,
+       0x04,0x01,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x41,0xcc,0x8c,0x00,0x10,
+       0x08,0x01,0xff,0x61,0xcc,0x8c,0x00,0x01,0xff,0x49,0xcc,0x8c,0x00,0xd3,0x46,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x8c,0x00,0x01,0xff,0x4f,0xcc,0x8c,
+       0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8c,0x00,0x01,0xff,0x55,0xcc,0x8c,0x00,0xd1,
+       0x12,0x10,0x08,0x01,0xff,0x75,0xcc,0x8c,0x00,0x01,0xff,0x55,0xcc,0x88,0xcc,0x84,
+       0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x84,0x00,0x01,0xff,0x55,0xcc,0x88,
+       0xcc,0x81,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x81,
+       0x00,0x01,0xff,0x55,0xcc,0x88,0xcc,0x8c,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,
+       0xcc,0x8c,0x00,0x01,0xff,0x55,0xcc,0x88,0xcc,0x80,0x00,0xd1,0x0e,0x10,0x0a,0x01,
+       0xff,0x75,0xcc,0x88,0xcc,0x80,0x00,0x01,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x88,
+       0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x88,0xcc,0x84,0x00,0xd4,0x80,0xd3,0x3a,0xd2,
+       0x26,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0x87,0xcc,0x84,0x00,0x01,0xff,0x61,
+       0xcc,0x87,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xc3,0x86,0xcc,0x84,0x00,0x01,0xff,
+       0xc3,0xa6,0xcc,0x84,0x00,0x51,0x04,0x01,0x00,0x10,0x08,0x01,0xff,0x47,0xcc,0x8c,
+       0x00,0x01,0xff,0x67,0xcc,0x8c,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x4b,
+       0xcc,0x8c,0x00,0x01,0xff,0x6b,0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0xa8,
+       0x00,0x01,0xff,0x6f,0xcc,0xa8,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0xa8,
+       0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc,0xa8,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xc6,
+       0xb7,0xcc,0x8c,0x00,0x01,0xff,0xca,0x92,0xcc,0x8c,0x00,0xd3,0x24,0xd2,0x10,0x91,
+       0x0c,0x10,0x08,0x01,0xff,0x6a,0xcc,0x8c,0x00,0x01,0x00,0x01,0x00,0x91,0x10,0x10,
+       0x08,0x01,0xff,0x47,0xcc,0x81,0x00,0x01,0xff,0x67,0xcc,0x81,0x00,0x04,0x00,0xd2,
+       0x24,0xd1,0x10,0x10,0x08,0x04,0xff,0x4e,0xcc,0x80,0x00,0x04,0xff,0x6e,0xcc,0x80,
+       0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x8a,0xcc,0x81,0x00,0x01,0xff,0x61,0xcc,0x8a,
+       0xcc,0x81,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xc3,0x86,0xcc,0x81,0x00,0x01,0xff,
+       0xc3,0xa6,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xc3,0x98,0xcc,0x81,0x00,0x01,0xff,
+       0xc3,0xb8,0xcc,0x81,0x00,0xe2,0x07,0x02,0xe1,0xae,0x01,0xe0,0x93,0x01,0xcf,0x86,
+       0xd5,0xf4,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc,
+       0x8f,0x00,0x01,0xff,0x61,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x41,0xcc,0x91,0x00,
+       0x01,0xff,0x61,0xcc,0x91,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0x8f,0x00,
+       0x01,0xff,0x65,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x91,0x00,0x01,0xff,
+       0x65,0xcc,0x91,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x8f,0x00,
+       0x01,0xff,0x69,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0x91,0x00,0x01,0xff,
+       0x69,0xcc,0x91,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0x8f,0x00,0x01,0xff,
+       0x6f,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0x91,0x00,0x01,0xff,0x6f,0xcc,
+       0x91,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x52,0xcc,0x8f,0x00,
+       0x01,0xff,0x72,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x52,0xcc,0x91,0x00,0x01,0xff,
+       0x72,0xcc,0x91,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x8f,0x00,0x01,0xff,
+       0x75,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x91,0x00,0x01,0xff,0x75,0xcc,
+       0x91,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x04,0xff,0x53,0xcc,0xa6,0x00,0x04,0xff,
+       0x73,0xcc,0xa6,0x00,0x10,0x08,0x04,0xff,0x54,0xcc,0xa6,0x00,0x04,0xff,0x74,0xcc,
+       0xa6,0x00,0x51,0x04,0x04,0x00,0x10,0x08,0x04,0xff,0x48,0xcc,0x8c,0x00,0x04,0xff,
+       0x68,0xcc,0x8c,0x00,0xd4,0x68,0xd3,0x20,0xd2,0x0c,0x91,0x08,0x10,0x04,0x06,0x00,
+       0x07,0x00,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x08,0x04,0xff,0x41,0xcc,0x87,0x00,
+       0x04,0xff,0x61,0xcc,0x87,0x00,0xd2,0x24,0xd1,0x10,0x10,0x08,0x04,0xff,0x45,0xcc,
+       0xa7,0x00,0x04,0xff,0x65,0xcc,0xa7,0x00,0x10,0x0a,0x04,0xff,0x4f,0xcc,0x88,0xcc,
+       0x84,0x00,0x04,0xff,0x6f,0xcc,0x88,0xcc,0x84,0x00,0xd1,0x14,0x10,0x0a,0x04,0xff,
+       0x4f,0xcc,0x83,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc,0x83,0xcc,0x84,0x00,0x10,0x08,
+       0x04,0xff,0x4f,0xcc,0x87,0x00,0x04,0xff,0x6f,0xcc,0x87,0x00,0x93,0x30,0xd2,0x24,
+       0xd1,0x14,0x10,0x0a,0x04,0xff,0x4f,0xcc,0x87,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc,
+       0x87,0xcc,0x84,0x00,0x10,0x08,0x04,0xff,0x59,0xcc,0x84,0x00,0x04,0xff,0x79,0xcc,
+       0x84,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x08,0x00,0x08,0x00,0xcf,0x86,
+       0x95,0x14,0x94,0x10,0x93,0x0c,0x92,0x08,0x11,0x04,0x08,0x00,0x09,0x00,0x09,0x00,
+       0x09,0x00,0x01,0x00,0x01,0x00,0xd0,0x22,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x18,
+       0x53,0x04,0x01,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x04,0x00,
+       0x11,0x04,0x04,0x00,0x07,0x00,0x01,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x01,0x00,
+       0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,
+       0x04,0x00,0x94,0x18,0x53,0x04,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x04,0x00,
+       0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x07,0x00,0x07,0x00,0xe1,0x35,0x01,0xd0,
+       0x72,0xcf,0x86,0xd5,0x24,0x54,0x04,0x01,0xe6,0xd3,0x10,0x52,0x04,0x01,0xe6,0x91,
+       0x08,0x10,0x04,0x01,0xe6,0x01,0xe8,0x01,0xdc,0x92,0x0c,0x51,0x04,0x01,0xdc,0x10,
+       0x04,0x01,0xe8,0x01,0xd8,0x01,0xdc,0xd4,0x2c,0xd3,0x1c,0xd2,0x10,0xd1,0x08,0x10,
+       0x04,0x01,0xdc,0x01,0xca,0x10,0x04,0x01,0xca,0x01,0xdc,0x51,0x04,0x01,0xdc,0x10,
+       0x04,0x01,0xdc,0x01,0xca,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0xca,0x01,0xdc,0x01,
+       0xdc,0x01,0xdc,0xd3,0x08,0x12,0x04,0x01,0xdc,0x01,0x01,0xd2,0x0c,0x91,0x08,0x10,
+       0x04,0x01,0x01,0x01,0xdc,0x01,0xdc,0x91,0x08,0x10,0x04,0x01,0xdc,0x01,0xe6,0x01,
+       0xe6,0xcf,0x86,0xd5,0x7f,0xd4,0x47,0xd3,0x2e,0xd2,0x19,0xd1,0x0e,0x10,0x07,0x01,
+       0xff,0xcc,0x80,0x00,0x01,0xff,0xcc,0x81,0x00,0x10,0x04,0x01,0xe6,0x01,0xff,0xcc,
+       0x93,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xcc,0x88,0xcc,0x81,0x00,0x01,0xf0,0x10,
+       0x04,0x04,0xe6,0x04,0xdc,0xd2,0x08,0x11,0x04,0x04,0xdc,0x04,0xe6,0xd1,0x08,0x10,
+       0x04,0x04,0xe6,0x04,0xdc,0x10,0x04,0x04,0xdc,0x06,0xff,0x00,0xd3,0x18,0xd2,0x0c,
+       0x51,0x04,0x07,0xe6,0x10,0x04,0x07,0xe6,0x07,0xdc,0x51,0x04,0x07,0xdc,0x10,0x04,
+       0x07,0xdc,0x07,0xe6,0xd2,0x10,0xd1,0x08,0x10,0x04,0x08,0xe8,0x08,0xdc,0x10,0x04,
+       0x08,0xdc,0x08,0xe6,0xd1,0x08,0x10,0x04,0x08,0xe9,0x07,0xea,0x10,0x04,0x07,0xea,
+       0x07,0xe9,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x01,0xea,0x10,0x04,0x04,0xe9,
+       0x06,0xe6,0x06,0xe6,0x06,0xe6,0xd3,0x13,0x52,0x04,0x0a,0x00,0x91,0x0b,0x10,0x07,
+       0x01,0xff,0xca,0xb9,0x00,0x01,0x00,0x0a,0x00,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,
+       0x04,0x01,0x00,0x09,0x00,0x51,0x04,0x09,0x00,0x10,0x06,0x01,0xff,0x3b,0x00,0x10,
+       0x00,0xd0,0xe1,0xcf,0x86,0xd5,0x7a,0xd4,0x5f,0xd3,0x21,0x52,0x04,0x00,0x00,0xd1,
+       0x0d,0x10,0x04,0x01,0x00,0x01,0xff,0xc2,0xa8,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,
+       0xce,0x91,0xcc,0x81,0x00,0x01,0xff,0xc2,0xb7,0x00,0xd2,0x1f,0xd1,0x12,0x10,0x09,
+       0x01,0xff,0xce,0x95,0xcc,0x81,0x00,0x01,0xff,0xce,0x97,0xcc,0x81,0x00,0x10,0x09,
+       0x01,0xff,0xce,0x99,0xcc,0x81,0x00,0x00,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xce,
+       0x9f,0xcc,0x81,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xa5,0xcc,0x81,0x00,0x01,
+       0xff,0xce,0xa9,0xcc,0x81,0x00,0x93,0x17,0x92,0x13,0x91,0x0f,0x10,0x0b,0x01,0xff,
+       0xce,0xb9,0xcc,0x88,0xcc,0x81,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,
+       0x4a,0xd3,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x01,
+       0x00,0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,0xce,0x99,0xcc,0x88,0x00,
+       0x01,0xff,0xce,0xa5,0xcc,0x88,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,
+       0x81,0x00,0x01,0xff,0xce,0xb5,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,
+       0x81,0x00,0x01,0xff,0xce,0xb9,0xcc,0x81,0x00,0x93,0x17,0x92,0x13,0x91,0x0f,0x10,
+       0x0b,0x01,0xff,0xcf,0x85,0xcc,0x88,0xcc,0x81,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+       0x01,0x00,0xcf,0x86,0xd5,0x7b,0xd4,0x39,0x53,0x04,0x01,0x00,0xd2,0x16,0x51,0x04,
+       0x01,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x88,0x00,0x01,0xff,0xcf,0x85,0xcc,
+       0x88,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00,0x01,0xff,0xcf,
+       0x85,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x81,0x00,0x0a,0x00,0xd3,
+       0x26,0xd2,0x11,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xcf,0x92,0xcc,
+       0x81,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xcf,0x92,0xcc,0x88,0x00,0x01,0x00,0x10,
+       0x04,0x01,0x00,0x04,0x00,0xd2,0x0c,0x51,0x04,0x06,0x00,0x10,0x04,0x01,0x00,0x04,
+       0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x10,0x04,0x01,0x00,0x04,0x00,0xd4,
+       0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x01,0x00,0x01,
+       0x00,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x06,
+       0x00,0x07,0x00,0x12,0x04,0x07,0x00,0x08,0x00,0xe3,0x47,0x04,0xe2,0xbe,0x02,0xe1,
+       0x07,0x01,0xd0,0x8b,0xcf,0x86,0xd5,0x6c,0xd4,0x53,0xd3,0x30,0xd2,0x1f,0xd1,0x12,
+       0x10,0x09,0x04,0xff,0xd0,0x95,0xcc,0x80,0x00,0x01,0xff,0xd0,0x95,0xcc,0x88,0x00,
+       0x10,0x04,0x01,0x00,0x01,0xff,0xd0,0x93,0xcc,0x81,0x00,0x51,0x04,0x01,0x00,0x10,
+       0x04,0x01,0x00,0x01,0xff,0xd0,0x86,0xcc,0x88,0x00,0x52,0x04,0x01,0x00,0xd1,0x12,
+       0x10,0x09,0x01,0xff,0xd0,0x9a,0xcc,0x81,0x00,0x04,0xff,0xd0,0x98,0xcc,0x80,0x00,
+       0x10,0x09,0x01,0xff,0xd0,0xa3,0xcc,0x86,0x00,0x01,0x00,0x53,0x04,0x01,0x00,0x92,
+       0x11,0x91,0x0d,0x10,0x04,0x01,0x00,0x01,0xff,0xd0,0x98,0xcc,0x86,0x00,0x01,0x00,
+       0x01,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x92,0x11,0x91,0x0d,0x10,0x04,
+       0x01,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x86,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,
+       0x57,0x54,0x04,0x01,0x00,0xd3,0x30,0xd2,0x1f,0xd1,0x12,0x10,0x09,0x04,0xff,0xd0,
+       0xb5,0xcc,0x80,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x88,0x00,0x10,0x04,0x01,0x00,0x01,
+       0xff,0xd0,0xb3,0xcc,0x81,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,
+       0xd1,0x96,0xcc,0x88,0x00,0x52,0x04,0x01,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,
+       0xba,0xcc,0x81,0x00,0x04,0xff,0xd0,0xb8,0xcc,0x80,0x00,0x10,0x09,0x01,0xff,0xd1,
+       0x83,0xcc,0x86,0x00,0x01,0x00,0x54,0x04,0x01,0x00,0x93,0x1a,0x52,0x04,0x01,0x00,
+       0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,0xd1,0xb4,0xcc,0x8f,0x00,0x01,0xff,0xd1,
+       0xb5,0xcc,0x8f,0x00,0x01,0x00,0xd0,0x2e,0xcf,0x86,0x95,0x28,0x94,0x24,0xd3,0x18,
+       0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xe6,0x51,0x04,0x01,0xe6,
+       0x10,0x04,0x01,0xe6,0x0a,0xe6,0x92,0x08,0x11,0x04,0x04,0x00,0x06,0x00,0x04,0x00,
+       0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0xbe,0xd4,0x4a,0xd3,0x2a,0xd2,0x1a,0xd1,0x0d,
+       0x10,0x04,0x01,0x00,0x01,0xff,0xd0,0x96,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0,
+       0xb6,0xcc,0x86,0x00,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x10,0x04,
+       0x06,0x00,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x10,0x04,
+       0x06,0x00,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x10,0x04,0x06,0x00,
+       0x09,0x00,0xd3,0x3a,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0x90,0xcc,0x86,
+       0x00,0x01,0xff,0xd0,0xb0,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0,0x90,0xcc,0x88,
+       0x00,0x01,0xff,0xd0,0xb0,0xcc,0x88,0x00,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,
+       0xd0,0x95,0xcc,0x86,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x86,0x00,0xd2,0x16,0x51,0x04,
+       0x01,0x00,0x10,0x09,0x01,0xff,0xd3,0x98,0xcc,0x88,0x00,0x01,0xff,0xd3,0x99,0xcc,
+       0x88,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0x96,0xcc,0x88,0x00,0x01,0xff,0xd0,
+       0xb6,0xcc,0x88,0x00,0x10,0x09,0x01,0xff,0xd0,0x97,0xcc,0x88,0x00,0x01,0xff,0xd0,
+       0xb7,0xcc,0x88,0x00,0xd4,0x74,0xd3,0x3a,0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09,
+       0x01,0xff,0xd0,0x98,0xcc,0x84,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x84,0x00,0xd1,0x12,
+       0x10,0x09,0x01,0xff,0xd0,0x98,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x88,0x00,
+       0x10,0x09,0x01,0xff,0xd0,0x9e,0xcc,0x88,0x00,0x01,0xff,0xd0,0xbe,0xcc,0x88,0x00,
+       0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,0xd3,0xa8,0xcc,0x88,0x00,0x01,
+       0xff,0xd3,0xa9,0xcc,0x88,0x00,0xd1,0x12,0x10,0x09,0x04,0xff,0xd0,0xad,0xcc,0x88,
+       0x00,0x04,0xff,0xd1,0x8d,0xcc,0x88,0x00,0x10,0x09,0x01,0xff,0xd0,0xa3,0xcc,0x84,
+       0x00,0x01,0xff,0xd1,0x83,0xcc,0x84,0x00,0xd3,0x3a,0xd2,0x24,0xd1,0x12,0x10,0x09,
+       0x01,0xff,0xd0,0xa3,0xcc,0x88,0x00,0x01,0xff,0xd1,0x83,0xcc,0x88,0x00,0x10,0x09,
+       0x01,0xff,0xd0,0xa3,0xcc,0x8b,0x00,0x01,0xff,0xd1,0x83,0xcc,0x8b,0x00,0x91,0x12,
+       0x10,0x09,0x01,0xff,0xd0,0xa7,0xcc,0x88,0x00,0x01,0xff,0xd1,0x87,0xcc,0x88,0x00,
+       0x08,0x00,0x92,0x16,0x91,0x12,0x10,0x09,0x01,0xff,0xd0,0xab,0xcc,0x88,0x00,0x01,
+       0xff,0xd1,0x8b,0xcc,0x88,0x00,0x09,0x00,0x09,0x00,0xd1,0x74,0xd0,0x36,0xcf,0x86,
+       0xd5,0x10,0x54,0x04,0x06,0x00,0x93,0x08,0x12,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,
+       0xd4,0x10,0x93,0x0c,0x52,0x04,0x0a,0x00,0x11,0x04,0x0b,0x00,0x0c,0x00,0x10,0x00,
+       0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+       0x01,0x00,0xcf,0x86,0xd5,0x24,0x54,0x04,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00,
+       0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,
+       0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x14,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0xba,
+       0xcf,0x86,0xd5,0x4c,0xd4,0x24,0x53,0x04,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,
+       0x14,0x00,0x01,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,
+       0x10,0x00,0x10,0x04,0x10,0x00,0x0d,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,
+       0x00,0x00,0x02,0xdc,0x02,0xe6,0x51,0x04,0x02,0xe6,0x10,0x04,0x02,0xdc,0x02,0xe6,
+       0x92,0x0c,0x51,0x04,0x02,0xe6,0x10,0x04,0x02,0xde,0x02,0xdc,0x02,0xe6,0xd4,0x2c,
+       0xd3,0x10,0x92,0x0c,0x51,0x04,0x02,0xe6,0x10,0x04,0x08,0xdc,0x02,0xdc,0x02,0xdc,
+       0xd2,0x0c,0x51,0x04,0x02,0xe6,0x10,0x04,0x02,0xdc,0x02,0xe6,0xd1,0x08,0x10,0x04,
+       0x02,0xe6,0x02,0xde,0x10,0x04,0x02,0xe4,0x02,0xe6,0xd3,0x20,0xd2,0x10,0xd1,0x08,
+       0x10,0x04,0x01,0x0a,0x01,0x0b,0x10,0x04,0x01,0x0c,0x01,0x0d,0xd1,0x08,0x10,0x04,
+       0x01,0x0e,0x01,0x0f,0x10,0x04,0x01,0x10,0x01,0x11,0xd2,0x10,0xd1,0x08,0x10,0x04,
+       0x01,0x12,0x01,0x13,0x10,0x04,0x09,0x13,0x01,0x14,0xd1,0x08,0x10,0x04,0x01,0x15,
+       0x01,0x16,0x10,0x04,0x01,0x00,0x01,0x17,0xcf,0x86,0xd5,0x28,0x94,0x24,0x93,0x20,
+       0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x01,0x18,0x10,0x04,0x01,0x19,0x01,0x00,
+       0xd1,0x08,0x10,0x04,0x02,0xe6,0x08,0xdc,0x10,0x04,0x08,0x00,0x08,0x12,0x00,0x00,
+       0x01,0x00,0xd4,0x1c,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,
+       0x01,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x93,0x10,
+       0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0xe2,0xfb,0x01,0xe1,0x2b,0x01,0xd0,0xa8,0xcf,0x86,0xd5,0x55,0xd4,0x28,0xd3,0x10,
+       0x52,0x04,0x07,0x00,0x91,0x08,0x10,0x04,0x0d,0x00,0x10,0x00,0x0a,0x00,0xd2,0x0c,
+       0x51,0x04,0x0a,0x00,0x10,0x04,0x0a,0x00,0x08,0x00,0x91,0x08,0x10,0x04,0x01,0x00,
+       0x07,0x00,0x07,0x00,0xd3,0x0c,0x52,0x04,0x07,0xe6,0x11,0x04,0x07,0xe6,0x0a,0xe6,
+       0xd2,0x10,0xd1,0x08,0x10,0x04,0x0a,0x1e,0x0a,0x1f,0x10,0x04,0x0a,0x20,0x01,0x00,
+       0xd1,0x09,0x10,0x05,0x0f,0xff,0x00,0x00,0x00,0x10,0x04,0x08,0x00,0x01,0x00,0xd4,
+       0x3d,0x93,0x39,0xd2,0x1a,0xd1,0x08,0x10,0x04,0x0c,0x00,0x01,0x00,0x10,0x09,0x01,
+       0xff,0xd8,0xa7,0xd9,0x93,0x00,0x01,0xff,0xd8,0xa7,0xd9,0x94,0x00,0xd1,0x12,0x10,
+       0x09,0x01,0xff,0xd9,0x88,0xd9,0x94,0x00,0x01,0xff,0xd8,0xa7,0xd9,0x95,0x00,0x10,
+       0x09,0x01,0xff,0xd9,0x8a,0xd9,0x94,0x00,0x01,0x00,0x01,0x00,0x53,0x04,0x01,0x00,
+       0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x0a,0x00,0x0a,0x00,0xcf,0x86,
+       0xd5,0x5c,0xd4,0x20,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,
+       0x01,0x00,0x01,0x1b,0xd1,0x08,0x10,0x04,0x01,0x1c,0x01,0x1d,0x10,0x04,0x01,0x1e,
+       0x01,0x1f,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x20,0x01,0x21,0x10,0x04,
+       0x01,0x22,0x04,0xe6,0xd1,0x08,0x10,0x04,0x04,0xe6,0x04,0xdc,0x10,0x04,0x07,0xdc,
+       0x07,0xe6,0xd2,0x0c,0x91,0x08,0x10,0x04,0x07,0xe6,0x08,0xe6,0x08,0xe6,0xd1,0x08,
+       0x10,0x04,0x08,0xdc,0x08,0xe6,0x10,0x04,0x08,0xe6,0x0c,0xdc,0xd4,0x10,0x53,0x04,
+       0x01,0x00,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x06,0x00,0x93,0x10,0x92,0x0c,
+       0x91,0x08,0x10,0x04,0x01,0x23,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x22,
+       0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x08,
+       0x11,0x04,0x04,0x00,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x04,0x00,
+       0xcf,0x86,0xd5,0x5b,0xd4,0x2e,0xd3,0x1e,0x92,0x1a,0xd1,0x0d,0x10,0x09,0x01,0xff,
+       0xdb,0x95,0xd9,0x94,0x00,0x01,0x00,0x10,0x09,0x01,0xff,0xdb,0x81,0xd9,0x94,0x00,
+       0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,
+       0x04,0x00,0xd3,0x19,0xd2,0x11,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,
+       0xdb,0x92,0xd9,0x94,0x00,0x11,0x04,0x01,0x00,0x01,0xe6,0x52,0x04,0x01,0xe6,0xd1,
+       0x08,0x10,0x04,0x01,0xe6,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xe6,0xd4,0x38,0xd3,
+       0x1c,0xd2,0x0c,0x51,0x04,0x01,0xe6,0x10,0x04,0x01,0xe6,0x01,0xdc,0xd1,0x08,0x10,
+       0x04,0x01,0xe6,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xe6,0xd2,0x10,0xd1,0x08,0x10,
+       0x04,0x01,0xe6,0x01,0x00,0x10,0x04,0x01,0xdc,0x01,0xe6,0x91,0x08,0x10,0x04,0x01,
+       0xe6,0x01,0xdc,0x07,0x00,0x53,0x04,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x04,
+       0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x07,0x00,0xd1,0xc8,0xd0,0x76,0xcf,
+       0x86,0xd5,0x28,0xd4,0x14,0x53,0x04,0x04,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,
+       0x00,0x10,0x04,0x00,0x00,0x04,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x04,
+       0x00,0x04,0x24,0x04,0x00,0x04,0x00,0x04,0x00,0xd4,0x14,0x53,0x04,0x04,0x00,0x52,
+       0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x07,0x00,0x07,0x00,0xd3,0x1c,0xd2,
+       0x0c,0x91,0x08,0x10,0x04,0x04,0xe6,0x04,0xdc,0x04,0xe6,0xd1,0x08,0x10,0x04,0x04,
+       0xdc,0x04,0xe6,0x10,0x04,0x04,0xe6,0x04,0xdc,0xd2,0x0c,0x51,0x04,0x04,0xdc,0x10,
+       0x04,0x04,0xe6,0x04,0xdc,0xd1,0x08,0x10,0x04,0x04,0xdc,0x04,0xe6,0x10,0x04,0x04,
+       0xdc,0x04,0xe6,0xcf,0x86,0xd5,0x3c,0x94,0x38,0xd3,0x1c,0xd2,0x0c,0x51,0x04,0x04,
+       0xe6,0x10,0x04,0x04,0xdc,0x04,0xe6,0xd1,0x08,0x10,0x04,0x04,0xdc,0x04,0xe6,0x10,
+       0x04,0x04,0xdc,0x04,0xe6,0xd2,0x10,0xd1,0x08,0x10,0x04,0x04,0xdc,0x04,0xe6,0x10,
+       0x04,0x04,0xe6,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00,0x08,
+       0x00,0x94,0x10,0x53,0x04,0x08,0x00,0x52,0x04,0x08,0x00,0x11,0x04,0x08,0x00,0x0a,
+       0x00,0x0a,0x00,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00,0x93,
+       0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0xcf,0x86,0x55,0x04,0x09,0x00,0xd4,0x14,0x53,0x04,0x09,0x00,0x92,0x0c,0x51,
+       0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x09,0xe6,0x09,0xe6,0xd3,0x10,0x92,0x0c,0x51,
+       0x04,0x09,0xe6,0x10,0x04,0x09,0xdc,0x09,0xe6,0x09,0x00,0xd2,0x0c,0x51,0x04,0x09,
+       0x00,0x10,0x04,0x09,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x14,0xdc,0x14,
+       0x00,0xe4,0xf8,0x57,0xe3,0x45,0x3f,0xe2,0xf4,0x3e,0xe1,0xc7,0x2c,0xe0,0x21,0x10,
+       0xcf,0x86,0xc5,0xe4,0x80,0x08,0xe3,0xcb,0x03,0xe2,0x61,0x01,0xd1,0x94,0xd0,0x5a,
+       0xcf,0x86,0xd5,0x20,0x54,0x04,0x0b,0x00,0xd3,0x0c,0x52,0x04,0x0b,0x00,0x11,0x04,
+       0x0b,0x00,0x0b,0xe6,0x92,0x0c,0x51,0x04,0x0b,0xe6,0x10,0x04,0x0b,0x00,0x0b,0xe6,
+       0x0b,0xe6,0xd4,0x24,0xd3,0x10,0x52,0x04,0x0b,0xe6,0x91,0x08,0x10,0x04,0x0b,0x00,
+       0x0b,0xe6,0x0b,0xe6,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0xe6,0x0b,0xe6,
+       0x11,0x04,0x0b,0xe6,0x00,0x00,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,
+       0x0b,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0xcf,0x86,0xd5,0x20,0x54,0x04,0x0c,0x00,
+       0x53,0x04,0x0c,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x0c,0xdc,0x0c,0xdc,
+       0x51,0x04,0x00,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x94,0x14,0x53,0x04,0x13,0x00,
+       0x92,0x0c,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0xd0,0x4a,0xcf,0x86,0x55,0x04,0x00,0x00,0xd4,0x20,0xd3,0x10,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x0d,0x00,0x10,0x00,0x0d,0x00,0x0d,0x00,0x52,0x04,0x0d,0x00,0x91,0x08,
+       0x10,0x04,0x0d,0x00,0x10,0x00,0x10,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x10,0x00,
+       0x10,0x04,0x10,0x00,0x11,0x00,0x91,0x08,0x10,0x04,0x11,0x00,0x00,0x00,0x12,0x00,
+       0x52,0x04,0x12,0x00,0x11,0x04,0x12,0x00,0x00,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,
+       0x00,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x14,0xdc,
+       0x12,0xe6,0x12,0xe6,0xd4,0x30,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x12,0xe6,0x10,0x04,
+       0x12,0x00,0x11,0xdc,0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xdc,0x0d,0xe6,0xd2,0x0c,
+       0x91,0x08,0x10,0x04,0x0d,0xe6,0x0d,0xdc,0x0d,0xe6,0x91,0x08,0x10,0x04,0x0d,0xe6,
+       0x0d,0xdc,0x0d,0xdc,0xd3,0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0d,0x1b,0x0d,0x1c,
+       0x10,0x04,0x0d,0x1d,0x0d,0xe6,0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xdc,0x0d,0xe6,
+       0xd2,0x10,0xd1,0x08,0x10,0x04,0x0d,0xe6,0x0d,0xdc,0x10,0x04,0x0d,0xdc,0x0d,0xe6,
+       0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xe6,0x10,0xe6,0xe1,0x3a,0x01,0xd0,0x77,0xcf,
+       0x86,0xd5,0x20,0x94,0x1c,0x93,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x01,
+       0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x07,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,
+       0x00,0xd4,0x1b,0x53,0x04,0x01,0x00,0x92,0x13,0x91,0x0f,0x10,0x04,0x01,0x00,0x01,
+       0xff,0xe0,0xa4,0xa8,0xe0,0xa4,0xbc,0x00,0x01,0x00,0x01,0x00,0xd3,0x26,0xd2,0x13,
+       0x91,0x0f,0x10,0x04,0x01,0x00,0x01,0xff,0xe0,0xa4,0xb0,0xe0,0xa4,0xbc,0x00,0x01,
+       0x00,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xa4,0xb3,0xe0,0xa4,0xbc,0x00,0x01,0x00,
+       0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x0c,0x00,0x91,0x08,0x10,0x04,0x01,0x07,
+       0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x8c,0xd4,0x18,0x53,0x04,0x01,0x00,0x52,0x04,
+       0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x01,0x09,0x10,0x04,0x0b,0x00,0x0c,0x00,
+       0xd3,0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x01,0xe6,0x10,0x04,0x01,0xdc,
+       0x01,0xe6,0x91,0x08,0x10,0x04,0x01,0xe6,0x0b,0x00,0x0c,0x00,0xd2,0x2c,0xd1,0x16,
+       0x10,0x0b,0x01,0xff,0xe0,0xa4,0x95,0xe0,0xa4,0xbc,0x00,0x01,0xff,0xe0,0xa4,0x96,
+       0xe0,0xa4,0xbc,0x00,0x10,0x0b,0x01,0xff,0xe0,0xa4,0x97,0xe0,0xa4,0xbc,0x00,0x01,
+       0xff,0xe0,0xa4,0x9c,0xe0,0xa4,0xbc,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe0,0xa4,
+       0xa1,0xe0,0xa4,0xbc,0x00,0x01,0xff,0xe0,0xa4,0xa2,0xe0,0xa4,0xbc,0x00,0x10,0x0b,
+       0x01,0xff,0xe0,0xa4,0xab,0xe0,0xa4,0xbc,0x00,0x01,0xff,0xe0,0xa4,0xaf,0xe0,0xa4,
+       0xbc,0x00,0x54,0x04,0x01,0x00,0xd3,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,
+       0x0a,0x00,0x10,0x04,0x0a,0x00,0x0c,0x00,0x0c,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,
+       0x10,0x00,0x0b,0x00,0x10,0x04,0x0b,0x00,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x00,
+       0x08,0x00,0x09,0x00,0xd0,0x86,0xcf,0x86,0xd5,0x44,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,
+       0x91,0x08,0x10,0x04,0x10,0x00,0x01,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,
+       0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,
+       0x10,0x04,0x00,0x00,0x01,0x00,0x93,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,
+       0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,
+       0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,
+       0xd3,0x18,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00,
+       0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,
+       0x91,0x08,0x10,0x04,0x01,0x07,0x07,0x00,0x01,0x00,0xcf,0x86,0xd5,0x7b,0xd4,0x42,
+       0xd3,0x14,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,
+       0x00,0x00,0x01,0x00,0xd2,0x17,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,
+       0x00,0x00,0x01,0xff,0xe0,0xa7,0x87,0xe0,0xa6,0xbe,0x00,0xd1,0x0f,0x10,0x0b,0x01,
+       0xff,0xe0,0xa7,0x87,0xe0,0xa7,0x97,0x00,0x01,0x09,0x10,0x04,0x08,0x00,0x00,0x00,
+       0xd3,0x10,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,
+       0x52,0x04,0x00,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe0,0xa6,0xa1,0xe0,0xa6,0xbc,
+       0x00,0x01,0xff,0xe0,0xa6,0xa2,0xe0,0xa6,0xbc,0x00,0x10,0x04,0x00,0x00,0x01,0xff,
+       0xe0,0xa6,0xaf,0xe0,0xa6,0xbc,0x00,0xd4,0x10,0x93,0x0c,0x52,0x04,0x01,0x00,0x11,
+       0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,
+       0x00,0x10,0x04,0x01,0x00,0x0b,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x14,0xe6,0x00,
+       0x00,0xe2,0x48,0x02,0xe1,0x4f,0x01,0xd0,0xa4,0xcf,0x86,0xd5,0x4c,0xd4,0x34,0xd3,
+       0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x10,0x04,0x01,0x00,0x07,
+       0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,
+       0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,
+       0x00,0x93,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00,
+       0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91,
+       0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x2e,0xd2,0x17,0xd1,
+       0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe0,0xa8,0xb2,
+       0xe0,0xa8,0xbc,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,
+       0xe0,0xa8,0xb8,0xe0,0xa8,0xbc,0x00,0x00,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x00,
+       0x00,0x91,0x08,0x10,0x04,0x01,0x07,0x00,0x00,0x01,0x00,0xcf,0x86,0xd5,0x80,0xd4,
+       0x34,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x51,
+       0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,
+       0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x01,
+       0x09,0x00,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x00,
+       0x00,0x00,0x00,0xd2,0x25,0xd1,0x0f,0x10,0x04,0x00,0x00,0x01,0xff,0xe0,0xa8,0x96,
+       0xe0,0xa8,0xbc,0x00,0x10,0x0b,0x01,0xff,0xe0,0xa8,0x97,0xe0,0xa8,0xbc,0x00,0x01,
+       0xff,0xe0,0xa8,0x9c,0xe0,0xa8,0xbc,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,
+       0x10,0x0b,0x01,0xff,0xe0,0xa8,0xab,0xe0,0xa8,0xbc,0x00,0x00,0x00,0xd4,0x10,0x93,
+       0x0c,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x14,0x52,
+       0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x0a,0x00,0x10,0x04,0x14,0x00,0x00,
+       0x00,0x00,0x00,0xd0,0x82,0xcf,0x86,0xd5,0x40,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x91,
+       0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,
+       0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x07,0x00,0x01,0x00,0x10,
+       0x04,0x00,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x00,
+       0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91,
+       0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x18,0xd2,0x0c,0x91,
+       0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,
+       0x00,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x01,
+       0x07,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x3c,0xd4,0x28,0xd3,0x10,0x52,0x04,0x01,
+       0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,
+       0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x01,0x09,0x00,
+       0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0xd4,0x18,0x93,0x14,0xd2,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x07,
+       0x00,0x07,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x10,0x92,0x0c,0x91,
+       0x08,0x10,0x04,0x0d,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,
+       0x04,0x00,0x00,0x11,0x00,0x13,0x00,0x13,0x00,0xe1,0x24,0x01,0xd0,0x86,0xcf,0x86,
+       0xd5,0x44,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,
+       0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,
+       0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x93,0x14,
+       0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,
+       0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,
+       0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,
+       0x01,0x00,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x01,0x00,
+       0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x01,0x07,0x01,0x00,
+       0x01,0x00,0xcf,0x86,0xd5,0x73,0xd4,0x45,0xd3,0x14,0x52,0x04,0x01,0x00,0xd1,0x08,
+       0x10,0x04,0x0a,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd2,0x1e,0xd1,0x0f,
+       0x10,0x0b,0x01,0xff,0xe0,0xad,0x87,0xe0,0xad,0x96,0x00,0x00,0x00,0x10,0x04,0x00,
+       0x00,0x01,0xff,0xe0,0xad,0x87,0xe0,0xac,0xbe,0x00,0x91,0x0f,0x10,0x0b,0x01,0xff,
+       0xe0,0xad,0x87,0xe0,0xad,0x97,0x00,0x01,0x09,0x00,0x00,0xd3,0x0c,0x52,0x04,0x00,
+       0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x52,0x04,0x00,0x00,0xd1,0x16,0x10,0x0b,0x01,
+       0xff,0xe0,0xac,0xa1,0xe0,0xac,0xbc,0x00,0x01,0xff,0xe0,0xac,0xa2,0xe0,0xac,0xbc,
+       0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04,0x01,
+       0x00,0x0a,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x91,
+       0x08,0x10,0x04,0x01,0x00,0x07,0x00,0x0c,0x00,0x0c,0x00,0x00,0x00,0xd0,0xb1,0xcf,
+       0x86,0xd5,0x63,0xd4,0x28,0xd3,0x14,0xd2,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x91,
+       0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,
+       0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xd3,0x1f,0xd2,0x0c,0x91,
+       0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0,
+       0xae,0x92,0xe0,0xaf,0x97,0x00,0x01,0x00,0x00,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,
+       0x00,0x00,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x01,0x00,
+       0x00,0x00,0x01,0x00,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,
+       0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0xd2,0x0c,
+       0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,
+       0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x08,0x00,0x01,0x00,
+       0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xcf,0x86,
+       0xd5,0x61,0xd4,0x45,0xd3,0x14,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,
+       0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xd2,0x1e,0xd1,0x08,0x10,0x04,0x01,0x00,
+       0x00,0x00,0x10,0x0b,0x01,0xff,0xe0,0xaf,0x86,0xe0,0xae,0xbe,0x00,0x01,0xff,0xe0,
+       0xaf,0x87,0xe0,0xae,0xbe,0x00,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xaf,0x86,0xe0,
+       0xaf,0x97,0x00,0x01,0x09,0x00,0x00,0x93,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0a,
+       0x00,0x00,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x00,
+       0x00,0xd4,0x14,0x93,0x10,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x08,
+       0x00,0x01,0x00,0x01,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+       0x00,0x07,0x00,0x07,0x00,0x92,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x00,
+       0x00,0x00,0x00,0xe3,0x1c,0x04,0xe2,0x1a,0x02,0xd1,0xf3,0xd0,0x76,0xcf,0x86,0xd5,
+       0x3c,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x01,0x00,0x01,
+       0x00,0x91,0x08,0x10,0x04,0x14,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x91,
+       0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,
+       0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,
+       0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,
+       0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x01,0x00,0x01,0x00,0xd2,
+       0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x01,
+       0x00,0xcf,0x86,0xd5,0x53,0xd4,0x2f,0xd3,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,
+       0x04,0x01,0x00,0x00,0x00,0x01,0x00,0xd2,0x13,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0,
+       0xb1,0x86,0xe0,0xb1,0x96,0x00,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,
+       0x01,0x09,0x00,0x00,0xd3,0x14,0x52,0x04,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,
+       0x01,0x54,0x10,0x04,0x01,0x5b,0x00,0x00,0x92,0x0c,0x51,0x04,0x0a,0x00,0x10,0x04,
+       0x11,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04,0x01,0x00,
+       0x0a,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x10,0x52,0x04,0x00,0x00,
+       0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x15,0x00,0x0a,0x00,0xd0,0x76,0xcf,0x86,
+       0xd5,0x3c,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x12,0x00,0x10,0x00,
+       0x01,0x00,0x91,0x08,0x10,0x04,0x14,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,
+       0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,
+       0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,
+       0xd3,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,
+       0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x07,0x07,0x07,0x00,
+       0x01,0x00,0xcf,0x86,0xd5,0x82,0xd4,0x5e,0xd3,0x2a,0xd2,0x13,0x91,0x0f,0x10,0x0b,
+       0x01,0xff,0xe0,0xb2,0xbf,0xe0,0xb3,0x95,0x00,0x01,0x00,0x01,0x00,0xd1,0x08,0x10,
+       0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe0,0xb3,0x86,0xe0,0xb3,
+       0x95,0x00,0xd2,0x28,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xb3,0x86,0xe0,0xb3,0x96,
+       0x00,0x00,0x00,0x10,0x0b,0x01,0xff,0xe0,0xb3,0x86,0xe0,0xb3,0x82,0x00,0x01,0xff,
+       0xe0,0xb3,0x86,0xe0,0xb3,0x82,0xe0,0xb3,0x95,0x00,0x91,0x08,0x10,0x04,0x01,0x00,
+       0x01,0x09,0x00,0x00,0xd3,0x14,0x52,0x04,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,
+       0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,
+       0x10,0x04,0x01,0x00,0x00,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04,0x01,0x00,
+       0x09,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x14,0x92,0x10,0xd1,0x08,
+       0x10,0x04,0x00,0x00,0x09,0x00,0x10,0x04,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0xe1,0x06,0x01,0xd0,0x6e,0xcf,0x86,0xd5,0x3c,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x91,
+       0x08,0x10,0x04,0x13,0x00,0x10,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,
+       0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,
+       0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,
+       0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,
+       0x00,0x0c,0x00,0x01,0x00,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,
+       0x00,0x10,0x04,0x0c,0x00,0x13,0x09,0x91,0x08,0x10,0x04,0x13,0x09,0x0a,0x00,0x01,
+       0x00,0xcf,0x86,0xd5,0x65,0xd4,0x45,0xd3,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,
+       0x04,0x0a,0x00,0x00,0x00,0x01,0x00,0xd2,0x1e,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,
+       0x00,0x10,0x0b,0x01,0xff,0xe0,0xb5,0x86,0xe0,0xb4,0xbe,0x00,0x01,0xff,0xe0,0xb5,
+       0x87,0xe0,0xb4,0xbe,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xb5,0x86,0xe0,0xb5,
+       0x97,0x00,0x01,0x09,0x10,0x04,0x0c,0x00,0x12,0x00,0xd3,0x10,0x52,0x04,0x00,0x00,
+       0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x01,0x00,0x52,0x04,0x12,0x00,0x51,0x04,
+       0x12,0x00,0x10,0x04,0x12,0x00,0x11,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04,
+       0x01,0x00,0x0a,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x0c,0x52,0x04,
+       0x0a,0x00,0x11,0x04,0x0a,0x00,0x12,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x12,0x00,
+       0x0a,0x00,0x0a,0x00,0x0a,0x00,0xd0,0x5a,0xcf,0x86,0xd5,0x34,0xd4,0x18,0x93,0x14,
+       0xd2,0x08,0x11,0x04,0x00,0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x04,0x00,
+       0x04,0x00,0x04,0x00,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,
+       0x04,0x00,0x00,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x04,0x00,0x04,0x00,0x54,0x04,
+       0x04,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x04,0x00,0x10,0x04,0x00,0x00,0x04,0x00,
+       0x04,0x00,0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x04,0x00,0x00,0x00,
+       0xcf,0x86,0xd5,0x77,0xd4,0x28,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,
+       0x10,0x04,0x04,0x00,0x00,0x00,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x04,0x09,
+       0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x04,0x00,0xd3,0x14,0x52,0x04,
+       0x04,0x00,0xd1,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x10,0x04,0x04,0x00,0x00,0x00,
+       0xd2,0x13,0x51,0x04,0x04,0x00,0x10,0x0b,0x04,0xff,0xe0,0xb7,0x99,0xe0,0xb7,0x8a,
+       0x00,0x04,0x00,0xd1,0x19,0x10,0x0b,0x04,0xff,0xe0,0xb7,0x99,0xe0,0xb7,0x8f,0x00,
+       0x04,0xff,0xe0,0xb7,0x99,0xe0,0xb7,0x8f,0xe0,0xb7,0x8a,0x00,0x10,0x0b,0x04,0xff,
+       0xe0,0xb7,0x99,0xe0,0xb7,0x9f,0x00,0x04,0x00,0xd4,0x10,0x93,0x0c,0x52,0x04,0x00,
+       0x00,0x11,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x93,0x14,0xd2,0x08,0x11,0x04,0x00,
+       0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe2,
+       0x31,0x01,0xd1,0x58,0xd0,0x3a,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,
+       0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+       0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x67,0x10,0x04,
+       0x01,0x09,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xcf,0x86,
+       0x95,0x18,0xd4,0x0c,0x53,0x04,0x01,0x00,0x12,0x04,0x01,0x6b,0x01,0x00,0x53,0x04,
+       0x01,0x00,0x12,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0xd0,0x9e,0xcf,0x86,0xd5,0x54,
+       0xd4,0x3c,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x10,0x04,
+       0x01,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x15,0x00,
+       0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x15,0x00,0x10,0x04,0x01,0x00,
+       0x00,0x00,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00,0x15,0x00,0xd3,0x08,0x12,0x04,
+       0x15,0x00,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00,0x01,0x00,
+       0x01,0x00,0xd4,0x30,0xd3,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00,
+       0x01,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x10,0x04,0x00,0x00,0x01,0x00,
+       0xd2,0x08,0x11,0x04,0x15,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00,
+       0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x76,0x10,0x04,0x15,0x09,
+       0x01,0x00,0x11,0x04,0x01,0x00,0x00,0x00,0xcf,0x86,0x95,0x34,0xd4,0x20,0xd3,0x14,
+       0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00,
+       0x00,0x00,0x52,0x04,0x01,0x7a,0x11,0x04,0x01,0x00,0x00,0x00,0x53,0x04,0x01,0x00,
+       0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x01,0x00,0x0d,0x00,0x00,0x00,
+       0xe1,0x2b,0x01,0xd0,0x3e,0xcf,0x86,0xd5,0x14,0x54,0x04,0x02,0x00,0x53,0x04,0x02,
+       0x00,0x92,0x08,0x11,0x04,0x02,0xdc,0x02,0x00,0x02,0x00,0x54,0x04,0x02,0x00,0xd3,
+       0x14,0x52,0x04,0x02,0x00,0xd1,0x08,0x10,0x04,0x02,0x00,0x02,0xdc,0x10,0x04,0x02,
+       0x00,0x02,0xdc,0x92,0x0c,0x91,0x08,0x10,0x04,0x02,0x00,0x02,0xd8,0x02,0x00,0x02,
+       0x00,0xcf,0x86,0xd5,0x73,0xd4,0x36,0xd3,0x17,0x92,0x13,0x51,0x04,0x02,0x00,0x10,
+       0x04,0x02,0x00,0x02,0xff,0xe0,0xbd,0x82,0xe0,0xbe,0xb7,0x00,0x02,0x00,0xd2,0x0c,
+       0x91,0x08,0x10,0x04,0x00,0x00,0x02,0x00,0x02,0x00,0x91,0x0f,0x10,0x04,0x02,0x00,
+       0x02,0xff,0xe0,0xbd,0x8c,0xe0,0xbe,0xb7,0x00,0x02,0x00,0xd3,0x26,0xd2,0x13,0x51,
+       0x04,0x02,0x00,0x10,0x0b,0x02,0xff,0xe0,0xbd,0x91,0xe0,0xbe,0xb7,0x00,0x02,0x00,
+       0x51,0x04,0x02,0x00,0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbd,0x96,0xe0,0xbe,0xb7,
+       0x00,0x52,0x04,0x02,0x00,0x91,0x0f,0x10,0x0b,0x02,0xff,0xe0,0xbd,0x9b,0xe0,0xbe,
+       0xb7,0x00,0x02,0x00,0x02,0x00,0xd4,0x27,0x53,0x04,0x02,0x00,0xd2,0x17,0xd1,0x0f,
+       0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbd,0x80,0xe0,0xbe,0xb5,0x00,0x10,0x04,0x04,
+       0x00,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0xd3,0x35,0xd2,
+       0x17,0xd1,0x08,0x10,0x04,0x00,0x00,0x02,0x81,0x10,0x04,0x02,0x82,0x02,0xff,0xe0,
+       0xbd,0xb1,0xe0,0xbd,0xb2,0x00,0xd1,0x0f,0x10,0x04,0x02,0x84,0x02,0xff,0xe0,0xbd,
+       0xb1,0xe0,0xbd,0xb4,0x00,0x10,0x0b,0x02,0xff,0xe0,0xbe,0xb2,0xe0,0xbe,0x80,0x00,
+       0x02,0x00,0xd2,0x13,0x91,0x0f,0x10,0x0b,0x02,0xff,0xe0,0xbe,0xb3,0xe0,0xbe,0x80,
+       0x00,0x02,0x00,0x02,0x82,0x11,0x04,0x02,0x82,0x02,0x00,0xd0,0xd3,0xcf,0x86,0xd5,
+       0x65,0xd4,0x27,0xd3,0x1f,0xd2,0x13,0x91,0x0f,0x10,0x04,0x02,0x82,0x02,0xff,0xe0,
+       0xbd,0xb1,0xe0,0xbe,0x80,0x00,0x02,0xe6,0x91,0x08,0x10,0x04,0x02,0x09,0x02,0x00,
+       0x02,0xe6,0x12,0x04,0x02,0x00,0x0c,0x00,0xd3,0x1f,0xd2,0x13,0x51,0x04,0x02,0x00,
+       0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbe,0x92,0xe0,0xbe,0xb7,0x00,0x51,0x04,0x02,
+       0x00,0x10,0x04,0x04,0x00,0x02,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x02,
+       0x00,0x02,0x00,0x91,0x0f,0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbe,0x9c,0xe0,0xbe,
+       0xb7,0x00,0x02,0x00,0xd4,0x3d,0xd3,0x26,0xd2,0x13,0x51,0x04,0x02,0x00,0x10,0x0b,
+       0x02,0xff,0xe0,0xbe,0xa1,0xe0,0xbe,0xb7,0x00,0x02,0x00,0x51,0x04,0x02,0x00,0x10,
+       0x04,0x02,0x00,0x02,0xff,0xe0,0xbe,0xa6,0xe0,0xbe,0xb7,0x00,0x52,0x04,0x02,0x00,
+       0x91,0x0f,0x10,0x0b,0x02,0xff,0xe0,0xbe,0xab,0xe0,0xbe,0xb7,0x00,0x02,0x00,0x04,
+       0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x02,0x00,0x02,0x00,0x02,
+       0x00,0xd2,0x13,0x91,0x0f,0x10,0x04,0x04,0x00,0x02,0xff,0xe0,0xbe,0x90,0xe0,0xbe,
+       0xb5,0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0xcf,0x86,
+       0x95,0x4c,0xd4,0x24,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,
+       0x04,0xdc,0x04,0x00,0x52,0x04,0x04,0x00,0xd1,0x08,0x10,0x04,0x04,0x00,0x00,0x00,
+       0x10,0x04,0x0a,0x00,0x04,0x00,0xd3,0x14,0xd2,0x08,0x11,0x04,0x08,0x00,0x0a,0x00,
+       0x91,0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x0b,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,
+       0x0b,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,
+       0xe5,0xf7,0x04,0xe4,0x79,0x03,0xe3,0x7b,0x01,0xe2,0x04,0x01,0xd1,0x7f,0xd0,0x65,
+       0xcf,0x86,0x55,0x04,0x04,0x00,0xd4,0x33,0xd3,0x1f,0xd2,0x0c,0x51,0x04,0x04,0x00,
+       0x10,0x04,0x0a,0x00,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x0b,0x04,0xff,0xe1,0x80,
+       0xa5,0xe1,0x80,0xae,0x00,0x04,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x0a,0x00,0x04,
+       0x00,0x10,0x04,0x04,0x00,0x0a,0x00,0x04,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x04,
+       0x00,0x10,0x04,0x04,0x00,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10,0x04,0x04,0x00,0x04,
+       0x07,0x92,0x10,0xd1,0x08,0x10,0x04,0x04,0x00,0x04,0x09,0x10,0x04,0x0a,0x09,0x0a,
+       0x00,0x0a,0x00,0xcf,0x86,0x95,0x14,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92,
+       0x08,0x11,0x04,0x04,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xd0,0x2e,0xcf,0x86,0x95,
+       0x28,0xd4,0x14,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,
+       0x00,0x0a,0xdc,0x0a,0x00,0x53,0x04,0x0a,0x00,0xd2,0x08,0x11,0x04,0x0a,0x00,0x0b,
+       0x00,0x11,0x04,0x0b,0x00,0x0a,0x00,0x01,0x00,0xcf,0x86,0xd5,0x24,0x94,0x20,0xd3,
+       0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x52,
+       0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x54,
+       0x04,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+       0x00,0x06,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x06,0x00,0x08,0x00,0x10,0x04,0x08,
+       0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x0d,0x00,0x0d,0x00,0xd1,0x3e,0xd0,
+       0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x1d,0x54,0x04,0x01,0x00,0x53,0x04,0x01,
+       0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,
+       0x00,0x01,0xff,0x00,0x94,0x15,0x93,0x11,0x92,0x0d,0x91,0x09,0x10,0x05,0x01,0xff,
+       0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x1e,0xcf,0x86,0x55,
+       0x04,0x01,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+       0x00,0x0b,0x00,0x0b,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,
+       0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x92,0x08,0x11,0x04,0x01,0x00,0x0b,0x00,0x0b,
+       0x00,0xe2,0x21,0x01,0xd1,0x6c,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x93,0x10,
+       0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0x04,0x00,
+       0x04,0x00,0x04,0x00,0xcf,0x86,0x95,0x48,0xd4,0x24,0xd3,0x10,0x52,0x04,0x04,0x00,
+       0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,
+       0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0xd3,0x10,0x52,0x04,
+       0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08,
+       0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x04,0x00,
+       0xd0,0x62,0xcf,0x86,0xd5,0x28,0x94,0x24,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04,
+       0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,
+       0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0xd4,0x14,0x53,0x04,
+       0x04,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,
+       0xd3,0x14,0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,
+       0x04,0x00,0x00,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,
+       0x00,0x00,0xcf,0x86,0xd5,0x38,0xd4,0x24,0xd3,0x14,0xd2,0x0c,0x91,0x08,0x10,0x04,
+       0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x52,0x04,0x04,0x00,
+       0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0x93,0x10,0x52,0x04,0x04,0x00,
+       0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x94,0x14,0x53,0x04,
+       0x04,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,
+       0x04,0x00,0xd1,0x9c,0xd0,0x3e,0xcf,0x86,0x95,0x38,0xd4,0x14,0x53,0x04,0x04,0x00,
+       0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0xd3,0x14,
+       0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,
+       0x00,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,
+       0x04,0x00,0xcf,0x86,0xd5,0x34,0xd4,0x14,0x93,0x10,0x52,0x04,0x04,0x00,0x51,0x04,
+       0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0x04,0x00,0x53,0x04,0x04,0x00,0xd2,0x0c,
+       0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,
+       0x0c,0xe6,0x10,0x04,0x0c,0xe6,0x08,0xe6,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x08,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x53,0x04,0x04,0x00,
+       0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xd0,0x1a,
+       0xcf,0x86,0x95,0x14,0x54,0x04,0x08,0x00,0x53,0x04,0x08,0x00,0x92,0x08,0x11,0x04,
+       0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,
+       0x04,0x00,0xd3,0x10,0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x11,0x00,
+       0x00,0x00,0x52,0x04,0x11,0x00,0x11,0x04,0x11,0x00,0x00,0x00,0xd3,0x30,0xd2,0x2a,
+       0xd1,0x24,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x0b,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,
+       0xcf,0x06,0x04,0x00,0xcf,0x06,0x04,0x00,0xcf,0x06,0x04,0x00,0xd2,0x6c,0xd1,0x24,
+       0xd0,0x06,0xcf,0x06,0x04,0x00,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00,
+       0x93,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x0b,0x00,
+       0x0b,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00,
+       0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0x00,
+       0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x04,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,
+       0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0x80,0xd0,0x46,0xcf,0x86,0xd5,0x28,
+       0xd4,0x14,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x91,0x08,0x10,0x04,0x06,0x00,
+       0x00,0x00,0x06,0x00,0x93,0x10,0x52,0x04,0x06,0x00,0x91,0x08,0x10,0x04,0x06,0x09,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x04,0x06,0x00,0x93,0x14,0x52,0x04,0x06,0x00,
+       0xd1,0x08,0x10,0x04,0x06,0x09,0x06,0x00,0x10,0x04,0x06,0x00,0x00,0x00,0x00,0x00,
+       0xcf,0x86,0xd5,0x10,0x54,0x04,0x06,0x00,0x93,0x08,0x12,0x04,0x06,0x00,0x00,0x00,
+       0x00,0x00,0xd4,0x14,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x91,0x08,0x10,0x04,
+       0x06,0x00,0x00,0x00,0x06,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x06,0x00,
+       0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0xd0,0x1b,0xcf,0x86,0x55,0x04,0x04,0x00,
+       0x54,0x04,0x04,0x00,0x93,0x0d,0x52,0x04,0x04,0x00,0x11,0x05,0x04,0xff,0x00,0x04,
+       0x00,0x04,0x00,0xcf,0x86,0xd5,0x24,0x54,0x04,0x04,0x00,0xd3,0x10,0x92,0x0c,0x51,
+       0x04,0x04,0x00,0x10,0x04,0x04,0x09,0x04,0x00,0x04,0x00,0x52,0x04,0x04,0x00,0x91,
+       0x08,0x10,0x04,0x04,0x00,0x07,0xe6,0x00,0x00,0xd4,0x10,0x53,0x04,0x04,0x00,0x92,
+       0x08,0x11,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x07,0x00,0x92,0x08,0x11,
+       0x04,0x07,0x00,0x00,0x00,0x00,0x00,0xe4,0xb7,0x03,0xe3,0x58,0x01,0xd2,0x8f,0xd1,
+       0x53,0xd0,0x35,0xcf,0x86,0x95,0x2f,0xd4,0x1f,0x53,0x04,0x04,0x00,0xd2,0x0d,0x51,
+       0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x04,0xff,0x00,0x51,0x05,0x04,0xff,0x00,0x10,
+       0x05,0x04,0xff,0x00,0x00,0x00,0x53,0x04,0x04,0x00,0x92,0x08,0x11,0x04,0x04,0x00,
+       0x00,0x00,0x00,0x00,0x04,0x00,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00,
+       0x53,0x04,0x04,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0xd0,0x22,0xcf,0x86,0x55,0x04,0x04,0x00,0x94,0x18,0x53,0x04,0x04,0x00,
+       0x92,0x10,0xd1,0x08,0x10,0x04,0x04,0x00,0x04,0xe4,0x10,0x04,0x0a,0x00,0x00,0x00,
+       0x00,0x00,0x0b,0x00,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,0x0b,0x00,0x93,0x0c,
+       0x52,0x04,0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xd1,0x80,0xd0,0x42,
+       0xcf,0x86,0xd5,0x1c,0x54,0x04,0x07,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,
+       0xd1,0x08,0x10,0x04,0x07,0x00,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0xd4,0x0c,
+       0x53,0x04,0x07,0x00,0x12,0x04,0x07,0x00,0x00,0x00,0x53,0x04,0x07,0x00,0x92,0x10,
+       0xd1,0x08,0x10,0x04,0x07,0x00,0x07,0xde,0x10,0x04,0x07,0xe6,0x07,0xdc,0x00,0x00,
+       0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00,
+       0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0xd4,0x10,0x53,0x04,0x07,0x00,
+       0x52,0x04,0x07,0x00,0x11,0x04,0x07,0x00,0x00,0x00,0x93,0x10,0x52,0x04,0x07,0x00,
+       0x91,0x08,0x10,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x1a,0xcf,0x86,
+       0x55,0x04,0x08,0x00,0x94,0x10,0x53,0x04,0x08,0x00,0x92,0x08,0x11,0x04,0x08,0x00,
+       0x0b,0x00,0x00,0x00,0x08,0x00,0xcf,0x86,0x95,0x28,0xd4,0x10,0x53,0x04,0x08,0x00,
+       0x92,0x08,0x11,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x08,0x00,0xd2,0x0c,
+       0x51,0x04,0x08,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x08,0x00,
+       0x07,0x00,0xd2,0xe4,0xd1,0x80,0xd0,0x2e,0xcf,0x86,0x95,0x28,0x54,0x04,0x08,0x00,
+       0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x08,0xe6,
+       0xd2,0x0c,0x91,0x08,0x10,0x04,0x08,0xdc,0x08,0x00,0x08,0x00,0x11,0x04,0x00,0x00,
+       0x08,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,
+       0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0xd4,0x14,
+       0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x09,0x0b,0x00,0x0b,0x00,0x0b,0x00,
+       0x0b,0x00,0xd3,0x10,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0xe6,
+       0x0b,0xe6,0x52,0x04,0x0b,0xe6,0xd1,0x08,0x10,0x04,0x0b,0xe6,0x00,0x00,0x10,0x04,
+       0x00,0x00,0x0b,0xdc,0xd0,0x5e,0xcf,0x86,0xd5,0x20,0xd4,0x10,0x53,0x04,0x0b,0x00,
+       0x92,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x0b,0x00,0x92,0x08,
+       0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xd4,0x10,0x53,0x04,0x0b,0x00,0x52,0x04,
+       0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0xd3,0x10,0x52,0x04,0x10,0xe6,0x91,0x08,
+       0x10,0x04,0x10,0xe6,0x10,0xdc,0x10,0xdc,0xd2,0x0c,0x51,0x04,0x10,0xdc,0x10,0x04,
+       0x10,0xdc,0x10,0xe6,0xd1,0x08,0x10,0x04,0x10,0xe6,0x10,0xdc,0x10,0x04,0x10,0x00,
+       0x00,0x00,0xcf,0x06,0x00,0x00,0xe1,0x1e,0x01,0xd0,0xaa,0xcf,0x86,0xd5,0x6e,0xd4,
+       0x53,0xd3,0x17,0x52,0x04,0x09,0x00,0x51,0x04,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1,
+       0xac,0x85,0xe1,0xac,0xb5,0x00,0x09,0x00,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x09,0xff,
+       0xe1,0xac,0x87,0xe1,0xac,0xb5,0x00,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1,0xac,0x89,
+       0xe1,0xac,0xb5,0x00,0x09,0x00,0xd1,0x0f,0x10,0x0b,0x09,0xff,0xe1,0xac,0x8b,0xe1,
+       0xac,0xb5,0x00,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1,0xac,0x8d,0xe1,0xac,0xb5,0x00,
+       0x09,0x00,0x93,0x17,0x92,0x13,0x51,0x04,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1,0xac,
+       0x91,0xe1,0xac,0xb5,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x54,0x04,0x09,0x00,0xd3,
+       0x10,0x52,0x04,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x07,0x09,0x00,0x09,0x00,0xd2,
+       0x13,0x51,0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xe1,0xac,0xba,0xe1,0xac,
+       0xb5,0x00,0x91,0x0f,0x10,0x04,0x09,0x00,0x09,0xff,0xe1,0xac,0xbc,0xe1,0xac,0xb5,
+       0x00,0x09,0x00,0xcf,0x86,0xd5,0x3d,0x94,0x39,0xd3,0x31,0xd2,0x25,0xd1,0x16,0x10,
+       0x0b,0x09,0xff,0xe1,0xac,0xbe,0xe1,0xac,0xb5,0x00,0x09,0xff,0xe1,0xac,0xbf,0xe1,
+       0xac,0xb5,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xe1,0xad,0x82,0xe1,0xac,0xb5,0x00,
+       0x91,0x08,0x10,0x04,0x09,0x09,0x09,0x00,0x09,0x00,0x12,0x04,0x09,0x00,0x00,0x00,
+       0x09,0x00,0xd4,0x1c,0x53,0x04,0x09,0x00,0xd2,0x0c,0x51,0x04,0x09,0x00,0x10,0x04,
+       0x09,0x00,0x09,0xe6,0x91,0x08,0x10,0x04,0x09,0xdc,0x09,0xe6,0x09,0xe6,0xd3,0x08,
+       0x12,0x04,0x09,0xe6,0x09,0x00,0x52,0x04,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x00,
+       0x00,0x00,0x00,0x00,0xd0,0x2e,0xcf,0x86,0x55,0x04,0x0a,0x00,0xd4,0x18,0x53,0x04,
+       0x0a,0x00,0xd2,0x0c,0x51,0x04,0x0a,0x00,0x10,0x04,0x0a,0x09,0x0d,0x09,0x11,0x04,
+       0x0d,0x00,0x0a,0x00,0x53,0x04,0x0a,0x00,0x92,0x08,0x11,0x04,0x0a,0x00,0x0d,0x00,
+       0x0d,0x00,0xcf,0x86,0x55,0x04,0x0c,0x00,0xd4,0x14,0x93,0x10,0x52,0x04,0x0c,0x00,
+       0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x07,0x0c,0x00,0x0c,0x00,0xd3,0x0c,0x92,0x08,
+       0x11,0x04,0x0c,0x00,0x0c,0x09,0x00,0x00,0x12,0x04,0x00,0x00,0x0c,0x00,0xe3,0xb2,
+       0x01,0xe2,0x09,0x01,0xd1,0x4c,0xd0,0x2a,0xcf,0x86,0x55,0x04,0x0a,0x00,0x54,0x04,
+       0x0a,0x00,0xd3,0x10,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10,0x04,0x0a,0x00,
+       0x0a,0x07,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0a,0x00,0x0a,0x00,
+       0xcf,0x86,0x95,0x1c,0x94,0x18,0x53,0x04,0x0a,0x00,0xd2,0x08,0x11,0x04,0x0a,0x00,
+       0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,
+       0xd0,0x3a,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x12,0x00,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x54,0x04,0x14,0x00,
+       0x53,0x04,0x14,0x00,0xd2,0x0c,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,
+       0x91,0x08,0x10,0x04,0x00,0x00,0x14,0x00,0x14,0x00,0xcf,0x86,0xd5,0x2c,0xd4,0x08,
+       0x13,0x04,0x0d,0x00,0x00,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x0b,0xe6,0x10,0x04,
+       0x0b,0xe6,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x01,0x0b,0xdc,0x0b,0xdc,0x92,0x08,
+       0x11,0x04,0x0b,0xdc,0x0b,0xe6,0x0b,0xdc,0xd4,0x28,0xd3,0x10,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x01,0x0b,0x01,0xd2,0x0c,0x91,0x08,0x10,0x04,
+       0x0b,0x01,0x0b,0x00,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0xdc,0x0b,0x00,
+       0xd3,0x1c,0xd2,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x0d,0x00,0xd1,0x08,
+       0x10,0x04,0x0d,0xe6,0x0d,0x00,0x10,0x04,0x0d,0x00,0x13,0x00,0x92,0x0c,0x51,0x04,
+       0x10,0xe6,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd1,0x1c,0xd0,0x06,0xcf,0x06,
+       0x07,0x00,0xcf,0x86,0x55,0x04,0x07,0x00,0x94,0x0c,0x53,0x04,0x07,0x00,0x12,0x04,
+       0x07,0x00,0x08,0x00,0x08,0x00,0xd0,0x06,0xcf,0x06,0x08,0x00,0xcf,0x86,0xd5,0x40,
+       0xd4,0x2c,0xd3,0x10,0x92,0x0c,0x51,0x04,0x08,0xe6,0x10,0x04,0x08,0xdc,0x08,0xe6,
+       0x09,0xe6,0xd2,0x0c,0x51,0x04,0x09,0xe6,0x10,0x04,0x09,0xdc,0x0a,0xe6,0xd1,0x08,
+       0x10,0x04,0x0a,0xe6,0x0a,0xea,0x10,0x04,0x0a,0xd6,0x0a,0xdc,0x93,0x10,0x92,0x0c,
+       0x91,0x08,0x10,0x04,0x0a,0xca,0x0a,0xe6,0x0a,0xe6,0x0a,0xe6,0x0a,0xe6,0xd4,0x14,
+       0x93,0x10,0x52,0x04,0x0a,0xe6,0x51,0x04,0x0a,0xe6,0x10,0x04,0x0a,0xe6,0x10,0xe6,
+       0x10,0xe6,0xd3,0x10,0x52,0x04,0x10,0xe6,0x51,0x04,0x10,0xe6,0x10,0x04,0x13,0xe8,
+       0x13,0xe4,0xd2,0x10,0xd1,0x08,0x10,0x04,0x13,0xe4,0x13,0xdc,0x10,0x04,0x00,0x00,
+       0x12,0xe6,0xd1,0x08,0x10,0x04,0x0c,0xe9,0x0b,0xdc,0x10,0x04,0x09,0xe6,0x09,0xdc,
+       0xe2,0x80,0x08,0xe1,0x48,0x04,0xe0,0x1c,0x02,0xcf,0x86,0xe5,0x11,0x01,0xd4,0x84,
+       0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0xa5,0x00,0x01,0xff,
+       0x61,0xcc,0xa5,0x00,0x10,0x08,0x01,0xff,0x42,0xcc,0x87,0x00,0x01,0xff,0x62,0xcc,
+       0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x42,0xcc,0xa3,0x00,0x01,0xff,0x62,0xcc,
+       0xa3,0x00,0x10,0x08,0x01,0xff,0x42,0xcc,0xb1,0x00,0x01,0xff,0x62,0xcc,0xb1,0x00,
+       0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x43,0xcc,0xa7,0xcc,0x81,0x00,0x01,0xff,
+       0x63,0xcc,0xa7,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x44,0xcc,0x87,0x00,0x01,0xff,
+       0x64,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x44,0xcc,0xa3,0x00,0x01,0xff,
+       0x64,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x44,0xcc,0xb1,0x00,0x01,0xff,0x64,0xcc,
+       0xb1,0x00,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x44,0xcc,0xa7,0x00,
+       0x01,0xff,0x64,0xcc,0xa7,0x00,0x10,0x08,0x01,0xff,0x44,0xcc,0xad,0x00,0x01,0xff,
+       0x64,0xcc,0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x45,0xcc,0x84,0xcc,0x80,0x00,
+       0x01,0xff,0x65,0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x45,0xcc,0x84,0xcc,
+       0x81,0x00,0x01,0xff,0x65,0xcc,0x84,0xcc,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0x45,0xcc,0xad,0x00,0x01,0xff,0x65,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,
+       0x45,0xcc,0xb0,0x00,0x01,0xff,0x65,0xcc,0xb0,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,
+       0x45,0xcc,0xa7,0xcc,0x86,0x00,0x01,0xff,0x65,0xcc,0xa7,0xcc,0x86,0x00,0x10,0x08,
+       0x01,0xff,0x46,0xcc,0x87,0x00,0x01,0xff,0x66,0xcc,0x87,0x00,0xd4,0x84,0xd3,0x40,
+       0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x47,0xcc,0x84,0x00,0x01,0xff,0x67,0xcc,
+       0x84,0x00,0x10,0x08,0x01,0xff,0x48,0xcc,0x87,0x00,0x01,0xff,0x68,0xcc,0x87,0x00,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0x48,0xcc,0xa3,0x00,0x01,0xff,0x68,0xcc,0xa3,0x00,
+       0x10,0x08,0x01,0xff,0x48,0xcc,0x88,0x00,0x01,0xff,0x68,0xcc,0x88,0x00,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0x48,0xcc,0xa7,0x00,0x01,0xff,0x68,0xcc,0xa7,0x00,
+       0x10,0x08,0x01,0xff,0x48,0xcc,0xae,0x00,0x01,0xff,0x68,0xcc,0xae,0x00,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0x49,0xcc,0xb0,0x00,0x01,0xff,0x69,0xcc,0xb0,0x00,0x10,0x0a,
+       0x01,0xff,0x49,0xcc,0x88,0xcc,0x81,0x00,0x01,0xff,0x69,0xcc,0x88,0xcc,0x81,0x00,
+       0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x4b,0xcc,0x81,0x00,0x01,0xff,
+       0x6b,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x4b,0xcc,0xa3,0x00,0x01,0xff,0x6b,0xcc,
+       0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4b,0xcc,0xb1,0x00,0x01,0xff,0x6b,0xcc,
+       0xb1,0x00,0x10,0x08,0x01,0xff,0x4c,0xcc,0xa3,0x00,0x01,0xff,0x6c,0xcc,0xa3,0x00,
+       0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4c,0xcc,0xa3,0xcc,0x84,0x00,0x01,0xff,
+       0x6c,0xcc,0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x4c,0xcc,0xb1,0x00,0x01,0xff,
+       0x6c,0xcc,0xb1,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4c,0xcc,0xad,0x00,0x01,0xff,
+       0x6c,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x4d,0xcc,0x81,0x00,0x01,0xff,0x6d,0xcc,
+       0x81,0x00,0xcf,0x86,0xe5,0x15,0x01,0xd4,0x88,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x4d,0xcc,0x87,0x00,0x01,0xff,0x6d,0xcc,0x87,0x00,0x10,0x08,0x01,
+       0xff,0x4d,0xcc,0xa3,0x00,0x01,0xff,0x6d,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0x4e,0xcc,0x87,0x00,0x01,0xff,0x6e,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x4e,
+       0xcc,0xa3,0x00,0x01,0xff,0x6e,0xcc,0xa3,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0x4e,0xcc,0xb1,0x00,0x01,0xff,0x6e,0xcc,0xb1,0x00,0x10,0x08,0x01,0xff,0x4e,
+       0xcc,0xad,0x00,0x01,0xff,0x6e,0xcc,0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,
+       0xcc,0x83,0xcc,0x81,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01,
+       0xff,0x4f,0xcc,0x83,0xcc,0x88,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x88,0x00,0xd3,
+       0x48,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x84,0xcc,0x80,0x00,0x01,
+       0xff,0x6f,0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x84,0xcc,0x81,
+       0x00,0x01,0xff,0x6f,0xcc,0x84,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x50,
+       0xcc,0x81,0x00,0x01,0xff,0x70,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x50,0xcc,0x87,
+       0x00,0x01,0xff,0x70,0xcc,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x52,
+       0xcc,0x87,0x00,0x01,0xff,0x72,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x52,0xcc,0xa3,
+       0x00,0x01,0xff,0x72,0xcc,0xa3,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x52,0xcc,0xa3,
+       0xcc,0x84,0x00,0x01,0xff,0x72,0xcc,0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x52,
+       0xcc,0xb1,0x00,0x01,0xff,0x72,0xcc,0xb1,0x00,0xd4,0x8c,0xd3,0x48,0xd2,0x20,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0x53,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x87,0x00,0x10,
+       0x08,0x01,0xff,0x53,0xcc,0xa3,0x00,0x01,0xff,0x73,0xcc,0xa3,0x00,0xd1,0x14,0x10,
+       0x0a,0x01,0xff,0x53,0xcc,0x81,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x81,0xcc,0x87,
+       0x00,0x10,0x0a,0x01,0xff,0x53,0xcc,0x8c,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x8c,
+       0xcc,0x87,0x00,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x53,0xcc,0xa3,0xcc,0x87,
+       0x00,0x01,0xff,0x73,0xcc,0xa3,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x54,0xcc,0x87,
+       0x00,0x01,0xff,0x74,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x54,0xcc,0xa3,
+       0x00,0x01,0xff,0x74,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x54,0xcc,0xb1,0x00,0x01,
+       0xff,0x74,0xcc,0xb1,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x54,
+       0xcc,0xad,0x00,0x01,0xff,0x74,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0xa4,
+       0x00,0x01,0xff,0x75,0xcc,0xa4,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0xb0,
+       0x00,0x01,0xff,0x75,0xcc,0xb0,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0xad,0x00,0x01,
+       0xff,0x75,0xcc,0xad,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x55,0xcc,0x83,
+       0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x55,
+       0xcc,0x84,0xcc,0x88,0x00,0x01,0xff,0x75,0xcc,0x84,0xcc,0x88,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0x56,0xcc,0x83,0x00,0x01,0xff,0x76,0xcc,0x83,0x00,0x10,0x08,0x01,
+       0xff,0x56,0xcc,0xa3,0x00,0x01,0xff,0x76,0xcc,0xa3,0x00,0xe0,0x10,0x02,0xcf,0x86,
+       0xd5,0xe1,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc,
+       0x80,0x00,0x01,0xff,0x77,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x57,0xcc,0x81,0x00,
+       0x01,0xff,0x77,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc,0x88,0x00,
+       0x01,0xff,0x77,0xcc,0x88,0x00,0x10,0x08,0x01,0xff,0x57,0xcc,0x87,0x00,0x01,0xff,
+       0x77,0xcc,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc,0xa3,0x00,
+       0x01,0xff,0x77,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x58,0xcc,0x87,0x00,0x01,0xff,
+       0x78,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x58,0xcc,0x88,0x00,0x01,0xff,
+       0x78,0xcc,0x88,0x00,0x10,0x08,0x01,0xff,0x59,0xcc,0x87,0x00,0x01,0xff,0x79,0xcc,
+       0x87,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x5a,0xcc,0x82,0x00,
+       0x01,0xff,0x7a,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x5a,0xcc,0xa3,0x00,0x01,0xff,
+       0x7a,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x5a,0xcc,0xb1,0x00,0x01,0xff,
+       0x7a,0xcc,0xb1,0x00,0x10,0x08,0x01,0xff,0x68,0xcc,0xb1,0x00,0x01,0xff,0x74,0xcc,
+       0x88,0x00,0x92,0x1d,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x8a,0x00,0x01,0xff,
+       0x79,0xcc,0x8a,0x00,0x10,0x04,0x01,0x00,0x02,0xff,0xc5,0xbf,0xcc,0x87,0x00,0x0a,
+       0x00,0xd4,0x98,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0xa3,
+       0x00,0x01,0xff,0x61,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x41,0xcc,0x89,0x00,0x01,
+       0xff,0x61,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0x82,0xcc,0x81,
+       0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x82,
+       0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x80,0x00,0xd2,0x28,0xd1,0x14,0x10,
+       0x0a,0x01,0xff,0x41,0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x89,
+       0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x61,0xcc,0x82,
+       0xcc,0x83,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0xa3,0xcc,0x82,0x00,0x01,
+       0xff,0x61,0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x81,
+       0x00,0x01,0xff,0x61,0xcc,0x86,0xcc,0x81,0x00,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,
+       0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x86,0xcc,0x80,
+       0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x86,
+       0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x83,0x00,0x01,
+       0xff,0x61,0xcc,0x86,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0xa3,0xcc,0x86,
+       0x00,0x01,0xff,0x61,0xcc,0xa3,0xcc,0x86,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0x45,0xcc,0xa3,0x00,0x01,0xff,0x65,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x45,
+       0xcc,0x89,0x00,0x01,0xff,0x65,0xcc,0x89,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,
+       0xcc,0x83,0x00,0x01,0xff,0x65,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x45,0xcc,0x82,
+       0xcc,0x81,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x81,0x00,0xcf,0x86,0xe5,0x31,0x01,
+       0xd4,0x90,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x45,0xcc,0x82,0xcc,
+       0x80,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x45,0xcc,
+       0x82,0xcc,0x89,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,
+       0x01,0xff,0x45,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x83,0x00,
+       0x10,0x0a,0x01,0xff,0x45,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,0x65,0xcc,0xa3,0xcc,
+       0x82,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x89,0x00,0x01,0xff,
+       0x69,0xcc,0x89,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0xa3,0x00,0x01,0xff,0x69,0xcc,
+       0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0xa3,0x00,0x01,0xff,0x6f,0xcc,
+       0xa3,0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x89,0x00,
+       0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x82,0xcc,0x81,0x00,
+       0x01,0xff,0x6f,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x82,0xcc,
+       0x80,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x80,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,
+       0x4f,0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x89,0x00,0x10,0x0a,
+       0x01,0xff,0x4f,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x83,0x00,
+       0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,
+       0x6f,0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x9b,0xcc,0x81,0x00,
+       0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x81,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,
+       0x9b,0xcc,0x80,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,
+       0x4f,0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x89,0x00,0xd4,0x98,
+       0xd3,0x48,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x9b,0xcc,0x83,0x00,
+       0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x9b,0xcc,
+       0xa3,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0x55,0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,
+       0x89,0x00,0x01,0xff,0x75,0xcc,0x89,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,
+       0x55,0xcc,0x9b,0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x81,0x00,0x10,0x0a,
+       0x01,0xff,0x55,0xcc,0x9b,0xcc,0x80,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x80,0x00,
+       0xd1,0x14,0x10,0x0a,0x01,0xff,0x55,0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x75,0xcc,
+       0x9b,0xcc,0x89,0x00,0x10,0x0a,0x01,0xff,0x55,0xcc,0x9b,0xcc,0x83,0x00,0x01,0xff,
+       0x75,0xcc,0x9b,0xcc,0x83,0x00,0xd3,0x44,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,
+       0x55,0xcc,0x9b,0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0xa3,0x00,0x10,0x08,
+       0x01,0xff,0x59,0xcc,0x80,0x00,0x01,0xff,0x79,0xcc,0x80,0x00,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0x59,0xcc,0xa3,0x00,0x01,0xff,0x79,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,
+       0x59,0xcc,0x89,0x00,0x01,0xff,0x79,0xcc,0x89,0x00,0x92,0x14,0x91,0x10,0x10,0x08,
+       0x01,0xff,0x59,0xcc,0x83,0x00,0x01,0xff,0x79,0xcc,0x83,0x00,0x0a,0x00,0x0a,0x00,
+       0xe1,0xc0,0x04,0xe0,0x80,0x02,0xcf,0x86,0xe5,0x2d,0x01,0xd4,0xa8,0xd3,0x54,0xd2,
+       0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x93,0x00,0x01,0xff,0xce,0xb1,
+       0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,
+       0xce,0xb1,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,
+       0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,
+       0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82,
+       0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x91,0xcc,0x93,0x00,0x01,0xff,
+       0xce,0x91,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0x91,0xcc,0x93,0xcc,0x80,0x00,
+       0x01,0xff,0xce,0x91,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,
+       0x91,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0x91,0xcc,0x94,0xcc,0x81,0x00,0x10,
+       0x0b,0x01,0xff,0xce,0x91,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0x91,0xcc,0x94,
+       0xcd,0x82,0x00,0xd3,0x42,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc,
+       0x93,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb5,0xcc,
+       0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0xcc,0x80,0x00,0x91,0x16,0x10,
+       0x0b,0x01,0xff,0xce,0xb5,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,
+       0xcc,0x81,0x00,0x00,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x95,0xcc,
+       0x93,0x00,0x01,0xff,0xce,0x95,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0x95,0xcc,
+       0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0x95,0xcc,0x94,0xcc,0x80,0x00,0x91,0x16,0x10,
+       0x0b,0x01,0xff,0xce,0x95,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0x95,0xcc,0x94,
+       0xcc,0x81,0x00,0x00,0x00,0xd4,0xa8,0xd3,0x54,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,
+       0xff,0xce,0xb7,0xcc,0x93,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0x00,0x10,0x0b,0x01,
+       0xff,0xce,0xb7,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,
+       0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,
+       0xce,0xb7,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd,
+       0x82,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x82,0x00,0xd2,0x28,0xd1,0x12,0x10,
+       0x09,0x01,0xff,0xce,0x97,0xcc,0x93,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0x00,0x10,
+       0x0b,0x01,0xff,0xce,0x97,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,
+       0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0x97,0xcc,0x93,0xcc,0x81,0x00,
+       0x01,0xff,0xce,0x97,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xce,0x97,0xcc,
+       0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcd,0x82,0x00,0xd3,0x54,0xd2,
+       0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x93,0x00,0x01,0xff,0xce,0xb9,
+       0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,
+       0xce,0xb9,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,
+       0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,
+       0xff,0xce,0xb9,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcd,0x82,
+       0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x99,0xcc,0x93,0x00,0x01,0xff,
+       0xce,0x99,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0x99,0xcc,0x93,0xcc,0x80,0x00,
+       0x01,0xff,0xce,0x99,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,
+       0x99,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0x99,0xcc,0x94,0xcc,0x81,0x00,0x10,
+       0x0b,0x01,0xff,0xce,0x99,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0x99,0xcc,0x94,
+       0xcd,0x82,0x00,0xcf,0x86,0xe5,0x13,0x01,0xd4,0x84,0xd3,0x42,0xd2,0x28,0xd1,0x12,
+       0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x93,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0x00,
+       0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf,0xcc,
+       0x94,0xcc,0x80,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc,0x81,
+       0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd2,0x28,0xd1,0x12,
+       0x10,0x09,0x01,0xff,0xce,0x9f,0xcc,0x93,0x00,0x01,0xff,0xce,0x9f,0xcc,0x94,0x00,
+       0x10,0x0b,0x01,0xff,0xce,0x9f,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0x9f,0xcc,
+       0x94,0xcc,0x80,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0x9f,0xcc,0x93,0xcc,0x81,
+       0x00,0x01,0xff,0xce,0x9f,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd3,0x54,0xd2,0x28,
+       0xd1,0x12,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x93,0x00,0x01,0xff,0xcf,0x85,0xcc,
+       0x94,0x00,0x10,0x0b,0x01,0xff,0xcf,0x85,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xcf,
+       0x85,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x85,0xcc,0x93,
+       0xcc,0x81,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,
+       0xcf,0x85,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcd,0x82,0x00,
+       0xd2,0x1c,0xd1,0x0d,0x10,0x04,0x00,0x00,0x01,0xff,0xce,0xa5,0xcc,0x94,0x00,0x10,
+       0x04,0x00,0x00,0x01,0xff,0xce,0xa5,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x0f,0x10,0x04,
+       0x00,0x00,0x01,0xff,0xce,0xa5,0xcc,0x94,0xcc,0x81,0x00,0x10,0x04,0x00,0x00,0x01,
+       0xff,0xce,0xa5,0xcc,0x94,0xcd,0x82,0x00,0xd4,0xa8,0xd3,0x54,0xd2,0x28,0xd1,0x12,
+       0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x93,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0x00,
+       0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc,
+       0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x81,
+       0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xcf,0x89,
+       0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd,0x82,0x00,0xd2,0x28,
+       0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xa9,0xcc,0x93,0x00,0x01,0xff,0xce,0xa9,0xcc,
+       0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,
+       0xa9,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xa9,0xcc,0x93,
+       0xcc,0x81,0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,
+       0xce,0xa9,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcd,0x82,0x00,
+       0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x80,0x00,0x01,
+       0xff,0xce,0xb1,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc,0x80,0x00,0x01,
+       0xff,0xce,0xb5,0xcc,0x81,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x80,
+       0x00,0x01,0xff,0xce,0xb7,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x80,
+       0x00,0x01,0xff,0xce,0xb9,0xcc,0x81,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,
+       0xce,0xbf,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,
+       0xcf,0x85,0xcc,0x80,0x00,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00,0x91,0x12,0x10,0x09,
+       0x01,0xff,0xcf,0x89,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc,0x81,0x00,0x00,0x00,
+       0xe0,0xe1,0x02,0xcf,0x86,0xe5,0x91,0x01,0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16,
+       0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xce,0xb1,0xcc,
+       0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0xcd,0x85,
+       0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d,
+       0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xce,0xb1,0xcc,
+       0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,
+       0xcd,0x85,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x30,
+       0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0x91,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xce,
+       0x91,0xcc,0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0x91,0xcc,0x93,0xcc,0x80,
+       0xcd,0x85,0x00,0x01,0xff,0xce,0x91,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a,
+       0x10,0x0d,0x01,0xff,0xce,0x91,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xce,
+       0x91,0xcc,0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0x91,0xcc,0x93,
+       0xcd,0x82,0xcd,0x85,0x00,0x01,0xff,0xce,0x91,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00,
+       0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd,0x85,
+       0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,
+       0xcc,0x93,0xcc,0x80,0xcd,0x85,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0xcd,
+       0x85,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0xcd,0x85,
+       0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,
+       0xce,0xb7,0xcc,0x93,0xcd,0x82,0xcd,0x85,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,
+       0x82,0xcd,0x85,0x00,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0x97,0xcc,0x93,
+       0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,
+       0xce,0x97,0xcc,0x93,0xcc,0x80,0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcc,
+       0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0x97,0xcc,0x93,0xcc,0x81,
+       0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,
+       0x01,0xff,0xce,0x97,0xcc,0x93,0xcd,0x82,0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc,
+       0x94,0xcd,0x82,0xcd,0x85,0x00,0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b,
+       0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd,
+       0x85,0x00,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x80,0xcd,0x85,0x00,0x01,
+       0xff,0xcf,0x89,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,
+       0xcf,0x89,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,
+       0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82,0xcd,0x85,
+       0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x30,0xd1,0x16,
+       0x10,0x0b,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xce,0xa9,0xcc,
+       0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcc,0x80,0xcd,0x85,
+       0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d,
+       0x01,0xff,0xce,0xa9,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xce,0xa9,0xcc,
+       0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcd,0x82,
+       0xcd,0x85,0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00,0xd3,0x49,
+       0xd2,0x26,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x86,0x00,0x01,0xff,0xce,
+       0xb1,0xcc,0x84,0x00,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x80,0xcd,0x85,0x00,0x01,
+       0xff,0xce,0xb1,0xcd,0x85,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x81,
+       0xcd,0x85,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xb1,0xcd,0x82,0x00,0x01,0xff,
+       0xce,0xb1,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,
+       0x91,0xcc,0x86,0x00,0x01,0xff,0xce,0x91,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xce,
+       0x91,0xcc,0x80,0x00,0x01,0xff,0xce,0x91,0xcc,0x81,0x00,0xd1,0x0d,0x10,0x09,0x01,
+       0xff,0xce,0x91,0xcd,0x85,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xce,0xb9,0x00,0x01,
+       0x00,0xcf,0x86,0xe5,0x16,0x01,0xd4,0x8f,0xd3,0x44,0xd2,0x21,0xd1,0x0d,0x10,0x04,
+       0x01,0x00,0x01,0xff,0xc2,0xa8,0xcd,0x82,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,
+       0x80,0xcd,0x85,0x00,0x01,0xff,0xce,0xb7,0xcd,0x85,0x00,0xd1,0x0f,0x10,0x0b,0x01,
+       0xff,0xce,0xb7,0xcc,0x81,0xcd,0x85,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xb7,
+       0xcd,0x82,0x00,0x01,0xff,0xce,0xb7,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x24,0xd1,0x12,
+       0x10,0x09,0x01,0xff,0xce,0x95,0xcc,0x80,0x00,0x01,0xff,0xce,0x95,0xcc,0x81,0x00,
+       0x10,0x09,0x01,0xff,0xce,0x97,0xcc,0x80,0x00,0x01,0xff,0xce,0x97,0xcc,0x81,0x00,
+       0xd1,0x13,0x10,0x09,0x01,0xff,0xce,0x97,0xcd,0x85,0x00,0x01,0xff,0xe1,0xbe,0xbf,
+       0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0xe1,0xbe,0xbf,0xcc,0x81,0x00,0x01,0xff,0xe1,
+       0xbe,0xbf,0xcd,0x82,0x00,0xd3,0x40,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,
+       0xb9,0xcc,0x86,0x00,0x01,0xff,0xce,0xb9,0xcc,0x84,0x00,0x10,0x0b,0x01,0xff,0xce,
+       0xb9,0xcc,0x88,0xcc,0x80,0x00,0x01,0xff,0xce,0xb9,0xcc,0x88,0xcc,0x81,0x00,0x51,
+       0x04,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcd,0x82,0x00,0x01,0xff,0xce,0xb9,
+       0xcc,0x88,0xcd,0x82,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x99,0xcc,
+       0x86,0x00,0x01,0xff,0xce,0x99,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xce,0x99,0xcc,
+       0x80,0x00,0x01,0xff,0xce,0x99,0xcc,0x81,0x00,0xd1,0x0e,0x10,0x04,0x00,0x00,0x01,
+       0xff,0xe1,0xbf,0xbe,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0xe1,0xbf,0xbe,0xcc,0x81,
+       0x00,0x01,0xff,0xe1,0xbf,0xbe,0xcd,0x82,0x00,0xd4,0x93,0xd3,0x4e,0xd2,0x28,0xd1,
+       0x12,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x86,0x00,0x01,0xff,0xcf,0x85,0xcc,0x84,
+       0x00,0x10,0x0b,0x01,0xff,0xcf,0x85,0xcc,0x88,0xcc,0x80,0x00,0x01,0xff,0xcf,0x85,
+       0xcc,0x88,0xcc,0x81,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xcf,0x81,0xcc,0x93,0x00,
+       0x01,0xff,0xcf,0x81,0xcc,0x94,0x00,0x10,0x09,0x01,0xff,0xcf,0x85,0xcd,0x82,0x00,
+       0x01,0xff,0xcf,0x85,0xcc,0x88,0xcd,0x82,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,
+       0xff,0xce,0xa5,0xcc,0x86,0x00,0x01,0xff,0xce,0xa5,0xcc,0x84,0x00,0x10,0x09,0x01,
+       0xff,0xce,0xa5,0xcc,0x80,0x00,0x01,0xff,0xce,0xa5,0xcc,0x81,0x00,0xd1,0x12,0x10,
+       0x09,0x01,0xff,0xce,0xa1,0xcc,0x94,0x00,0x01,0xff,0xc2,0xa8,0xcc,0x80,0x00,0x10,
+       0x09,0x01,0xff,0xc2,0xa8,0xcc,0x81,0x00,0x01,0xff,0x60,0x00,0xd3,0x3b,0xd2,0x18,
+       0x51,0x04,0x00,0x00,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x80,0xcd,0x85,0x00,0x01,
+       0xff,0xcf,0x89,0xcd,0x85,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x81,
+       0xcd,0x85,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xcf,0x89,0xcd,0x82,0x00,0x01,0xff,
+       0xcf,0x89,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,
+       0x9f,0xcc,0x80,0x00,0x01,0xff,0xce,0x9f,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,
+       0xa9,0xcc,0x80,0x00,0x01,0xff,0xce,0xa9,0xcc,0x81,0x00,0xd1,0x10,0x10,0x09,0x01,
+       0xff,0xce,0xa9,0xcd,0x85,0x00,0x01,0xff,0xc2,0xb4,0x00,0x10,0x04,0x01,0x00,0x00,
+       0x00,0xe0,0x7e,0x0c,0xcf,0x86,0xe5,0xbb,0x08,0xe4,0x14,0x06,0xe3,0xf7,0x02,0xe2,
+       0xbd,0x01,0xd1,0xd0,0xd0,0x4f,0xcf,0x86,0xd5,0x2e,0x94,0x2a,0xd3,0x18,0x92,0x14,
+       0x91,0x10,0x10,0x08,0x01,0xff,0xe2,0x80,0x82,0x00,0x01,0xff,0xe2,0x80,0x83,0x00,
+       0x01,0x00,0x01,0x00,0x92,0x0d,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,
+       0x00,0x01,0xff,0x00,0x01,0x00,0x94,0x1b,0x53,0x04,0x01,0x00,0xd2,0x09,0x11,0x04,
+       0x01,0x00,0x01,0xff,0x00,0x51,0x05,0x01,0xff,0x00,0x10,0x05,0x01,0xff,0x00,0x04,
+       0x00,0x01,0x00,0xcf,0x86,0xd5,0x48,0xd4,0x1c,0xd3,0x10,0x52,0x04,0x01,0x00,0x51,
+       0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06,0x00,0x52,0x04,0x04,0x00,0x11,0x04,0x04,
+       0x00,0x06,0x00,0xd3,0x1c,0xd2,0x0c,0x51,0x04,0x06,0x00,0x10,0x04,0x06,0x00,0x07,
+       0x00,0xd1,0x08,0x10,0x04,0x07,0x00,0x08,0x00,0x10,0x04,0x08,0x00,0x06,0x00,0x52,
+       0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x06,0x00,0xd4,0x23,0xd3,
+       0x14,0x52,0x05,0x06,0xff,0x00,0x91,0x0a,0x10,0x05,0x0a,0xff,0x00,0x00,0xff,0x00,
+       0x0f,0xff,0x00,0x92,0x0a,0x11,0x05,0x0f,0xff,0x00,0x01,0xff,0x00,0x01,0xff,0x00,
+       0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x00,0x00,0x01,0x00,
+       0x01,0x00,0xd0,0x7e,0xcf,0x86,0xd5,0x34,0xd4,0x14,0x53,0x04,0x01,0x00,0x52,0x04,
+       0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0xd3,0x10,0x52,0x04,
+       0x08,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x0c,0x00,0x0c,0x00,0x52,0x04,0x0c,0x00,
+       0x91,0x08,0x10,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0xd4,0x1c,0x53,0x04,0x01,0x00,
+       0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x02,0x00,0x91,0x08,0x10,0x04,
+       0x03,0x00,0x04,0x00,0x04,0x00,0xd3,0x10,0xd2,0x08,0x11,0x04,0x06,0x00,0x08,0x00,
+       0x11,0x04,0x08,0x00,0x0b,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00,0x0c,0x00,
+       0x10,0x04,0x0e,0x00,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x11,0x00,0x13,0x00,
+       0xcf,0x86,0xd5,0x28,0x54,0x04,0x00,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x01,0xe6,
+       0x01,0x01,0x01,0xe6,0xd2,0x0c,0x51,0x04,0x01,0x01,0x10,0x04,0x01,0x01,0x01,0xe6,
+       0x91,0x08,0x10,0x04,0x01,0xe6,0x01,0x00,0x01,0x00,0xd4,0x30,0xd3,0x1c,0xd2,0x0c,
+       0x91,0x08,0x10,0x04,0x01,0x00,0x01,0xe6,0x04,0x00,0xd1,0x08,0x10,0x04,0x06,0x00,
+       0x06,0x01,0x10,0x04,0x06,0x01,0x06,0xe6,0x92,0x10,0xd1,0x08,0x10,0x04,0x06,0xdc,
+       0x06,0xe6,0x10,0x04,0x06,0x01,0x08,0x01,0x09,0xdc,0x93,0x10,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x0a,0xe6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0x81,0xd0,0x4f,
+       0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x29,0xd3,0x13,0x52,0x04,0x01,0x00,0x51,0x04,
+       0x01,0x00,0x10,0x07,0x01,0xff,0xce,0xa9,0x00,0x01,0x00,0x92,0x12,0x51,0x04,0x01,
+       0x00,0x10,0x06,0x01,0xff,0x4b,0x00,0x01,0xff,0x41,0xcc,0x8a,0x00,0x01,0x00,0x53,
+       0x04,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x10,0x04,0x04,
+       0x00,0x07,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x06,0x00,0x06,0x00,0xcf,0x86,0x95,
+       0x2c,0xd4,0x18,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0xd1,0x08,0x10,0x04,0x08,
+       0x00,0x09,0x00,0x10,0x04,0x09,0x00,0x0a,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x0b,
+       0x00,0x10,0x04,0x0b,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x68,0xcf,
+       0x86,0xd5,0x48,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+       0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x92,0x0c,0x91,
+       0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x11,0x00,0x00,0x00,0x53,0x04,0x01,0x00,0x92,
+       0x18,0x51,0x04,0x01,0x00,0x10,0x0a,0x01,0xff,0xe2,0x86,0x90,0xcc,0xb8,0x00,0x01,
+       0xff,0xe2,0x86,0x92,0xcc,0xb8,0x00,0x01,0x00,0x94,0x1a,0x53,0x04,0x01,0x00,0x52,
+       0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x0a,0x01,0xff,0xe2,0x86,0x94,0xcc,0xb8,
+       0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x2e,0x94,0x2a,0x53,0x04,0x01,0x00,0x52,
+       0x04,0x01,0x00,0xd1,0x0e,0x10,0x04,0x01,0x00,0x01,0xff,0xe2,0x87,0x90,0xcc,0xb8,
+       0x00,0x10,0x0a,0x01,0xff,0xe2,0x87,0x94,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x87,0x92,
+       0xcc,0xb8,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x51,0x04,0x01,
+       0x00,0x10,0x04,0x01,0x00,0x04,0x00,0x04,0x00,0x93,0x08,0x12,0x04,0x04,0x00,0x06,
+       0x00,0x06,0x00,0xe2,0x38,0x02,0xe1,0x3f,0x01,0xd0,0x68,0xcf,0x86,0xd5,0x3e,0x94,
+       0x3a,0xd3,0x16,0x52,0x04,0x01,0x00,0x91,0x0e,0x10,0x0a,0x01,0xff,0xe2,0x88,0x83,
+       0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0xd2,0x12,0x91,0x0e,0x10,0x04,0x01,0x00,0x01,
+       0xff,0xe2,0x88,0x88,0xcc,0xb8,0x00,0x01,0x00,0x91,0x0e,0x10,0x0a,0x01,0xff,0xe2,
+       0x88,0x8b,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x24,0x93,0x20,0x52,
+       0x04,0x01,0x00,0xd1,0x0e,0x10,0x0a,0x01,0xff,0xe2,0x88,0xa3,0xcc,0xb8,0x00,0x01,
+       0x00,0x10,0x0a,0x01,0xff,0xe2,0x88,0xa5,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01,
+       0x00,0xcf,0x86,0xd5,0x48,0x94,0x44,0xd3,0x2e,0xd2,0x12,0x91,0x0e,0x10,0x04,0x01,
+       0x00,0x01,0xff,0xe2,0x88,0xbc,0xcc,0xb8,0x00,0x01,0x00,0xd1,0x0e,0x10,0x0a,0x01,
+       0xff,0xe2,0x89,0x83,0xcc,0xb8,0x00,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe2,
+       0x89,0x85,0xcc,0xb8,0x00,0x92,0x12,0x91,0x0e,0x10,0x04,0x01,0x00,0x01,0xff,0xe2,
+       0x89,0x88,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x40,0xd3,0x1e,0x92,
+       0x1a,0xd1,0x0c,0x10,0x08,0x01,0xff,0x3d,0xcc,0xb8,0x00,0x01,0x00,0x10,0x0a,0x01,
+       0xff,0xe2,0x89,0xa1,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,
+       0x0e,0x10,0x04,0x01,0x00,0x01,0xff,0xe2,0x89,0x8d,0xcc,0xb8,0x00,0x10,0x08,0x01,
+       0xff,0x3c,0xcc,0xb8,0x00,0x01,0xff,0x3e,0xcc,0xb8,0x00,0xd3,0x30,0xd2,0x18,0x91,
+       0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xa4,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x89,0xa5,
+       0xcc,0xb8,0x00,0x01,0x00,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xb2,0xcc,0xb8,
+       0x00,0x01,0xff,0xe2,0x89,0xb3,0xcc,0xb8,0x00,0x01,0x00,0x92,0x18,0x91,0x14,0x10,
+       0x0a,0x01,0xff,0xe2,0x89,0xb6,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x89,0xb7,0xcc,0xb8,
+       0x00,0x01,0x00,0x01,0x00,0xd0,0x86,0xcf,0x86,0xd5,0x50,0x94,0x4c,0xd3,0x30,0xd2,
+       0x18,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xba,0xcc,0xb8,0x00,0x01,0xff,0xe2,
+       0x89,0xbb,0xcc,0xb8,0x00,0x01,0x00,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0x82,
+       0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0x83,0xcc,0xb8,0x00,0x01,0x00,0x92,0x18,0x91,
+       0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0x86,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0x87,
+       0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x30,0x53,0x04,0x01,0x00,0x52,
+       0x04,0x01,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xa2,0xcc,0xb8,0x00,0x01,
+       0xff,0xe2,0x8a,0xa8,0xcc,0xb8,0x00,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xa9,0xcc,0xb8,
+       0x00,0x01,0xff,0xe2,0x8a,0xab,0xcc,0xb8,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,
+       0x00,0xd4,0x5c,0xd3,0x2c,0x92,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xbc,
+       0xcc,0xb8,0x00,0x01,0xff,0xe2,0x89,0xbd,0xcc,0xb8,0x00,0x10,0x0a,0x01,0xff,0xe2,
+       0x8a,0x91,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0x92,0xcc,0xb8,0x00,0x01,0x00,0xd2,
+       0x18,0x51,0x04,0x01,0x00,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xb2,0xcc,0xb8,0x00,0x01,
+       0xff,0xe2,0x8a,0xb3,0xcc,0xb8,0x00,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xb4,
+       0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0xb5,0xcc,0xb8,0x00,0x01,0x00,0x93,0x0c,0x92,
+       0x08,0x11,0x04,0x01,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xd1,0x64,0xd0,0x3e,0xcf,
+       0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x04,
+       0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x20,0x53,0x04,0x01,0x00,0x92,
+       0x18,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x80,0x88,0x00,0x10,0x08,0x01,
+       0xff,0xe3,0x80,0x89,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,
+       0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,
+       0x04,0x01,0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x06,0x00,0x04,0x00,0x04,0x00,0xd0,
+       0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92,0x0c,0x51,
+       0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xcf,0x86,0xd5,
+       0x2c,0xd4,0x14,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x51,0x04,0x06,0x00,0x10,
+       0x04,0x06,0x00,0x07,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00,0x08,
+       0x00,0x08,0x00,0x08,0x00,0x12,0x04,0x08,0x00,0x09,0x00,0xd4,0x14,0x53,0x04,0x09,
+       0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0xd3,
+       0x08,0x12,0x04,0x0c,0x00,0x10,0x00,0xd2,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10,
+       0x00,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0xd3,0xa6,0xd2,
+       0x74,0xd1,0x40,0xd0,0x22,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x18,0x93,0x14,0x52,
+       0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x10,0x04,0x04,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x01,0x00,0x92,
+       0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+       0x00,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x14,0x53,
+       0x04,0x01,0x00,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06,0x00,0x06,
+       0x00,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x51,0x04,0x06,0x00,0x10,0x04,0x06,
+       0x00,0x07,0x00,0xd1,0x06,0xcf,0x06,0x01,0x00,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x54,
+       0x04,0x01,0x00,0x93,0x0c,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x06,0x00,0x06,
+       0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x13,0x04,0x04,
+       0x00,0x06,0x00,0xd2,0xdc,0xd1,0x48,0xd0,0x26,0xcf,0x86,0x95,0x20,0x54,0x04,0x01,
+       0x00,0xd3,0x0c,0x52,0x04,0x01,0x00,0x11,0x04,0x07,0x00,0x06,0x00,0x92,0x0c,0x91,
+       0x08,0x10,0x04,0x08,0x00,0x04,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55,
+       0x04,0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x04,0x00,0x06,
+       0x00,0x06,0x00,0x52,0x04,0x06,0x00,0x11,0x04,0x06,0x00,0x08,0x00,0xd0,0x5e,0xcf,
+       0x86,0xd5,0x2c,0xd4,0x10,0x53,0x04,0x06,0x00,0x92,0x08,0x11,0x04,0x06,0x00,0x07,
+       0x00,0x07,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x07,0x00,0x08,0x00,0x08,0x00,0x52,
+       0x04,0x08,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x0a,0x00,0x0b,0x00,0xd4,0x10,0x93,
+       0x0c,0x92,0x08,0x11,0x04,0x07,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0xd3,0x10,0x92,
+       0x0c,0x51,0x04,0x08,0x00,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x52,0x04,0x0a,
+       0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x1c,0x94,
+       0x18,0xd3,0x08,0x12,0x04,0x0a,0x00,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,
+       0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0x0b,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x51,
+       0x04,0x0b,0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0x0c,0x00,0x0b,0x00,0x0b,0x00,0xd1,
+       0xa8,0xd0,0x42,0xcf,0x86,0xd5,0x28,0x94,0x24,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,
+       0x04,0x10,0x00,0x01,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x0c,0x00,0x01,
+       0x00,0x92,0x08,0x11,0x04,0x01,0x00,0x0c,0x00,0x01,0x00,0x01,0x00,0x94,0x14,0x53,
+       0x04,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x01,0x00,0x01,0x00,0x01,
+       0x00,0x01,0x00,0xcf,0x86,0xd5,0x40,0xd4,0x18,0x53,0x04,0x01,0x00,0x52,0x04,0x01,
+       0x00,0xd1,0x08,0x10,0x04,0x0c,0x00,0x01,0x00,0x10,0x04,0x0c,0x00,0x01,0x00,0xd3,
+       0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x0c,0x00,0x51,0x04,0x0c,
+       0x00,0x10,0x04,0x01,0x00,0x0b,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,
+       0x04,0x01,0x00,0x0c,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,
+       0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x06,0x00,0x93,0x0c,0x52,0x04,0x06,0x00,0x11,
+       0x04,0x06,0x00,0x01,0x00,0x01,0x00,0xd0,0x3e,0xcf,0x86,0xd5,0x18,0x54,0x04,0x01,
+       0x00,0x93,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x0c,0x00,0x0c,
+       0x00,0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,
+       0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,
+       0x04,0x01,0x00,0x0c,0x00,0xcf,0x86,0xd5,0x2c,0x94,0x28,0xd3,0x10,0x52,0x04,0x08,
+       0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x09,0x00,0xd2,0x0c,0x51,0x04,0x09,
+       0x00,0x10,0x04,0x09,0x00,0x0d,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x0d,0x00,0x0c,
+       0x00,0x06,0x00,0x94,0x0c,0x53,0x04,0x06,0x00,0x12,0x04,0x06,0x00,0x0a,0x00,0x06,
+       0x00,0xe4,0x39,0x01,0xd3,0x0c,0xd2,0x06,0xcf,0x06,0x04,0x00,0xcf,0x06,0x06,0x00,
+       0xd2,0x30,0xd1,0x06,0xcf,0x06,0x06,0x00,0xd0,0x06,0xcf,0x06,0x06,0x00,0xcf,0x86,
+       0x95,0x1e,0x54,0x04,0x06,0x00,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x91,0x0e,
+       0x10,0x0a,0x06,0xff,0xe2,0xab,0x9d,0xcc,0xb8,0x00,0x06,0x00,0x06,0x00,0x06,0x00,
+       0xd1,0x80,0xd0,0x3a,0xcf,0x86,0xd5,0x28,0xd4,0x10,0x53,0x04,0x07,0x00,0x52,0x04,
+       0x07,0x00,0x11,0x04,0x07,0x00,0x08,0x00,0xd3,0x08,0x12,0x04,0x08,0x00,0x09,0x00,
+       0x92,0x0c,0x51,0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x94,0x0c,
+       0x93,0x08,0x12,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xcf,0x86,0xd5,0x30,
+       0xd4,0x14,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,
+       0x10,0x00,0x10,0x00,0xd3,0x10,0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,
+       0x0b,0x00,0x0b,0x00,0x92,0x08,0x11,0x04,0x0b,0x00,0x10,0x00,0x10,0x00,0x54,0x04,
+       0x10,0x00,0x93,0x0c,0x52,0x04,0x10,0x00,0x11,0x04,0x00,0x00,0x10,0x00,0x10,0x00,
+       0xd0,0x32,0xcf,0x86,0xd5,0x14,0x54,0x04,0x10,0x00,0x93,0x0c,0x52,0x04,0x10,0x00,
+       0x11,0x04,0x10,0x00,0x00,0x00,0x10,0x00,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,
+       0xd2,0x08,0x11,0x04,0x10,0x00,0x14,0x00,0x91,0x08,0x10,0x04,0x14,0x00,0x10,0x00,
+       0x10,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x10,0x00,0x15,0x00,0x10,0x00,0x10,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,
+       0x10,0x00,0x10,0x04,0x13,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0xd4,0x0c,0x53,0x04,
+       0x14,0x00,0x12,0x04,0x14,0x00,0x11,0x00,0x53,0x04,0x14,0x00,0x52,0x04,0x14,0x00,
+       0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x15,0x00,0xe3,0xb9,0x01,0xd2,0xac,0xd1,
+       0x68,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x08,0x00,0x94,0x14,0x53,0x04,0x08,0x00,0x52,
+       0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0x08,0x00,0xcf,
+       0x86,0xd5,0x18,0x54,0x04,0x08,0x00,0x53,0x04,0x08,0x00,0x52,0x04,0x08,0x00,0x51,
+       0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0xd4,0x14,0x53,0x04,0x09,0x00,0x52,
+       0x04,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0xd3,0x10,0x92,
+       0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x0a,0x00,0x0a,0x00,0x09,0x00,0x52,0x04,0x0a,
+       0x00,0x11,0x04,0x0a,0x00,0x0b,0x00,0xd0,0x06,0xcf,0x06,0x08,0x00,0xcf,0x86,0x55,
+       0x04,0x08,0x00,0xd4,0x1c,0x53,0x04,0x08,0x00,0xd2,0x0c,0x51,0x04,0x08,0x00,0x10,
+       0x04,0x08,0x00,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x0b,0xe6,0xd3,
+       0x0c,0x92,0x08,0x11,0x04,0x0b,0xe6,0x0d,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,
+       0x04,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0xd1,0x6c,0xd0,0x2a,0xcf,0x86,0x55,
+       0x04,0x08,0x00,0x94,0x20,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,
+       0x04,0x00,0x00,0x0d,0x00,0x52,0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,
+       0x00,0x00,0x00,0x08,0x00,0xcf,0x86,0x55,0x04,0x08,0x00,0xd4,0x1c,0xd3,0x0c,0x52,
+       0x04,0x08,0x00,0x11,0x04,0x08,0x00,0x0d,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,
+       0x00,0x10,0x04,0x00,0x00,0x08,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,
+       0x04,0x00,0x00,0x0c,0x09,0xd0,0x5a,0xcf,0x86,0xd5,0x18,0x54,0x04,0x08,0x00,0x93,
+       0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0x00,
+       0x00,0xd4,0x20,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,
+       0x00,0x00,0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,
+       0x00,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,
+       0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0xcf,
+       0x86,0x95,0x40,0xd4,0x20,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,
+       0x04,0x08,0x00,0x00,0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,
+       0x00,0x00,0x00,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,
+       0x00,0x00,0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,
+       0x00,0x0a,0xe6,0xd2,0x9c,0xd1,0x68,0xd0,0x32,0xcf,0x86,0xd5,0x14,0x54,0x04,0x08,
+       0x00,0x53,0x04,0x08,0x00,0x52,0x04,0x0a,0x00,0x11,0x04,0x08,0x00,0x0a,0x00,0x54,
+       0x04,0x0a,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x0d,
+       0x00,0x0d,0x00,0x12,0x04,0x0d,0x00,0x10,0x00,0xcf,0x86,0x95,0x30,0x94,0x2c,0xd3,
+       0x18,0xd2,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x12,0x00,0x91,0x08,0x10,
+       0x04,0x12,0x00,0x13,0x00,0x13,0x00,0xd2,0x08,0x11,0x04,0x13,0x00,0x14,0x00,0x51,
+       0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0xd0,0x1e,0xcf,
+       0x86,0x95,0x18,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92,0x0c,0x51,0x04,0x04,
+       0x00,0x10,0x04,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xcf,0x86,0x55,0x04,0x04,
+       0x00,0x54,0x04,0x04,0x00,0x93,0x08,0x12,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xd1,
+       0x06,0xcf,0x06,0x04,0x00,0xd0,0x06,0xcf,0x06,0x04,0x00,0xcf,0x86,0xd5,0x14,0x54,
+       0x04,0x04,0x00,0x93,0x0c,0x52,0x04,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x00,
+       0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x04,0x00,0x12,0x04,0x04,0x00,0x00,0x00,0xcf,
+       0x86,0xe5,0xa6,0x05,0xe4,0x9f,0x05,0xe3,0x96,0x04,0xe2,0xe4,0x03,0xe1,0xc0,0x01,
+       0xd0,0x3e,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x1c,0x53,0x04,0x01,0x00,0xd2,0x0c,
+       0x51,0x04,0x01,0x00,0x10,0x04,0x01,0xda,0x01,0xe4,0x91,0x08,0x10,0x04,0x01,0xe8,
+       0x01,0xde,0x01,0xe0,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x04,0x00,0x10,0x04,
+       0x04,0x00,0x06,0x00,0x51,0x04,0x06,0x00,0x10,0x04,0x04,0x00,0x01,0x00,0xcf,0x86,
+       0xd5,0xaa,0xd4,0x32,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,
+       0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,
+       0x8b,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x8d,0xe3,0x82,
+       0x99,0x00,0x01,0x00,0xd3,0x3c,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,
+       0x8f,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x91,0xe3,0x82,
+       0x99,0x00,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0x93,0xe3,0x82,0x99,
+       0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x95,0xe3,0x82,0x99,0x00,0x01,0x00,
+       0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0x97,0xe3,0x82,0x99,0x00,0x01,
+       0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x99,0xe3,0x82,0x99,0x00,0x01,0x00,0xd1,0x0f,
+       0x10,0x0b,0x01,0xff,0xe3,0x81,0x9b,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,
+       0xff,0xe3,0x81,0x9d,0xe3,0x82,0x99,0x00,0x01,0x00,0xd4,0x53,0xd3,0x3c,0xd2,0x1e,
+       0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0x9f,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,
+       0x0b,0x01,0xff,0xe3,0x81,0xa1,0xe3,0x82,0x99,0x00,0x01,0x00,0xd1,0x0f,0x10,0x04,
+       0x01,0x00,0x01,0xff,0xe3,0x81,0xa4,0xe3,0x82,0x99,0x00,0x10,0x04,0x01,0x00,0x01,
+       0xff,0xe3,0x81,0xa6,0xe3,0x82,0x99,0x00,0x92,0x13,0x91,0x0f,0x10,0x04,0x01,0x00,
+       0x01,0xff,0xe3,0x81,0xa8,0xe3,0x82,0x99,0x00,0x01,0x00,0x01,0x00,0xd3,0x4a,0xd2,
+       0x25,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe3,0x81,0xaf,0xe3,0x82,0x99,0x00,0x01,0xff,
+       0xe3,0x81,0xaf,0xe3,0x82,0x9a,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x81,0xb2,
+       0xe3,0x82,0x99,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0xb2,0xe3,0x82,0x9a,
+       0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0xb5,0xe3,0x82,0x99,0x00,0x01,0xff,
+       0xe3,0x81,0xb5,0xe3,0x82,0x9a,0x00,0xd2,0x1e,0xd1,0x0f,0x10,0x04,0x01,0x00,0x01,
+       0xff,0xe3,0x81,0xb8,0xe3,0x82,0x99,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0xb8,0xe3,
+       0x82,0x9a,0x00,0x01,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xe3,0x81,0xbb,0xe3,0x82,
+       0x99,0x00,0x01,0xff,0xe3,0x81,0xbb,0xe3,0x82,0x9a,0x00,0x01,0x00,0xd0,0xee,0xcf,
+       0x86,0xd5,0x42,0x54,0x04,0x01,0x00,0xd3,0x1b,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10,
+       0x0b,0x01,0xff,0xe3,0x81,0x86,0xe3,0x82,0x99,0x00,0x06,0x00,0x10,0x04,0x06,0x00,
+       0x00,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x08,0x10,0x04,0x01,0x08,
+       0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0x9d,0xe3,0x82,0x99,
+       0x00,0x06,0x00,0xd4,0x32,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x06,0x00,0x01,
+       0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,
+       0x82,0xab,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xad,0xe3,
+       0x82,0x99,0x00,0x01,0x00,0xd3,0x3c,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,
+       0x82,0xaf,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb1,0xe3,
+       0x82,0x99,0x00,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb3,0xe3,0x82,
+       0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb5,0xe3,0x82,0x99,0x00,0x01,
+       0x00,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb7,0xe3,0x82,0x99,0x00,
+       0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb9,0xe3,0x82,0x99,0x00,0x01,0x00,0xd1,
+       0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xbb,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,
+       0x01,0xff,0xe3,0x82,0xbd,0xe3,0x82,0x99,0x00,0x01,0x00,0xcf,0x86,0xd5,0xd5,0xd4,
+       0x53,0xd3,0x3c,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xbf,0xe3,0x82,
+       0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x83,0x81,0xe3,0x82,0x99,0x00,0x01,
+       0x00,0xd1,0x0f,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x84,0xe3,0x82,0x99,0x00,
+       0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x86,0xe3,0x82,0x99,0x00,0x92,0x13,0x91,
+       0x0f,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x88,0xe3,0x82,0x99,0x00,0x01,0x00,
+       0x01,0x00,0xd3,0x4a,0xd2,0x25,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe3,0x83,0x8f,0xe3,
+       0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0x8f,0xe3,0x82,0x9a,0x00,0x10,0x04,0x01,0x00,
+       0x01,0xff,0xe3,0x83,0x92,0xe3,0x82,0x99,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,
+       0x83,0x92,0xe3,0x82,0x9a,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x83,0x95,0xe3,
+       0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0x95,0xe3,0x82,0x9a,0x00,0xd2,0x1e,0xd1,0x0f,
+       0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x98,0xe3,0x82,0x99,0x00,0x10,0x0b,0x01,
+       0xff,0xe3,0x83,0x98,0xe3,0x82,0x9a,0x00,0x01,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,
+       0xe3,0x83,0x9b,0xe3,0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0x9b,0xe3,0x82,0x9a,0x00,
+       0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x22,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10,0x0b,
+       0x01,0xff,0xe3,0x82,0xa6,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x04,0x01,0x00,0x01,
+       0xff,0xe3,0x83,0xaf,0xe3,0x82,0x99,0x00,0xd2,0x25,0xd1,0x16,0x10,0x0b,0x01,0xff,
+       0xe3,0x83,0xb0,0xe3,0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0xb1,0xe3,0x82,0x99,0x00,
+       0x10,0x0b,0x01,0xff,0xe3,0x83,0xb2,0xe3,0x82,0x99,0x00,0x01,0x00,0x51,0x04,0x01,
+       0x00,0x10,0x0b,0x01,0xff,0xe3,0x83,0xbd,0xe3,0x82,0x99,0x00,0x06,0x00,0xd1,0x65,
+       0xd0,0x46,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x52,0x04,0x00,0x00,0x91,0x08,
+       0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x18,0x53,0x04,
+       0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x0a,0x00,0x10,0x04,
+       0x13,0x00,0x14,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,
+       0x01,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x15,0x93,0x11,
+       0x52,0x04,0x01,0x00,0x91,0x09,0x10,0x05,0x01,0xff,0x00,0x01,0x00,0x01,0x00,0x01,
+       0x00,0x01,0x00,0xd0,0x32,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x01,0x00,0x52,
+       0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x54,
+       0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,
+       0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x08,0x14,0x04,0x08,0x00,0x0a,0x00,0x94,
+       0x0c,0x93,0x08,0x12,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0xd2,0xa4,0xd1,
+       0x5c,0xd0,0x22,0xcf,0x86,0x95,0x1c,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x52,
+       0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x07,0x00,0x10,0x04,0x07,0x00,0x00,
+       0x00,0x01,0x00,0xcf,0x86,0xd5,0x20,0xd4,0x0c,0x93,0x08,0x12,0x04,0x01,0x00,0x0b,
+       0x00,0x0b,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00,0x06,0x00,0x06,
+       0x00,0x06,0x00,0x06,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01,
+       0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x08,0x00,0x01,0x00,0xd0,0x1e,0xcf,0x86,0x55,
+       0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,
+       0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xcf,0x86,0xd5,0x10,0x94,0x0c,0x53,
+       0x04,0x01,0x00,0x12,0x04,0x01,0x00,0x07,0x00,0x01,0x00,0x54,0x04,0x01,0x00,0x53,
+       0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x16,
+       0x00,0xd1,0x30,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,
+       0x04,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+       0x00,0x07,0x00,0x92,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x01,0x00,0x01,
+       0x00,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x01,0x00,0x53,
+       0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x07,0x00,0x54,0x04,0x01,
+       0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+       0x00,0x07,0x00,0xcf,0x06,0x04,0x00,0xcf,0x06,0x04,0x00,0xd1,0x48,0xd0,0x40,0xcf,
+       0x86,0xd5,0x06,0xcf,0x06,0x04,0x00,0xd4,0x06,0xcf,0x06,0x04,0x00,0xd3,0x2c,0xd2,
+       0x06,0xcf,0x06,0x04,0x00,0xd1,0x06,0xcf,0x06,0x04,0x00,0xd0,0x1a,0xcf,0x86,0x55,
+       0x04,0x04,0x00,0x54,0x04,0x04,0x00,0x93,0x0c,0x52,0x04,0x04,0x00,0x11,0x04,0x04,
+       0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x07,0x00,0xcf,0x06,0x01,0x00,0xcf,0x86,0xcf,
+       0x06,0x01,0x00,0xcf,0x86,0xcf,0x06,0x01,0x00,0xe2,0x71,0x05,0xd1,0x8c,0xd0,0x08,
+       0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01,0x00,0xd4,0x06,
+       0xcf,0x06,0x01,0x00,0xd3,0x06,0xcf,0x06,0x01,0x00,0xd2,0x06,0xcf,0x06,0x01,0x00,
+       0xd1,0x06,0xcf,0x06,0x01,0x00,0xd0,0x22,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x10,
+       0x93,0x0c,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x08,0x00,0x08,0x00,0x53,0x04,
+       0x08,0x00,0x12,0x04,0x08,0x00,0x0a,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x18,0xd3,0x08,
+       0x12,0x04,0x0a,0x00,0x0b,0x00,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0d,0x00,
+       0x11,0x00,0x11,0x00,0x93,0x0c,0x52,0x04,0x11,0x00,0x11,0x04,0x11,0x00,0x13,0x00,
+       0x13,0x00,0x94,0x14,0x53,0x04,0x13,0x00,0x92,0x0c,0x51,0x04,0x13,0x00,0x10,0x04,
+       0x13,0x00,0x14,0x00,0x14,0x00,0x00,0x00,0xe0,0xdb,0x04,0xcf,0x86,0xe5,0xdf,0x01,
+       0xd4,0x06,0xcf,0x06,0x04,0x00,0xd3,0x74,0xd2,0x6e,0xd1,0x06,0xcf,0x06,0x04,0x00,
+       0xd0,0x3e,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x04,0x00,0x52,0x04,0x04,0x00,
+       0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xd4,0x10,0x93,0x0c,
+       0x92,0x08,0x11,0x04,0x04,0x00,0x06,0x00,0x04,0x00,0x04,0x00,0x93,0x10,0x52,0x04,
+       0x04,0x00,0x91,0x08,0x10,0x04,0x06,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xcf,0x86,
+       0x95,0x24,0x94,0x20,0x93,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x06,0x00,
+       0x04,0x00,0xd1,0x08,0x10,0x04,0x04,0x00,0x06,0x00,0x10,0x04,0x04,0x00,0x00,0x00,
+       0x00,0x00,0x0b,0x00,0x0b,0x00,0xcf,0x06,0x0a,0x00,0xd2,0x84,0xd1,0x4c,0xd0,0x16,
+       0xcf,0x86,0x55,0x04,0x0a,0x00,0x94,0x0c,0x53,0x04,0x0a,0x00,0x12,0x04,0x0a,0x00,
+       0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,0x0a,0x00,0xd4,0x1c,0xd3,0x0c,0x92,0x08,
+       0x11,0x04,0x0c,0x00,0x0a,0x00,0x0a,0x00,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00,
+       0x10,0x04,0x0a,0x00,0x0a,0xe6,0xd3,0x08,0x12,0x04,0x0a,0x00,0x0d,0xe6,0x52,0x04,
+       0x0d,0xe6,0x11,0x04,0x0a,0xe6,0x0a,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,
+       0x0a,0x00,0x53,0x04,0x0a,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,
+       0x11,0xe6,0x0d,0xe6,0x0b,0x00,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,0x0b,0x00,
+       0x93,0x0c,0x92,0x08,0x11,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x00,0x00,0x00,0xd1,0x40,
+       0xd0,0x3a,0xcf,0x86,0xd5,0x24,0x54,0x04,0x08,0x00,0xd3,0x10,0x52,0x04,0x08,0x00,
+       0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x09,0x00,0x92,0x0c,0x51,0x04,0x09,0x00,
+       0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x94,0x10,0x93,0x0c,0x92,0x08,0x11,0x04,
+       0x09,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xcf,0x06,0x0a,0x00,0xd0,0x5e,
+       0xcf,0x86,0xd5,0x28,0xd4,0x18,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00,0xd1,0x08,
+       0x10,0x04,0x0a,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x11,0x00,0x93,0x0c,0x92,0x08,
+       0x11,0x04,0x0c,0x00,0x0d,0x00,0x10,0x00,0x10,0x00,0xd4,0x1c,0x53,0x04,0x0c,0x00,
+       0xd2,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0d,0x00,0x10,0x00,0x51,0x04,0x10,0x00,
+       0x10,0x04,0x12,0x00,0x14,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x10,0x00,0x11,0x00,
+       0x11,0x00,0x92,0x08,0x11,0x04,0x14,0x00,0x15,0x00,0x15,0x00,0xcf,0x86,0xd5,0x1c,
+       0x94,0x18,0x93,0x14,0xd2,0x08,0x11,0x04,0x00,0x00,0x15,0x00,0x51,0x04,0x15,0x00,
+       0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x04,0x00,0x00,0xd3,0x10,
+       0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x92,0x0c,
+       0x51,0x04,0x0d,0x00,0x10,0x04,0x0c,0x00,0x0a,0x00,0x0a,0x00,0xe4,0xf2,0x02,0xe3,
+       0x65,0x01,0xd2,0x98,0xd1,0x48,0xd0,0x36,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,
+       0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x09,0x08,0x00,0x08,0x00,
+       0x08,0x00,0xd4,0x0c,0x53,0x04,0x08,0x00,0x12,0x04,0x08,0x00,0x00,0x00,0x53,0x04,
+       0x0b,0x00,0x92,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,
+       0x09,0x00,0x54,0x04,0x09,0x00,0x13,0x04,0x09,0x00,0x00,0x00,0xd0,0x06,0xcf,0x06,
+       0x0a,0x00,0xcf,0x86,0xd5,0x2c,0xd4,0x1c,0xd3,0x10,0x52,0x04,0x0a,0x00,0x91,0x08,
+       0x10,0x04,0x0a,0x09,0x12,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,
+       0x0a,0x00,0x53,0x04,0x0a,0x00,0x92,0x08,0x11,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,
+       0x54,0x04,0x0b,0xe6,0xd3,0x0c,0x92,0x08,0x11,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x00,
+       0x52,0x04,0x0b,0x00,0x11,0x04,0x11,0x00,0x14,0x00,0xd1,0x60,0xd0,0x22,0xcf,0x86,
+       0x55,0x04,0x0a,0x00,0x94,0x18,0x53,0x04,0x0a,0x00,0xd2,0x0c,0x51,0x04,0x0a,0x00,
+       0x10,0x04,0x0a,0x00,0x0a,0xdc,0x11,0x04,0x0a,0xdc,0x0a,0x00,0x0a,0x00,0xcf,0x86,
+       0xd5,0x24,0x54,0x04,0x0a,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x0a,0x00,0x10,0x04,
+       0x0a,0x00,0x0a,0x09,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,
+       0x00,0x00,0x0a,0x00,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,
+       0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xd0,0x1e,0xcf,0x86,0x55,0x04,
+       0x0b,0x00,0x54,0x04,0x0b,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04,
+       0x0b,0x00,0x0b,0x07,0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x34,0xd4,0x20,0xd3,0x10,
+       0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x09,0x0b,0x00,0x0b,0x00,0x0b,0x00,0x52,0x04,
+       0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x53,0x04,0x0b,0x00,
+       0xd2,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x0b,0x00,0x54,0x04,
+       0x10,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,
+       0x10,0x00,0x00,0x00,0xd2,0xd0,0xd1,0x50,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x0a,0x00,
+       0x54,0x04,0x0a,0x00,0x93,0x10,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10,0x04,
+       0x0a,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x20,0xd4,0x10,0x53,0x04,0x0a,0x00,
+       0x52,0x04,0x0a,0x00,0x11,0x04,0x0a,0x00,0x00,0x00,0x53,0x04,0x0a,0x00,0x92,0x08,
+       0x11,0x04,0x0a,0x00,0x00,0x00,0x0a,0x00,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,
+       0x12,0x04,0x0b,0x00,0x10,0x00,0xd0,0x3a,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,
+       0x0b,0x00,0xd3,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0xe6,
+       0xd1,0x08,0x10,0x04,0x0b,0xdc,0x0b,0x00,0x10,0x04,0x0b,0x00,0x0b,0xe6,0xd2,0x0c,
+       0x91,0x08,0x10,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x00,0x11,0x04,0x0b,0x00,0x0b,0xe6,
+       0xcf,0x86,0xd5,0x2c,0xd4,0x18,0x93,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00,
+       0x0b,0xe6,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x00,0x00,
+       0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x0b,0x00,0x54,0x04,
+       0x0d,0x00,0x93,0x10,0x52,0x04,0x0d,0x00,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x09,
+       0x00,0x00,0x00,0x00,0xd1,0x8c,0xd0,0x72,0xcf,0x86,0xd5,0x4c,0xd4,0x30,0xd3,0x18,
+       0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,0x51,0x04,0x0c,0x00,
+       0x10,0x04,0x0c,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,
+       0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x93,0x18,0xd2,0x0c,
+       0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,
+       0x0c,0x00,0x00,0x00,0x00,0x00,0x94,0x20,0xd3,0x10,0x52,0x04,0x0c,0x00,0x51,0x04,
+       0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,
+       0x10,0x04,0x0c,0x00,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0x94,0x10,
+       0x93,0x0c,0x52,0x04,0x11,0x00,0x11,0x04,0x10,0x00,0x15,0x00,0x00,0x00,0x11,0x00,
+       0xd0,0x06,0xcf,0x06,0x11,0x00,0xcf,0x86,0x55,0x04,0x0b,0x00,0xd4,0x14,0x53,0x04,
+       0x0b,0x00,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0x09,0x00,0x00,
+       0x53,0x04,0x0b,0x00,0x92,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,
+       0x02,0xff,0xff,0xcf,0x86,0xcf,0x06,0x02,0xff,0xff,0xd1,0x76,0xd0,0x09,0xcf,0x86,
+       0xcf,0x06,0x02,0xff,0xff,0xcf,0x86,0x85,0xd4,0x07,0xcf,0x06,0x02,0xff,0xff,0xd3,
+       0x07,0xcf,0x06,0x02,0xff,0xff,0xd2,0x07,0xcf,0x06,0x02,0xff,0xff,0xd1,0x07,0xcf,
+       0x06,0x02,0xff,0xff,0xd0,0x18,0xcf,0x86,0x55,0x05,0x02,0xff,0xff,0x94,0x0d,0x93,
+       0x09,0x12,0x05,0x02,0xff,0xff,0x00,0x00,0x00,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x24,
+       0x94,0x20,0xd3,0x10,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,
+       0x00,0x00,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x0b,0x00,
+       0x0b,0x00,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,0x12,0x04,0x0b,0x00,0x00,0x00,
+       0xd0,0x08,0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01,0x00,
+       0xe4,0x9c,0x10,0xe3,0x16,0x08,0xd2,0x06,0xcf,0x06,0x01,0x00,0xe1,0x08,0x04,0xe0,
+       0x04,0x02,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0xe8,0xb1,0x88,0x00,0x01,0xff,0xe6,0x9b,0xb4,0x00,0x10,0x08,0x01,
+       0xff,0xe8,0xbb,0x8a,0x00,0x01,0xff,0xe8,0xb3,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0xe6,0xbb,0x91,0x00,0x01,0xff,0xe4,0xb8,0xb2,0x00,0x10,0x08,0x01,0xff,0xe5,
+       0x8f,0xa5,0x00,0x01,0xff,0xe9,0xbe,0x9c,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0xe9,0xbe,0x9c,0x00,0x01,0xff,0xe5,0xa5,0x91,0x00,0x10,0x08,0x01,0xff,0xe9,
+       0x87,0x91,0x00,0x01,0xff,0xe5,0x96,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,
+       0xa5,0x88,0x00,0x01,0xff,0xe6,0x87,0xb6,0x00,0x10,0x08,0x01,0xff,0xe7,0x99,0xa9,
+       0x00,0x01,0xff,0xe7,0xbe,0x85,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0xe8,0x98,0xbf,0x00,0x01,0xff,0xe8,0x9e,0xba,0x00,0x10,0x08,0x01,0xff,0xe8,
+       0xa3,0xb8,0x00,0x01,0xff,0xe9,0x82,0x8f,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,
+       0xa8,0x82,0x00,0x01,0xff,0xe6,0xb4,0x9b,0x00,0x10,0x08,0x01,0xff,0xe7,0x83,0x99,
+       0x00,0x01,0xff,0xe7,0x8f,0x9e,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,
+       0x90,0xbd,0x00,0x01,0xff,0xe9,0x85,0xaa,0x00,0x10,0x08,0x01,0xff,0xe9,0xa7,0xb1,
+       0x00,0x01,0xff,0xe4,0xba,0x82,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0x8d,0xb5,
+       0x00,0x01,0xff,0xe6,0xac,0x84,0x00,0x10,0x08,0x01,0xff,0xe7,0x88,0x9b,0x00,0x01,
+       0xff,0xe8,0x98,0xad,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0xe9,0xb8,0x9e,0x00,0x01,0xff,0xe5,0xb5,0x90,0x00,0x10,0x08,0x01,0xff,0xe6,
+       0xbf,0xab,0x00,0x01,0xff,0xe8,0x97,0x8d,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,
+       0xa5,0xa4,0x00,0x01,0xff,0xe6,0x8b,0x89,0x00,0x10,0x08,0x01,0xff,0xe8,0x87,0x98,
+       0x00,0x01,0xff,0xe8,0xa0,0x9f,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,
+       0xbb,0x8a,0x00,0x01,0xff,0xe6,0x9c,0x97,0x00,0x10,0x08,0x01,0xff,0xe6,0xb5,0xaa,
+       0x00,0x01,0xff,0xe7,0x8b,0xbc,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0x83,0x8e,
+       0x00,0x01,0xff,0xe4,0xbe,0x86,0x00,0x10,0x08,0x01,0xff,0xe5,0x86,0xb7,0x00,0x01,
+       0xff,0xe5,0x8b,0x9e,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,
+       0x93,0x84,0x00,0x01,0xff,0xe6,0xab,0x93,0x00,0x10,0x08,0x01,0xff,0xe7,0x88,0x90,
+       0x00,0x01,0xff,0xe7,0x9b,0xa7,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0x80,0x81,
+       0x00,0x01,0xff,0xe8,0x98,0x86,0x00,0x10,0x08,0x01,0xff,0xe8,0x99,0x9c,0x00,0x01,
+       0xff,0xe8,0xb7,0xaf,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0x9c,0xb2,
+       0x00,0x01,0xff,0xe9,0xad,0xaf,0x00,0x10,0x08,0x01,0xff,0xe9,0xb7,0xba,0x00,0x01,
+       0xff,0xe7,0xa2,0x8c,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe7,0xa5,0xbf,0x00,0x01,
+       0xff,0xe7,0xb6,0xa0,0x00,0x10,0x08,0x01,0xff,0xe8,0x8f,0x89,0x00,0x01,0xff,0xe9,
+       0x8c,0x84,0x00,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xe9,0xb9,0xbf,0x00,0x01,0xff,0xe8,0xab,0x96,0x00,0x10,0x08,
+       0x01,0xff,0xe5,0xa3,0x9f,0x00,0x01,0xff,0xe5,0xbc,0x84,0x00,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xe7,0xb1,0xa0,0x00,0x01,0xff,0xe8,0x81,0xbe,0x00,0x10,0x08,0x01,0xff,
+       0xe7,0x89,0xa2,0x00,0x01,0xff,0xe7,0xa3,0x8a,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xe8,0xb3,0x82,0x00,0x01,0xff,0xe9,0x9b,0xb7,0x00,0x10,0x08,0x01,0xff,
+       0xe5,0xa3,0x98,0x00,0x01,0xff,0xe5,0xb1,0xa2,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0xe6,0xa8,0x93,0x00,0x01,0xff,0xe6,0xb7,0x9a,0x00,0x10,0x08,0x01,0xff,0xe6,0xbc,
+       0x8f,0x00,0x01,0xff,0xe7,0xb4,0xaf,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xe7,0xb8,0xb7,0x00,0x01,0xff,0xe9,0x99,0x8b,0x00,0x10,0x08,0x01,0xff,
+       0xe5,0x8b,0x92,0x00,0x01,0xff,0xe8,0x82,0x8b,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0xe5,0x87,0x9c,0x00,0x01,0xff,0xe5,0x87,0x8c,0x00,0x10,0x08,0x01,0xff,0xe7,0xa8,
+       0x9c,0x00,0x01,0xff,0xe7,0xb6,0xbe,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0xe8,0x8f,0xb1,0x00,0x01,0xff,0xe9,0x99,0xb5,0x00,0x10,0x08,0x01,0xff,0xe8,0xae,
+       0x80,0x00,0x01,0xff,0xe6,0x8b,0x8f,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0xa8,
+       0x82,0x00,0x01,0xff,0xe8,0xab,0xbe,0x00,0x10,0x08,0x01,0xff,0xe4,0xb8,0xb9,0x00,
+       0x01,0xff,0xe5,0xaf,0xa7,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xe6,0x80,0x92,0x00,0x01,0xff,0xe7,0x8e,0x87,0x00,0x10,0x08,0x01,0xff,
+       0xe7,0x95,0xb0,0x00,0x01,0xff,0xe5,0x8c,0x97,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0xe7,0xa3,0xbb,0x00,0x01,0xff,0xe4,0xbe,0xbf,0x00,0x10,0x08,0x01,0xff,0xe5,0xbe,
+       0xa9,0x00,0x01,0xff,0xe4,0xb8,0x8d,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0xe6,0xb3,0x8c,0x00,0x01,0xff,0xe6,0x95,0xb8,0x00,0x10,0x08,0x01,0xff,0xe7,0xb4,
+       0xa2,0x00,0x01,0xff,0xe5,0x8f,0x83,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0xa1,
+       0x9e,0x00,0x01,0xff,0xe7,0x9c,0x81,0x00,0x10,0x08,0x01,0xff,0xe8,0x91,0x89,0x00,
+       0x01,0xff,0xe8,0xaa,0xaa,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0xe6,0xae,0xba,0x00,0x01,0xff,0xe8,0xbe,0xb0,0x00,0x10,0x08,0x01,0xff,0xe6,0xb2,
+       0x88,0x00,0x01,0xff,0xe6,0x8b,0xbe,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0x8b,
+       0xa5,0x00,0x01,0xff,0xe6,0x8e,0xa0,0x00,0x10,0x08,0x01,0xff,0xe7,0x95,0xa5,0x00,
+       0x01,0xff,0xe4,0xba,0xae,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0x85,
+       0xa9,0x00,0x01,0xff,0xe5,0x87,0x89,0x00,0x10,0x08,0x01,0xff,0xe6,0xa2,0x81,0x00,
+       0x01,0xff,0xe7,0xb3,0xa7,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0x89,0xaf,0x00,
+       0x01,0xff,0xe8,0xab,0x92,0x00,0x10,0x08,0x01,0xff,0xe9,0x87,0x8f,0x00,0x01,0xff,
+       0xe5,0x8b,0xb5,0x00,0xe0,0x04,0x02,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,
+       0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0x91,0x82,0x00,0x01,0xff,0xe5,0xa5,
+       0xb3,0x00,0x10,0x08,0x01,0xff,0xe5,0xbb,0xac,0x00,0x01,0xff,0xe6,0x97,0x85,0x00,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0xbf,0xbe,0x00,0x01,0xff,0xe7,0xa4,0xaa,0x00,
+       0x10,0x08,0x01,0xff,0xe9,0x96,0xad,0x00,0x01,0xff,0xe9,0xa9,0xaa,0x00,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0xba,0x97,0x00,0x01,0xff,0xe9,0xbb,0x8e,0x00,
+       0x10,0x08,0x01,0xff,0xe5,0x8a,0x9b,0x00,0x01,0xff,0xe6,0x9b,0x86,0x00,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xe6,0xad,0xb7,0x00,0x01,0xff,0xe8,0xbd,0xa2,0x00,0x10,0x08,
+       0x01,0xff,0xe5,0xb9,0xb4,0x00,0x01,0xff,0xe6,0x86,0x90,0x00,0xd3,0x40,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0x88,0x80,0x00,0x01,0xff,0xe6,0x92,0x9a,0x00,
+       0x10,0x08,0x01,0xff,0xe6,0xbc,0xa3,0x00,0x01,0xff,0xe7,0x85,0x89,0x00,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xe7,0x92,0x89,0x00,0x01,0xff,0xe7,0xa7,0x8a,0x00,0x10,0x08,
+       0x01,0xff,0xe7,0xb7,0xb4,0x00,0x01,0xff,0xe8,0x81,0xaf,0x00,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xe8,0xbc,0xa6,0x00,0x01,0xff,0xe8,0x93,0xae,0x00,0x10,0x08,
+       0x01,0xff,0xe9,0x80,0xa3,0x00,0x01,0xff,0xe9,0x8d,0x8a,0x00,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xe5,0x88,0x97,0x00,0x01,0xff,0xe5,0x8a,0xa3,0x00,0x10,0x08,0x01,0xff,
+       0xe5,0x92,0xbd,0x00,0x01,0xff,0xe7,0x83,0x88,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0xa3,0x82,0x00,0x01,0xff,0xe8,0xaa,0xaa,0x00,
+       0x10,0x08,0x01,0xff,0xe5,0xbb,0x89,0x00,0x01,0xff,0xe5,0xbf,0xb5,0x00,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xe6,0x8d,0xbb,0x00,0x01,0xff,0xe6,0xae,0xae,0x00,0x10,0x08,
+       0x01,0xff,0xe7,0xb0,0xbe,0x00,0x01,0xff,0xe7,0x8d,0xb5,0x00,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xe4,0xbb,0xa4,0x00,0x01,0xff,0xe5,0x9b,0xb9,0x00,0x10,0x08,
+       0x01,0xff,0xe5,0xaf,0xa7,0x00,0x01,0xff,0xe5,0xb6,0xba,0x00,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xe6,0x80,0x9c,0x00,0x01,0xff,0xe7,0x8e,0xb2,0x00,0x10,0x08,0x01,0xff,
+       0xe7,0x91,0xa9,0x00,0x01,0xff,0xe7,0xbe,0x9a,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xe8,0x81,0x86,0x00,0x01,0xff,0xe9,0x88,0xb4,0x00,0x10,0x08,
+       0x01,0xff,0xe9,0x9b,0xb6,0x00,0x01,0xff,0xe9,0x9d,0x88,0x00,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xe9,0xa0,0x98,0x00,0x01,0xff,0xe4,0xbe,0x8b,0x00,0x10,0x08,0x01,0xff,
+       0xe7,0xa6,0xae,0x00,0x01,0xff,0xe9,0x86,0xb4,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xe9,0x9a,0xb8,0x00,0x01,0xff,0xe6,0x83,0xa1,0x00,0x10,0x08,0x01,0xff,
+       0xe4,0xba,0x86,0x00,0x01,0xff,0xe5,0x83,0x9a,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0xe5,0xaf,0xae,0x00,0x01,0xff,0xe5,0xb0,0xbf,0x00,0x10,0x08,0x01,0xff,0xe6,0x96,
+       0x99,0x00,0x01,0xff,0xe6,0xa8,0x82,0x00,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,
+       0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe7,0x87,0x8e,0x00,0x01,0xff,0xe7,
+       0x99,0x82,0x00,0x10,0x08,0x01,0xff,0xe8,0x93,0xbc,0x00,0x01,0xff,0xe9,0x81,0xbc,
+       0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0xbe,0x8d,0x00,0x01,0xff,0xe6,0x9a,0x88,
+       0x00,0x10,0x08,0x01,0xff,0xe9,0x98,0xae,0x00,0x01,0xff,0xe5,0x8a,0x89,0x00,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0x9d,0xbb,0x00,0x01,0xff,0xe6,0x9f,0xb3,
+       0x00,0x10,0x08,0x01,0xff,0xe6,0xb5,0x81,0x00,0x01,0xff,0xe6,0xba,0x9c,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0xe7,0x90,0x89,0x00,0x01,0xff,0xe7,0x95,0x99,0x00,0x10,
+       0x08,0x01,0xff,0xe7,0xa1,0xab,0x00,0x01,0xff,0xe7,0xb4,0x90,0x00,0xd3,0x40,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0xa1,0x9e,0x00,0x01,0xff,0xe5,0x85,0xad,
+       0x00,0x10,0x08,0x01,0xff,0xe6,0x88,0xae,0x00,0x01,0xff,0xe9,0x99,0xb8,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0xe5,0x80,0xab,0x00,0x01,0xff,0xe5,0xb4,0x99,0x00,0x10,
+       0x08,0x01,0xff,0xe6,0xb7,0xaa,0x00,0x01,0xff,0xe8,0xbc,0xaa,0x00,0xd2,0x20,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0xe5,0xbe,0x8b,0x00,0x01,0xff,0xe6,0x85,0x84,0x00,0x10,
+       0x08,0x01,0xff,0xe6,0xa0,0x97,0x00,0x01,0xff,0xe7,0x8e,0x87,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0xe9,0x9a,0x86,0x00,0x01,0xff,0xe5,0x88,0xa9,0x00,0x10,0x08,0x01,
+       0xff,0xe5,0x90,0x8f,0x00,0x01,0xff,0xe5,0xb1,0xa5,0x00,0xd4,0x80,0xd3,0x40,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0x98,0x93,0x00,0x01,0xff,0xe6,0x9d,0x8e,
+       0x00,0x10,0x08,0x01,0xff,0xe6,0xa2,0xa8,0x00,0x01,0xff,0xe6,0xb3,0xa5,0x00,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0xe7,0x90,0x86,0x00,0x01,0xff,0xe7,0x97,0xa2,0x00,0x10,
+       0x08,0x01,0xff,0xe7,0xbd,0xb9,0x00,0x01,0xff,0xe8,0xa3,0x8f,0x00,0xd2,0x20,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0xe8,0xa3,0xa1,0x00,0x01,0xff,0xe9,0x87,0x8c,0x00,0x10,
+       0x08,0x01,0xff,0xe9,0x9b,0xa2,0x00,0x01,0xff,0xe5,0x8c,0xbf,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0xe6,0xba,0xba,0x00,0x01,0xff,0xe5,0x90,0x9d,0x00,0x10,0x08,0x01,
+       0xff,0xe7,0x87,0x90,0x00,0x01,0xff,0xe7,0x92,0x98,0x00,0xd3,0x40,0xd2,0x20,0xd1,
+       0x10,0x10,0x08,0x01,0xff,0xe8,0x97,0xba,0x00,0x01,0xff,0xe9,0x9a,0xa3,0x00,0x10,
+       0x08,0x01,0xff,0xe9,0xb1,0x97,0x00,0x01,0xff,0xe9,0xba,0x9f,0x00,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0xe6,0x9e,0x97,0x00,0x01,0xff,0xe6,0xb7,0x8b,0x00,0x10,0x08,0x01,
+       0xff,0xe8,0x87,0xa8,0x00,0x01,0xff,0xe7,0xab,0x8b,0x00,0xd2,0x20,0xd1,0x10,0x10,
+       0x08,0x01,0xff,0xe7,0xac,0xa0,0x00,0x01,0xff,0xe7,0xb2,0x92,0x00,0x10,0x08,0x01,
+       0xff,0xe7,0x8b,0x80,0x00,0x01,0xff,0xe7,0x82,0x99,0x00,0xd1,0x10,0x10,0x08,0x01,
+       0xff,0xe8,0xad,0x98,0x00,0x01,0xff,0xe4,0xbb,0x80,0x00,0x10,0x08,0x01,0xff,0xe8,
+       0x8c,0xb6,0x00,0x01,0xff,0xe5,0x88,0xba,0x00,0xe2,0xad,0x06,0xe1,0xc4,0x03,0xe0,
+       0xcb,0x01,0xcf,0x86,0xd5,0xe4,0xd4,0x74,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x01,0xff,0xe5,0x88,0x87,0x00,0x01,0xff,0xe5,0xba,0xa6,0x00,0x10,0x08,0x01,0xff,
+       0xe6,0x8b,0x93,0x00,0x01,0xff,0xe7,0xb3,0x96,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0xe5,0xae,0x85,0x00,0x01,0xff,0xe6,0xb4,0x9e,0x00,0x10,0x08,0x01,0xff,0xe6,0x9a,
+       0xb4,0x00,0x01,0xff,0xe8,0xbc,0xbb,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,
+       0xe8,0xa1,0x8c,0x00,0x01,0xff,0xe9,0x99,0x8d,0x00,0x10,0x08,0x01,0xff,0xe8,0xa6,
+       0x8b,0x00,0x01,0xff,0xe5,0xbb,0x93,0x00,0x91,0x10,0x10,0x08,0x01,0xff,0xe5,0x85,
+       0x80,0x00,0x01,0xff,0xe5,0x97,0x80,0x00,0x01,0x00,0xd3,0x34,0xd2,0x18,0xd1,0x0c,
+       0x10,0x08,0x01,0xff,0xe5,0xa1,0x9a,0x00,0x01,0x00,0x10,0x08,0x01,0xff,0xe6,0x99,
+       0xb4,0x00,0x01,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xe5,0x87,0x9e,0x00,
+       0x10,0x08,0x01,0xff,0xe7,0x8c,0xaa,0x00,0x01,0xff,0xe7,0x9b,0x8a,0x00,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x01,0xff,0xe7,0xa4,0xbc,0x00,0x01,0xff,0xe7,0xa5,0x9e,0x00,
+       0x10,0x08,0x01,0xff,0xe7,0xa5,0xa5,0x00,0x01,0xff,0xe7,0xa6,0x8f,0x00,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xe9,0x9d,0x96,0x00,0x01,0xff,0xe7,0xb2,0xbe,0x00,0x10,0x08,
+       0x01,0xff,0xe7,0xbe,0xbd,0x00,0x01,0x00,0xd4,0x64,0xd3,0x30,0xd2,0x18,0xd1,0x0c,
+       0x10,0x08,0x01,0xff,0xe8,0x98,0x92,0x00,0x01,0x00,0x10,0x08,0x01,0xff,0xe8,0xab,
+       0xb8,0x00,0x01,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xe9,0x80,0xb8,0x00,
+       0x10,0x08,0x01,0xff,0xe9,0x83,0xbd,0x00,0x01,0x00,0xd2,0x14,0x51,0x04,0x01,0x00,
+       0x10,0x08,0x01,0xff,0xe9,0xa3,0xaf,0x00,0x01,0xff,0xe9,0xa3,0xbc,0x00,0xd1,0x10,
+       0x10,0x08,0x01,0xff,0xe9,0xa4,0xa8,0x00,0x01,0xff,0xe9,0xb6,0xb4,0x00,0x10,0x08,
+       0x0d,0xff,0xe9,0x83,0x9e,0x00,0x0d,0xff,0xe9,0x9a,0xb7,0x00,0xd3,0x40,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x06,0xff,0xe4,0xbe,0xae,0x00,0x06,0xff,0xe5,0x83,0xa7,0x00,
+       0x10,0x08,0x06,0xff,0xe5,0x85,0x8d,0x00,0x06,0xff,0xe5,0x8b,0x89,0x00,0xd1,0x10,
+       0x10,0x08,0x06,0xff,0xe5,0x8b,0xa4,0x00,0x06,0xff,0xe5,0x8d,0x91,0x00,0x10,0x08,
+       0x06,0xff,0xe5,0x96,0x9d,0x00,0x06,0xff,0xe5,0x98,0x86,0x00,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x06,0xff,0xe5,0x99,0xa8,0x00,0x06,0xff,0xe5,0xa1,0x80,0x00,0x10,0x08,
+       0x06,0xff,0xe5,0xa2,0xa8,0x00,0x06,0xff,0xe5,0xb1,0xa4,0x00,0xd1,0x10,0x10,0x08,
+       0x06,0xff,0xe5,0xb1,0xae,0x00,0x06,0xff,0xe6,0x82,0x94,0x00,0x10,0x08,0x06,0xff,
+       0xe6,0x85,0xa8,0x00,0x06,0xff,0xe6,0x86,0x8e,0x00,0xcf,0x86,0xe5,0x01,0x01,0xd4,
+       0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe6,0x87,0xb2,0x00,0x06,
+       0xff,0xe6,0x95,0x8f,0x00,0x10,0x08,0x06,0xff,0xe6,0x97,0xa2,0x00,0x06,0xff,0xe6,
+       0x9a,0x91,0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe6,0xa2,0x85,0x00,0x06,0xff,0xe6,
+       0xb5,0xb7,0x00,0x10,0x08,0x06,0xff,0xe6,0xb8,0x9a,0x00,0x06,0xff,0xe6,0xbc,0xa2,
+       0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0x85,0xae,0x00,0x06,0xff,0xe7,
+       0x88,0xab,0x00,0x10,0x08,0x06,0xff,0xe7,0x90,0xa2,0x00,0x06,0xff,0xe7,0xa2,0x91,
+       0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xa4,0xbe,0x00,0x06,0xff,0xe7,0xa5,0x89,
+       0x00,0x10,0x08,0x06,0xff,0xe7,0xa5,0x88,0x00,0x06,0xff,0xe7,0xa5,0x90,0x00,0xd3,
+       0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xa5,0x96,0x00,0x06,0xff,0xe7,
+       0xa5,0x9d,0x00,0x10,0x08,0x06,0xff,0xe7,0xa6,0x8d,0x00,0x06,0xff,0xe7,0xa6,0x8e,
+       0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xa9,0x80,0x00,0x06,0xff,0xe7,0xaa,0x81,
+       0x00,0x10,0x08,0x06,0xff,0xe7,0xaf,0x80,0x00,0x06,0xff,0xe7,0xb7,0xb4,0x00,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xb8,0x89,0x00,0x06,0xff,0xe7,0xb9,0x81,
+       0x00,0x10,0x08,0x06,0xff,0xe7,0xbd,0xb2,0x00,0x06,0xff,0xe8,0x80,0x85,0x00,0xd1,
+       0x10,0x10,0x08,0x06,0xff,0xe8,0x87,0xad,0x00,0x06,0xff,0xe8,0x89,0xb9,0x00,0x10,
+       0x08,0x06,0xff,0xe8,0x89,0xb9,0x00,0x06,0xff,0xe8,0x91,0x97,0x00,0xd4,0x75,0xd3,
+       0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe8,0xa4,0x90,0x00,0x06,0xff,0xe8,
+       0xa6,0x96,0x00,0x10,0x08,0x06,0xff,0xe8,0xac,0x81,0x00,0x06,0xff,0xe8,0xac,0xb9,
+       0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe8,0xb3,0x93,0x00,0x06,0xff,0xe8,0xb4,0x88,
+       0x00,0x10,0x08,0x06,0xff,0xe8,0xbe,0xb6,0x00,0x06,0xff,0xe9,0x80,0xb8,0x00,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe9,0x9b,0xa3,0x00,0x06,0xff,0xe9,0x9f,0xbf,
+       0x00,0x10,0x08,0x06,0xff,0xe9,0xa0,0xbb,0x00,0x0b,0xff,0xe6,0x81,0xb5,0x00,0x91,
+       0x11,0x10,0x09,0x0b,0xff,0xf0,0xa4,0x8b,0xae,0x00,0x0b,0xff,0xe8,0x88,0x98,0x00,
+       0x00,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,0xe4,0xb8,0xa6,0x00,
+       0x08,0xff,0xe5,0x86,0xb5,0x00,0x10,0x08,0x08,0xff,0xe5,0x85,0xa8,0x00,0x08,0xff,
+       0xe4,0xbe,0x80,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe5,0x85,0x85,0x00,0x08,0xff,
+       0xe5,0x86,0x80,0x00,0x10,0x08,0x08,0xff,0xe5,0x8b,0x87,0x00,0x08,0xff,0xe5,0x8b,
+       0xba,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,0xe5,0x96,0x9d,0x00,0x08,0xff,
+       0xe5,0x95,0x95,0x00,0x10,0x08,0x08,0xff,0xe5,0x96,0x99,0x00,0x08,0xff,0xe5,0x97,
+       0xa2,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe5,0xa1,0x9a,0x00,0x08,0xff,0xe5,0xa2,
+       0xb3,0x00,0x10,0x08,0x08,0xff,0xe5,0xa5,0x84,0x00,0x08,0xff,0xe5,0xa5,0x94,0x00,
+       0xe0,0x04,0x02,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x08,0xff,0xe5,0xa9,0xa2,0x00,0x08,0xff,0xe5,0xac,0xa8,0x00,0x10,0x08,
+       0x08,0xff,0xe5,0xbb,0x92,0x00,0x08,0xff,0xe5,0xbb,0x99,0x00,0xd1,0x10,0x10,0x08,
+       0x08,0xff,0xe5,0xbd,0xa9,0x00,0x08,0xff,0xe5,0xbe,0xad,0x00,0x10,0x08,0x08,0xff,
+       0xe6,0x83,0x98,0x00,0x08,0xff,0xe6,0x85,0x8e,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x08,0xff,0xe6,0x84,0x88,0x00,0x08,0xff,0xe6,0x86,0x8e,0x00,0x10,0x08,0x08,0xff,
+       0xe6,0x85,0xa0,0x00,0x08,0xff,0xe6,0x87,0xb2,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe6,0x88,0xb4,0x00,0x08,0xff,0xe6,0x8f,0x84,0x00,0x10,0x08,0x08,0xff,0xe6,0x90,
+       0x9c,0x00,0x08,0xff,0xe6,0x91,0x92,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x08,0xff,0xe6,0x95,0x96,0x00,0x08,0xff,0xe6,0x99,0xb4,0x00,0x10,0x08,0x08,0xff,
+       0xe6,0x9c,0x97,0x00,0x08,0xff,0xe6,0x9c,0x9b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe6,0x9d,0x96,0x00,0x08,0xff,0xe6,0xad,0xb9,0x00,0x10,0x08,0x08,0xff,0xe6,0xae,
+       0xba,0x00,0x08,0xff,0xe6,0xb5,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe6,0xbb,0x9b,0x00,0x08,0xff,0xe6,0xbb,0x8b,0x00,0x10,0x08,0x08,0xff,0xe6,0xbc,
+       0xa2,0x00,0x08,0xff,0xe7,0x80,0x9e,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe7,0x85,
+       0xae,0x00,0x08,0xff,0xe7,0x9e,0xa7,0x00,0x10,0x08,0x08,0xff,0xe7,0x88,0xb5,0x00,
+       0x08,0xff,0xe7,0x8a,0xaf,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x08,0xff,0xe7,0x8c,0xaa,0x00,0x08,0xff,0xe7,0x91,0xb1,0x00,0x10,0x08,0x08,0xff,
+       0xe7,0x94,0x86,0x00,0x08,0xff,0xe7,0x94,0xbb,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe7,0x98,0x9d,0x00,0x08,0xff,0xe7,0x98,0x9f,0x00,0x10,0x08,0x08,0xff,0xe7,0x9b,
+       0x8a,0x00,0x08,0xff,0xe7,0x9b,0x9b,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe7,0x9b,0xb4,0x00,0x08,0xff,0xe7,0x9d,0x8a,0x00,0x10,0x08,0x08,0xff,0xe7,0x9d,
+       0x80,0x00,0x08,0xff,0xe7,0xa3,0x8c,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe7,0xaa,
+       0xb1,0x00,0x08,0xff,0xe7,0xaf,0x80,0x00,0x10,0x08,0x08,0xff,0xe7,0xb1,0xbb,0x00,
+       0x08,0xff,0xe7,0xb5,0x9b,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe7,0xb7,0xb4,0x00,0x08,0xff,0xe7,0xbc,0xbe,0x00,0x10,0x08,0x08,0xff,0xe8,0x80,
+       0x85,0x00,0x08,0xff,0xe8,0x8d,0x92,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe8,0x8f,
+       0xaf,0x00,0x08,0xff,0xe8,0x9d,0xb9,0x00,0x10,0x08,0x08,0xff,0xe8,0xa5,0x81,0x00,
+       0x08,0xff,0xe8,0xa6,0x86,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,0xe8,0xa6,
+       0x96,0x00,0x08,0xff,0xe8,0xaa,0xbf,0x00,0x10,0x08,0x08,0xff,0xe8,0xab,0xb8,0x00,
+       0x08,0xff,0xe8,0xab,0x8b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe8,0xac,0x81,0x00,
+       0x08,0xff,0xe8,0xab,0xbe,0x00,0x10,0x08,0x08,0xff,0xe8,0xab,0xad,0x00,0x08,0xff,
+       0xe8,0xac,0xb9,0x00,0xcf,0x86,0x95,0xde,0xd4,0x81,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x08,0xff,0xe8,0xae,0x8a,0x00,0x08,0xff,0xe8,0xb4,0x88,0x00,0x10,0x08,
+       0x08,0xff,0xe8,0xbc,0xb8,0x00,0x08,0xff,0xe9,0x81,0xb2,0x00,0xd1,0x10,0x10,0x08,
+       0x08,0xff,0xe9,0x86,0x99,0x00,0x08,0xff,0xe9,0x89,0xb6,0x00,0x10,0x08,0x08,0xff,
+       0xe9,0x99,0xbc,0x00,0x08,0xff,0xe9,0x9b,0xa3,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x08,0xff,0xe9,0x9d,0x96,0x00,0x08,0xff,0xe9,0x9f,0x9b,0x00,0x10,0x08,0x08,0xff,
+       0xe9,0x9f,0xbf,0x00,0x08,0xff,0xe9,0xa0,0x8b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,
+       0xe9,0xa0,0xbb,0x00,0x08,0xff,0xe9,0xac,0x92,0x00,0x10,0x08,0x08,0xff,0xe9,0xbe,
+       0x9c,0x00,0x08,0xff,0xf0,0xa2,0xa1,0x8a,0x00,0xd3,0x45,0xd2,0x22,0xd1,0x12,0x10,
+       0x09,0x08,0xff,0xf0,0xa2,0xa1,0x84,0x00,0x08,0xff,0xf0,0xa3,0x8f,0x95,0x00,0x10,
+       0x08,0x08,0xff,0xe3,0xae,0x9d,0x00,0x08,0xff,0xe4,0x80,0x98,0x00,0xd1,0x11,0x10,
+       0x08,0x08,0xff,0xe4,0x80,0xb9,0x00,0x08,0xff,0xf0,0xa5,0x89,0x89,0x00,0x10,0x09,
+       0x08,0xff,0xf0,0xa5,0xb3,0x90,0x00,0x08,0xff,0xf0,0xa7,0xbb,0x93,0x00,0x92,0x14,
+       0x91,0x10,0x10,0x08,0x08,0xff,0xe9,0xbd,0x83,0x00,0x08,0xff,0xe9,0xbe,0x8e,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0xe1,0x94,0x01,0xe0,0x08,0x01,0xcf,0x86,0xd5,0x42,
+       0xd4,0x14,0x93,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,
+       0x00,0x00,0x00,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,
+       0x01,0x00,0x01,0x00,0x52,0x04,0x00,0x00,0xd1,0x0d,0x10,0x04,0x00,0x00,0x04,0xff,
+       0xd7,0x99,0xd6,0xb4,0x00,0x10,0x04,0x01,0x1a,0x01,0xff,0xd7,0xb2,0xd6,0xb7,0x00,
+       0xd4,0x42,0x53,0x04,0x01,0x00,0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,
+       0xd7,0xa9,0xd7,0x81,0x00,0x01,0xff,0xd7,0xa9,0xd7,0x82,0x00,0xd1,0x16,0x10,0x0b,
+       0x01,0xff,0xd7,0xa9,0xd6,0xbc,0xd7,0x81,0x00,0x01,0xff,0xd7,0xa9,0xd6,0xbc,0xd7,
+       0x82,0x00,0x10,0x09,0x01,0xff,0xd7,0x90,0xd6,0xb7,0x00,0x01,0xff,0xd7,0x90,0xd6,
+       0xb8,0x00,0xd3,0x43,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0x90,0xd6,0xbc,
+       0x00,0x01,0xff,0xd7,0x91,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0x92,0xd6,0xbc,
+       0x00,0x01,0xff,0xd7,0x93,0xd6,0xbc,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0x94,
+       0xd6,0xbc,0x00,0x01,0xff,0xd7,0x95,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0x96,
+       0xd6,0xbc,0x00,0x00,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0x98,0xd6,
+       0xbc,0x00,0x01,0xff,0xd7,0x99,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0x9a,0xd6,
+       0xbc,0x00,0x01,0xff,0xd7,0x9b,0xd6,0xbc,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xd7,
+       0x9c,0xd6,0xbc,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xd7,0x9e,0xd6,0xbc,0x00,0x00,
+       0x00,0xcf,0x86,0x95,0x85,0x94,0x81,0xd3,0x3e,0xd2,0x1f,0xd1,0x12,0x10,0x09,0x01,
+       0xff,0xd7,0xa0,0xd6,0xbc,0x00,0x01,0xff,0xd7,0xa1,0xd6,0xbc,0x00,0x10,0x04,0x00,
+       0x00,0x01,0xff,0xd7,0xa3,0xd6,0xbc,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xd7,0xa4,
+       0xd6,0xbc,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xd7,0xa6,0xd6,0xbc,0x00,0x01,0xff,
+       0xd7,0xa7,0xd6,0xbc,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0xa8,0xd6,
+       0xbc,0x00,0x01,0xff,0xd7,0xa9,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0xaa,0xd6,
+       0xbc,0x00,0x01,0xff,0xd7,0x95,0xd6,0xb9,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,
+       0x91,0xd6,0xbf,0x00,0x01,0xff,0xd7,0x9b,0xd6,0xbf,0x00,0x10,0x09,0x01,0xff,0xd7,
+       0xa4,0xd6,0xbf,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x1a,0xcf,0x86,0x55,0x04,
+       0x01,0x00,0x54,0x04,0x01,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x01,0x00,0x0c,0x00,
+       0x0c,0x00,0x0c,0x00,0xcf,0x86,0x95,0x24,0xd4,0x10,0x93,0x0c,0x92,0x08,0x11,0x04,
+       0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x00,0x00,
+       0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd3,0x5a,0xd2,0x06,
+       0xcf,0x06,0x01,0x00,0xd1,0x14,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0x95,0x08,
+       0x14,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x54,0x04,
+       0x01,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+       0x01,0x00,0xcf,0x86,0xd5,0x0c,0x94,0x08,0x13,0x04,0x01,0x00,0x00,0x00,0x05,0x00,
+       0x54,0x04,0x05,0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,
+       0x06,0x00,0x07,0x00,0x00,0x00,0xd2,0xce,0xd1,0xa5,0xd0,0x37,0xcf,0x86,0xd5,0x15,
+       0x54,0x05,0x06,0xff,0x00,0x53,0x04,0x08,0x00,0x92,0x08,0x11,0x04,0x08,0x00,0x00,
+       0x00,0x00,0x00,0x94,0x1c,0xd3,0x10,0x52,0x04,0x01,0xe6,0x51,0x04,0x0a,0xe6,0x10,
+       0x04,0x0a,0xe6,0x10,0xdc,0x52,0x04,0x10,0xdc,0x11,0x04,0x10,0xdc,0x11,0xe6,0x01,
+       0x00,0xcf,0x86,0xd5,0x38,0xd4,0x24,0xd3,0x14,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,
+       0x04,0x01,0x00,0x06,0x00,0x10,0x04,0x06,0x00,0x07,0x00,0x92,0x0c,0x91,0x08,0x10,
+       0x04,0x07,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x01,
+       0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd4,0x18,0xd3,0x10,0x52,
+       0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x12,0x04,0x01,
+       0x00,0x00,0x00,0x93,0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06,
+       0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd0,0x06,0xcf,
+       0x06,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,
+       0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00,
+       0x00,0x01,0xff,0x00,0xd1,0x50,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x93,0x10,
+       0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+       0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,
+       0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06,0x00,0x94,0x14,
+       0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x06,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+       0x01,0x00,0x01,0x00,0xd0,0x2f,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x15,0x93,0x11,
+       0x92,0x0d,0x91,0x09,0x10,0x05,0x01,0xff,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,
+       0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,
+       0x00,0x00,0x00,0xcf,0x86,0xd5,0x38,0xd4,0x18,0xd3,0x0c,0x92,0x08,0x11,0x04,0x00,
+       0x00,0x01,0x00,0x01,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,
+       0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd2,0x08,0x11,0x04,0x00,
+       0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0xd4,0x20,0xd3,
+       0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x52,
+       0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x53,0x05,0x00,
+       0xff,0x00,0xd2,0x0d,0x91,0x09,0x10,0x05,0x00,0xff,0x00,0x04,0x00,0x04,0x00,0x91,
+       0x08,0x10,0x04,0x03,0x00,0x01,0x00,0x01,0x00,0x83,0xe2,0x46,0x3e,0xe1,0x1f,0x3b,
+       0xe0,0x9c,0x39,0xcf,0x86,0xe5,0x40,0x26,0xc4,0xe3,0x16,0x14,0xe2,0xef,0x11,0xe1,
+       0xd0,0x10,0xe0,0x60,0x07,0xcf,0x86,0xe5,0x53,0x03,0xe4,0x4c,0x02,0xe3,0x3d,0x01,
+       0xd2,0x94,0xd1,0x70,0xd0,0x4a,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x07,0x00,
+       0x52,0x04,0x07,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,
+       0xd4,0x14,0x93,0x10,0x52,0x04,0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,
+       0x00,0x00,0x07,0x00,0x53,0x04,0x07,0x00,0xd2,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,
+       0x07,0x00,0x00,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x00,0x00,0x07,0x00,0xcf,0x86,
+       0x95,0x20,0xd4,0x10,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,0x11,0x04,0x07,0x00,
+       0x00,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,0x11,0x04,0x07,0x00,0x00,0x00,
+       0x00,0x00,0xd0,0x06,0xcf,0x06,0x07,0x00,0xcf,0x86,0x55,0x04,0x07,0x00,0x54,0x04,
+       0x07,0x00,0x53,0x04,0x07,0x00,0x92,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,
+       0x00,0x00,0x00,0x00,0xd1,0x40,0xd0,0x3a,0xcf,0x86,0xd5,0x20,0x94,0x1c,0x93,0x18,
+       0xd2,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x00,0x00,0x51,0x04,0x00,0x00,
+       0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x54,0x04,0x07,0x00,0x93,0x10,
+       0x52,0x04,0x07,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00,
+       0xcf,0x06,0x08,0x00,0xd0,0x46,0xcf,0x86,0xd5,0x2c,0xd4,0x20,0x53,0x04,0x08,0x00,
+       0xd2,0x0c,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x10,0x00,0xd1,0x08,0x10,0x04,
+       0x10,0x00,0x12,0x00,0x10,0x04,0x12,0x00,0x00,0x00,0x53,0x04,0x0a,0x00,0x12,0x04,
+       0x0a,0x00,0x00,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x08,0x14,0x04,
+       0x00,0x00,0x0a,0x00,0x54,0x04,0x0a,0x00,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00,
+       0x91,0x08,0x10,0x04,0x0a,0x00,0x0a,0xdc,0x00,0x00,0xd2,0x5e,0xd1,0x06,0xcf,0x06,
+       0x00,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x0a,0x00,0x53,0x04,0x0a,0x00,
+       0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,
+       0xcf,0x86,0xd5,0x18,0x54,0x04,0x0a,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,
+       0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c,
+       0x91,0x08,0x10,0x04,0x10,0xdc,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x53,0x04,
+       0x10,0x00,0x12,0x04,0x10,0x00,0x00,0x00,0xd1,0x70,0xd0,0x36,0xcf,0x86,0xd5,0x18,
+       0x54,0x04,0x05,0x00,0x53,0x04,0x05,0x00,0x52,0x04,0x05,0x00,0x51,0x04,0x05,0x00,
+       0x10,0x04,0x05,0x00,0x10,0x00,0x94,0x18,0xd3,0x08,0x12,0x04,0x05,0x00,0x00,0x00,
+       0x52,0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x13,0x00,0x13,0x00,0x05,0x00,
+       0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x05,0x00,0x92,0x0c,0x51,0x04,0x05,0x00,
+       0x10,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x54,0x04,0x10,0x00,0xd3,0x0c,
+       0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x10,0xe6,0x92,0x0c,0x51,0x04,0x10,0xe6,
+       0x10,0x04,0x10,0xe6,0x00,0x00,0x00,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,
+       0x07,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04,
+       0x00,0x00,0x07,0x00,0x08,0x00,0xcf,0x86,0x95,0x1c,0xd4,0x0c,0x93,0x08,0x12,0x04,
+       0x08,0x00,0x00,0x00,0x08,0x00,0x93,0x0c,0x52,0x04,0x08,0x00,0x11,0x04,0x08,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0xd3,0xba,0xd2,0x80,0xd1,0x34,0xd0,0x1a,0xcf,0x86,
+       0x55,0x04,0x05,0x00,0x94,0x10,0x93,0x0c,0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00,
+       0x07,0x00,0x05,0x00,0x05,0x00,0xcf,0x86,0x95,0x14,0x94,0x10,0x53,0x04,0x05,0x00,
+       0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0xd0,0x2a,
+       0xcf,0x86,0xd5,0x14,0x54,0x04,0x07,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,
+       0x11,0x04,0x07,0x00,0x00,0x00,0x94,0x10,0x53,0x04,0x07,0x00,0x92,0x08,0x11,0x04,
+       0x07,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0xcf,0x86,0xd5,0x10,0x54,0x04,0x12,0x00,
+       0x93,0x08,0x12,0x04,0x12,0x00,0x00,0x00,0x12,0x00,0x54,0x04,0x12,0x00,0x53,0x04,
+       0x12,0x00,0x12,0x04,0x12,0x00,0x00,0x00,0xd1,0x34,0xd0,0x12,0xcf,0x86,0x55,0x04,
+       0x10,0x00,0x94,0x08,0x13,0x04,0x10,0x00,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,
+       0x10,0x00,0x94,0x18,0xd3,0x08,0x12,0x04,0x10,0x00,0x00,0x00,0x52,0x04,0x00,0x00,
+       0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,
+       0xd2,0x06,0xcf,0x06,0x10,0x00,0xd1,0x40,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x10,0x00,
+       0x54,0x04,0x10,0x00,0x93,0x10,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,
+       0x10,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x10,0x00,0x93,0x0c,
+       0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x94,0x08,0x13,0x04,
+       0x10,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe4,0xce,0x02,0xe3,0x45,0x01,
+       0xd2,0xd0,0xd1,0x70,0xd0,0x52,0xcf,0x86,0xd5,0x20,0x94,0x1c,0xd3,0x0c,0x52,0x04,
+       0x07,0x00,0x11,0x04,0x07,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00,
+       0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x54,0x04,0x07,0x00,0xd3,0x10,0x52,0x04,
+       0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x00,0x00,0x07,0x00,0xd2,0x0c,0x91,0x08,
+       0x10,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x07,0x00,0x00,0x00,
+       0x10,0x04,0x00,0x00,0x07,0x00,0xcf,0x86,0x95,0x18,0x54,0x04,0x0b,0x00,0x93,0x10,
+       0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x0b,0x00,
+       0x10,0x00,0xd0,0x32,0xcf,0x86,0xd5,0x18,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,
+       0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x94,0x14,
+       0x93,0x10,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,
+       0x10,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x11,0x00,0xd3,0x14,
+       0xd2,0x0c,0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0x11,0x04,0x11,0x00,
+       0x00,0x00,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x11,0x00,0x11,0x00,
+       0xd1,0x40,0xd0,0x3a,0xcf,0x86,0xd5,0x1c,0x54,0x04,0x09,0x00,0x53,0x04,0x09,0x00,
+       0xd2,0x08,0x11,0x04,0x09,0x00,0x0b,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,
+       0x09,0x00,0x54,0x04,0x0a,0x00,0x53,0x04,0x0a,0x00,0xd2,0x08,0x11,0x04,0x0a,0x00,
+       0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0a,0x00,0xcf,0x06,0x00,0x00,
+       0xd0,0x1a,0xcf,0x86,0x55,0x04,0x0d,0x00,0x54,0x04,0x0d,0x00,0x53,0x04,0x0d,0x00,
+       0x52,0x04,0x00,0x00,0x11,0x04,0x11,0x00,0x0d,0x00,0xcf,0x86,0x95,0x14,0x54,0x04,
+       0x11,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x11,0x00,0x11,0x00,0x11,0x00,
+       0x11,0x00,0xd2,0xec,0xd1,0xa4,0xd0,0x76,0xcf,0x86,0xd5,0x48,0xd4,0x28,0xd3,0x14,
+       0x52,0x04,0x08,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x08,0x00,0x10,0x04,0x08,0x00,
+       0x00,0x00,0x52,0x04,0x00,0x00,0xd1,0x08,0x10,0x04,0x08,0x00,0x08,0xdc,0x10,0x04,
+       0x08,0x00,0x08,0xe6,0xd3,0x10,0x52,0x04,0x08,0x00,0x91,0x08,0x10,0x04,0x00,0x00,
+       0x08,0x00,0x08,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x08,0x00,0x08,0x00,
+       0x08,0x00,0x54,0x04,0x08,0x00,0xd3,0x0c,0x52,0x04,0x08,0x00,0x11,0x04,0x14,0x00,
+       0x00,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x08,0xe6,0x08,0x01,0x10,0x04,0x08,0xdc,
+       0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x08,0x09,0xcf,0x86,0x95,0x28,
+       0xd4,0x14,0x53,0x04,0x08,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x53,0x04,0x08,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x08,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x00,0xd0,0x0a,0xcf,0x86,0x15,0x04,0x10,0x00,
+       0x00,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0xd4,0x24,0xd3,0x14,0x52,0x04,0x10,0x00,
+       0xd1,0x08,0x10,0x04,0x10,0x00,0x10,0xe6,0x10,0x04,0x10,0xdc,0x00,0x00,0x92,0x0c,
+       0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x93,0x10,0x52,0x04,
+       0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd1,0x54,
+       0xd0,0x26,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,0x0b,0x00,0xd3,0x0c,0x52,0x04,
+       0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,
+       0x0b,0x00,0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x0b,0x00,0x93,0x0c,
+       0x52,0x04,0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0x0b,0x00,0x54,0x04,0x0b,0x00,
+       0x93,0x10,0x92,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,
+       0x0b,0x00,0xd0,0x42,0xcf,0x86,0xd5,0x28,0x54,0x04,0x10,0x00,0xd3,0x0c,0x92,0x08,
+       0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,
+       0x10,0x00,0x10,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x94,0x14,
+       0x53,0x04,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,
+       0x10,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x96,0xd2,0x68,0xd1,0x24,0xd0,0x06,
+       0xcf,0x06,0x0b,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x0b,0x00,0x92,0x0c,
+       0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0xd0,0x1e,0xcf,0x86,0x55,0x04,0x11,0x00,0x54,0x04,0x11,0x00,0x93,0x10,0x92,0x0c,
+       0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,
+       0x55,0x04,0x11,0x00,0x54,0x04,0x11,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x11,0x00,
+       0x10,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x11,0x00,
+       0x11,0x00,0xd1,0x28,0xd0,0x22,0xcf,0x86,0x55,0x04,0x14,0x00,0xd4,0x0c,0x93,0x08,
+       0x12,0x04,0x14,0x00,0x14,0xe6,0x00,0x00,0x53,0x04,0x14,0x00,0x92,0x08,0x11,0x04,
+       0x14,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd2,0x2a,
+       0xd1,0x24,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,
+       0x0b,0x00,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,
+       0x0b,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0x58,0xd0,0x12,0xcf,0x86,0x55,0x04,
+       0x14,0x00,0x94,0x08,0x13,0x04,0x14,0x00,0x00,0x00,0x14,0x00,0xcf,0x86,0x95,0x40,
+       0xd4,0x24,0xd3,0x0c,0x52,0x04,0x14,0x00,0x11,0x04,0x14,0x00,0x14,0xdc,0xd2,0x0c,
+       0x51,0x04,0x14,0xe6,0x10,0x04,0x14,0xe6,0x14,0xdc,0x91,0x08,0x10,0x04,0x14,0xe6,
+       0x14,0xdc,0x14,0xdc,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0xdc,0x14,0x00,
+       0x14,0x00,0x14,0x00,0x92,0x08,0x11,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x15,0x00,
+       0x93,0x10,0x52,0x04,0x15,0x00,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,
+       0x00,0x00,0xcf,0x86,0xe5,0x0f,0x06,0xe4,0xf8,0x03,0xe3,0x02,0x02,0xd2,0xfb,0xd1,
+       0x4c,0xd0,0x06,0xcf,0x06,0x0c,0x00,0xcf,0x86,0xd5,0x2c,0xd4,0x1c,0xd3,0x10,0x52,
+       0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x09,0x0c,0x00,0x52,0x04,0x0c,
+       0x00,0x11,0x04,0x0c,0x00,0x00,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x0c,
+       0x00,0x0c,0x00,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,
+       0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x09,0xd0,0x69,0xcf,0x86,0xd5,
+       0x32,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,0xd2,0x15,0x51,0x04,0x0b,0x00,0x10,
+       0x0d,0x0b,0xff,0xf0,0x91,0x82,0x99,0xf0,0x91,0x82,0xba,0x00,0x0b,0x00,0x91,0x11,
+       0x10,0x0d,0x0b,0xff,0xf0,0x91,0x82,0x9b,0xf0,0x91,0x82,0xba,0x00,0x0b,0x00,0x0b,
+       0x00,0xd4,0x1d,0x53,0x04,0x0b,0x00,0x92,0x15,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,
+       0x00,0x0b,0xff,0xf0,0x91,0x82,0xa5,0xf0,0x91,0x82,0xba,0x00,0x0b,0x00,0x53,0x04,
+       0x0b,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00,0x0b,0x09,0x10,0x04,0x0b,0x07,
+       0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x20,0x94,0x1c,0xd3,0x0c,0x92,0x08,0x11,0x04,
+       0x0b,0x00,0x00,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,
+       0x14,0x00,0x00,0x00,0x0d,0x00,0xd4,0x14,0x53,0x04,0x0d,0x00,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x0d,0x00,0x92,0x08,
+       0x11,0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0xd1,0x96,0xd0,0x5c,0xcf,0x86,0xd5,0x18,
+       0x94,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xe6,0x0d,0x00,
+       0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd4,0x26,0x53,0x04,0x0d,0x00,0x52,0x04,0x0d,0x00,
+       0x51,0x04,0x0d,0x00,0x10,0x0d,0x0d,0xff,0xf0,0x91,0x84,0xb1,0xf0,0x91,0x84,0xa7,
+       0x00,0x0d,0xff,0xf0,0x91,0x84,0xb2,0xf0,0x91,0x84,0xa7,0x00,0x93,0x18,0xd2,0x0c,
+       0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x0d,0x09,0x91,0x08,0x10,0x04,0x0d,0x09,
+       0x00,0x00,0x0d,0x00,0x0d,0x00,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x52,0x04,
+       0x0d,0x00,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x10,0x00,
+       0x54,0x04,0x10,0x00,0x93,0x18,0xd2,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,
+       0x10,0x07,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd0,0x06,
+       0xcf,0x06,0x0d,0x00,0xcf,0x86,0xd5,0x40,0xd4,0x2c,0xd3,0x10,0x92,0x0c,0x91,0x08,
+       0x10,0x04,0x0d,0x09,0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,
+       0x0d,0x00,0x11,0x00,0x10,0x04,0x11,0x07,0x11,0x00,0x91,0x08,0x10,0x04,0x11,0x00,
+       0x10,0x00,0x00,0x00,0x53,0x04,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04,
+       0x10,0x00,0x11,0x00,0x11,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,
+       0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x93,0x10,0x52,0x04,0x10,0x00,
+       0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd2,0xc8,0xd1,0x48,
+       0xd0,0x42,0xcf,0x86,0xd5,0x18,0x54,0x04,0x10,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,
+       0x10,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x54,0x04,0x10,0x00,
+       0xd3,0x14,0x52,0x04,0x10,0x00,0xd1,0x08,0x10,0x04,0x10,0x00,0x10,0x09,0x10,0x04,
+       0x10,0x07,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x12,0x00,
+       0x00,0x00,0xcf,0x06,0x00,0x00,0xd0,0x52,0xcf,0x86,0xd5,0x3c,0xd4,0x28,0xd3,0x10,
+       0x52,0x04,0x11,0x00,0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0xd2,0x0c,
+       0x91,0x08,0x10,0x04,0x11,0x00,0x00,0x00,0x11,0x00,0x51,0x04,0x11,0x00,0x10,0x04,
+       0x00,0x00,0x11,0x00,0x53,0x04,0x11,0x00,0x52,0x04,0x11,0x00,0x51,0x04,0x11,0x00,
+       0x10,0x04,0x00,0x00,0x11,0x00,0x94,0x10,0x53,0x04,0x11,0x00,0x92,0x08,0x11,0x04,
+       0x11,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0xd4,0x18,
+       0x53,0x04,0x10,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x10,0x00,0x10,0x07,0x10,0x04,
+       0x10,0x09,0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11,0x04,0x10,0x00,
+       0x00,0x00,0x00,0x00,0xe1,0x27,0x01,0xd0,0x8a,0xcf,0x86,0xd5,0x44,0xd4,0x2c,0xd3,
+       0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x11,0x00,0x10,0x00,0x10,0x00,0x91,0x08,0x10,
+       0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x52,0x04,0x10,0x00,0xd1,0x08,0x10,0x04,0x10,
+       0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x93,0x14,0x92,0x10,0xd1,0x08,0x10,
+       0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0xd4,
+       0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x10,
+       0x00,0x10,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x10,
+       0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0xd2,0x0c,0x51,0x04,0x10,
+       0x00,0x10,0x04,0x00,0x00,0x14,0x07,0x91,0x08,0x10,0x04,0x10,0x07,0x10,0x00,0x10,
+       0x00,0xcf,0x86,0xd5,0x6a,0xd4,0x42,0xd3,0x14,0x52,0x04,0x10,0x00,0xd1,0x08,0x10,
+       0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0xd2,0x19,0xd1,0x08,0x10,
+       0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0xff,0xf0,0x91,0x8d,0x87,0xf0,
+       0x91,0x8c,0xbe,0x00,0x91,0x11,0x10,0x0d,0x10,0xff,0xf0,0x91,0x8d,0x87,0xf0,0x91,
+       0x8d,0x97,0x00,0x10,0x09,0x00,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x11,
+       0x00,0x00,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x52,
+       0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0xd4,0x1c,0xd3,
+       0x0c,0x52,0x04,0x10,0x00,0x11,0x04,0x00,0x00,0x10,0xe6,0x52,0x04,0x10,0xe6,0x91,
+       0x08,0x10,0x04,0x10,0xe6,0x00,0x00,0x00,0x00,0x93,0x10,0x52,0x04,0x10,0xe6,0x91,
+       0x08,0x10,0x04,0x10,0xe6,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe3,
+       0x30,0x01,0xd2,0xb7,0xd1,0x48,0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x95,0x3c,
+       0xd4,0x1c,0x93,0x18,0xd2,0x0c,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x09,0x12,0x00,
+       0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x07,0x12,0x00,0x12,0x00,0x53,0x04,0x12,0x00,
+       0xd2,0x0c,0x51,0x04,0x12,0x00,0x10,0x04,0x00,0x00,0x12,0x00,0xd1,0x08,0x10,0x04,
+       0x00,0x00,0x12,0x00,0x10,0x04,0x14,0xe6,0x15,0x00,0x00,0x00,0xd0,0x45,0xcf,0x86,
+       0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0xd2,0x15,0x51,0x04,
+       0x10,0x00,0x10,0x04,0x10,0x00,0x10,0xff,0xf0,0x91,0x92,0xb9,0xf0,0x91,0x92,0xba,
+       0x00,0xd1,0x11,0x10,0x0d,0x10,0xff,0xf0,0x91,0x92,0xb9,0xf0,0x91,0x92,0xb0,0x00,
+       0x10,0x00,0x10,0x0d,0x10,0xff,0xf0,0x91,0x92,0xb9,0xf0,0x91,0x92,0xbd,0x00,0x10,
+       0x00,0xcf,0x86,0x95,0x24,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,
+       0x04,0x10,0x09,0x10,0x07,0x10,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11,
+       0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,
+       0x40,0xcf,0x86,0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0xd3,0x0c,0x52,0x04,0x10,
+       0x00,0x11,0x04,0x10,0x00,0x00,0x00,0xd2,0x1e,0x51,0x04,0x10,0x00,0x10,0x0d,0x10,
+       0xff,0xf0,0x91,0x96,0xb8,0xf0,0x91,0x96,0xaf,0x00,0x10,0xff,0xf0,0x91,0x96,0xb9,
+       0xf0,0x91,0x96,0xaf,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x10,0x09,0xcf,
+       0x86,0x95,0x2c,0xd4,0x1c,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x07,0x10,
+       0x00,0x10,0x00,0x10,0x00,0x92,0x08,0x11,0x04,0x10,0x00,0x11,0x00,0x11,0x00,0x53,
+       0x04,0x11,0x00,0x52,0x04,0x11,0x00,0x11,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0xd2,
+       0xa0,0xd1,0x5c,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0x53,
+       0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x10,
+       0x09,0xcf,0x86,0xd5,0x24,0xd4,0x14,0x93,0x10,0x52,0x04,0x10,0x00,0x91,0x08,0x10,
+       0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11,
+       0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x94,0x14,0x53,0x04,0x12,0x00,0x52,0x04,0x12,
+       0x00,0x91,0x08,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x2a,0xcf,
+       0x86,0x55,0x04,0x0d,0x00,0x54,0x04,0x0d,0x00,0xd3,0x10,0x52,0x04,0x0d,0x00,0x51,
+       0x04,0x0d,0x00,0x10,0x04,0x0d,0x09,0x0d,0x07,0x92,0x0c,0x91,0x08,0x10,0x04,0x15,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x95,0x14,0x94,0x10,0x53,0x04,0x0d,
+       0x00,0x92,0x08,0x11,0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,
+       0x40,0xd0,0x3a,0xcf,0x86,0xd5,0x20,0x54,0x04,0x11,0x00,0x53,0x04,0x11,0x00,0xd2,
+       0x0c,0x51,0x04,0x11,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00,
+       0x00,0x11,0x00,0x11,0x00,0x94,0x14,0x53,0x04,0x11,0x00,0x92,0x0c,0x51,0x04,0x11,
+       0x00,0x10,0x04,0x11,0x00,0x11,0x09,0x00,0x00,0x11,0x00,0xcf,0x06,0x00,0x00,0xcf,
+       0x06,0x00,0x00,0xe4,0x59,0x01,0xd3,0xb2,0xd2,0x5c,0xd1,0x28,0xd0,0x22,0xcf,0x86,
+       0x55,0x04,0x14,0x00,0x54,0x04,0x14,0x00,0x53,0x04,0x14,0x00,0x92,0x10,0xd1,0x08,
+       0x10,0x04,0x14,0x00,0x14,0x09,0x10,0x04,0x14,0x07,0x14,0x00,0x00,0x00,0xcf,0x06,
+       0x00,0x00,0xd0,0x0a,0xcf,0x86,0x15,0x04,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,
+       0x10,0x00,0x54,0x04,0x10,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,
+       0x10,0x00,0x00,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,
+       0x00,0x00,0x10,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x1a,0xcf,0x86,0x55,0x04,
+       0x00,0x00,0x94,0x10,0x53,0x04,0x15,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x15,0x00,
+       0x15,0x00,0x15,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x15,0x00,0x53,0x04,0x15,0x00,
+       0x92,0x08,0x11,0x04,0x00,0x00,0x15,0x00,0x15,0x00,0x94,0x1c,0x93,0x18,0xd2,0x0c,
+       0x91,0x08,0x10,0x04,0x15,0x09,0x15,0x00,0x15,0x00,0x91,0x08,0x10,0x04,0x15,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd2,0xa0,0xd1,0x3c,0xd0,0x1e,0xcf,0x86,
+       0x55,0x04,0x13,0x00,0x54,0x04,0x13,0x00,0x93,0x10,0x52,0x04,0x13,0x00,0x91,0x08,
+       0x10,0x04,0x13,0x09,0x13,0x00,0x13,0x00,0x13,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,
+       0x93,0x10,0x52,0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x13,0x09,
+       0x00,0x00,0x13,0x00,0x13,0x00,0xd0,0x46,0xcf,0x86,0xd5,0x2c,0xd4,0x10,0x93,0x0c,
+       0x52,0x04,0x13,0x00,0x11,0x04,0x15,0x00,0x13,0x00,0x13,0x00,0x53,0x04,0x13,0x00,
+       0xd2,0x0c,0x91,0x08,0x10,0x04,0x13,0x00,0x13,0x09,0x13,0x00,0x91,0x08,0x10,0x04,
+       0x13,0x00,0x14,0x00,0x13,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x13,0x00,
+       0x10,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,
+       0x10,0x00,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,
+       0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe3,0xa9,0x01,0xd2,
+       0xb0,0xd1,0x6c,0xd0,0x3e,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x12,0x00,0x92,
+       0x0c,0x91,0x08,0x10,0x04,0x12,0x00,0x00,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x54,
+       0x04,0x12,0x00,0xd3,0x10,0x52,0x04,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,
+       0x00,0x00,0x00,0x52,0x04,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x12,
+       0x09,0xcf,0x86,0xd5,0x14,0x94,0x10,0x93,0x0c,0x52,0x04,0x12,0x00,0x11,0x04,0x12,
+       0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x94,0x14,0x53,0x04,0x12,0x00,0x52,0x04,0x12,
+       0x00,0x91,0x08,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0xd0,0x3e,0xcf,
+       0x86,0xd5,0x14,0x54,0x04,0x12,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x12,
+       0x00,0x12,0x00,0x12,0x00,0xd4,0x14,0x53,0x04,0x12,0x00,0x92,0x0c,0x91,0x08,0x10,
+       0x04,0x00,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x93,0x10,0x52,0x04,0x12,0x00,0x51,
+       0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,
+       0xa0,0xd0,0x52,0xcf,0x86,0xd5,0x24,0x94,0x20,0xd3,0x10,0x52,0x04,0x13,0x00,0x51,
+       0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0x92,0x0c,0x51,0x04,0x13,0x00,0x10,
+       0x04,0x00,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x54,0x04,0x13,0x00,0xd3,0x10,0x52,
+       0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0xd2,0x0c,0x51,
+       0x04,0x00,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x00,
+       0x00,0x13,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x18,0x93,0x14,0xd2,0x0c,0x51,0x04,0x13,
+       0x00,0x10,0x04,0x13,0x07,0x13,0x00,0x11,0x04,0x13,0x09,0x13,0x00,0x00,0x00,0x53,
+       0x04,0x13,0x00,0x92,0x08,0x11,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x94,0x20,0xd3,
+       0x10,0x52,0x04,0x14,0x00,0x51,0x04,0x14,0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x92,
+       0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0xd0,
+       0x52,0xcf,0x86,0xd5,0x3c,0xd4,0x14,0x53,0x04,0x14,0x00,0x52,0x04,0x14,0x00,0x51,
+       0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x14,
+       0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x14,
+       0x09,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,
+       0x10,0x53,0x04,0x14,0x00,0x92,0x08,0x11,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0xcf,0x06,0x00,0x00,0xd2,0x2a,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,
+       0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x14,0x00,0x53,0x04,0x14,
+       0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,
+       0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x15,
+       0x00,0x54,0x04,0x15,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x15,0x00,0x00,0x00,0x00,
+       0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x15,0x00,0xd0,
+       0xca,0xcf,0x86,0xd5,0xc2,0xd4,0x54,0xd3,0x06,0xcf,0x06,0x09,0x00,0xd2,0x06,0xcf,
+       0x06,0x09,0x00,0xd1,0x24,0xd0,0x06,0xcf,0x06,0x09,0x00,0xcf,0x86,0x55,0x04,0x09,
+       0x00,0x94,0x14,0x53,0x04,0x09,0x00,0x52,0x04,0x09,0x00,0x51,0x04,0x09,0x00,0x10,
+       0x04,0x09,0x00,0x10,0x00,0x10,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x10,
+       0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x11,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x68,0xd2,0x46,0xd1,0x40,0xd0,
+       0x06,0xcf,0x06,0x09,0x00,0xcf,0x86,0x55,0x04,0x09,0x00,0xd4,0x20,0xd3,0x10,0x92,
+       0x0c,0x51,0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x10,0x00,0x10,0x00,0x52,0x04,0x10,
+       0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x93,0x10,0x52,0x04,0x09,
+       0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x11,
+       0x00,0xd1,0x1c,0xd0,0x06,0xcf,0x06,0x11,0x00,0xcf,0x86,0x95,0x10,0x94,0x0c,0x93,
+       0x08,0x12,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,
+       0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x4c,0xd4,0x06,0xcf,
+       0x06,0x0b,0x00,0xd3,0x40,0xd2,0x3a,0xd1,0x34,0xd0,0x2e,0xcf,0x86,0x55,0x04,0x0b,
+       0x00,0xd4,0x14,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,
+       0x04,0x0b,0x00,0x00,0x00,0x53,0x04,0x15,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x15,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,
+       0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0x4c,0xd0,0x44,0xcf,
+       0x86,0xd5,0x3c,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x11,0x00,0xd2,
+       0x2a,0xd1,0x24,0xd0,0x06,0xcf,0x06,0x11,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x93,
+       0x10,0x52,0x04,0x11,0x00,0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,
+       0x00,0xcf,0x86,0xcf,0x06,0x00,0x00,0xe0,0xd2,0x01,0xcf,0x86,0xd5,0x06,0xcf,0x06,
+       0x00,0x00,0xe4,0x0b,0x01,0xd3,0x06,0xcf,0x06,0x0c,0x00,0xd2,0x84,0xd1,0x50,0xd0,
+       0x1e,0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0x92,
+       0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,
+       0x18,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,
+       0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x94,0x14,0x53,0x04,0x10,0x00,0xd2,0x08,0x11,
+       0x04,0x10,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x10,0x00,0x00,0x00,0xd0,0x06,0xcf,
+       0x06,0x00,0x00,0xcf,0x86,0xd5,0x08,0x14,0x04,0x00,0x00,0x10,0x00,0xd4,0x10,0x53,
+       0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00,0x00,0x93,0x10,0x52,
+       0x04,0x10,0x01,0x91,0x08,0x10,0x04,0x10,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0xd1,
+       0x6c,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0x93,0x10,0x52,
+       0x04,0x10,0xe6,0x51,0x04,0x10,0xe6,0x10,0x04,0x10,0xe6,0x10,0x00,0x10,0x00,0xcf,
+       0x86,0xd5,0x24,0xd4,0x10,0x93,0x0c,0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00,
+       0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x00,
+       0x00,0x10,0x00,0x10,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,
+       0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x00,
+       0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0xd0,0x0e,0xcf,0x86,0x95,
+       0x08,0x14,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,
+       0x06,0x00,0x00,0xd2,0x30,0xd1,0x0c,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x06,0x14,
+       0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x14,0x00,0x53,0x04,0x14,0x00,0x92,
+       0x0c,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,
+       0x06,0x00,0x00,0xd1,0x4c,0xd0,0x06,0xcf,0x06,0x0d,0x00,0xcf,0x86,0xd5,0x2c,0x94,
+       0x28,0xd3,0x10,0x52,0x04,0x0d,0x00,0x91,0x08,0x10,0x04,0x0d,0x00,0x15,0x00,0x15,
+       0x00,0xd2,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x51,0x04,0x00,
+       0x00,0x10,0x04,0x00,0x00,0x15,0x00,0x0d,0x00,0x54,0x04,0x0d,0x00,0x53,0x04,0x0d,
+       0x00,0x52,0x04,0x0d,0x00,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x15,0x00,0xd0,
+       0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x15,0x00,0x52,0x04,0x00,0x00,0x51,
+       0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x00,0x00,0xcf,0x86,0x55,
+       0x04,0x00,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x12,0x00,0x13,
+       0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xcf,0x06,0x12,0x00,0xe2,
+       0xc6,0x01,0xd1,0x8e,0xd0,0x86,0xcf,0x86,0xd5,0x48,0xd4,0x06,0xcf,0x06,0x12,0x00,
+       0xd3,0x06,0xcf,0x06,0x12,0x00,0xd2,0x06,0xcf,0x06,0x12,0x00,0xd1,0x06,0xcf,0x06,
+       0x12,0x00,0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x55,0x04,0x12,0x00,0xd4,0x14,
+       0x53,0x04,0x12,0x00,0x52,0x04,0x12,0x00,0x91,0x08,0x10,0x04,0x12,0x00,0x14,0x00,
+       0x14,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x14,0x00,0x15,0x00,0x15,0x00,0x00,0x00,
+       0xd4,0x36,0xd3,0x06,0xcf,0x06,0x12,0x00,0xd2,0x2a,0xd1,0x06,0xcf,0x06,0x12,0x00,
+       0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x55,0x04,0x12,0x00,0x54,0x04,0x12,0x00,
+       0x93,0x10,0x92,0x0c,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86,0xcf,0x06,0x00,0x00,
+       0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0xa2,0xd4,0x9c,0xd3,0x74,
+       0xd2,0x26,0xd1,0x20,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x94,0x10,0x93,0x0c,0x92,0x08,
+       0x11,0x04,0x0c,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0xcf,0x06,
+       0x13,0x00,0xcf,0x06,0x13,0x00,0xd1,0x48,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,
+       0x13,0x00,0x53,0x04,0x13,0x00,0x52,0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04,
+       0x13,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x00,0x00,0x93,0x10,
+       0x92,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x94,0x0c,0x93,0x08,0x12,0x04,0x00,0x00,0x15,0x00,0x00,0x00,0x13,0x00,0xcf,0x06,
+       0x13,0x00,0xd2,0x22,0xd1,0x06,0xcf,0x06,0x13,0x00,0xd0,0x06,0xcf,0x06,0x13,0x00,
+       0xcf,0x86,0x55,0x04,0x13,0x00,0x54,0x04,0x13,0x00,0x53,0x04,0x13,0x00,0x12,0x04,
+       0x13,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,
+       0x00,0x00,0xd3,0x7f,0xd2,0x79,0xd1,0x34,0xd0,0x06,0xcf,0x06,0x10,0x00,0xcf,0x86,
+       0x55,0x04,0x10,0x00,0xd4,0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00,
+       0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00,
+       0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd0,0x3f,0xcf,0x86,0xd5,0x2c,
+       0xd4,0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0xd2,0x08,0x11,0x04,0x10,0x00,0x00,0x00,
+       0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x01,0x10,0x00,0x94,0x0d,0x93,0x09,0x12,0x05,
+       0x10,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,
+       0x00,0xcf,0x06,0x00,0x00,0xe1,0x96,0x04,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,
+       0xcf,0x86,0xe5,0x33,0x04,0xe4,0x83,0x02,0xe3,0xf8,0x01,0xd2,0x26,0xd1,0x06,0xcf,
+       0x06,0x05,0x00,0xd0,0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x55,0x04,0x05,0x00,0x54,
+       0x04,0x05,0x00,0x93,0x0c,0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00,0x00,0x00,0x00,
+       0x00,0xd1,0xef,0xd0,0x2a,0xcf,0x86,0x55,0x04,0x05,0x00,0x94,0x20,0xd3,0x10,0x52,
+       0x04,0x05,0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0x92,0x0c,0x91,
+       0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0xcf,0x86,0xd5,
+       0x2a,0x54,0x04,0x05,0x00,0x53,0x04,0x05,0x00,0x52,0x04,0x05,0x00,0x51,0x04,0x05,
+       0x00,0x10,0x0d,0x05,0xff,0xf0,0x9d,0x85,0x97,0xf0,0x9d,0x85,0xa5,0x00,0x05,0xff,
+       0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0x00,0xd4,0x75,0xd3,0x61,0xd2,0x44,0xd1,
+       0x22,0x10,0x11,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85,
+       0xae,0x00,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85,0xaf,
+       0x00,0x10,0x11,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85,
+       0xb0,0x00,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85,0xb1,
+       0x00,0xd1,0x15,0x10,0x11,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,
+       0x9d,0x85,0xb2,0x00,0x05,0xd8,0x10,0x04,0x05,0xd8,0x05,0x01,0xd2,0x08,0x11,0x04,
+       0x05,0x01,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x05,0xe2,0x05,0xd8,0xd3,0x12,
+       0x92,0x0d,0x51,0x04,0x05,0xd8,0x10,0x04,0x05,0xd8,0x05,0xff,0x00,0x05,0xff,0x00,
+       0x92,0x0e,0x51,0x05,0x05,0xff,0x00,0x10,0x05,0x05,0xff,0x00,0x05,0xdc,0x05,0xdc,
+       0xd0,0x97,0xcf,0x86,0xd5,0x28,0x94,0x24,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x05,0xdc,
+       0x10,0x04,0x05,0xdc,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x05,0xe6,0x05,0xe6,
+       0x92,0x08,0x11,0x04,0x05,0xe6,0x05,0xdc,0x05,0x00,0x05,0x00,0xd4,0x14,0x53,0x04,
+       0x05,0x00,0xd2,0x08,0x11,0x04,0x05,0x00,0x05,0xe6,0x11,0x04,0x05,0xe6,0x05,0x00,
+       0x53,0x04,0x05,0x00,0xd2,0x15,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00,0x05,0xff,
+       0xf0,0x9d,0x86,0xb9,0xf0,0x9d,0x85,0xa5,0x00,0xd1,0x1e,0x10,0x0d,0x05,0xff,0xf0,
+       0x9d,0x86,0xba,0xf0,0x9d,0x85,0xa5,0x00,0x05,0xff,0xf0,0x9d,0x86,0xb9,0xf0,0x9d,
+       0x85,0xa5,0xf0,0x9d,0x85,0xae,0x00,0x10,0x11,0x05,0xff,0xf0,0x9d,0x86,0xba,0xf0,
+       0x9d,0x85,0xa5,0xf0,0x9d,0x85,0xae,0x00,0x05,0xff,0xf0,0x9d,0x86,0xb9,0xf0,0x9d,
+       0x85,0xa5,0xf0,0x9d,0x85,0xaf,0x00,0xcf,0x86,0xd5,0x31,0xd4,0x21,0x93,0x1d,0x92,
+       0x19,0x91,0x15,0x10,0x11,0x05,0xff,0xf0,0x9d,0x86,0xba,0xf0,0x9d,0x85,0xa5,0xf0,
+       0x9d,0x85,0xaf,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x53,0x04,0x05,0x00,
+       0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00,0x11,0x00,0x94,0x14,0x53,0x04,0x11,0x00,
+       0x92,0x0c,0x91,0x08,0x10,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0xd2,0x44,0xd1,0x28,0xd0,0x06,0xcf,0x06,0x08,0x00,0xcf,0x86,0x95,0x1c,0x94,0x18,
+       0x93,0x14,0xd2,0x08,0x11,0x04,0x08,0x00,0x08,0xe6,0x91,0x08,0x10,0x04,0x08,0xe6,
+       0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,
+       0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x14,0x00,0x93,0x08,0x12,0x04,0x14,0x00,
+       0x00,0x00,0x00,0x00,0xd1,0x40,0xd0,0x06,0xcf,0x06,0x07,0x00,0xcf,0x86,0xd5,0x18,
+       0x54,0x04,0x07,0x00,0x93,0x10,0x52,0x04,0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04,
+       0x07,0x00,0x00,0x00,0x00,0x00,0x54,0x04,0x09,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,
+       0x09,0x00,0x14,0x00,0x14,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe3,0x5f,0x01,0xd2,0xb4,0xd1,0x24,0xd0,
+       0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x95,0x18,0x54,0x04,0x05,0x00,0x93,0x10,0x52,
+       0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x05,0x00,0x05,
+       0x00,0xd0,0x6a,0xcf,0x86,0xd5,0x18,0x54,0x04,0x05,0x00,0x53,0x04,0x05,0x00,0x52,
+       0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0xd4,0x34,0xd3,
+       0x1c,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0xd1,0x08,0x10,
+       0x04,0x00,0x00,0x05,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08,0x10,
+       0x04,0x00,0x00,0x05,0x00,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,
+       0x00,0x53,0x04,0x05,0x00,0xd2,0x0c,0x51,0x04,0x05,0x00,0x10,0x04,0x00,0x00,0x05,
+       0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0xcf,0x86,0x95,0x20,0x94,
+       0x1c,0x93,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x05,0x00,0x07,0x00,0x05,0x00,0x91,
+       0x08,0x10,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0xd1,
+       0xa4,0xd0,0x6a,0xcf,0x86,0xd5,0x48,0xd4,0x28,0xd3,0x10,0x52,0x04,0x05,0x00,0x51,
+       0x04,0x05,0x00,0x10,0x04,0x00,0x00,0x05,0x00,0xd2,0x0c,0x51,0x04,0x05,0x00,0x10,
+       0x04,0x05,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0xd3,
+       0x10,0x52,0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x52,
+       0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x54,0x04,0x05,
+       0x00,0x53,0x04,0x05,0x00,0xd2,0x0c,0x51,0x04,0x05,0x00,0x10,0x04,0x00,0x00,0x05,
+       0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0xcf,0x86,0x95,0x34,0xd4,
+       0x20,0xd3,0x14,0x52,0x04,0x05,0x00,0xd1,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x10,
+       0x04,0x05,0x00,0x00,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0x93,
+       0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x05,0x00,0x05,
+       0x00,0x05,0x00,0xcf,0x06,0x05,0x00,0xd2,0x26,0xd1,0x06,0xcf,0x06,0x05,0x00,0xd0,
+       0x1a,0xcf,0x86,0x55,0x04,0x05,0x00,0x94,0x10,0x93,0x0c,0x52,0x04,0x05,0x00,0x11,
+       0x04,0x08,0x00,0x00,0x00,0x05,0x00,0x05,0x00,0xcf,0x06,0x05,0x00,0xd1,0x06,0xcf,
+       0x06,0x05,0x00,0xd0,0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,
+       0x04,0x05,0x00,0xd2,0x08,0x11,0x04,0x05,0x00,0x09,0x00,0x11,0x04,0x00,0x00,0x05,
+       0x00,0x05,0x00,0x05,0x00,0xd4,0x52,0xd3,0x06,0xcf,0x06,0x11,0x00,0xd2,0x46,0xd1,
+       0x06,0xcf,0x06,0x11,0x00,0xd0,0x3a,0xcf,0x86,0xd5,0x20,0xd4,0x0c,0x53,0x04,0x11,
+       0x00,0x12,0x04,0x11,0x00,0x00,0x00,0x53,0x04,0x00,0x00,0x92,0x0c,0x51,0x04,0x00,
+       0x00,0x10,0x04,0x00,0x00,0x11,0x00,0x11,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,
+       0x08,0x10,0x04,0x00,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x00,0x00,0xcf,
+       0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xe0,0xc2,0x03,0xcf,0x86,
+       0xe5,0x03,0x01,0xd4,0xfc,0xd3,0xc0,0xd2,0x66,0xd1,0x60,0xd0,0x5a,0xcf,0x86,0xd5,
+       0x2c,0xd4,0x14,0x93,0x10,0x52,0x04,0x12,0xe6,0x51,0x04,0x12,0xe6,0x10,0x04,0x12,
+       0xe6,0x00,0x00,0x12,0xe6,0x53,0x04,0x12,0xe6,0x92,0x10,0xd1,0x08,0x10,0x04,0x12,
+       0xe6,0x00,0x00,0x10,0x04,0x00,0x00,0x12,0xe6,0x12,0xe6,0x94,0x28,0xd3,0x18,0xd2,
+       0x0c,0x51,0x04,0x12,0xe6,0x10,0x04,0x00,0x00,0x12,0xe6,0x91,0x08,0x10,0x04,0x12,
+       0xe6,0x00,0x00,0x12,0xe6,0x92,0x0c,0x51,0x04,0x12,0xe6,0x10,0x04,0x12,0xe6,0x00,
+       0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0x54,0xd0,
+       0x36,0xcf,0x86,0x55,0x04,0x15,0x00,0xd4,0x14,0x53,0x04,0x15,0x00,0x52,0x04,0x15,
+       0x00,0x91,0x08,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd3,0x10,0x52,0x04,0x15,
+       0xe6,0x51,0x04,0x15,0xe6,0x10,0x04,0x15,0xe6,0x15,0x00,0x52,0x04,0x15,0x00,0x11,
+       0x04,0x15,0x00,0x00,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x15,0x00,0xd2,
+       0x08,0x11,0x04,0x15,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x15,0x00,0x00,0x00,0x00,
+       0x00,0xcf,0x06,0x00,0x00,0xd2,0x36,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,
+       0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x15,0x00,0xd4,0x0c,0x53,0x04,0x15,0x00,0x12,
+       0x04,0x15,0x00,0x15,0xe6,0x53,0x04,0x15,0x00,0xd2,0x08,0x11,0x04,0x15,0x00,0x00,
+       0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x15,0x00,0xcf,0x06,0x00,0x00,0xcf,
+       0x06,0x00,0x00,0xd4,0x82,0xd3,0x7c,0xd2,0x3e,0xd1,0x06,0xcf,0x06,0x10,0x00,0xd0,
+       0x06,0xcf,0x06,0x10,0x00,0xcf,0x86,0x95,0x2c,0xd4,0x18,0x93,0x14,0x52,0x04,0x10,
+       0x00,0xd1,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10,
+       0x00,0x93,0x10,0x52,0x04,0x10,0xdc,0x51,0x04,0x10,0xdc,0x10,0x04,0x10,0xdc,0x00,
+       0x00,0x00,0x00,0x00,0x00,0xd1,0x38,0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x95,
+       0x2c,0xd4,0x18,0xd3,0x08,0x12,0x04,0x12,0x00,0x12,0xe6,0x92,0x0c,0x51,0x04,0x12,
+       0xe6,0x10,0x04,0x12,0x07,0x15,0x00,0x00,0x00,0x53,0x04,0x12,0x00,0xd2,0x08,0x11,
+       0x04,0x12,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x06,0x00,
+       0x00,0xcf,0x06,0x00,0x00,0xd3,0x82,0xd2,0x48,0xd1,0x24,0xd0,0x06,0xcf,0x06,0x00,
+       0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x93,0x10,0x92,0x0c,0x91,
+       0x08,0x10,0x04,0x00,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0xd0,0x1e,0xcf,
+       0x86,0x55,0x04,0x14,0x00,0x54,0x04,0x14,0x00,0x93,0x10,0x52,0x04,0x14,0x00,0x91,
+       0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,
+       0x34,0xd0,0x2e,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,
+       0x04,0x00,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x54,0x04,0x15,
+       0x00,0x53,0x04,0x15,0x00,0x52,0x04,0x15,0x00,0x11,0x04,0x15,0x00,0x00,0x00,0xcf,
+       0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xe2,0xb2,0x01,0xe1,0x41,0x01,0xd0,0x6e,0xcf,
+       0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x52,0x04,0x0d,0x00,0x91,0x08,0x10,0x04,0x00,
+       0x00,0x0d,0x00,0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd4,0x30,0xd3,0x20,0xd2,0x10,0xd1,
+       0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0xd1,0x08,0x10,
+       0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x92,0x0c,0x91,0x08,0x10,
+       0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x0d,
+       0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x0d,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x00,
+       0x00,0x0d,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x00,0x00,0xcf,0x86,0xd5,0x74,0xd4,
+       0x34,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x51,
+       0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,
+       0x00,0x0d,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,
+       0x00,0x0d,0x00,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,
+       0x04,0x0d,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x00,
+       0x00,0x0d,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,0x04,0x00,
+       0x00,0x0d,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,0x04,0x00,0x00,0x0d,
+       0x00,0xd4,0x30,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,
+       0x04,0x0d,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x00,
+       0x00,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x0d,
+       0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x0d,
+       0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0xd1,0x08,0x10,
+       0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0xd0,0x56,0xcf,0x86,0xd5,
+       0x20,0xd4,0x14,0x53,0x04,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04,0x00,
+       0x00,0x0d,0x00,0x0d,0x00,0x53,0x04,0x0d,0x00,0x12,0x04,0x0d,0x00,0x00,0x00,0xd4,
+       0x28,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x91,
+       0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,
+       0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x53,0x04,0x0d,0x00,0x12,0x04,0x0d,0x00,0x00,
+       0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x93,0x0c,0x92,0x08,0x11,
+       0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86,0xe5,
+       0x96,0x05,0xe4,0x28,0x03,0xe3,0xed,0x01,0xd2,0xa0,0xd1,0x1c,0xd0,0x16,0xcf,0x86,
+       0x55,0x04,0x0a,0x00,0x94,0x0c,0x53,0x04,0x0a,0x00,0x12,0x04,0x0a,0x00,0x00,0x00,
+       0x0a,0x00,0xcf,0x06,0x0a,0x00,0xd0,0x46,0xcf,0x86,0xd5,0x10,0x54,0x04,0x0a,0x00,
+       0x93,0x08,0x12,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x53,0x04,0x0c,0x00,
+       0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0xd3,0x10,
+       0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x52,0x04,
+       0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x10,0x00,0xcf,0x86,0xd5,0x28,
+       0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,
+       0x0c,0x00,0x0c,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,
+       0x0c,0x00,0x0c,0x00,0x0c,0x00,0x54,0x04,0x10,0x00,0x93,0x0c,0x52,0x04,0x10,0x00,
+       0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd1,0xe4,0xd0,0x5a,0xcf,0x86,0xd5,0x20,
+       0x94,0x1c,0x53,0x04,0x0b,0x00,0xd2,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,
+       0x10,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x0b,0x00,0xd4,0x14,
+       0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,
+       0x14,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x0b,0x00,0x0c,0x00,
+       0x0c,0x00,0x52,0x04,0x0c,0x00,0xd1,0x08,0x10,0x04,0x0c,0x00,0x0b,0x00,0x10,0x04,
+       0x0c,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x4c,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x51,0x04,
+       0x0c,0x00,0x10,0x04,0x0b,0x00,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0b,0x00,
+       0x0c,0x00,0xd2,0x08,0x11,0x04,0x0c,0x00,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,
+       0x0b,0x00,0x0c,0x00,0xd3,0x10,0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,
+       0x0c,0x00,0x0b,0x00,0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,
+       0x0b,0x00,0xd4,0x18,0x53,0x04,0x0c,0x00,0xd2,0x08,0x11,0x04,0x0c,0x00,0x0d,0x00,
+       0x91,0x08,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x0c,0x00,0xd2,0x10,
+       0xd1,0x08,0x10,0x04,0x0c,0x00,0x0b,0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0xd1,0x08,
+       0x10,0x04,0x0b,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0xd0,0x4e,0xcf,0x86,
+       0xd5,0x34,0xd4,0x14,0x53,0x04,0x0c,0x00,0xd2,0x08,0x11,0x04,0x0c,0x00,0x0b,0x00,
+       0x11,0x04,0x0b,0x00,0x0c,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,
+       0x0c,0x00,0x0c,0x00,0x0c,0x00,0x92,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,
+       0x12,0x00,0x12,0x00,0x94,0x14,0x53,0x04,0x12,0x00,0x52,0x04,0x12,0x00,0x91,0x08,
+       0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,
+       0x94,0x10,0x93,0x0c,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,
+       0x0c,0x00,0xd2,0x7e,0xd1,0x78,0xd0,0x3e,0xcf,0x86,0xd5,0x1c,0x94,0x18,0x93,0x14,
+       0x92,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x0b,0x00,0x54,0x04,0x0b,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,
+       0x0b,0x00,0x0c,0x00,0x0c,0x00,0x92,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,
+       0x12,0x00,0x00,0x00,0xcf,0x86,0xd5,0x24,0xd4,0x14,0x53,0x04,0x0b,0x00,0x92,0x0c,
+       0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x0c,0x92,0x08,
+       0x11,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x10,0x93,0x0c,0x52,0x04,
+       0x13,0x00,0x11,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,
+       0xd1,0x58,0xd0,0x3a,0xcf,0x86,0x55,0x04,0x0c,0x00,0xd4,0x20,0xd3,0x10,0x92,0x0c,
+       0x91,0x08,0x10,0x04,0x0c,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x52,0x04,0x10,0x00,
+       0x91,0x08,0x10,0x04,0x10,0x00,0x11,0x00,0x11,0x00,0x93,0x10,0x52,0x04,0x0c,0x00,
+       0x51,0x04,0x0c,0x00,0x10,0x04,0x10,0x00,0x0c,0x00,0x0c,0x00,0xcf,0x86,0x55,0x04,
+       0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0x52,0x04,0x0c,0x00,0x91,0x08,
+       0x10,0x04,0x0c,0x00,0x10,0x00,0x11,0x00,0xd0,0x16,0xcf,0x86,0x95,0x10,0x54,0x04,
+       0x0c,0x00,0x93,0x08,0x12,0x04,0x0c,0x00,0x10,0x00,0x10,0x00,0x0c,0x00,0xcf,0x86,
+       0xd5,0x34,0xd4,0x28,0xd3,0x10,0x52,0x04,0x0c,0x00,0x91,0x08,0x10,0x04,0x0c,0x00,
+       0x10,0x00,0x0c,0x00,0xd2,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x10,0x00,
+       0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x11,0x00,0x93,0x08,0x12,0x04,0x11,0x00,
+       0x10,0x00,0x10,0x00,0x54,0x04,0x0c,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,
+       0x0c,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x11,0x00,0xd3,0xfc,0xd2,0x6c,0xd1,0x3c,
+       0xd0,0x1e,0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,
+       0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x10,0x00,0xcf,0x86,
+       0x95,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x10,0x00,
+       0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0xd0,0x06,0xcf,0x06,0x0c,0x00,
+       0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0xd2,0x0c,
+       0x91,0x08,0x10,0x04,0x10,0x00,0x0c,0x00,0x0c,0x00,0xd1,0x08,0x10,0x04,0x0c,0x00,
+       0x10,0x00,0x10,0x04,0x10,0x00,0x11,0x00,0xd1,0x54,0xd0,0x1a,0xcf,0x86,0x55,0x04,
+       0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0x52,0x04,0x0c,0x00,0x11,0x04,
+       0x0c,0x00,0x10,0x00,0xcf,0x86,0xd5,0x1c,0x94,0x18,0xd3,0x08,0x12,0x04,0x0d,0x00,
+       0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x11,0x00,0x11,0x00,
+       0x0c,0x00,0xd4,0x08,0x13,0x04,0x0c,0x00,0x10,0x00,0x53,0x04,0x10,0x00,0x92,0x0c,
+       0x51,0x04,0x10,0x00,0x10,0x04,0x12,0x00,0x10,0x00,0x10,0x00,0xd0,0x1e,0xcf,0x86,
+       0x55,0x04,0x10,0x00,0x94,0x14,0x93,0x10,0x52,0x04,0x10,0x00,0x91,0x08,0x10,0x04,
+       0x12,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,
+       0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,
+       0x10,0x00,0x0c,0x00,0x0c,0x00,0xe2,0x19,0x01,0xd1,0xa8,0xd0,0x7e,0xcf,0x86,0xd5,
+       0x4c,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0d,0x00,0x0c,0x00,0x0c,
+       0x00,0x0c,0x00,0x0c,0x00,0xd3,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x0d,
+       0x00,0x0c,0x00,0xd1,0x08,0x10,0x04,0x0c,0x00,0x0d,0x00,0x10,0x04,0x0c,0x00,0x0d,
+       0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0c,0x00,0x0d,0x00,0x10,0x04,0x0c,0x00,0x0d,
+       0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x0d,0x00,0xd4,0x1c,0xd3,0x0c,0x52,
+       0x04,0x0c,0x00,0x11,0x04,0x0c,0x00,0x0d,0x00,0x52,0x04,0x0c,0x00,0x91,0x08,0x10,
+       0x04,0x0d,0x00,0x0c,0x00,0x0d,0x00,0x93,0x10,0x52,0x04,0x0c,0x00,0x91,0x08,0x10,
+       0x04,0x0d,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0xcf,0x86,0x95,0x24,0x94,0x20,0x93,
+       0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0c,0x00,0x10,0x00,0x10,0x04,0x10,0x00,0x11,
+       0x00,0x91,0x08,0x10,0x04,0x11,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x10,0x00,0x10,
+       0x00,0xd0,0x06,0xcf,0x06,0x0c,0x00,0xcf,0x86,0xd5,0x30,0xd4,0x10,0x93,0x0c,0x52,
+       0x04,0x0c,0x00,0x11,0x04,0x0c,0x00,0x10,0x00,0x10,0x00,0x93,0x1c,0xd2,0x10,0xd1,
+       0x08,0x10,0x04,0x11,0x00,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0x91,0x08,0x10,
+       0x04,0x13,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x53,0x04,0x10,0x00,0x52,
+       0x04,0x10,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd3,0x10,0x52,
+       0x04,0x10,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0x92,0x10,0xd1,
+       0x08,0x10,0x04,0x13,0x00,0x14,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd1,
+       0x1c,0xd0,0x06,0xcf,0x06,0x0c,0x00,0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c,
+       0x00,0x93,0x08,0x12,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0xd0,0x06,0xcf,0x06,0x10,
+       0x00,0xcf,0x86,0xd5,0x24,0x54,0x04,0x10,0x00,0xd3,0x10,0x52,0x04,0x10,0x00,0x91,
+       0x08,0x10,0x04,0x10,0x00,0x14,0x00,0x14,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x0c,0x53,0x04,0x15,0x00,0x12,0x04,0x15,
+       0x00,0x00,0x00,0x00,0x00,0xe4,0x40,0x02,0xe3,0xc9,0x01,0xd2,0x5c,0xd1,0x34,0xd0,
+       0x16,0xcf,0x86,0x95,0x10,0x94,0x0c,0x53,0x04,0x10,0x00,0x12,0x04,0x10,0x00,0x00,
+       0x00,0x10,0x00,0x10,0x00,0xcf,0x86,0x95,0x18,0xd4,0x08,0x13,0x04,0x10,0x00,0x00,
+       0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x10,
+       0x00,0xd0,0x22,0xcf,0x86,0xd5,0x0c,0x94,0x08,0x13,0x04,0x10,0x00,0x00,0x00,0x10,
+       0x00,0x94,0x10,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00,
+       0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0xc0,0xd0,0x5e,0xcf,0x86,0xd5,0x30,0xd4,
+       0x14,0x53,0x04,0x13,0x00,0x52,0x04,0x13,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x15,
+       0x00,0x15,0x00,0x53,0x04,0x11,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x11,0x00,0x12,
+       0x00,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0xd4,0x08,0x13,
+       0x04,0x12,0x00,0x13,0x00,0xd3,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x12,0x00,0x13,
+       0x00,0x10,0x04,0x13,0x00,0x12,0x00,0x12,0x00,0x52,0x04,0x12,0x00,0x51,0x04,0x12,
+       0x00,0x10,0x04,0x12,0x00,0x15,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x14,0x53,0x04,0x12,
+       0x00,0x52,0x04,0x12,0x00,0x91,0x08,0x10,0x04,0x13,0x00,0x14,0x00,0x14,0x00,0x53,
+       0x04,0x12,0x00,0x52,0x04,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13,
+       0x00,0xd4,0x0c,0x53,0x04,0x13,0x00,0x12,0x04,0x13,0x00,0x14,0x00,0xd3,0x1c,0xd2,
+       0x10,0xd1,0x08,0x10,0x04,0x14,0x00,0x15,0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x51,
+       0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,
+       0x04,0x14,0x00,0x15,0x00,0x14,0x00,0xd0,0x62,0xcf,0x86,0xd5,0x24,0xd4,0x14,0x93,
+       0x10,0x52,0x04,0x11,0x00,0x91,0x08,0x10,0x04,0x11,0x00,0x12,0x00,0x12,0x00,0x12,
+       0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x12,0x00,0x13,0x00,0x13,0x00,0x14,0x00,0xd4,
+       0x2c,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x91,
+       0x08,0x10,0x04,0x00,0x00,0x15,0x00,0x15,0x00,0xd2,0x0c,0x51,0x04,0x15,0x00,0x10,
+       0x04,0x15,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x15,0x00,0x53,0x04,0x14,0x00,0x92,
+       0x08,0x11,0x04,0x14,0x00,0x15,0x00,0x15,0x00,0xcf,0x86,0xd5,0x30,0x94,0x2c,0xd3,
+       0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x11,0x00,0x14,0x00,0x10,0x04,0x14,0x00,0x15,
+       0x00,0x15,0x00,0xd2,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x91,
+       0x08,0x10,0x04,0x00,0x00,0x15,0x00,0x15,0x00,0x13,0x00,0x94,0x14,0x93,0x10,0x52,
+       0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x14,0x00,0x14,0x00,0x14,
+       0x00,0xd2,0x70,0xd1,0x40,0xd0,0x06,0xcf,0x06,0x15,0x00,0xcf,0x86,0xd5,0x10,0x54,
+       0x04,0x15,0x00,0x93,0x08,0x12,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd4,0x10,0x53,
+       0x04,0x14,0x00,0x52,0x04,0x14,0x00,0x11,0x04,0x14,0x00,0x00,0x00,0xd3,0x08,0x12,
+       0x04,0x15,0x00,0x00,0x00,0x92,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,
+       0x00,0x00,0x00,0xd0,0x2a,0xcf,0x86,0x95,0x24,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51,
+       0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x0c,0x52,
+       0x04,0x15,0x00,0x11,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,
+       0x00,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,
+       0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,
+       0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,
+       0x04,0x00,0x00,0x02,0x00,0xe4,0xf9,0x12,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,
+       0xd2,0xc2,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd0,0x44,0xcf,0x86,0xd5,0x3c,
+       0xd4,0x06,0xcf,0x06,0x05,0x00,0xd3,0x06,0xcf,0x06,0x05,0x00,0xd2,0x2a,0xd1,0x06,
+       0xcf,0x06,0x05,0x00,0xd0,0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x95,0x18,0x54,0x04,
+       0x05,0x00,0x93,0x10,0x52,0x04,0x05,0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x0b,0x00,0xcf,0x06,0x0b,0x00,0xcf,0x86,
+       0xd5,0x3c,0xd4,0x06,0xcf,0x06,0x0b,0x00,0xd3,0x06,0xcf,0x06,0x0b,0x00,0xd2,0x06,
+       0xcf,0x06,0x0b,0x00,0xd1,0x24,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,
+       0x0b,0x00,0x93,0x10,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0xcf,0x06,0x0c,0x00,0xcf,0x06,0x0c,0x00,0xd4,0x32,0xd3,0x2c,
+       0xd2,0x26,0xd1,0x20,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x54,0x04,0x0c,0x00,0x53,0x04,
+       0x0c,0x00,0x52,0x04,0x0c,0x00,0x11,0x04,0x0c,0x00,0x00,0x00,0x11,0x00,0xcf,0x06,
+       0x11,0x00,0xcf,0x06,0x11,0x00,0xcf,0x06,0x11,0x00,0xcf,0x06,0x11,0x00,0xcf,0x06,
+       0x11,0x00,0xd1,0x48,0xd0,0x40,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x11,0x00,0xd4,0x06,
+       0xcf,0x06,0x11,0x00,0xd3,0x06,0xcf,0x06,0x11,0x00,0xd2,0x26,0xd1,0x06,0xcf,0x06,
+       0x11,0x00,0xd0,0x1a,0xcf,0x86,0x55,0x04,0x11,0x00,0x94,0x10,0x93,0x0c,0x92,0x08,
+       0x11,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x00,0xcf,0x06,0x13,0x00,
+       0xcf,0x06,0x13,0x00,0xcf,0x86,0xcf,0x06,0x13,0x00,0xd0,0x44,0xcf,0x86,0xd5,0x06,
+       0xcf,0x06,0x13,0x00,0xd4,0x36,0xd3,0x06,0xcf,0x06,0x13,0x00,0xd2,0x06,0xcf,0x06,
+       0x13,0x00,0xd1,0x06,0xcf,0x06,0x13,0x00,0xd0,0x06,0xcf,0x06,0x13,0x00,0xcf,0x86,
+       0x55,0x04,0x13,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x13,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86,
+       0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x68,0x11,0xe3,0x51,0x10,0xe2,0x17,0x08,0xe1,
+       0x06,0x04,0xe0,0x03,0x02,0xcf,0x86,0xe5,0x06,0x01,0xd4,0x82,0xd3,0x41,0xd2,0x21,
+       0xd1,0x10,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00,0x05,0xff,0xe4,0xb8,0xb8,0x00,
+       0x10,0x08,0x05,0xff,0xe4,0xb9,0x81,0x00,0x05,0xff,0xf0,0xa0,0x84,0xa2,0x00,0xd1,
+       0x10,0x10,0x08,0x05,0xff,0xe4,0xbd,0xa0,0x00,0x05,0xff,0xe4,0xbe,0xae,0x00,0x10,
+       0x08,0x05,0xff,0xe4,0xbe,0xbb,0x00,0x05,0xff,0xe5,0x80,0x82,0x00,0xd2,0x20,0xd1,
+       0x10,0x10,0x08,0x05,0xff,0xe5,0x81,0xba,0x00,0x05,0xff,0xe5,0x82,0x99,0x00,0x10,
+       0x08,0x05,0xff,0xe5,0x83,0xa7,0x00,0x05,0xff,0xe5,0x83,0x8f,0x00,0xd1,0x11,0x10,
+       0x08,0x05,0xff,0xe3,0x92,0x9e,0x00,0x05,0xff,0xf0,0xa0,0x98,0xba,0x00,0x10,0x08,
+       0x05,0xff,0xe5,0x85,0x8d,0x00,0x05,0xff,0xe5,0x85,0x94,0x00,0xd3,0x42,0xd2,0x21,
+       0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x85,0xa4,0x00,0x05,0xff,0xe5,0x85,0xb7,0x00,
+       0x10,0x09,0x05,0xff,0xf0,0xa0,0x94,0x9c,0x00,0x05,0xff,0xe3,0x92,0xb9,0x00,0xd1,
+       0x10,0x10,0x08,0x05,0xff,0xe5,0x85,0xa7,0x00,0x05,0xff,0xe5,0x86,0x8d,0x00,0x10,
+       0x09,0x05,0xff,0xf0,0xa0,0x95,0x8b,0x00,0x05,0xff,0xe5,0x86,0x97,0x00,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x86,0xa4,0x00,0x05,0xff,0xe4,0xbb,0x8c,0x00,
+       0x10,0x08,0x05,0xff,0xe5,0x86,0xac,0x00,0x05,0xff,0xe5,0x86,0xb5,0x00,0xd1,0x11,
+       0x10,0x09,0x05,0xff,0xf0,0xa9,0x87,0x9f,0x00,0x05,0xff,0xe5,0x87,0xb5,0x00,0x10,
+       0x08,0x05,0xff,0xe5,0x88,0x83,0x00,0x05,0xff,0xe3,0x93,0x9f,0x00,0xd4,0x80,0xd3,
+       0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x88,0xbb,0x00,0x05,0xff,0xe5,
+       0x89,0x86,0x00,0x10,0x08,0x05,0xff,0xe5,0x89,0xb2,0x00,0x05,0xff,0xe5,0x89,0xb7,
+       0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe3,0x94,0x95,0x00,0x05,0xff,0xe5,0x8b,0x87,
+       0x00,0x10,0x08,0x05,0xff,0xe5,0x8b,0x89,0x00,0x05,0xff,0xe5,0x8b,0xa4,0x00,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x8b,0xba,0x00,0x05,0xff,0xe5,0x8c,0x85,
+       0x00,0x10,0x08,0x05,0xff,0xe5,0x8c,0x86,0x00,0x05,0xff,0xe5,0x8c,0x97,0x00,0xd1,
+       0x10,0x10,0x08,0x05,0xff,0xe5,0x8d,0x89,0x00,0x05,0xff,0xe5,0x8d,0x91,0x00,0x10,
+       0x08,0x05,0xff,0xe5,0x8d,0x9a,0x00,0x05,0xff,0xe5,0x8d,0xb3,0x00,0xd3,0x39,0xd2,
+       0x18,0x91,0x10,0x10,0x08,0x05,0xff,0xe5,0x8d,0xbd,0x00,0x05,0xff,0xe5,0x8d,0xbf,
+       0x00,0x05,0xff,0xe5,0x8d,0xbf,0x00,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa0,0xa8,
+       0xac,0x00,0x05,0xff,0xe7,0x81,0xb0,0x00,0x10,0x08,0x05,0xff,0xe5,0x8f,0x8a,0x00,
+       0x05,0xff,0xe5,0x8f,0x9f,0x00,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa0,
+       0xad,0xa3,0x00,0x05,0xff,0xe5,0x8f,0xab,0x00,0x10,0x08,0x05,0xff,0xe5,0x8f,0xb1,
+       0x00,0x05,0xff,0xe5,0x90,0x86,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x92,0x9e,
+       0x00,0x05,0xff,0xe5,0x90,0xb8,0x00,0x10,0x08,0x05,0xff,0xe5,0x91,0x88,0x00,0x05,
+       0xff,0xe5,0x91,0xa8,0x00,0xcf,0x86,0xe5,0x02,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff,0xe5,0x93,0xb6,0x00,
+       0x10,0x08,0x05,0xff,0xe5,0x94,0x90,0x00,0x05,0xff,0xe5,0x95,0x93,0x00,0xd1,0x10,
+       0x10,0x08,0x05,0xff,0xe5,0x95,0xa3,0x00,0x05,0xff,0xe5,0x96,0x84,0x00,0x10,0x08,
+       0x05,0xff,0xe5,0x96,0x84,0x00,0x05,0xff,0xe5,0x96,0x99,0x00,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x05,0xff,0xe5,0x96,0xab,0x00,0x05,0xff,0xe5,0x96,0xb3,0x00,0x10,0x08,
+       0x05,0xff,0xe5,0x97,0x82,0x00,0x05,0xff,0xe5,0x9c,0x96,0x00,0xd1,0x10,0x10,0x08,
+       0x05,0xff,0xe5,0x98,0x86,0x00,0x05,0xff,0xe5,0x9c,0x97,0x00,0x10,0x08,0x05,0xff,
+       0xe5,0x99,0x91,0x00,0x05,0xff,0xe5,0x99,0xb4,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x05,0xff,0xe5,0x88,0x87,0x00,0x05,0xff,0xe5,0xa3,0xae,0x00,0x10,0x08,
+       0x05,0xff,0xe5,0x9f,0x8e,0x00,0x05,0xff,0xe5,0x9f,0xb4,0x00,0xd1,0x10,0x10,0x08,
+       0x05,0xff,0xe5,0xa0,0x8d,0x00,0x05,0xff,0xe5,0x9e,0x8b,0x00,0x10,0x08,0x05,0xff,
+       0xe5,0xa0,0xb2,0x00,0x05,0xff,0xe5,0xa0,0xb1,0x00,0xd2,0x21,0xd1,0x11,0x10,0x08,
+       0x05,0xff,0xe5,0xa2,0xac,0x00,0x05,0xff,0xf0,0xa1,0x93,0xa4,0x00,0x10,0x08,0x05,
+       0xff,0xe5,0xa3,0xb2,0x00,0x05,0xff,0xe5,0xa3,0xb7,0x00,0xd1,0x10,0x10,0x08,0x05,
+       0xff,0xe5,0xa4,0x86,0x00,0x05,0xff,0xe5,0xa4,0x9a,0x00,0x10,0x08,0x05,0xff,0xe5,
+       0xa4,0xa2,0x00,0x05,0xff,0xe5,0xa5,0xa2,0x00,0xd4,0x7b,0xd3,0x42,0xd2,0x22,0xd1,
+       0x12,0x10,0x09,0x05,0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,
+       0x00,0x10,0x08,0x05,0xff,0xe5,0xa7,0xac,0x00,0x05,0xff,0xe5,0xa8,0x9b,0x00,0xd1,
+       0x10,0x10,0x08,0x05,0xff,0xe5,0xa8,0xa7,0x00,0x05,0xff,0xe5,0xa7,0x98,0x00,0x10,
+       0x08,0x05,0xff,0xe5,0xa9,0xa6,0x00,0x05,0xff,0xe3,0x9b,0xae,0x00,0xd2,0x18,0x91,
+       0x10,0x10,0x08,0x05,0xff,0xe3,0x9b,0xbc,0x00,0x05,0xff,0xe5,0xac,0x88,0x00,0x05,
+       0xff,0xe5,0xac,0xbe,0x00,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0xa7,0x88,0x00,
+       0x05,0xff,0xe5,0xaf,0x83,0x00,0x10,0x08,0x05,0xff,0xe5,0xaf,0x98,0x00,0x05,0xff,
+       0xe5,0xaf,0xa7,0x00,0xd3,0x41,0xd2,0x21,0xd1,0x11,0x10,0x08,0x05,0xff,0xe5,0xaf,
+       0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0x10,0x08,0x05,0xff,0xe5,0xaf,0xbf,
+       0x00,0x05,0xff,0xe5,0xb0,0x86,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xbd,0x93,
+       0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00,0x10,0x08,0x05,0xff,0xe3,0x9e,0x81,0x00,0x05,
+       0xff,0xe5,0xb1,0xa0,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb1,0xae,
+       0x00,0x05,0xff,0xe5,0xb3,0x80,0x00,0x10,0x08,0x05,0xff,0xe5,0xb2,0x8d,0x00,0x05,
+       0xff,0xf0,0xa1,0xb7,0xa4,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe5,0xb5,0x83,0x00,
+       0x05,0xff,0xf0,0xa1,0xb7,0xa6,0x00,0x10,0x08,0x05,0xff,0xe5,0xb5,0xae,0x00,0x05,
+       0xff,0xe5,0xb5,0xab,0x00,0xe0,0x04,0x02,0xcf,0x86,0xd5,0xfe,0xd4,0x82,0xd3,0x40,
+       0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb5,0xbc,0x00,0x05,0xff,0xe5,0xb7,
+       0xa1,0x00,0x10,0x08,0x05,0xff,0xe5,0xb7,0xa2,0x00,0x05,0xff,0xe3,0xa0,0xaf,0x00,
+       0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb7,0xbd,0x00,0x05,0xff,0xe5,0xb8,0xa8,0x00,
+       0x10,0x08,0x05,0xff,0xe5,0xb8,0xbd,0x00,0x05,0xff,0xe5,0xb9,0xa9,0x00,0xd2,0x21,
+       0xd1,0x11,0x10,0x08,0x05,0xff,0xe3,0xa1,0xa2,0x00,0x05,0xff,0xf0,0xa2,0x86,0x83,
+       0x00,0x10,0x08,0x05,0xff,0xe3,0xa1,0xbc,0x00,0x05,0xff,0xe5,0xba,0xb0,0x00,0xd1,
+       0x10,0x10,0x08,0x05,0xff,0xe5,0xba,0xb3,0x00,0x05,0xff,0xe5,0xba,0xb6,0x00,0x10,
+       0x08,0x05,0xff,0xe5,0xbb,0x8a,0x00,0x05,0xff,0xf0,0xaa,0x8e,0x92,0x00,0xd3,0x3b,
+       0xd2,0x22,0xd1,0x11,0x10,0x08,0x05,0xff,0xe5,0xbb,0xbe,0x00,0x05,0xff,0xf0,0xa2,
+       0x8c,0xb1,0x00,0x10,0x09,0x05,0xff,0xf0,0xa2,0x8c,0xb1,0x00,0x05,0xff,0xe8,0x88,
+       0x81,0x00,0x51,0x08,0x05,0xff,0xe5,0xbc,0xa2,0x00,0x10,0x08,0x05,0xff,0xe3,0xa3,
+       0x87,0x00,0x05,0xff,0xf0,0xa3,0x8a,0xb8,0x00,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05,
+       0xff,0xf0,0xa6,0x87,0x9a,0x00,0x05,0xff,0xe5,0xbd,0xa2,0x00,0x10,0x08,0x05,0xff,
+       0xe5,0xbd,0xab,0x00,0x05,0xff,0xe3,0xa3,0xa3,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,
+       0xe5,0xbe,0x9a,0x00,0x05,0xff,0xe5,0xbf,0x8d,0x00,0x10,0x08,0x05,0xff,0xe5,0xbf,
+       0x97,0x00,0x05,0xff,0xe5,0xbf,0xb9,0x00,0xd4,0x81,0xd3,0x41,0xd2,0x20,0xd1,0x10,
+       0x10,0x08,0x05,0xff,0xe6,0x82,0x81,0x00,0x05,0xff,0xe3,0xa4,0xba,0x00,0x10,0x08,
+       0x05,0xff,0xe3,0xa4,0x9c,0x00,0x05,0xff,0xe6,0x82,0x94,0x00,0xd1,0x11,0x10,0x09,
+       0x05,0xff,0xf0,0xa2,0x9b,0x94,0x00,0x05,0xff,0xe6,0x83,0x87,0x00,0x10,0x08,0x05,
+       0xff,0xe6,0x85,0x88,0x00,0x05,0xff,0xe6,0x85,0x8c,0x00,0xd2,0x20,0xd1,0x10,0x10,
+       0x08,0x05,0xff,0xe6,0x85,0x8e,0x00,0x05,0xff,0xe6,0x85,0x8c,0x00,0x10,0x08,0x05,
+       0xff,0xe6,0x85,0xba,0x00,0x05,0xff,0xe6,0x86,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05,
+       0xff,0xe6,0x86,0xb2,0x00,0x05,0xff,0xe6,0x86,0xa4,0x00,0x10,0x08,0x05,0xff,0xe6,
+       0x86,0xaf,0x00,0x05,0xff,0xe6,0x87,0x9e,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,
+       0x08,0x05,0xff,0xe6,0x87,0xb2,0x00,0x05,0xff,0xe6,0x87,0xb6,0x00,0x10,0x08,0x05,
+       0xff,0xe6,0x88,0x90,0x00,0x05,0xff,0xe6,0x88,0x9b,0x00,0xd1,0x10,0x10,0x08,0x05,
+       0xff,0xe6,0x89,0x9d,0x00,0x05,0xff,0xe6,0x8a,0xb1,0x00,0x10,0x08,0x05,0xff,0xe6,
+       0x8b,0x94,0x00,0x05,0xff,0xe6,0x8d,0x90,0x00,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05,
+       0xff,0xf0,0xa2,0xac,0x8c,0x00,0x05,0xff,0xe6,0x8c,0xbd,0x00,0x10,0x08,0x05,0xff,
+       0xe6,0x8b,0xbc,0x00,0x05,0xff,0xe6,0x8d,0xa8,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,
+       0xe6,0x8e,0x83,0x00,0x05,0xff,0xe6,0x8f,0xa4,0x00,0x10,0x09,0x05,0xff,0xf0,0xa2,
+       0xaf,0xb1,0x00,0x05,0xff,0xe6,0x90,0xa2,0x00,0xcf,0x86,0xe5,0x03,0x01,0xd4,0x81,
+       0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x8f,0x85,0x00,0x05,0xff,
+       0xe6,0x8e,0xa9,0x00,0x10,0x08,0x05,0xff,0xe3,0xa8,0xae,0x00,0x05,0xff,0xe6,0x91,
+       0xa9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x91,0xbe,0x00,0x05,0xff,0xe6,0x92,
+       0x9d,0x00,0x10,0x08,0x05,0xff,0xe6,0x91,0xb7,0x00,0x05,0xff,0xe3,0xa9,0xac,0x00,
+       0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x95,0x8f,0x00,0x05,0xff,0xe6,0x95,
+       0xac,0x00,0x10,0x09,0x05,0xff,0xf0,0xa3,0x80,0x8a,0x00,0x05,0xff,0xe6,0x97,0xa3,
+       0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9b,0xb8,0x00,0x05,0xff,0xe6,0x99,0x89,
+       0x00,0x10,0x08,0x05,0xff,0xe3,0xac,0x99,0x00,0x05,0xff,0xe6,0x9a,0x91,0x00,0xd3,
+       0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe3,0xac,0x88,0x00,0x05,0xff,0xe3,
+       0xab,0xa4,0x00,0x10,0x08,0x05,0xff,0xe5,0x86,0x92,0x00,0x05,0xff,0xe5,0x86,0x95,
+       0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9c,0x80,0x00,0x05,0xff,0xe6,0x9a,0x9c,
+       0x00,0x10,0x08,0x05,0xff,0xe8,0x82,0xad,0x00,0x05,0xff,0xe4,0x8f,0x99,0x00,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9c,0x97,0x00,0x05,0xff,0xe6,0x9c,0x9b,
+       0x00,0x10,0x08,0x05,0xff,0xe6,0x9c,0xa1,0x00,0x05,0xff,0xe6,0x9d,0x9e,0x00,0xd1,
+       0x11,0x10,0x08,0x05,0xff,0xe6,0x9d,0x93,0x00,0x05,0xff,0xf0,0xa3,0x8f,0x83,0x00,
+       0x10,0x08,0x05,0xff,0xe3,0xad,0x89,0x00,0x05,0xff,0xe6,0x9f,0xba,0x00,0xd4,0x82,
+       0xd3,0x41,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9e,0x85,0x00,0x05,0xff,
+       0xe6,0xa1,0x92,0x00,0x10,0x08,0x05,0xff,0xe6,0xa2,0x85,0x00,0x05,0xff,0xf0,0xa3,
+       0x91,0xad,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xa2,0x8e,0x00,0x05,0xff,0xe6,
+       0xa0,0x9f,0x00,0x10,0x08,0x05,0xff,0xe6,0xa4,0x94,0x00,0x05,0xff,0xe3,0xae,0x9d,
+       0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xa5,0x82,0x00,0x05,0xff,0xe6,
+       0xa6,0xa3,0x00,0x10,0x08,0x05,0xff,0xe6,0xa7,0xaa,0x00,0x05,0xff,0xe6,0xaa,0xa8,
+       0x00,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa3,0x9a,0xa3,0x00,0x05,0xff,0xe6,0xab,
+       0x9b,0x00,0x10,0x08,0x05,0xff,0xe3,0xb0,0x98,0x00,0x05,0xff,0xe6,0xac,0xa1,0x00,
+       0xd3,0x42,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa3,0xa2,0xa7,0x00,0x05,
+       0xff,0xe6,0xad,0x94,0x00,0x10,0x08,0x05,0xff,0xe3,0xb1,0x8e,0x00,0x05,0xff,0xe6,
+       0xad,0xb2,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xae,0x9f,0x00,0x05,0xff,0xe6,
+       0xae,0xba,0x00,0x10,0x08,0x05,0xff,0xe6,0xae,0xbb,0x00,0x05,0xff,0xf0,0xa3,0xaa,
+       0x8d,0x00,0xd2,0x23,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa1,0xb4,0x8b,0x00,0x05,
+       0xff,0xf0,0xa3,0xab,0xba,0x00,0x10,0x08,0x05,0xff,0xe6,0xb1,0x8e,0x00,0x05,0xff,
+       0xf0,0xa3,0xb2,0xbc,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb2,0xbf,0x00,0x05,
+       0xff,0xe6,0xb3,0x8d,0x00,0x10,0x08,0x05,0xff,0xe6,0xb1,0xa7,0x00,0x05,0xff,0xe6,
+       0xb4,0x96,0x00,0xe1,0x1d,0x04,0xe0,0x0c,0x02,0xcf,0x86,0xe5,0x08,0x01,0xd4,0x82,
+       0xd3,0x41,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,
+       0xe6,0xb5,0xb7,0x00,0x10,0x08,0x05,0xff,0xe6,0xb5,0x81,0x00,0x05,0xff,0xe6,0xb5,
+       0xa9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb5,0xb8,0x00,0x05,0xff,0xe6,0xb6,
+       0x85,0x00,0x10,0x09,0x05,0xff,0xf0,0xa3,0xb4,0x9e,0x00,0x05,0xff,0xe6,0xb4,0xb4,
+       0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb8,0xaf,0x00,0x05,0xff,0xe6,
+       0xb9,0xae,0x00,0x10,0x08,0x05,0xff,0xe3,0xb4,0xb3,0x00,0x05,0xff,0xe6,0xbb,0x8b,
+       0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe6,0xbb,0x87,0x00,0x05,0xff,0xf0,0xa3,0xbb,
+       0x91,0x00,0x10,0x08,0x05,0xff,0xe6,0xb7,0xb9,0x00,0x05,0xff,0xe6,0xbd,0xae,0x00,
+       0xd3,0x42,0xd2,0x22,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa3,0xbd,0x9e,0x00,0x05,
+       0xff,0xf0,0xa3,0xbe,0x8e,0x00,0x10,0x08,0x05,0xff,0xe6,0xbf,0x86,0x00,0x05,0xff,
+       0xe7,0x80,0xb9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x80,0x9e,0x00,0x05,0xff,
+       0xe7,0x80,0x9b,0x00,0x10,0x08,0x05,0xff,0xe3,0xb6,0x96,0x00,0x05,0xff,0xe7,0x81,
+       0x8a,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff,
+       0xe7,0x81,0xb7,0x00,0x10,0x08,0x05,0xff,0xe7,0x82,0xad,0x00,0x05,0xff,0xf0,0xa0,
+       0x94,0xa5,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,
+       0xa4,0x89,0xa3,0x00,0x10,0x08,0x05,0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xf0,0xa4,
+       0x8e,0xab,0x00,0xd4,0x7b,0xd3,0x43,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,
+       0x88,0xa8,0x00,0x05,0xff,0xe7,0x88,0xb5,0x00,0x10,0x08,0x05,0xff,0xe7,0x89,0x90,
+       0x00,0x05,0xff,0xf0,0xa4,0x98,0x88,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x8a,
+       0x80,0x00,0x05,0xff,0xe7,0x8a,0x95,0x00,0x10,0x09,0x05,0xff,0xf0,0xa4,0x9c,0xb5,
+       0x00,0x05,0xff,0xf0,0xa4,0xa0,0x94,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,
+       0xe7,0x8d,0xba,0x00,0x05,0xff,0xe7,0x8e,0x8b,0x00,0x10,0x08,0x05,0xff,0xe3,0xba,
+       0xac,0x00,0x05,0xff,0xe7,0x8e,0xa5,0x00,0x51,0x08,0x05,0xff,0xe3,0xba,0xb8,0x00,
+       0x10,0x08,0x05,0xff,0xe7,0x91,0x87,0x00,0x05,0xff,0xe7,0x91,0x9c,0x00,0xd3,0x42,
+       0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x91,0xb1,0x00,0x05,0xff,0xe7,0x92,
+       0x85,0x00,0x10,0x08,0x05,0xff,0xe7,0x93,0x8a,0x00,0x05,0xff,0xe3,0xbc,0x9b,0x00,
+       0xd1,0x11,0x10,0x08,0x05,0xff,0xe7,0x94,0xa4,0x00,0x05,0xff,0xf0,0xa4,0xb0,0xb6,
+       0x00,0x10,0x08,0x05,0xff,0xe7,0x94,0xbe,0x00,0x05,0xff,0xf0,0xa4,0xb2,0x92,0x00,
+       0xd2,0x22,0xd1,0x11,0x10,0x08,0x05,0xff,0xe7,0x95,0xb0,0x00,0x05,0xff,0xf0,0xa2,
+       0x86,0x9f,0x00,0x10,0x08,0x05,0xff,0xe7,0x98,0x90,0x00,0x05,0xff,0xf0,0xa4,0xbe,
+       0xa1,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa4,0xbe,0xb8,0x00,0x05,0xff,0xf0,
+       0xa5,0x81,0x84,0x00,0x10,0x08,0x05,0xff,0xe3,0xbf,0xbc,0x00,0x05,0xff,0xe4,0x80,
+       0x88,0x00,0xcf,0x86,0xe5,0x04,0x01,0xd4,0x7d,0xd3,0x3c,0xd2,0x23,0xd1,0x11,0x10,
+       0x08,0x05,0xff,0xe7,0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0x10,0x09,
+       0x05,0xff,0xf0,0xa5,0x83,0xb2,0x00,0x05,0xff,0xf0,0xa5,0x84,0x99,0x00,0x91,0x11,
+       0x10,0x09,0x05,0xff,0xf0,0xa5,0x84,0xb3,0x00,0x05,0xff,0xe7,0x9c,0x9e,0x00,0x05,
+       0xff,0xe7,0x9c,0x9f,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x9d,0x8a,
+       0x00,0x05,0xff,0xe4,0x80,0xb9,0x00,0x10,0x08,0x05,0xff,0xe7,0x9e,0x8b,0x00,0x05,
+       0xff,0xe4,0x81,0x86,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe4,0x82,0x96,0x00,0x05,
+       0xff,0xf0,0xa5,0x90,0x9d,0x00,0x10,0x08,0x05,0xff,0xe7,0xa1,0x8e,0x00,0x05,0xff,
+       0xe7,0xa2,0x8c,0x00,0xd3,0x43,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0xa3,
+       0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0x98,0xa6,
+       0x00,0x05,0xff,0xe7,0xa5,0x96,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0x9a,
+       0x9a,0x00,0x05,0xff,0xf0,0xa5,0x9b,0x85,0x00,0x10,0x08,0x05,0xff,0xe7,0xa6,0x8f,
+       0x00,0x05,0xff,0xe7,0xa7,0xab,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe4,
+       0x84,0xaf,0x00,0x05,0xff,0xe7,0xa9,0x80,0x00,0x10,0x08,0x05,0xff,0xe7,0xa9,0x8a,
+       0x00,0x05,0xff,0xe7,0xa9,0x8f,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,
+       0xbc,0x00,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,
+       0xa7,0x00,0x05,0xff,0xe7,0xab,0xae,0x00,0xd4,0x83,0xd3,0x42,0xd2,0x21,0xd1,0x11,
+       0x10,0x08,0x05,0xff,0xe4,0x88,0x82,0x00,0x05,0xff,0xf0,0xa5,0xae,0xab,0x00,0x10,
+       0x08,0x05,0xff,0xe7,0xaf,0x86,0x00,0x05,0xff,0xe7,0xaf,0x89,0x00,0xd1,0x11,0x10,
+       0x08,0x05,0xff,0xe4,0x88,0xa7,0x00,0x05,0xff,0xf0,0xa5,0xb2,0x80,0x00,0x10,0x08,
+       0x05,0xff,0xe7,0xb3,0x92,0x00,0x05,0xff,0xe4,0x8a,0xa0,0x00,0xd2,0x21,0xd1,0x10,
+       0x10,0x08,0x05,0xff,0xe7,0xb3,0xa8,0x00,0x05,0xff,0xe7,0xb3,0xa3,0x00,0x10,0x08,
+       0x05,0xff,0xe7,0xb4,0x80,0x00,0x05,0xff,0xf0,0xa5,0xbe,0x86,0x00,0xd1,0x10,0x10,
+       0x08,0x05,0xff,0xe7,0xb5,0xa3,0x00,0x05,0xff,0xe4,0x8c,0x81,0x00,0x10,0x08,0x05,
+       0xff,0xe7,0xb7,0x87,0x00,0x05,0xff,0xe7,0xb8,0x82,0x00,0xd3,0x44,0xd2,0x22,0xd1,
+       0x10,0x10,0x08,0x05,0xff,0xe7,0xb9,0x85,0x00,0x05,0xff,0xe4,0x8c,0xb4,0x00,0x10,
+       0x09,0x05,0xff,0xf0,0xa6,0x88,0xa8,0x00,0x05,0xff,0xf0,0xa6,0x89,0x87,0x00,0xd1,
+       0x11,0x10,0x08,0x05,0xff,0xe4,0x8d,0x99,0x00,0x05,0xff,0xf0,0xa6,0x8b,0x99,0x00,
+       0x10,0x08,0x05,0xff,0xe7,0xbd,0xba,0x00,0x05,0xff,0xf0,0xa6,0x8c,0xbe,0x00,0xd2,
+       0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0xbe,0x95,0x00,0x05,0xff,0xe7,0xbf,0xba,
+       0x00,0x10,0x08,0x05,0xff,0xe8,0x80,0x85,0x00,0x05,0xff,0xf0,0xa6,0x93,0x9a,0x00,
+       0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa6,0x94,0xa3,0x00,0x05,0xff,0xe8,0x81,0xa0,
+       0x00,0x10,0x09,0x05,0xff,0xf0,0xa6,0x96,0xa8,0x00,0x05,0xff,0xe8,0x81,0xb0,0x00,
+       0xe0,0x11,0x02,0xcf,0x86,0xe5,0x07,0x01,0xd4,0x85,0xd3,0x42,0xd2,0x21,0xd1,0x11,
+       0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f,0x00,0x05,0xff,0xe4,0x8f,0x95,0x00,0x10,
+       0x08,0x05,0xff,0xe8,0x82,0xb2,0x00,0x05,0xff,0xe8,0x84,0x83,0x00,0xd1,0x10,0x10,
+       0x08,0x05,0xff,0xe4,0x90,0x8b,0x00,0x05,0xff,0xe8,0x84,0xbe,0x00,0x10,0x08,0x05,
+       0xff,0xe5,0xaa,0xb5,0x00,0x05,0xff,0xf0,0xa6,0x9e,0xa7,0x00,0xd2,0x23,0xd1,0x12,
+       0x10,0x09,0x05,0xff,0xf0,0xa6,0x9e,0xb5,0x00,0x05,0xff,0xf0,0xa3,0x8e,0x93,0x00,
+       0x10,0x09,0x05,0xff,0xf0,0xa3,0x8e,0x9c,0x00,0x05,0xff,0xe8,0x88,0x81,0x00,0xd1,
+       0x10,0x10,0x08,0x05,0xff,0xe8,0x88,0x84,0x00,0x05,0xff,0xe8,0xbe,0x9e,0x00,0x10,
+       0x08,0x05,0xff,0xe4,0x91,0xab,0x00,0x05,0xff,0xe8,0x8a,0x91,0x00,0xd3,0x41,0xd2,
+       0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x8a,0x8b,0x00,0x05,0xff,0xe8,0x8a,0x9d,
+       0x00,0x10,0x08,0x05,0xff,0xe5,0x8a,0xb3,0x00,0x05,0xff,0xe8,0x8a,0xb1,0x00,0xd1,
+       0x10,0x10,0x08,0x05,0xff,0xe8,0x8a,0xb3,0x00,0x05,0xff,0xe8,0x8a,0xbd,0x00,0x10,
+       0x08,0x05,0xff,0xe8,0x8b,0xa6,0x00,0x05,0xff,0xf0,0xa6,0xac,0xbc,0x00,0xd2,0x20,
+       0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x8b,0xa5,0x00,0x05,0xff,0xe8,0x8c,0x9d,0x00,
+       0x10,0x08,0x05,0xff,0xe8,0x8d,0xa3,0x00,0x05,0xff,0xe8,0x8e,0xad,0x00,0xd1,0x10,
+       0x10,0x08,0x05,0xff,0xe8,0x8c,0xa3,0x00,0x05,0xff,0xe8,0x8e,0xbd,0x00,0x10,0x08,
+       0x05,0xff,0xe8,0x8f,0xa7,0x00,0x05,0xff,0xe8,0x91,0x97,0x00,0xd4,0x85,0xd3,0x43,
+       0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,
+       0x8a,0x00,0x10,0x08,0x05,0xff,0xe8,0x8f,0x8c,0x00,0x05,0xff,0xe8,0x8f,0x9c,0x00,
+       0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa6,0xb0,0xb6,0x00,0x05,0xff,0xf0,0xa6,0xb5,
+       0xab,0x00,0x10,0x09,0x05,0xff,0xf0,0xa6,0xb3,0x95,0x00,0x05,0xff,0xe4,0x94,0xab,
+       0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x93,0xb1,0x00,0x05,0xff,0xe8,
+       0x93,0xb3,0x00,0x10,0x08,0x05,0xff,0xe8,0x94,0x96,0x00,0x05,0xff,0xf0,0xa7,0x8f,
+       0x8a,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe8,0x95,0xa4,0x00,0x05,0xff,0xf0,0xa6,
+       0xbc,0xac,0x00,0x10,0x08,0x05,0xff,0xe4,0x95,0x9d,0x00,0x05,0xff,0xe4,0x95,0xa1,
+       0x00,0xd3,0x42,0xd2,0x22,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1,0x00,
+       0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0x10,0x08,0x05,0xff,0xe4,0x95,0xab,0x00,0x05,
+       0xff,0xe8,0x99,0x90,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x99,0x9c,0x00,0x05,
+       0xff,0xe8,0x99,0xa7,0x00,0x10,0x08,0x05,0xff,0xe8,0x99,0xa9,0x00,0x05,0xff,0xe8,
+       0x9a,0xa9,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x9a,0x88,0x00,0x05,
+       0xff,0xe8,0x9c,0x8e,0x00,0x10,0x08,0x05,0xff,0xe8,0x9b,0xa2,0x00,0x05,0xff,0xe8,
+       0x9d,0xb9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8,
+       0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8,0x9e,0x86,0x00,0x05,0xff,0xe4,0x97,0x97,
+       0x00,0xcf,0x86,0xe5,0x08,0x01,0xd4,0x83,0xd3,0x41,0xd2,0x20,0xd1,0x10,0x10,0x08,
+       0x05,0xff,0xe8,0x9f,0xa1,0x00,0x05,0xff,0xe8,0xa0,0x81,0x00,0x10,0x08,0x05,0xff,
+       0xe4,0x97,0xb9,0x00,0x05,0xff,0xe8,0xa1,0xa0,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,
+       0xe8,0xa1,0xa3,0x00,0x05,0xff,0xf0,0xa7,0x99,0xa7,0x00,0x10,0x08,0x05,0xff,0xe8,
+       0xa3,0x97,0x00,0x05,0xff,0xe8,0xa3,0x9e,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,
+       0xff,0xe4,0x98,0xb5,0x00,0x05,0xff,0xe8,0xa3,0xba,0x00,0x10,0x08,0x05,0xff,0xe3,
+       0x92,0xbb,0x00,0x05,0xff,0xf0,0xa7,0xa2,0xae,0x00,0xd1,0x11,0x10,0x09,0x05,0xff,
+       0xf0,0xa7,0xa5,0xa6,0x00,0x05,0xff,0xe4,0x9a,0xbe,0x00,0x10,0x08,0x05,0xff,0xe4,
+       0x9b,0x87,0x00,0x05,0xff,0xe8,0xaa,0xa0,0x00,0xd3,0x41,0xd2,0x21,0xd1,0x10,0x10,
+       0x08,0x05,0xff,0xe8,0xab,0xad,0x00,0x05,0xff,0xe8,0xae,0x8a,0x00,0x10,0x08,0x05,
+       0xff,0xe8,0xb1,0x95,0x00,0x05,0xff,0xf0,0xa7,0xb2,0xa8,0x00,0xd1,0x10,0x10,0x08,
+       0x05,0xff,0xe8,0xb2,0xab,0x00,0x05,0xff,0xe8,0xb3,0x81,0x00,0x10,0x08,0x05,0xff,
+       0xe8,0xb4,0x9b,0x00,0x05,0xff,0xe8,0xb5,0xb7,0x00,0xd2,0x22,0xd1,0x12,0x10,0x09,
+       0x05,0xff,0xf0,0xa7,0xbc,0xaf,0x00,0x05,0xff,0xf0,0xa0,0xa0,0x84,0x00,0x10,0x08,
+       0x05,0xff,0xe8,0xb7,0x8b,0x00,0x05,0xff,0xe8,0xb6,0xbc,0x00,0xd1,0x11,0x10,0x08,
+       0x05,0xff,0xe8,0xb7,0xb0,0x00,0x05,0xff,0xf0,0xa0,0xa3,0x9e,0x00,0x10,0x08,0x05,
+       0xff,0xe8,0xbb,0x94,0x00,0x05,0xff,0xe8,0xbc,0xb8,0x00,0xd4,0x84,0xd3,0x43,0xd2,
+       0x22,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa8,0x97,0x92,0x00,0x05,0xff,0xf0,0xa8,
+       0x97,0xad,0x00,0x10,0x08,0x05,0xff,0xe9,0x82,0x94,0x00,0x05,0xff,0xe9,0x83,0xb1,
+       0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe9,0x84,0x91,0x00,0x05,0xff,0xf0,0xa8,0x9c,
+       0xae,0x00,0x10,0x08,0x05,0xff,0xe9,0x84,0x9b,0x00,0x05,0xff,0xe9,0x88,0xb8,0x00,
+       0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe9,0x8b,0x97,0x00,0x05,0xff,0xe9,0x8b,
+       0x98,0x00,0x10,0x08,0x05,0xff,0xe9,0x89,0xbc,0x00,0x05,0xff,0xe9,0x8f,0xb9,0x00,
+       0xd1,0x11,0x10,0x08,0x05,0xff,0xe9,0x90,0x95,0x00,0x05,0xff,0xf0,0xa8,0xaf,0xba,
+       0x00,0x10,0x08,0x05,0xff,0xe9,0x96,0x8b,0x00,0x05,0xff,0xe4,0xa6,0x95,0x00,0xd3,
+       0x43,0xd2,0x21,0xd1,0x11,0x10,0x08,0x05,0xff,0xe9,0x96,0xb7,0x00,0x05,0xff,0xf0,
+       0xa8,0xb5,0xb7,0x00,0x10,0x08,0x05,0xff,0xe4,0xa7,0xa6,0x00,0x05,0xff,0xe9,0x9b,
+       0x83,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb6,0xb2,0x00,0x05,0xff,0xe9,0x9c,
+       0xa3,0x00,0x10,0x09,0x05,0xff,0xf0,0xa9,0x85,0x85,0x00,0x05,0xff,0xf0,0xa9,0x88,
+       0x9a,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe4,0xa9,0xae,0x00,0x05,0xff,
+       0xe4,0xa9,0xb6,0x00,0x10,0x08,0x05,0xff,0xe9,0x9f,0xa0,0x00,0x05,0xff,0xf0,0xa9,
+       0x90,0x8a,0x00,0x91,0x11,0x10,0x08,0x05,0xff,0xe4,0xaa,0xb2,0x00,0x05,0xff,0xf0,
+       0xa9,0x92,0x96,0x00,0x05,0xff,0xe9,0xa0,0x8b,0x00,0xe2,0x10,0x01,0xe1,0x09,0x01,
+       0xe0,0x02,0x01,0xcf,0x86,0x95,0xfb,0xd4,0x82,0xd3,0x41,0xd2,0x21,0xd1,0x11,0x10,
+       0x08,0x05,0xff,0xe9,0xa0,0xa9,0x00,0x05,0xff,0xf0,0xa9,0x96,0xb6,0x00,0x10,0x08,
+       0x05,0xff,0xe9,0xa3,0xa2,0x00,0x05,0xff,0xe4,0xac,0xb3,0x00,0xd1,0x10,0x10,0x08,
+       0x05,0xff,0xe9,0xa4,0xa9,0x00,0x05,0xff,0xe9,0xa6,0xa7,0x00,0x10,0x08,0x05,0xff,
+       0xe9,0xa7,0x82,0x00,0x05,0xff,0xe9,0xa7,0xbe,0x00,0xd2,0x21,0xd1,0x11,0x10,0x08,
+       0x05,0xff,0xe4,0xaf,0x8e,0x00,0x05,0xff,0xf0,0xa9,0xac,0xb0,0x00,0x10,0x08,0x05,
+       0xff,0xe9,0xac,0x92,0x00,0x05,0xff,0xe9,0xb1,0x80,0x00,0xd1,0x10,0x10,0x08,0x05,
+       0xff,0xe9,0xb3,0xbd,0x00,0x05,0xff,0xe4,0xb3,0x8e,0x00,0x10,0x08,0x05,0xff,0xe4,
+       0xb3,0xad,0x00,0x05,0xff,0xe9,0xb5,0xa7,0x00,0xd3,0x44,0xd2,0x23,0xd1,0x11,0x10,
+       0x09,0x05,0xff,0xf0,0xaa,0x83,0x8e,0x00,0x05,0xff,0xe4,0xb3,0xb8,0x00,0x10,0x09,
+       0x05,0xff,0xf0,0xaa,0x84,0x85,0x00,0x05,0xff,0xf0,0xaa,0x88,0x8e,0x00,0xd1,0x11,
+       0x10,0x09,0x05,0xff,0xf0,0xaa,0x8a,0x91,0x00,0x05,0xff,0xe9,0xba,0xbb,0x00,0x10,
+       0x08,0x05,0xff,0xe4,0xb5,0x96,0x00,0x05,0xff,0xe9,0xbb,0xb9,0x00,0xd2,0x20,0xd1,
+       0x10,0x10,0x08,0x05,0xff,0xe9,0xbb,0xbe,0x00,0x05,0xff,0xe9,0xbc,0x85,0x00,0x10,
+       0x08,0x05,0xff,0xe9,0xbc,0x8f,0x00,0x05,0xff,0xe9,0xbc,0x96,0x00,0x91,0x11,0x10,
+       0x08,0x05,0xff,0xe9,0xbc,0xbb,0x00,0x05,0xff,0xf0,0xaa,0x98,0x80,0x00,0x00,0x00,
+       0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x06,
+       0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,
+       0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,
+       0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xd3,0x08,
+       0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,
+       0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,
+       0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,
+       0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,
+       0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04,
+       0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xcf,0x86,0xd5,0xc0,
+       0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,
+       0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,
+       0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,
+       0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,
+       0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,
+       0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,
+       0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,
+       0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,
+       0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,
+       0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,
+       0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,
+       0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xd4,0x60,
+       0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,
+       0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,
+       0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,
+       0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,
+       0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,
+       0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xd3,0x08,
+       0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,
+       0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,
+       0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,
+       0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,
+       0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04,
+       0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xe0,0x83,0x01,0xcf,
+       0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,
+       0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,
+       0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,
+       0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,
+       0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,
+       0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,
+       0x00,0x02,0x00,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,
+       0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,
+       0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,
+       0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,
+       0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,
+       0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,
+       0x00,0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,
+       0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,
+       0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,
+       0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,
+       0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,
+       0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,
+       0x00,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,
+       0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,
+       0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,
+       0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,
+       0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,
+       0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xcf,
+       0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,
+       0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,
+       0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,
+       0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,
+       0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,
+       0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,
+       0x00,0x02,0x00,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,
+       0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,
+       0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,
+       0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,
+       0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,
+       0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,
+       0x00,0xd4,0xd9,0xd3,0x81,0xd2,0x79,0xd1,0x71,0xd0,0x69,0xcf,0x86,0xd5,0x60,0xd4,
+       0x59,0xd3,0x52,0xd2,0x33,0xd1,0x2c,0xd0,0x25,0xcf,0x86,0x95,0x1e,0x94,0x19,0x93,
+       0x14,0x92,0x0f,0x91,0x0a,0x10,0x05,0x00,0xff,0x00,0x05,0xff,0x00,0x00,0xff,0x00,
+       0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x05,0xff,0x00,0xcf,0x06,0x05,0xff,
+       0x00,0xcf,0x06,0x00,0xff,0x00,0xd1,0x07,0xcf,0x06,0x07,0xff,0x00,0xd0,0x07,0xcf,
+       0x06,0x07,0xff,0x00,0xcf,0x86,0x55,0x05,0x07,0xff,0x00,0x14,0x05,0x07,0xff,0x00,
+       0x00,0xff,0x00,0xcf,0x06,0x00,0xff,0x00,0xcf,0x06,0x00,0xff,0x00,0xcf,0x06,0x00,
+       0xff,0x00,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,
+       0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,
+       0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,
+       0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,
+       0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,
+       0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00,
+       0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xcf,0x86,0xcf,0x06,0x02,0x00,
+       0x81,0x80,0xcf,0x86,0x85,0x84,0xcf,0x86,0xcf,0x06,0x02,0x00,0x00,0x00,0x00,0x00
+};
diff --git a/lib/ext2fs/utf8n.h b/lib/ext2fs/utf8n.h
new file mode 100644 (file)
index 0000000..c214f58
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2014 SGI.
+ * All rights reserved.
+ *
+ * This program 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.
+ *
+ * This program is distributed in the hope that it would 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 code is copied from the linux kernel.  We have a userspace
+ * version here to such that hashes will match that implementation.
+ */
+
+#ifndef UTF8NORM_H
+#define UTF8NORM_H
+
+#include <stdint.h>
+#include <unistd.h>
+#include <string.h>
+
+/* Encoding a unicode version number as a single unsigned int. */
+#define UNICODE_MAJ_SHIFT              (16)
+#define UNICODE_MIN_SHIFT              (8)
+
+#define UNICODE_AGE(MAJ, MIN, REV)                     \
+       (((unsigned int)(MAJ) << UNICODE_MAJ_SHIFT) |   \
+        ((unsigned int)(MIN) << UNICODE_MIN_SHIFT) |   \
+        ((unsigned int)(REV)))
+
+/* Highest unicode version supported by the data tables. */
+extern int utf8version_is_supported(uint8_t maj, uint8_t min, uint8_t rev);
+extern int utf8version_latest(void);
+
+/*
+ * Look for the correct const struct utf8data for a unicode version.
+ * Returns NULL if the version requested is too new.
+ *
+ * Two normalization forms are supported: nfdi and nfdicf.
+ *
+ * nfdi:
+ *  - Apply unicode normalization form NFD.
+ *  - Remove any Default_Ignorable_Code_Point.
+ *
+ * nfdicf:
+ *  - Apply unicode normalization form NFD.
+ *  - Remove any Default_Ignorable_Code_Point.
+ *  - Apply a full casefold (C + F).
+ */
+extern const struct utf8data *utf8nfdi(unsigned int maxage);
+extern const struct utf8data *utf8nfdicf(unsigned int maxage);
+
+/*
+ * Determine the maximum age of any unicode character in the string.
+ * Returns 0 if only unassigned code points are present.
+ * Returns -1 if the input is not valid UTF-8.
+ */
+extern int utf8agemax(const struct utf8data *data, const char *s);
+extern int utf8nagemax(const struct utf8data *data, const char *s, size_t len);
+
+/*
+ * Determine the minimum age of any unicode character in the string.
+ * Returns 0 if any unassigned code points are present.
+ * Returns -1 if the input is not valid UTF-8.
+ */
+extern int utf8agemin(const struct utf8data *data, const char *s);
+extern int utf8nagemin(const struct utf8data *data, const char *s, size_t len);
+
+/*
+ * Determine the length of the normalized from of the string,
+ * excluding any terminating NULL byte.
+ * Returns 0 if only ignorable code points are present.
+ * Returns -1 if the input is not valid UTF-8.
+ */
+extern ssize_t utf8len(const struct utf8data *data, const char *s);
+extern ssize_t utf8nlen(const struct utf8data *data, const char *s, size_t len);
+
+/* Needed in struct utf8cursor below. */
+#define UTF8HANGULLEAF (12)
+
+/*
+ * Cursor structure used by the normalizer.
+ */
+struct utf8cursor {
+       const struct utf8data   *data;
+       const char      *s;
+       const char      *p;
+       const char      *ss;
+       const char      *sp;
+       unsigned int    len;
+       unsigned int    slen;
+       short int       ccc;
+       short int       nccc;
+       unsigned char   hangul[UTF8HANGULLEAF];
+};
+
+/*
+ * Initialize a utf8cursor to normalize a string.
+ * Returns 0 on success.
+ * Returns -1 on failure.
+ */
+extern int utf8cursor(struct utf8cursor *u8c, const struct utf8data *data,
+                     const char *s);
+extern int utf8ncursor(struct utf8cursor *u8c, const struct utf8data *data,
+                      const char *s, size_t len);
+
+/*
+ * Get the next byte in the normalization.
+ * Returns a value > 0 && < 256 on success.
+ * Returns 0 when the end of the normalization is reached.
+ * Returns -1 if the string being normalized is not valid UTF-8.
+ */
+extern int utf8byte(struct utf8cursor *u8c);
+
+#endif /* UTF8NORM_H */
diff --git a/lib/ss/Android.bp b/lib/ss/Android.bp
new file mode 100644 (file)
index 0000000..0933251
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2017 The Android Open Source Project
+
+cc_library {
+    name: "libext2_ss",
+    host_supported: true,
+    unique_host_soname: true,
+    defaults: ["e2fsprogs-defaults"],
+    srcs: [
+        "ss_err.c",
+        "std_rqs.c",
+        "invocation.c",
+        "help.c",
+        "execute_cmd.c",
+        "listen.c",
+        "parse.c",
+        "error.c",
+        "prompt.c",
+        "request_tbl.c",
+        "list_rqs.c",
+        "pager.c",
+        "requests.c",
+        "data.c",
+        "get_readline.c",
+    ],
+    shared_libs: ["libext2_com_err"],
+    header_libs: ["libext2-headers"],
+    export_include_dirs: ["."],
+    export_header_lib_headers: ["libext2-headers"],
+}
diff --git a/lib/ss/Android.mk b/lib/ss/Android.mk
deleted file mode 100644 (file)
index c19accc..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-libext2_ss_src_files := \
-       ss_err.c \
-       std_rqs.c \
-       invocation.c help.c \
-       execute_cmd.c \
-       listen.c \
-       parse.c \
-       error.c \
-       prompt.c \
-       request_tbl.c \
-       list_rqs.c \
-       pager.c \
-       requests.c \
-       data.c \
-       get_readline.c
-
-libext2_ss_c_includes := external/e2fsprogs/lib
-
-libext2_ss_cflags := -O2 -g -W -Wall
-
-libext2_ss_shared_libraries := \
-       libext2_com_err
-
-libext2_ss_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_ss_src_files)
-LOCAL_C_INCLUDES := $(libext2_ss_c_includes)
-LOCAL_CFLAGS := $(libext2_ss_cflags)
-LOCAL_SHARED_LIBRARIES := $(libext2_ss_shared_libraries)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2_ss_system_shared_libraries)
-LOCAL_MODULE := libext2_ss
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_ss_src_files)
-LOCAL_C_INCLUDES := $(libext2_ss_c_includes)
-LOCAL_CFLAGS := $(libext2_ss_cflags)
-LOCAL_STATIC_LIBRARIES := libc
-LOCAL_MODULE := libext2_ss
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_ss_src_files)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(libext2_ss_shared_libraries))
-LOCAL_C_INCLUDES := $(libext2_ss_c_includes)
-LOCAL_CFLAGS := $(libext2_ss_cflags)
-LOCAL_MODULE := libext2_ss-host
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_SHARED_LIBRARY)
index f4953f0..40294db 100644 (file)
@@ -8,6 +8,7 @@ VPATH = @srcdir@
 top_builddir = ../..
 my_dir = lib/ss
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 DLOPEN_LIB = @DLOPEN_LIB@
 
 @MCONFIG@
@@ -124,8 +125,8 @@ ss.pc: $(srcdir)/ss.pc.in $(top_builddir)/config.status
        $(Q) cd $(top_builddir); CONFIG_FILES=lib/ss/ss.pc ./config.status
 
 installdirs::
-       $(E) "  MKINSTALLDIRS $(libdir) $(includedir)/ss $(datadir)/ss $(bindir)"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+       $(E) "  MKDIR_P $(libdir) $(includedir)/ss $(datadir)/ss $(bindir)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(libdir) \
                $(DESTDIR)$(includedir)/ss $(DESTDIR)$(datadir)/ss \
                $(DESTDIR)$(bindir) $(DESTDIR)$(pkgconfigdir)
 
@@ -163,7 +164,7 @@ test_ss: test_ss.o test_cmd.o $(DEPLIBSS) $(DEPLIBCOM_ERR)
        $(Q) $(CC) -o $@ test_ss.o test_cmd.o $(ALL_CFLAGS) $(ALL_LDFLAGS) \
                $(LIBSS) $(LIBCOM_ERR) $(SYSLIBS)
 
-check:: all test_ss
+fullcheck check:: all test_ss
        $(E) "  RUN TEST test_ss"
        -@($(TESTENV) ./test_ss -f $(srcdir)/test_script > test_out 2>&1; exit 0)
        $(Q) if diff test_out $(srcdir)/test_script_expected > test.diff; then \
index 8d6452b..9e5eebb 100644 (file)
@@ -25,7 +25,7 @@
 # an awk script to parse.
 
 #
-# The first section of this script is just to cannoicalize the file.  
+# The first section of this script is just to canonicalize the file.  
 # It removes comments, and puts each command_table request onto a single
 # line
 #
@@ -41,7 +41,7 @@ bFIRST
 }
 s/, */, /g
 #
-# Now we take care of some syntatic sugar.....
+# Now we take care of some syntactic sugar.....
 #
 /^unimplemented/ {
        s/^unimplemented [A-Za-z_0-9]*/request ss_unimplemented/
index 9365be0..11c72b3 100644 (file)
@@ -37,7 +37,7 @@ static void ss_release_readline(ss_data *info)
 #endif
 
 /* Libraries we will try to use for readline/editline functionality */
-#define DEFAULT_LIBPATH "libreadline.so.6:libreadline.so.5:libreadline.so.4:libreadline.so:libedit.so.2:libedit.so:libeditline.so.0:libeditline.so"
+#define DEFAULT_LIBPATH "libreadline.so.7:libreadline.so.6:libreadline.so.5:libreadline.so.4:libreadline.so:libedit.so.2:libedit.so:libeditline.so.0:libeditline.so"
 
 #ifdef HAVE_DLOPEN
 void ss_get_readline(int sci_idx)
index 0abc19d..53282f4 100644 (file)
@@ -2,10 +2,9 @@
 #
 #
 
-datarootdir=@datarootdir@
 DIR=@datadir@/ss
 AWK=@AWK@
-SED=@SED@
+SED=sed
 
 for as_var in \
   LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
diff --git a/lib/support/Android.bp b/lib/support/Android.bp
new file mode 100644 (file)
index 0000000..4813426
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright 2017 The Android Open Source Project
+
+cc_library {
+    name: "libext2_quota",
+    host_supported: true,
+    ramdisk_available: true,
+    vendor_ramdisk_available: true,
+    recovery_available: true,
+    unique_host_soname: true,
+    defaults: ["e2fsprogs-defaults"],
+    srcs: [
+        "dict.c",
+        "mkquota.c",
+        "parse_qtype.c",
+        "plausible.c",
+        "profile.c",
+        "profile_helpers.c",
+        "prof_err.c",
+        "quotaio.c",
+        "quotaio_tree.c",
+        "quotaio_v2.c",
+    ],
+    shared_libs: [
+        "libext2fs",
+        "libext2_blkid",
+        "libext2_com_err",
+    ],
+
+    target: {
+        windows: {
+            enabled: true
+        },
+    },
+
+    header_libs: ["libext2-headers"],
+    export_include_dirs: ["."],
+    export_header_lib_headers: ["libext2-headers"],
+}
+
+cc_library_shared {
+    name: "libext2_profile",
+    host_supported: true,
+    unique_host_soname: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: [
+        "prof_err.c",
+        "profile.c",
+    ],
+    shared_libs: ["libext2_com_err"],
+
+    header_libs: ["libext2-headers"],
+    export_include_dirs: ["."],
+    export_header_lib_headers: ["libext2-headers"],
+}
+
+cc_library {
+    name: "libext2_support",
+    host_supported: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: [
+        "cstring.c",
+    ],
+    header_libs: ["libext2-headers"],
+    export_include_dirs: ["."],
+}
diff --git a/lib/support/Android.mk b/lib/support/Android.mk
deleted file mode 100644 (file)
index fefd058..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-libext2_quota_src_files := \
-       dict.c \
-       mkquota.c \
-       parse_qtype.c \
-       plausible.c \
-       profile.c \
-       profile_helpers.c \
-       prof_err.c \
-       quotaio.c \
-       quotaio_tree.c \
-       quotaio_v2.c
-
-libext2_quota_c_includes := external/e2fsprogs/lib
-
-libext2_quota_cflags := -O2 -g -W -Wall
-
-libext2_quota_shared_libraries := libext2fs libext2_com_err libext2_blkid
-
-libext2_quota_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_quota_src_files)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2_quota_system_shared_libraries)
-LOCAL_C_INCLUDES := $(libext2_quota_c_includes)
-LOCAL_CFLAGS := $(libext2_quota_cflags)
-LOCAL_SYSTEM_SHARED_LIBRARIES := libc $(libext2_quota_shared_libraries)
-LOCAL_MODULE := libext2_quota
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_SHARED_LIBRARY)
-
-libext2_quota_static_libraries := libext2fs libext2_com_err
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_quota_src_files)
-LOCAL_C_INCLUDES := $(libext2_quota_c_includes)
-LOCAL_CFLAGS := $(libext2_quota_cflags)
-LOCAL_STATIC_LIBRARIES := libc $(libext2_quota_static_libraries)
-LOCAL_MODULE := libext2_quota
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_quota_src_files)
-LOCAL_C_INCLUDES := $(libext2_quota_c_includes)
-LOCAL_CFLAGS := $(libext2_quota_cflags)
-LOCAL_MODULE := libext2_quota-host
-LOCAL_MODULE_TAGS := optional
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(libext2_quota_shared_libraries))
-
-include $(BUILD_HOST_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-libext2_profile_src_files :=  \
-       prof_err.c \
-       profile.c
-
-libext2_profile_shared_libraries := \
-       libext2_com_err
-
-libext2_profile_system_shared_libraries := libc
-
-libext2_profile_c_includes := external/e2fsprogs/lib
-
-libext2_profile_cflags := -O2 -g -W -Wall
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_profile_src_files)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2_profile_system_shared_libraries)
-LOCAL_SHARED_LIBRARIES := $(libext2_profile_shared_libraries)
-LOCAL_C_INCLUDES := $(libext2_profile_c_includes)
-LOCAL_CFLAGS := $(libext2_profile_cflags)
-LOCAL_MODULE := libext2_profile
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_profile_src_files)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(libext2_profile_shared_libraries))
-LOCAL_C_INCLUDES := $(libext2_profile_c_includes)
-LOCAL_CFLAGS := $(libext2_profile_cflags)
-LOCAL_MODULE := libext2_profile-host
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_SHARED_LIBRARY)
index d5a6f26..f3c7981 100644 (file)
@@ -7,6 +7,7 @@ VPATH = @srcdir@
 top_builddir = ../..
 my_dir = lib/support
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
@@ -79,7 +80,7 @@ clean::
                ../libsupport.a ../libsupport_p.a $(SMANPAGES) \
                prof_err.c prof_err.h test_profile test_cstring
 
-#check:: tst_uuid
+#fullcheck check:: tst_uuid
 #      LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_uuid
 
 mostlyclean:: clean
@@ -110,26 +111,27 @@ mkquota.o: $(srcdir)/mkquota.c $(top_builddir)/lib/config.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 $(srcdir)/quotaio.h $(srcdir)/dqblk_v2.h \
- $(srcdir)/quotaio_tree.h $(srcdir)/quotaio_v2.h $(srcdir)/common.h \
- $(srcdir)/dict.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(srcdir)/quotaio.h $(srcdir)/dqblk_v2.h $(srcdir)/quotaio_tree.h \
+ $(srcdir)/quotaio_v2.h $(srcdir)/common.h $(srcdir)/dict.h
 parse_qtype.o: $(srcdir)/parse_qtype.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/quotaio.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 \
- $(srcdir)/dqblk_v2.h $(srcdir)/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/dqblk_v2.h \
+ $(srcdir)/quotaio_tree.h
 plausible.o: $(srcdir)/plausible.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/plausible.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 \
- $(srcdir)/nls-enable.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/nls-enable.h
 profile.o: $(srcdir)/profile.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/et/com_err.h \
  $(srcdir)/profile.h prof_err.h
@@ -143,8 +145,9 @@ quotaio.o: $(srcdir)/quotaio.c $(top_builddir)/lib/config.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.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 \
- $(srcdir)/dqblk_v2.h $(srcdir)/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/dqblk_v2.h \
+ $(srcdir)/quotaio_tree.h
 quotaio_tree.o: $(srcdir)/quotaio_tree.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/common.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/quotaio_tree.h \
@@ -152,8 +155,8 @@ quotaio_tree.o: $(srcdir)/quotaio_tree.c $(top_builddir)/lib/config.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 \
- $(srcdir)/dqblk_v2.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/dqblk_v2.h
 quotaio_v2.o: $(srcdir)/quotaio_v2.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/common.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/quotaio_v2.h \
@@ -161,7 +164,8 @@ quotaio_v2.o: $(srcdir)/quotaio_v2.c $(top_builddir)/lib/config.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 \
- $(srcdir)/dqblk_v2.h $(srcdir)/quotaio_tree.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/dqblk_v2.h \
+ $(srcdir)/quotaio_tree.h
 dict.o: $(srcdir)/dict.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/dict.h
index 19a75f4..00a9375 100644 (file)
 #endif
 
 #define log_err(format, arg ...)                                       \
-       fprintf(stderr, "[ERROR] %s:%d:%s:: " format "\n",              \
+       fprintf(stderr, "[ERROR] %s:%d:%s: " format "\n",               \
                __FILE__, __LINE__, __func__, ## arg)
 
 #ifdef DEBUG_QUOTA
 # define log_debug(format, arg ...)                                    \
-       fprintf(stderr, "[DEBUG] %s:%d:%s:: " format "\n",              \
+       fprintf(stderr, "[DEBUG] %s:%d:%s: " format "\n",               \
                __FILE__, __LINE__, __func__, ## arg)
 #else
 # define log_debug(...)
index 7965e95..57f4522 100644 (file)
 
 int parse_c_string(char *str)
 {
-       unsigned char *to, *from, ch;
+       char *to, *from, ch;
        int v;
 
        to = from = str;
 
-       for (to = from = (unsigned char *) str;
+       for (to = from = (char *) str;
             *from && *from != '"'; to++, from++) {
                if (*from == '\\') {
                        ch = *(++from);
@@ -93,7 +93,7 @@ int parse_c_string(char *str)
                *to = *from;
        }
        *to = '\0';
-       return to - (unsigned char *) str;
+       return to - (char *) str;
 }
 
 void print_c_string(FILE *f, const char *cp, int len)
index 6a5c15c..f8277c4 100644 (file)
@@ -267,6 +267,7 @@ dict_t *dict_create(dictcount_t maxcount, dict_comp_t comp)
        new->allocnode = dnode_alloc;
        new->freenode = dnode_free;
        new->context = NULL;
+       new->cmp_ctx = NULL;
        new->nodecount = 0;
        new->maxcount = maxcount;
        new->nilnode.left = &new->nilnode;
@@ -294,6 +295,14 @@ void dict_set_allocator(dict_t *dict, dnode_alloc_t al,
     dict->context = context;
 }
 
+void dict_set_cmp_context(dict_t *dict, void *cmp_ctx)
+{
+    dict_assert (!dict->cmp_ctx);
+    dict_assert (dict_count(dict) == 0);
+
+    dict->cmp_ctx = cmp_ctx;
+}
+
 #ifdef E2FSCK_NOTUSED
 /*
  * Free a dynamically allocated dictionary object. Removing the nodes
@@ -467,7 +476,7 @@ dnode_t *dict_lookup(dict_t *dict, const void *key)
     /* simple binary search adapted for trees that contain duplicate keys */
 
     while (root != nil) {
-       result = dict->compare(key, root->key);
+       result = dict->compare(dict->cmp_ctx, key, root->key);
        if (result < 0)
            root = root->left;
        else if (result > 0)
@@ -479,7 +488,8 @@ dnode_t *dict_lookup(dict_t *dict, const void *key)
                do {
                    saved = root;
                    root = root->left;
-                   while (root != nil && dict->compare(key, root->key))
+                   while (root != nil
+                          && dict->compare(dict->cmp_ctx, key, root->key))
                        root = root->right;
                } while (root != nil);
                return saved;
@@ -503,7 +513,7 @@ dnode_t *dict_lower_bound(dict_t *dict, const void *key)
     dnode_t *tentative = 0;
 
     while (root != nil) {
-       int result = dict->compare(key, root->key);
+       int result = dict->compare(dict->cmp_ctx, key, root->key);
 
        if (result > 0) {
            root = root->right;
@@ -535,7 +545,7 @@ dnode_t *dict_upper_bound(dict_t *dict, const void *key)
     dnode_t *tentative = 0;
 
     while (root != nil) {
-       int result = dict->compare(key, root->key);
+       int result = dict->compare(dict->cmp_ctx, key, root->key);
 
        if (result < 0) {
            root = root->left;
@@ -580,7 +590,7 @@ void dict_insert(dict_t *dict, dnode_t *node, const void *key)
 
     while (where != nil) {
        parent = where;
-       result = dict->compare(key, where->key);
+       result = dict->compare(dict->cmp_ctx, key, where->key);
        /* trap attempts at duplicate key insertion unless it's explicitly allowed */
        dict_assert (dict->dupes || result != 0);
        if (result < 0)
@@ -1261,7 +1271,7 @@ static int tokenize(char *string, ...)
     return tokcount;
 }
 
-static int comparef(const void *key1, const void *key2)
+static int comparef(const void *cmp_ctx, const void *key1, const void *key2)
 {
     return strcmp(key1, key2);
 }
index 838079d..d9462a3 100644 (file)
@@ -56,7 +56,7 @@ typedef struct dnode_t {
 #endif
 } dnode_t;
 
-typedef int (*dict_comp_t)(const void *, const void *);
+typedef int (*dict_comp_t)(const void *, const void *, const void *);
 typedef dnode_t *(*dnode_alloc_t)(void *);
 typedef void (*dnode_free_t)(dnode_t *, void *);
 
@@ -69,6 +69,7 @@ typedef struct dict_t {
     dnode_alloc_t dict_allocnode;
     dnode_free_t dict_freenode;
     void *dict_context;
+    void *cmp_ctx;
     int dict_dupes;
 #else
     int dict_dummmy;
@@ -88,6 +89,7 @@ typedef struct dict_load_t {
 
 extern dict_t *dict_create(dictcount_t, dict_comp_t);
 extern void dict_set_allocator(dict_t *, dnode_alloc_t, dnode_free_t, void *);
+extern void dict_set_cmp_context(dict_t *, void *);
 extern void dict_destroy(dict_t *);
 extern void dict_free_nodes(dict_t *);
 extern void dict_free(dict_t *);
index 8629266..fbc3833 100644 (file)
@@ -51,10 +51,12 @@ static void print_dquot(const char *desc, struct dquot *dq)
        if (desc)
                fprintf(stderr, "%s: ", desc);
        fprintf(stderr, "%u %lld:%lld:%lld %lld:%lld:%lld\n",
-               dq->dq_id, dq->dq_dqb.dqb_curspace,
-               dq->dq_dqb.dqb_bsoftlimit, dq->dq_dqb.dqb_bhardlimit,
-               dq->dq_dqb.dqb_curinodes,
-               dq->dq_dqb.dqb_isoftlimit, dq->dq_dqb.dqb_ihardlimit);
+               dq->dq_id, (long long) dq->dq_dqb.dqb_curspace,
+               (long long) dq->dq_dqb.dqb_bsoftlimit,
+               (long long) dq->dq_dqb.dqb_bhardlimit,
+               (long long) dq->dq_dqb.dqb_curinodes,
+               (long long) dq->dq_dqb.dqb_isoftlimit,
+               (long long) dq->dq_dqb.dqb_ihardlimit);
 }
 #else
 static void print_dquot(const char *desc EXT2FS_ATTR((unused)),
@@ -193,20 +195,21 @@ errcode_t quota_write_inode(quota_ctx_t qctx, unsigned int qtype_bits)
                        continue;
 
                retval = quota_file_create(h, fs, qtype, fmt);
-               if (retval < 0) {
-                       log_debug("Cannot initialize io on quotafile");
-                       continue;
+               if (retval) {
+                       log_debug("Cannot initialize io on quotafile: %s",
+                                 error_message(retval));
+                       goto out;
                }
 
                write_dquots(dict, h);
                retval = quota_file_close(qctx, h);
-               if (retval < 0) {
-                       log_err("Cannot finish IO on new quotafile: %s",
-                               strerror(errno));
+               if (retval) {
+                       log_debug("Cannot finish IO on new quotafile: %s",
+                                 strerror(errno));
                        if (h->qh_qf.e2_file)
                                ext2fs_file_close(h->qh_qf.e2_file);
                        (void) quota_inode_truncate(fs, h->qh_qf.ino);
-                       continue;
+                       goto out;
                }
 
                /* Set quota inode numbers in superblock. */
@@ -231,7 +234,7 @@ out:
 /* Helper functions for computing quota in memory.                */
 /******************************************************************/
 
-static int dict_uint_cmp(const void *a, const void *b)
+static int dict_uint_cmp(const void *cmp_ctx, const void *a, const void *b)
 {
        unsigned int    c, d;
 
@@ -246,6 +249,11 @@ static int dict_uint_cmp(const void *a, const void *b)
                return -1;
 }
 
+static inline int project_quota_valid(quota_ctx_t qctx)
+{
+       return (EXT2_INODE_SIZE(qctx->fs->super) > EXT2_GOOD_OLD_INODE_SIZE);
+}
+
 static inline qid_t get_qid(struct ext2_inode_large *inode, enum quota_type qtype)
 {
        unsigned int inode_size;
@@ -260,6 +268,7 @@ static inline qid_t get_qid(struct ext2_inode_large *inode, enum quota_type qtyp
                        inode->i_extra_isize;
                if (inode_includes(inode_size, i_projid))
                        return inode_projid(*inode);
+               return 0;
        default:
                return 0;
        }
@@ -389,6 +398,8 @@ void quota_data_add(quota_ctx_t qctx, struct ext2_inode_large *inode,
                        inode_uid(*inode),
                        inode_gid(*inode), space);
        for (qtype = 0; qtype < MAXQUOTAS; qtype++) {
+               if (qtype == PRJQUOTA && !project_quota_valid(qctx))
+                       continue;
                dict = qctx->quota_dict[qtype];
                if (dict) {
                        dq = get_dq(dict, get_qid(inode, qtype));
@@ -416,6 +427,8 @@ void quota_data_sub(quota_ctx_t qctx, struct ext2_inode_large *inode,
                        inode_uid(*inode),
                        inode_gid(*inode), space);
        for (qtype = 0; qtype < MAXQUOTAS; qtype++) {
+               if (qtype == PRJQUOTA && !project_quota_valid(qctx))
+                       continue;
                dict = qctx->quota_dict[qtype];
                if (dict) {
                        dq = get_dq(dict, get_qid(inode, qtype));
@@ -441,6 +454,8 @@ void quota_data_inodes(quota_ctx_t qctx, struct ext2_inode_large *inode,
                        inode_uid(*inode),
                        inode_gid(*inode), adjust);
        for (qtype = 0; qtype < MAXQUOTAS; qtype++) {
+               if (qtype == PRJQUOTA && !project_quota_valid(qctx))
+                       continue;
                dict = qctx->quota_dict[qtype];
                if (dict) {
                        dq = get_dq(dict, get_qid(inode, qtype));
@@ -470,8 +485,10 @@ errcode_t quota_compute_usage(quota_ctx_t qctx)
        }
        inode_size = fs->super->s_inode_size;
        inode = malloc(inode_size);
-       if (!inode)
+       if (!inode) {
+               ext2fs_close_inode_scan(scan);
                return ENOMEM;
+       }
        while (1) {
                ret = ext2fs_get_next_inode_full(scan, &ino,
                                                 EXT2_INODE(inode), inode_size);
@@ -486,8 +503,8 @@ errcode_t quota_compute_usage(quota_ctx_t qctx)
                if (inode->i_links_count &&
                    (ino == EXT2_ROOT_INO ||
                     ino >= EXT2_FIRST_INODE(fs->super))) {
-                       space = ext2fs_inode_i_blocks(fs,
-                                                     EXT2_INODE(inode)) << 9;
+                       space = ext2fs_get_stat_i_blocks(fs,
+                                               EXT2_INODE(inode)) << 9;
                        quota_data_add(qctx, inode, ino, space);
                        quota_data_inodes(qctx, inode, ino, +1);
                }
@@ -502,6 +519,7 @@ struct scan_dquots_data {
        dict_t          *quota_dict;
        int             update_limits; /* update limits from disk */
        int             update_usage;
+       int             check_consistency;
        int             usage_is_inconsistent;
 };
 
@@ -518,16 +536,17 @@ static int scan_dquots_callback(struct dquot *dquot, void *cb_data)
        print_dquot("mem", dq);
        print_dquot("dsk", dquot);
 
-       /* Check if there is inconsistancy. */
-       if (dq->dq_dqb.dqb_curspace != dquot->dq_dqb.dqb_curspace ||
-           dq->dq_dqb.dqb_curinodes != dquot->dq_dqb.dqb_curinodes) {
+       /* Check if there is inconsistency */
+       if (scan_data->check_consistency &&
+           (dq->dq_dqb.dqb_curspace != dquot->dq_dqb.dqb_curspace ||
+            dq->dq_dqb.dqb_curinodes != dquot->dq_dqb.dqb_curinodes)) {
                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, (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);
+               fprintf(stderr, "[QUOTA WARNING] Usage inconsistent for ID %u:"
+                       "actual (%lld, %lld) != expected (%lld, %lld)\n",
+                       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) {
@@ -549,13 +568,15 @@ static int scan_dquots_callback(struct dquot *dquot, void *cb_data)
  * Read all dquots from quota file into memory
  */
 static errcode_t quota_read_all_dquots(struct quota_handle *qh,
-                                       quota_ctx_t qctx, int update_limits)
+                                       quota_ctx_t qctx,
+                                      int update_limits EXT2FS_ATTR((unused)))
 {
        struct scan_dquots_data scan_data;
 
        scan_data.quota_dict = qctx->quota_dict[qh->qh_type];
-       scan_data.update_limits = update_limits;
-       scan_data.update_usage = 0;
+       scan_data.check_consistency = 0;
+       scan_data.update_limits = 0;
+       scan_data.update_usage = 1;
 
        return qh->qh_ops->scan_dquots(qh, scan_dquots_callback, &scan_data);
 }
@@ -645,10 +666,12 @@ errcode_t quota_compare_and_update(quota_ctx_t qctx, enum quota_type qtype,
        scan_data.quota_dict = qctx->quota_dict[qtype];
        scan_data.update_limits = 1;
        scan_data.update_usage = 0;
+       scan_data.check_consistency = 1;
        scan_data.usage_is_inconsistent = 0;
        err = qh.qh_ops->scan_dquots(&qh, scan_dquots_callback, &scan_data);
        if (err) {
                log_debug("Error scanning dquots");
+               *usage_inconsistent = 1;
                goto out_close_qh;
        }
 
index 098639e..d8df07d 100644 (file)
@@ -63,7 +63,9 @@ int parse_quota_types(const char *in_str, unsigned int *qtype_bits,
                        ret = EINVAL;
                        goto errout;
                }
+#ifdef DEBUG_PROGRAM
                printf("word: %s\n", token);
+#endif
                next = strtok_r(NULL, PARSE_DELIM, &tmp);
        }
        *qtype_bits = qtype;
@@ -72,7 +74,7 @@ errout:
        return ret;
 }
 
-#if 0
+#ifdef DEBUG_PROGRAM
 int main(int argc, char **argv)
 {
        unsigned int qtype_bits = 0;
index 0636061..024f205 100644 (file)
@@ -101,7 +101,6 @@ static void print_ext2_info(const char *device)
        ext2_filsys             fs;
        errcode_t               retval;
        time_t                  tm;
-       char                    buf[80];
 
        retval = ext2fs_open2(device, 0, EXT2_FLAG_64BITS, 0, 0,
                              unix_io_manager, &fs);
@@ -111,13 +110,10 @@ static void print_ext2_info(const char *device)
 
        if (sb->s_mtime) {
                tm = sb->s_mtime;
-               if (sb->s_last_mounted[0]) {
-                       memset(buf, 0, sizeof(buf));
-                       strncpy(buf, sb->s_last_mounted,
-                               sizeof(sb->s_last_mounted));
-                       printf(_("\tlast mounted on %s on %s"), buf,
-                              ctime(&tm));
-               } else
+               if (sb->s_last_mounted[0])
+                       printf(_("\tlast mounted on %.*s on %s"),
+                              EXT2_LEN_STR(sb->s_last_mounted), ctime(&tm));
+               else
                        printf(_("\tlast mounted on %s"), ctime(&tm));
        } else if (sb->s_mkfs_time) {
                tm = sb->s_mkfs_time;
@@ -246,8 +242,8 @@ int check_plausibility(const char *device, int flags, int *ret_is_dev)
 
        if (fs_type) {
                if (fs_label)
-                       printf(_("%s contains a %s file system "
-                                "labelled '%s'\n"), device, fs_type, fs_label);
+                       printf(_("%s contains a %s file system labelled '%s'\n"),
+                              device, fs_type, fs_label);
                else
                        printf(_("%s contains a %s file system\n"), device,
                               fs_type);
index 594e4b1..b85150c 100644 (file)
@@ -21,6 +21,7 @@
 #define CHECK_FS_EXIST 0x0004
 #define VERBOSE_CREATE 0x0008
 #define NO_SIZE                0x0010
+#define QUIET_CHECK    0x0020
 
 extern int check_plausibility(const char *device, int flags,
                              int *ret_is_dev);
index ae9a2d9..585ed59 100644 (file)
@@ -1112,7 +1112,7 @@ errcode_t profile_create_node(const char *name, const char *value,
 }
 
 /*
- * This function verifies that all of the representation invarients of
+ * This function verifies that all of the representation invariants of
  * the profile are true.  If not, we have a programming bug somewhere,
  * probably in this file.
  */
@@ -1362,7 +1362,7 @@ errcode_t profile_node_iterator(void **iter_p, struct profile_node **ret_node,
        }
 get_new_file:
        if (iter->node == 0) {
-               if (iter->file == 0 ||
+               if (iter->file == NULL ||
                    (iter->flags & PROFILE_ITER_FINAL_SEEN)) {
                        profile_iterator_free(iter_p);
                        if (ret_node)
@@ -1376,7 +1376,8 @@ get_new_file:
                if ((retval = profile_update_file(iter->file))) {
                    if (retval == ENOENT || retval == EACCES) {
                        /* XXX memory leak? */
-                       iter->file = iter->file->next;
+                       if (iter->file)
+                           iter->file = iter->file->next;
                        skip_num = 0;
                        retval = 0;
                        goto get_new_file;
@@ -1405,7 +1406,8 @@ get_new_file:
                                iter->flags |= PROFILE_ITER_FINAL_SEEN;
                }
                if (!section) {
-                       iter->file = iter->file->next;
+                       if (iter->file)
+                               iter->file = iter->file->next;
                        skip_num = 0;
                        goto get_new_file;
                }
@@ -1435,13 +1437,15 @@ get_new_file:
        }
        iter->num++;
        if (!p) {
-               iter->file = iter->file->next;
+               if (iter->file)
+                       iter->file = iter->file->next;
                iter->node = 0;
                skip_num = 0;
                goto get_new_file;
        }
        if ((iter->node = p->next) == NULL)
-               iter->file = iter->file->next;
+               if (iter->file)
+                       iter->file = iter->file->next;
        if (ret_node)
                *ret_node = p;
        if (ret_name)
index b862326..d7d6f15 100644 (file)
@@ -179,7 +179,7 @@ cleanup_iterator:
 }
 
 /*
- * This function will return the list of the names of subections in the
+ * This function will return the list of the names of subsections in the
  * under the specified section name.
  */
 errcode_t
index befa832..b41bb74 100644 (file)
@@ -105,19 +105,6 @@ void update_grace_times(struct dquot *q)
        }
 }
 
-static int compute_num_blocks_proc(ext2_filsys fs EXT2FS_ATTR((unused)),
-                                  blk64_t *blocknr EXT2FS_ATTR((unused)),
-                                  e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)),
-                                  blk64_t ref_block EXT2FS_ATTR((unused)),
-                                  int ref_offset EXT2FS_ATTR((unused)),
-                                  void *private)
-{
-       blk64_t *num_blocks = private;
-
-       *num_blocks += 1;
-       return 0;
-}
-
 errcode_t quota_inode_truncate(ext2_filsys fs, ext2_ino_t ino)
 {
        struct ext2_inode inode;
@@ -147,18 +134,6 @@ errcode_t quota_inode_truncate(ext2_filsys fs, ext2_ino_t ino)
        return err;
 }
 
-static ext2_off64_t compute_inode_size(ext2_filsys fs, ext2_ino_t ino)
-{
-       blk64_t num_blocks = 0;
-
-       ext2fs_block_iterate3(fs, ino,
-                             BLOCK_FLAG_READ_ONLY,
-                             NULL,
-                             compute_num_blocks_proc,
-                             &num_blocks);
-       return num_blocks * fs->blocksize;
-}
-
 /* Functions to read/write quota file. */
 static unsigned int quota_write_nomount(struct quota_file *qf,
                                        ext2_loff_t offset,
@@ -230,9 +205,9 @@ errcode_t quota_file_open(quota_ctx_t qctx, struct quota_handle *h,
                return err;
 
        if (qf_ino == 0)
-               qf_ino = *quota_sb_inump(fs->super, qtype)
+               qf_ino = *quota_sb_inump(fs->super, qtype);
 
-       log_debug("Opening quota ino=%lu, type=%d", qf_ino, qtype);
+       log_debug("Opening quota ino=%u, type=%d", qf_ino, qtype);
        err = ext2fs_file_open(fs, qf_ino, flags, &e2_file);
        if (err) {
                log_err("ext2fs_file_open failed: %s", error_message(err));
@@ -273,11 +248,13 @@ errcode_t quota_file_open(quota_ctx_t qctx, struct quota_handle *h,
        if (h->qh_ops->check_file &&
            (h->qh_ops->check_file(h, qtype, fmt) == 0)) {
                log_err("qh_ops->check_file failed");
+               err = EIO;
                goto errout;
        }
 
        if (h->qh_ops->init_io && (h->qh_ops->init_io(h) < 0)) {
                log_err("qh_ops->init_io failed");
+               err = EIO;
                goto errout;
        }
        if (allocated_handle)
@@ -288,7 +265,7 @@ errout:
        ext2fs_file_close(e2_file);
        if (allocated_handle)
                ext2fs_free_mem(&h);
-       return -1;
+       return err;
 }
 
 static errcode_t quota_inode_init_new(ext2_filsys fs, ext2_ino_t ino)
@@ -366,7 +343,7 @@ errcode_t quota_file_create(struct quota_handle *h, ext2_filsys fs,
        h->e2fs_write = quota_write_nomount;
        h->e2fs_read = quota_read_nomount;
 
-       log_debug("Creating quota ino=%lu, type=%d", qf_inum, type);
+       log_debug("Creating quota ino=%u, type=%d", qf_inum, qtype);
        err = ext2fs_file_open(fs, qf_inum, h->qh_file_flags, &e2_file);
        if (err) {
                log_err("ext2fs_file_open failed: %ld", err);
@@ -405,23 +382,14 @@ errcode_t quota_file_close(quota_ctx_t qctx, struct quota_handle *h)
 {
        if (h->qh_io_flags & IOFL_INFODIRTY) {
                if (h->qh_ops->write_info && h->qh_ops->write_info(h) < 0)
-                       return -1;
+                       return EIO;
                h->qh_io_flags &= ~IOFL_INFODIRTY;
        }
 
        if (h->qh_ops->end_io && h->qh_ops->end_io(h) < 0)
-               return -1;
-       if (h->qh_qf.e2_file) {
-               __u64 new_size, size;
-
-               new_size = compute_inode_size(h->qh_qf.fs, h->qh_qf.ino);
-               ext2fs_file_flush(h->qh_qf.e2_file);
-               if (ext2fs_file_get_lsize(h->qh_qf.e2_file, &size))
-                       new_size = 0;
-               if (size != new_size)
-                       ext2fs_file_set_size2(h->qh_qf.e2_file, new_size);
+               return EIO;
+       if (h->qh_qf.e2_file)
                ext2fs_file_close(h->qh_qf.e2_file);
-       }
        if (qctx->quota_file[h->qh_type] == h)
                ext2fs_free_mem(&qctx->quota_file[h->qh_type]);
        return 0;
index 486c2a5..6068970 100644 (file)
@@ -12,7 +12,7 @@
  *
  *     quota_init_context(&qctx, fs, QUOTA_ALL_BIT);
  *     {
- *             quota_compute_usage(qctx, QUOTA_ALL_BIT);
+ *             quota_compute_usage(qctx);
  *             AND/OR
  *             quota_data_add/quota_data_sub/quota_data_inodes();
  *     }
@@ -243,7 +243,7 @@ int parse_quota_types(const char *in_str, unsigned int *qtype_bits,
  * Return pointer to reserved inode field in superblock for given quota type.
  *
  * This allows the caller to get or set the quota inode by type without the
- * need for the quota array to be contiguous in the superbock.
+ * need for the quota array to be contiguous in the superblock.
  */
 static inline ext2_ino_t *quota_sb_inump(struct ext2_super_block *sb,
                                         enum quota_type qtype)
index a7c2028..6cc4fb5 100644 (file)
@@ -540,6 +540,17 @@ struct dquot *qtree_read_dquot(struct quota_handle *h, qid_t id)
        return dquot;
 }
 
+static int check_reference(struct quota_handle *h, unsigned int blk)
+{
+       if (blk >= h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks) {
+               log_err("Illegal reference (%u >= %u) in %s quota file",
+                       blk, h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks,
+                       quota_type2name(h->qh_type));
+               return -1;
+       }
+       return 0;
+}
+
 /*
  * Scan all dquots in file and call callback on each
  */
@@ -558,7 +569,7 @@ static int report_block(struct dquot *dquot, unsigned int blk, char *bitmap,
        int entries, i;
 
        if (!buf)
-               return 0;
+               return -1;
 
        set_bit(bitmap, blk);
        read_blk(dquot->dq_h, blk, buf);
@@ -580,23 +591,12 @@ static int report_block(struct dquot *dquot, unsigned int blk, char *bitmap,
        return entries;
 }
 
-static void check_reference(struct quota_handle *h, unsigned int blk)
-{
-       if (blk >= h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks)
-               log_err("Illegal reference (%u >= %u) in %s quota file. "
-                       "Quota file is probably corrupted.\n"
-                       "Please run e2fsck (8) to fix it.",
-                       blk,
-                       h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks,
-                       quota_type2name(h->qh_type));
-}
-
 static int report_tree(struct dquot *dquot, unsigned int blk, int depth,
                       char *bitmap,
                       int (*process_dquot) (struct dquot *, void *),
                       void *data)
 {
-       int entries = 0, i;
+       int entries = 0, ret, i;
        dqbuf_t buf = getdqbuf();
        __le32 *ref = (__le32 *) buf;
 
@@ -607,22 +607,40 @@ static int report_tree(struct dquot *dquot, unsigned int blk, int depth,
        if (depth == QT_TREEDEPTH - 1) {
                for (i = 0; i < QT_BLKSIZE >> 2; i++) {
                        blk = ext2fs_le32_to_cpu(ref[i]);
-                       check_reference(dquot->dq_h, blk);
-                       if (blk && !get_bit(bitmap, blk))
-                               entries += report_block(dquot, blk, bitmap,
-                                                       process_dquot, data);
+                       if (check_reference(dquot->dq_h, blk)) {
+                               entries = -1;
+                               goto errout;
+                       }
+                       if (blk && !get_bit(bitmap, blk)) {
+                               ret = report_block(dquot, blk, bitmap,
+                                                  process_dquot, data);
+                               if (ret < 0) {
+                                       entries = ret;
+                                       goto errout;
+                               }
+                               entries += ret;
+                       }
                }
        } else {
                for (i = 0; i < QT_BLKSIZE >> 2; i++) {
                        blk = ext2fs_le32_to_cpu(ref[i]);
                        if (blk) {
-                               check_reference(dquot->dq_h, blk);
-                               entries += report_tree(dquot, blk, depth + 1,
-                                                      bitmap, process_dquot,
-                                                      data);
+                               if (check_reference(dquot->dq_h, blk)) {
+                                       entries = -1;
+                                       goto errout;
+                               }
+                               ret = report_tree(dquot, blk, depth + 1,
+                                                 bitmap, process_dquot,
+                                                 data);
+                               if (ret < 0) {
+                                       entries = ret;
+                                       goto errout;
+                               }
+                               entries += ret;
                        }
                }
        }
+errout:
        freedqbuf(buf);
        return entries;
 }
@@ -642,6 +660,7 @@ int qtree_scan_dquots(struct quota_handle *h,
                      int (*process_dquot) (struct dquot *, void *),
                      void *data)
 {
+       int ret;
        char *bitmap;
        struct v2_mem_dqinfo *v2info = &h->qh_info.u.v2_mdqi;
        struct qtree_mem_dqinfo *info = &v2info->dqi_qtree;
@@ -655,10 +674,14 @@ int qtree_scan_dquots(struct quota_handle *h,
                ext2fs_free_mem(&dquot);
                return -1;
        }
-       v2info->dqi_used_entries = report_tree(dquot, QT_TREEOFF, 0, bitmap,
-                                              process_dquot, data);
+       ret = report_tree(dquot, QT_TREEOFF, 0, bitmap, process_dquot, data);
+       if (ret < 0)
+               goto errout;
+       v2info->dqi_used_entries = ret;
        v2info->dqi_data_blocks = find_set_bits(bitmap, info->dqi_blocks);
+       ret = 0;
+errout:
        ext2fs_free_mem(&bitmap);
        ext2fs_free_mem(&dquot);
-       return 0;
+       return ret;
 }
index 0db0ca1..b0b7257 100644 (file)
@@ -42,7 +42,7 @@ struct qtree_fmt_operations {
        int (*is_id)(void *disk, struct dquot *dquot);
 };
 
-/* Inmemory copy of version specific information */
+/* In-memory copy of version specific information */
 struct qtree_mem_dqinfo {
        unsigned int dqi_blocks;        /* # of blocks in quota file */
        unsigned int dqi_free_blk;      /* First block in list of free blocks */
index 38be2a3..7390667 100644 (file)
@@ -175,6 +175,8 @@ static int v2_check_file(struct quota_handle *h, int type, int fmt)
 static int v2_init_io(struct quota_handle *h)
 {
        struct v2_disk_dqinfo ddqinfo;
+       struct v2_mem_dqinfo *info;
+       __u64 filesize;
 
        h->qh_info.u.v2_mdqi.dqi_qtree.dqi_entry_size =
                sizeof(struct v2r1_disk_dqblk);
@@ -185,6 +187,32 @@ static int v2_init_io(struct quota_handle *h)
                         sizeof(ddqinfo)) != sizeof(ddqinfo))
                return -1;
        v2_disk2memdqinfo(&h->qh_info, &ddqinfo);
+
+       /* Check to make sure quota file info is sane */
+       info = &h->qh_info.u.v2_mdqi;
+       if (ext2fs_file_get_lsize(h->qh_qf.e2_file, &filesize))
+               return -1;
+       if ((filesize > (1U << 31)) ||
+           (info->dqi_qtree.dqi_blocks >
+            (filesize + QT_BLKSIZE - 1) >> QT_BLKSIZE_BITS)) {
+               log_err("Quota inode %u corrupted: file size %llu; "
+                       "dqi_blocks %u", h->qh_qf.ino,
+                       filesize, info->dqi_qtree.dqi_blocks);
+               return -1;
+       }
+       if (info->dqi_qtree.dqi_free_blk >= info->dqi_qtree.dqi_blocks) {
+               log_err("Quota inode %u corrupted: free_blk %u; dqi_blocks %u",
+                       h->qh_qf.ino, info->dqi_qtree.dqi_free_blk,
+                       info->dqi_qtree.dqi_blocks);
+               return -1;
+       }
+       if (info->dqi_qtree.dqi_free_entry >= info->dqi_qtree.dqi_blocks) {
+               log_err("Quota inode %u corrupted: free_entry %u; "
+                       "dqi_blocks %u", h->qh_qf.ino,
+                       info->dqi_qtree.dqi_free_entry,
+                       info->dqi_qtree.dqi_blocks);
+               return -1;
+       }
        return 0;
 }
 
diff --git a/lib/uuid/Android.bp b/lib/uuid/Android.bp
new file mode 100644 (file)
index 0000000..b560969
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2017 The Android Open Source Project
+
+cc_library {
+    name: "libext2_uuid",
+    host_supported: true,
+    ramdisk_available: true,
+    vendor_ramdisk_available: true,
+    recovery_available: true,
+    vendor_available: true,
+    product_available: true,
+    unique_host_soname: true,
+    defaults: ["e2fsprogs-defaults"],
+    srcs: [
+        "clear.c",
+        "compare.c",
+        "copy.c",
+        "gen_uuid.c",
+        "isnull.c",
+        "pack.c",
+        "parse.c",
+        "unpack.c",
+        "unparse.c",
+        "uuid_time.c",
+    ],
+    cflags: [
+        "-Wno-unused-function",
+        "-Wno-unused-parameter",
+    ],
+    target: {
+        windows: {
+            // Cannot suppress the _WIN32_WINNT redefined warning.
+            cflags: ["-Wno-error"],
+            include_dirs: [ "external/e2fsprogs/include/mingw" ],
+            enabled: true
+        },
+    },
+    header_libs: ["libext2-headers"],
+    export_include_dirs: ["."],
+    export_header_lib_headers: ["libext2-headers"],
+    apex_available: [
+        "//apex_available:platform",
+        "com.android.virt",
+    ],
+}
diff --git a/lib/uuid/Android.mk b/lib/uuid/Android.mk
deleted file mode 100644 (file)
index 91d6836..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-libext2_uuid_src_files := \
-       clear.c \
-       compare.c \
-       copy.c \
-       gen_uuid.c \
-       isnull.c \
-       pack.c \
-       parse.c \
-       unpack.c \
-       unparse.c \
-       uuid_time.c
-
-
-libext2_uuid_c_includes := external/e2fsprogs/lib
-
-libext2_uuid_cflags := -O2 -g -W -Wall \
-       -Wno-unused-function \
-       -Wno-unused-parameter
-
-libext2_uuid_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_uuid_src_files)
-LOCAL_C_INCLUDES := $(libext2_uuid_c_includes)
-LOCAL_CFLAGS := $(libext2_uuid_cflags)
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH) $(LOCAL_PATH)/..
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2_uuid_system_shared_libraries)
-LOCAL_MODULE := libext2_uuid
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_uuid_src_files)
-LOCAL_C_INCLUDES := $(libext2_uuid_c_includes)
-LOCAL_CFLAGS := $(libext2_uuid_cflags)
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
-LOCAL_MODULE := libext2_uuid-host
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_SHARED_LIBRARY)
-
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_uuid_src_files)
-LOCAL_C_INCLUDES := $(libext2_uuid_c_includes)
-LOCAL_CFLAGS := $(libext2_uuid_cflags)
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
-LOCAL_STATIC_LIBRARIES := libc
-LOCAL_MODULE := libext2_uuid_static
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_STATIC_LIBRARY)
-
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(libext2_uuid_src_files)
-LOCAL_C_INCLUDES := $(libext2_uuid_c_includes)
-LOCAL_CFLAGS := $(libext2_uuid_cflags)
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
-LOCAL_MODULE := libext2_uuid-host
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_STATIC_LIBRARY)
index a298144..5f69779 100644 (file)
@@ -7,6 +7,7 @@ VPATH = @srcdir@
 top_builddir = ../..
 my_dir = lib/uuid
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
@@ -130,8 +131,8 @@ uuid.pc: $(srcdir)/uuid.pc.in $(top_builddir)/config.status
        $(Q) cd $(top_builddir); CONFIG_FILES=lib/uuid/uuid.pc ./config.status
 
 installdirs::
-       $(E) "  MKINSTALLDIRS $(libdir) $(includedir)/uuid $(man3dir)"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir)  \
+       $(E) "  MKDIR_P $(libdir) $(includedir)/uuid $(man3dir)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(libdir)  \
                $(DESTDIR)$(includedir)/uuid $(DESTDIR)$(man3dir) \
                $(DESTDIR)$(pkgconfigdir)
 
@@ -171,7 +172,7 @@ clean::
                ../libuuid.a ../libuuid_p.a tst_uuid uuid_time \
                uuid.pc uuid_types.h $(SMANPAGES)
 
-check:: tst_uuid
+fullcheck check:: tst_uuid
        LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_uuid
 
 mostlyclean:: clean
index 0028c7c..89179b6 100644 (file)
@@ -60,7 +60,9 @@
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
+#ifdef HAVE_SYS_WAIT_H
 #include <sys/wait.h>
+#endif
 #include <sys/stat.h>
 #ifdef HAVE_SYS_FILE_H
 #include <sys/file.h>
@@ -113,6 +115,7 @@ THREAD_LOCAL unsigned short jrand_seed[3];
 #endif
 
 #ifdef _WIN32
+#ifndef USE_MINGW
 static void gettimeofday (struct timeval *tv, void *dummy)
 {
        FILETIME        ftime;
@@ -129,11 +132,7 @@ static void gettimeofday (struct timeval *tv, void *dummy)
        tv->tv_sec = n / 1000000;
        tv->tv_usec = n % 1000000;
 }
-
-static int getuid (void)
-{
-       return 1;
-}
+#endif
 #endif
 
 static int get_random_fd(void)
@@ -154,7 +153,7 @@ static int get_random_fd(void)
                                fcntl(fd, F_SETFD, i | FD_CLOEXEC);
                }
 #endif
-               srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec);
+               srand(((unsigned)getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec);
 #ifdef DO_JRAND_MIX
                jrand_seed[0] = getpid() ^ (tv.tv_sec & 0xFFFF);
                jrand_seed[1] = getppid() ^ (tv.tv_usec & 0xFFFF);
@@ -317,7 +316,9 @@ static int get_clock(uint32_t *clock_high, uint32_t *clock_low,
        THREAD_LOCAL FILE               *state_f;
        THREAD_LOCAL uint16_t           clock_seq;
        struct timeval                  tv;
+#ifndef _WIN32
        struct flock                    fl;
+#endif
        uint64_t                        clock_reg;
        mode_t                          save_umask;
        int                             len;
@@ -335,6 +336,7 @@ static int get_clock(uint32_t *clock_high, uint32_t *clock_low,
                        }
                }
        }
+#ifndef _WIN32
        fl.l_type = F_WRLCK;
        fl.l_whence = SEEK_SET;
        fl.l_start = 0;
@@ -350,6 +352,7 @@ static int get_clock(uint32_t *clock_high, uint32_t *clock_low,
                        break;
                }
        }
+#endif
        if (state_fd >= 0) {
                unsigned int cl;
                unsigned long tv1, tv2;
@@ -405,19 +408,21 @@ try_again:
                rewind(state_f);
                len = fprintf(state_f,
                              "clock: %04x tv: %016lu %08lu adj: %08d\n",
-                             clock_seq, last.tv_sec, (long)last.tv_usec,
-                             adjustment);
+                             clock_seq, (unsigned long)last.tv_sec,
+                             (unsigned long)last.tv_usec, adjustment);
                fflush(state_f);
                if (ftruncate(state_fd, len) < 0) {
                        fprintf(state_f, "                   \n");
                        fflush(state_f);
                }
                rewind(state_f);
+#ifndef _WIN32
                fl.l_type = F_UNLCK;
                if (fcntl(state_fd, F_SETLK, &fl) < 0) {
                        fclose(state_f);
                        state_fd = -1;
                }
+#endif
        }
 
        *clock_high = clock_reg >> 32;
@@ -479,10 +484,12 @@ static void close_all_fds(void)
 }
 #endif /* defined(USE_UUIDD) && defined(HAVE_SYS_UN_H) */
 
+#if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic push
 #if !defined(USE_UUIDD) || !defined(HAVE_SYS_UN_H)
 #pragma GCC diagnostic ignored "-Wunused-parameter"
 #endif
+#endif
 /*
  * Try using the uuidd daemon to generate the UUID
  *
@@ -565,7 +572,9 @@ fail:
 #endif
        return -1;
 }
+#if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic pop
+#endif
 
 void uuid__generate_time(uuid_t out, int *num)
 {
index 79a4050..9a9a977 100644 (file)
@@ -64,7 +64,7 @@ NtCurrentTeb(void);
 
 //
 // The only way to get version information from the system is to examine
-// one stored in PEB. But it's pretty dangerouse because this value could
+// one stored in PEB. But it's pretty dangerous because this value could
 // be altered in image header.
 //
 
index 88d928f..649bfbc 100644 (file)
@@ -144,7 +144,8 @@ main(int argc ATTR((unused)) , char **argv ATTR((unused)))
        tv.tv_usec = 0;
        time_reg = uuid_time(buf, &tv);
        printf("UUID generated at %lu reports %lu (%ld.%ld)\n",
-              time_gen, time_reg, tv.tv_sec, (long)tv.tv_usec);
+              (unsigned long)time_gen, (unsigned long)time_reg,
+              (long)tv.tv_sec, (long)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) {
index 18760fe..1c51bd0 100644 (file)
@@ -35,10 +35,10 @@ uuid \- DCE compatible Universally Unique Identifier library
 .SH SYNOPSIS
 .B #include <uuid/uuid.h>
 .SH DESCRIPTION
-The UUID library is used to generate unique identifiers for objects 
+The UUID library is used to generate unique identifiers for objects
 that may be accessible beyond the local system.  This library
 generates UUIDs compatible with those created by the Open Software
-Foundation (OSF) Distributed Computing Environment (DCE) utility 
+Foundation (OSF) Distributed Computing Environment (DCE) utility
 .BR uuidgen .
 .sp
 The UUIDs generated by this library can be reasonably expected to be
index e897bbb..6c0fd80 100644 (file)
@@ -55,6 +55,14 @@ struct uuid {
        uint8_t node[6];
 };
 
+#ifndef __GNUC_PREREQ
+#if defined(__GNUC__) && defined(__GNUC_MINOR__)
+#define __GNUC_PREREQ(maj, min) \
+       ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
+#define __GNUC_PREREQ(maj, min) 0
+#endif
+#endif
 
 /*
  * prototypes
index 7f32963..67bc9b9 100644 (file)
@@ -45,10 +45,10 @@ function compares the two supplied uuid variables
 .IR uu1 " and " uu2
 to each other.
 .SH RETURN VALUE
-Returns an integer less than, equal to, or greater than zero if 
+Returns an integer less than, equal to, or greater than zero if
 .I uu1
-is found,  respectively, to be lexigraphically less than, equal, or 
-greater than 
+is found,  respectively, to be lexicographical less than, equal, or
+greater than
 .IR uu2 .
 .SH AUTHOR
 Theodore Y. Ts'o
index 998e042..e6be968 100644 (file)
@@ -44,26 +44,26 @@ uuid_generate, uuid_generate_random, uuid_generate_time \- create a new unique U
 The
 .B uuid_generate
 function creates a new universally unique identifier (UUID).  The uuid will
-be generated based on high-quality randomness from 
-.IR /dev/urandom , 
-if available.  If it is not available, then 
-.B uuid_generate 
+be generated based on high-quality randomness from
+.IR /dev/urandom ,
+if available.  If it is not available, then
+.B uuid_generate
 will use an alternative algorithm which uses the current time, the
 local ethernet MAC address (if available), and random data generated
 using a pseudo-random generator.
 .sp
-The 
+The
 .B uuid_generate_random
 function forces the use of the all-random UUID format, even if
-a high-quality random number generator (i.e., 
+a high-quality random number generator (i.e.,
 .IR /dev/urandom )
 is not available, in which case a pseudo-random
-generator will be subsituted.  Note that the use of a pseudo-random
+generator will be substituted.  Note that the use of a pseudo-random
 generator may compromise the uniqueness of UUID's
 generated in this fashion.
 .sp
 The
-.B uuid_generate_time 
+.B uuid_generate_time
 function forces the use of the alternative algorithm which uses the
 current time and the local ethernet MAC address (if available).
 This algorithm used to be the default one used to generate UUID, but
@@ -72,10 +72,10 @@ information about when and where the UUID was generated.  This can cause
 privacy problems in some applications, so the
 .B uuid_generate
 function only uses this algorithm if a high-quality source of
-randomness is not available.  
+randomness is not available.
 .sp
 The UUID is 16 bytes (128 bits) long, which gives approximately 3.4x10^38
-unique values (there are approximately 10^80 elemntary particles in
+unique values (there are approximately 10^80 elementary particles in
 the universe according to Carl Sagan's
 .IR Cosmos ).
 The new UUID can reasonably be considered unique among all UUIDs created
index 2a4c700..2c8ef5b 100644 (file)
@@ -43,9 +43,9 @@ The
 .B uuid_time
 function extracts the time at which the supplied time-based UUID
 .I uu
-was created.  Note that the UUID creation time is only encoded within 
-certain types of UUIDs.  This function can only reasonably expect to 
-extract the creation time for UUIDs created with the 
+was created.  Note that the UUID creation time is only encoded within
+certain types of UUIDs.  This function can only reasonably expect to
+extract the creation time for UUIDs created with the
 .BR uuid_generate_time (3)
 function.  It may or may not work with UUIDs created by other mechanisms.
 .SH "RETURN VALUES"
index 97fd335..af837a2 100644 (file)
@@ -165,7 +165,7 @@ main(int argc, char **argv)
                printf("Warning: not a time-based UUID, so UUID time "
                       "decoding will likely not work!\n");
        }
-       printf("UUID time is: (%ld, %ld): %s\n", tv.tv_sec, (long)tv.tv_usec,
+       printf("UUID time is: (%ld, %ld): %s\n", (long)tv.tv_sec, (long)tv.tv_usec,
               ctime(&time_reg));
 
        return 0;
index 0e83845..e8ca9de 100644 (file)
@@ -46,18 +46,18 @@ The
 function converts the supplied UUID
 .I uu
 from the binary representation into a 36\-byte string (plus tailing '\\0')
-of the form 1b4e28ba\-2fa1\-11d2\-883f\-0016d3cca427 and stores this 
+of the form 1b4e28ba\-2fa1\-11d2\-883f\-0016d3cca427 and stores this
 value in the character string pointed to by
-.IR out .  
-The case of the hex digits returned by 
+.IR out .
+The case of the hex digits returned by
 .B uuid_unparse
 may be upper or lower case, and is
-dependent on the system-dependent local default.  
+dependent on the system-dependent local default.
 .PP
 If the case of the
 hex digits is important then the functions
 .B uuid_unparse_upper
-and 
+and
 .B uuid_unparse_lower
 may be used.
 .SH "CONFORMING TO"
diff --git a/misc/Android.bp b/misc/Android.bp
new file mode 100644 (file)
index 0000000..757381d
--- /dev/null
@@ -0,0 +1,320 @@
+// Copyright 2017 The Android Open Source Project
+
+// Library used to export files from this directory to other programs in this
+// project.
+cc_library {
+    name: "libext2_misc",
+    host_supported: true,
+    recovery_available: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    target: {
+        windows: {
+            include_dirs: [ "external/e2fsprogs/include/mingw" ],
+            enabled: true,
+            cflags: ["-Wno-unused-variable"],
+        },
+    },
+
+    srcs: [
+        "create_inode.c",
+    ],
+    cflags: ["-Wno-error=format-extra-args"],
+    shared_libs: [
+        "libext2fs",
+        "libext2_com_err",
+        "libext2_quota",
+    ],
+    system_shared_libs: ["libc", "libdl"],
+    export_include_dirs: ["."],
+}
+
+//########################################################################
+// Build mke2fs
+
+cc_binary {
+    name: "mke2fs",
+    host_supported: true,
+    recovery_available: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: [
+        "mke2fs.c",
+        "util.c",
+        "mk_hugefiles.c",
+        "default_profile.c",
+    ],
+    cflags: [
+        "-Wno-error=format",
+        "-Wno-error=type-limits",
+        "-Wno-format-extra-args",
+    ],
+    target: {
+        host: {
+            static_libs: [
+                "libext2_blkid",
+                "libext2_misc",
+                "libext2_uuid",
+                "libext2_quota",
+                "libext2_com_err",
+                "libext2_e2p",
+                "libext2fs",
+                "libsparse",
+                "libbase",
+                "libz",
+            ],
+        },
+        not_windows: {
+            required: [
+                "mke2fs.conf",
+            ],
+        },
+        windows: {
+            include_dirs: [ "external/e2fsprogs/include/mingw" ],
+            cflags: [
+                "-D_POSIX",
+                "-D__USE_MINGW_ALARM",
+                // mke2fs.c has a warning from gcc which cannot be suppressed:
+                // passing argument 3 of 'ext2fs_get_device_size' from
+                // incompatible pointer type
+                "-Wno-error"
+            ],
+            ldflags: ["-static"],
+            host_ldlibs: ["-lws2_32"],
+            enabled: true
+        },
+        android: {
+            required: [
+                "mke2fs.conf",
+            ],
+            shared_libs: [
+                "libext2fs",
+                "libext2_blkid",
+                "libext2_misc",
+                "libext2_uuid",
+                "libext2_quota",
+                "libext2_com_err",
+                "libext2_e2p",
+            ],
+            symlinks: ["mkfs.ext2", "mkfs.ext3", "mkfs.ext4"],
+        },
+    },
+    stl: "libc++_static",
+    include_dirs: ["external/e2fsprogs/e2fsck"],
+}
+
+//##########################################################################
+// Build tune2fs
+
+cc_defaults {
+    name: "tune2fs-defaults",
+    defaults: ["e2fsprogs-defaults"],
+    srcs: [
+        "tune2fs.c",
+        "util.c",
+    ],
+    cflags: ["-DNO_RECOVERY"],
+    include_dirs: ["external/e2fsprogs/e2fsck"],
+}
+
+tune2fs_libs = [
+    "libext2_blkid",
+    "libext2_com_err",
+    "libext2_quota",
+    "libext2_uuid",
+    "libext2_e2p",
+    "libext2fs",
+]
+
+cc_binary {
+    name: "tune2fs",
+    host_supported: true,
+    vendor_ramdisk_available: true,
+    defaults: ["tune2fs-defaults"],
+
+    shared_libs: tune2fs_libs,
+    system_shared_libs: ["libc", "libdl"],
+}
+
+cc_binary {
+    name: "tune2fs_static",
+    static_executable: true,
+    defaults: ["tune2fs-defaults"],
+
+    static_libs: tune2fs_libs,
+}
+
+cc_binary {
+    name: "tune2fs_ramdisk",
+    stem: "tune2fs",
+    static_executable: true,
+    ramdisk: true,
+    defaults: ["tune2fs-defaults"],
+    system_shared_libs: [],
+    static_libs: tune2fs_libs,
+}
+
+cc_library_static {
+    name: "libtune2fs",
+    defaults: ["tune2fs-defaults"],
+
+    cflags: ["-DBUILD_AS_LIB"],
+    static_libs: tune2fs_libs,
+}
+
+//########################################################################
+// Build badblocks
+
+cc_binary {
+    name: "badblocks",
+    host_supported: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: ["badblocks.c"],
+    shared_libs: [
+        "libext2fs",
+        "libext2_com_err",
+        "libext2_uuid",
+        "libext2_blkid",
+        "libext2_e2p",
+    ],
+    system_shared_libs: ["libc", "libdl"],
+}
+
+//########################################################################
+// Build chattr
+
+cc_binary {
+    name: "chattr-e2fsprogs",
+    host_supported: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: ["chattr.c"],
+    shared_libs: [
+        "libext2_com_err",
+        "libext2_e2p",
+    ],
+    system_shared_libs: ["libc", "libdl"],
+}
+
+//########################################################################
+// Build lsattr
+
+cc_defaults {
+    name: "lsattr-defaults",
+    srcs: ["lsattr.c"],
+    defaults: ["e2fsprogs-defaults"],
+}
+
+lsattr_libs = [
+    "libext2_com_err",
+    "libext2_e2p",
+]
+
+cc_binary {
+    name: "lsattr-e2fsprogs",
+    host_supported: true,
+    defaults: ["lsattr-defaults"],
+
+    shared_libs: lsattr_libs,
+    system_shared_libs: ["libc", "libdl"],
+}
+
+cc_binary {
+    name: "lsattr_static",
+    static_executable: true,
+    defaults: ["lsattr-defaults"],
+
+    static_libs: lsattr_libs,
+}
+
+//########################################################################
+// Build blkid
+
+cc_binary {
+    name: "blkid",
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: ["blkid.c"],
+    shared_libs: [
+        "libext2fs",
+        "libext2_blkid",
+        "libext2_com_err",
+        "libext2_e2p",
+    ],
+    system_shared_libs: ["libc", "libdl"],
+}
+
+//########################################################################
+// Build e4crypt
+
+cc_binary {
+    name: "e4crypt",
+    host_supported: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: ["e4crypt.c"],
+    shared_libs: [
+        "libext2fs",
+        "libext2_uuid",
+    ],
+    system_shared_libs: ["libc", "libdl"],
+
+    target: {
+        darwin: {
+            enabled: false,
+        },
+    },
+}
+
+//##########################################################################
+// Build e2image
+
+cc_binary {
+    name: "e2image",
+    host_supported: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: ["e2image.c"],
+    shared_libs: [
+        "libext2fs",
+        "libext2_blkid",
+        "libext2_com_err",
+        "libext2_quota",
+    ],
+    system_shared_libs: ["libc", "libdl"],
+}
+
+//##########################################################################
+// Build filefrag
+
+cc_binary {
+    name: "filefrag",
+    host_supported: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: ["filefrag.c"],
+    shared_libs: [
+        "libext2fs",
+    ],
+    system_shared_libs: ["libc", "libdl"],
+}
+
+//##########################################################################
+// Build e2freefrag
+
+cc_binary {
+    name: "e2freefrag",
+    host_supported: true,
+    defaults: ["e2fsprogs-defaults"],
+
+    srcs: [
+        "e2freefrag.c",
+    ],
+    header_libs: ["libext2-headers"],
+    shared_libs: [
+        "libext2fs",
+        "libext2_com_err",
+    ],
+    system_shared_libs: ["libc", "libdl"],
+}
diff --git a/misc/Android.mk b/misc/Android.mk
deleted file mode 100644 (file)
index d960737..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-#########################################################################
-# Build mke2fs
-mke2fs_src_files := \
-       mke2fs.c \
-       util.c \
-       mk_hugefiles.c \
-       default_profile.c \
-       create_inode.c
-
-mke2fs_c_includes := \
-       external/e2fsprogs/e2fsck
-
-mke2fs_cflags := -O2 -g -W -Wall
-
-mke2fs_shared_libraries := \
-       libext2fs \
-       libext2_blkid \
-       libext2_uuid \
-       libext2_quota \
-       libext2_com_err \
-       libext2_e2p
-
-mke2fs_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(mke2fs_src_files)
-LOCAL_C_INCLUDES := $(mke2fs_c_includes)
-LOCAL_CFLAGS := $(mke2fs_cflags)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(mke2fs_system_shared_libraries)
-LOCAL_SHARED_LIBRARIES := $(mke2fs_shared_libraries)
-LOCAL_MODULE := mke2fs
-LOCAL_MODULE_TAGS := optional
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(mke2fs_src_files)
-LOCAL_C_INCLUDES := $(mke2fs_c_includes)
-LOCAL_CFLAGS := $(mke2fs_cflags)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(mke2fs_shared_libraries))
-LOCAL_MODULE := mke2fs_host
-LOCAL_MODULE_STEM := mke2fs
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_EXECUTABLE)
-
-###########################################################################
-# Build tune2fs
-#
-tune2fs_src_files := \
-       tune2fs.c \
-       util.c
-
-tune2fs_c_includes := \
-       external/e2fsprogs/e2fsck
-
-tune2fs_cflags := -O2 -g -W -Wall -DNO_RECOVERY
-
-tune2fs_shared_libraries := \
-       libext2fs \
-       libext2_com_err \
-       libext2_blkid \
-       libext2_quota \
-       libext2_uuid \
-       libext2_e2p
-
-tune2fs_system_shared_libraries := libc
-
-
-tune2fs_static_libraries := \
-       libext2_com_err \
-       libext2_blkid \
-       libext2_quota \
-       libext2_uuid_static \
-       libext2_e2p \
-       libext2fs
-
-tune2fs_system_static_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(tune2fs_src_files)
-LOCAL_C_INCLUDES := $(tune2fs_c_includes)
-LOCAL_CFLAGS := $(tune2fs_cflags)
-LOCAL_SHARED_LIBRARIES := $(tune2fs_shared_libraries)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(tune2fs_system_shared_libraries)
-LOCAL_MODULE := tune2fs
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(tune2fs_src_files)
-LOCAL_C_INCLUDES := $(tune2fs_c_includes)
-LOCAL_CFLAGS := $(tune2fs_cflags)
-LOCAL_STATIC_LIBRARIES := $(tune2fs_static_libraries) $(tune2fs_system_static_libraries)
-LOCAL_FORCE_STATIC_EXECUTABLE := true
-LOCAL_MODULE := tune2fs_static
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(tune2fs_src_files)
-LOCAL_C_INCLUDES := $(tune2fs_c_includes)
-LOCAL_CFLAGS := $(tune2fs_cflags) -DBUILD_AS_LIB
-LOCAL_STATIC_LIBRARIES := $(tune2fs_static_libraries) $(tune2fs_system_static_libraries)
-LOCAL_MODULE := libtune2fs
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(tune2fs_src_files)
-LOCAL_C_INCLUDES := $(tune2fs_c_includes)
-LOCAL_CFLAGS := $(tune2fs_cflags)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(tune2fs_shared_libraries))
-LOCAL_MODULE := tune2fs_host
-LOCAL_MODULE_STEM := tune2fs
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_EXECUTABLE)
-
-#########################################################################
-# Build badblocks
-#
-include $(CLEAR_VARS)
-
-badblocks_src_files := \
-       badblocks.c
-
-badblocks_c_includes :=
-
-badblocks_cflags := -O2 -g -W -Wall
-
-badblocks_shared_libraries := \
-       libext2fs \
-       libext2_com_err \
-       libext2_uuid \
-       libext2_blkid \
-       libext2_e2p
-
-badblocks_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(badblocks_src_files)
-LOCAL_C_INCLUDES := $(badblocks_c_includes)
-LOCAL_CFLAGS := $(badblocks_cflags)
-LOCAL_SHARED_LIBRARIES := $(badblocks_shared_libraries)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(badblocks_system_shared_libraries)
-LOCAL_MODULE := badblocks
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(badblocks_src_files)
-LOCAL_C_INCLUDES := $(badblocks_c_includes)
-LOCAL_CFLAGS := $(badblocks_cflags)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(badblocks_shared_libraries))
-LOCAL_MODULE := badblocks_host
-LOCAL_MODULE_STEM := badblocks
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_EXECUTABLE)
-
-#########################################################################
-# Build chattr
-#
-include $(CLEAR_VARS)
-
-chattr_src_files := \
-       chattr.c
-
-chattr_c_includes := \
-       external/e2fsprogs/lib
-
-chattr_cflags := -O2 -g -W -Wall
-
-chattr_shared_libraries := \
-       libext2_com_err \
-       libext2_e2p
-
-chattr_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(chattr_src_files)
-LOCAL_C_INCLUDES := $(chattr_c_includes)
-LOCAL_CFLAGS := $(chattr_cflags)
-LOCAL_SHARED_LIBRARIES := $(chattr_shared_libraries)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(chattr_system_shared_libraries)
-LOCAL_MODULE := chattr
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(chattr_src_files)
-LOCAL_C_INCLUDES := $(chattr_c_includes)
-LOCAL_CFLAGS := $(chattr_cflags)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(chattr_shared_libraries))
-LOCAL_MODULE := chattr_host
-LOCAL_MODULE_STEM := chattr
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_EXECUTABLE)
-
-#########################################################################
-# Build lsattr
-#
-include $(CLEAR_VARS)
-
-lsattr_src_files := \
-       lsattr.c
-
-lsattr_c_includes := \
-       external/e2fsprogs/lib
-
-lsattr_cflags := -O2 -g -W -Wall
-
-lsattr_shared_libraries := \
-       libext2_com_err \
-       libext2_e2p
-
-lsattr_system_shared_libraries := libc
-
-lsattr_static_libraries := \
-       libext2_com_err \
-       libext2_e2p
-
-lsattr_system_static_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(lsattr_src_files)
-LOCAL_C_INCLUDES := $(lsattr_c_includes)
-LOCAL_CFLAGS := $(lsattr_cflags)
-LOCAL_SHARED_LIBRARIES := $(lsattr_shared_libraries)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(lsattr_system_shared_libraries)
-LOCAL_MODULE := lsattr
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(lsattr_src_files)
-LOCAL_C_INCLUDES := $(lsattr_c_includes)
-LOCAL_CFLAGS := $(lsattr_cflags)
-LOCAL_STATIC_LIBRARIES := $(lsattr_static_libraries) $(lsattr_system_static_libraries)
-LOCAL_FORCE_STATIC_EXECUTABLE := true
-LOCAL_MODULE := lsattr_static
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(lsattr_src_files)
-LOCAL_C_INCLUDES := $(lsattr_c_includes)
-LOCAL_CFLAGS := $(lsattr_cflags)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(lsattr_shared_libraries))
-LOCAL_MODULE := lsattr_host
-LOCAL_MODULE_STEM := lsattr
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_EXECUTABLE)
-
-#########################################################################
-# Build blkid
-#
-include $(CLEAR_VARS)
-
-blkid_src_files := \
-    blkid.c
-
-blkid_c_includes :=
-
-blkid_cflags := -O2 -g -W -Wall
-
-blkid_shared_libraries := \
-    libext2fs \
-    libext2_blkid \
-    libext2_com_err \
-    libext2_e2p
-
-blkid_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(blkid_src_files)
-LOCAL_C_INCLUDES := $(blkid_c_includes)
-LOCAL_CFLAGS := $(blkid_cflags)
-LOCAL_SHARED_LIBRARIES := $(blkid_shared_libraries)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(blkid_system_shared_libraries)
-LOCAL_MODULE := blkid
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
-
-#########################################################################
-# Build e4crypt
-e4crypt_src_files := e4crypt.c
-
-e4crypt_c_includes := \
-       external/e2fsprogs/lib
-
-e4crypt_cflags := -O2 -g -W -Wall
-
-e4crypt_shared_libraries := libext2fs libext2_uuid
-
-e4crypt_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(e4crypt_src_files)
-LOCAL_C_INCLUDES := $(e4crypt_c_includes)
-LOCAL_CFLAGS := $(e4crypt_cflags)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(e4crypt_system_shared_libraries)
-LOCAL_SHARED_LIBRARIES := $(e4crypt_shared_libraries)
-LOCAL_MODULE := e4crypt
-LOCAL_MODULE_TAGS := optional
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(e4crypt_src_files)
-LOCAL_C_INCLUDES := $(e4crypt_c_includes)
-LOCAL_CFLAGS := $(e4crypt_cflags)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(e4crypt_shared_libraries))
-LOCAL_MODULE := e4crypt_host
-LOCAL_MODULE_STEM := e4crypt
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_HOST_OS := linux
-
-include $(BUILD_HOST_EXECUTABLE)
-
-###########################################################################
-# Build e2image
-#
-e2image_src_files := \
-       e2image.c
-
-e2image_c_includes := \
-       external/e2fsprogs/lib
-
-e2image_cflags := -O2 -g -W -Wall
-
-e2image_shared_libraries := \
-       libext2fs \
-       libext2_blkid \
-       libext2_com_err \
-       libext2_quota
-
-e2image_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(e2image_src_files)
-LOCAL_C_INCLUDES := $(e2image_c_includes)
-mke2fs_c_includesLOCAL_CFLAGS := $(e2image_cflags)
-LOCAL_SHARED_LIBRARIES := $(e2image_shared_libraries)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(e2image_system_shared_libraries)
-LOCAL_MODULE := e2image
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(e2image_src_files)
-LOCAL_C_INCLUDES := $(e2image_c_includes)
-LOCAL_CFLAGS := $(e2image_cflags)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(e2image_shared_libraries))
-LOCAL_MODULE := e2image_host
-LOCAL_MODULE_STEM := e2image
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_EXECUTABLE)
-
index 467c15d..3e82127 100644 (file)
@@ -8,6 +8,7 @@ VPATH = @srcdir@
 top_builddir = ..
 my_dir = misc
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
@@ -18,13 +19,16 @@ INSTALL = @INSTALL@
 @LINUX_CMT@E4CRYPT_MAN= e4crypt.8
 
 @IMAGER_CMT@E2IMAGE_PROG= e2image
+@IMAGER_CMT@E2IMAGE_STATIC= e2image.static
 @IMAGER_CMT@E2IMAGE_MAN= e2image.8
 
 @UUIDD_CMT@UUIDD_PROG= uuidd
+@UUIDD_CMT@UUIDD_STATIC= uuidd.static
 @UUIDD_CMT@UUIDD_MAN= uuidd.8
 @UUIDD_CMT@UUIDD_PROFILED= uuidd.profiled
 
 @BLKID_CMT@BLKID_PROG= blkid
+@BLKID_CMT@BLKID_STATIC= blkid.static
 @BLKID_CMT@BLKID_MAN= blkid.8
 
 @BLKID_CMT@FINDFS_LINK= findfs
@@ -35,14 +39,15 @@ INSTALL = @INSTALL@
 SPROGS=                mke2fs badblocks tune2fs dumpe2fs $(BLKID_PROG) logsave \
                        $(E2IMAGE_PROG) @FSCK_PROG@ e2undo
 USPROGS=       mklost+found filefrag e2freefrag $(UUIDD_PROG) \
-                       $(E4DEFRAG_PROG) $(E4CRYPT_PROG) $(FUSE_PROG)
+                       $(E4DEFRAG_PROG) $(E4CRYPT_PROG)
 SMANPAGES=     tune2fs.8 mklost+found.8 mke2fs.8 dumpe2fs.8 badblocks.8 \
                        e2label.8 $(FINDFS_MAN) $(BLKID_MAN) $(E2IMAGE_MAN) \
                        logsave.8 filefrag.8 e2freefrag.8 e2undo.8 \
-                       $(UUIDD_MAN) $(E4DEFRAG_MAN) $(E4CRYPT_MAN) @FSCK_MAN@
+                       $(UUIDD_MAN) $(E4DEFRAG_MAN) $(E4CRYPT_MAN) @FSCK_MAN@ \
+                       e2mmpstatus.8
 FMANPAGES=     mke2fs.conf.5 ext4.5
 
-UPROGS=                chattr lsattr @UUID_CMT@ uuidgen
+UPROGS=                chattr lsattr $(FUSE_PROG) @UUID_CMT@ uuidgen
 UMANPAGES=     chattr.1 lsattr.1 @UUID_CMT@ uuidgen.1
 UMANPAGES+=    @FUSE_CMT@ fuse2fs.1
 
@@ -69,12 +74,13 @@ E2FREEFRAG_OBJS= e2freefrag.o
 E2FUZZ_OBJS=   e2fuzz.o
 FUSE2FS_OBJS=  fuse2fs.o journal.o recovery.o revoke.o
 
-PROFILED_TUNE2FS_OBJS= profiled/tune2fs.o profiled/util.o
+PROFILED_TUNE2FS_OBJS= profiled/tune2fs.o profiled/util.o profiled/journal.o \
+                               profiled/recovery.o profiled/revoke.o
 PROFILED_MKLPF_OBJS=   profiled/mklost+found.o
-PROFILED_MKE2FS_OBJS=  profiled/mke2fs.o profiled/util.o profiled/profile.o \
-                       profiled/prof_err.o profiled/default_profile.o \
-                       profiled/mk_hugefiles.o profiled/create_inode.o
-
+PROFILED_MKE2FS_OBJS=  profiled/mke2fs.o profiled/util.o \
+                               profiled/default_profile.o \
+                               profiled/mk_hugefiles.o \
+                               profiled/create_inode.o
 PROFILED_CHATTR_OBJS=  profiled/chattr.o
 PROFILED_LSATTR_OBJS=  profiled/lsattr.o
 PROFILED_UUIDGEN_OBJS= profiled/uuidgen.o
@@ -100,14 +106,15 @@ SRCS=     $(srcdir)/tune2fs.c $(srcdir)/mklost+found.c $(srcdir)/mke2fs.c $(srcdir)/
                $(srcdir)/filefrag.c $(srcdir)/base_device.c \
                $(srcdir)/ismounted.c $(srcdir)/e2undo.c \
                $(srcdir)/e2freefrag.c $(srcdir)/create_inode.c \
-               $(srcdir)/fuse2fs.c \
+               $(srcdir)/fuse2fs.c $(srcdir)/e2fuzz.c \
+               $(srcdir)/check_fuzzer.c \
                $(srcdir)/../debugfs/journal.c $(srcdir)/../e2fsck/revoke.c \
                $(srcdir)/../e2fsck/recovery.c
 
 LIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBSUPPORT)
 DEPLIBS= $(LIBEXT2FS) $(DEPLIBCOM_ERR) $(DEPLIBSUPPORT)
-PROFILED_LIBS= $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR) $(LIBSUPPORT)
-PROFILED_DEPLIBS= $(PROFILED_LIBEXT2FS) $(DEPPROFILED_LIBCOM_ERR) $(DEPLIBSUPPORT)
+PROFILED_LIBS= $(LIBSUPPORT) $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR)
+PROFILED_DEPLIBS= $(DEPLIBSUPPORT) $(PROFILED_LIBEXT2FS) $(DEPPROFILED_LIBCOM_ERR)
 
 STATIC_LIBS= $(LIBSUPPORT) $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR)
 STATIC_DEPLIBS= $(DEPLIBSUPPORT) $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
@@ -117,7 +124,7 @@ DEPLIBS_E2P= $(LIBE2P) $(DEPLIBCOM_ERR)
 
 COMPILE_ET=    _ET_DIR_OVERRIDE=$(srcdir)/../lib/et/et ../lib/et/compile_et
 
-# This nastyness is needed because of jfs_user.h hackery; when we finally
+# This nastiness is needed because of jfs_user.h hackery; when we finally
 # clean up this mess, we should be able to drop it
 JOURNAL_CFLAGS = -I$(srcdir)/../e2fsck $(ALL_CFLAGS) -DDEBUGFS
 DEPEND_CFLAGS = -I$(top_srcdir)/e2fsck
@@ -132,6 +139,9 @@ DEPEND_CFLAGS = -I$(top_srcdir)/e2fsck
 all:: profiled $(SPROGS) $(UPROGS) $(USPROGS) $(SMANPAGES) $(UMANPAGES) \
        $(FMANPAGES) $(LPROGS) $(E4DEFRAG_PROG) $(E4CRYPT_PROGS) e2fuzz
 
+all-static:: $(E2IMAGE_STATIC) $(UUIDD_STATIC) $(BLKID_STATIC) \
+       dumpe2fs.static mke2fs.static tune2fs.static
+
 @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) \
@@ -184,10 +194,9 @@ tune2fs.profiled: $(TUNE2FS_OBJS) $(PROFILED_DEPLIBS) \
                $(PROFILED_E2P) $(DEPPROFILED_LIBBLKID) $(DEPPROFILED_LIBUUID)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o tune2fs.profiled \
-               $(PROFILED_TUNE2FS_OBJS) $(PROFILED_LIBBLKID) \
-               $(PROFILED_LIBUUID) $(PROFILED_LIBE2P) \
-               $(LIBINTL) $(PROFILED_LIBS) $(SYSLIBS) $(PROFILED_LIBBLKID) \
-               $(LIBMAGIC)
+               $(PROFILED_TUNE2FS_OBJS) $(PROFILED_LIBS) \
+               $(PROFILED_LIBBLKID) $(PROFILED_LIBUUID) $(PROFILED_LIBE2P) \
+               $(LIBINTL) $(SYSLIBS) $(PROFILED_LIBUUID) $(LIBMAGIC)
 
 blkid: $(BLKID_OBJS) $(DEPLIBBLKID) $(LIBEXT2FS)
        $(E) "  LD $@"
@@ -216,6 +225,12 @@ e2image.profiled: $(E2IMAGE_OBJS) $(PROFILED_DEPLIBS) $(DEPLIBBLKID)
                $(PROFILED_E2IMAGE_OBJS) $(PROFILED_LIBS) $(LIBINTL) $(SYSLIBS) \
                $(LIBBLKID) $(LIBMAGIC)
 
+e2image.static: $(E2IMAGE_OBJS) $(PROFILED_DEPLIBS) $(DEPLIBBLKID)
+       $(E) "  LD $@"
+       $(Q) $(CC) $(LDFLAGS_STATIC) -g -pg -o e2image.static \
+               $(E2IMAGE_OBJS) $(STATIC_LIBS) $(LIBINTL) $(SYSLIBS) \
+               $(STATIC_LIBBLKID) $(LIBMAGIC)
+
 e2undo: $(E2UNDO_OBJS) $(DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o e2undo $(E2UNDO_OBJS) $(LIBS) \
@@ -234,7 +249,7 @@ e4defrag: $(E4DEFRAG_OBJS) $(DEPLIBS)
 e4crypt: $(E4CRYPT_OBJS) $(DEPLIBS) $(DEPSTATIC_LIBUUID)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o e4crypt $(E4CRYPT_OBJS) \
-               $(LIBUUID) $(LIBS)
+               $(LIBUUID) $(LIBS) $(SYSLIBS)
 
 e4defrag.profiled: $(E4DEFRAG_OBJS) $(PROFILED_DEPLIBS)
        $(E) "  LD $@"
@@ -252,7 +267,7 @@ base_device: base_device.c
        $(Q) $(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(srcdir)/base_device.c \
                -DDEBUG -o base_device $(SYSLIBS)
 
-check:: base_device
+fullcheck check:: base_device
        ./base_device < $(srcdir)/base_device.tst > base_device.out
        cmp $(srcdir)/base_device.tst base_device.out
 
@@ -329,6 +344,12 @@ dumpe2fs.profiled: $(DUMPE2FS_OBJS) $(PROFILED_DEPLIBS) \
                $(PROFILED_LIBE2P) $(PROFILED_LIBUUID) $(LIBINTL) $(SYSLIBS) \
                $(PROFILED_LIBBLKID) $(LIBMAGIC)
 
+dumpe2fs.static: $(DUMPE2FS_OBJS) $(DEPLIBS) $(DEPLIBS_E2P) $(DEPLIBUUID) $(DEPLIBBLKID)
+       $(E) "  LD $@"
+       $(Q) $(CC) $(LDFLAGS_STATIC) -o dumpe2fs.static $(DUMPE2FS_OBJS) \
+               $(STATIC_LIBS) $(STATIC_LIBE2P) $(STATIC_LIBUUID) \
+               $(LIBINTL) $(SYSLIBS) $(STATIC_LIBBLKID) $(LIBMAGIC)
+
 fsck: $(FSCK_OBJS) $(DEPLIBBLKID)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o fsck $(FSCK_OBJS) $(LIBBLKID) \
@@ -375,6 +396,10 @@ e2fuzz: $(E2FUZZ_OBJS) $(DEPLIBS) $(DEPLIBBLKID) $(DEPLIBUUID) \
        $(Q) $(CC) $(ALL_LDFLAGS) -o e2fuzz $(E2FUZZ_OBJS) $(LIBS) \
                $(LIBBLKID) $(LIBUUID) $(LIBEXT2FS) $(SYSLIBS)
 
+check_fuzzer: check_fuzzer.o $(DEPLIBS)
+       $(E) "  LD $@"
+       $(Q) $(CC) $(ALL_LDFLAGS) -o check_fuzzer check_fuzzer.o $(LIBS)
+
 filefrag: $(FILEFRAG_OBJS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o filefrag $(FILEFRAG_OBJS) $(SYSLIBS)
@@ -392,24 +417,28 @@ fuse2fs: $(FUSE2FS_OBJS) $(DEPLIBS) $(DEPLIBBLKID) $(DEPLIBUUID) \
                $(CLOCK_GETTIME_LIB) $(SYSLIBS)
 
 journal.o: $(srcdir)/../debugfs/journal.c
-       $(E) "  CC $@"
+       $(E) "  CC $<"
        $(Q) $(CC) -c $(JOURNAL_CFLAGS) -I$(srcdir) \
                $(srcdir)/../debugfs/journal.c -o $@
+@PROFILE_CMT@  $(Q) $(CC) $(JOURNAL_CFLAGS) -g -pg -o profiled/$*.o -c $<
 
 recovery.o: $(srcdir)/../e2fsck/recovery.c
-       $(E) "  CC $@"
+       $(E) "  CC $<"
        $(Q) $(CC) -c $(JOURNAL_CFLAGS) -I$(srcdir) \
                $(srcdir)/../e2fsck/recovery.c -o $@
+@PROFILE_CMT@  $(Q) $(CC) $(JOURNAL_CFLAGS) -g -pg -o profiled/$*.o -c $<
 
 revoke.o: $(srcdir)/../e2fsck/revoke.c
-       $(E) "  CC $@"
+       $(E) "  CC $<"
        $(Q) $(CC) -c $(JOURNAL_CFLAGS) -I$(srcdir) \
                $(srcdir)/../e2fsck/revoke.c -o $@
+@PROFILE_CMT@  $(Q) $(CC) $(JOURNAL_CFLAGS) -g -pg -o profiled/$*.o -c $<
 
 tst_ismounted: $(srcdir)/ismounted.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
        $(E) "  LD $@"
        $(CC) -o tst_ismounted $(srcdir)/ismounted.c -DDEBUG $(ALL_CFLAGS) \
                $(LIBCOM_ERR) $(SYSLIBS)
+@PROFILE_CMT@  $(Q) $(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
 
 tune2fs.8: $(DEP_SUBSTITUTE) $(srcdir)/tune2fs.8.in
        $(E) "  SUBST $@"
@@ -459,6 +488,10 @@ dumpe2fs.8: $(DEP_SUBSTITUTE) $(srcdir)/dumpe2fs.8.in
        $(E) "  SUBST $@"
        $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/dumpe2fs.8.in dumpe2fs.8
 
+e2mmpstatus.8: $(DEP_SUBSTITUTE) $(srcdir)/e2mmpstatus.8.in
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2mmpstatus.8.in e2mmpstatus.8
+
 badblocks.8: $(DEP_SUBSTITUTE) $(srcdir)/badblocks.8.in
        $(E) "  SUBST $@"
        $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/badblocks.8.in badblocks.8  
@@ -508,8 +541,8 @@ filefrag.8: $(DEP_SUBSTITUTE) $(srcdir)/filefrag.8.in
        $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/filefrag.8.in filefrag.8
 
 installdirs:
-       $(E) "  MKINSTALLDIRS $(sbindir) $(root_sbindir) $(bindir) $(man1dir) $(man8dir) $(libdir) $(root_sysconfdir)"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) \
+       $(E) "  MKDIR_P $(sbindir) $(root_sbindir) $(bindir) $(man1dir) $(man8dir) $(libdir) $(root_sysconfdir)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(sbindir) \
                $(DESTDIR)$(root_sbindir) $(DESTDIR)$(bindir) \
                $(DESTDIR)$(man1dir) $(DESTDIR)$(man8dir) \
                $(DESTDIR)$(man1dir) $(DESTDIR)$(man5dir) \
@@ -530,6 +563,8 @@ install: all $(SMANPAGES) $(UMANPAGES) installdirs
                        $(LN) $(LINK_INSTALL_FLAGS) mke2fs mkfs.$$i); \
        done
        $(Q) (cd $(DESTDIR)$(root_sbindir); \
+               $(LN) $(LINK_INSTALL_FLAGS) dumpe2fs e2mmpstatus)
+       $(Q) (cd $(DESTDIR)$(root_sbindir); \
                $(LN) $(LINK_INSTALL_FLAGS) tune2fs e2label)
        $(Q) if test -n "$(FINDFS_LINK)"; then \
                $(ES) " LINK $(root_sbindir)/findfs"; \
@@ -645,7 +680,7 @@ uninstall:
        for i in $(UMANPAGES); do \
                $(RM) -f $(DESTDIR)$(man1dir)/$$i; \
        done
-       for i in $(FINDFS_LINK) e2label ; do \
+       for i in $(FINDFS_LINK) e2label e2mmpstatus ; do \
                $(RM) -f $(DESTDIR)$(root_sbindir)/$$i; \
        done
        for i in $(FMANPAGES); do \
@@ -667,6 +702,7 @@ clean::
                uuidd e2image tune2fs.static tst_ismounted fsck.profiled \
                blkid.profiled tune2fs.profiled e2image.profiled \
                e2undo.profiled mke2fs.profiled dumpe2fs.profiled \
+               dumpe2fs.static e2image.static \
                logsave.profiled filefrag.profiled uuidgen.profiled \
                uuidd.profiled e2image.profiled e2fuzz mke2fs.conf \
                profiled/*.o \#* *.s *.o *.a *~ core gmon.out
@@ -685,9 +721,10 @@ tune2fs.o: $(srcdir)/tune2fs.c $(top_builddir)/lib/config.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/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/support/plausible.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
+ $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \
+ $(top_srcdir)/lib/ext2fs/compiler.h $(top_srcdir)/lib/support/plausible.h \
  $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h $(top_srcdir)/lib/e2p/e2p.h \
  $(srcdir)/util.h $(top_srcdir)/version.h \
@@ -702,12 +739,12 @@ mke2fs.o: $(srcdir)/mke2fs.c $(top_builddir)/lib/config.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 \
- $(srcdir)/util.h $(top_srcdir)/lib/support/nls-enable.h \
- $(top_srcdir)/lib/support/plausible.h $(top_srcdir)/lib/support/profile.h \
- $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/version.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
- $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/util.h \
+ $(top_srcdir)/lib/support/nls-enable.h $(top_srcdir)/lib/support/plausible.h \
+ $(top_srcdir)/lib/support/profile.h $(top_builddir)/lib/support/prof_err.h \
+ $(top_srcdir)/version.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/mke2fs.h \
  $(srcdir)/create_inode.h $(top_srcdir)/lib/e2p/e2p.h
 mk_hugefiles.o: $(srcdir)/mk_hugefiles.c $(top_builddir)/lib/config.h \
@@ -716,10 +753,10 @@ mk_hugefiles.o: $(srcdir)/mk_hugefiles.c $(top_builddir)/lib/config.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 $(top_srcdir)/lib/ext2fs/ext2fs.h \
- $(srcdir)/util.h $(top_srcdir)/lib/support/profile.h \
- $(top_builddir)/lib/support/prof_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(srcdir)/util.h \
+ $(top_srcdir)/lib/support/profile.h $(top_builddir)/lib/support/prof_err.h \
  $(top_srcdir)/lib/support/nls-enable.h $(srcdir)/mke2fs.h
 chattr.o: $(srcdir)/chattr.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
@@ -736,19 +773,20 @@ dumpe2fs.o: $(srcdir)/dumpe2fs.c $(top_builddir)/lib/config.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 $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
- $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
  $(top_srcdir)/lib/support/nls-enable.h $(top_srcdir)/lib/support/plausible.h \
  $(top_srcdir)/version.h
 badblocks.o: $(srcdir)/badblocks.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/et/com_err.h \
- $(top_srcdir)/lib/ext2fs/ext2_io.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/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_types.h \
+ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
  $(top_srcdir)/lib/ext2fs/ext3_extents.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/support/nls-enable.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/nls-enable.h
 fsck.o: $(srcdir)/fsck.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/version.h \
  $(top_srcdir)/lib/support/nls-enable.h $(srcdir)/fsck.h
@@ -758,8 +796,9 @@ util.o: $(srcdir)/util.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
  $(top_srcdir)/lib/ext2fs/ext3_extents.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/support/nls-enable.h $(srcdir)/util.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/nls-enable.h \
+ $(srcdir)/util.h
 uuidgen.o: $(srcdir)/uuidgen.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/support/nls-enable.h
 blkid.o: $(srcdir)/blkid.c $(top_builddir)/lib/config.h \
@@ -767,7 +806,8 @@ blkid.o: $(srcdir)/blkid.c $(top_builddir)/lib/config.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/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.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 \
@@ -775,8 +815,8 @@ filefrag.o: $(srcdir)/filefrag.c $(top_builddir)/lib/config.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
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.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
 ismounted.o: $(srcdir)/ismounted.c $(top_builddir)/lib/config.h \
@@ -787,60 +827,84 @@ e2undo.o: $(srcdir)/e2undo.c $(top_builddir)/lib/config.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/support/nls-enable.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/nls-enable.h
 e2freefrag.o: $(srcdir)/e2freefrag.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.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 \
- $(srcdir)/e2freefrag.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/e2freefrag.h $(srcdir)/fsmap.h
 create_inode.o: $(srcdir)/create_inode.c $(top_builddir)/lib/config.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 $(srcdir)/create_inode.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/nls-enable.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/ext2fs/fiemap.h \
+ $(srcdir)/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
+ $(top_srcdir)/lib/support/nls-enable.h
 fuse2fs.o: $(srcdir)/fuse2fs.c $(top_builddir)/lib/config.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
-journal.o: $(srcdir)/../debugfs/journal.c $(top_builddir)/lib/config.h \
- $(top_builddir)/lib/dirpaths.h $(top_srcdir)/e2fsck/jfs_user.h \
- $(top_srcdir)/e2fsck/e2fsck.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/version.h
+e2fuzz.o: $(srcdir)/e2fuzz.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h
+check_fuzzer.o: $(srcdir)/check_fuzzer.c $(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/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h
+journal.o: $(srcdir)/../debugfs/journal.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/../debugfs/journal.h \
+ $(top_srcdir)/e2fsck/jfs_user.h $(top_srcdir)/e2fsck/e2fsck.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/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h \
- $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(top_srcdir)/lib/ext2fs/kernel-jbd.h
 revoke.o: $(srcdir)/../e2fsck/revoke.c $(srcdir)/../e2fsck/jfs_user.h \
+ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \
  $(srcdir)/../e2fsck/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h \
- $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(top_srcdir)/lib/ext2fs/kernel-jbd.h
 recovery.o: $(srcdir)/../e2fsck/recovery.c $(srcdir)/../e2fsck/jfs_user.h \
+ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \
  $(srcdir)/../e2fsck/e2fsck.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/support/profile.h $(top_builddir)/lib/support/prof_err.h \
- $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/support/profile.h \
+ $(top_builddir)/lib/support/prof_err.h $(top_srcdir)/lib/support/quotaio.h \
+ $(top_srcdir)/lib/support/dqblk_v2.h \
  $(top_srcdir)/lib/support/quotaio_tree.h \
- $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h
+ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \
+ $(top_srcdir)/lib/ext2fs/kernel-jbd.h
index c0b9ff1..ca43593 100644 (file)
@@ -60,25 +60,25 @@ for the test, which allows the testing to start in the middle of the
 disk.  If it is not specified the first block on the disk is used as a default.
 .PP
 .B Important note:
-If the output of 
+If the output of
 .B badblocks
 is going to be fed to the
 .B e2fsck
-or 
+or
 .B mke2fs
 programs, it is important that the block size is properly specified,
-since the block numbers which are generated are very dependent on the 
-block size in use by the filesystem.   
+since the block numbers which are generated are very dependent on the
+block size in use by the filesystem.
 For this reason, it is strongly recommended that
-users 
+users
 .B not
-run 
-.B badblocks 
-directly, but rather use the 
+run
+.B badblocks
+directly, but rather use the
 .B \-c
 option of the
 .B e2fsck
-and 
+and
 .B mke2fs
 programs.
 .SH OPTIONS
@@ -93,7 +93,7 @@ is the number of blocks which are tested at a time.  The default is 64.
 This parameter, if passed and non-zero, will cause bad blocks to sleep
 between reads if there were no errors encountered in the read
 operation; the delay will be calculated as a percentage of the time it
-took for the read operation to be performed. In other words, a value of 
+took for the read operation to be performed. In other words, a value of
 100 will cause each read to be delayed by the amount the previous read
 took, and a value of 200 by twice the amount.
 .TP
@@ -109,9 +109,9 @@ potentially crash and/or damage the filesystem even if it is mounted
 read-only.  This can be overridden using the
 .B \-f
 flag, but should almost never be used --- if you think you're smarter
-than the 
+than the
 .B badblocks
-program, you almost certainly aren't.  The only time when this option 
+program, you almost certainly aren't.  The only time when this option
 might be safe to use is if the /etc/mtab file is incorrect, and the device
 really isn't mounted.
 .TP
@@ -132,8 +132,8 @@ can be used to retrieve the list of blocks currently marked bad on
 an existing filesystem, in a format suitable for use with this option.
 .TP
 .B \-n
-Use non-destructive read-write mode.  By default only a non-destructive 
-read-only test is done.  This option must not be combined with the 
+Use non-destructive read-write mode.  By default only a non-destructive
+read-only test is done.  This option must not be combined with the
 .B \-w
 option, as they are mutually exclusive.
 .TP
@@ -144,7 +144,7 @@ displays the list on its standard output.  The format of this file is suitable
 for use by the
 .
 .B \-l
-option in 
+option in
 .BR e2fsck (8)
 or
 .BR mke2fs (8).
@@ -168,7 +168,7 @@ option is requested by the user.
 .BI \-t " test_pattern"
 Specify a test pattern to be read (and written) to disk blocks.   The
 .I test_pattern
-may either be a numeric value between 0 and ULONG_MAX-1 inclusive, or the word 
+may either be a numeric value between 0 and ULONG_MAX-1 inclusive, or the word
 "random", which specifies that the block should be filled with a random
 bit pattern.
 For read/write (\fB-w\fR) and non-destructive (\fB-n\fR) modes,
@@ -178,9 +178,9 @@ option for each test pattern desired.  For
 read-only mode only a single pattern may be specified and it may not be
 "random".  Read-only testing with a pattern assumes that the
 specified pattern has previously been written to the disk - if not, large
-numbers of blocks will fail verification.  
+numbers of blocks will fail verification.
 If multiple patterns
-are specified then all blocks will be tested with one pattern 
+are specified then all blocks will be tested with one pattern
 before proceeding to the next pattern.
 .TP
 .B \-v
@@ -191,9 +191,9 @@ corruptions to stderr.
 Use write-mode test. With this option,
 .B badblocks
 scans for bad blocks by writing some patterns (0xaa, 0x55, 0xff, 0x00) on
-every block of the device, reading every block and comparing the contents.  
-This option may not be combined with the 
-.B \-n 
+every block of the device, reading every block and comparing the contents.
+This option may not be combined with the
+.B \-n
 option, as they are mutually exclusive.
 .TP
 .B \-B
@@ -212,7 +212,7 @@ option on a device containing an existing file system.
 This option erases data!  If you want to do write-mode testing on
 an existing file system, use the
 .B \-n
-option instead.  It is slower, but it will preserve your data.  
+option instead.  It is slower, but it will preserve your data.
 .PP
 The
 .B \-e
@@ -227,7 +227,7 @@ Theodore Ts'o <tytso@alum.mit.edu>.  Non-destructive read/write test
 implemented by David Beattie <dbeattie@softhome.net>.
 .SH AVAILABILITY
 .B badblocks
-is part of the e2fsprogs package and is available from 
+is part of the e2fsprogs package and is available from
 http://e2fsprogs.sourceforge.net.
 .SH SEE ALSO
 .BR e2fsck (8),
index 0c4019a..abf315c 100644 (file)
@@ -50,6 +50,9 @@ extern int optind;
 #include <setjmp.h>
 #include <time.h>
 #include <limits.h>
+#ifdef HAVE_MBSTOWCS
+#include <wchar.h>
+#endif
 
 #include <sys/time.h>
 #include <sys/ioctl.h>
@@ -94,7 +97,7 @@ static unsigned int sys_page_size = 4096;
 static void usage(void)
 {
        fprintf(stderr, _(
-"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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"),
@@ -127,7 +130,7 @@ static void *allocate_buffer(size_t size)
        void    *ret = 0;
 
 #ifdef HAVE_POSIX_MEMALIGN
-       if (posix_memalign(&ret, sys_page_size, size) < 0)
+       if (posix_memalign(&ret, sys_page_size, size) != 0)
                ret = 0;
 #else
 #ifdef HAVE_MEMALIGN
@@ -216,6 +219,9 @@ static void print_status(void)
 {
        struct timeval time_end;
        char diff_buf[32], line_buf[128];
+#ifdef HAVE_MBSTOWCS
+       wchar_t wline_buf[128];
+#endif
        int len;
 
        gettimeofday(&time_end, 0);
@@ -229,7 +235,10 @@ static void print_status(void)
                       num_write_errors,
                       num_corruption_errors);
 #ifdef HAVE_MBSTOWCS
-       len = mbstowcs(NULL, line_buf, sizeof(line_buf));
+       mbstowcs(wline_buf, line_buf, sizeof(line_buf));
+       len = wcswidth(wline_buf, sizeof(line_buf));
+       if (len < 0)
+               len = strlen(line_buf); /* Should never happen... */
 #endif
        fputs(line_buf, stderr);
        memset(line_buf, '\b', len);
index 96fffae..472f017 100644 (file)
@@ -87,7 +87,9 @@ static void safe_print(const char *cp, int len)
                        fputc('^', stdout);
                        ch ^= 0x40; /* ^@, ^A, ^B; ^? for DEL */
                }
-               fputc(ch, stdout);
+               if (ch != '"') {
+                       fputc(ch, stdout);
+               }
        }
 }
 
index 44ee337..5a4928a 100644 (file)
@@ -23,13 +23,13 @@ chattr \- change file attributes on a Linux file system
 .B chattr
 changes the file attributes on a Linux file system.
 .PP
-The format of a symbolic mode is +-=[aAcCdDeijsStTu].
+The format of a symbolic mode is +-=[aAcCdDeFijPsStTux].
 .PP
 The operator '+' causes the selected attributes to be added to the
 existing attributes of the files; '-' causes them to be removed; and '='
 causes them to be the only attributes that the files have.
 .PP
-The letters 'aAcCdDeijsStTu' select the new attributes for the files:
+The letters 'aAcCdDeFijPsStTux' select the new attributes for the files:
 append only (a),
 no atime updates (A),
 compressed (c),
@@ -37,6 +37,7 @@ no copy on write (C),
 no dump (d),
 synchronous directory updates (D),
 extent format (e),
+case-insensitive directory lookups (F),
 immutable (i),
 data journalling (j),
 project hierarchy (P),
@@ -44,17 +45,16 @@ secure deletion (s),
 synchronous updates (S),
 no tail-merging (t),
 top of directory hierarchy (T),
-and undeletable (u).
+undeletable (u),
+and direct access for files (x).
 .PP
 The following attributes are read-only, and may be listed by
 .BR lsattr (1)
 but not modified by chattr:
-compression error (E),
-huge file (h),
+encrypted (E),
 indexed directory (I),
 inline data (N),
-compression raw access (X),
-and compressed dirty file (Z).
+and verity (V).
 .PP
 Not all flags are supported or utilized by all filesystems; refer to
 filesystem-specific man pages such as
@@ -80,20 +80,25 @@ Set the file's version/generation number.
 .BI \-p " project"
 Set the file's project number.
 .SH ATTRIBUTES
-A file with the 'a' attribute set can only be open in append mode for writing.
-Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE
-capability can set or clear this attribute.
-.PP
+.TP
+.B a
+A file with the 'a' attribute set can only be opened in append mode for
+writing.  Only the superuser or a process possessing the
+CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
+.TP
+.B A
 When a file with the 'A' attribute set is accessed, its atime record is
 not modified.  This avoids a certain amount of disk I/O for laptop
 systems.
-.PP
+.TP
+.B c
 A file with the 'c' attribute set is automatically compressed on the disk
 by the kernel.  A read from this file returns uncompressed data.  A write to
 this file compresses data before storing them on the disk.  Note: please
 make sure to read the bugs and limitations section at the end of this
 document.
-.PP
+.TP
+.B C
 A file with the 'C' attribute set will not be subject to copy-on-write
 updates.  This flag is only supported on file systems which perform
 copy-on-write.  (Note: For btrfs, the 'C' flag should be
@@ -102,81 +107,94 @@ data blocks, it is undefined when the blocks assigned to the file will
 be fully stable.  If the 'C' flag is set on a directory, it will have no
 effect on the directory, but new files created in that directory will
 have the No_COW attribute set.)
-.PP
-A file with the 'd' attribute set is not candidate for backup when the
+.TP
+.B d
+A file with the 'd' attribute set is not a candidate for backup when the
 .BR dump (8)
 program is run.
-.PP
+.TP
+.B D
 When a directory with the 'D' attribute set is modified,
-the changes are written synchronously on the disk; this is equivalent to
+the changes are written synchronously to the disk; this is equivalent to
 the 'dirsync' mount option applied to a subset of the files.
-.PP
+.TP
+.B e
 The 'e' attribute indicates that the file is using extents for mapping
 the blocks on disk.  It may not be removed using
 .BR chattr (1).
-.PP
-The 'E' attribute is used by the experimental encryption patches to
-indicate that the file has been encrypted.  It may not be
-set or reset using
-.BR chattr (1),
-although it can be displayed by
-.BR lsattr (1).
-.PP
-The 'h' attribute indicates the file is storing its blocks in units of the
-filesystem blocksize instead of in units of sectors, and means that the file
-is (or at one time was) larger than 2TB.  It may not be set or reset using
+.TP
+.B E
+A file, directory, or symlink with the 'E' attribute set is encrypted by the
+filesystem.  This attribute may not be set or cleared using
 .BR chattr (1),
 although it can be displayed by
 .BR lsattr (1).
-.PP
+.TP
+.B F
+A directory with the 'F' attribute set indicates that all the path
+lookups inside that directory are made in a case-insensitive fashion.
+This attribute can only be changed in empty directories on file systems
+with the casefold feature enabled.
+.TP
+.B i
 A file with the 'i' attribute cannot be modified: it cannot be deleted or
-renamed, no link can be created to this file and no data can be written
-to the file.  Only the superuser or a process possessing the
-CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
-.PP
+renamed, no link can be created to this file, most of the file's
+metadata can not be modified, and the file can not be opened in write mode.
+Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE
+capability can set or clear this attribute.
+.TP
+.B I
 The 'I' attribute is used by the htree code to indicate that a directory
-is being indexed using hashed trees.  It may not be set or reset using
+is being indexed using hashed trees.  It may not be set or cleared using
 .BR chattr (1),
 although it can be displayed by
 .BR lsattr (1).
-.PP
-A file with the 'j' attribute has all of its data written to the ext3
-or ext4 journal before being written to the file itself, if the filesystem
-is mounted with the "data=ordered" or "data=writeback" options.  When the
-filesystem is mounted with the "data=journal" option all file data
-is already journalled and this attribute has no effect.  Only
-the superuser or a process possessing the CAP_SYS_RESOURCE
-capability can set or clear this attribute.
-.PP
+.TP
+.B j
+A file with the 'j' attribute has all of its data written to the ext3 or
+ext4 journal before being written to the file itself, if the file system
+is mounted with the "data=ordered" or "data=writeback" options and the
+file system has a journal.  When the filesystem is mounted with the
+"data=journal" option all file data is already journalled and this
+attribute has no effect.  Only the superuser or a process possessing the
+CAP_SYS_RESOURCE capability can set or clear this attribute.
+.TP
+.B N
 A file with the 'N' attribute set indicates that the file has data
-stored inline, within the inode itself. It may not be set or reset using
+stored inline, within the inode itself. It may not be set or cleared
+using
 .BR chattr (1),
 although it can be displayed by
 .BR lsattr (1).
-.PP
+.TP
+.B P
 A directory with the 'P' attribute set will enforce a hierarchical
-structure for project id's.  This means that files and directory created
-in the directory will inhert the project id of the directory, rename
+structure for project id's.  This means that files and directories created
+in the directory will inherit the project id of the directory, rename
 operations are constrained so when a file or directory is moved into
-another directory, that the project id's much match.  In addition, a
+another directory, that the project ids must match.  In addition, a
 hard link to file can only be created when the project id for the file
 and the destination directory match.
-.PP
+.TP
+.B s
 When a file with the 's' attribute set is deleted, its blocks are zeroed
 and written back to the disk.  Note: please make sure to read the bugs
 and limitations section at the end of this document.
-.PP
+.TP
+.B S
 When a file with the 'S' attribute set is modified,
-the changes are written synchronously on the disk; this is equivalent to
+the changes are written synchronously to the disk; this is equivalent to
 the 'sync' mount option applied to a subset of the files.
-.PP
+.TP
+.B t
 A file with the 't' attribute will not have a partial block fragment at
 the end of the file merged with other files (for those filesystems which
 support tail-merging).  This is necessary for applications such as LILO
 which read the filesystem directly, and which don't understand tail-merged
-files.  Note: As of this writing, the ext2 or ext3 filesystems do not
-(yet, except in very experimental patches) support tail-merging.
-.PP
+files.  Note: As of this writing, the ext2, ext3, and ext4 filesystems do
+not support tail-merging.
+.TP
+.B T
 A directory with the 'T' attribute will be deemed to be the top of
 directory hierarchies for the purposes of the Orlov block allocator.
 This is a hint to the block allocator used by ext3 and ext4 that the
@@ -186,21 +204,27 @@ idea to set the 'T' attribute on the /home directory, so that /home/john
 and /home/mary are placed into separate block groups.  For directories
 where this attribute is not set, the Orlov block allocator will try to
 group subdirectories closer together where possible.
-.PP
+.TP
+.B u
 When a file with the 'u' attribute set is deleted, its contents are
 saved.  This allows the user to ask for its undeletion.  Note: please
 make sure to read the bugs and limitations section at the end of this
 document.
-.PP
-The 'X' attribute is used by the experimental compression patches to
-indicate that the raw contents of a compressed file can be accessed
-directly.  It currently may not be set or reset using
-.BR chattr (1),
-although it can be displayed by
-.BR lsattr (1).
-.PP
-The 'Z' attribute is used by the experimental compression patches to
-indicate a compressed file is dirty.  It may not be set or reset using
+.TP
+.B x
+The 'x' attribute can be set on a directory or file.  If the attribute
+is set on an existing directory, it will be inherited by all files and
+subdirectories that are subsequently created in the directory.  If an
+existing directory has contained some files and subdirectories, modifying
+the attribute on the parent directory doesn't change the attributes on
+these files and subdirectories.
+.TP
+.B V
+A file with the 'V' attribute set has fs-verity enabled.  It cannot be
+written to, and the filesystem will automatically verify all data read
+from it against a cryptographic hash that covers the entire file's
+contents, e.g. via a Merkle tree.  This makes it possible to efficiently
+authenticate the file.  This attribute may not be set or cleared using
 .BR chattr (1),
 although it can be displayed by
 .BR lsattr (1).
@@ -213,8 +237,10 @@ maintained by Theodore Ts'o <tytso@alum.mit.edu>.
 The 'c', 's',  and 'u' attributes are not honored
 by the ext2, ext3, and ext4 filesystems as implemented in the current
 mainline Linux kernels.
+Setting 'a' and 'i' attributes will not affect the ability to write
+to already existing file descriptors.
 .PP
-The 'j' option is only useful if the filesystem is mounted as ext3 or ext4.
+The 'j' option is only useful for ext3 and ext4 file systems.
 .PP
 The 'D' option is only useful on Linux kernel 2.5.19 and later.
 .SH AVAILABILITY
index a5b401a..c0337f8 100644 (file)
@@ -86,7 +86,7 @@ static unsigned long sf;
 static void usage(void)
 {
        fprintf(stderr,
-               _("Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"),
+               _("Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuFx] [-v version] files...\n"),
                program_name);
        exit(1);
 }
@@ -112,6 +112,8 @@ static const struct flags_char flags_array[] = {
        { EXT2_NOTAIL_FL, 't' },
        { EXT2_TOPDIR_FL, 'T' },
        { FS_NOCOW_FL, 'C' },
+       { FS_DAX_FL, 'x' },
+       { EXT4_CASEFOLD_FL, 'F' },
        { 0, 0 }
 };
 
diff --git a/misc/check_fuzzer.c b/misc/check_fuzzer.c
new file mode 100644 (file)
index 0000000..cee21bf
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Play with a file system image quickly to find UBSAN problems
+ *
+ * Run a file system through some of the libext2fs functions used by
+ * some fuzzer reports.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/time.h>
+
+#include <ext2fs/ext2_fs.h>
+#include <ext2fs/ext2fs.h>
+
+int main (int argc, char *argv[])
+{
+       errcode_t       retval = 0;
+       ext2_filsys     fs;
+       int             exit_status = 1;
+
+       initialize_ext2_error_table();
+
+       if (argc != 2) {
+               fprintf(stderr, "%s: Usage <device|filesystem>\n", argv[0]);
+               exit(1);
+       }
+
+       retval = ext2fs_open(argv[1], 0, 0, 0,
+                            unix_io_manager, &fs);
+       if (retval) {
+               com_err(argv[0], retval, "while trying to open '%s'",
+                       argv[1]);
+               exit(1);
+       }
+
+       retval = ext2fs_read_inode_bitmap(fs);
+       if (retval) {
+               com_err(argv[0], retval, "while trying to read inode bitmaps");
+               goto errout;
+       }
+
+       retval = ext2fs_read_block_bitmap(fs);
+       if (retval) {
+               com_err(argv[0], retval, "while trying to read inode bitmaps");
+               goto errout;
+       }
+
+       retval = ext2fs_check_directory(fs, EXT2_ROOT_INO);
+       if (retval) {
+               com_err(argv[0], retval, "while trying to read inode bitmaps");
+               goto errout;
+       }
+       exit_status = 0;
+errout:
+       ext2fs_close(fs);
+       return exit_status;
+}
index ae22ff6..6f8487b 100644 (file)
 
 #include "config.h"
 #include <time.h>
+#include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
 #include <limits.h> /* for PATH_MAX */
-#ifdef HAVE_ATTR_XATTR_H
+#include <dirent.h> /* for scandir() and alphasort() */
+#if defined HAVE_SYS_XATTR_H
+#include <sys/xattr.h>
+#elif defined HAVE_ATTR_XATTR_H
 #include <attr/xattr.h>
 #endif
+#ifdef HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
+#endif
+#ifdef HAVE_SYS_SYSMACROS_H
+#include <sys/sysmacros.h>
+#endif
+
 #include <ext2fs/ext2fs.h>
 #include <ext2fs/ext2_types.h>
 #include <ext2fs/fiemap.h>
@@ -29,7 +39,7 @@
 #include "create_inode.h"
 #include "support/nls-enable.h"
 
-/* 64KiB is the minimium blksize to best minimize system call overhead. */
+/* 64KiB is the minimum blksize to best minimize system call overhead. */
 #define COPY_FILE_BUFLEN       65536
 
 static int ext2_file_type(unsigned int mode)
@@ -111,8 +121,10 @@ static errcode_t set_inode_extra(ext2_filsys fs, ext2_ino_t ino,
        }
 
        inode.i_uid = st->st_uid;
+       ext2fs_set_i_uid_high(inode, st->st_uid >> 16);
        inode.i_gid = st->st_gid;
-       inode.i_mode |= st->st_mode;
+       ext2fs_set_i_gid_high(inode, st->st_gid >> 16);
+       inode.i_mode = (LINUX_S_IFMT & inode.i_mode) | (~S_IFMT & st->st_mode);
        inode.i_atime = st->st_atime;
        inode.i_mtime = st->st_mtime;
        inode.i_ctime = st->st_ctime;
@@ -133,6 +145,9 @@ static errcode_t set_inode_xattr(ext2_filsys fs, ext2_ino_t ino,
        char                            *list = NULL;
        int                             i;
 
+       if (no_copy_xattrs)
+               return 0;
+
        size = llistxattr(filename, NULL, 0);
        if (size == -1) {
                retval = errno;
@@ -223,9 +238,10 @@ static errcode_t set_inode_xattr(ext2_filsys fs EXT2FS_ATTR((unused)),
 }
 #endif  /* HAVE_LLISTXATTR */
 
+#ifndef _WIN32
 /* Make a special files (block and character devices), fifo's, and sockets  */
 errcode_t do_mknod_internal(ext2_filsys fs, ext2_ino_t cwd, const char *name,
-                           struct stat *st)
+                           unsigned int st_mode, unsigned int st_rdev)
 {
        ext2_ino_t              ino;
        errcode_t               retval;
@@ -233,7 +249,7 @@ errcode_t do_mknod_internal(ext2_filsys fs, ext2_ino_t cwd, const char *name,
        unsigned long           devmajor, devminor, mode;
        int                     filetype;
 
-       switch(st->st_mode & S_IFMT) {
+       switch(st_mode & S_IFMT) {
        case S_IFCHR:
                mode = LINUX_S_IFCHR;
                filetype = EXT2_FT_CHRDEV;
@@ -246,10 +262,12 @@ errcode_t do_mknod_internal(ext2_filsys fs, ext2_ino_t cwd, const char *name,
                mode = LINUX_S_IFIFO;
                filetype = EXT2_FT_FIFO;
                break;
+#ifndef _WIN32
        case S_IFSOCK:
                mode = LINUX_S_IFSOCK;
                filetype = EXT2_FT_SOCK;
                break;
+#endif
        default:
                return EXT2_ET_INVALID_ARGUMENT;
        }
@@ -287,8 +305,8 @@ errcode_t do_mknod_internal(ext2_filsys fs, ext2_ino_t cwd, const char *name,
                fs->now ? fs->now : time(0);
 
        if (filetype != S_IFIFO) {
-               devmajor = major(st->st_rdev);
-               devminor = minor(st->st_rdev);
+               devmajor = major(st_rdev);
+               devminor = minor(st_rdev);
 
                if ((devmajor < 256) && (devminor < 256)) {
                        inode.i_block[0] = devmajor * 256 + devminor;
@@ -307,6 +325,7 @@ errcode_t do_mknod_internal(ext2_filsys fs, ext2_ino_t cwd, const char *name,
 
        return retval;
 }
+#endif
 
 /* Make a symlink name -> target */
 errcode_t do_symlink_internal(ext2_filsys fs, ext2_ino_t cwd, const char *name,
@@ -392,7 +411,7 @@ static ssize_t my_pread(int fd, void *buf, size_t count, off_t offset)
 }
 #endif /* !defined HAVE_PREAD64 && !defined HAVE_PREAD */
 
-static errcode_t copy_file_range(ext2_filsys fs, int fd, ext2_file_t e2_file,
+static errcode_t copy_file_chunk(ext2_filsys fs, int fd, ext2_file_t e2_file,
                                 off_t start, off_t end, char *buf,
                                 char *zerobuf)
 {
@@ -422,8 +441,8 @@ static errcode_t copy_file_range(ext2_filsys fs, int fd, ext2_file_t e2_file,
                                ptr += blen;
                                continue;
                        }
-                       err = ext2fs_file_lseek(e2_file, off + bpos,
-                                               EXT2_SEEK_SET, NULL);
+                       err = ext2fs_file_llseek(e2_file, off + bpos,
+                                                EXT2_SEEK_SET, NULL);
                        if (err)
                                goto fail;
                        while (blen > 0) {
@@ -464,9 +483,10 @@ static errcode_t try_lseek_copy(ext2_filsys fs, int fd, struct stat *statbuf,
                if (hole < 0)
                        return EXT2_ET_UNIMPLEMENTED;
 
-               data_blk = data & ~(fs->blocksize - 1);
-               hole_blk = (hole + (fs->blocksize - 1)) & ~(fs->blocksize - 1);
-               err = copy_file_range(fs, fd, e2_file, data_blk, hole_blk, buf,
+               data_blk = data & ~(off_t)(fs->blocksize - 1);
+               hole_blk = ((hole + (off_t)(fs->blocksize - 1)) &
+                           ~(off_t)(fs->blocksize - 1));
+               err = copy_file_chunk(fs, fd, e2_file, data_blk, hole_blk, buf,
                                      zerobuf);
                if (err)
                        return err;
@@ -517,7 +537,7 @@ static errcode_t try_fiemap_copy(ext2_filsys fs, int fd, ext2_file_t e2_file,
                        goto out;
                for (i = 0, ext = ext_buf; i < fiemap_buf->fm_mapped_extents;
                     i++, ext++) {
-                       err = copy_file_range(fs, fd, e2_file, ext->fe_logical,
+                       err = copy_file_chunk(fs, fd, e2_file, ext->fe_logical,
                                              ext->fe_logical + ext->fe_length,
                                              buf, zerobuf);
                        if (err)
@@ -570,7 +590,7 @@ static errcode_t copy_file(ext2_filsys fs, int fd, struct stat *statbuf,
                goto out;
 #endif
 
-       err = copy_file_range(fs, fd, e2_file, 0, statbuf->st_size, buf,
+       err = copy_file_chunk(fs, fd, e2_file, 0, statbuf->st_size, buf,
                              zerobuf);
 out:
        ext2fs_free_mem(&zerobuf);
@@ -642,7 +662,7 @@ errcode_t do_write_internal(ext2_filsys fs, ext2_ino_t cwd, const char *src,
                com_err(__func__, 0, "Warning: inode already set");
        ext2fs_inode_alloc_stats2(fs, newfile, +1, 0);
        memset(&inode, 0, sizeof(inode));
-       inode.i_mode = (statbuf.st_mode & ~LINUX_S_IFMT) | LINUX_S_IFREG;
+       inode.i_mode = (statbuf.st_mode & ~S_IFMT) | LINUX_S_IFREG;
        inode.i_atime = inode.i_ctime = inode.i_mtime =
                fs->now ? fs->now : time(0);
        inode.i_links_count = 1;
@@ -679,14 +699,98 @@ out:
        return retval;
 }
 
-/* Copy files from source_dir to fs */
+struct file_info {
+       char *path;
+       size_t path_len;
+       size_t path_max_len;
+};
+
+static errcode_t path_append(struct file_info *target, const char *file)
+{
+       if (strlen(file) + target->path_len + 1 > target->path_max_len) {
+               void *p;
+               target->path_max_len *= 2;
+               p = realloc(target->path, target->path_max_len);
+               if (p == NULL)
+                       return EXT2_ET_NO_MEMORY;
+               target->path = p;
+       }
+       target->path_len += sprintf(target->path + target->path_len, "/%s",
+                                   file);
+       return 0;
+}
+
+#ifdef _WIN32
+static int scandir(const char *dir_name, struct dirent ***name_list,
+                  int (*filter)(const struct dirent*),
+                  int (*compar)(const struct dirent**, const struct dirent**)) {
+       DIR *dir;
+       struct dirent *dent;
+       struct dirent **temp_list = NULL;
+       size_t temp_list_size = 0; // unit: num of dirent
+       size_t num_dent = 0;
+
+       dir = opendir(dir_name);
+       if (dir == NULL) {
+               return -1;
+       }
+
+       while ((dent = readdir(dir))) {
+               if (filter != NULL && !(*filter)(dent))
+                       continue;
+
+               // re-allocate the list
+               if (num_dent == temp_list_size) {
+                       size_t new_list_size = temp_list_size + 32;
+                       struct dirent **new_list = (struct dirent**)realloc(
+                               temp_list, new_list_size * sizeof(struct dirent*));
+                       if (new_list == NULL) {
+                               goto out;
+                       }
+                       temp_list_size = new_list_size;
+                       temp_list = new_list;
+               }
+               // add the copy of dirent to the list
+               temp_list[num_dent] = (struct dirent*)malloc((dent->d_reclen + 3) & ~3);
+               memcpy(temp_list[num_dent], dent, dent->d_reclen);
+               num_dent++;
+       }
+
+       if (compar != NULL) {
+               qsort(temp_list, num_dent, sizeof(struct dirent*),
+                     (int (*)(const void*, const void*))compar);
+       }
+
+        // release the temp list
+       *name_list = temp_list;
+       temp_list = NULL;
+
+out:
+       if (temp_list != NULL) {
+               while (num_dent > 0) {
+                       free(temp_list[--num_dent]);
+               }
+               free(temp_list);
+               num_dent = -1;
+       }
+       closedir(dir);
+       return num_dent;
+}
+
+static int alphasort(const struct dirent **a, const struct dirent **b) {
+       return strcoll((*a)->d_name, (*b)->d_name);
+}
+#endif
+
+/* Copy files from source_dir to fs in alphabetical order */
 static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
                               const char *source_dir, ext2_ino_t root,
-                              struct hdlinks_s *hdlinks)
+                              struct hdlinks_s *hdlinks,
+                              struct file_info *target,
+                              struct fs_ops_callbacks *fs_callbacks)
 {
        const char      *name;
-       DIR             *dh;
-       struct dirent   *dent;
+       struct dirent   **dent;
        struct stat     st;
        char            *ln_target = NULL;
        unsigned int    save_inode;
@@ -694,6 +798,8 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
        errcode_t       retval = 0;
        int             read_cnt;
        int             hdlink;
+       size_t          cur_dir_path_len;
+       int             i, num_dents;
 
        if (chdir(source_dir) < 0) {
                retval = errno;
@@ -703,24 +809,25 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
                return retval;
        }
 
-       if (!(dh = opendir("."))) {
+       num_dents = scandir(".", &dent, NULL, alphasort);
+
+       if (num_dents < 0) {
                retval = errno;
                com_err(__func__, retval,
-                       _("while opening directory \"%s\""), source_dir);
+                       _("while scanning directory \"%s\""), source_dir);
                return retval;
        }
 
-       while ((dent = readdir(dh))) {
-               if ((!strcmp(dent->d_name, ".")) ||
-                   (!strcmp(dent->d_name, "..")))
+       for (i = 0; i < num_dents; free(dent[i]), i++) {
+               name = dent[i]->d_name;
+               if ((!strcmp(name, ".")) || (!strcmp(name, "..")))
                        continue;
-               if (lstat(dent->d_name, &st)) {
+               if (lstat(name, &st)) {
                        retval = errno;
                        com_err(__func__, retval, _("while lstat \"%s\""),
-                               dent->d_name);
+                               name);
                        goto out;
                }
-               name = dent->d_name;
 
                /* Check for hardlinks */
                save_inode = 0;
@@ -741,12 +848,30 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
                                save_inode = 1;
                }
 
+               cur_dir_path_len = target->path_len;
+               retval = path_append(target, name);
+               if (retval) {
+                       com_err(__func__, retval,
+                               "while appending %s", name);
+                       goto out;
+               }
+
+               if (fs_callbacks && fs_callbacks->create_new_inode) {
+                       retval = fs_callbacks->create_new_inode(fs,
+                               target->path, name, parent_ino, root,
+                               st.st_mode & S_IFMT);
+                       if (retval)
+                               goto out;
+               }
+
                switch(st.st_mode & S_IFMT) {
                case S_IFCHR:
                case S_IFBLK:
                case S_IFIFO:
+#ifndef _WIN32
                case S_IFSOCK:
-                       retval = do_mknod_internal(fs, parent_ino, name, &st);
+                       retval = do_mknod_internal(fs, parent_ino, name,
+                                                  st.st_mode, st.st_rdev);
                        if (retval) {
                                com_err(__func__, retval,
                                        _("while creating special file "
@@ -789,6 +914,7 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
                                goto out;
                        }
                        break;
+#endif
                case S_IFREG:
                        retval = do_write_internal(fs, parent_ino, name, name,
                                                   root);
@@ -818,7 +944,8 @@ find_lnf:
                                        goto out;
                        }
                        /* Populate the dir recursively*/
-                       retval = __populate_fs(fs, ino, name, root, hdlinks);
+                       retval = __populate_fs(fs, ino, name, root, hdlinks,
+                                              target, fs_callbacks);
                        if (retval)
                                goto out;
                        if (chdir("..")) {
@@ -854,6 +981,14 @@ find_lnf:
                        goto out;
                }
 
+               if (fs_callbacks && fs_callbacks->end_create_new_inode) {
+                       retval = fs_callbacks->end_create_new_inode(fs,
+                               target->path, name, parent_ino, root,
+                               st.st_mode & S_IFMT);
+                       if (retval)
+                               goto out;
+               }
+
                /* Save the hardlink ino */
                if (save_inode) {
                        /*
@@ -879,16 +1014,21 @@ find_lnf:
                        hdlinks->hdl[hdlinks->count].dst_ino = ino;
                        hdlinks->count++;
                }
+               target->path_len = cur_dir_path_len;
+               target->path[target->path_len] = 0;
        }
 
 out:
-       closedir(dh);
+       for (; i < num_dents; free(dent[i]), i++);
+       free(dent);
        return retval;
 }
 
-errcode_t populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
-                     const char *source_dir, ext2_ino_t root)
+errcode_t populate_fs2(ext2_filsys fs, ext2_ino_t parent_ino,
+                      const char *source_dir, ext2_ino_t root,
+                      struct fs_ops_callbacks *fs_callbacks)
 {
+       struct file_info file_info;
        struct hdlinks_s hdlinks;
        errcode_t retval;
 
@@ -906,8 +1046,28 @@ errcode_t populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
                return retval;
        }
 
-       retval = __populate_fs(fs, parent_ino, source_dir, root, &hdlinks);
+       file_info.path_len = 0;
+       file_info.path_max_len = 255;
+       file_info.path = calloc(file_info.path_max_len, 1);
+
+       retval = set_inode_xattr(fs, root, source_dir);
+       if (retval) {
+               com_err(__func__, retval,
+                       _("while copying xattrs on root directory"));
+               goto out;
+       }
 
+       retval = __populate_fs(fs, parent_ino, source_dir, root, &hdlinks,
+                              &file_info, fs_callbacks);
+
+out:
+       free(file_info.path);
        free(hdlinks.hdl);
        return retval;
 }
+
+errcode_t populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
+                     const char *source_dir, ext2_ino_t root)
+{
+       return populate_fs2(fs, parent_ino, source_dir, root, NULL);
+}
index cf49df2..b5eeb42 100644 (file)
@@ -24,11 +24,27 @@ struct hdlinks_s
 
 #define HDLINK_CNT     (4)
 
+struct fs_ops_callbacks {
+       errcode_t (* create_new_inode)(ext2_filsys fs, const char *target_path,
+               const char *name, ext2_ino_t parent_ino, ext2_ino_t root,
+               mode_t mode);
+       errcode_t (* end_create_new_inode)(ext2_filsys fs,
+               const char *target_path, const char *name,
+               ext2_ino_t parent_ino, ext2_ino_t root, mode_t mode);
+};
+
+extern int no_copy_xattrs;     /* this should eventually be a flag
+                                  passed to populate_fs3() */
+
 /* For populating the filesystem */
 extern errcode_t populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
                             const char *source_dir, ext2_ino_t root);
+extern errcode_t populate_fs2(ext2_filsys fs, ext2_ino_t parent_ino,
+                             const char *source_dir, ext2_ino_t root,
+                             struct fs_ops_callbacks *fs_callbacks);
 extern errcode_t do_mknod_internal(ext2_filsys fs, ext2_ino_t cwd,
-                                  const char *name, struct stat *st);
+                                  const char *name, unsigned int st_mode,
+                                  unsigned int st_rdev);
 extern errcode_t do_symlink_internal(ext2_filsys fs, ext2_ino_t cwd,
                                     const char *name, char *target,
                                     ext2_ino_t root);
index 8d9a559..ce3214f 100644 (file)
@@ -35,18 +35,18 @@ print the blocks which are reserved as bad in the filesystem.
 use the block
 .I superblock
 when examining the filesystem.
-This option is not usually needed except by a filesystem wizard who 
+This option is not usually needed except by a filesystem wizard who
 is examining the remains of a very badly corrupted filesystem.
 .TP
 .B \-o blocksize=\fIblocksize
 use blocks of
 .I blocksize
 bytes when examining the filesystem.
-This option is not usually needed except by a filesystem wizard who 
+This option is not usually needed except by a filesystem wizard who
 is examining the remains of a very badly corrupted filesystem.
 .TP
 .B \-f
-force dumpe2fs to display a filesystem even though it may have some 
+force dumpe2fs to display a filesystem even though it may have some
 filesystem feature flags which dumpe2fs may not understand (and which
 can cause some of dumpe2fs's display to be suspect).
 .TP
@@ -57,38 +57,58 @@ first block in the group; the superblock location (or -1 if not present); the
 range of blocks used by the group descriptors (or -1 if not present); the block
 bitmap location; the inode bitmap location; and the range of blocks used by the
 inode table.
-.TP 
+.TP
 .B \-h
 only display the superblock information and not any of the block
 group descriptor detail information.
 .TP
 .B \-i
-display the filesystem data from an image file created by 
+display the filesystem data from an image file created by
 .BR e2image ,
-using 
+using
 .I device
 as the pathname to the image file.
 .TP
+.B \-m
+If the
+.B mmp
+feature is enabled on the filesystem, check if
+.I device
+is in use by another node, see
+.BR e2mmpstatus (8)
+for full details.  If used together with the
+.B \-i
+option, only the MMP block information is printed.
+.TP
 .B \-x
 print the detailed group information block numbers in hexadecimal format
 .TP
 .B \-V
-print the version number of 
+print the version number of
 .B dumpe2fs
 and exit.
+.SH EXIT CODE
+.B dumpe2fs
+exits with a return code of 0 if the operation completed without errors.
+It will exit with a non-zero return code if there are any errors, such
+as problems reading a valid superblock, bad checksums, or if the device
+is in use by another node and
+.B -m
+is specified.
 .SH BUGS
-You need to know the physical filesystem structure to understand the
+You may need to know the physical filesystem structure to understand the
 output.
 .SH AUTHOR
-.B dumpe2fs 
+.B dumpe2fs
 was written by Remy Card <Remy.Card@linux.org>.  It is currently being
 maintained by Theodore Ts'o <tytso@alum.mit.edu>.
 .SH AVAILABILITY
 .B dumpe2fs
-is part of the e2fsprogs package and is available from 
+is part of the e2fsprogs package and is available from
 http://e2fsprogs.sourceforge.net.
 .SH SEE ALSO
 .BR e2fsck (8),
+.BR e2mmpstatus (8),
 .BR mke2fs (8),
 .BR tune2fs (8).
 .BR ext4 (5)
index a034703..4ea1ac8 100644 (file)
@@ -53,7 +53,7 @@ static int blocks64 = 0;
 
 static void usage(void)
 {
-       fprintf(stderr, _("Usage: %s [-bfghixV] [-o superblock=<num>] "
+       fprintf(stderr, _("Usage: %s [-bfghimxV] [-o superblock=<num>] "
                 "[-o blocksize=<num>] device\n"), program_name);
        exit(1);
 }
@@ -356,26 +356,15 @@ static void list_bad_blocks(ext2_filsys fs, int dump)
        ext2fs_badblocks_list_free(bb_list);
 }
 
-static const char *journal_checksum_type_str(__u8 type)
-{
-       switch (type) {
-       case JBD2_CRC32C_CHKSUM:
-               return "crc32c";
-       default:
-               return "unknown";
-       }
-}
-
 static void print_inline_journal_information(ext2_filsys fs)
 {
        journal_superblock_t    *jsb;
        struct ext2_inode       inode;
        ext2_file_t             journal_file;
        errcode_t               retval;
-       ino_t                   ino = fs->super->s_journal_inum;
+       ext2_ino_t              ino = fs->super->s_journal_inum;
        char                    buf[1024];
-       __u32                   *mask_ptr, mask, m;
-       int                     i, j, size, printed = 0;
+       int                     flags;
 
        if (fs->flags & EXT2_FLAG_IMAGE_FILE)
                return;
@@ -399,64 +388,22 @@ static void print_inline_journal_information(ext2_filsys fs)
        }
        ext2fs_file_close(journal_file);
        jsb = (journal_superblock_t *) buf;
-       if (be32_to_cpu(jsb->s_header.h_magic) != JFS_MAGIC_NUMBER) {
+       if (be32_to_cpu(jsb->s_header.h_magic) != JBD2_MAGIC_NUMBER) {
                fprintf(stderr, "%s",
                        _("Journal superblock magic number invalid!\n"));
                exit(1);
        }
-       printf("%s", _("Journal features:        "));
-       for (i=0, mask_ptr=&jsb->s_feature_compat; i <3; i++,mask_ptr++) {
-               mask = be32_to_cpu(*mask_ptr);
-               for (j=0,m=1; j < 32; j++, m<<=1) {
-                       if (mask & m) {
-                               printf(" %s", e2p_jrnl_feature2string(i, m));
-                               printed++;
-                       }
-               }
-       }
-       if (printed == 0)
-               printf(" (none)");
-       printf("\n");
-       fputs(_("Journal size:             "), stdout);
-       if (ext2fs_has_feature_huge_file(fs->super) &&
-           (inode.i_flags & EXT4_HUGE_FILE_FL))
-               size = inode.i_blocks / (fs->blocksize / 1024);
-       else
-               size = inode.i_blocks >> 1;
-       if (size < 8192)
-               printf("%uk\n", size);
-       else
-               printf("%uM\n", size >> 10);
-       printf(_("Journal length:           %u\n"
-                "Journal sequence:         0x%08x\n"
-                "Journal start:            %u\n"),
-              (unsigned int)ntohl(jsb->s_maxlen),
-              (unsigned int)ntohl(jsb->s_sequence),
-              (unsigned int)ntohl(jsb->s_start));
-       if (jsb->s_feature_compat &
-           ext2fs_cpu_to_be32(JFS_FEATURE_COMPAT_CHECKSUM))
-               printf("%s", _("Journal checksum type:    crc32\n"));
-       if ((jsb->s_feature_incompat &
-            ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_CSUM_V3)) ||
-           (jsb->s_feature_incompat &
-            ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_CSUM_V2)))
-               printf(_("Journal checksum type:    %s\n"
-                        "Journal checksum:         0x%08x\n"),
-                      journal_checksum_type_str(jsb->s_checksum_type),
-                      ext2fs_be32_to_cpu(jsb->s_checksum));
-       if (jsb->s_errno != 0)
-               printf(_("Journal errno:            %d\n"),
-                      (int) ntohl(jsb->s_errno));
+       flags = ext2fs_has_feature_fast_commit(fs->super) ?
+                       E2P_LIST_JOURNAL_FLAG_FC : 0;
+       e2p_list_journal_super(stdout, buf, fs->blocksize, flags);
 }
 
 static void print_journal_information(ext2_filsys fs)
 {
        errcode_t       retval;
        char            buf[1024];
-       char            str[80];
-       unsigned int    i, j, printed = 0;
        journal_superblock_t    *jsb;
-       __u32                   *mask_ptr, mask, m;
+       int             flags;
 
        /* Get the journal superblock */
        if ((retval = io_channel_read_blk64(fs->io,
@@ -467,53 +414,93 @@ static void print_journal_information(ext2_filsys fs)
                exit(1);
        }
        jsb = (journal_superblock_t *) buf;
-       if ((jsb->s_header.h_magic != (unsigned) ntohl(JFS_MAGIC_NUMBER)) ||
+       if ((jsb->s_header.h_magic != (unsigned) ntohl(JBD2_MAGIC_NUMBER)) ||
            (jsb->s_header.h_blocktype !=
-            (unsigned) ntohl(JFS_SUPERBLOCK_V2))) {
+            (unsigned) ntohl(JBD2_SUPERBLOCK_V2))) {
                com_err(program_name, 0, "%s",
                        _("Couldn't find journal superblock magic numbers"));
                exit(1);
        }
+       flags = ext2fs_has_feature_fast_commit(fs->super) ?
+                       E2P_LIST_JOURNAL_FLAG_FC : 0;
+       e2p_list_journal_super(stdout, buf, fs->blocksize, flags);
+}
+
+static int check_mmp(ext2_filsys fs)
+{
+       int retval;
+
+       /* This won't actually start MMP on the filesystem, since fs is opened
+        * readonly, but it will do the proper activity checking for us. */
+       retval = ext2fs_mmp_start(fs);
+       if (retval) {
+               com_err(program_name, retval, _("while trying to open %s"),
+                       fs->device_name);
+               if (retval == EXT2_ET_MMP_FAILED ||
+                   retval == EXT2_ET_MMP_FSCK_ON ||
+                   retval == EXT2_ET_MMP_CSUM_INVALID ||
+                   retval == EXT2_ET_MMP_UNKNOWN_SEQ) {
+                       if (fs->mmp_buf) {
+                               struct mmp_struct *mmp = fs->mmp_buf;
+                               time_t mmp_time = mmp->mmp_time;
 
-       if (jsb->s_feature_compat &
-           ext2fs_cpu_to_be32(JFS_FEATURE_COMPAT_CHECKSUM))
-               printf("%s", _("Journal checksum type:    crc32\n"));
-       if ((jsb->s_feature_incompat &
-            ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_CSUM_V3)) ||
-           (jsb->s_feature_incompat &
-            ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_CSUM_V2)))
-               printf(_("Journal checksum type:    %s\n"
-                        "Journal checksum:         0x%08x\n"),
-                      journal_checksum_type_str(jsb->s_checksum_type),
-                      ext2fs_be32_to_cpu(jsb->s_checksum));
-
-       printf("%s", _("Journal features:        "));
-       for (i = 0, mask_ptr = &jsb->s_feature_compat; i < 3; i++, mask_ptr++) {
-               mask = be32_to_cpu(*mask_ptr);
-               for (j = 0, m = 1; j < 32; j++, m <<= 1) {
-                       if (mask & m) {
-                               printf(" %s", e2p_jrnl_feature2string(i, m));
-                               printed++;
+                               fprintf(stderr,
+                                       "%s: MMP update by '%.*s%.*s' at %s",
+                                       program_name,
+                                       EXT2_LEN_STR(mmp->mmp_nodename),
+                                       EXT2_LEN_STR(mmp->mmp_bdevname),
+                                       ctime(&mmp_time));
                        }
+                       retval = 1;
+               } else {
+                       retval = 2;
+               }
+       } else {
+               printf("%s: it is safe to mount '%s', MMP is clean\n",
+                      program_name, fs->device_name);
+       }
+
+       return retval;
+}
+
+static void print_mmp_block(ext2_filsys fs)
+{
+       struct mmp_struct *mmp;
+       time_t mmp_time;
+       errcode_t retval;
+
+       if (fs->mmp_buf == NULL) {
+               retval = ext2fs_get_mem(fs->blocksize, &fs->mmp_buf);
+               if (retval) {
+                       com_err(program_name, retval,
+                               _("failed to alloc MMP buffer\n"));
+                       return;
                }
        }
 
-       printf(_("\nJournal block size:       %u\n"
-                "Journal length:           %u\n"
-                "Journal first block:      %u\n"
-                "Journal sequence:         0x%08x\n"
-                "Journal start:            %u\n"
-                "Journal number of users:  %u\n"),
-              (unsigned int)ntohl(jsb->s_blocksize),  (unsigned int)ntohl(jsb->s_maxlen),
-              (unsigned int)ntohl(jsb->s_first), (unsigned int)ntohl(jsb->s_sequence),
-              (unsigned int)ntohl(jsb->s_start), (unsigned int)ntohl(jsb->s_nr_users));
-
-       for (i=0; i < ntohl(jsb->s_nr_users); i++) {
-               uuid_unparse(&jsb->s_users[i*16], str);
-               printf(i ? "                          %s\n"
-                      : _("Journal users:            %s\n"),
-                      str);
+       retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, fs->mmp_buf);
+       /* this is only dumping, not checking status, so OK to skip this */
+       if (retval == EXT2_ET_OP_NOT_SUPPORTED)
+               return;
+       if (retval) {
+               com_err(program_name, retval,
+                       _("reading MMP block %llu from '%s'\n"),
+                       fs->super->s_mmp_block, fs->device_name);
+               return;
        }
+
+       mmp = fs->mmp_buf;
+       mmp_time = mmp->mmp_time;
+       printf("MMP_block:\n");
+       printf("    mmp_magic: 0x%x\n", mmp->mmp_magic);
+       printf("    mmp_check_interval: %d\n", mmp->mmp_check_interval);
+       printf("    mmp_sequence: %#08x\n", mmp->mmp_seq);
+       printf("    mmp_update_date: %s", ctime(&mmp_time));
+       printf("    mmp_update_time: %lld\n", mmp->mmp_time);
+       printf("    mmp_node_name: %.*s\n",
+              EXT2_LEN_STR(mmp->mmp_nodename));
+       printf("    mmp_device_name: %.*s\n",
+              EXT2_LEN_STR(mmp->mmp_bdevname));
 }
 
 static void parse_extended_opts(const char *opts, blk64_t *superblock,
@@ -596,11 +583,15 @@ static void parse_extended_opts(const char *opts, blk64_t *superblock,
 int main (int argc, char ** argv)
 {
        errcode_t       retval;
+       errcode_t       retval_csum = 0;
+       const char      *error_csum = NULL;
        ext2_filsys     fs;
        int             print_badblocks = 0;
        blk64_t         use_superblock = 0;
        int             use_blocksize = 0;
        int             image_dump = 0;
+       int             mmp_check = 0;
+       int             mmp_info = 0;
        int             force = 0;
        int             flags;
        int             header_only = 0;
@@ -615,12 +606,23 @@ int main (int argc, char ** argv)
        set_com_err_gettext(gettext);
 #endif
        add_error_table(&et_ext2_error_table);
-       fprintf (stderr, "dumpe2fs %s (%s)\n", E2FSPROGS_VERSION,
-                E2FSPROGS_DATE);
-       if (argc && *argv)
-               program_name = *argv;
+       if (argc && *argv) {
+               if (strrchr(*argv, '/'))
+                       program_name = strrchr(*argv, '/') + 1;
+               else
+                       program_name = *argv;
+
+               if (strstr(program_name, "mmpstatus") != NULL) {
+                       mmp_check = 1;
+                       header_only = 1;
+               }
+       }
 
-       while ((c = getopt(argc, argv, "bfghixVo:")) != EOF) {
+       if (!mmp_check)
+               fprintf(stderr, "dumpe2fs %s (%s)\n", E2FSPROGS_VERSION,
+                       E2FSPROGS_DATE);
+
+       while ((c = getopt(argc, argv, "bfghimxVo:")) != EOF) {
                switch (c) {
                case 'b':
                        print_badblocks++;
@@ -635,7 +637,18 @@ int main (int argc, char ** argv)
                        header_only++;
                        break;
                case 'i':
-                       image_dump++;
+                       if (mmp_check)
+                               mmp_info++;
+                       else
+                               image_dump++;
+                       break;
+               case 'm':
+                       mmp_check++;
+                       header_only++;
+                       if (image_dump) {
+                               mmp_info = image_dump;
+                               image_dump = 0;
+                       }
                        break;
                case 'o':
                        parse_extended_opts(optarg, &use_superblock,
@@ -653,16 +666,18 @@ int main (int argc, char ** argv)
                        usage();
                }
        }
-       if (optind != argc - 1) {
+       if (optind != argc - 1)
                usage();
-               exit(1);
-       }
+
        device_name = argv[optind++];
-       flags = EXT2_FLAG_JOURNAL_DEV_OK | EXT2_FLAG_SOFTSUPP_FEATURES | EXT2_FLAG_64BITS;
+       flags = EXT2_FLAG_JOURNAL_DEV_OK | EXT2_FLAG_SOFTSUPP_FEATURES |
+               EXT2_FLAG_64BITS | EXT2_FLAG_THREADS;
        if (force)
                flags |= EXT2_FLAG_FORCE;
        if (image_dump)
                flags |= EXT2_FLAG_IMAGE_FILE;
+       if (header_only)
+               flags |= EXT2_FLAG_SUPER_ONLY;
 try_open_again:
        if (use_superblock && !use_blocksize) {
                for (use_blocksize = EXT2_MIN_BLOCK_SIZE;
@@ -675,64 +690,87 @@ try_open_again:
                        if (!retval)
                                break;
                }
-       } else
-               retval = ext2fs_open (device_name, flags, use_superblock,
-                                     use_blocksize, unix_io_manager, &fs);
-       if (retval && !(flags & EXT2_FLAG_IGNORE_CSUM_ERRORS)) {
-               flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
-               goto try_open_again;
+       } else {
+               retval = ext2fs_open(device_name, flags, use_superblock,
+                                    use_blocksize, unix_io_manager, &fs);
        }
-       if (!retval && (fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS))
-               printf("%s", _("\n*** Checksum errors detected in filesystem!  Run e2fsck now!\n\n"));
        flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
+       if (retval && !retval_csum) {
+               retval_csum = retval;
+               error_csum = _("while trying to open %s");
+               goto try_open_again;
+       }
        if (retval) {
-               com_err (program_name, retval, _("while trying to open %s"),
-                        device_name);
+               com_err(program_name, retval, _("while trying to open %s"),
+                       device_name);
                printf("%s", _("Couldn't find valid filesystem superblock.\n"));
                if (retval == EXT2_ET_BAD_MAGIC)
                        check_plausibility(device_name, CHECK_FS_EXIST, NULL);
-               exit (1);
+               goto out;
        }
        fs->default_bitmap_type = EXT2FS_BMAP64_RBTREE;
        if (ext2fs_has_feature_64bit(fs->super))
                blocks64 = 1;
-       if (print_badblocks) {
+       if (mmp_check) {
+               if (ext2fs_has_feature_mmp(fs->super) &&
+                   fs->super->s_mmp_block != 0) {
+                       if (mmp_info) {
+                               print_mmp_block(fs);
+                               printf("    mmp_block_number: ");
+                               print_number(fs->super->s_mmp_block);
+                               printf("\n");
+                       } else {
+                               retval = check_mmp(fs);
+                       }
+                       if (!retval && retval_csum)
+                               retval = 2;
+               } else {
+                       fprintf(stderr, _("%s: MMP feature not enabled.\n"),
+                               program_name);
+                       retval = 2;
+               }
+       } else if (print_badblocks) {
                list_bad_blocks(fs, 1);
        } else {
                if (grp_only)
                        goto just_descriptors;
-               list_super (fs->super);
+               list_super(fs->super);
                if (ext2fs_has_feature_journal_dev(fs->super)) {
                        print_journal_information(fs);
-                       ext2fs_close_free(&fs);
-                       exit(0);
+
+                       goto out_close;
                }
                if (ext2fs_has_feature_journal(fs->super) &&
                    (fs->super->s_journal_inum != 0))
                        print_inline_journal_information(fs);
+               if (ext2fs_has_feature_mmp(fs->super) &&
+                   fs->super->s_mmp_block != 0)
+                       print_mmp_block(fs);
                list_bad_blocks(fs, 0);
-               if (header_only) {
-                       ext2fs_close_free(&fs);
-                       exit (0);
-               }
+               if (header_only)
+                       goto out_close;
+
                fs->flags &= ~EXT2_FLAG_IGNORE_CSUM_ERRORS;
 try_bitmaps_again:
-               retval = ext2fs_read_bitmaps (fs);
-               if (retval && !(fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS)) {
+               retval = ext2fs_read_bitmaps(fs);
+               if (retval && !retval_csum) {
                        fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
+                       retval_csum = retval;
+                       error_csum = _("while trying to read '%s' bitmaps\n");
                        goto try_bitmaps_again;
                }
-               if (!retval && (fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS))
-                       printf("%s", _("\n*** Checksum errors detected in bitmaps!  Run e2fsck now!\n\n"));
 just_descriptors:
                list_desc(fs, grp_only);
-               if (retval) {
-                       printf(_("\n%s: %s: error reading bitmaps: %s\n"),
-                              program_name, device_name,
-                              error_message(retval));
-               }
+       }
+out_close:
+       if (retval_csum) {
+               com_err(program_name, retval_csum, error_csum, device_name);
+               printf("%s", _("*** Run e2fsck now!\n\n"));
+               if (!retval)
+                       retval = retval_csum;
        }
        ext2fs_close_free(&fs);
        remove_error_table(&et_ext2_error_table);
-       exit (0);
+out:
+       return retval;
 }
index 564be74..51faf43 100644 (file)
@@ -23,7 +23,7 @@ The
 program will scan the block bitmap information to check how many free blocks
 are present as contiguous and aligned free space. The percentage of contiguous
 free blocks of size and of alignment
-.IR chunk_kb
+.I chunk_kb
 is reported.  It also displays the minimum/maximum/average free chunk size in
 the filesystem, along with a histogram of all free chunks.  This information
 can be used to gauge the level of free space fragmentation in the filesystem.
@@ -37,7 +37,7 @@ will print how many free chunks of size
 are available in units of kilobytes (Kb).  The chunk size must be a
 power of two and be larger than filesystem block size.
 .TP
-.BI \-h
+.B \-h
 Print the usage of the program.
 .SH EXAMPLE
 # e2freefrag /dev/vgroot/lvhome
index 90acb7e..a9d16fc 100644 (file)
 extern char *optarg;
 extern int optind;
 #endif
+#if defined(HAVE_EXT2_IOCTLS) && !defined(DEBUGFS)
+# include <sys/ioctl.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <fcntl.h>
+# include <limits.h>
+#endif
 
 #include "ext2fs/ext2_fs.h"
 #include "ext2fs/ext2fs.h"
 #include "e2freefrag.h"
 
+#if defined(HAVE_EXT2_IOCTLS) && !defined(DEBUGFS)
+# ifdef HAVE_LINUX_FSMAP_H
+#  include <linux/fsmap.h>
+# endif
+# include "fsmap.h"
+#endif
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
 static void usage(const char *prog)
 {
        fprintf(stderr, "usage: %s [-c chunksize in kb] [-h] "
@@ -143,8 +161,102 @@ static void scan_block_bitmap(ext2_filsys fs, struct chunk_info *info)
                update_chunk_stats(info, last_chunk_size);
 }
 
-static errcode_t get_chunk_info(ext2_filsys fs, struct chunk_info *info,
-                               FILE *f)
+#if defined(HAVE_EXT2_IOCTLS) && !defined(DEBUGFS)
+# define FSMAP_EXTENTS 1024
+static int scan_online(ext2_filsys fs, struct chunk_info *info,
+                      blk64_t *free_blks)
+{
+       struct fsmap_head *fsmap;
+       struct fsmap *extent;
+       struct fsmap *p;
+       char mntpoint[PATH_MAX + 1];
+       errcode_t retval;
+       int mount_flags;
+       int fd;
+       int ret;
+       unsigned int i;
+
+       /* Try to open the mountpoint for a live query. */
+       retval = ext2fs_check_mount_point(fs->device_name, &mount_flags,
+                                         mntpoint, PATH_MAX);
+       if (retval) {
+               com_err(fs->device_name, retval, "while checking mount status");
+               return 0;
+       }
+       if (!(mount_flags & EXT2_MF_MOUNTED))
+               return 0;
+       fd = open(mntpoint, O_RDONLY);
+       if (fd < 0) {
+               com_err(mntpoint, errno, "while opening mount point");
+               return 0;
+       }
+
+       fsmap = malloc(fsmap_sizeof(FSMAP_EXTENTS));
+       if (!fsmap) {
+               com_err(fs->device_name, errno, "while allocating memory");
+               return 0;
+       }
+
+       memset(fsmap, 0, sizeof(*fsmap));
+       fsmap->fmh_count = FSMAP_EXTENTS;
+       fsmap->fmh_keys[1].fmr_device = UINT_MAX;
+       fsmap->fmh_keys[1].fmr_physical = ULLONG_MAX;
+       fsmap->fmh_keys[1].fmr_owner = ULLONG_MAX;
+       fsmap->fmh_keys[1].fmr_offset = ULLONG_MAX;
+       fsmap->fmh_keys[1].fmr_flags = UINT_MAX;
+
+       *free_blks = 0;
+       /* Fill the extent histogram with live data */
+       while (1) {
+               ret = ioctl(fd, FS_IOC_GETFSMAP, fsmap);
+               if (ret < 0) {
+                       com_err(fs->device_name, errno, "while calling fsmap");
+                       free(fsmap);
+                       return 0;
+               }
+
+               /* No more extents to map, exit */
+               if (!fsmap->fmh_entries)
+                       break;
+
+               for (i = 0, extent = fsmap->fmh_recs;
+                    i < fsmap->fmh_entries;
+                    i++, extent++) {
+                       if (!(extent->fmr_flags & FMR_OF_SPECIAL_OWNER) ||
+                           extent->fmr_owner != FMR_OWN_FREE)
+                               continue;
+                       update_chunk_stats(info,
+                                          extent->fmr_length / fs->blocksize);
+                       *free_blks += (extent->fmr_length / fs->blocksize);
+               }
+
+               p = &fsmap->fmh_recs[fsmap->fmh_entries - 1];
+               if (p->fmr_flags & FMR_OF_LAST)
+                       break;
+               fsmap_advance(fsmap);
+       }
+       free(fsmap);
+       return 1;
+}
+#else
+# define scan_online(fs, info, free_blks)      (0)
+#endif /* HAVE_EXT2_IOCTLS */
+
+static errcode_t scan_offline(ext2_filsys fs, struct chunk_info *info,
+                             blk64_t *free_blks)
+{
+       errcode_t retval;
+
+       *free_blks = ext2fs_free_blocks_count(fs->super);
+       retval = ext2fs_read_block_bitmap(fs);
+       if (retval)
+               return retval;
+       scan_block_bitmap(fs, info);
+       return 0;
+}
+
+static errcode_t dump_chunk_info(ext2_filsys fs, struct chunk_info *info,
+                                FILE *f, blk64_t free_blks)
 {
        unsigned long total_chunks;
        const char *unitp = "KMGTPEZY";
@@ -152,11 +264,10 @@ static errcode_t get_chunk_info(ext2_filsys fs, struct chunk_info *info,
        unsigned long start = 0, end;
        int i, retval = 0;
 
-       scan_block_bitmap(fs, info);
-
-       fprintf(f, "Total blocks: %llu\nFree blocks: %u (%0.1f%%)\n",
-               ext2fs_blocks_count(fs->super), fs->super->s_free_blocks_count,
-               (double)fs->super->s_free_blocks_count * 100 /
+       fprintf(f, "Total blocks: %llu\nFree blocks: %llu (%0.1f%%)\n",
+               ext2fs_blocks_count(fs->super),
+               free_blks,
+               (double)free_blks * 100 /
                ext2fs_blocks_count(fs->super));
 
        if (info->chunkbytes) {
@@ -200,7 +311,7 @@ static errcode_t get_chunk_info(ext2_filsys fs, struct chunk_info *info,
                                info->histogram.fc_chunks[i],
                                info->histogram.fc_blocks[i],
                                (double)info->histogram.fc_blocks[i] * 100 /
-                               fs->super->s_free_blocks_count);
+                               free_blks);
                }
                start = end;
                if (start == 1<<10) {
@@ -224,22 +335,25 @@ static void close_device(char *device_name, ext2_filsys fs)
 static void collect_info(ext2_filsys fs, struct chunk_info *chunk_info, FILE *f)
 {
        unsigned int retval = 0;
+       blk64_t free_blks = 0;
 
        fprintf(f, "Device: %s\n", fs->device_name);
        fprintf(f, "Blocksize: %u bytes\n", fs->blocksize);
 
-       retval = ext2fs_read_block_bitmap(fs);
+       init_chunk_info(fs, chunk_info);
+       if (!scan_online(fs, chunk_info, &free_blks)) {
+               init_chunk_info(fs, chunk_info);
+               retval = scan_offline(fs, chunk_info, &free_blks);
+       }
        if (retval) {
                com_err(fs->device_name, retval, "while reading block bitmap");
                close_device(fs->device_name, fs);
                exit(1);
        }
 
-       init_chunk_info(fs, chunk_info);
-
-       retval = get_chunk_info(fs, chunk_info, f);
+       retval = dump_chunk_info(fs, chunk_info, f, free_blks);
        if (retval) {
-               com_err(fs->device_name, retval, "while collecting chunk info");
+               com_err(fs->device_name, retval, "while dumping chunk info");
                 close_device(fs->device_name, fs);
                exit(1);
        }
@@ -249,7 +363,7 @@ 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 | EXT2_FLAG_64BITS;
+       int flag = EXT2_FLAG_FORCE | EXT2_FLAG_64BITS | EXT2_FLAG_THREADS;
 
        retval = ext2fs_open(device_name, flag, 0, 0, unix_io_manager, fs);
        if (retval) {
@@ -263,7 +377,8 @@ static void open_device(char *device_name, ext2_filsys *fs)
 #ifdef DEBUGFS
 #include "debugfs.h"
 
-void do_freefrag(int argc, char **argv)
+void do_freefrag(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                void *infop EXT2FS_ATTR((unused)))
 #else
 int main(int argc, char *argv[])
 #endif
index 8576d4e..0ceece9 100644 (file)
@@ -33,9 +33,10 @@ static unsigned long long user_corrupt_bytes = 0;
 static double user_corrupt_pct = 0.0;
 
 #if !defined HAVE_PWRITE64 && !defined HAVE_PWRITE
-static ssize_t my_pwrite(int fd, const void *buf, size_t count, off_t offset)
+static ssize_t my_pwrite(int fd, const void *buf, size_t count,
+                        ext2_loff_t offset)
 {
-       if (lseek(fd, offset, SEEK_SET) < 0)
+       if (ext2fs_llseek(fd, offset, SEEK_SET) < 0)
                return 0;
 
        return write(fd, buf, count);
@@ -82,7 +83,7 @@ static int find_block_helper(ext2_filsys fs EXT2FS_ATTR((unused)),
 }
 
 static errcode_t find_metadata_blocks(ext2_filsys fs, ext2fs_block_bitmap bmap,
-                                     off_t *corrupt_bytes)
+                                     ext2_loff_t *corrupt_bytes)
 {
        dgrp_t i;
        blk64_t b, c;
@@ -172,7 +173,8 @@ static uint64_t rand_num(uint64_t min, uint64_t max)
        for (i = 0; i < sizeof(x); i++)
                px[i] = random();
 
-       return min + (uint64_t)((double)(max - min) * (x / (UINT64_MAX + 1.0)));
+       return min + (uint64_t)((double)(max - min) *
+                               (x / ((double) UINT64_MAX + 1.0)));
 }
 
 static int process_fs(const char *fsname)
@@ -181,9 +183,8 @@ static int process_fs(const char *fsname)
        int flags, fd;
        ext2_filsys fs = NULL;
        ext2fs_block_bitmap corrupt_map;
-       off_t hsize, count, off, offset, corrupt_bytes;
+       ext2_loff_t hsize, count, off, offset, corrupt_bytes, i;
        unsigned char c;
-       off_t i;
 
        /* If mounted rw, force dryrun mode */
        ret = ext2fs_check_if_mounted(fsname, &flags);
@@ -201,8 +202,8 @@ static int process_fs(const char *fsname)
        }
 
        /* Ensure the fs is clean and does not have errors */
-       ret = ext2fs_open(fsname, EXT2_FLAG_64BITS, 0, 0, unix_io_manager,
-                         &fs);
+       ret = ext2fs_open(fsname, EXT2_FLAG_64BITS | EXT2_FLAG_THREADS,
+                         0, 0, unix_io_manager, &fs);
        if (ret) {
                fprintf(stderr, "%s: failed to open filesystem.\n",
                        fsname);
@@ -277,8 +278,8 @@ static int process_fs(const char *fsname)
                        c |= 0x80;
                if (verbose)
                        printf("Corrupting byte %lld in block %lld to 0x%x\n",
-                              (long long) off % fs->blocksize,
-                              (long long) off / fs->blocksize, c);
+                              off % fs->blocksize,
+                              off / fs->blocksize, c);
                if (dryrun)
                        continue;
 #ifdef HAVE_PWRITE64
index f28a76e..ef12486 100644 (file)
@@ -8,10 +8,18 @@ e2image \- Save critical ext2/ext3/ext4 filesystem metadata to a file
 .SH SYNOPSIS
 .B e2image
 [
-.B \-r|Q
+.B \-r|\-Q
 ]
 [
-.B \-fr
+.B \-f
+]
+[
+.B \-b
+.I superblock
+]
+[
+.B \-B
+.I blocksize
 ]
 .I device
 .I image-file
@@ -167,6 +175,22 @@ the
 option will prevent analysis of problems related to hash-tree indexed
 directories.
 .PP
+Option
+.B \-b
+.I superblock
+can be used to get image from partition with broken primary superblock.
+The partition is copied as-is including broken primary superblock.
+.PP
+Option
+.B \-B
+.I blocksize
+can be used to set superblock block size. Normally, e2fsck will search
+for the superblock at various different block sizes in an attempt to find
+the appropriate blocksize. This search can be fooled in some cases.  This
+option forces e2fsck to only try locating the superblock at a particular
+blocksize. If the superblock is not found, e2fsck will terminate with a
+fatal error.
+.PP
 Note that this will work even if you substitute "/dev/hda1" for another raw
 disk image, or QCOW2 image previously created by
 .BR e2image .
@@ -217,6 +241,14 @@ 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
+Options
+.B \-b
+.I superblock
+and
+.B \-B
+.I blocksize
+can be used same way as for raw images.
+.PP
 .SH INCLUDING DATA
 Normally
 .B e2image
index e0c3188..e5e4756 100644 (file)
@@ -43,6 +43,7 @@ extern int optind;
 
 #include "ext2fs/ext2_fs.h"
 #include "ext2fs/ext2fs.h"
+#include "ext2fs/ext2fsP.h"
 #include "et/com_err.h"
 #include "uuid/uuid.h"
 #include "e2p/e2p.h"
@@ -53,7 +54,7 @@ extern int optind;
 #include "support/plausible.h"
 #include "../version.h"
 
-#define QCOW_OFLAG_COPIED     (1LL << 63)
+#define QCOW_OFLAG_COPIED     (1ULL << 63)
 #define NO_BLK ((blk64_t) -1)
 
 /* Image types */
@@ -103,10 +104,11 @@ static int get_bits_from_size(size_t size)
 
 static void usage(void)
 {
-       fprintf(stderr, _("Usage: %s [ -r|Q ] [ -fr ] device image-file\n"),
+       fprintf(stderr, _("Usage: %s [ -r|-Q ] [ -f ] [ -b superblock ] [ -B blocksize ] "
+                         "device image-file\n"),
                program_name);
        fprintf(stderr, _("       %s -I device image-file\n"), program_name);
-       fprintf(stderr, _("       %s -ra  [  -cfnp  ] [ -o src_offset ] "
+       fprintf(stderr, _("       %s -ra [ -cfnp ] [ -o src_offset ] "
                          "[ -O dest_offset ] src_fs [ dest_fs ]\n"),
                program_name);
        exit (1);
@@ -239,7 +241,7 @@ static void write_image_file(ext2_filsys fs, int fd)
        write_header(fd, NULL, sizeof(struct ext2_image_hdr), fs->blocksize);
        memset(&hdr, 0, sizeof(struct ext2_image_hdr));
 
-       hdr.offset_super = seek_relative(fd, 0);
+       hdr.offset_super = ext2fs_cpu_to_le32(seek_relative(fd, 0));
        retval = ext2fs_image_super_write(fs, fd, 0);
        if (retval) {
                com_err(program_name, retval, "%s",
@@ -247,7 +249,7 @@ static void write_image_file(ext2_filsys fs, int fd)
                exit(1);
        }
 
-       hdr.offset_inode = seek_relative(fd, 0);
+       hdr.offset_inode = ext2fs_cpu_to_le32(seek_relative(fd, 0));
        retval = ext2fs_image_inode_write(fs, fd,
                                  (fd != 1) ? IMAGER_FLAG_SPARSEWRITE : 0);
        if (retval) {
@@ -256,7 +258,7 @@ static void write_image_file(ext2_filsys fs, int fd)
                exit(1);
        }
 
-       hdr.offset_blockmap = seek_relative(fd, 0);
+       hdr.offset_blockmap = ext2fs_cpu_to_le32(seek_relative(fd, 0));
        retval = ext2fs_image_bitmap_write(fs, fd, 0);
        if (retval) {
                com_err(program_name, retval, "%s",
@@ -264,7 +266,7 @@ static void write_image_file(ext2_filsys fs, int fd)
                exit(1);
        }
 
-       hdr.offset_inodemap = seek_relative(fd, 0);
+       hdr.offset_inodemap = ext2fs_cpu_to_le32(seek_relative(fd, 0));
        retval = ext2fs_image_bitmap_write(fs, fd, IMAGER_FLAG_INODEMAP);
        if (retval) {
                com_err(program_name, retval, "%s",
@@ -272,23 +274,23 @@ static void write_image_file(ext2_filsys fs, int fd)
                exit(1);
        }
 
-       hdr.magic_number = EXT2_ET_MAGIC_E2IMAGE;
+       hdr.magic_number = ext2fs_cpu_to_le32(EXT2_ET_MAGIC_E2IMAGE);
        strcpy(hdr.magic_descriptor, "Ext2 Image 1.0");
        gethostname(hdr.fs_hostname, sizeof(hdr.fs_hostname));
        strncpy(hdr.fs_device_name, device_name, sizeof(hdr.fs_device_name)-1);
        hdr.fs_device_name[sizeof(hdr.fs_device_name) - 1] = 0;
-       hdr.fs_blocksize = fs->blocksize;
+       hdr.fs_blocksize = ext2fs_cpu_to_le32(fs->blocksize);
 
        if (stat(device_name, &st) == 0)
-               hdr.fs_device = st.st_rdev;
+               hdr.fs_device = ext2fs_cpu_to_le32(st.st_rdev);
 
        if (fstat(fd, &st) == 0) {
-               hdr.image_device = st.st_dev;
-               hdr.image_inode = st.st_ino;
+               hdr.image_device = ext2fs_cpu_to_le32(st.st_dev);
+               hdr.image_inode = ext2fs_cpu_to_le32(st.st_ino);
        }
        memcpy(hdr.fs_uuid, fs->super->s_uuid, sizeof(hdr.fs_uuid));
 
-       hdr.image_time = time(0);
+       hdr.image_time = ext2fs_cpu_to_le32(time(0));
        write_header(fd, &hdr, sizeof(struct ext2_image_hdr), fs->blocksize);
 }
 
@@ -310,7 +312,7 @@ struct process_block_struct {
  * structure, so there's no point in letting the ext2fs library read
  * the inode again.
  */
-static ino_t stashed_ino = 0;
+static ext2_ino_t stashed_ino = 0;
 static struct ext2_inode *stashed_inode;
 
 static errcode_t meta_get_blocks(ext2_filsys fs EXT2FS_ATTR((unused)),
@@ -415,6 +417,14 @@ static void mark_table_blocks(ext2_filsys fs)
        }
        meta_blocks_count += fs->desc_blocks;
 
+       /*
+        *  Mark MMP block
+        */
+       if (fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) {
+               ext2fs_mark_block_bitmap2(meta_block_map, fs->super->s_mmp_block);
+               meta_blocks_count++;
+       }
+
        for (i = 0; i < fs->group_desc_count; i++) {
                /*
                 * Mark the blocks used for the inode table
@@ -551,7 +561,7 @@ static void sigint_handler(int unused EXT2FS_ATTR((unused)))
 
 #define calc_percent(a, b) ((int) ((100.0 * (((float) (a)) / \
                                             ((float) (b)))) + 0.5))
-#define calc_rate(t, b, d) (((float)(t) / ((1024 * 1024) / (b))) / (d))
+#define calc_rate(t, b, d) (((float)(t) / ((float)(1024 * 1024) / (b))) / (d))
 
 static int print_progress(blk64_t num, blk64_t total)
 {
@@ -873,8 +883,8 @@ static int init_refcount(struct ext2_qcow2_image *img, blk64_t table_offset)
        return ret;
 }
 
-static int initialize_qcow2_image(int fd, ext2_filsys fs,
-                           struct ext2_qcow2_image *image)
+static errcode_t initialize_qcow2_image(int fd, ext2_filsys fs,
+                                       struct ext2_qcow2_image *image)
 {
        struct ext2_qcow2_hdr *header;
        blk64_t total_size, offset;
@@ -882,6 +892,9 @@ static int initialize_qcow2_image(int fd, ext2_filsys fs,
        int cluster_bits = get_bits_from_size(fs->blocksize);
        struct ext2_super_block *sb = fs->super;
 
+       if (fs->blocksize < 1024)
+               return EINVAL;  /* Can never happen, but just in case... */
+
        /* Allocate header */
        ret = ext2fs_get_memzero(sizeof(struct ext2_qcow2_hdr), &header);
        if (ret)
@@ -1108,7 +1121,7 @@ static int update_refcount(int fd, struct ext2_qcow2_image *img,
        /*
         * We are relying on the fact that we are creating the qcow2
         * image sequentially, hence we will always allocate refcount
-        * block items sequentialy.
+        * block items sequentially.
         */
        ref->refcount_block[ref->refcount_block_index] = ext2fs_cpu_to_be16(1);
        ref->refcount_block_index++;
@@ -1255,7 +1268,8 @@ static void output_qcow2_meta_data_blocks(ext2_filsys fs, int fd)
        free_qcow2_image(img);
 }
 
-static void write_raw_image_file(ext2_filsys fs, int fd, int type, int flags)
+static void write_raw_image_file(ext2_filsys fs, int fd, int type, int flags,
+                                blk64_t superblock)
 {
        struct process_block_struct     pb;
        struct ext2_inode               inode;
@@ -1283,6 +1297,22 @@ static void write_raw_image_file(ext2_filsys fs, int fd, int type, int flags)
                }
        }
 
+       if (superblock) {
+               int j;
+
+               ext2fs_mark_block_bitmap2(meta_block_map, superblock);
+               meta_blocks_count++;
+
+               /*
+                * Mark the backup superblock descriptors
+                */
+               for (j = 0; j < fs->desc_blocks; j++) {
+                       ext2fs_mark_block_bitmap2(meta_block_map,
+                       ext2fs_descriptor_block_loc2(fs, superblock, j));
+               }
+               meta_blocks_count += fs->desc_blocks;
+       }
+
        mark_table_blocks(fs);
        if (show_progress)
                fprintf(stderr, "%s", _("Scanning inodes...\n"));
@@ -1422,7 +1452,7 @@ static void install_image(char *device, char *image_fn, int type)
 
        ext2fs_rewrite_to_io(fs, io);
 
-       seek_set(fd, fs->image_header->offset_inode);
+       seek_set(fd, ext2fs_le32_to_cpu(fs->image_header->offset_inode));
 
        retval = ext2fs_image_inode_read(fs, fd, 0);
        if (retval) {
@@ -1452,7 +1482,8 @@ int main (int argc, char ** argv)
        ext2_filsys fs;
        char *image_fn, offset_opt[64];
        struct ext2_qcow2_hdr *header = NULL;
-       int open_flag = EXT2_FLAG_64BITS | EXT2_FLAG_IGNORE_CSUM_ERRORS;
+       int open_flag = EXT2_FLAG_64BITS | EXT2_FLAG_THREADS |
+               EXT2_FLAG_IGNORE_CSUM_ERRORS;
        int img_type = 0;
        int flags = 0;
        int mount_flags = 0;
@@ -1462,6 +1493,8 @@ int main (int argc, char ** argv)
        int ignore_rw_mount = 0;
        int check = 0;
        struct stat st;
+       blk64_t superblock = 0;
+       int blocksize = 0;
 
 #ifdef ENABLE_NLS
        setlocale(LC_MESSAGES, "");
@@ -1475,8 +1508,14 @@ int main (int argc, char ** argv)
        if (argc && *argv)
                program_name = *argv;
        add_error_table(&et_ext2_error_table);
-       while ((c = getopt(argc, argv, "nrsIQafo:O:pc")) != EOF)
+       while ((c = getopt(argc, argv, "b:B:nrsIQafo:O:pc")) != EOF)
                switch (c) {
+               case 'b':
+                       superblock = strtoull(optarg, NULL, 0);
+                       break;
+               case 'B':
+                       blocksize = strtoul(optarg, NULL, 0);
+                       break;
                case 'I':
                        flags |= E2IMAGE_INSTALL_FLAG;
                        break;
@@ -1528,6 +1567,11 @@ int main (int argc, char ** argv)
                                                 "with raw or QCOW2 images."));
                exit(1);
        }
+       if (superblock && !img_type) {
+               com_err(program_name, 0, "%s", _("-b option can only be used "
+                                                "with raw or QCOW2 images."));
+               exit(1);
+       }
        if ((source_offset || dest_offset) && img_type != E2IMAGE_RAW) {
                com_err(program_name, 0, "%s",
                        _("Offsets are only allowed with raw images."));
@@ -1578,8 +1622,8 @@ int main (int argc, char ** argv)
                }
        }
        sprintf(offset_opt, "offset=%llu", source_offset);
-       retval = ext2fs_open2(device_name, offset_opt, open_flag, 0, 0,
-                             unix_io_manager, &fs);
+       retval = ext2fs_open2(device_name, offset_opt, open_flag,
+                             superblock, blocksize, unix_io_manager, &fs);
         if (retval) {
                com_err (program_name, retval, _("while trying to open %s"),
                         device_name);
@@ -1620,7 +1664,7 @@ skip_device:
                                _("Can not stat output\n"));
                        exit(1);
                }
-               if (S_ISBLK(st.st_mode))
+               if (ext2fsP_is_disk_device(st.st_mode))
                        output_is_blk = 1;
        }
        if (flags & E2IMAGE_IS_QCOW2_FLAG) {
@@ -1629,13 +1673,18 @@ skip_device:
                        if (ret == -QCOW_COMPRESSED)
                                fprintf(stderr, _("Image (%s) is compressed\n"),
                                        image_fn);
-                       if (ret == -QCOW_ENCRYPTED)
+                       else if (ret == -QCOW_ENCRYPTED)
                                fprintf(stderr, _("Image (%s) is encrypted\n"),
                                        image_fn);
-                       com_err(program_name, ret,
-                               _("while trying to convert qcow2 image"
-                                 " (%s) into raw image (%s)"),
-                               device_name, image_fn);
+                       else if (ret == -QCOW_CORRUPTED)
+                               fprintf(stderr, _("Image (%s) is corrupted\n"),
+                                       image_fn);
+                       else
+                               com_err(program_name, ret,
+                                       _("while trying to convert qcow2 image"
+                                         " (%s) into raw image (%s)"),
+                                       image_fn, device_name);
+                       ret = 1;
                }
                goto out;
        }
@@ -1664,7 +1713,7 @@ skip_device:
                exit(1);
        }
        if (img_type)
-               write_raw_image_file(fs, fd, img_type, flags);
+               write_raw_image_file(fs, fd, img_type, flags, superblock);
        else
                write_image_file(fs, fd);
 
index 5d3a113..2f45707 100644 (file)
@@ -15,37 +15,37 @@ e2label \- Change the label on an ext2/ext3/ext4 filesystem
 .B e2label
 will display or change the volume label on the ext2, ext3, or ext4
 filesystem located on
-.I device.  
+.I device.
 .PP
-If the optional argument 
+If the optional argument
 .I volume-label
-is not present, 
+is not present,
 .B e2label
 will simply display the current volume label.
 .PP
 If the optional argument
 .I volume-label
-is present, then 
+is present, then
 .B e2label
 will set the volume label to be
 .IR volume-label .
 Ext2 volume labels can be at most 16 characters long; if
 .I volume-label
-is longer than 16 characters, 
+is longer than 16 characters,
 .B e2label
-will truncate it and print a warning message.  
+will truncate it and print a warning message.
 .PP
 It is also possible to set the volume label using the
 .B \-L
-option of 
+option of
 .BR tune2fs (8).
 .PP
 .SH AUTHOR
-.B e2label 
+.B e2label
 was written by Theodore Ts'o (tytso@mit.edu).
 .SH AVAILABILITY
 .B e2label
-is part of the e2fsprogs package and is available from 
+is part of the e2fsprogs package and is available from
 http://e2fsprogs.sourceforge.net.
 .SH SEE ALSO
 .BR mke2fs (8),
index 526a62c..910ccc7 100644 (file)
@@ -81,7 +81,7 @@ static void print_label (char *dev)
        char label[VOLNAMSZ+1];
 
        open_e2fs (dev, O_RDONLY);
-       strncpy(label, sb.s_volume_name, VOLNAMSZ);
+       snprintf(label, sizeof(label), "%.*s", EXT2_LEN_STR(sb.s_volume_name));
        label[VOLNAMSZ] = 0;
        printf("%s\n", label);
 }
diff --git a/misc/e2mmpstatus.8.in b/misc/e2mmpstatus.8.in
new file mode 100644 (file)
index 0000000..5f0e9db
--- /dev/null
@@ -0,0 +1,59 @@
+.\" -*- nroff -*-
+.\" This file may be copied under the terms of the GNU Public License.
+.\"
+.TH E2MMPSTATUS 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
+.SH NAME
+e2mmpstatus \- Check MMP status of an ext4 filesystem
+.SH SYNOPSIS
+.BR e2mmpstatus " [" \-i ]
+.RI < filesystem >
+.SH OPTIONS
+.TP
+.B \-i
+prints out the MMP information rather than check it.
+.SH DESCRIPTION
+.B e2mmpstatus
+is used to check Multiple-Mount Protection (MMP) status of an ext4
+filesystem with the
+.B mmp
+feature enabled.  The specified
+.I filesystem
+can be a device name (e.g.
+.IR /dev/hdc1 ", " /dev/sdb2 ),
+or an ext4 filesystem label or UUID, for example
+.B UUID=8868abf6-88c5-4a83-98b8-bfc24057f7bd
+or
+.BR LABEL=root .
+By default, the
+.B e2mmpstatus
+program checks whether it is safe to mount the filesystem without taking
+the risk of mounting it more than once.
+.PP
+MMP (multiple-mount protection) is a feature that adds protection against
+the filesystem being modified simultaneously by more than one node.
+It is NOT safe to mount a filesystem when one of the following conditions
+is true:
+.br
+       1. e2fsck is running on the filesystem.
+.br
+       2. the filesystem is in use by another node.
+.br
+       3. The MMP block is corrupted or cannot be read for some reason.
+.br
+The
+.B e2mmpstatus
+program might wait for some time to see whether the MMP block is being
+updated by any node during this period.  The time taken depends on how
+frequently the MMP block is being written by the other node.
+.SH EXIT CODE
+The exit code returned by
+.B e2mmpstatus
+is 0 when it is safe to mount the filesystem, 1 when the MMP block shows
+the filesystem is in use on another node and it is NOT safe to mount
+the filesystem, and 2 if some other failure occurred that prevents the
+check from properly detecting the current MMP status.
+.SH SEE ALSO
+.BR dumpe2fs (8),
+.BR e2fsck (8),
+.BR fstab (5),
+.BR fsck (8),
index da8b918..d8265b1 100644 (file)
@@ -17,8 +17,16 @@ e2undo \- Replay an undo log for an ext2/ext3/ext4 filesystem
 .B \-n
 ]
 [
+.B \-o
+.I offset
+]
+[
 .B \-v
 ]
+[
+.B \-z
+.I undo_file
+]
 .I undo_log device
 .SH DESCRIPTION
 .B e2undo
@@ -53,6 +61,16 @@ Specify the filesystem's
 .TP
 .B \-v
 Report which block we're currently replaying.
+.TP
+.BI \-z " undo_file"
+Before overwriting a file system block, write the old contents of the block to
+an undo file.  This undo file can be used with e2undo(8) to restore the old
+contents of the file system should something go wrong.  If the empty string is
+passed as the undo_file argument, the undo file will be written to a file named
+e2undo-\fIdevice\fR.e2undo in the directory specified via the
+\fIE2FSPROGS_UNDO_DIR\fR environment variable.
+
+WARNING: The undo file cannot be used to recover from a power or system crash.
 .SH AUTHOR
 .B e2undo
 was written by Aneesh Kumar K.V. (aneesh.kumar@linux.vnet.ibm.com)
index 6fb6e44..71991e0 100644 (file)
@@ -81,8 +81,14 @@ struct undo_key_block {
        __le32 magic;           /* KEYBLOCK_MAGIC number */
        __le32 crc;             /* block checksum */
        __le64 reserved;        /* zero */
-
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
        struct undo_key keys[0];        /* keys, which come immediately after */
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic pop
+#endif
 };
 
 struct undo_key_info {
@@ -115,7 +121,7 @@ static char *undo_file;
 static void usage(void)
 {
        fprintf(stderr,
-               _("Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"), prg_name);
+               _("Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"), prg_name);
        exit(1);
 }
 
index 6c5e470..fe9372c 100644 (file)
@@ -2,26 +2,55 @@
 .SH NAME
 e4crypt \- ext4 filesystem encryption utility
 .SH SYNOPSIS
-.B e4crypt add_key -S \fR[\fB -k \fIkeyring\fR ] [\fB-v\fR] [\fB-q\fR] [ \fI path\fR ... ]
+.B e4crypt add_key -S \fR[\fB -k \fIkeyring\fR ] [\fB-v\fR] [\fB-q\fR] \fR[\fB -p \fIpad\fR ] [ \fIpath\fR ... ]
 .br
 .B e4crypt new_session
 .br
 .B e4crypt get_policy \fIpath\fR ...
 .br
-.B e4crypt set_policy \fIpolicy path\fR ...
+.B e4crypt set_policy \fR[\fB -p \fIpad\fR ] \fIpolicy path\fR ...
 .SH DESCRIPTION
 .B e4crypt
 performs encryption management for ext4 file systems.
 .SH COMMANDS
 .TP
-.B e4crypt add_key -S \fR[\fB -k \fIkeyring\fR ] [\fB-v\fR] [\fB-q\fR] [ \fI path\fR ... ]
+.B e4crypt add_key \fR[\fB-vq\fR] [\fB-S\fI salt\fR ] [\fB-k \fIkeyring\fR ] [\fB -p \fIpad\fR ] [ \fIpath\fR ... ]
 Prompts the user for a passphrase and inserts it into the specified
 keyring.  If no keyring is specified, e4crypt will use the session
 keyring if it exists or the user session keyring if it does not.
 .IP
+The
+.I salt
+argument is interpreted in a number of different ways, depending on how
+its prefix value.  If the first two characters are "s:", then the rest
+of the argument will be used as an text string and used as the salt
+value.  If the first two characters are "0x", then the rest of the
+argument will be parsed as a hex string as used as the salt.  If the
+first characters are "f:" then the rest of the argument will be
+interpreted as a filename from which the salt value will be read.  If
+the string begins with a '/' character, it will similarly be treated as
+filename.  Finally, if the
+.I salt
+argument can be parsed as a valid UUID, then the UUID value will be used
+as a salt value.
+.IP
+The
+.I keyring
+argument specifies the keyring to which the key should be added.
+.IP
+The
+.I pad
+value specifies the number of bytes of padding will be added to
+directory names for obfuscation purposes.  Valid
+.I pad
+values are 4, 8, 16, and 32.
+.IP
 If one or more directory paths are specified, e4crypt will try to
-set the policy of those directories to use the key just entered by
-the user.
+set the policy of those directories to use the key just added by the
+.B add_key
+command.  If a salt was explicitly specified, then it will be used
+to derive the encryption key of those directories.  Otherwise a
+directory-specific default salt will be used.
 .TP
 .B e4crypt get_policy \fIpath\fR ...
 Print the policy for the directories specified on the command line.
@@ -30,7 +59,7 @@ Print the policy for the directories specified on the command line.
 Give the invoking process (typically a shell) a new session keyring,
 discarding its old session keyring.
 .TP
-.B e4crypt set_policy \fIpolicy path\fR ...
+.B e4crypt set_policy \fR[\fB -p \fIpad\fR ] \fIpolicy path\fR ...
 Sets the policy for the directories specified on the command line.
 All directories must be empty to set the policy; if the directory
 already has a policy established, e4crypt will validate that the
index 04faca3..67d25d8 100644 (file)
@@ -26,6 +26,7 @@
 #include <getopt.h>
 #include <dirent.h>
 #include <errno.h>
+#include <stdbool.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -507,24 +508,12 @@ static int get_keyring_id(const char *keyring)
 
        /*
         * If no keyring is specified, by default use either the user
-        * session key ring or the session keyring.  Fetching the
+        * session keyring or the session keyring.  Fetching the
         * session keyring will return the user session keyring if no
         * session keyring has been set.
-        *
-        * We need to do this instead of simply adding the key to
-        * KEY_SPEC_SESSION_KEYRING since trying to add a key to a
-        * session keyring that does not yet exist will cause the
-        * kernel to create a session keyring --- which wil then get
-        * garbage collected as soon as e4crypt exits.
-        *
-        * The fact that the keyctl system call and the add_key system
-        * call treats KEY_SPEC_SESSION_KEYRING differently when a
-        * session keyring does not exist is very unfortunate and
-        * confusing, but so it goes...
         */
        if (keyring == NULL)
-               return keyctl(KEYCTL_GET_KEYRING_ID,
-                             KEY_SPEC_SESSION_KEYRING, 0);
+               return KEY_SPEC_SESSION_KEYRING;
        for (x = 0; x < (sizeof(keyrings) / sizeof(keyrings[0])); ++x) {
                if (strcmp(keyring, keyrings[x].name) == 0) {
                        return keyrings[x].code;
@@ -578,13 +567,34 @@ static void insert_key_into_keyring(const char *keyring, struct salt *salt)
                return;
        } else if ((rc == -1) && (errno != ENOKEY)) {
                printf("keyctl_search failed: %s\n", strerror(errno));
-               if (errno == -EINVAL)
+               if (errno == EINVAL)
                        printf("Keyring [%s] is not available.\n", keyring);
                exit(1);
        }
        key.mode = EXT4_ENCRYPTION_MODE_AES_256_XTS;
        memcpy(key.raw, salt->key, EXT4_MAX_KEY_SIZE);
        key.size = EXT4_MAX_KEY_SIZE;
+
+       /*
+        * We need to do this instead of simply adding the key to
+        * KEY_SPEC_SESSION_KEYRING since trying to add a key to a
+        * session keyring that does not yet exist will cause the
+        * kernel to create a session keyring --- which will then get
+        * garbage collected as soon as e4crypt exits.
+        *
+        * The fact that the keyctl system call and the add_key system
+        * call treats KEY_SPEC_SESSION_KEYRING differently when a
+        * session keyring does not exist is very unfortunate and
+        * confusing, but so it goes...
+        */
+       if (keyring_id == KEY_SPEC_SESSION_KEYRING) {
+               keyring_id = keyctl(KEYCTL_GET_KEYRING_ID, keyring_id, 0);
+               if (keyring_id < 0) {
+                       printf("Error getting session keyring ID: %s\n",
+                              strerror(errno));
+                       exit(1);
+               }
+       }
        rc = add_key(EXT2FS_KEY_TYPE_LOGON, key_ref_full, (void *)&key,
                     sizeof(key), keyring_id);
        if (rc == -1) {
@@ -632,7 +642,7 @@ static void do_help(int argc, char **argv, const struct cmd_desc *cmd);
 
 #define add_key_desc "adds a key to the user's keyring"
 #define add_key_help \
-"e4crypt add_key -S salt [ -k keyring ] [-v] [-q] [ path ... ]\n\n" \
+"e4crypt add_key -S salt [ -k keyring ] [-v] [-q] [ -p pad ] [ path ... ]\n\n" \
 "Prompts the user for a passphrase and inserts it into the specified\n" \
 "keyring.  If no keyring is specified, e4crypt will use the session\n" \
 "keyring if it exists or the user session keyring if it does not.\n\n" \
@@ -643,6 +653,7 @@ static void do_help(int argc, char **argv, const struct cmd_desc *cmd);
 static void do_add_key(int argc, char **argv, const struct cmd_desc *cmd)
 {
        struct salt *salt;
+       bool explicit_salt = false;
        char *keyring = NULL;
        int i, opt, pad = 4;
        unsigned j;
@@ -657,8 +668,13 @@ static void do_add_key(int argc, char **argv, const struct cmd_desc *cmd)
                        pad = atoi(optarg);
                        break;
                case 'S':
+                       if (explicit_salt) {
+                               fputs("May only provide -S once\n", stderr);
+                               exit(1);
+                       }
                        /* Salt value for passphrase. */
                        parse_salt(optarg, 0);
+                       explicit_salt = true;
                        break;
                case 'v':
                        options |= OPT_VERBOSE;
@@ -667,8 +683,10 @@ static void do_add_key(int argc, char **argv, const struct cmd_desc *cmd)
                        options |= OPT_QUIET;
                        break;
                default:
-                       fprintf(stderr, "Unrecognized option: %c\n", opt);
                case '?':
+                       if (opt != '?')
+                               fprintf(stderr, "Unrecognized option: %c\n",
+                                       opt);
                        fputs("USAGE:\n  ", stderr);
                        fputs(cmd->cmd_help, stderr);
                        exit(1);
@@ -681,8 +699,9 @@ static void do_add_key(int argc, char **argv, const struct cmd_desc *cmd)
                exit(1);
        }
        validate_paths(argc, argv, optind);
-       for (i = optind; i < argc; i++)
-               parse_salt(argv[i], PARSE_FLAGS_FORCE_FN);
+       if (!explicit_salt)
+               for (i = optind; i < argc; i++)
+                       parse_salt(argv[i], PARSE_FLAGS_FORCE_FN);
        printf("Enter passphrase (echo disabled): ");
        get_passphrase(in_passphrase, sizeof(in_passphrase));
        for (j = 0, salt = salt_list; j < num_salt; j++, salt++) {
@@ -691,15 +710,17 @@ static void do_add_key(int argc, char **argv, const struct cmd_desc *cmd)
                generate_key_ref_str(salt);
                insert_key_into_keyring(keyring, salt);
        }
-       if (optind != argc)
-               set_policy(NULL, pad, argc, argv, optind);
+       if (optind != argc) {
+               salt = explicit_salt ? salt_list : NULL;
+               set_policy(salt, pad, argc, argv, optind);
+       }
        clear_secrets();
        exit(0);
 }
 
 #define set_policy_desc "sets a policy for directories"
 #define set_policy_help \
-"e4crypt set_policy policy path ... \n\n" \
+"e4crypt set_policy [ -p pad ] policy path ... \n\n" \
 "Sets the policy for the directories specified on the command line.\n" \
 "All directories must be empty to set the policy; if the directory\n" \
 "already has a policy established, e4crypt will validate that it the\n" \
@@ -749,7 +770,6 @@ static void do_set_policy(int argc, char **argv, const struct cmd_desc *cmd)
 static void do_get_policy(int argc, char **argv, const struct cmd_desc *cmd)
 {
        struct ext4_encryption_policy policy;
-       struct stat st;
        int i, j, fd, rc;
 
        if (argc < 2) {
@@ -760,12 +780,7 @@ static void do_get_policy(int argc, char **argv, const struct cmd_desc *cmd)
        }
 
        for (i = 1; i < argc; i++) {
-               if (stat(argv[i], &st) < 0) {
-                       perror(argv[i]);
-                       continue;
-               }
-               fd = open(argv[i],
-                         S_ISDIR(st.st_mode) ? O_DIRECTORY : O_RDONLY);
+               fd = open(argv[i], O_RDONLY);
                if (fd == -1) {
                        perror(argv[i]);
                        exit(1);
index 37a1c6a..6553721 100644 (file)
@@ -66,7 +66,7 @@ is a device or a mount point,
 .B e4defrag
 doesn't defragment files in mount point of other device.
 .PP
-It safe to run e4defrag on a file while it is actively in use by another
+It is safe to run e4defrag on a file while it is actively in use by another
 application.  Since the contents of file blocks are copied using the
 page cache, this can result in a performance slowdown to both e4defrag
 and the application due to contention over the system's memory and disk
index 1d1b4f4..c6c6f13 100644 (file)
@@ -41,6 +41,8 @@
 #include <sys/statfs.h>
 #include <sys/vfs.h>
 
+#include "../version.h"
+
 /* A relatively new ioctl interface ... */
 #ifndef EXT4_IOC_MOVE_EXT
 #define EXT4_IOC_MOVE_EXT      _IOWR('f', 15, struct move_extent)
@@ -439,7 +441,8 @@ static int defrag_fadvise(int fd, struct move_extent defrag_data,
                        offset += pagesize;
                        continue;
                }
-               if (posix_fadvise(fd, offset, pagesize, fadvise_flag) < 0) {
+               if ((errno = posix_fadvise(fd, offset,
+                                          pagesize, fadvise_flag)) != 0) {
                        if ((mode_flag & DETAIL) && flag) {
                                perror("\tFailed to fadvise");
                                flag = 0;
@@ -1014,7 +1017,9 @@ static int get_best_count(ext4_fsblk_t block_count)
        int ret;
        unsigned int flex_bg_num;
 
-       /* Calcuate best extents count */
+       if (blocks_per_group == 0)
+               return 1;
+
        if (feature_incompat & EXT4_FEATURE_INCOMPAT_FLEX_BG) {
                flex_bg_num = 1 << log_groups_per_flex;
                ret = ((block_count - 1) /
@@ -1051,6 +1056,8 @@ static int file_statistic(const char *file, const struct stat64 *buf,
        struct fiemap_extent_list *logical_list_head = NULL;
 
        defraged_file_count++;
+       if (defraged_file_count > total_count)
+               total_count = defraged_file_count;
 
        if (mode_flag & DETAIL) {
                if (total_count == 1 && regular_count == 1)
@@ -1417,6 +1424,8 @@ static int file_defrag(const char *file, const struct stat64 *buf,
        struct fiemap_extent_group      *orig_group_tmp = NULL;
 
        defraged_file_count++;
+       if (defraged_file_count > total_count)
+               total_count = defraged_file_count;
 
        if (mode_flag & DETAIL) {
                printf("[%u/%u]", defraged_file_count, total_count);
@@ -1506,10 +1515,7 @@ static int file_defrag(const char *file, const struct stat64 *buf,
                goto out;
        }
 
-       if (current_uid == ROOT_UID)
-               best = get_best_count(blk_count);
-       else
-               best = 1;
+       best = get_best_count(blk_count);
 
        if (file_frags_start <= best)
                goto check_improvement;
@@ -1578,7 +1584,7 @@ static int file_defrag(const char *file, const struct stat64 *buf,
                goto out;
        }
 
-       /* Calcuate donor inode's continuous physical region */
+       /* Calculate donor inode's continuous physical region */
        donor_physical_cnt = get_physical_count(donor_list_physical);
 
        /* Change donor extent list from physical to logical */
@@ -1673,12 +1679,15 @@ int main(int argc, char *argv[])
        int     i, j, ret = 0;
        int     flags = FTW_PHYS | FTW_MOUNT;
        int     arg_type = -1;
+       int     mount_dir_len = 0;
        int     success_flag = 0;
        char    dir_name[PATH_MAX + 1];
        char    dev_name[PATH_MAX + 1];
        struct stat64   buf;
        ext2_filsys fs = NULL;
 
+       printf("e4defrag %s (%s)\n", E2FSPROGS_VERSION, E2FSPROGS_DATE);
+
        /* Parse arguments */
        if (argc == 1)
                goto out;
@@ -1800,21 +1809,19 @@ int main(int argc, char *argv[])
                                          block_size, unix_io_manager, &fs);
                        if (ret) {
                                if (mode_flag & DETAIL)
-                                       com_err(argv[1], ret,
-                                               "while trying to open file system: %s",
-                                               dev_name);
-                               continue;
+                                       fprintf(stderr,
+                                               "Warning: couldn't get file "
+                                               "system details for %s: %s\n",
+                                               dev_name, error_message(ret));
+                       } else {
+                               blocks_per_group = fs->super->s_blocks_per_group;
+                               feature_incompat = fs->super->s_feature_incompat;
+                               log_groups_per_flex = fs->super->s_log_groups_per_flex;
+                               ext2fs_close_free(&fs);
                        }
-
-                       blocks_per_group = fs->super->s_blocks_per_group;
-                       feature_incompat = fs->super->s_feature_incompat;
-                       log_groups_per_flex = fs->super->s_log_groups_per_flex;
-
-                       ext2fs_close_free(&fs);
                }
 
                switch (arg_type) {
-                       int mount_dir_len = 0;
 
                case DIRNAME:
                        if (!(mode_flag & STATISTIC))
@@ -1826,11 +1833,11 @@ int main(int argc, char *argv[])
                        strncat(lost_found_dir, "/lost+found",
                                PATH_MAX - strnlen(lost_found_dir, PATH_MAX));
 
-                       /* Not the case("e4defrag  mount_piont_dir") */
+                       /* Not the case("e4defrag  mount_point_dir") */
                        if (dir_name[mount_dir_len] != '\0') {
                                /*
-                                * "e4defrag mount_piont_dir/lost+found"
-                                * or "e4defrag mount_piont_dir/lost+found/"
+                                * "e4defrag mount_point_dir/lost+found"
+                                * or "e4defrag mount_point_dir/lost+found/"
                                 */
                                if (strncmp(lost_found_dir, dir_name,
                                            strnlen(lost_found_dir,
@@ -1844,9 +1851,10 @@ int main(int argc, char *argv[])
                                        continue;
                                }
 
-                               /* "e4defrag mount_piont_dir/else_dir" */
+                               /* "e4defrag mount_point_dir/else_dir" */
                                memset(lost_found_dir, 0, PATH_MAX + 1);
                        }
+                       /* fall through */
                case DEVNAME:
                        if (arg_type == DEVNAME) {
                                strncpy(lost_found_dir, dir_name,
index d7bd863..90bc4f8 100644 (file)
@@ -61,6 +61,14 @@ This feature requires that the
 .B extent
 feature be enabled.
 .TP
+.B casefold
+.br
+This ext4 feature provides file system level character encoding support
+for directories with the casefold (+F) flag enabled.  This feature is
+name-preserving on the disk, but it allows applications to lookup for a
+file in the file system using an encoding equivalent version of the file
+name.
+.TP
 .B dir_index
 .br
 Use hashed b-trees to speed up name lookups in large directories.  This
@@ -69,13 +77,28 @@ ext2 file systems.
 .TP
 .B dir_nlink
 .br
-This ext4 feature allows more than 65000 subdirectories per directory.
+Normally, ext4 allows an inode to have no more than 65,000 hard links.
+This applies to regular files as well as directories, which means that
+there can be no more than 64,998 subdirectories in a directory (because
+each of the '.' and '..' entries, as well as the directory entry for the
+directory in its parent directory counts as a hard link).  This feature
+lifts this limit by causing ext4 to use a link count of 1 to indicate
+that the number of hard links to a directory is not known when the link
+count might exceed the maximum count limit.
+.TP
+.B ea_inode
+.br
+Normally, a file's extended attributes and associated metadata must fit within
+the inode or the inode's associated extended attribute block. This feature
+allows the value of each extended attribute to be placed in the data blocks of a
+separate inode if necessary, increasing the limit on the size and number of
+extended attributes per file.
 .TP
 .B encrypt
 .br
-This ext4 feature provides file-system level encryption of data blocks
-and file names.  The inode metadata (timestamps, file size, user/group
-ownership, etc.) is
+Enables support for file-system level encryption of data blocks and file
+names.  The inode metadata (timestamps, file size, user/group ownership,
+etc.) is
 .I not
 encrypted.
 .IP
@@ -166,7 +189,14 @@ the
 option to
 .BR mke2fs (8)
 or
-.BR tune2fs(8).
+.BR tune2fs(8) .
+.TP
+.B large_dir
+.br
+This feature increases the limit on the number of files per directory by
+raising the maximum size of directories and, for hashed b-tree directories (see
+.BR dir_index ),
+the maximum height of the hashed b-tree used to store the directory entries.
 .TP
 .B large_file
 .br
@@ -174,21 +204,27 @@ This feature flag is set automatically by modern kernels when a file
 larger than 2 gigabytes is created.  Very old kernels could not
 handle large files, so this feature flag was used to prohibit those
 kernels from mounting file systems that they could not understand.
-.\" .TP
-.\" .B metadata_csum
-.\" .br
-.\" This ext4 feature enables metadata checksumming.  This feature stores
-.\" checksums for all of the filesystem metadata (superblock, group
-.\" descriptor blocks, inode and block bitmaps, directories, and
-.\" extent tree blocks).  The checksum algorithm used for the metadata
-.\" blocks is different than the one used for group descriptors with the
-.\" .B uninit_bg
-.\" feature, these two features are incompatible and
-.\" .B metadata_csum
-.\" will be used preferentially instead of
-.\" .BR uninit_bg .
-.\" .br
-.\" .B Future feature, available in e2fsprogs 1.43-WIP
+.TP
+.B metadata_csum
+.br
+This ext4 feature enables metadata checksumming.  This feature stores
+checksums for all of the filesystem metadata (superblock, group
+descriptor blocks, inode and block bitmaps, directories, and
+extent tree blocks).  The checksum algorithm used for the metadata
+blocks is different than the one used for group descriptors with the
+.B uninit_bg
+feature.  These two features are incompatible and
+.B metadata_csum
+will be used preferentially instead of
+.BR uninit_bg .
+.TP
+.B metadata_csum_seed
+.br
+This feature allows the filesystem to store the metadata checksum seed in the
+superblock, which allows the administrator to change the UUID of a filesystem
+using the
+.B metadata_csum
+feature while it is mounted.
 .TP
 .B meta_bg
 .br
@@ -207,10 +243,6 @@ available in the resize inode.
 This ext4 feature provides multiple mount protection (MMP).  MMP helps to
 protect the filesystem from being multiply mounted and is useful in
 shared storage environments.
-.IP
-Causes the quota files (i.e., user.quota and
-group.quota which existed
-in the older quota design) to be hidden inodes.
 .TP
 .B project
 .br
@@ -223,6 +255,10 @@ Create quota inodes (inode #3 for userquota and inode
 #4 for group quota) and set them in the superblock.
 With this feature, the quotas will be enabled
 automatically when the filesystem is mounted.
+.IP
+Causes the quota files (i.e., user.quota and
+group.quota which existed
+in the older quota design) to be hidden inodes.
 .TP
 .B resize_inode
 .br
@@ -241,6 +277,8 @@ extended option.
 .IP
 This feature requires that the
 .B sparse_super
+or
+.B sparse_super2
 feature be enabled.
 .TP
 .B sparse_super
@@ -261,6 +299,20 @@ feature is essentially a more extreme version of sparse_super and is
 designed to allow a much larger percentage of the disk to have
 contiguous blocks available for data files.
 .TP
+.B stable_inodes
+.br
+Marks the filesystem's inode numbers and UUID as stable.
+.BR resize2fs (8)
+will not allow shrinking a filesystem with this feature, nor
+will
+.BR tune2fs (8)
+allow changing its UUID.  This feature allows the use of specialized encryption
+settings that make use of the inode numbers and UUID.  Note that the
+.B encrypt
+feature still needs to be enabled separately.
+.B stable_inodes
+is a "compat" feature, so old kernels will allow it.
+.TP
 .B uninit_bg
 .br
 This ext4 file system feature indicates that the block group descriptors
@@ -274,6 +326,18 @@ the file system using
 and it also speeds up the time required for
 .BR mke2fs (8)
 to create the file system.
+.TP
+.B verity
+.br
+Enables support for verity protected files.  Verity files are readonly,
+and their data is transparently verified against a Merkle tree hidden
+past the end of the file.  Using the Merkle tree's root hash, a verity
+file can be efficiently authenticated, independent of the file's size.
+.IP
+This feature is most useful for authenticating important read-only files
+on read-write file systems.  If the file system itself is read-only,
+then using dm-verity to authenticate the entire block device may provide
+much better security.
 .SH MOUNT OPTIONS
 This section describes mount options which are specific to ext2, ext3,
 and ext4.  Other generic mount options may be used as well; see
@@ -375,18 +439,26 @@ These options determine who can use the reserved blocks.
 (Roughly: whoever has the specified uid, or belongs to the specified group.)
 .TP
 .BI sb= n
-Instead of block 1, use block
-.I n
-as superblock. This could be useful when the filesystem has been damaged.
-(Earlier, copies of the superblock would be made every 8192 blocks: in
-block 1, 8193, 16385, \&...\& (and one got thousands of copies on
-a big filesystem). Since version 1.08,
+Instead of using the normal superblock, use an alternative superblock
+specified by
+.IR n .
+This option is normally used when the primary superblock has been
+corrupted.  The location of backup superblocks is dependent on the
+filesystem's blocksize, the number of blocks per group, and features
+such as
+.BR sparse_super .
+.IP
+Additional backup superblocks can be determined by using the
 .B mke2fs
-has a \-s (sparse superblock) option to reduce the number of backup
-superblocks, and since version 1.15 this is the default. Note
-that this may mean that ext2 filesystems created by a recent
+program using the
+.B \-n
+option to print out where the superblocks exist, supposing
 .B mke2fs
-cannot be mounted r/w under Linux 2.0.*.)
+is supplied with arguments that are consistent with the filesystem's layout
+(e.g. blocksize, blocks per group,
+.BR sparse_super ,
+etc.).
+.IP
 The block number here uses 1\ k units. Thus, if you want to use logical
 block 32768 on a filesystem with 4\ k blocks, use "sb=131072".
 .TP
@@ -454,22 +526,31 @@ performance penalty.  If your disks are battery-backed in one way or another,
 disabling barriers may safely improve performance.
 .TP
 .BI commit= nrsec
-Sync all data and metadata every
+Start a journal commit every
 .I nrsec
-seconds. The default value is 5 seconds. Zero means default.
+seconds.  The default value is 5 seconds.  Zero means default.
 .TP
 .B user_xattr
 Enable Extended User Attributes. See the
 .BR attr (5)
 manual page.
 .TP
-.BR usrjquota=aquota.user | grpjquota=aquota.group | jqfmt=vfsv0
+.BR jqfmt= { vfsold | vfsv0 | vfsv1 }
 Apart from the old quota system (as in ext2, jqfmt=vfsold aka version 1 quota)
-ext3 also supports journaled quotas (version 2 quota). jqfmt=vfsv0
-enables journaled quotas. For journaled quotas the mount options
+ext3 also supports journaled quotas (version 2 quota). jqfmt=vfsv0 or
+jqfmt=vfsv1 enables journaled quotas. Journaled quotas have the advantage that
+even after a crash no quota check is required. When the
+.B quota
+filesystem feature is enabled, journaled quotas are used automatically, and
+this mount option is ignored.
+.TP
+.BR usrjquota=aquota.user | grpjquota=aquota.group
+For journaled quotas (jqfmt=vfsv0 or jqfmt=vfsv1), the mount options
 usrjquota=aquota.user and grpjquota=aquota.group are required to tell the
-quota system which quota database files to use. Journaled quotas have the
-advantage that even after a crash no quota check is required.
+quota system which quota database files to use. When the
+.B quota
+filesystem feature is enabled, journaled quotas are used automatically, and
+this mount option is ignored.
 
 .SH "Mount options for ext4"
 The ext4 filesystem is an advanced level of the ext3 filesystem which
@@ -477,16 +558,16 @@ incorporates scalability and reliability enhancements for supporting large
 filesystem.
 
 The options
-.B journal_dev, norecovery, noload, data, commit, orlov, oldalloc, [no]user_xattr
-.B [no]acl, bsddf, minixdf, debug, errors, data_err, grpid, bsdgroups, nogrpid
-.B sysvgroups, resgid, resuid, sb, quota, noquota, nouid32, grpquota, usrquota
-.B usrjquota, grpjquota and jqfmt
-are backwardly compatible with ext3 or ext2.
+.B journal_dev, journal_path, norecovery, noload, data, commit, orlov,
+.B oldalloc, [no]user_xattr, [no]acl, bsddf, minixdf, debug, errors,
+.B data_err, grpid, bsdgroups, nogrpid, sysvgroups, resgid, resuid, sb,
+.B quota, noquota, nouid32, grpquota, usrquota, usrjquota, grpjquota,
+.B and jqfmt are backwardly compatible with ext3 or ext2.
 .TP
-.B journal_checksum
-Enable checksumming of the journal transactions.  This will allow the recovery
-code in e2fsck and the kernel to detect corruption in the kernel.  It is a
-compatible change and will be ignored by older kernels.
+.B journal_checksum | nojournal_checksum
+The journal_checksum option enables checksumming of the journal transactions.
+This will allow the recovery code in e2fsck and the kernel to detect corruption
+in the kernel. It is a compatible change and will be ignored by older kernels.
 .TP
 .B journal_async_commit
 Commit block can be written to disk without waiting for descriptor blocks. If
@@ -585,7 +666,7 @@ sparse/thinly-provisioned LUNs, but it is off by default until sufficient
 testing has been done.
 .TP
 .BR block_validity / noblock_validity
-This options enables/disables the in-kernel facility for tracking
+This option enables/disables the in-kernel facility for tracking
 filesystem metadata blocks within internal data structures. This allows multi-\c
 block allocator and other routines to quickly locate extents which might
 overlap with filesystem metadata blocks. This option is intended for debugging
@@ -612,6 +693,18 @@ seriously cramp the system's style.)
 .TP
 .B i_version
 Enable 64-bit inode version support. This option is off by default.
+.TP
+.B nombcache
+This option disables use of mbcache for extended attribute deduplication. On
+systems where extended attributes are rarely or never shared between files,
+use of mbcache for deduplication adds unnecessary computational overhead.
+.TP
+.B prjquota
+The prjquota mount option enables project quota support on the filesystem.
+You need the quota utilities to actually enable and manage the quota system.
+This mount option requires the
+.B project
+filesystem feature.
 
 .SH FILE ATTRIBUTES
 The ext2, ext3, and ext4 filesystems support setting the following file
@@ -693,12 +786,24 @@ ext4, 3.6
 ext4, 3.8
 .IP "\fBsparse_super2\fR" 2in
 ext4, 3.16
-.IP "\fBmetdata_csum\fR" 2in
+.IP "\fBmetadata_csum\fR" 2in
 ext4, 3.18
 .IP "\fBencrypt\fR" 2in
 ext4, 4.1
-.IP "\fBproject\fR" 2in
+.IP "\fBmetadata_csum_seed\fR" 2i
+ext4, 4.4
+.IP "\fBproject\fR" 2i
 ext4, 4.5
+.IP "\fBea_inode\fR" 2i
+ext4, 4.13
+.IP "\fBlarge_dir\fR" 2i
+ext4, 4.13
+.IP "\fBcasefold\fR" 2i
+ext4, 5.2
+.IP "\fBverity\fR" 2i
+ext4, 5.4
+.IP "\fBstable_inodes\fR" 2i
+ext4, 5.5
 .SH SEE ALSO
 .BR mke2fs (8),
 .BR mke2fs.conf (5),
index a6d7b27..d15d363 100644 (file)
@@ -15,11 +15,11 @@ filefrag \- report on file fragmentation
 ]
 .SH DESCRIPTION
 .B filefrag
-reports on how badly fragmented a particular file might be.  It makes 
+reports on how badly fragmented a particular file might be.  It makes
 allowances for indirect blocks for ext2 and ext3 filesystems, but can be
 used on files for any filesystem.
 .PP
-The 
+The
 .B filefrag
 program initially attempts to get the
 extent information using FIEMAP ioctl which is more efficient and faster.
@@ -33,8 +33,8 @@ testing purposes.
 .BI \-b blocksize
 Use
 .I blocksize
-in bytes for output instead of the filesystem blocksize.
-For compatibility with earlier versions of
+in bytes, or with [KMG] suffix, up to 1GB for output instead of the
+filesystem blocksize.  For compatibility with earlier versions of
 .BR filefrag ,
 if
 .I blocksize
@@ -43,7 +43,15 @@ is unspecified it defaults to 1024 bytes.
 .B \-e
 Print output in extent format, even for block-mapped files.
 .TP
-.BI \-k
+.B \-E
+Display the contents of ext4's extent status cache.  This feature is not
+supported on all kernels, and is only supported on ext4 file systems.
+.TP
+.TP
+.B -P
+Pre-load the ext4's extent status cache for the file.  This feature is not
+supported on all kernels, and is only supported on ext4 file systems.
+.B \-k
 Use 1024\-byte blocksize for output (identical to '\-b 1024').
 .TP
 .B \-s
index 1a18512..62d583b 100644 (file)
@@ -45,17 +45,21 @@ extern int optind;
 #include <sys/stat.h>
 #include <sys/vfs.h>
 #include <sys/ioctl.h>
+#ifdef HAVE_LINUX_FD_H
 #include <linux/fd.h>
+#endif
 #include <ext2fs/ext2fs.h>
 #include <ext2fs/ext2_types.h>
 #include <ext2fs/fiemap.h>
 
 int verbose = 0;
-int blocksize;         /* Use specified blocksize (default 1kB) */
+unsigned int blocksize;        /* Use specified blocksize (default 1kB) */
 int sync_file = 0;     /* fsync file before getting the mapping */
+int precache_file = 0; /* precache the file before getting the mapping */
 int xattr_map = 0;     /* get xattr mapping */
 int force_bmap;        /* force use of FIBMAP instead of FIEMAP */
 int force_extent;      /* print output in extent format always */
+int use_extent_cache;  /* Use extent cache */
 int logical_width = 8;
 int physical_width = 10;
 const char *ext_fmt = "%4d: %*llu..%*llu: %*llu..%*llu: %6llu: %s\n";
@@ -71,7 +75,7 @@ const char *hex_fmt = "%4d: %*llx..%*llx: %*llx..%*llx: %6llx: %s\n";
 #define        EXT4_EXTENTS_FL                 0x00080000 /* Inode uses extents */
 #define        EXT3_IOC_GETFLAGS               _IOR('f', 1, long)
 
-static int int_log2(int arg)
+static int ulong_log2(unsigned long arg)
 {
        int     l = 0;
 
@@ -83,7 +87,7 @@ static int int_log2(int arg)
        return l;
 }
 
-static int int_log10(unsigned long long arg)
+static int ulong_log10(unsigned long long arg)
 {
        int     l = 0;
 
@@ -143,6 +147,7 @@ static void print_extent_info(struct fiemap_extent *fm_extent, int cur_ex,
        unsigned long long logical_blk;
        unsigned long long ext_len;
        unsigned long long ext_blks;
+       unsigned long long ext_blks_phys;
        __u32 fe_flags, mask;
        char flags[256] = "";
 
@@ -159,13 +164,15 @@ static void print_extent_info(struct fiemap_extent *fm_extent, int cur_ex,
                physical_blk = fm_extent->fe_physical >> blk_shift;
        }
 
-       if (expected)
+       fe_flags = fm_extent->fe_flags;
+       if (expected &&
+           !(fe_flags & FIEMAP_EXTENT_UNKNOWN) &&
+           !(fe_flags & EXT4_FIEMAP_EXTENT_HOLE))
                sprintf(flags, ext_fmt == hex_fmt ? "%*llx: " : "%*llu: ",
                        physical_width, expected >> blk_shift);
        else
                sprintf(flags, "%.*s  ", physical_width, "                   ");
 
-       fe_flags = fm_extent->fe_flags;
        print_flag(&fe_flags, FIEMAP_EXTENT_LAST, flags, "last,");
        print_flag(&fe_flags, FIEMAP_EXTENT_UNKNOWN, flags, "unknown_loc,");
        print_flag(&fe_flags, FIEMAP_EXTENT_DELALLOC, flags, "delalloc,");
@@ -177,9 +184,10 @@ static void print_extent_info(struct fiemap_extent *fm_extent, int cur_ex,
        print_flag(&fe_flags, FIEMAP_EXTENT_UNWRITTEN, flags, "unwritten,");
        print_flag(&fe_flags, FIEMAP_EXTENT_MERGED, flags, "merged,");
        print_flag(&fe_flags, FIEMAP_EXTENT_SHARED, flags, "shared,");
+       print_flag(&fe_flags, EXT4_FIEMAP_EXTENT_HOLE, flags, "hole,");
        /* print any unknown flags as hex values */
        for (mask = 1; fe_flags != 0 && mask != 0; mask <<= 1) {
-               char hex[6];
+               char hex[sizeof(mask) * 2 + 4]; /* 2 chars/byte + 0x, + NUL */
 
                if ((fe_flags & mask) == 0)
                        continue;
@@ -195,10 +203,17 @@ static void print_extent_info(struct fiemap_extent *fm_extent, int cur_ex,
        if (flags[0] != '\0')
                flags[strnlen(flags, sizeof(flags)) - 1] = '\0';
 
+       if ((fm_extent->fe_flags & FIEMAP_EXTENT_UNKNOWN) ||
+           (fm_extent->fe_flags & EXT4_FIEMAP_EXTENT_HOLE)) {
+               ext_len = 0;
+               ext_blks_phys = 0;
+       } else
+               ext_blks_phys = ext_blks;
+
        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,
+              physical_width, physical_blk + ext_blks_phys,
               ext_len, flags);
 }
 
@@ -208,31 +223,39 @@ static int filefrag_fiemap(int fd, int blk_shift, int *num_extents,
        __u64 buf[2048];        /* __u64 for proper field alignment */
        struct fiemap *fiemap = (struct fiemap *)buf;
        struct fiemap_extent *fm_ext = &fiemap->fm_extents[0];
-       struct fiemap_extent fm_last = {0};
+       struct fiemap_extent fm_last;
        int count = (sizeof(buf) - sizeof(*fiemap)) /
                        sizeof(struct fiemap_extent);
        unsigned long long expected = 0;
        unsigned long long expected_dense = 0;
        unsigned long flags = 0;
        unsigned int i;
+       unsigned long cmd = FS_IOC_FIEMAP;
        int fiemap_header_printed = 0;
        int tot_extents = 0, n = 0;
        int last = 0;
        int rc;
 
        memset(fiemap, 0, sizeof(struct fiemap));
+       memset(&fm_last, 0, sizeof(fm_last));
 
        if (sync_file)
                flags |= FIEMAP_FLAG_SYNC;
 
+       if (precache_file)
+               flags |= FIEMAP_FLAG_CACHE;
+
        if (xattr_map)
                flags |= FIEMAP_FLAG_XATTR;
 
+       if (use_extent_cache)
+               cmd = EXT4_IOC_GET_ES_CACHE;
+
        do {
                fiemap->fm_length = ~0ULL;
                fiemap->fm_flags = flags;
                fiemap->fm_extent_count = count;
-               rc = ioctl(fd, FS_IOC_FIEMAP, (unsigned long) fiemap);
+               rc = ioctl(fd, cmd, (unsigned long) fiemap);
                if (rc < 0) {
                        static int fiemap_incompat_printed;
 
@@ -306,8 +329,8 @@ static int filefrag_fibmap(int fd, int blk_shift, int *num_extents,
                fm_ext.fe_flags = FIEMAP_EXTENT_MERGED;
        }
 
-       if (sync_file)
-               fsync(fd);
+       if (sync_file && fsync(fd) != 0)
+               return -errno;
 
        for (i = 0, logical = 0, *num_extents = 0, count = last_block = 0;
             i < numblocks;
@@ -415,13 +438,13 @@ static int frag_report(const char *filename)
                goto out_close;
        }
 
-       if (last_device != st.st_dev) {
+       if ((last_device != st.st_dev) || !st.st_dev) {
                if (fstatfs(fd, &fsinfo) < 0) {
                        rc = -errno;
                        perror("fstatfs");
                        goto out_close;
                }
-               if (ioctl(fd, FIGETBSZ, &blksize) < 0)
+               if ((ioctl(fd, FIGETBSZ, &blksize) < 0) || !blksize)
                        blksize = fsinfo.f_bsize;
                if (verbose)
                        printf("Filesystem type is: %lx\n",
@@ -449,28 +472,49 @@ static int frag_report(const char *filename)
        }
        last_device = st.st_dev;
 
-       width = int_log10(fsinfo.f_blocks);
+       width = ulong_log10(fsinfo.f_blocks);
        if (width > physical_width)
                physical_width = width;
 
        numblocks = (st.st_size + blksize - 1) / blksize;
        if (blocksize != 0)
-               blk_shift = int_log2(blocksize);
+               blk_shift = ulong_log2(blocksize);
        else
-               blk_shift = int_log2(blksize);
+               blk_shift = ulong_log2(blksize);
 
-       width = int_log10(numblocks);
+       if (use_extent_cache)
+               width = 10;
+       else
+               width = ulong_log10(numblocks);
        if (width > logical_width)
                logical_width = width;
-       if (verbose)
-               printf("File size of %s is %llu (%llu block%s of %d bytes)\n",
+       if (verbose) {
+               __u32 state;
+
+               printf("File size of %s is %llu (%llu block%s of %d bytes)",
                       filename, (unsigned long long)st.st_size,
                       numblocks * blksize >> blk_shift,
                       numblocks == 1 ? "" : "s", 1 << blk_shift);
+               if (use_extent_cache &&
+                   ioctl(fd, EXT4_IOC_GETSTATE, &state) == 0 &&
+                   (state & EXT4_STATE_FLAG_EXT_PRECACHED))
+                       fputs(" -- pre-cached", stdout);
+               fputc('\n', stdout);
+       }
 
        if (!force_bmap) {
                rc = filefrag_fiemap(fd, blk_shift, &num_extents, &st);
                expected = 0;
+               if (rc < 0 &&
+                   (use_extent_cache || precache_file || xattr_map)) {
+                       if (rc != -EBADR)
+                               fprintf(stderr, "%s: %s: %s\n ",
+                                       filename,
+                                       use_extent_cache ?
+                                       "EXT4_IOC_GET_ES_CACHE" :
+                                       "FS_IOC_FIEMAP", strerror(-rc));
+                       goto out_close;
+               }
        }
 
        if (force_bmap || rc < 0) { /* FIEMAP failed, try FIBMAP instead */
@@ -514,7 +558,7 @@ out_close:
 
 static void usage(const char *progname)
 {
-       fprintf(stderr, "Usage: %s [-b{blocksize}] [-BeksvxX] file ...\n",
+       fprintf(stderr, "Usage: %s [-b{blocksize}[KMG]] [-BeEksvxX] file ...\n",
                progname);
        exit(1);
 }
@@ -524,7 +568,7 @@ int main(int argc, char**argv)
        char **cpp;
        int rc = 0, c;
 
-       while ((c = getopt(argc, argv, "Bb::eksvxX")) != EOF) {
+       while ((c = getopt(argc, argv, "Bb::eEkPsvxX")) != EOF) {
                switch (c) {
                case 'B':
                        force_bmap++;
@@ -532,25 +576,44 @@ int main(int argc, char**argv)
                case 'b':
                        if (optarg) {
                                char *end;
-                               blocksize = strtoul(optarg, &end, 0);
+                               unsigned long val;
+
+                               val = strtoul(optarg, &end, 0);
                                if (end) {
+#if __GNUC_PREREQ (7, 0)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
+#endif
                                        switch (end[0]) {
                                        case 'g':
                                        case 'G':
-                                               blocksize *= 1024;
-                                               /* no break */
+                                               val *= 1024;
+                                               /* fall through */
                                        case 'm':
                                        case 'M':
-                                               blocksize *= 1024;
-                                               /* no break */
+                                               val *= 1024;
+                                               /* fall through */
                                        case 'k':
                                        case 'K':
-                                               blocksize *= 1024;
+                                               val *= 1024;
                                                break;
                                        default:
                                                break;
                                        }
+#if __GNUC_PREREQ (7, 0)
+#pragma GCC diagnostic pop
+#endif
                                }
+                               /* Specifying too large a blocksize will just
+                                * shift all extents down to zero length. Even
+                                * 1GB is questionable, but caveat emptor. */
+                               if (val > 1024 * 1024 * 1024) {
+                                       fprintf(stderr,
+                                               "%s: blocksize %lu over 1GB\n",
+                                               argv[0], val);
+                                       usage(argv[0]);
+                               }
+                               blocksize = val;
                        } else { /* Allow -b without argument for compat. Remove
                                  * this eventually so "-b {blocksize}" works */
                                fprintf(stderr, "%s: -b needs a blocksize "
@@ -559,6 +622,9 @@ int main(int argc, char**argv)
                                blocksize = 1024;
                        }
                        break;
+               case 'E':
+                       use_extent_cache++;
+                       /* fallthrough */
                case 'e':
                        force_extent++;
                        if (!verbose)
@@ -567,6 +633,9 @@ int main(int argc, char**argv)
                case 'k':
                        blocksize = 1024;
                        break;
+               case 'P':
+                       precache_file++;
+                       break;
                case 's':
                        sync_file++;
                        break;
@@ -588,7 +657,7 @@ int main(int argc, char**argv)
        if (optind == argc)
                usage(argv[0]);
 
-       for (cpp = argv + optind; *cpp != '\0'; cpp++) {
+       for (cpp = argv + optind; *cpp != NULL; cpp++) {
                int rc2 = frag_report(*cpp);
 
                if (rc2 < 0 && rc == 0)
index d44cbc7..3146e0c 100644 (file)
@@ -6,27 +6,27 @@
 .SH NAME
 findfs \- Find a filesystem by label or UUID
 .SH SYNOPSIS
-.B findfs 
+.B findfs
 .BI LABEL= label
 .sp
 .B findfs
 .BI UUID= uuid
 .SH DESCRIPTION
 .B findfs
-will search the disks in the system looking for a filesystem which has 
+will search the disks in the system looking for a filesystem which has
 a label matching
 .I label
-or a UUID equal to 
+or a UUID equal to
 .IR uuid .
 If the filesystem is found, the device name for the filesystem will
 be printed on stdout.
 .PP
 .SH AUTHOR
-.B findfs 
+.B findfs
 was written by Theodore Ts'o (tytso@mit.edu).
 .SH AVAILABILITY
 .B findfs
-is part of the e2fsprogs package and is available from 
+is part of the e2fsprogs package and is available from
 http://e2fsprogs.sourceforge.net.
 .SH SEE ALSO
 .BR fsck (8)
index 47aa43a..765295c 100644 (file)
@@ -30,7 +30,7 @@
  *   findsuper /dev/hda
  *   findsuper /dev/hda 437760 1024   (my disk has cyls of 855*512)
  *
- * I suppose the next step is to figgure out a way to determine if
+ * I suppose the next step is to figure out a way to determine if
  * the block found is the first superblock somehow, and if so, build
  * a partition table from the superblocks found... but this is still
  * useful as is.
@@ -75,7 +75,7 @@
  * For new systems that have a block group number in the superblock it
  * is immediately clear which superblock is the first of a partition.
  * For old systems where no group numbers are given, the first
- * superblock can be recognised by the timestamp: all superblock
+ * superblock can be recognized by the timestamp: all superblock
  * copies have the creation time in s_mtime, except the first, which
  * has the last time e2fsck or tune2fs wrote to the filesystem.
  *
@@ -251,7 +251,7 @@ int main(int argc, char *argv[])
                        sb_offset = 0;
                if (jnl_copy && !print_jnl_copies)
                        continue;
-               printf("\r%11Lu %11Lu%s %11Lu%s %9u %5Lu %4u%s %s %02x%02x%02x%02x %s\n",
+               printf("\r%11Lu %11Lu%s %11Lu%s %9u %5Lu %4u%s %s %02x%02x%02x%02x %.*s\n",
                       sk, sk - ext2.s_block_group_nr * grpsize - sb_offset,
                       jnl_copy ? "*":" ",
                       sk + ext2fs_blocks_count(&ext2) * bsize -
@@ -259,7 +259,8 @@ int main(int argc, char *argv[])
                       jnl_copy ? "*" : " ", ext2fs_blocks_count(&ext2), bsize,
                       ext2.s_block_group_nr, jnl_copy ? "*" : " ", s,
                       ext2.s_uuid[0], ext2.s_uuid[1],
-                      ext2.s_uuid[2], ext2.s_uuid[3], ext2.s_volume_name);
+                      ext2.s_uuid[2], ext2.s_uuid[3],
+                      EXT2_LEN_STR(ext2.s_volume_name));
        }
        printf(_("\n%11Lu: finished with errno %d\n"), sk, errno);
        close(fd);
index 50fd8ce..e751f8d 100644 (file)
@@ -1,7 +1,7 @@
 .\" -*- nroff -*-
 .\" Copyright 1993, 1994, 1995 by Theodore Ts'o.  All Rights Reserved.
 .\" This file may be copied under the terms of the GNU Public License.
-.\" 
+.\"
 .TH FSCK 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
 fsck \- check and repair a Linux file system
@@ -19,34 +19,34 @@ fsck \- check and repair a Linux file system
 [
 .B \-t
 .I fstype
-] 
+]
 .I [filesys ... ]
 [\-\-] [
 .B fs-specific-options
 ]
 .SH DESCRIPTION
 .B fsck
-is used to check and optionally repair one or more Linux file systems.  
+is used to check and optionally repair one or more Linux file systems.
 .I filesys
 can be a device name (e.g.
 .IR /dev/hdc1 ", " /dev/sdb2 ),
 a mount point (e.g.
 .IR / ", " /usr ", " /home ),
 or an ext2 label or UUID specifier (e.g.
-UUID=8868abf6-88c5-4a83-98b8-bfc24057f7bd or LABEL=root).  
-Normally, the 
-.B fsck 
-program will try to handle filesystems on different physical disk drives 
+UUID=8868abf6-88c5-4a83-98b8-bfc24057f7bd or LABEL=root).
+Normally, the
+.B fsck
+program will try to handle filesystems on different physical disk drives
 in parallel to reduce the total amount of time needed to check all of the
 filesystems.
 .PP
-If no filesystems are specified on the command line, and the 
-.B \-A 
-option is not specified, 
+If no filesystems are specified on the command line, and the
+.B \-A
+option is not specified,
 .B fsck
 will default to checking filesystems in
 .B /etc/fstab
-serially.  This is equivalent to the 
+serially.  This is equivalent to the
 .B \-As
 options.
 .PP
@@ -70,7 +70,7 @@ is the sum of the following conditions:
 .br
 \      128\    \-\ Shared library error
 .br
-The exit code returned when multiple file systems are checked 
+The exit code returned when multiple file systems are checked
 is the bit-wise OR of the exit codes for each
 file system that is checked.
 .PP
@@ -90,37 +90,37 @@ further details.
 .SH OPTIONS
 .TP
 .B \-s
-Serialize 
-.B fsck 
+Serialize
+.B fsck
 operations.  This is a good idea if you are checking multiple
 filesystems and the checkers are in an interactive mode.  (Note:
 .BR e2fsck (8)
-runs in an interactive mode by default.  To make 
+runs in an interactive mode by default.  To make
 .BR e2fsck (8)
 run in a non-interactive mode, you must either specify the
 .B \-p
 or
 .B \-a
-option, if you wish for errors to be corrected automatically, or the 
+option, if you wish for errors to be corrected automatically, or the
 .B \-n
 option if you do not.)
 .TP
 .BI \-t " fslist"
 Specifies the type(s) of file system to be checked.  When the
-.B \-A 
-flag is specified, only filesystems that match 
+.B \-A
+flag is specified, only filesystems that match
 .I fslist
 are checked.  The
 .I fslist
 parameter is a comma-separated list of filesystems and options
 specifiers.  All of the filesystems in this comma-separated list may be
-prefixed by a negation operator 
+prefixed by a negation operator
 .RB ' no '
-or 
+or
 .RB ' ! ',
 which requests that only those filesystems not listed in
 .I fslist
-will be checked.  If all of the filesystems in 
+will be checked.  If all of the filesystems in
 .I fslist
 are not prefixed by a negation operator, then only those filesystems
 listed
@@ -130,18 +130,18 @@ will be checked.
 .sp
 Options specifiers may be included in the comma-separated
 .IR fslist .
-They must have the format 
+They must have the format
 .BI opts= fs-option\fR.
 If an options specifier is present, then only filesystems which contain
 .I fs-option
-in their mount options field of 
+in their mount options field of
 .B /etc/fstab
 will be checked.  If the options specifier is prefixed by a negation
-operator, then only 
+operator, then only
 those filesystems that do not have
 .I fs-option
 in their mount options field of
-.B /etc/fstab 
+.B /etc/fstab
 will be checked.
 .sp
 For example, if
@@ -149,7 +149,7 @@ For example, if
 appears in
 .IR fslist ,
 then only filesystems listed in
-.B /etc/fstab 
+.B /etc/fstab
 with the
 .B ro
 option will be checked.
@@ -169,16 +169,16 @@ option.
 .sp
 Normally, the filesystem type is deduced by searching for
 .I filesys
-in the 
-.I /etc/fstab 
+in the
+.I /etc/fstab
 file and using the corresponding entry.
-If the type can not be deduced, and there is only a single filesystem 
-given as an argument to the 
-.B \-t 
-option, 
+If the type can not be deduced, and there is only a single filesystem
+given as an argument to the
+.B \-t
+option,
 .B fsck
 will use the specified filesystem type.  If this type is not
-available, then the default file system type (currently ext2) is used. 
+available, then the default file system type (currently ext2) is used.
 .TP
 .B \-A
 Walk through the
@@ -191,27 +191,27 @@ a single file system.
 .sp
 The root filesystem will be checked first unless the
 .B \-P
-option is specified (see below).  After that, 
-filesystems will be checked in the order specified by the 
-.I fs_passno 
-(the sixth) field in the 
+option is specified (see below).  After that,
+filesystems will be checked in the order specified by the
+.I fs_passno
+(the sixth) field in the
 .I /etc/fstab
-file.  
-Filesystems with a 
+file.
+Filesystems with a
 .I fs_passno
 value of 0 are skipped and are not checked at all.  Filesystems with a
 .I fs_passno
-value of greater than zero will be checked in order, 
+value of greater than zero will be checked in order,
 with filesystems with the lowest
-.I fs_passno 
+.I fs_passno
 number being checked first.
-If there are multiple filesystems with the same pass number, 
-fsck will attempt to check them in parallel, although it will avoid running 
-multiple filesystem checks on the same physical disk.  
+If there are multiple filesystems with the same pass number,
+fsck will attempt to check them in parallel, although it will avoid running
+multiple filesystem checks on the same physical disk.
 .sp
-Hence, a very common configuration in 
+Hence, a very common configuration in
 .I /etc/fstab
-files is to set the root filesystem to have a 
+files is to set the root filesystem to have a
 .I fs_passno
 value of 1
 and to set all other filesystems to have a
@@ -226,9 +226,9 @@ machine in question is short on memory so that
 excessive paging is a concern.
 .TP
 .B \-C\fR [ \fI "fd" \fR ]
-Display completion/progress bars for those filesystem checkers (currently 
+Display completion/progress bars for those filesystem checkers (currently
 only for ext2 and ext3) which support them.   Fsck will manage the
-filesystem checkers so that only one of them will display  
+filesystem checkers so that only one of them will display
 a progress bar at a time.  GUI front-ends may specify a file descriptor
 .IR fd ,
 in which case the progress bar information will be sent to that file descriptor.
@@ -241,12 +241,12 @@ for mounted filesystems.
 Don't execute, just show what would be done.
 .TP
 .B \-P
-When the 
+When the
 .B \-A
 flag is set, check the root filesystem in parallel with the other filesystems.
 This is not the safest thing in the world to do,
-since if the root filesystem is in doubt things like the 
-.BR e2fsck (8) 
+since if the root filesystem is in doubt things like the
+.BR e2fsck (8)
 executable might be corrupted!  This option is mainly provided
 for those sysadmins who don't want to repartition the root
 filesystem to be small and compact (which is really the right solution).
@@ -264,12 +264,12 @@ Produce verbose output, including all file system-specific commands
 that are executed.
 .TP
 .B fs-specific-options
-Options which are not understood by 
-.B fsck 
+Options which are not understood by
+.B fsck
 are passed to the filesystem-specific checker.  These arguments
 .B must
 not take arguments, as there is no
-way for 
+way for
 .B fsck
 to be able to properly guess which arguments take options and which
 don't.
@@ -282,13 +282,13 @@ file system-specific checker.
 Please note that fsck is not
 designed to pass arbitrarily complicated options to filesystem-specific
 checkers.  If you're doing something complicated, please just
-execute the filesystem-specific checker directly.  If you pass 
+execute the filesystem-specific checker directly.  If you pass
 .B fsck
 some horribly complicated option and arguments, and it doesn't do
-what you expect, 
+what you expect,
 .B don't bother reporting it as a bug.
 You're almost certainly doing something that you shouldn't be doing
-with 
+with
 .BR fsck.
 .PP
 Options to different filesystem-specific fsck's are not standardized.
@@ -298,46 +298,46 @@ by most file system checkers:
 .TP
 .B \-a
 Automatically repair the file system without any questions (use
-this option with caution).  Note that 
+this option with caution).  Note that
 .BR e2fsck (8)
-supports 
+supports
 .B \-a
-for backwards compatibility only.  This option is mapped to 
+for backwards compatibility only.  This option is mapped to
 .BR e2fsck 's
 .B \-p
-option which is safe to use, unlike the 
-.B \-a 
+option which is safe to use, unlike the
+.B \-a
 option that some file system checkers support.
 .TP
 .B \-n
-For some filesystem-specific checkers, the 
+For some filesystem-specific checkers, the
 .B \-n
-option will cause the fs-specific fsck to avoid attempting to repair any 
+option will cause the fs-specific fsck to avoid attempting to repair any
 problems, but simply report such problems to stdout.  This is however
-not true for all filesystem-specific checkers.  In particular, 
+not true for all filesystem-specific checkers.  In particular,
 .BR fsck.reiserfs (8)
 will not report any corruption if given this option.
 .BR fsck.minix (8)
-does not support the 
-.B \-n 
+does not support the
+.B \-n
 option at all.
 .TP
 .B \-r
 Interactively repair the filesystem (ask for confirmations).  Note: It
 is generally a bad idea to use this option if multiple fsck's are being
-run in parallel.  Also note that this is 
+run in parallel.  Also note that this is
 .BR e2fsck 's
 default behavior; it supports this option for backwards compatibility
 reasons only.
 .TP
 .B \-y
-For some filesystem-specific checkers, the 
-.B \-y 
+For some filesystem-specific checkers, the
+.B \-y
 option will cause the fs-specific fsck to always attempt to fix any
 detected filesystem corruption automatically.  Sometimes an expert may
-be able to do better driving the fsck manually.  Note that 
+be able to do better driving the fsck manually.  Note that
 .B not
-all filesystem-specific checkers implement this option.  In particular 
+all filesystem-specific checkers implement this option.  In particular
 .BR fsck.minix (8)
 and
 .BR fsck.cramfs (8)
@@ -354,7 +354,7 @@ The
 program's behavior is affected by the following environment variables:
 .TP
 .B FSCK_FORCE_ALL_PARALLEL
-If this environment variable is set, 
+If this environment variable is set,
 .B fsck
 will attempt to run all of the specified filesystems in parallel,
 regardless of whether the filesystems appear to be on the same
@@ -364,7 +364,7 @@ such as those sold by companies such as IBM or EMC.)
 .B FSCK_MAX_INST
 This environment variable will limit the maximum number of file system
 checkers that can be running at one time.  This allows configurations
-which have a large number of disks to avoid 
+which have a large number of disks to avoid
 .B fsck
 starting too many file system checkers at once, which might overload
 CPU and memory resources available on the system.  If this value is
@@ -375,23 +375,23 @@ may attempt to automatically determine how many file system checks can
 be run based on gathering accounting data from the operating system.
 .TP
 .B PATH
-The 
+The
 .B PATH
 environment variable is used to find file system checkers.  A set of
-system directories are searched first: 
+system directories are searched first:
 .BR /sbin ,
 .BR /sbin/fs.d ,
 .BR  /sbin/fs ,
 .BR /etc/fs ,
-and 
+and
 .BR /etc .
 Then the set of directories found in the
 .B PATH
 environment are searched.
 .TP
 .B FSTAB_FILE
-This environment variable allows the system administrator 
-to override the standard location of the 
+This environment variable allows the system administrator
+to override the standard location of the
 .B /etc/fstab
 file.  It is also useful for developers who are testing
 .BR fsck .
index 7c93ee8..4efe10e 100644 (file)
@@ -408,8 +408,12 @@ static char *find_fsck(char *type)
   tpl = (strncmp(type, "fsck.", 5) ? "%s/fsck.%s" : "%s/%s");
 
   for(s = strtok(p, ":"); s; s = strtok(NULL, ":")) {
-       sprintf(prog, tpl, s, type);
-       if (stat(prog, &st) == 0) break;
+         int len = snprintf(prog, sizeof(prog), tpl, s, type);
+
+         if ((len < 0) || (len >= (int) sizeof(prog)))
+                 continue;
+         if (stat(prog, &st) == 0)
+                 break;
   }
   free(p);
   return(s ? prog : NULL);
@@ -435,17 +439,20 @@ static int progress_active(NOARGS)
 static int execute(const char *type, const char *device, const char *mntpt,
                   int interactive)
 {
-       char *s, *argv[80], prog[80];
-       int  argc, i;
+       char *s, *argv[80], prog[256];
+       int  argc, i, len;
        struct fsck_instance *inst, *p;
        pid_t   pid;
 
+       len = snprintf(prog, sizeof(prog), "fsck.%s", type);
+       if ((len < 0) || (len >= (int) sizeof(prog)))
+               return EINVAL;
+
        inst = malloc(sizeof(struct fsck_instance));
        if (!inst)
                return ENOMEM;
        memset(inst, 0, sizeof(struct fsck_instance));
 
-       sprintf(prog, "fsck.%s", type);
        argv[0] = string_copy(prog);
        argc = 1;
 
@@ -997,7 +1004,7 @@ static int check_all(NOARGS)
        }
        /*
         * This is for the bone-headed user who enters the root
-        * filesystem twice.  Skip root will skep all root entries.
+        * filesystem twice.  Skip root will skip all root entries.
         */
        if (skip_root)
                for (fs = filesys_info; fs; fs = fs->next)
index 8a0f70e..8a55fbd 100644 (file)
@@ -34,7 +34,7 @@
 #define EXIT_LIBRARY     128
 
 /*
- * Internal structure for mount tabel entries.
+ * Internal structure for mount table entries.
  */
 
 struct fs_info {
diff --git a/misc/fsmap.h b/misc/fsmap.h
new file mode 100644 (file)
index 0000000..e9590aa
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2017 Oracle.
+ * All Rights Reserved.
+ *
+ * Author: Darrick J. Wong <darrick.wong@oracle.com>
+ *
+ * This program 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.
+ *
+ * This program is distributed in the hope that it would 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, write the Free Software Foundation,
+ * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+#ifndef FSMAP_H_
+#define FSMAP_H_
+
+/* FS_IOC_GETFSMAP ioctl definitions */
+#ifndef FS_IOC_GETFSMAP
+struct fsmap {
+       __u32           fmr_device;     /* device id */
+       __u32           fmr_flags;      /* mapping flags */
+       __u64           fmr_physical;   /* device offset of segment */
+       __u64           fmr_owner;      /* owner id */
+       __u64           fmr_offset;     /* file offset of segment */
+       __u64           fmr_length;     /* length of segment */
+       __u64           fmr_reserved[3];        /* must be zero */
+};
+
+struct fsmap_head {
+       __u32           fmh_iflags;     /* control flags */
+       __u32           fmh_oflags;     /* output flags */
+       __u32           fmh_count;      /* # of entries in array incl. input */
+       __u32           fmh_entries;    /* # of entries filled in (output). */
+       __u64           fmh_reserved[6];        /* must be zero */
+
+       struct fsmap    fmh_keys[2];    /* low and high keys for the mapping search */
+       struct fsmap    fmh_recs[];     /* returned records */
+};
+
+/* Size of an fsmap_head with room for nr records. */
+static inline size_t
+fsmap_sizeof(
+       unsigned int    nr)
+{
+       return sizeof(struct fsmap_head) + nr * sizeof(struct fsmap);
+}
+
+/* Start the next fsmap query at the end of the current query results. */
+static inline void
+fsmap_advance(
+       struct fsmap_head       *head)
+{
+       head->fmh_keys[0] = head->fmh_recs[head->fmh_entries - 1];
+}
+
+/*     fmh_iflags values - set by FS_IOC_GETFSMAP caller in the header. */
+/* no flags defined yet */
+#define FMH_IF_VALID           0
+
+/*     fmh_oflags values - returned in the header segment only. */
+#define FMH_OF_DEV_T           0x1     /* fmr_device values will be dev_t */
+
+/*     fmr_flags values - returned for each non-header segment */
+#define FMR_OF_PREALLOC                0x1     /* segment = unwritten pre-allocation */
+#define FMR_OF_ATTR_FORK       0x2     /* segment = attribute fork */
+#define FMR_OF_EXTENT_MAP      0x4     /* segment = extent map */
+#define FMR_OF_SHARED          0x8     /* segment = shared with another file */
+#define FMR_OF_SPECIAL_OWNER   0x10    /* owner is a special value */
+#define FMR_OF_LAST            0x20    /* segment is the last in the FS */
+
+/* Each FS gets to define its own special owner codes. */
+#define FMR_OWNER(type, code)  (((__u64)type << 32) | \
+                                ((__u64)code & 0xFFFFFFFFULL))
+#define FMR_OWNER_TYPE(owner)  ((__u32)((__u64)owner >> 32))
+#define FMR_OWNER_CODE(owner)  ((__u32)(((__u64)owner & 0xFFFFFFFFULL)))
+#define FMR_OWN_FREE           FMR_OWNER(0, 1) /* free space */
+#define FMR_OWN_UNKNOWN                FMR_OWNER(0, 2) /* unknown owner */
+#define FMR_OWN_METADATA       FMR_OWNER(0, 3) /* metadata */
+
+#define FS_IOC_GETFSMAP                _IOWR('X', 59, struct fsmap_head)
+#endif /* FS_IOC_GETFSMAP */
+
+#endif
index 4ed37df..1a0c9d5 100644 (file)
@@ -42,9 +42,15 @@ dump core on error
 \fB-o\fR minixdf
 minix-style df
 .TP
+\fB-o\fR fakeroot
+pretend to be root for permission checks
+.TP
 \fB-o\fR no_default_opts
 do not include default fuse options
 .TP
+\fB-o\fR norecovery
+do not replay the journal and mount the file system read-only
+.TP
 \fB-o\fR fuse2fs_debug
 enable fuse2fs debugging
 .SS "FUSE options:"
index b589768..c595721 100644 (file)
@@ -19,7 +19,7 @@
 # include <linux/fs.h>
 # include <linux/falloc.h>
 # include <linux/xattr.h>
-# define FUSE_PLATFORM_OPTS    ",nonempty,big_writes"
+# define FUSE_PLATFORM_OPTS    ",big_writes"
 # ifdef HAVE_SYS_ACL_H
 #  define TRANSLATE_LINUX_ACLS
 # endif
@@ -118,7 +118,14 @@ typedef struct {
 
 typedef struct {
        u_int32_t       a_version;
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
        acl_ea_entry    a_entries[0];
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic pop
+#endif
 } acl_ea_header;
 
 static inline size_t acl_ea_size(int count)
@@ -315,7 +322,9 @@ struct fuse2fs {
        int no_default_opts;
        int panic_on_error;
        int minixdf;
+       int fakeroot;
        int alloc_all_blocks;
+       int norecovery;
        FILE *err_fp;
        unsigned int next_generation;
 };
@@ -623,6 +632,7 @@ static int fs_writeable(ext2_filsys fs)
 static int check_inum_access(ext2_filsys fs, ext2_ino_t ino, mode_t mask)
 {
        struct fuse_context *ctxt = fuse_get_context();
+       struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data;
        struct ext2_inode inode;
        mode_t perms;
        errcode_t err;
@@ -639,8 +649,8 @@ static int check_inum_access(ext2_filsys fs, ext2_ino_t ino, mode_t mask)
        dbg_printf("access ino=%d mask=e%s%s%s perms=0%o fuid=%d fgid=%d "
                   "uid=%d gid=%d\n", ino,
                   (mask & R_OK ? "r" : ""), (mask & W_OK ? "w" : ""),
-                  (mask & X_OK ? "x" : ""), perms, inode.i_uid, inode.i_gid,
-                  ctxt->uid, ctxt->gid);
+                  (mask & X_OK ? "x" : ""), perms, inode_uid(inode),
+                  inode_gid(inode), ctxt->uid, ctxt->gid);
 
        /* existence check */
        if (mask == 0)
@@ -652,7 +662,7 @@ static int check_inum_access(ext2_filsys fs, ext2_ino_t ino, mode_t mask)
                return -EACCES;
 
        /* Figure out what root's allowed to do */
-       if (ctxt->uid == 0) {
+       if (ff->fakeroot || ctxt->uid == 0) {
                /* Non-file access always ok */
                if (!LINUX_S_ISREG(inode.i_mode))
                        return 0;
@@ -670,14 +680,14 @@ static int check_inum_access(ext2_filsys fs, ext2_ino_t ino, mode_t mask)
        }
 
        /* allow owner, if perms match */
-       if (inode.i_uid == ctxt->uid) {
+       if (inode_uid(inode) == ctxt->uid) {
                if ((mask & (perms >> 6)) == mask)
                        return 0;
                return -EACCES;
        }
 
        /* allow group, if perms match */
-       if (inode.i_gid == ctxt->gid) {
+       if (inode_gid(inode) == ctxt->gid) {
                if ((mask & (perms >> 3)) == mask)
                        return 0;
                return -EACCES;
@@ -745,23 +755,6 @@ static void *op_init(struct fuse_conn_info *conn)
        return ff;
 }
 
-static blkcnt_t blocks_from_inode(ext2_filsys fs,
-                                 struct ext2_inode_large *inode)
-{
-       blkcnt_t b;
-
-       b = inode->i_blocks;
-       if (ext2fs_has_feature_huge_file(fs->super))
-               b += ((long long) inode->osd2.linux2.l_i_blocks_hi) << 32;
-
-       if (!ext2fs_has_feature_huge_file(fs->super) ||
-           !(inode->i_flags & EXT4_HUGE_FILE_FL))
-               b *= fs->blocksize / 512;
-       b *= EXT2FS_CLUSTER_RATIO(fs);
-
-       return b;
-}
-
 static int stat_inode(ext2_filsys fs, ext2_ino_t ino, struct stat *statbuf)
 {
        struct ext2_inode_large inode;
@@ -781,11 +774,12 @@ static int stat_inode(ext2_filsys fs, ext2_ino_t ino, struct stat *statbuf)
        statbuf->st_ino = ino;
        statbuf->st_mode = inode.i_mode;
        statbuf->st_nlink = inode.i_links_count;
-       statbuf->st_uid = inode.i_uid;
-       statbuf->st_gid = inode.i_gid;
+       statbuf->st_uid = inode_uid(inode);
+       statbuf->st_gid = inode_gid(inode);
        statbuf->st_size = EXT2_I_SIZE(&inode);
        statbuf->st_blksize = fs->blocksize;
-       statbuf->st_blocks = blocks_from_inode(fs, &inode);
+       statbuf->st_blocks = ext2fs_get_stat_i_blocks(fs,
+                                               (struct ext2_inode *)&inode);
        EXT4_INODE_GET_XTIME(i_atime, &tv, &inode);
        statbuf->st_atime = tv.tv_sec;
        EXT4_INODE_GET_XTIME(i_mtime, &tv, &inode);
@@ -863,8 +857,9 @@ static int op_readlink(const char *path, char *buf, size_t len)
        len--;
        if (inode.i_size < len)
                len = inode.i_size;
-       if (ext2fs_inode_data_blocks2(fs, &inode) ||
-           (inode.i_flags & EXT4_INLINE_DATA_FL)) {
+       if (ext2fs_is_fast_symlink(&inode))
+               memcpy(buf, (char *)inode.i_block, len);
+       else {
                /* big/inline symlink */
 
                err = ext2fs_file_open(fs, ino, 0, &file);
@@ -888,9 +883,7 @@ out2:
                        ret = translate_error(fs, ino, err);
                        goto out;
                }
-       } else
-               /* inline symlink */
-               memcpy(buf, (char *)inode.i_block, len);
+       }
        buf[len] = 0;
 
        if (fs_writeable(fs)) {
@@ -1006,7 +999,9 @@ static int op_mknod(const char *path, mode_t mode, dev_t dev)
        inode.i_extra_isize = sizeof(struct ext2_inode_large) -
                EXT2_GOOD_OLD_INODE_SIZE;
        inode.i_uid = ctxt->uid;
+       ext2fs_set_i_uid_high(inode, ctxt->uid >> 16);
        inode.i_gid = ctxt->gid;
+       ext2fs_set_i_gid_high(inode, ctxt->gid >> 16);
 
        err = ext2fs_write_new_inode(fs, child, (struct ext2_inode *)&inode);
        if (err) {
@@ -1130,7 +1125,9 @@ static int op_mkdir(const char *path, mode_t mode)
        }
 
        inode.i_uid = ctxt->uid;
+       ext2fs_set_i_uid_high(inode, ctxt->uid >> 16);
        inode.i_gid = ctxt->gid;
+       ext2fs_set_i_gid_high(inode, ctxt->gid >> 16);
        inode.i_mode = LINUX_S_IFDIR | (mode & ~(S_ISUID | fs->umask)) |
                       parent_sgid;
        inode.i_generation = ff->next_generation++;
@@ -1503,7 +1500,9 @@ static int op_symlink(const char *src, const char *dest)
        }
 
        inode.i_uid = ctxt->uid;
+       ext2fs_set_i_uid_high(inode, ctxt->uid >> 16);
        inode.i_gid = ctxt->gid;
+       ext2fs_set_i_gid_high(inode, ctxt->gid >> 16);
        inode.i_generation = ff->next_generation++;
 
        err = ext2fs_write_inode_full(fs, child, (struct ext2_inode *)&inode,
@@ -1899,7 +1898,7 @@ static int op_chmod(const char *path, mode_t mode)
                goto out;
        }
 
-       if (ctxt->uid != 0 && ctxt->uid != inode.i_uid) {
+       if (!ff->fakeroot && ctxt->uid != 0 && ctxt->uid != inode_uid(inode)) {
                ret = -EPERM;
                goto out;
        }
@@ -1909,7 +1908,7 @@ static int op_chmod(const char *path, mode_t mode)
         * of the user's groups, but FUSE only tells us about the primary
         * group.
         */
-       if (ctxt->uid != 0 && ctxt->gid != inode.i_gid)
+       if (!ff->fakeroot && ctxt->uid != 0 && ctxt->gid != inode_gid(inode))
                mode &= ~S_ISGID;
 
        inode.i_mode &= ~0xFFF;
@@ -1962,23 +1961,26 @@ static int op_chown(const char *path, uid_t owner, gid_t group)
        /* FUSE seems to feed us ~0 to mean "don't change" */
        if (owner != (uid_t) ~0) {
                /* Only root gets to change UID. */
-               if (ctxt->uid != 0 &&
-                   !(inode.i_uid == ctxt->uid && owner == ctxt->uid)) {
+               if (!ff->fakeroot && ctxt->uid != 0 &&
+                   !(inode_uid(inode) == ctxt->uid && owner == ctxt->uid)) {
                        ret = -EPERM;
                        goto out;
                }
                inode.i_uid = owner;
+               ext2fs_set_i_uid_high(inode, owner >> 16);
        }
 
        if (group != (gid_t) ~0) {
                /* Only root or the owner get to change GID. */
-               if (ctxt->uid != 0 && inode.i_uid != ctxt->uid) {
+               if (!ff->fakeroot && ctxt->uid != 0 &&
+                   inode_uid(inode) != ctxt->uid) {
                        ret = -EPERM;
                        goto out;
                }
 
                /* XXX: We /should/ check group membership but FUSE */
                inode.i_gid = group;
+               ext2fs_set_i_gid_high(inode, group >> 16);
        }
 
        ret = update_ctime(fs, ino, &inode);
@@ -2356,7 +2358,7 @@ static int op_statfs(const char *path EXT2FS_ATTR((unused)),
                overhead = 0;
        else
                overhead = fs->desc_blocks +
-                          fs->group_desc_count *
+                          (blk64_t)fs->group_desc_count *
                           (fs->inode_blocks_per_group + 2);
        reserved = ext2fs_r_blocks_count(fs->super);
        if (!reserved)
@@ -2654,12 +2656,6 @@ static int op_setxattr(const char *path EXT2FS_ATTR((unused)),
                goto out3;
        }
 
-       err = ext2fs_xattrs_write(h);
-       if (err) {
-               ret = translate_error(fs, ino, err);
-               goto out3;
-       }
-
        ret = update_ctime(fs, ino, NULL);
 out3:
        if (cvalue != value)
@@ -2726,12 +2722,6 @@ static int op_removexattr(const char *path, const char *key)
                goto out2;
        }
 
-       err = ext2fs_xattrs_write(h);
-       if (err) {
-               ret = translate_error(fs, ino, err);
-               goto out2;
-       }
-
        ret = update_ctime(fs, ino, NULL);
 out2:
        err = ext2fs_xattrs_close(&h);
@@ -2918,7 +2908,9 @@ static int op_create(const char *path, mode_t mode, struct fuse_file_info *fp)
        inode.i_extra_isize = sizeof(struct ext2_inode_large) -
                EXT2_GOOD_OLD_INODE_SIZE;
        inode.i_uid = ctxt->uid;
+       ext2fs_set_i_uid_high(inode, ctxt->uid >> 16);
        inode.i_gid = ctxt->gid;
+       ext2fs_set_i_gid_high(inode, ctxt->gid >> 16);
        if (ext2fs_has_feature_extents(fs->super)) {
                ext2_extent_handle_t handle;
 
@@ -3126,6 +3118,7 @@ static int ioctl_setflags(ext2_filsys fs, struct fuse2fs_file_handle *fh,
        int ret;
        __u32 flags = *(__u32 *)data;
        struct fuse_context *ctxt = fuse_get_context();
+       struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data;
 
        FUSE2FS_CHECK_MAGIC(fs, fh, FUSE2FS_FILE_MAGIC);
        dbg_printf("%s: ino=%d\n", __func__, fh->ino);
@@ -3135,7 +3128,7 @@ static int ioctl_setflags(ext2_filsys fs, struct fuse2fs_file_handle *fh,
        if (err)
                return translate_error(fs, fh->ino, err);
 
-       if (ctxt->uid != 0 && inode.i_uid != ctxt->uid)
+       if (!ff->fakeroot && ctxt->uid != 0 && inode_uid(inode) != ctxt->uid)
                return -EPERM;
 
        if ((inode.i_flags ^ flags) & ~FUSE2FS_MODIFIABLE_IFLAGS)
@@ -3182,6 +3175,7 @@ static int ioctl_setversion(ext2_filsys fs, struct fuse2fs_file_handle *fh,
        int ret;
        __u32 generation = *(__u32 *)data;
        struct fuse_context *ctxt = fuse_get_context();
+       struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data;
 
        FUSE2FS_CHECK_MAGIC(fs, fh, FUSE2FS_FILE_MAGIC);
        dbg_printf("%s: ino=%d\n", __func__, fh->ino);
@@ -3191,7 +3185,7 @@ static int ioctl_setversion(ext2_filsys fs, struct fuse2fs_file_handle *fh,
        if (err)
                return translate_error(fs, fh->ino, err);
 
-       if (ctxt->uid != 0 && inode.i_uid != ctxt->uid)
+       if (!ff->fakeroot && ctxt->uid != 0 && inode_uid(inode) != ctxt->uid)
                return -EPERM;
 
        inode.i_generation = generation;
@@ -3661,8 +3655,10 @@ static struct fuse_opt fuse2fs_opts[] = {
        FUSE2FS_OPT("ro",               ro,                     1),
        FUSE2FS_OPT("errors=panic",     panic_on_error,         1),
        FUSE2FS_OPT("minixdf",          minixdf,                1),
+       FUSE2FS_OPT("fakeroot",         fakeroot,               1),
        FUSE2FS_OPT("fuse2fs_debug",    debug,                  1),
        FUSE2FS_OPT("no_default_opts",  no_default_opts,        1),
+       FUSE2FS_OPT("norecovery",       norecovery,             1),
 
        FUSE_OPT_KEY("-V",             FUSE2FS_VERSION),
        FUSE_OPT_KEY("--version",      FUSE2FS_VERSION),
@@ -3699,7 +3695,9 @@ static int fuse2fs_opt_proc(void *data, const char *arg,
        "    -o ro                  read-only mount\n"
        "    -o errors=panic        dump core on error\n"
        "    -o minixdf             minix-style df\n"
+       "    -o fakeroot            pretend to be root for permission checks\n"
        "    -o no_default_opts     do not include default fuse options\n"
+       "    -o norecovery          don't replay the journal (implies ro)\n"
        "    -o fuse2fs_debug       enable fuse2fs debugging\n"
        "\n",
                        outargs->argv[0]);
@@ -3729,7 +3727,8 @@ int main(int argc, char *argv[])
        errcode_t err;
        char *logfile;
        char extra_args[BUFSIZ];
-       int ret = 0, flags = EXT2_FLAG_64BITS | EXT2_FLAG_EXCLUSIVE;
+       int ret = 0;
+       int flags = EXT2_FLAG_64BITS | EXT2_FLAG_THREADS | EXT2_FLAG_EXCLUSIVE;
 
        memset(&fctx, 0, sizeof(fctx));
        fctx.magic = FUSE2FS_MAGIC;
@@ -3741,6 +3740,8 @@ int main(int argc, char *argv[])
                exit(1);
        }
 
+       if (fctx.norecovery)
+               fctx.ro = 1;
        if (fctx.ro)
                printf("%s", _("Mounting read-only.\n"));
 
@@ -3759,7 +3760,7 @@ int main(int argc, char *argv[])
                fctx.err_fp = fopen(logfile, "a");
                if (!fctx.err_fp) {
                        perror(logfile);
-                       goto out_nofs;
+                       goto out;
                }
        } else
                fctx.err_fp = stderr;
@@ -3780,14 +3781,19 @@ int main(int argc, char *argv[])
        if (err) {
                printf(_("%s: %s.\n"), fctx.device, error_message(err));
                printf(_("Please run e2fsck -fy %s.\n"), fctx.device);
-               goto out_nofs;
+               goto out;
        }
        fctx.fs = global_fs;
        global_fs->priv_data = &fctx;
 
        ret = 3;
+
        if (ext2fs_has_feature_journal_needs_recovery(global_fs->super)) {
-               if (!fctx.ro) {
+               if (fctx.norecovery) {
+                       printf(_("%s: mounting read-only without "
+                                "recovering journal\n"),
+                              fctx.device);
+               } else if (!fctx.ro) {
                        printf(_("%s: recovering journal\n"), fctx.device);
                        err = ext2fs_run_ext3_journal(&global_fs);
                        if (err) {
@@ -3850,10 +3856,19 @@ int main(int argc, char *argv[])
        /* Set up default fuse parameters */
        snprintf(extra_args, BUFSIZ, "-okernel_cache,subtype=ext4,use_ino,"
                 "fsname=%s,attr_timeout=0" FUSE_PLATFORM_OPTS,
-                argv[1]);
+                fctx.device);
        if (fctx.no_default_opts == 0)
                fuse_opt_add_arg(&args, extra_args);
 
+       if (fctx.fakeroot) {
+#ifdef HAVE_MOUNT_NODEV
+               fuse_opt_add_arg(&args,"-onodev");
+#endif
+#ifdef HAVE_MOUNT_NOSUID
+               fuse_opt_add_arg(&args,"-onosuid");
+#endif
+       }
+
        if (fctx.debug) {
                int     i;
 
@@ -3869,12 +3884,12 @@ int main(int argc, char *argv[])
 
        ret = 0;
 out:
-       err = ext2fs_close(global_fs);
-       if (err)
-               com_err(argv[0], err, "while closing fs");
-       global_fs = NULL;
-out_nofs:
-
+       if (global_fs) {
+               err = ext2fs_close(global_fs);
+               if (err)
+                       com_err(argv[0], err, "while closing fs");
+               global_fs = NULL;
+       }
        return ret;
 }
 
index f0fbe41..cc3ffde 100644 (file)
@@ -1,7 +1,7 @@
 .\" -*- nroff -*-
 .\" Copyright 2003 by Theodore Ts'o.  All Rights Reserved.
 .\" This file may be copied under the terms of the GNU Public License.
-.\" 
+.\"
 .TH LOGSAVE 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
 logsave \- save the output of a command in a logfile
@@ -15,17 +15,17 @@ logsave \- save the output of a command in a logfile
 The
 .B logsave
 program will execute
-.I cmd_prog 
+.I cmd_prog
 with the specified argument(s), and save a copy of its output to
 .IR logfile .
 If the containing directory for
 .I logfile
-does not exist, 
+does not exist,
 .B logsave
 will accumulate the output in memory until it can be written out.
 A copy of the output will also be written to standard output.
 .PP
-If 
+If
 .I cmd_prog
 is a single hyphen ('-'), then instead of executing a program,
 .B logsave
@@ -33,20 +33,20 @@ will take its input from standard input and save it in
 .I logfile
 .PP
 .B logsave
-is useful for saving the output of initial boot scripts 
-until the /var partition is mounted, so the output can be written to 
+is useful for saving the output of initial boot scripts
+until the /var partition is mounted, so the output can be written to
 /var/log.
 .SH OPTIONS
 .TP
 .B \-a
-This option will cause the output to be appended to 
+This option will cause the output to be appended to
 .IR logfile ,
 instead of replacing its current contents.
 .TP
 .B \-s
-This option will cause 
+This option will cause
 .B logsave
-to skip writing to the log file text which is bracketed with a control-A 
+to skip writing to the log file text which is bracketed with a control-A
 (ASCII 001 or Start of Header) and control-B (ASCII 002 or Start of
 Text).  This allows progress bar information to be visible to the user
 on the console, while not being written to the log file.
index 6a624de..96b6d8e 100644 (file)
@@ -52,7 +52,7 @@ static void usage(char *progname)
 
 /*
  * Helper function that does the right thing if write returns a
- * partial write, or an EGAIN/EINTR error.
+ * partial write, or an EAGAIN/EINTR error.
  */
 static int write_all(int fd, const char *buf, size_t count)
 {
index bb15769..4d02a95 100644 (file)
@@ -30,8 +30,8 @@ List all files in directories, including files that start with `.'.
 List directories like other files, rather than listing their contents.
 .TP
 .B \-l
-Print the options using a long names instead of a single
-character abbreviation.
+Print the options using long names instead of single
+character abbreviations.
 .TP
 .B \-p
 List the file's project number.
index 71a15c5..24acca8 100644 (file)
@@ -32,9 +32,14 @@ extern int optind;
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
 #endif
+#ifdef HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
+#endif
 #include <sys/types.h>
 #include <sys/stat.h>
+#ifdef HAVE_SYS_SYSMACROS_H
+#include <sys/sysmacros.h>
+#endif
 #include <libgen.h>
 #include <limits.h>
 #include <blkid/blkid.h>
@@ -63,7 +68,7 @@ static char *fn_buf;
 static char *fn_numbuf;
 int zero_hugefile = 1;
 
-#define SYSFS_PATH_LEN 256
+#define SYSFS_PATH_LEN 300
 typedef char sysfs_path_t[SYSFS_PATH_LEN];
 
 #ifndef HAVE_SNPRINTF
@@ -259,7 +264,12 @@ static errcode_t mk_hugefile(ext2_filsys fs, blk64_t num,
 
 {
        errcode_t               retval;
+       blk64_t                 lblk, bend = 0;
+       __u64                   size;
+       blk64_t                 left;
+       blk64_t                 count = 0;
        struct ext2_inode       inode;
+       ext2_extent_handle_t    handle;
 
        retval = ext2fs_new_inode(fs, 0, LINUX_S_IFREG, NULL, ino);
        if (retval)
@@ -279,19 +289,93 @@ static errcode_t mk_hugefile(ext2_filsys fs, blk64_t num,
 
        ext2fs_inode_alloc_stats2(fs, *ino, +1, 0);
 
-       if (ext2fs_has_feature_extents(fs->super))
-               inode.i_flags |= EXT4_EXTENTS_FL;
-       retval = ext2fs_fallocate(fs,
-                                 EXT2_FALLOCATE_FORCE_INIT |
-                                 EXT2_FALLOCATE_ZERO_BLOCKS,
-                                 *ino, &inode, goal, 0, num);
+       retval = ext2fs_extent_open2(fs, *ino, &inode, &handle);
        if (retval)
                return retval;
-       retval = ext2fs_inode_size_set(fs, &inode, num * fs->blocksize);
+
+       /*
+        * We don't use ext2fs_fallocate() here because hugefiles are
+        * designed to be physically contiguous (if the block group
+        * descriptors are configured to be in a single block at the
+        * beginning of the file system, by using the
+        * packed_meta_blocks layout), with the extent tree blocks
+        * allocated near the beginning of the file system.
+        */
+       lblk = 0;
+       left = num ? num : 1;
+       while (left) {
+               blk64_t pblk, end;
+               blk64_t n = left;
+
+               retval =  ext2fs_find_first_zero_block_bitmap2(fs->block_map,
+                       goal, ext2fs_blocks_count(fs->super) - 1, &end);
+               if (retval)
+                       goto errout;
+               goal = end;
+
+               retval =  ext2fs_find_first_set_block_bitmap2(fs->block_map, goal,
+                              ext2fs_blocks_count(fs->super) - 1, &bend);
+               if (retval == ENOENT) {
+                       bend = ext2fs_blocks_count(fs->super);
+                       if (num == 0)
+                               left = 0;
+               }
+               if (!num || bend - goal < left)
+                       n = bend - goal;
+               pblk = goal;
+               if (num)
+                       left -= n;
+               goal += n;
+               count += n;
+               ext2fs_block_alloc_stats_range(fs, pblk, n, +1);
+
+               if (zero_hugefile) {
+                       blk64_t ret_blk;
+                       retval = ext2fs_zero_blocks2(fs, pblk, n,
+                                                    &ret_blk, NULL);
+
+                       if (retval)
+                               com_err(program_name, retval,
+                                       _("while zeroing block %llu "
+                                         "for hugefile"), ret_blk);
+               }
+
+               while (n) {
+                       blk64_t l = n;
+                       struct ext2fs_extent newextent;
+
+                       if (l > EXT_INIT_MAX_LEN)
+                               l = EXT_INIT_MAX_LEN;
+
+                       newextent.e_len = l;
+                       newextent.e_pblk = pblk;
+                       newextent.e_lblk = lblk;
+                       newextent.e_flags = 0;
+
+                       retval = ext2fs_extent_insert(handle,
+                                       EXT2_EXTENT_INSERT_AFTER, &newextent);
+                       if (retval)
+                               return retval;
+                       pblk += l;
+                       lblk += l;
+                       n -= l;
+               }
+       }
+
+       retval = ext2fs_read_inode(fs, *ino, &inode);
        if (retval)
-               return retval;
+               goto errout;
 
-       retval = ext2fs_write_inode(fs, *ino, &inode);
+       retval = ext2fs_iblk_add_blocks(fs, &inode,
+                                       count / EXT2FS_CLUSTER_RATIO(fs));
+       if (retval)
+               goto errout;
+       size = (__u64) count * fs->blocksize;
+       retval = ext2fs_inode_size_set(fs, &inode, size);
+       if (retval)
+               goto errout;
+
+       retval = ext2fs_write_new_inode(fs, *ino, &inode);
        if (retval)
                goto errout;
 
@@ -309,7 +393,13 @@ retry:
                goto retry;
        }
 
+       if (retval)
+               goto errout;
+
 errout:
+       if (handle)
+               ext2fs_extent_free(handle);
+
        return retval;
 }
 
@@ -337,7 +427,8 @@ static blk64_t calc_overhead(ext2_filsys fs, blk64_t num)
        e_blocks2 = (e_blocks + extents_per_block - 1) / extents_per_block;
        e_blocks3 = (e_blocks2 + extents_per_block - 1) / extents_per_block;
        e_blocks4 = (e_blocks3 + extents_per_block - 1) / extents_per_block;
-       return e_blocks + e_blocks2 + e_blocks3 + e_blocks4;
+       return (e_blocks + e_blocks2 + e_blocks3 + e_blocks4) *
+               EXT2FS_CLUSTER_RATIO(fs);
 }
 
 /*
@@ -477,7 +568,8 @@ errcode_t mk_hugefiles(ext2_filsys fs, const char *device_name)
                num_blocks = fs_blocks / num_files;
        }
 
-       num_slack += calc_overhead(fs, num_blocks) * num_files;
+       num_slack += (calc_overhead(fs, num_blocks ? num_blocks : fs_blocks) *
+                     num_files);
        num_slack += (num_files / 16) + 1; /* space for dir entries */
        goal = get_start_block(fs, num_slack);
        goal = round_up_align(goal, align, part_offset);
@@ -494,8 +586,6 @@ errcode_t mk_hugefiles(ext2_filsys fs, const char *device_name)
                        printf(_("with %llu blocks each"), num_blocks);
                fputs(": ", stdout);
        }
-       if (num_blocks == 0)
-               num_blocks = ext2fs_blocks_count(fs->super) - goal;
        for (i=0; i < num_files; i++) {
                ext2_ino_t ino;
 
index 9cb783f..84248ff 100644 (file)
@@ -18,6 +18,10 @@ mke2fs \- create an ext2/ext3/ext4 filesystem
 .I block-size
 ]
 [
+.B \-C
+.I cluster-size
+]
+[
 .B \-d
 .I root-directory
 ]
@@ -25,10 +29,6 @@ mke2fs \- create an ext2/ext3/ext4 filesystem
 .B \-D
 ]
 [
-.B \-f
-.I fragment-size
-]
-[
 .B \-g
 .I blocks-per-group
 ]
@@ -207,12 +207,14 @@ manual page for more details.
 .SH OPTIONS
 .TP
 .BI \-b " block-size"
-Specify the size of blocks in bytes.  Valid block-size values are 1024,
-2048 and 4096 bytes per block.  If omitted,
-block-size is heuristically determined by the filesystem size and
+Specify the size of blocks in bytes.  Valid block-size values are powers of two
+from 1024 up to 65536 (however note that the kernel is able to mount only
+filesystems with block-size smaller or equal to the system page size - 4k on
+x86 systems, up to 64k on ppc64 or aarch64 depending on kernel configuration).
+If omitted, block-size is heuristically determined by the filesystem size and
 the expected usage of the filesystem (see the
 .B \-T
-option).  If
+option).  In most common cases, the default block size is 4k. If
 .I block-size
 is preceded by a negative sign ('-'), then
 .B mke2fs
@@ -280,6 +282,31 @@ option is still accepted for backwards compatibility, but is deprecated.
 The following extended options are supported:
 .RS 1.2i
 .TP
+.BI encoding= encoding-name
+Enable the
+.I casefold
+feature in the super block and set
+.I encoding-name
+as the encoding to be used.  If
+.I encoding-name
+is not specified, the encoding defined in
+.BR mke2fs.conf (5)
+is used.
+.TP
+.BI encoding_flags= encoding-flags
+Define parameters for file name character encoding operations.  If a
+flag is not changed using this parameter, its default value is used.
+.I encoding-flags
+should be a comma-separated lists of flags to be enabled.  To disable a
+flag, add it to the list with the prefix "no".
+
+The only flag that can be set right now is
+.I strict
+which means that invalid strings should be rejected by the file system.
+In the default configuration, the
+.I strict
+flag is disabled.
+.TP
 .BI mmp_update_interval= interval
 Adjust the initial MMP update interval to
 .I interval
@@ -338,6 +365,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
+.B no_copy_xattrs
+Normally
+.B mke2fs
+will copy the extended attributes of the files in the directory
+hierarchy specified via the (optional)
+.B \-d
+option.  This will disable the copy and leaves the files in the newly
+created file system without any extended attributes.
+.TP
 .BI num_backup_sb= <0|1|2>
 If the
 .B sparse_super2
@@ -367,7 +403,7 @@ filesystem to change based on the user running \fBmke2fs\fR.
 Set a flag in the filesystem superblock indicating that it may be
 mounted using experimental kernel code, such as the ext4dev filesystem.
 .TP
-.BI discard
+.B discard
 Attempt to discard blocks at mkfs time (discarding blocks initially is useful
 on solid state devices and sparse / thin-provisioned storage). When the device
 advertises that discard also zeroes data (any subsequent read after the discard
@@ -375,10 +411,10 @@ and before write returns zero), then mark all not-yet-zeroed inode tables as
 zeroed. This significantly speeds up filesystem initialization. This is set
 as default.
 .TP
-.BI nodiscard
+.B nodiscard
 Do not attempt to discard blocks at mkfs time.
 .TP
-.BI quotatype
+.B quotatype
 Specify the which  quota types (usrquota, grpquota, prjquota) which
 should be enabled in the created file system.  The argument of this
 extended option should be a colon separated list.  This option has
@@ -389,9 +425,6 @@ option is not specified is both user and group quotas.  If the project
 feature is enabled that project quotas will be initialized as well.
 .RE
 .TP
-.BI \-f " fragment-size"
-Specify the size of fragments in bytes.
-.TP
 .B \-F
 Force
 .B mke2fs
@@ -424,7 +457,7 @@ Specify the number of block groups that will be packed together to
 create a larger virtual block group (or "flex_bg group") in an
 ext4 filesystem.  This improves meta-data locality and performance
 on meta-data heavy workloads.  The number of groups must be a power
-of 2 and may only be specified if the 
+of 2 and may only be specified if the
 .B flex_bg
 filesystem feature is enabled.
 .TP
@@ -440,7 +473,7 @@ be smaller than the blocksize of the filesystem, since in that case more
 inodes would be made than can ever be used.  Be warned that it is not
 possible to change this ratio on a filesystem after it is created, so be
 careful deciding the correct value for this parameter.  Note that resizing
-a filesystem changes the numer of inodes to maintain this ratio.
+a filesystem changes the number of inodes to maintain this ratio.
 .TP
 .BI \-I " inode-size"
 Specify the size of each inode in bytes.
@@ -453,13 +486,10 @@ space in the filesystem and can also negatively impact performance.
 It is not
 possible to change this value after the filesystem is created.
 .IP
-In kernels after 2.6.10 and some
-earlier vendor kernels it is possible to utilize inodes larger than
-128 bytes to store
-extended attributes for improved performance.
-Extended attributes
-stored in large inodes are not visible with older kernels, and such
-filesystems will not be mountable with 2.4 kernels at all.  
+File systems with an inode size of 128 bytes do not support timestamps
+beyond January 19, 2038.  Inodes which are 256 bytes or larger will
+support extended timestamps, project id's, and the ability to store some
+extended attributes in the inode table for improved performance.
 .IP
 The default inode size is controlled by the
 .BR mke2fs.conf (5)
@@ -493,6 +523,27 @@ The size of the journal must be at least 1024 filesystem blocks
 and may be no more than 10,240,000 filesystem blocks or half the total
 file system size (whichever is smaller)
 .TP
+.BI fast_commit_size= fast-commit-size
+Create an additional fast commit journal area of size
+.I fast-commit-size
+kilobytes.
+This option is only valid if
+.B fast_commit
+feature is enabled
+on the file system. If this option is not specified and if
+.B fast_commit
+feature is turned on, fast commit area size defaults to
+.I journal-size
+/ 64 megabytes. The total size of the journal with
+.B fast_commit
+feature set is
+.I journal-size
++ (
+.I fast-commit-size
+* 1024) megabytes. The total journal size may be no more than
+10,240,000 filesystem blocks or half the total file system size
+(whichever is smaller).
+.TP
 .BI location =journal-location
 Specify the location of the journal.  The argument
 .I journal-location
@@ -668,7 +719,7 @@ touching the inode table and the block and inode bitmaps.  The
 program should be run immediately after this option is used, and there
 is no guarantee that any data will be salvageable.  Due to the wide
 variety of possible options to
-.BR mke2fs
+.B mke2fs
 that affect the on-disk layout, it is critical to specify exactly
 the same format options, such as blocksize, fs-type, feature flags, and
 other tunables when using this option, or the filesystem will be further
@@ -745,7 +796,25 @@ will use the default filesystem type
 .IR default .
 .TP
 .BI \-U " UUID"
-Create the filesystem with the specified UUID.
+Set the universally unique identifier (UUID) of the filesystem to
+.IR UUID .
+The format of the UUID is a series of hex digits separated by hyphens,
+like this:
+"c1b9d5a2-f162-11cf-9ece-0020afc76f16".
+The
+.I UUID
+parameter may also be one of the following:
+.RS 1.2i
+.TP
+.I clear
+clear the filesystem UUID
+.TP
+.I random
+generate a new randomly-generated UUID
+.TP
+.I time
+generate a new time-based UUID
+.RE
 .TP
 .B \-v
 Verbose execution.
@@ -767,39 +836,36 @@ in the configuration file.
 WARNING: The undo file cannot be used to recover from a power or system crash.
 .SH ENVIRONMENT
 .TP
-.BI MKE2FS_SYNC
+.B MKE2FS_SYNC
 If set to non-zero integer value, its value is used to determine how often
 .BR sync (2)
 is called during inode table initialization.
 .TP
-.BI MKE2FS_CONFIG
+.B MKE2FS_CONFIG
 Determines the location of the configuration file (see
 .BR mke2fs.conf (5)).
 .TP
-.BI MKE2FS_FIRST_META_BG
+.B MKE2FS_FIRST_META_BG
 If set to non-zero integer value, its value is used to determine first meta
 block group. This is mostly for debugging purposes.
 .TP
-.BI MKE2FS_DEVICE_SECTSIZE
+.B MKE2FS_DEVICE_SECTSIZE
+If set to non-zero integer value, its value is used to determine logical
+sector size of the
+.IR device .
+.TP
+.B MKE2FS_DEVICE_PHYS_SECTSIZE
 If set to non-zero integer value, its value is used to determine physical
 sector size of the
 .IR device .
 .TP
-.BI MKE2FS_SKIP_CHECK_MSG
+.B MKE2FS_SKIP_CHECK_MSG
 If set, do not show the message of filesystem automatic check caused by
 mount count or check interval.
 .SH AUTHOR
 This version of
 .B mke2fs
 has been written by Theodore Ts'o <tytso@mit.edu>.
-.SH BUGS
-.B mke2fs
-accepts the
-.B \-f
-option but currently ignores it because the second
-extended file system does not support fragments yet.
-.br
-There may be other ones.  Please, report them to the author.
 .SH AVAILABILITY
 .B mke2fs
 is part of the e2fsprogs package and is available from
index 49c6e94..add441c 100644 (file)
@@ -16,7 +16,7 @@
  * enforced (but it's not much fun on a character device :-).
  */
 
-#define _XOPEN_SOURCE 600 /* for inclusion of PATH_MAX */
+#define _XOPEN_SOURCE 600
 
 #include "config.h"
 #include <stdio.h>
@@ -43,7 +43,9 @@ extern int optind;
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
 #endif
+#ifdef HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
+#endif
 #include <libgen.h>
 #include <limits.h>
 #include <blkid/blkid.h>
@@ -91,8 +93,10 @@ static uid_t root_uid;
 static gid_t   root_gid;
 int    journal_size;
 int    journal_flags;
+int    journal_fc_size;
 static int     lazy_itable_init;
 static int     packed_meta_blocks;
+int            no_copy_xattrs;
 static char    *bad_blocks_filename = NULL;
 static __u32   fs_stride;
 /* Initialize usr/grp quotas by default */
@@ -103,6 +107,7 @@ static int  proceed_delay = -1;
 static blk64_t dev_size;
 
 static struct ext2_super_block fs_param;
+static __u32 zero_buf[4];
 static char *fs_uuid = NULL;
 static char *creator_os;
 static char *volume_label;
@@ -113,6 +118,8 @@ char **fs_types;
 const char *src_root_dir;  /* Copy files from the specified directory */
 static char *undo_file;
 
+static int android_sparse_file; /* -E android_sparse */
+
 static profile_t       profile;
 
 static int sys_page_size = 4096;
@@ -338,7 +345,7 @@ _("Warning: the backup superblock/group descriptors at block %u contain\n"
                exit(1);
        }
        while (ext2fs_badblocks_list_iterate(bb_iter, &blk))
-               ext2fs_mark_block_bitmap2(fs->block_map, EXT2FS_B2C(fs, blk));
+               ext2fs_mark_block_bitmap2(fs->block_map, blk);
        ext2fs_badblocks_list_iterate_end(bb_iter);
 }
 
@@ -354,9 +361,15 @@ static void write_reserved_inodes(ext2_filsys fs)
                exit(1);
        }
 
-       for (ino = 1; ino < EXT2_FIRST_INO(fs->super); ino++)
-               ext2fs_write_inode_full(fs, ino, inode,
-                                       EXT2_INODE_SIZE(fs->super));
+       for (ino = 1; ino < EXT2_FIRST_INO(fs->super); ino++) {
+               retval = ext2fs_write_inode_full(fs, ino, inode,
+                                                EXT2_INODE_SIZE(fs->super));
+               if (retval) {
+                       com_err("ext2fs_write_inode_full", retval,
+                               _("while writing reserved inodes"));
+                       exit(1);
+               }
+       }
 
        ext2fs_free_mem(&inode);
 }
@@ -435,9 +448,9 @@ static void write_inode_tables(ext2_filsys fs, int lazy_flag, int itable_zeroed)
                }
                if (sync_kludge) {
                        if (sync_kludge == 1)
-                               sync();
+                               io_channel_flush(fs->io);
                        else if ((i % sync_kludge) == 0)
-                               sync();
+                               io_channel_flush(fs->io);
                }
        }
        ext2fs_numeric_progress_close(fs, &progress,
@@ -553,7 +566,7 @@ static void zap_sector(ext2_filsys fs, int sect, int nsect)
        int retval;
        unsigned int *magic;
 
-       buf = malloc(512*nsect);
+       buf = calloc(512, nsect);
        if (!buf) {
                printf(_("Out of memory erasing sectors %d-%d\n"),
                       sect, sect + nsect - 1);
@@ -592,9 +605,16 @@ static void create_journal_dev(ext2_filsys fs)
        char                    *buf;
        blk64_t                 blk, err_blk;
        int                     c, count, err_count;
+       struct ext2fs_journal_params    jparams;
+
+       retval = ext2fs_get_journal_params(&jparams, fs);
+       if (retval) {
+               com_err("create_journal_dev", retval, "%s",
+                       _("while splitting the journal size"));
+               exit(1);
+       }
 
-       retval = ext2fs_create_journal_superblock(fs,
-                                 ext2fs_blocks_count(fs->super), 0, &buf);
+       retval = ext2fs_create_journal_superblock2(fs, &jparams, 0, &buf);
        if (retval) {
                com_err("create_journal_dev", retval, "%s",
                        _("while initializing journal superblock"));
@@ -643,7 +663,6 @@ write_superblock:
 static void show_stats(ext2_filsys fs)
 {
        struct ext2_super_block *s = fs->super;
-       char                    buf[80];
         char                    *os;
        blk64_t                 group_block;
        dgrp_t                  i;
@@ -661,9 +680,8 @@ static void show_stats(ext2_filsys fs)
                fprintf(stderr, _("warning: %llu blocks unused.\n\n"),
                       ext2fs_blocks_count(&fs_param) - ext2fs_blocks_count(s));
 
-       memset(buf, 0, sizeof(buf));
-       strncpy(buf, s->s_volume_name, sizeof(s->s_volume_name));
-       printf(_("Filesystem label=%s\n"), buf);
+       printf(_("Filesystem label=%.*s\n"), EXT2_LEN_STR(s->s_volume_name));
+
        os = e2p_os2string(fs->super->s_creator_os);
        if (os)
                printf(_("OS type: %s\n"), os);
@@ -778,6 +796,8 @@ static void parse_extended_opts(struct ext2_super_block *param,
        int     len;
        int     r_usage = 0;
        int     ret;
+       int     encoding = -1;
+       char    *encoding_flags = NULL;
 
        len = strlen(opts);
        buf = malloc(len+1);
@@ -829,6 +849,19 @@ static void parse_extended_opts(struct ext2_super_block *param,
                                continue;
                        }
                        param->s_desc_size = desc_size;
+               } else if (strcmp(token, "hash_seed") == 0) {
+                       if (!arg) {
+                               r_usage++;
+                               badopt = token;
+                               continue;
+                       }
+                       if (uuid_parse(arg,
+                               (unsigned char *)param->s_hash_seed) != 0) {
+                               fprintf(stderr,
+                                       _("Invalid hash seed: %s\n"), arg);
+                               r_usage++;
+                               continue;
+                       }
                } else if (strcmp(token, "offset") == 0) {
                        if (!arg) {
                                r_usage++;
@@ -856,6 +889,9 @@ static void parse_extended_opts(struct ext2_super_block *param,
                                r_usage++;
                                continue;
                        }
+               } else if (strcmp(token, "no_copy_xattrs") == 0) {
+                       no_copy_xattrs = 1;
+                       continue;
                } else if (strcmp(token, "num_backup_sb") == 0) {
                        if (!arg) {
                                r_usage++;
@@ -1026,6 +1062,28 @@ static void parse_extended_opts(struct ext2_super_block *param,
                                badopt = token;
                                continue;
                        }
+               } else if (!strcmp(token, "android_sparse")) {
+                       android_sparse_file = 1;
+               } else if (!strcmp(token, "encoding")) {
+                       if (!arg) {
+                               r_usage++;
+                               continue;
+                       }
+
+                       encoding = e2p_str2encoding(arg);
+                       if (encoding < 0) {
+                               fprintf(stderr, _("Invalid encoding: %s"), arg);
+                               r_usage++;
+                               continue;
+                       }
+                       param->s_encoding = encoding;
+                       ext2fs_set_feature_casefold(param);
+               } else if (!strcmp(token, "encoding_flags")) {
+                       if (!arg) {
+                               r_usage++;
+                               continue;
+                       }
+                       encoding_flags = arg;
                } else {
                        r_usage++;
                        badopt = token;
@@ -1050,6 +1108,8 @@ static void parse_extended_opts(struct ext2_super_block *param,
                        "\ttest_fs\n"
                        "\tdiscard\n"
                        "\tnodiscard\n"
+                       "\tencoding=<encoding>\n"
+                       "\tencoding_flags=<flags>\n"
                        "\tquotatype=<quota type(s) to be enabled>\n\n"),
                        badopt ? badopt : "");
                free(buf);
@@ -1061,6 +1121,25 @@ static void parse_extended_opts(struct ext2_super_block *param,
                                  "multiple of stride %u.\n\n"),
                        param->s_raid_stripe_width, param->s_raid_stride);
 
+       if (ext2fs_has_feature_casefold(param)) {
+               param->s_encoding_flags =
+                       e2p_get_encoding_flags(param->s_encoding);
+
+               if (encoding_flags &&
+                   e2p_str2encoding_flags(param->s_encoding, encoding_flags,
+                                          &param->s_encoding_flags)) {
+                       fprintf(stderr, _("error: Invalid encoding flag: %s\n"),
+                               encoding_flags);
+                       free(buf);
+                       exit(1);
+               }
+       } else if (encoding_flags) {
+               fprintf(stderr, _("error: An encoding must be explicitly "
+                                 "specified when passing encoding-flags\n"));
+               free(buf);
+               exit(1);
+       }
+
        free(buf);
 }
 
@@ -1070,18 +1149,23 @@ static __u32 ok_features[3] = {
                EXT2_FEATURE_COMPAT_RESIZE_INODE |
                EXT2_FEATURE_COMPAT_DIR_INDEX |
                EXT2_FEATURE_COMPAT_EXT_ATTR |
-               EXT4_FEATURE_COMPAT_SPARSE_SUPER2,
+               EXT4_FEATURE_COMPAT_SPARSE_SUPER2 |
+               EXT4_FEATURE_COMPAT_FAST_COMMIT |
+               EXT4_FEATURE_COMPAT_STABLE_INODES,
        /* Incompat */
        EXT2_FEATURE_INCOMPAT_FILETYPE|
                EXT3_FEATURE_INCOMPAT_EXTENTS|
                EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|
                EXT2_FEATURE_INCOMPAT_META_BG|
                EXT4_FEATURE_INCOMPAT_FLEX_BG|
+               EXT4_FEATURE_INCOMPAT_EA_INODE|
                EXT4_FEATURE_INCOMPAT_MMP |
                EXT4_FEATURE_INCOMPAT_64BIT|
                EXT4_FEATURE_INCOMPAT_INLINE_DATA|
                EXT4_FEATURE_INCOMPAT_ENCRYPT |
-               EXT4_FEATURE_INCOMPAT_CSUM_SEED,
+               EXT4_FEATURE_INCOMPAT_CASEFOLD |
+               EXT4_FEATURE_INCOMPAT_CSUM_SEED |
+               EXT4_FEATURE_INCOMPAT_LARGEDIR,
        /* R/O compat */
        EXT2_FEATURE_RO_COMPAT_LARGE_FILE|
                EXT4_FEATURE_RO_COMPAT_HUGE_FILE|
@@ -1092,7 +1176,8 @@ static __u32 ok_features[3] = {
                EXT4_FEATURE_RO_COMPAT_BIGALLOC|
                EXT4_FEATURE_RO_COMPAT_QUOTA|
                EXT4_FEATURE_RO_COMPAT_METADATA_CSUM|
-               EXT4_FEATURE_RO_COMPAT_PROJECT
+               EXT4_FEATURE_RO_COMPAT_PROJECT|
+               EXT4_FEATURE_RO_COMPAT_VERITY
 };
 
 
@@ -1391,23 +1476,30 @@ int get_bool_from_profile(char **types, const char *opt, int def_val)
 extern const char *mke2fs_default_profile;
 static const char *default_files[] = { "<default>", 0 };
 
+struct device_param {
+       unsigned long min_io;           /* prefered minimum IO size */
+       unsigned long opt_io;           /* optimal IO size */
+       unsigned long alignment_offset; /* alignment offset wrt physical block size */
+       unsigned int dax:1;             /* supports dax? */
+};
+
 #ifdef HAVE_BLKID_PROBE_GET_TOPOLOGY
 /*
  * Sets the geometry of a device (stripe/stride), and returns the
  * device's alignment offset, if any, or a negative error.
  */
 static int get_device_geometry(const char *file,
-                              struct ext2_super_block *param,
-                              unsigned int psector_size)
+                              unsigned int blocksize,
+                              unsigned int psector_size,
+                              struct device_param *dev_param)
 {
        int rc = -1;
-       unsigned int blocksize;
        blkid_probe pr;
        blkid_topology tp;
-       unsigned long min_io;
-       unsigned long opt_io;
        struct stat statbuf;
 
+       memset(dev_param, 0, sizeof(*dev_param));
+
        /* Nothing to do for a regular file */
        if (!stat(file, &statbuf) && S_ISREG(statbuf.st_mode))
                return 0;
@@ -1420,23 +1512,20 @@ static int get_device_geometry(const char *file,
        if (!tp)
                goto out;
 
-       min_io = blkid_topology_get_minimum_io_size(tp);
-       opt_io = blkid_topology_get_optimal_io_size(tp);
-       blocksize = EXT2_BLOCK_SIZE(param);
-       if ((min_io == 0) && (psector_size > blocksize))
-               min_io = psector_size;
-       if ((opt_io == 0) && min_io)
-               opt_io = min_io;
-       if ((opt_io == 0) && (psector_size > blocksize))
-               opt_io = psector_size;
-
-       /* setting stripe/stride to blocksize is pointless */
-       if (min_io > blocksize)
-               param->s_raid_stride = min_io / blocksize;
-       if (opt_io > blocksize)
-               param->s_raid_stripe_width = opt_io / blocksize;
-
-       rc = blkid_topology_get_alignment_offset(tp);
+       dev_param->min_io = blkid_topology_get_minimum_io_size(tp);
+       dev_param->opt_io = blkid_topology_get_optimal_io_size(tp);
+       if ((dev_param->min_io == 0) && (psector_size > blocksize))
+               dev_param->min_io = psector_size;
+       if ((dev_param->opt_io == 0) && dev_param->min_io > 0)
+               dev_param->opt_io = dev_param->min_io;
+       if ((dev_param->opt_io == 0) && (psector_size > blocksize))
+               dev_param->opt_io = psector_size;
+
+       dev_param->alignment_offset = blkid_topology_get_alignment_offset(tp);
+#ifdef HAVE_BLKID_TOPOLOGY_GET_DAX
+       dev_param->dax = blkid_topology_get_dax(tp);
+#endif
+       rc = 0;
 out:
        blkid_free_probe(pr);
        return rc;
@@ -1485,6 +1574,7 @@ static void PRS(int argc, char *argv[])
        int             use_bsize;
        char            *newpath;
        int             pathlen = sizeof(PATH_SET) + 1;
+       struct device_param dev_param;
 
        if (oldpath)
                pathlen += strlen(oldpath);
@@ -1503,10 +1593,6 @@ static void PRS(int argc, char *argv[])
        }
        putenv (newpath);
 
-       tmp = getenv("MKE2FS_SYNC");
-       if (tmp)
-               sync_kludge = atoi(tmp);
-
        /* Determine the system page size if possible */
 #ifdef HAVE_SYSCONF
 #if (!defined(_SC_PAGESIZE) && defined(_SC_PAGE_SIZE))
@@ -1675,6 +1761,8 @@ profile_error:
                case 'j':
                        if (!journal_size)
                                journal_size = -1;
+                       if (!journal_fc_size)
+                               journal_fc_size = -1;
                        break;
                case 'J':
                        parse_journal_opts(optarg);
@@ -1869,6 +1957,12 @@ profile_error:
        if (optind < argc)
                usage();
 
+       profile_get_integer(profile, "options", "sync_kludge", 0, 0,
+                           &sync_kludge);
+       tmp = getenv("MKE2FS_SYNC");
+       if (tmp)
+               sync_kludge = atoi(tmp);
+
        profile_get_integer(profile, "options", "proceed_delay", 0, 0,
                            &proceed_delay);
 
@@ -1892,10 +1986,15 @@ profile_error:
                dev_size = fs_blocks_count;
                retval = 0;
        } else
+#ifndef _WIN32
                retval = ext2fs_get_device_size2(device_name,
                                                 EXT2_BLOCK_SIZE(&fs_param),
                                                 &dev_size);
-
+#else
+               retval = ext2fs_get_device_size(device_name,
+                                               EXT2_BLOCK_SIZE(&fs_param),
+                                               &dev_size);
+#endif
        if (retval && (retval != EXT2_ET_UNIMPLEMENTED)) {
                com_err(program_name, retval, "%s",
                        _("while trying to determine filesystem size"));
@@ -1985,6 +2084,8 @@ profile_error:
                ext2fs_clear_feature_filetype(&fs_param);
                ext2fs_clear_feature_huge_file(&fs_param);
                ext2fs_clear_feature_metadata_csum(&fs_param);
+               ext2fs_clear_feature_ea_inode(&fs_param);
+               ext2fs_clear_feature_casefold(&fs_param);
        }
        edit_feature(fs_features ? fs_features : tmp,
                     &fs_param.s_feature_compat);
@@ -2010,6 +2111,11 @@ profile_error:
                                                "metadata_csum feature.\n"));
                        exit(1);
                }
+               if (ext2fs_has_feature_ea_inode(&fs_param)) {
+                       fprintf(stderr, "%s", _("The HURD does not support the "
+                                               "ea_inode feature.\n"));
+                       exit(1);
+               }
        }
 
        /* Get the hardware sector sizes, if available */
@@ -2092,9 +2198,11 @@ profile_error:
        }
        /*
         * Guard against group descriptor count overflowing... Mostly to avoid
-        * strange results for absurdly large devices.
+        * strange results for absurdly large devices.  This is in log2:
+        * (blocksize) * (bits per byte) * (maximum number of block groups)
         */
-       if (fs_blocks_count > ((1ULL << (fs_param.s_log_block_size + 3 + 32)) - 1)) {
+       if (fs_blocks_count >
+           (1ULL << (EXT2_BLOCK_SIZE_BITS(&fs_param) + 3 + 32)) - 1) {
                fprintf(stderr, _("%s: Size of device (0x%llx blocks) %s "
                                  "too big to create\n\t"
                                  "a filesystem using a blocksize of %d.\n"),
@@ -2214,17 +2322,35 @@ profile_error:
        }
 
 #ifdef HAVE_BLKID_PROBE_GET_TOPOLOGY
-       retval = get_device_geometry(device_name, &fs_param,
-                                    (unsigned int) psector_size);
+       retval = get_device_geometry(device_name, blocksize,
+                                    psector_size, &dev_param);
        if (retval < 0) {
                fprintf(stderr,
                        _("warning: Unable to get device geometry for %s\n"),
                        device_name);
-       } else if (retval) {
-               printf(_("%s alignment is offset by %lu bytes.\n"),
-                      device_name, retval);
-               printf(_("This may result in very poor performance, "
-                         "(re)-partitioning suggested.\n"));
+       } else {
+               /* setting stripe/stride to blocksize is pointless */
+               if (dev_param.min_io > blocksize)
+                       fs_param.s_raid_stride = dev_param.min_io / blocksize;
+               if (dev_param.opt_io > blocksize) {
+                       fs_param.s_raid_stripe_width =
+                                               dev_param.opt_io / blocksize;
+               }
+
+               if (dev_param.alignment_offset) {
+                       printf(_("%s alignment is offset by %lu bytes.\n"),
+                              device_name, dev_param.alignment_offset);
+                       printf(_("This may result in very poor performance, "
+                                 "(re)-partitioning suggested.\n"));
+               }
+
+               if (dev_param.dax && blocksize != sys_page_size) {
+                       fprintf(stderr,
+                               _("%s is capable of DAX but current block size "
+                                 "%u is different from system page size %u so "
+                                 "filesystem will not support DAX.\n"),
+                               device_name, blocksize, sys_page_size);
+               }
        }
 #endif
 
@@ -2295,6 +2421,33 @@ profile_error:
        if (packed_meta_blocks)
                journal_location = 0;
 
+       if (ext2fs_has_feature_casefold(&fs_param)) {
+               char *ef, *en = get_string_from_profile(fs_types,
+                                                       "encoding", "utf8");
+               int encoding = e2p_str2encoding(en);
+
+               if (encoding < 0) {
+                       com_err(program_name, 0,
+                               _("Unknown filename encoding from profile: %s"),
+                               en);
+                       exit(1);
+               }
+               free(en);
+               fs_param.s_encoding = encoding;
+               ef = get_string_from_profile(fs_types, "encoding_flags", NULL);
+               if (ef) {
+                       if (e2p_str2encoding_flags(encoding, ef,
+                                       &fs_param.s_encoding_flags) < 0) {
+                               com_err(program_name, 0,
+                       _("Unknown encoding flags from profile: %s"), ef);
+                               exit(1);
+                       }
+                       free(ef);
+               } else
+                       fs_param.s_encoding_flags =
+                               e2p_get_encoding_flags(encoding);
+       }
+
        /* Get options from profile */
        for (cpp = fs_types; *cpp; cpp++) {
                tmp = NULL;
@@ -2319,6 +2472,26 @@ profile_error:
                        (unsigned long long) fs_blocks_count);
        }
 
+       if (quotatype_bits & QUOTA_PRJ_BIT)
+               ext2fs_set_feature_project(&fs_param);
+
+       if (ext2fs_has_feature_project(&fs_param)) {
+               quotatype_bits |= QUOTA_PRJ_BIT;
+               if (inode_size == EXT2_GOOD_OLD_INODE_SIZE) {
+                       com_err(program_name, 0,
+                               _("%d byte inodes are too small for "
+                                 "project quota"),
+                               inode_size);
+                       exit(1);
+               }
+               if (inode_size == 0) {
+                       inode_size = get_int_from_profile(fs_types,
+                                                         "inode_size", 0);
+                       if (inode_size <= EXT2_GOOD_OLD_INODE_SIZE*2)
+                               inode_size = EXT2_GOOD_OLD_INODE_SIZE*2;
+               }
+       }
+
        /* Don't allow user to set both metadata_csum and uninit_bg bits. */
        if (ext2fs_has_feature_metadata_csum(&fs_param) &&
            ext2fs_has_feature_gdt_csum(&fs_param))
@@ -2419,19 +2592,6 @@ profile_error:
                exit(1);
        }
 
-       /*
-        * If inode size is 128 and project quota is enabled, we need
-        * to notify users that project ID will never be useful.
-        */
-       if (ext2fs_has_feature_project(&fs_param) &&
-           fs_param.s_inode_size == EXT2_GOOD_OLD_INODE_SIZE) {
-               com_err(program_name, 0,
-                       _("%d byte inodes are too small for project quota; "
-                         "specify larger size"),
-                       fs_param.s_inode_size);
-               exit(1);
-       }
-
        /* Make sure number of inodes specified will fit in 32 bits */
        if (num_inodes == 0) {
                unsigned long long n;
@@ -2776,7 +2936,9 @@ int main (int argc, char *argv[])
        errcode_t       retval = 0;
        ext2_filsys     fs;
        badblocks_list  bb_list = 0;
-       unsigned int    journal_blocks = 0;
+       badblocks_iterate       bb_iter;
+       blk_t           blk;
+       struct ext2fs_journal_params    jparams = {0};
        unsigned int    i, checkinterval;
        int             max_mnt_count;
        int             val, hash_alg;
@@ -2786,6 +2948,7 @@ int main (int argc, char *argv[])
        char            opt_string[40];
        char            *hash_alg_str;
        int             itable_zeroed = 0;
+       blk64_t         overhead;
 
 #ifdef ENABLE_NLS
        setlocale(LC_MESSAGES, "");
@@ -2827,7 +2990,23 @@ int main (int argc, char *argv[])
         */
        if (!quiet)
                flags |= EXT2_FLAG_PRINT_PROGRESS;
-       retval = ext2fs_initialize(device_name, flags, &fs_param, io_ptr, &fs);
+       if (android_sparse_file) {
+               char *android_sparse_params = malloc(strlen(device_name) + 48);
+
+               if (!android_sparse_params) {
+                       com_err(program_name, ENOMEM, "%s",
+                               _("in malloc for android_sparse_params"));
+                       exit(1);
+               }
+               sprintf(android_sparse_params, "(%s):%u:%u",
+                        device_name, fs_param.s_blocks_count,
+                        1024 << fs_param.s_log_block_size);
+               retval = ext2fs_initialize(android_sparse_params, flags,
+                                          &fs_param, sparse_io_manager, &fs);
+               free(android_sparse_params);
+       } else
+               retval = ext2fs_initialize(device_name, flags, &fs_param,
+                                          io_ptr, &fs);
        if (retval) {
                com_err(device_name, retval, "%s",
                        _("while setting up superblock"));
@@ -2862,14 +3041,14 @@ int main (int argc, char *argv[])
        if (ext2fs_has_feature_csum_seed(fs->super) &&
            !ext2fs_has_feature_metadata_csum(fs->super)) {
                printf("%s", _("The metadata_csum_seed feature "
-                              "requres the metadata_csum feature.\n"));
+                              "requires the metadata_csum feature.\n"));
                exit(1);
        }
 
        /* Calculate journal blocks */
        if (!journal_device && ((journal_size) ||
            ext2fs_has_feature_journal(&fs_param)))
-               journal_blocks = figure_journal_size(journal_size, fs);
+               figure_journal_size(&jparams, journal_size, journal_fc_size, fs);
 
        sprintf(opt_string, "tdb_data_size=%d", fs->blocksize <= 4096 ?
                32768 : fs->blocksize * 8);
@@ -2914,7 +3093,14 @@ int main (int argc, char *argv[])
         * Parse or generate a UUID for the filesystem
         */
        if (fs_uuid) {
-               if (uuid_parse(fs_uuid, fs->super->s_uuid) !=0) {
+               if ((strcasecmp(fs_uuid, "null") == 0) ||
+                   (strcasecmp(fs_uuid, "clear") == 0)) {
+                       uuid_clear(fs->super->s_uuid);
+               } else if (strcasecmp(fs_uuid, "time") == 0) {
+                       uuid_generate_time(fs->super->s_uuid);
+               } else if (strcasecmp(fs_uuid, "random") == 0) {
+                       uuid_generate(fs->super->s_uuid);
+               } else if (uuid_parse(fs_uuid, fs->super->s_uuid) != 0) {
                        com_err(device_name, 0, "could not parse UUID: %s\n",
                                fs_uuid);
                        exit(1);
@@ -2937,7 +3123,13 @@ int main (int argc, char *argv[])
        free(hash_alg_str);
        fs->super->s_def_hash_version = (hash_alg >= 0) ? hash_alg :
                EXT2_HASH_HALF_MD4;
-       uuid_generate((unsigned char *) fs->super->s_hash_seed);
+
+       if (memcmp(fs_param.s_hash_seed, zero_buf,
+               sizeof(fs_param.s_hash_seed)) != 0) {
+               memcpy(fs->super->s_hash_seed, fs_param.s_hash_seed,
+                       sizeof(fs->super->s_hash_seed));
+       } else
+               uuid_generate((unsigned char *) fs->super->s_hash_seed);
 
        /*
         * Periodic checks can be enabled/disabled via config file.
@@ -2988,7 +3180,7 @@ int main (int argc, char *argv[])
        if (volume_label) {
                memset(fs->super->s_volume_name, 0,
                       sizeof(fs->super->s_volume_name));
-               strncpy(fs->super->s_volume_name, volume_label,
+               strncpy((char *) fs->super->s_volume_name, volume_label,
                        sizeof(fs->super->s_volume_name));
        }
 
@@ -2998,7 +3190,7 @@ int main (int argc, char *argv[])
        if (mount_dir) {
                memset(fs->super->s_last_mounted, 0,
                       sizeof(fs->super->s_last_mounted));
-               strncpy(fs->super->s_last_mounted, mount_dir,
+               strncpy((char *) fs->super->s_last_mounted, mount_dir,
                        sizeof(fs->super->s_last_mounted));
        }
 
@@ -3048,6 +3240,23 @@ int main (int argc, char *argv[])
        if (!quiet)
                printf("%s", _("done                            \n"));
 
+       /*
+        * Unmark bad blocks to calculate overhead, because metadata
+        * blocks and bad blocks can land on the same allocation cluster.
+        */
+       if (bb_list) {
+               retval = ext2fs_badblocks_list_iterate_begin(bb_list,
+                                                            &bb_iter);
+               if (retval) {
+                       com_err("ext2fs_badblocks_list_iterate_begin", retval,
+                               "%s", _("while unmarking bad blocks"));
+                       exit(1);
+               }
+               while (ext2fs_badblocks_list_iterate(bb_iter, &blk))
+                       ext2fs_unmark_block_bitmap2(fs->block_map, blk);
+               ext2fs_badblocks_list_iterate_end(bb_iter);
+       }
+
        retval = ext2fs_convert_subcluster_bitmap(fs, &fs->block_map);
        if (retval) {
                com_err(program_name, retval, "%s",
@@ -3055,6 +3264,28 @@ int main (int argc, char *argv[])
                exit(1);
        }
 
+       retval = ext2fs_count_used_clusters(fs, fs->super->s_first_data_block,
+                                       ext2fs_blocks_count(fs->super) - 1,
+                                       &overhead);
+       if (retval) {
+               com_err(program_name, retval, "%s",
+                       _("while calculating overhead"));
+               exit(1);
+       }
+
+       if (bb_list) {
+               retval = ext2fs_badblocks_list_iterate_begin(bb_list,
+                                                            &bb_iter);
+               if (retval) {
+                       com_err("ext2fs_badblocks_list_iterate_begin", retval,
+                               "%s", _("while marking bad blocks as used"));
+                       exit(1);
+               }
+               while (ext2fs_badblocks_list_iterate(bb_iter, &blk))
+                       ext2fs_mark_block_bitmap2(fs->block_map, blk);
+               ext2fs_badblocks_list_iterate_end(bb_iter);
+       }
+
        if (super_only) {
                check_plausibility(device_name, CHECK_FS_EXIST, NULL);
                printf(_("%s may be further corrupted by superblock rewrite\n"),
@@ -3152,22 +3383,23 @@ int main (int argc, char *argv[])
                free(journal_device);
        } else if ((journal_size) ||
                   ext2fs_has_feature_journal(&fs_param)) {
+               overhead += EXT2FS_NUM_B2C(fs, jparams.num_journal_blocks + jparams.num_fc_blocks);
                if (super_only) {
                        printf("%s", _("Skipping journal creation in super-only mode\n"));
                        fs->super->s_journal_inum = EXT2_JOURNAL_INO;
                        goto no_journal;
                }
 
-               if (!journal_blocks) {
+               if (!jparams.num_journal_blocks) {
                        ext2fs_clear_feature_journal(fs->super);
                        goto no_journal;
                }
                if (!quiet) {
                        printf(_("Creating journal (%u blocks): "),
-                              journal_blocks);
+                              jparams.num_journal_blocks + jparams.num_fc_blocks);
                        fflush(stdout);
                }
-               retval = ext2fs_add_journal_inode2(fs, journal_blocks,
+               retval = ext2fs_add_journal_inode3(fs, &jparams,
                                                   journal_location,
                                                   journal_flags);
                if (retval) {
@@ -3194,10 +3426,12 @@ no_journal:
                               fs->super->s_mmp_update_interval);
        }
 
+       overhead += fs->super->s_first_data_block;
+       if (!super_only)
+               fs->super->s_overhead_clusters = overhead;
+
        if (ext2fs_has_feature_bigalloc(&fs_param))
                fix_cluster_bg_counts(fs);
-       if (ext2fs_has_feature_project(&fs_param))
-               quotatype_bits |= QUOTA_PRJ_BIT;
        if (ext2fs_has_feature_quota(&fs_param))
                create_quota_inodes(fs);
 
@@ -3226,8 +3460,9 @@ no_journal:
        max_mnt_count = fs->super->s_max_mnt_count;
        retval = ext2fs_close_free(&fs);
        if (retval) {
-               fprintf(stderr, "%s",
-                       _("\nWarning, had trouble writing out superblocks.\n"));
+               com_err(program_name, retval, "%s",
+                       _("while writing out and closing file system"));
+               retval = 1;
        } else if (!quiet) {
                printf("%s", _("done\n\n"));
                if (!getenv("MKE2FS_SKIP_CHECK_MSG"))
index 1ce0f5e..08bb948 100644 (file)
@@ -78,7 +78,7 @@ used by
 .BR mke2fs (8).
 In general, these defaults may be overridden by a definition in the
 .B fs_types
-stanza, or by an command-line option provided by the user.
+stanza, or by a command-line option provided by the user.
 .TP
 .I [fs_types]
 Contains relations which define defaults that should be used for specific
@@ -89,64 +89,35 @@ the
 options to
 .BR mke2fs (8),
 respectively.
+.TP
+.I [devices]
+Contains relations which define defaults for specific devices.
 .SH THE [options] STANZA
 The following relations are defined in the
 .I [options]
 stanza.
 .TP
 .I proceed_delay
-If this relation is set to a positive integer, then if mke2fs will
-proceed after waiting
+If this relation is set to a positive integer, then mke2fs will
+wait
 .I proceed_delay
-seconds, after asking the user for permission to proceed, even if the
+seconds after asking the user for permission to proceed and
+then continue, even if the
 user has not answered the question.  Defaults to 0, which means to wait
 until the user answers the question one way or another.
+.TP
+.I sync_kludge
+If this relation is set to a positive integer, then while writing the
+inode table, mke2fs will request the operating system flush out pending
+writes to initialize the inode table every
+.I sync_kludge
+block groups.   This is needed to work around buggy kernels that don't
+handle writeback throttling correctly.
 .SH THE [defaults] STANZA
 The following relations are defined in the
 .I [defaults]
 stanza.
 .TP
-.I base_features
-This relation specifies the filesystems features which are enabled in
-newly created filesystems.  It may be overridden by the
-.I base_features
-relation found in the filesystem or usage type subsection of
-the
-.I [fs_types]
-stanza.
-.TP
-.I default_features
-This relation specifies a set of features that should be added or
-removed to the features listed in the
-.I base_features
-relation.  It may be overridden by the filesystem-specific
-.I default_features
-in the filesystem or usage type subsection of
-.IR [fs_types] ,
-and by the
-.B -O
-command-line option
-to
-.BR mke2fs (8).
-.TP
-.I enable_periodic_fsck
-This boolean relation specifies whether periodic filesystem checks should be
-enforced at boot time.  If set to true, checks will be forced every
-180 days, or after a random number of mounts.  These values may
-be changed later via the
-.B -i
-and
-.B -c
-command-line options to
-.BR tune2fs (8).
-.TP
-.I force_undo
-This boolean relation, if set to a value of true, forces
-.B mke2fs
-to always try to create an undo file, even if the undo file might be
-huge and it might extend the time to create the filesystem image
-because the inode table isn't being initialized lazily.
-.TP
 .I fs_type
 This relation specifies the default filesystem type if the user does not
 specify it via the
@@ -159,7 +130,7 @@ If both the user and the
 .B mke2fs.conf
 file do not specify a default filesystem type, mke2fs will use a
 default filesystem type of
-.IR ext3
+.I ext3
 if a journal was requested via a command-line option, or
 .I ext2
 if not.
@@ -301,6 +272,17 @@ whose subsections define the
 relation, only the last will be used by
 .BR mke2fs (8).
 .TP
+.I enable_periodic_fsck
+This boolean relation specifies whether periodic filesystem checks should be
+enforced at boot time.  If set to true, checks will be forced every
+180 days, or after a random number of mounts.  These values may
+be changed later via the
+.B -i
+and
+.B -c
+command-line options to
+.BR tune2fs (8).
+.TP
 .I errors
 Change the behavior of the kernel code when errors are detected.
 In all cases, a filesystem error will cause
@@ -333,6 +315,13 @@ a named feature.  Each
 relation specified in the fs_types list will be applied in the order
 found in the fs_types list.
 .TP
+.I force_undo
+This boolean relation, if set to a value of true, forces
+.B mke2fs
+to always try to create an undo file, even if the undo file might be
+huge and it might extend the time to create the filesystem image
+because the inode table isn't being initialized lazily.
+.TP
 .I default_features
 This relation specifies set of features which should be enabled or
 disabled after applying the features listed in the
@@ -375,6 +364,16 @@ initialization noticeably, but it requires the kernel to finish
 initializing the filesystem in the background when the filesystem is
 first mounted.
 .TP
+.I lazy_journal_init
+This boolean relation specifies whether the journal inode should be
+lazily initialized. It only has meaning if the has_journal feature is
+enabled. If lazy_journal_init is true, the journal inode will not be
+fully zeroed out by
+.BR mke2fs .
+This speeds up filesystem initialization noticeably, but carries some
+small risk if the system crashes before the journal has been overwritten
+entirely one time.
+.TP
 .I journal_location
 This relation specifies the location of the journal.
 .TP
@@ -384,7 +383,7 @@ This relation indicates whether file systems with the
 feature enabled should be created with 0, 1, or 2 backup superblocks.
 .TP
 .I packed_meta_blocks
-This boolean relation specifes whether the allocation bitmaps, inode
+This boolean relation specifies whether the allocation bitmaps, inode
 table, and journal should be located at the beginning of the file system.
 .TP
 .I inode_ratio
@@ -441,7 +440,16 @@ command line option to
 .TP
 .I make_hugefiles
 This boolean relation enables the creation of pre-allocated files as
-part of formatting the file system.
+part of formatting the file system.  The extent tree blocks for these
+pre-allocated files will be placed near the beginning of the file
+system, so that if all of the other metadata blocks are also configured
+to be placed near the beginning of the file system (by disabling the
+backup superblocks, using the packed_meta_blocks option, etc.), the data
+blocks of the pre-allocated files will be contiguous.
+.TP
+.I hugefiles_dir
+This relation specifies the directory where huge files are created,
+relative to the filesystem root.
 .TP
 .I hugefiles_uid
 This relation controls the user ownership for all of the files and
@@ -500,7 +508,7 @@ huge file number.
 .I zero_hugefiles
 This boolean relation specifies whether or not zero blocks will be
 written to the hugefiles while
-.BR mke2fs(8)
+.BR mke2fs (8)
 is creating them.  By default, zero blocks will be written to the huge
 files to avoid stale data from being made available to potentially
 untrusted user programs, unless the device supports a discard/trim
@@ -510,6 +518,17 @@ to false, this step will always be skipped, which can be useful if it is
 known that the disk has been previously erased, or if the user programs
 that will have access to the huge files are trusted to not reveal stale
 data.
+.TP
+.I encoding
+This relation defines the file name encoding to be used if the casefold
+feature is enabled.   Currently the only valid encoding is utf8-12.1 or
+utf8, which requests the most recent Unicode version; since 12.1 is the only
+available Unicode version, utf8 and utf8-12.1 have the same result.
+.I encoding_flags
+This relation defines encoding-specific flags.  For utf8 encodings, the
+only available flag is strict, which will cause attempts to create file
+names containing invalid Unicode characters to be rejected by the
+kernel.  Strict mode is not enabled by default.
 .SH THE [devices] STANZA
 Each tag in the
 .I [devices]
index 812f7c7..01e35cf 100644 (file)
                features = has_journal
        }
        ext4 = {
-               features = has_journal,extent,huge_file,flex_bg,uninit_bg,64bit,dir_nlink,extra_isize
+               features = has_journal,extent,huge_file,flex_bg,metadata_csum,64bit,dir_nlink,extra_isize
                inode_size = 256
        }
-       ext4dev = {
-               features = has_journal,extent,huge_file,flex_bg,uninit_bg,inline_data,64bit,dir_nlink,extra_isize
-               inode_size = 256
-               options = test_fs=1
-       }
        small = {
                blocksize = 1024
                inode_size = 128
index 712740c..ba0c1c1 100644 (file)
@@ -36,7 +36,7 @@ maintained by Theodore Ts'o <tytso@alum.mit.edu>.
 There are none :-)
 .SH AVAILABILITY
 .B mklost+found
-is part of the e2fsprogs package and is available from 
+is part of the e2fsprogs package and is available from
 http://e2fsprogs.sourceforge.net.
 .SH SEE ALSO
 .BR e2fsck (8),
index c061357..1431187 100644 (file)
@@ -31,8 +31,8 @@
 
 int main (int argc, char ** argv)
 {
-       char name [EXT2_NAME_LEN];
-       char path [sizeof (LPF) + 1 + 256];
+       char name[EXT2_NAME_LEN + 2];
+       char path[sizeof (LPF) + 1 + 256];
        struct stat st;
        int i, j;
        int d;
index f964efd..814f723 100644 (file)
@@ -4,6 +4,7 @@ BEGIN {
 }
 
 {
+  gsub("\"","\\\"",$0);
   printf("  \"%s\\n\"\n", $0);
 }
 
index 5c885f9..1a181a7 100644 (file)
@@ -45,18 +45,10 @@ tune2fs \- adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
 .RI [^]mount-options [,...]
 ]
 [
-.B \-p
-.I mmp_update_interval
-]
-[
 .B \-r
 .I reserved-blocks-count
 ]
 [
-.B \-s
-.I sparse-super-flag
-]
-[
 .B \-u
 .I user
 ]
@@ -81,7 +73,7 @@ tune2fs \- adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
 .I last-mounted-directory
 ]
 [
-.B \-O 
+.B \-O
 .RI [^] feature [,...]
 ]
 [
@@ -102,9 +94,9 @@ tune2fs \- adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
 ]
 device
 .SH DESCRIPTION
-.BI tune2fs
-allows the system administrator to adjust various tunable filesystem 
-parameters on Linux ext2, ext3, or ext4 filesystems.  The current values 
+.B tune2fs
+allows the system administrator to adjust various tunable filesystem
+parameters on Linux ext2, ext3, or ext4 filesystems.  The current values
 of these options can be displayed by using the
 .B -l
 option to
@@ -121,11 +113,11 @@ LABEL=home or UUID=e40486c6-84d5-4f2f-b99c-032281799c9d).
 .SH OPTIONS
 .TP
 .BI \-c " max-mount-counts"
-Adjust the number of mounts after which the filesystem will be checked by 
-.BR e2fsck (8).  
+Adjust the number of mounts after which the filesystem will be checked by
+.BR e2fsck (8).
 If
 .I max-mount-counts
-is 0 or \-1, the number of times the filesystem is mounted will be disregarded 
+is 0 or \-1, the number of times the filesystem is mounted will be disregarded
 by
 .BR e2fsck (8)
 and the kernel.
@@ -134,7 +126,9 @@ Staggering the mount-counts at which filesystems are forcibly
 checked will avoid all filesystems being checked at one time
 when using journaled filesystems.
 .sp
-You should strongly consider the consequences of disabling
+Mount-count-dependent checking is disabled by default to avoid
+unanticipated long reboots while e2fsck does its work.  However,
+you may wish to consider the consequences of disabling
 mount-count-dependent checking entirely.  Bad disk drives, cables,
 memory, and kernel bugs could all corrupt a filesystem without
 marking the filesystem dirty or in error.  If you are using
@@ -152,10 +146,10 @@ option for time-dependent checking.
 .BI \-C " mount-count"
 Set the number of times the filesystem has been mounted.
 If set to a greater value than the max-mount-counts parameter
-set by the 
+set by the
 .B \-c
 option,
-.BR e2fsck (8) 
+.BR e2fsck (8)
 will check the filesystem at the next reboot.
 .TP
 .BI \-e " error-behavior"
@@ -224,6 +218,30 @@ directories.  Valid algorithms accepted are:
 and
 .IR tea .
 .TP
+.BI encoding= encoding-name
+Enable the
+.I casefold
+feature in the super block and set
+.I encoding-name
+as the encoding to be used.  If
+.I encoding-name
+is not specified, utf8 is used. The encoding cannot be altered if casefold
+was previously enabled.
+.TP
+.BI encoding_flags= encoding-flags
+Define parameters for file name character encoding operations.  If a
+flag is not changed using this parameter, its default value is used.
+.I encoding-flags
+should be a comma-separated lists of flags to be enabled.  The flags cannot be
+altered if casefold was previously enabled.
+
+The only flag that can be set right now is
+.I strict
+which means that invalid strings should be rejected by the file system.
+In the default configuration, the
+.I strict
+flag is disabled.
+.TP
 .BI mount_opts= mount_option_string
 Set a set of default mount options which will be used when the file
 system is mounted.  Unlike the bitmask-based default mount options which
@@ -244,6 +262,10 @@ program.
 This superblock setting is only honored in 2.6.35+ kernels;
 and not at all by the ext2 and ext3 file system drivers.
 .TP
+.B force_fsck
+Set a flag in the filesystem superblock indicating that errors have been found.
+This will force fsck to run at the next mount.
+.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.
@@ -254,12 +276,12 @@ using production-level filesystem code.
 .RE
 .TP
 .B \-f
-Force the tune2fs operation to complete even in the face of errors.  This 
-option is useful when removing the 
+Force the tune2fs operation to complete even in the face of errors.  This
+option is useful when removing the
 .B has_journal
-filesystem feature from a filesystem which has 
+filesystem feature from a filesystem which has
 an external journal (or is corrupted
-such that it appears to have an external journal), but that 
+such that it appears to have an external journal), but that
 external journal is not available.   If the filesystem appears to require
 journal replay, the
 .B \-f
@@ -272,13 +294,13 @@ severe data loss and filesystem corruption.
 .TP
 .BI \-g " group"
 Set the group which can use the reserved filesystem blocks.
-The 
+The
 .I group
 parameter can be a numerical gid or a group name.  If a group name is given,
 it is converted to a numerical gid before it is stored in the superblock.
 .TP
 .B \-i " \fIinterval-between-checks\fR[\fBd\fR|\fBm\fR|\fBw\fR]"
-Adjust the maximal time between two filesystem checks. 
+Adjust the maximal time between two filesystem checks.
 No suffix or
 .B d
 will interpret the number
@@ -289,15 +311,10 @@ as months, and
 .B w
 as weeks.  A value of zero will disable the time-dependent checking.
 .sp
-It is strongly recommended that either
+There are pros and cons to disabling these periodic checks; see the
+discussion under the
 .B \-c
-(mount-count-dependent) or
-.B \-i
-(time-dependent) checking be enabled to force periodic full
-.BR e2fsck (8)
-checking of the filesystem.  Failure to do so may lead to filesystem
-corruption (due to bad disks, cables, memory, or kernel bugs) going
-unnoticed, ultimately resulting in data loss or corruption.
+(mount-count-dependent check) option for details.
 .TP
 .B \-I
 Change the inode size used by the file system.   This requires rewriting
@@ -306,13 +323,19 @@ consistency first using
 .BR e2fsck (8).
 This operation can also take a while and the file system can be
 corrupted and data lost if it is interrupted while in the middle of
-converting the file system.
+converting the file system.  Backing up the file system before changing
+inode size is recommended.
+.IP
+File systems with an inode size of 128 bytes do not support timestamps
+beyond January 19, 2038.  Inodes which are 256 bytes or larger will
+support extended timestamps, project id's, and the ability to store some
+extended attributes in the inode table for improved performance.
 .TP
 .B \-j
-Add an ext3 journal to the filesystem.  If the 
+Add an ext3 journal to the filesystem.  If the
 .B \-J
 option is not specified, the default journal parameters will be used to create
-an appropriately sized journal (given the size of the filesystem) 
+an appropriately sized journal (given the size of the filesystem)
 stored within the filesystem.  Note that you must be using a kernel
 which has ext3 support in order to actually make use of the journal.
 .IP
@@ -324,9 +347,9 @@ the only safe way to create the journal inode while the filesystem is
 mounted.  While the ext3 journal is visible, it is not safe to
 delete it, or modify it while the filesystem is mounted; for this
 reason the file is marked immutable.
-While checking unmounted filesystems, 
+While checking unmounted filesystems,
 .BR e2fsck (8)
-will automatically move 
+will automatically move
 .B .journal
 files to the invisible, reserved journal inode.  For all filesystems
 except for the root filesystem,  this should happen automatically and
@@ -337,8 +360,8 @@ must be run from a rescue floppy in order to effect this transition.
 .IP
 On some distributions, such as Debian, if an initial ramdisk is used,
 the initrd scripts will automatically convert an ext2 root filesystem
-to ext3 if the  
-.BR /etc/fstab
+to ext3 if the
+.B /etc/fstab
 file specifies the ext3 filesystem for the root filesystem in order to
 avoid requiring the use of a rescue floppy to add an ext3 journal to
 the root filesystem.
@@ -358,6 +381,27 @@ and may be no more than 10,240,000 filesystem blocks.
 There must be enough free space in the filesystem to create a journal of
 that size.
 .TP
+.BI fast_commit_size= fast-commit-size
+Create an additional fast commit journal area of size
+.I fast-commit-size
+kilobytes.
+This option is only valid if
+.B fast_commit
+feature is enabled
+on the file system. If this option is not specified and if
+.B fast_commit
+feature is turned on, fast commit area size defaults to
+.I journal-size
+/ 64 megabytes. The total size of the journal with
+.B fast_commit
+feature set is
+.I journal-size
++ (
+.I fast-commit-size
+* 1024) megabytes. The total journal size may be no more than
+10,240,000 filesystem blocks or half the total file system size
+(whichever is smaller).
+.TP
 .BI location =journal-location
 Specify the location of the journal.  The argument
 .I journal-location
@@ -368,10 +412,10 @@ beginning of the file system.
 @JDEV@.BI device= external-journal
 @JDEV@Attach the filesystem to the journal block device located on
 @JDEV@.IR external-journal .
-@JDEV@The external 
+@JDEV@The external
 @JDEV@journal must have been already created using the command
 @JDEV@.IP
-@JDEV@.B mke2fs -O journal_dev 
+@JDEV@.B mke2fs -O journal_dev
 @JDEV@.I external-journal
 @JDEV@.IP
 @JDEV@Note that
@@ -380,7 +424,7 @@ beginning of the file system.
 @JDEV@size as filesystems which will be using it.
 @JDEV@In addition, while there is support for attaching
 @JDEV@multiple filesystems to a single external journal,
-@JDEV@the Linux kernel and 
+@JDEV@the Linux kernel and
 @JDEV@.BR e2fsck (8)
 @JDEV@do not currently support shared external journals yet.
 @JDEV@.IP
@@ -408,10 +452,10 @@ List the contents of the filesystem superblock, including the current
 values of the parameters that can be set via this program.
 .TP
 .BI \-L " volume-label"
-Set the volume label of the filesystem.  
+Set the volume label of the filesystem.
 Ext2 filesystem labels can be at most 16 characters long; if
-.I volume-label 
-is longer than 16 characters, 
+.I volume-label
+is longer than 16 characters,
 .B tune2fs
 will truncate it and print a warning.  The volume label can be used
 by
@@ -426,13 +470,13 @@ instead of a block special device name like
 .TP
 .BI \-m " reserved-blocks-percentage"
 Set the percentage of the filesystem which may only be allocated
-by privileged processes.   Reserving some number of filesystem blocks 
-for use by privileged processes is done 
+by privileged processes.   Reserving some number of filesystem blocks
+for use by privileged processes is done
 to avoid filesystem fragmentation, and to allow system
-daemons, such as 
+daemons, such as
 .BR syslogd (8),
-to continue to function correctly after non-privileged processes are 
-prevented from writing to the filesystem.  Normally, the default percentage 
+to continue to function correctly after non-privileged processes are
+prevented from writing to the filesystem.  Normally, the default percentage
 of reserved blocks is 5%.
 .TP
 .BI \-M " last-mounted-directory"
@@ -440,19 +484,19 @@ Set the last-mounted directory for the filesystem.
 .TP
 .BR \-o " [^]\fImount-option\fR[,...]"
 Set or clear the indicated default mount options in the filesystem.
-Default mount options can be overridden by mount options specified 
-either in 
+Default mount options can be overridden by mount options specified
+either in
 .BR /etc/fstab (5)
 or on the command line arguments to
-.BR mount (8).   
+.BR mount (8).
 Older kernels may not support this feature; in particular,
 kernels which predate 2.4.20 will almost certainly ignore the
 default mount options field in the superblock.
 .IP
 More than one mount option can be cleared or set by separating
-features with commas.  Mount options prefixed with a 
-caret character ('^') will be cleared in the filesystem's superblock; 
-mount options without a prefix character or prefixed with a plus 
+features with commas.  Mount options prefixed with a
+caret character ('^') will be cleared in the filesystem's superblock;
+mount options without a prefix character or prefixed with a plus
 character ('+') will be added to the filesystem.
 .IP
 The following mount options can be set or cleared using
@@ -466,8 +510,8 @@ Enable debugging code for this filesystem.
 Emulate BSD behavior when creating new files: they will take the group-id
 of the directory in which they were created.  The standard System V behavior
 is the default, where newly created files take on the fsgid of the current
-process, unless the directory has the setgid bit set, in which case it takes 
-the gid from the parent directory, and also gets the setgid bit set if it is 
+process, unless the directory has the setgid bit set, in which case it takes
+the gid from the parent directory, and also gets the setgid bit set if it is
 a directory itself.
 .TP
 .B user_xattr
@@ -487,7 +531,7 @@ into the main filesystem.
 .TP
 .B journal_data_ordered
 When the filesystem is mounted with journalling enabled, all data is forced
-directly out to the main file system prior to its metadata being committed 
+directly out to the main file system prior to its metadata being committed
 to the journal.
 .TP
 .B journal_data_writeback
@@ -529,9 +573,9 @@ only supported by the ext4 file system driver in 2.6.35+ kernels.)
 .BR \-O " [^]\fIfeature\fR[,...]"
 Set or clear the indicated filesystem features (options) in the filesystem.
 More than one filesystem feature can be cleared or set by separating
-features with commas.  Filesystem features prefixed with a 
-caret character ('^') will be cleared in the filesystem's superblock; 
-filesystem features without a prefix character or prefixed with a plus 
+features with commas.  Filesystem features prefixed with a
+caret character ('^') will be cleared in the filesystem's superblock;
+filesystem features without a prefix character or prefixed with a plus
 character ('+') will be added to the filesystem.  For a detailed
 description of the file system features, please see the man page
 .BR ext4 (5).
@@ -540,14 +584,29 @@ The following filesystem features can be set or cleared using
 .BR tune2fs :
 .RS 1.2i
 .TP
+.B 64bit
+Enable the file system to be larger than 2^32 blocks.
+.TP
+.B casefold
+Enable support for file system level casefolding.
+.B Tune2fs
+currently only supports setting this filesystem feature.
+.TP
 .B dir_index
 Use hashed b-trees to speed up lookups for large directories.
 .TP
 .B dir_nlink
 Allow more than 65000 subdirectories per directory.
 .TP
+.B ea_inode
+Allow the value of each extended attribute to be placed in the data blocks of a
+separate inode if necessary, increasing the limit on the size and number of
+extended attributes per file.
+.B Tune2fs
+currently only supports setting this filesystem feature.
+.TP
 .B encrypt
-Enable file system level encryption.
+Enable support for file system level encryption.
 .B Tune2fs
 currently only supports setting this filesystem feature.
 .TP
@@ -573,10 +632,19 @@ enabled.
 .TP
 .B has_journal
 Use a journal to ensure filesystem consistency even across unclean shutdowns.
-Setting the filesystem feature is equivalent to using the 
+Setting the filesystem feature is equivalent to using the
 .B \-j
 option.
 .TP
+.TP
+.B fast_commit
+Enable fast commit journaling feature to improve fsync latency.
+.TP
+.B large_dir
+Increase the limit on the number of files per directory.
+.B Tune2fs
+currently only supports setting this filesystem feature.
+.TP
 .B huge_file
 Support files larger than 2 terabytes in size.
 .TP
@@ -586,6 +654,13 @@ Filesystem can contain files that are greater than 2GB.
 .B metadata_csum
 Store a checksum to protect the contents in each metadata block.
 .TP
+.B metadata_csum_seed
+Allow the filesystem to store the metadata checksum seed in the
+superblock, enabling the administrator to change the UUID of a filesystem
+using the
+.B metadata_csum
+feature while it is mounted.
+.TP
 .B mmp
 Enable or disable multiple mount protection (MMP) feature.
 .TP
@@ -609,6 +684,13 @@ Limit the number of backup superblocks to save space on large filesystems.
 .B Tune2fs
 currently only supports setting this filesystem feature.
 .TP
+.B stable_inodes
+Prevent the filesystem from being shrunk or having its UUID changed, in order to
+allow the use of specialized encryption settings that make use of the inode
+numbers and UUID.
+.B Tune2fs
+currently only supports setting this filesystem feature.
+.TP
 .B uninit_bg
 Allow the kernel to initialize bitmaps and inode tables lazily, and to
 keep a high watermark for the unused inodes in a filesystem, to reduce
@@ -616,9 +698,14 @@ keep a high watermark for the unused inodes in a filesystem, to reduce
 time.  The first e2fsck run after enabling this feature will take the
 full time, but subsequent e2fsck runs will take only a fraction of the
 original time, depending on how full the file system is.
+.TP
+.B verity
+Enable support for verity protected files.
+.B Tune2fs
+currently only supports setting this filesystem feature.
 .RE
 .IP
-After setting or clearing 
+After setting or clearing
 .BR sparse_super ,
 .BR uninit_bg ,
 .BR filetype ,
@@ -631,21 +718,18 @@ to return the filesystem to a consistent state.
 .B Tune2fs
 will print a message requesting that the system administrator run
 .BR e2fsck (8)
-if necessary.  After setting the 
+if necessary.  After setting the
 .B dir_index
-feature, 
+feature,
 .B e2fsck -D
 can be run to convert existing directories to the hashed B-tree format.
 Enabling certain filesystem features may prevent the filesystem from being
 mounted by kernels which do not support those features.  In particular, the
-.BR uninit_bg
+.B uninit_bg
 and
-.BR flex_bg
+.B flex_bg
 features are only supported by the ext4 filesystem.
 .TP
-.BI \-p " mmp_check_interval"
-Set the desired MMP check interval in seconds. It is 5 seconds by default.
-.TP
 .BI \-r " reserved-blocks-count"
 Set the number of reserved filesystem blocks.
 .TP
@@ -654,13 +738,13 @@ Sets 'quota' feature on the superblock and works on the quota files for the
 given quota type. Quota options could be one or more of the following:
 .RS 1.2i
 .TP
-.BR [^]usrquota
+.B [^]usrquota
 Sets/clears user quota inode in the superblock.
 .TP
-.BR [^]grpquota
+.B [^]grpquota
 Sets/clears group quota inode in the superblock.
 .TP
-.BR [^]prjquota
+.B [^]prjquota
 Sets/clears project quota inode in the superblock.
 .RE
 .TP
@@ -669,31 +753,31 @@ Set the time the filesystem was last checked using
 .BR  e2fsck .
 The time is interpreted using the current (local) timezone.
 This can be useful in scripts which use a Logical Volume Manager to make
-a consistent snapshot of a filesystem, and then check the filesystem 
-during off hours to make sure it hasn't been corrupted due to 
-hardware problems, etc.  If the filesystem was clean, then this option can 
-be used to set the last checked time on the original filesystem.  The format 
-of 
+a consistent snapshot of a filesystem, and then check the filesystem
+during off hours to make sure it hasn't been corrupted due to
+hardware problems, etc.  If the filesystem was clean, then this option can
+be used to set the last checked time on the original filesystem.  The format
+of
 .I time-last-checked
 is the international date format, with an optional time specifier, i.e.
-YYYYMMDD[HH[MM[SS]]].   The keyword 
+YYYYMMDD[HH[MM[SS]]].   The keyword
 .B now
-is also accepted, in which case the last checked time will be set to the 
+is also accepted, in which case the last checked time will be set to the
 current time.
 .TP
 .BI \-u " user"
 Set the user who can use the reserved filesystem blocks.
 .I user
-can be a numerical uid or a user name.  If a user name is given, it 
+can be a numerical uid or a user name.  If a user name is given, it
 is converted to a numerical uid before it is stored in the superblock.
 .TP
 .BI \-U " UUID"
 Set the universally unique identifier (UUID) of the filesystem to
 .IR UUID .
-The format of the UUID is a series of hex digits separated by hyphens, 
-like this: 
-"c1b9d5a2-f162-11cf-9ece-0020afc76f16".  
-The 
+The format of the UUID is a series of hex digits separated by hyphens,
+like this:
+"c1b9d5a2-f162-11cf-9ece-0020afc76f16".
+The
 .I UUID
 parameter may also be one of the following:
 .RS 1.2i
@@ -749,7 +833,7 @@ This manual page was written by Christian Kuhtz <chk@data-hh.Hanse.DE>.
 Time-dependent checking was added by Uwe Ohse <uwe@tirka.gun.de>.
 .SH AVAILABILITY
 .B tune2fs
-is part of the e2fsprogs package and is available from 
+is part of the e2fsprogs package and is available from
 http://e2fsprogs.sourceforge.net.
 .SH SEE ALSO
 .BR debugfs (8),
index 6239577..40f5173 100644 (file)
@@ -101,8 +101,9 @@ static int rewrite_checksums;
 static int feature_64bit;
 static int fsck_requested;
 static char *undo_file;
+int enabling_casefold;
 
-int journal_size, journal_flags;
+int journal_size, journal_fc_size, journal_flags;
 char *journal_device;
 static blk64_t journal_location = ~0LL;
 
@@ -116,6 +117,8 @@ struct blk_move {
 
 errcode_t ext2fs_run_ext3_journal(ext2_filsys *fs);
 
+static const char *fsck_explain = N_("\nThis operation requires a freshly checked filesystem.\n");
+
 static const char *please_fsck = N_("Please run e2fsck -f on the filesystem.\n");
 static const char *please_dir_fsck =
                N_("Please run e2fsck -fD on the filesystem.\n");
@@ -135,9 +138,8 @@ static void usage(void)
                  "[-g group]\n"
                  "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
                  "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-                 "\t[-p mmp_update_interval] [-r reserved_blocks_count] "
-                 "[-u user]\n"
-                 "\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+                 "\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+                 "\t[-L volume_label] [-M last_mounted_dir]\n"
                  "\t[-O [^]feature[,...]] [-Q quota_options]\n"
                  "\t[-E extended-option[,...]] [-T last_check_time] "
                  "[-U UUID]\n\t[-I new_inode_size] [-z undo_file] device\n"),
@@ -148,15 +150,20 @@ static void usage(void)
 static __u32 ok_features[3] = {
        /* Compat */
        EXT3_FEATURE_COMPAT_HAS_JOURNAL |
-               EXT2_FEATURE_COMPAT_DIR_INDEX,
+               EXT2_FEATURE_COMPAT_DIR_INDEX |
+               EXT4_FEATURE_COMPAT_FAST_COMMIT |
+               EXT4_FEATURE_COMPAT_STABLE_INODES,
        /* Incompat */
        EXT2_FEATURE_INCOMPAT_FILETYPE |
                EXT3_FEATURE_INCOMPAT_EXTENTS |
                EXT4_FEATURE_INCOMPAT_FLEX_BG |
+               EXT4_FEATURE_INCOMPAT_EA_INODE|
                EXT4_FEATURE_INCOMPAT_MMP |
                EXT4_FEATURE_INCOMPAT_64BIT |
                EXT4_FEATURE_INCOMPAT_ENCRYPT |
-               EXT4_FEATURE_INCOMPAT_CSUM_SEED,
+               EXT4_FEATURE_INCOMPAT_CSUM_SEED |
+               EXT4_FEATURE_INCOMPAT_LARGEDIR |
+               EXT4_FEATURE_INCOMPAT_CASEFOLD,
        /* R/O compat */
        EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
                EXT4_FEATURE_RO_COMPAT_HUGE_FILE|
@@ -167,14 +174,16 @@ static __u32 ok_features[3] = {
                EXT4_FEATURE_RO_COMPAT_QUOTA |
                EXT4_FEATURE_RO_COMPAT_METADATA_CSUM |
                EXT4_FEATURE_RO_COMPAT_READONLY |
-               EXT4_FEATURE_RO_COMPAT_PROJECT
+               EXT4_FEATURE_RO_COMPAT_PROJECT |
+               EXT4_FEATURE_RO_COMPAT_VERITY
 };
 
 static __u32 clear_ok_features[3] = {
        /* Compat */
        EXT3_FEATURE_COMPAT_HAS_JOURNAL |
                EXT2_FEATURE_COMPAT_RESIZE_INODE |
-               EXT2_FEATURE_COMPAT_DIR_INDEX,
+               EXT2_FEATURE_COMPAT_DIR_INDEX |
+               EXT4_FEATURE_COMPAT_FAST_COMMIT,
        /* Incompat */
        EXT2_FEATURE_INCOMPAT_FILETYPE |
                EXT4_FEATURE_INCOMPAT_FLEX_BG |
@@ -188,6 +197,7 @@ static __u32 clear_ok_features[3] = {
                EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE|
                EXT4_FEATURE_RO_COMPAT_GDT_CSUM |
                EXT4_FEATURE_RO_COMPAT_QUOTA |
+               EXT4_FEATURE_RO_COMPAT_PROJECT |
                EXT4_FEATURE_RO_COMPAT_METADATA_CSUM |
                EXT4_FEATURE_RO_COMPAT_READONLY
 };
@@ -213,8 +223,8 @@ static int get_journal_sb(ext2_filsys jfs, char buf[SUPERBLOCK_SIZE])
        }
 
        jsb = (journal_superblock_t *) buf;
-       if ((jsb->s_header.h_magic != (unsigned)ntohl(JFS_MAGIC_NUMBER)) ||
-           (jsb->s_header.h_blocktype != (unsigned)ntohl(JFS_SUPERBLOCK_V2))) {
+       if ((jsb->s_header.h_magic != (unsigned)ntohl(JBD2_MAGIC_NUMBER)) ||
+           (jsb->s_header.h_blocktype != (unsigned)ntohl(JBD2_SUPERBLOCK_V2))) {
                fputs(_("Journal superblock not found!\n"), stderr);
                return EXT2_ET_BAD_MAGIC;
        }
@@ -222,7 +232,7 @@ static int get_journal_sb(ext2_filsys jfs, char buf[SUPERBLOCK_SIZE])
        return 0;
 }
 
-static __u8 *journal_user(__u8 uuid[UUID_SIZE], __u8 s_users[JFS_USERS_SIZE],
+static __u8 *journal_user(__u8 uuid[UUID_SIZE], __u8 s_users[JBD2_USERS_SIZE],
                          int nr_users)
 {
        int i;
@@ -287,6 +297,12 @@ static int remove_journal_device(ext2_filsys fs)
        jsb = (journal_superblock_t *) buf;
        /* Find the filesystem UUID */
        nr_users = ntohl(jsb->s_nr_users);
+       if (nr_users > JBD2_USERS_MAX) {
+               fprintf(stderr, _("Journal superblock is corrupted, nr_users\n"
+                                "is too high (%d).\n"), nr_users);
+               commit_remove_journal = 1;
+               goto no_valid_journal;
+       }
 
        if (!journal_user(fs->super->s_uuid, jsb->s_users, nr_users)) {
                fputs(_("Filesystem's UUID not found on journal device.\n"),
@@ -354,7 +370,7 @@ static errcode_t remove_journal_inode(ext2_filsys fs)
 {
        struct ext2_inode       inode;
        errcode_t               retval;
-       ino_t                   ino = fs->super->s_journal_inum;
+       ext2_ino_t              ino = fs->super->s_journal_inum;
 
        retval = ext2fs_read_inode(fs, ino,  &inode);
        if (retval) {
@@ -412,24 +428,27 @@ static int update_mntopts(ext2_filsys fs, char *mntopts)
        return 0;
 }
 
-static void check_fsck_needed(ext2_filsys fs, const char *prompt)
+static int check_fsck_needed(ext2_filsys fs, const char *prompt)
 {
        /* Refuse to modify anything but a freshly checked valid filesystem. */
        if (!(fs->super->s_state & EXT2_VALID_FS) ||
            (fs->super->s_state & EXT2_ERROR_FS) ||
            (fs->super->s_lastcheck < fs->super->s_mtime)) {
-               printf("\n%s\n", _(please_fsck));
+               puts(_(fsck_explain));
+               puts(_(please_fsck));
                if (mount_flags & EXT2_MF_READONLY)
                        printf("%s", _("(and reboot afterwards!)\n"));
-               exit(1);
+               return 1;
        }
 
        /* Give the admin a few seconds to bail out of a dangerous op. */
        if (!getenv("TUNE2FS_FORCE_PROMPT") && (!isatty(0) || !isatty(1)))
-               return;
+               return 0;
 
        puts(prompt);
        proceed_question(5);
+
+       return 0;
 }
 
 static void request_dir_fsck_afterwards(ext2_filsys fs)
@@ -440,7 +459,8 @@ static void request_dir_fsck_afterwards(ext2_filsys fs)
                return;
        fsck_requested++;
        fs->super->s_state &= ~EXT2_VALID_FS;
-       printf("\n%s\n", _(please_dir_fsck));
+       puts(_(fsck_explain));
+       puts(_(please_dir_fsck));
        if (mount_flags & EXT2_MF_READONLY)
                printf("%s", _("(and reboot afterwards!)\n"));
 }
@@ -460,9 +480,6 @@ static void request_fsck_afterwards(ext2_filsys fs)
 
 static void convert_64bit(ext2_filsys fs, int direction)
 {
-       if (!direction)
-               return;
-
        /*
         * Is resize2fs going to demand a fsck run? Might as well tell the
         * user now.
@@ -487,64 +504,6 @@ static void convert_64bit(ext2_filsys fs, int direction)
                fprintf(stderr, _("' to disable 64-bit mode.\n"));
 }
 
-/* Rewrite extents */
-static errcode_t rewrite_extents(ext2_filsys fs, ext2_ino_t ino,
-                                struct ext2_inode *inode)
-{
-       ext2_extent_handle_t    handle;
-       struct ext2fs_extent    extent;
-       errcode_t               errcode;
-       struct ext2_extent_info info;
-
-       if (!(inode->i_flags & EXT4_EXTENTS_FL) ||
-           !ext2fs_has_feature_metadata_csum(fs->super))
-               return 0;
-
-       errcode = ext2fs_extent_open(fs, ino, &handle);
-       if (errcode)
-               return errcode;
-
-       errcode = ext2fs_extent_get(handle, EXT2_EXTENT_ROOT, &extent);
-       if (errcode)
-               goto out;
-
-       do {
-               errcode = ext2fs_extent_get_info(handle, &info);
-               if (errcode)
-                       break;
-
-               /*
-                * If this is the first extent in an extent block that we
-                * haven't visited, rewrite the extent to force the ETB
-                * checksum to be rewritten.
-                */
-               if (info.curr_entry == 1 && info.curr_level != 0 &&
-                   !(extent.e_flags & EXT2_EXTENT_FLAGS_SECOND_VISIT)) {
-                       errcode = ext2fs_extent_replace(handle, 0, &extent);
-                       if (errcode)
-                               break;
-               }
-
-               /* Skip to the end of a block of leaf nodes */
-               if (extent.e_flags & EXT2_EXTENT_FLAGS_LEAF) {
-                       errcode = ext2fs_extent_get(handle,
-                                                   EXT2_EXTENT_LAST_SIB,
-                                                   &extent);
-                       if (errcode)
-                               break;
-               }
-
-               errcode = ext2fs_extent_get(handle, EXT2_EXTENT_NEXT, &extent);
-       } while (errcode == 0);
-
-out:
-       /* Ok if we run off the end */
-       if (errcode == EXT2_ET_EXTENT_NO_NEXT)
-               errcode = 0;
-       ext2fs_extent_free(handle);
-       return errcode;
-}
-
 /*
  * Rewrite directory blocks with checksums
  */
@@ -552,7 +511,8 @@ struct rewrite_dir_context {
        char *buf;
        errcode_t errcode;
        ext2_ino_t dir;
-       int is_htree;
+       int is_htree:1;
+       int clear_htree:1;
 };
 
 static int rewrite_dir_block(ext2_filsys fs,
@@ -571,8 +531,13 @@ static int rewrite_dir_block(ext2_filsys fs,
        if (ctx->errcode)
                return BLOCK_ABORT;
 
-       /* if htree node... */
-       if (ctx->is_htree)
+       /*
+        * if htree node... Note that if we are clearing htree structures from
+        * the directory, we treat the htree internal block as an ordinary leaf.
+        * The code below will do the right thing and make space for checksum
+        * there.
+        */
+       if (ctx->is_htree && !ctx->clear_htree)
                ext2fs_get_dx_countlimit(fs, (struct ext2_dir_entry *)ctx->buf,
                                         &dcl, &dcl_offset);
        if (dcl) {
@@ -701,7 +666,8 @@ static errcode_t rewrite_directory(ext2_filsys fs, ext2_ino_t dir,
        if (retval)
                return retval;
 
-       ctx.is_htree = (inode->i_flags & EXT2_INDEX_FL);
+       ctx.is_htree = !!(inode->i_flags & EXT2_INDEX_FL);
+       ctx.clear_htree = !ext2fs_has_feature_dir_index(fs->super);
        ctx.dir = dir;
        ctx.errcode = 0;
        retval = ext2fs_block_iterate3(fs, dir, BLOCK_FLAG_READ_ONLY |
@@ -712,121 +678,256 @@ static errcode_t rewrite_directory(ext2_filsys fs, ext2_ino_t dir,
        if (retval)
                return retval;
 
+       if (ctx.is_htree && ctx.clear_htree) {
+               inode->i_flags &= ~EXT2_INDEX_FL;
+               retval = ext2fs_write_inode(fs, dir, inode);
+               if (retval)
+                       return retval;
+       }
+
        return ctx.errcode;
 }
 
 /*
- * Forcibly set checksums in all inodes.
+ * Context information that does not change across rewrite_one_inode()
+ * invocations.
  */
-static void rewrite_inodes(ext2_filsys fs)
+struct rewrite_context {
+       ext2_filsys fs;
+       struct ext2_inode *zero_inode;
+       char *ea_buf;
+       int inode_size;
+};
+
+#define fatal_err(code, args...)               \
+       do {                                    \
+               com_err(__func__, code, args);  \
+               exit(1);                        \
+       } while (0);
+
+static void update_ea_inode_hash(struct rewrite_context *ctx, ext2_ino_t ino,
+                                struct ext2_inode *inode)
 {
-       int length = EXT2_INODE_SIZE(fs->super);
-       struct ext2_inode *inode, *zero;
-       char            *ea_buf;
-       ext2_inode_scan scan;
-       errcode_t       retval;
-       ext2_ino_t      ino;
-       blk64_t         file_acl_block;
-       int             inode_dirty;
+       errcode_t retval;
+       ext2_file_t file;
+       __u32 hash;
 
-       if (fs->super->s_creator_os == EXT2_OS_HURD)
-               return;
+       retval = ext2fs_file_open(ctx->fs, ino, 0, &file);
+       if (retval)
+               fatal_err(retval, "open ea_inode");
+       retval = ext2fs_file_read(file, ctx->ea_buf, inode->i_size,
+                                 NULL);
+       if (retval)
+               fatal_err(retval, "read ea_inode");
+       retval = ext2fs_file_close(file);
+       if (retval)
+               fatal_err(retval, "close ea_inode");
 
-       retval = ext2fs_open_inode_scan(fs, 0, &scan);
-       if (retval) {
-               com_err("set_csum", retval, "while opening inode scan");
-               exit(1);
-       }
+       hash = ext2fs_crc32c_le(ctx->fs->csum_seed,
+                               (unsigned char *) ctx->ea_buf, inode->i_size);
+       ext2fs_set_ea_inode_hash(inode, hash);
+}
 
-       retval = ext2fs_get_mem(length, &inode);
-       if (retval) {
-               com_err("set_csum", retval, "while allocating memory");
-               exit(1);
+static int update_xattr_entry_hashes(ext2_filsys fs,
+                                    struct ext2_ext_attr_entry *entry,
+                                    struct ext2_ext_attr_entry *end)
+{
+       int modified = 0;
+       errcode_t retval;
+
+       while (entry < end && !EXT2_EXT_IS_LAST_ENTRY(entry)) {
+               if (entry->e_value_inum) {
+                       retval = ext2fs_ext_attr_hash_entry2(fs, entry, NULL,
+                                                            &entry->e_hash);
+                       if (retval)
+                               fatal_err(retval, "hash ea_inode entry");
+                       modified = 1;
+               }
+               entry = EXT2_EXT_ATTR_NEXT(entry);
        }
+       return modified;
+}
 
-       retval = ext2fs_get_memzero(length, &zero);
-       if (retval) {
-               com_err("set_csum", retval, "while allocating memory");
-               exit(1);
+static void update_inline_xattr_hashes(struct rewrite_context *ctx,
+                                      struct ext2_inode_large *inode)
+{
+       struct ext2_ext_attr_entry *start, *end;
+       __u32 *ea_magic;
+
+       if (inode->i_extra_isize == 0)
+               return;
+
+       if (inode->i_extra_isize & 3 ||
+           inode->i_extra_isize > ctx->inode_size - EXT2_GOOD_OLD_INODE_SIZE)
+               fatal_err(EXT2_ET_INODE_CORRUPTED, "bad i_extra_isize")
+
+       ea_magic = (__u32 *)((char *)inode + EXT2_GOOD_OLD_INODE_SIZE +
+                               inode->i_extra_isize);
+       if (*ea_magic != EXT2_EXT_ATTR_MAGIC)
+               return;
+
+       start = (struct ext2_ext_attr_entry *)(ea_magic + 1);
+       end = (struct ext2_ext_attr_entry *)((char *)inode + ctx->inode_size);
+
+       update_xattr_entry_hashes(ctx->fs, start, end);
+}
+
+static void update_block_xattr_hashes(struct rewrite_context *ctx,
+                                     char *block_buf)
+{
+       struct ext2_ext_attr_header *header;
+       struct ext2_ext_attr_entry *start, *end;
+
+       header = (struct ext2_ext_attr_header *)block_buf;
+       if (header->h_magic != EXT2_EXT_ATTR_MAGIC)
+               return;
+
+       start = (struct ext2_ext_attr_entry *)(header+1);
+       end = (struct ext2_ext_attr_entry *)(block_buf + ctx->fs->blocksize);
+
+       if (update_xattr_entry_hashes(ctx->fs, start, end))
+               ext2fs_ext_attr_block_rehash(header, end);
+}
+
+static void rewrite_one_inode(struct rewrite_context *ctx, ext2_ino_t ino,
+                             struct ext2_inode *inode)
+{
+       blk64_t file_acl_block;
+       errcode_t retval;
+
+       if (!ext2fs_test_inode_bitmap2(ctx->fs->inode_map, ino)) {
+               if (!memcmp(inode, ctx->zero_inode, ctx->inode_size))
+                       return;
+               memset(inode, 0, ctx->inode_size);
        }
 
-       retval = ext2fs_get_mem(fs->blocksize, &ea_buf);
-       if (retval) {
-               com_err("set_csum", retval, "while allocating memory");
-               exit(1);
+       if (inode->i_flags & EXT4_EA_INODE_FL)
+               update_ea_inode_hash(ctx, ino, inode);
+
+       if (ctx->inode_size != EXT2_GOOD_OLD_INODE_SIZE)
+               update_inline_xattr_hashes(ctx,
+                                          (struct ext2_inode_large *)inode);
+
+       retval = ext2fs_write_inode_full(ctx->fs, ino, inode, ctx->inode_size);
+       if (retval)
+               fatal_err(retval, "while writing inode");
+
+       retval = ext2fs_fix_extents_checksums(ctx->fs, ino, inode);
+       if (retval)
+               fatal_err(retval, "while rewriting extents");
+
+       if (LINUX_S_ISDIR(inode->i_mode) &&
+           ext2fs_inode_has_valid_blocks2(ctx->fs, inode)) {
+               retval = rewrite_directory(ctx->fs, ino, inode);
+               if (retval)
+                       fatal_err(retval, "while rewriting directories");
        }
 
+       file_acl_block = ext2fs_file_acl_block(ctx->fs, inode);
+       if (!file_acl_block)
+               return;
+
+       retval = ext2fs_read_ext_attr3(ctx->fs, file_acl_block, ctx->ea_buf,
+                                      ino);
+       if (retval)
+               fatal_err(retval, "while rewriting extended attribute");
+
+       update_block_xattr_hashes(ctx, ctx->ea_buf);
+       retval = ext2fs_write_ext_attr3(ctx->fs, file_acl_block, ctx->ea_buf,
+                                       ino);
+       if (retval)
+               fatal_err(retval, "while rewriting extended attribute");
+}
+
+#define REWRITE_EA_FL          0x01    /* Rewrite EA inodes */
+#define REWRITE_DIR_FL         0x02    /* Rewrite directories */
+#define REWRITE_NONDIR_FL      0x04    /* Rewrite other inodes */
+#define REWRITE_ALL (REWRITE_EA_FL | REWRITE_DIR_FL | REWRITE_NONDIR_FL)
+
+static void rewrite_inodes_pass(struct rewrite_context *ctx, unsigned int flags)
+{
+       ext2_inode_scan scan;
+       errcode_t       retval;
+       ext2_ino_t      ino;
+       struct ext2_inode *inode;
+       int rewrite;
+
+       retval = ext2fs_get_mem(ctx->inode_size, &inode);
+       if (retval)
+               fatal_err(retval, "while allocating memory");
+
+       retval = ext2fs_open_inode_scan(ctx->fs, 0, &scan);
+       if (retval)
+               fatal_err(retval, "while opening inode scan");
+
        do {
-               retval = ext2fs_get_next_inode_full(scan, &ino, inode, length);
-               if (retval) {
-                       com_err("set_csum", retval, "while getting next inode");
-                       exit(1);
-               }
+               retval = ext2fs_get_next_inode_full(scan, &ino, inode,
+                                                   ctx->inode_size);
+               if (retval)
+                       fatal_err(retval, "while getting next inode");
                if (!ino)
                        break;
-               if (ext2fs_test_inode_bitmap2(fs->inode_map, ino)) {
-                       inode_dirty = 1;
+
+               rewrite = 0;
+               if (inode->i_flags & EXT4_EA_INODE_FL) {
+                       if (flags & REWRITE_EA_FL)
+                               rewrite = 1;
+               } else if (LINUX_S_ISDIR(inode->i_mode)) {
+                       if (flags & REWRITE_DIR_FL)
+                               rewrite = 1;
                } else {
-                       if (memcmp(inode, zero, length) != 0) {
-                               memset(inode, 0, length);
-                               inode_dirty = 1;
-                       } else {
-                               inode_dirty = 0;
-                       }
+                       if (flags & REWRITE_NONDIR_FL)
+                               rewrite = 1;
                }
+               if (rewrite)
+                       rewrite_one_inode(ctx, ino, inode);
+       } while (ino);
+       ext2fs_close_inode_scan(scan);
+       ext2fs_free_mem(&inode);
+}
 
-               if (inode_dirty) {
-                       retval = ext2fs_write_inode_full(fs, ino, inode,
-                                                        length);
-                       if (retval) {
-                               com_err("set_csum", retval, "while writing "
-                                       "inode");
-                               exit(1);
-                       }
-               }
+/*
+ * Forcibly rewrite checksums in inodes specified by 'flags'
+ */
+static void rewrite_inodes(ext2_filsys fs, unsigned int flags)
+{
+       struct rewrite_context ctx = {
+               .fs = fs,
+               .inode_size = EXT2_INODE_SIZE(fs->super),
+       };
+       errcode_t retval;
 
-               retval = rewrite_extents(fs, ino, inode);
-               if (retval) {
-                       com_err("rewrite_extents", retval,
-                               "while rewriting extents");
-                       exit(1);
-               }
+       if (fs->super->s_creator_os == EXT2_OS_HURD)
+               return;
 
-               if (LINUX_S_ISDIR(inode->i_mode) &&
-                   ext2fs_inode_has_valid_blocks2(fs, inode)) {
-                       retval = rewrite_directory(fs, ino, inode);
-                       if (retval) {
-                               com_err("rewrite_directory", retval,
-                                       "while rewriting directories");
-                               exit(1);
-                       }
-               }
+       retval = ext2fs_get_memzero(ctx.inode_size, &ctx.zero_inode);
+       if (retval)
+               fatal_err(retval, "while allocating memory");
 
-               file_acl_block = ext2fs_file_acl_block(fs, inode);
-               if (!file_acl_block)
-                       continue;
-               retval = ext2fs_read_ext_attr3(fs, file_acl_block, ea_buf, ino);
-               if (retval) {
-                       com_err("rewrite_eablock", retval,
-                               "while rewriting extended attribute");
-                       exit(1);
-               }
-               retval = ext2fs_write_ext_attr3(fs, file_acl_block, ea_buf,
-                                               ino);
-               if (retval) {
-                       com_err("rewrite_eablock", retval,
-                               "while rewriting extended attribute");
-                       exit(1);
-               }
-       } while (ino);
+       retval = ext2fs_get_mem(64 * 1024, &ctx.ea_buf);
+       if (retval)
+               fatal_err(retval, "while allocating memory");
 
-       ext2fs_free_mem(&zero);
-       ext2fs_free_mem(&inode);
-       ext2fs_free_mem(&ea_buf);
-       ext2fs_close_inode_scan(scan);
+       /*
+        * Extended attribute inodes have a lookup hash that needs to be
+        * recalculated with the new csum_seed. Other inodes referencing xattr
+        * inodes need this value to be up to date. That's why we do two passes:
+        *
+        * pass 1: update xattr inodes to update their lookup hash as well as
+        *         other checksums.
+        *
+        * pass 2: go over other inodes to update their checksums.
+        */
+       if (ext2fs_has_feature_ea_inode(fs->super) && (flags & REWRITE_EA_FL))
+               rewrite_inodes_pass(&ctx, REWRITE_EA_FL);
+       flags &= ~REWRITE_EA_FL;
+       rewrite_inodes_pass(&ctx, flags);
+
+       ext2fs_free_mem(&ctx.zero_inode);
+       ext2fs_free_mem(&ctx.ea_buf);
 }
 
-static void rewrite_metadata_checksums(ext2_filsys fs)
+static void rewrite_metadata_checksums(ext2_filsys fs, unsigned int flags)
 {
        errcode_t retval;
        dgrp_t i;
@@ -836,12 +937,9 @@ static void rewrite_metadata_checksums(ext2_filsys fs)
        for (i = 0; i < fs->group_desc_count; i++)
                ext2fs_group_desc_csum_set(fs, i);
        retval = ext2fs_read_bitmaps(fs);
-       if (retval) {
-               com_err("rewrite_metadata_checksums", retval,
-                       "while reading bitmaps");
-               exit(1);
-       }
-       rewrite_inodes(fs);
+       if (retval)
+               fatal_err(retval, "while reading bitmaps");
+       rewrite_inodes(fs, flags);
        ext2fs_mark_ib_dirty(fs);
        ext2fs_mark_bb_dirty(fs);
        ext2fs_mmp_update2(fs, 1);
@@ -1140,6 +1238,24 @@ mmp_error:
                        uuid_generate((unsigned char *) sb->s_hash_seed);
        }
 
+       if (FEATURE_OFF(E2P_FEATURE_COMPAT, EXT2_FEATURE_COMPAT_DIR_INDEX) &&
+           ext2fs_has_feature_metadata_csum(sb)) {
+               if (check_fsck_needed(fs,
+                       _("Disabling directory index on filesystem with "
+                         "checksums could take some time.")))
+                       return 1;
+               if (mount_flags & EXT2_MF_MOUNTED) {
+                       fputs(_("Cannot disable dir_index on a mounted "
+                               "filesystem!\n"), stderr);
+                       exit(1);
+               }
+               /*
+                * Clearing dir_index on checksummed filesystem requires
+                * rewriting all directories to update checksums.
+                */
+               rewrite_checksums |= REWRITE_DIR_FL;
+       }
+
        if (FEATURE_OFF(E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_FLEX_BG)) {
                if (ext2fs_check_desc(fs)) {
                        fputs(_("Clearing the flex_bg flag would "
@@ -1163,12 +1279,13 @@ mmp_error:
 
        if (FEATURE_ON(E2P_FEATURE_RO_INCOMPAT,
                       EXT4_FEATURE_RO_COMPAT_METADATA_CSUM)) {
-               check_fsck_needed(fs,
-                       _("Enabling checksums could take some time."));
+               if (check_fsck_needed(fs,
+                       _("Enabling checksums could take some time.")))
+                       return 1;
                if (mount_flags & EXT2_MF_MOUNTED) {
                        fputs(_("Cannot enable metadata_csum on a mounted "
                                "filesystem!\n"), stderr);
-                       exit(1);
+                       return 1;
                }
                if (!ext2fs_has_feature_extents(fs->super))
                        printf("%s",
@@ -1183,7 +1300,7 @@ mmp_error:
                                 "The larger fields afforded by this feature "
                                 "enable full-strength checksumming.  "
                                 "Run resize2fs -b to rectify.\n"));
-               rewrite_checksums = 1;
+               rewrite_checksums = REWRITE_ALL;
                /* metadata_csum supersedes uninit_bg */
                ext2fs_clear_feature_gdt_csum(fs->super);
 
@@ -1204,14 +1321,15 @@ mmp_error:
                        EXT4_FEATURE_RO_COMPAT_METADATA_CSUM)) {
                __u32   test_features[3];
 
-               check_fsck_needed(fs,
-                       _("Disabling checksums could take some time."));
+               if (check_fsck_needed(fs,
+                       _("Disabling checksums could take some time.")))
+                       return 1;
                if (mount_flags & EXT2_MF_MOUNTED) {
                        fputs(_("Cannot disable metadata_csum on a mounted "
                                "filesystem!\n"), stderr);
-                       exit(1);
+                       return 1;
                }
-               rewrite_checksums = 1;
+               rewrite_checksums = REWRITE_ALL;
 
                /* Enable uninit_bg unless the user expressly turned it off */
                memcpy(test_features, old_features, sizeof(test_features));
@@ -1247,6 +1365,12 @@ mmp_error:
 
        if (FEATURE_ON(E2P_FEATURE_RO_INCOMPAT,
                       EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
+               if (mount_flags & EXT2_MF_MOUNTED) {
+                       fputs(_("Cannot enable uninit_bg on a mounted "
+                               "filesystem!\n"), stderr);
+                       return 1;
+               }
+
                /* Do not enable uninit_bg when metadata_csum enabled */
                if (ext2fs_has_feature_metadata_csum(fs->super))
                        ext2fs_clear_feature_gdt_csum(fs->super);
@@ -1256,6 +1380,12 @@ mmp_error:
 
        if (FEATURE_OFF(E2P_FEATURE_RO_INCOMPAT,
                        EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
+               if (mount_flags & EXT2_MF_MOUNTED) {
+                       fputs(_("Cannot disable uninit_bg on a mounted "
+                               "filesystem!\n"), stderr);
+                       return 1;
+               }
+
                err = disable_uninit_bg(fs,
                                EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
                if (err)
@@ -1272,7 +1402,7 @@ mmp_error:
                if (mount_flags & EXT2_MF_MOUNTED) {
                        fprintf(stderr, _("Cannot enable 64-bit mode "
                                          "while mounted!\n"));
-                       exit(1);
+                       return 1;
                }
                ext2fs_clear_feature_64bit(sb);
                feature_64bit = 1;
@@ -1282,7 +1412,7 @@ mmp_error:
                if (mount_flags & EXT2_MF_MOUNTED) {
                        fprintf(stderr, _("Cannot disable 64-bit mode "
                                          "while mounted!\n"));
-                       exit(1);
+                       return 1;
                }
                ext2fs_set_feature_64bit(sb);
                feature_64bit = -1;
@@ -1308,15 +1438,23 @@ mmp_error:
        }
 
        if (FEATURE_ON(E2P_FEATURE_RO_INCOMPAT,
-                               EXT4_FEATURE_RO_COMPAT_PROJECT)) {
-               if (!Q_flag && !ext2fs_has_feature_quota(sb))
-                       fputs(_("\nWarning: enabled project without quota together\n"),
-                               stderr);
+                      EXT4_FEATURE_RO_COMPAT_PROJECT)) {
+               if (fs->super->s_inode_size == EXT2_GOOD_OLD_INODE_SIZE) {
+                       fprintf(stderr, _("Cannot enable project feature; "
+                                         "inode size too small.\n"));
+                       return 1;
+               }
                Q_flag = 1;
                quota_enable[PRJQUOTA] = QOPT_ENABLE;
        }
 
        if (FEATURE_OFF(E2P_FEATURE_RO_INCOMPAT,
+                       EXT4_FEATURE_RO_COMPAT_PROJECT)) {
+               Q_flag = 1;
+               quota_enable[PRJQUOTA] = QOPT_DISABLE;
+       }
+
+       if (FEATURE_OFF(E2P_FEATURE_RO_INCOMPAT,
                                EXT4_FEATURE_RO_COMPAT_QUOTA)) {
                /*
                 * Set the Q_flag here and handle the quota options in the code
@@ -1338,6 +1476,17 @@ mmp_error:
                        EXT4_ENCRYPTION_MODE_AES_256_CTS;
        }
 
+       if (FEATURE_ON(E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_CASEFOLD)) {
+               if (mount_flags & EXT2_MF_MOUNTED) {
+                       fputs(_("The casefold feature may only be enabled when "
+                               "the filesystem is unmounted.\n"), stderr);
+                       return 1;
+               }
+               fs->super->s_encoding = EXT4_ENC_UTF8_12_1;
+               fs->super->s_encoding_flags = e2p_get_encoding_flags(EXT4_ENC_UTF8_12_1);
+               enabling_casefold = 1;
+       }
+
        if (FEATURE_ON(E2P_FEATURE_INCOMPAT,
                EXT4_FEATURE_INCOMPAT_CSUM_SEED)) {
                if (!ext2fs_has_feature_metadata_csum(sb)) {
@@ -1357,16 +1506,19 @@ mmp_error:
 
                uuid_seed = ext2fs_crc32c_le(~0, fs->super->s_uuid,
                                        sizeof(fs->super->s_uuid));
-               if (fs->super->s_checksum_seed != uuid_seed &&
-                   (mount_flags & EXT2_MF_MOUNTED)) {
-                       fputs(_("UUID has changed since enabling "
-                               "metadata_csum.  Filesystem must be unmounted "
-                               "\nto safely rewrite all metadata to "
-                               "match the new UUID.\n"), stderr);
-                       return 1;
+               if (fs->super->s_checksum_seed != uuid_seed) {
+                       if (mount_flags & (EXT2_MF_BUSY|EXT2_MF_MOUNTED)) {
+                               fputs(_("UUID has changed since enabling "
+               "metadata_csum.  Filesystem must be unmounted "
+               "\nto safely rewrite all metadata to match the new UUID.\n"),
+                                     stderr);
+                               return 1;
+                       }
+                       if (check_fsck_needed(fs, _("Recalculating checksums "
+                                                   "could take some time.")))
+                               return 1;
+                       rewrite_checksums = REWRITE_ALL;
                }
-
-               rewrite_checksums = 1;
        }
 
        if (sb->s_rev_level == EXT2_GOOD_OLD_REV &&
@@ -1399,7 +1551,7 @@ mmp_error:
  */
 static int add_journal(ext2_filsys fs)
 {
-       unsigned long journal_blocks;
+       struct ext2fs_journal_params    jparams;
        errcode_t       retval;
        ext2_filsys     jfs;
        io_manager      io_ptr;
@@ -1445,13 +1597,13 @@ static int add_journal(ext2_filsys fs)
        } else if (journal_size) {
                fputs(_("Creating journal inode: "), stdout);
                fflush(stdout);
-               journal_blocks = figure_journal_size(journal_size, fs);
+               figure_journal_size(&jparams, journal_size, journal_fc_size, fs);
 
                if (journal_location_string)
                        journal_location =
                                parse_num_blocks2(journal_location_string,
                                                  fs->super->s_log_block_size);
-               retval = ext2fs_add_journal_inode2(fs, journal_blocks,
+               retval = ext2fs_add_journal_inode3(fs, &jparams,
                                                   journal_location,
                                                   journal_flags);
                if (retval) {
@@ -1477,34 +1629,42 @@ err:
        return 1;
 }
 
-static void handle_quota_options(ext2_filsys fs)
+static int handle_quota_options(ext2_filsys fs)
 {
        errcode_t retval;
        quota_ctx_t qctx;
        ext2_ino_t qf_ino;
        enum quota_type qtype;
-       int enable = 0;
+       unsigned int qtype_bits = 0;
+       int need_dirty = 0;
 
        for (qtype = 0 ; qtype < MAXQUOTAS; qtype++)
                if (quota_enable[qtype] != 0)
                        break;
        if (qtype == MAXQUOTAS)
                /* Nothing to do. */
-               return;
+               return 0;
+
+       if (quota_enable[PRJQUOTA] == QOPT_ENABLE &&
+           fs->super->s_inode_size == EXT2_GOOD_OLD_INODE_SIZE) {
+               fprintf(stderr, _("Cannot enable project quota; "
+                                 "inode size too small.\n"));
+               return 1;
+       }
 
-       retval = quota_init_context(&qctx, fs, 0);
+       for (qtype = 0; qtype < MAXQUOTAS; qtype++) {
+               if (quota_enable[qtype] == QOPT_ENABLE)
+                       qtype_bits |= 1 << qtype;
+       }
+
+       retval = quota_init_context(&qctx, fs, qtype_bits);
        if (retval) {
                com_err(program_name, retval,
                        _("while initializing quota context in support library"));
-               exit(1);
-       }
-       for (qtype = 0 ; qtype < MAXQUOTAS; qtype++) {
-               if (quota_enable[qtype] == QOPT_ENABLE) {
-                       enable = 1;
-                       break;
-               }
+               return 1;
        }
-       if (enable)
+
+       if (qtype_bits)
                quota_compute_usage(qctx);
 
        for (qtype = 0 ; qtype < MAXQUOTAS; qtype++) {
@@ -1517,7 +1677,9 @@ static void handle_quota_options(ext2_filsys fs)
                                        com_err(program_name, retval,
                                                _("while updating quota limits (%d)"),
                                                qtype);
-                                       exit(1);
+                               quota_errout:
+                                       quota_release_context(&qctx);
+                                       return 1;
                                }
                        }
                        retval = quota_write_inode(qctx, 1 << qtype);
@@ -1525,7 +1687,17 @@ static void handle_quota_options(ext2_filsys fs)
                                com_err(program_name, retval,
                                        _("while writing quota file (%d)"),
                                        qtype);
-                               exit(1);
+                               goto quota_errout;
+                       }
+                       /* Enable Quota feature if one of quota enabled */
+                       if (!ext2fs_has_feature_quota(fs->super)) {
+                               ext2fs_set_feature_quota(fs->super);
+                               need_dirty = 1;
+                       }
+                       if (qtype == PRJQUOTA &&
+                           !ext2fs_has_feature_project(fs->super)) {
+                               ext2fs_set_feature_project(fs->super);
+                               need_dirty = 1;
                        }
                } else if (quota_enable[qtype] == QOPT_DISABLE) {
                        retval = quota_remove_inode(fs, qtype);
@@ -1533,28 +1705,30 @@ static void handle_quota_options(ext2_filsys fs)
                                com_err(program_name, retval,
                                        _("while removing quota file (%d)"),
                                        qtype);
-                               exit(1);
+                               goto quota_errout;
+                       }
+                       if (qtype == PRJQUOTA) {
+                               ext2fs_clear_feature_project(fs->super);
+                               need_dirty = 1;
                        }
                }
        }
 
        quota_release_context(&qctx);
-
-       if (enable) {
-               ext2fs_set_feature_quota(fs->super);
-               ext2fs_mark_super_dirty(fs);
-       } else {
+       /* Clear Quota feature if all quota types disabled. */
+       if (!qtype_bits) {
                for (qtype = 0 ; qtype < MAXQUOTAS; qtype++)
-                       if (*quota_sb_inump(fs->super, qtype) != 0)
+                       if (*quota_sb_inump(fs->super, qtype))
                                break;
                if (qtype == MAXQUOTAS) {
-                       fs->super->s_feature_ro_compat &=
-                                       ~EXT4_FEATURE_RO_COMPAT_QUOTA;
-                       ext2fs_mark_super_dirty(fs);
+                       ext2fs_clear_feature_quota(fs->super);
+                       need_dirty = 1;
                }
-       }
 
-       return;
+       }
+       if (need_dirty)
+               ext2fs_mark_super_dirty(fs);
+       return 0;
 }
 
 static int option_handle_function(char *token)
@@ -1599,7 +1773,7 @@ static void parse_e2label_options(int argc, char ** argv)
                        argv[1]);
                exit(1);
        }
-       open_flag = EXT2_FLAG_JOURNAL_DEV_OK;
+       open_flag = EXT2_FLAG_JOURNAL_DEV_OK | EXT2_FLAG_SUPER_ONLY;
        if (argc == 3) {
                open_flag |= EXT2_FLAG_RW;
                L_flag = 1;
@@ -1919,9 +2093,12 @@ void do_findfs(int argc, char **argv)
 
 static int parse_extended_opts(ext2_filsys fs, const char *opts)
 {
+       struct ext2_super_block *sb = fs->super;
        char    *buf, *token, *next, *p, *arg;
        int     len, hash_alg;
        int     r_usage = 0;
+       int encoding = 0;
+       char    *encoding_flags = NULL;
 
        len = strlen(opts);
        buf = malloc(len+1);
@@ -1974,14 +2151,18 @@ static int parse_extended_opts(ext2_filsys fs, const char *opts)
                                  "Setting multiple mount protection update "
                                  "interval to %lu seconds\n", intv),
                               intv);
-                       fs->super->s_mmp_update_interval = intv;
+                       sb->s_mmp_update_interval = intv;
+                       ext2fs_mark_super_dirty(fs);
+               } else if (!strcmp(token, "force_fsck")) {
+                       sb->s_state |= EXT2_ERROR_FS;
+                       printf(_("Setting filesystem error flag to force fsck.\n"));
                        ext2fs_mark_super_dirty(fs);
                } else if (!strcmp(token, "test_fs")) {
-                       fs->super->s_flags |= EXT2_FLAGS_TEST_FILESYS;
+                       sb->s_flags |= EXT2_FLAGS_TEST_FILESYS;
                        printf("Setting test filesystem flag\n");
                        ext2fs_mark_super_dirty(fs);
                } else if (!strcmp(token, "^test_fs")) {
-                       fs->super->s_flags &= ~EXT2_FLAGS_TEST_FILESYS;
+                       sb->s_flags &= ~EXT2_FLAGS_TEST_FILESYS;
                        printf("Clearing test filesystem flag\n");
                        ext2fs_mark_super_dirty(fs);
                } else if (strcmp(token, "stride") == 0) {
@@ -2027,7 +2208,7 @@ static int parse_extended_opts(ext2_filsys fs, const char *opts)
                                r_usage++;
                                continue;
                        }
-                       fs->super->s_def_hash_version = hash_alg;
+                       sb->s_def_hash_version = hash_alg;
                        printf(_("Setting default hash algorithm "
                                 "to %s (%d)\n"),
                               arg, hash_alg);
@@ -2043,9 +2224,63 @@ static int parse_extended_opts(ext2_filsys fs, const char *opts)
                                continue;
                        }
                        ext_mount_opts = strdup(arg);
+               } else if (!strcmp(token, "encoding")) {
+                       if (!arg) {
+                               r_usage++;
+                               continue;
+                       }
+                       if (mount_flags & EXT2_MF_MOUNTED) {
+                               fputs(_("The casefold feature may only be enabled when "
+                                       "the filesystem is unmounted.\n"), stderr);
+                               r_usage++;
+                               continue;
+                       }
+                       if (ext2fs_has_feature_casefold(sb) && !enabling_casefold) {
+                               fprintf(stderr, _("Cannot alter existing encoding\n"));
+                               r_usage++;
+                               continue;
+                       }
+                       encoding = e2p_str2encoding(arg);
+                       if (encoding < 0) {
+                               fprintf(stderr, _("Invalid encoding: %s\n"), arg);
+                               r_usage++;
+                               continue;
+                       }
+                       enabling_casefold = 1;
+                       sb->s_encoding = encoding;
+                       printf(_("Setting encoding to '%s'\n"), arg);
+                       sb->s_encoding_flags =
+                               e2p_get_encoding_flags(sb->s_encoding);
+               } else if (!strcmp(token, "encoding_flags")) {
+                       if (!arg) {
+                               r_usage++;
+                               continue;
+                       }
+                       encoding_flags = arg;
                } else
                        r_usage++;
        }
+
+       if (encoding > 0 && !r_usage) {
+               sb->s_encoding_flags =
+                       e2p_get_encoding_flags(sb->s_encoding);
+
+               if (encoding_flags &&
+                   e2p_str2encoding_flags(sb->s_encoding, encoding_flags,
+                                          &sb->s_encoding_flags)) {
+                       fprintf(stderr, _("error: Invalid encoding flag: %s\n"),
+                                       encoding_flags);
+                       r_usage++;
+               } else if (encoding_flags)
+                       printf(_("Setting encoding_flags to '%s'\n"),
+                                encoding_flags);
+               ext2fs_set_feature_casefold(sb);
+               ext2fs_mark_super_dirty(fs);
+       } else if (encoding_flags && !r_usage) {
+               fprintf(stderr, _("error: An encoding must be explicitly "
+                                 "specified when passing encoding-flags\n"));
+               r_usage++;
+       }
        if (r_usage) {
                fprintf(stderr, "%s", _("\nBad options specified.\n\n"
                        "Extended options are separated by commas, "
@@ -2055,10 +2290,14 @@ static int parse_extended_opts(ext2_filsys fs, const char *opts)
                        "\tclear_mmp\n"
                        "\thash_alg=<hash algorithm>\n"
                        "\tmount_opts=<extended default mount options>\n"
+                       "\tmmp_update_interval=<mmp update interval in seconds>\n"
                        "\tstride=<RAID per-disk chunk size in blocks>\n"
                        "\tstripe_width=<RAID stride*data disks in blocks>\n"
+                       "\tforce_fsck\n"
                        "\ttest_fs\n"
-                       "\t^test_fs\n"));
+                       "\t^test_fs\n"
+                       "\tencoding=<encoding>\n"
+                       "\tencoding_flags=<flags>\n"));
                free(buf);
                return 1;
        }
@@ -2433,63 +2672,6 @@ err_out:
        return retval;
 }
 
-static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs)
-{
-       blk64_t         blk;
-       ext2_ino_t      ino;
-       unsigned int    group = 0;
-       unsigned int    count = 0;
-       int             total_free = 0;
-       int             group_free = 0;
-
-       /*
-        * First calculate the block statistics
-        */
-       for (blk = fs->super->s_first_data_block;
-            blk < ext2fs_blocks_count(fs->super); blk++) {
-               if (!ext2fs_fast_test_block_bitmap2(fs->block_map, blk)) {
-                       group_free++;
-                       total_free++;
-               }
-               count++;
-               if ((count == fs->super->s_blocks_per_group) ||
-                   (blk == ext2fs_blocks_count(fs->super)-1)) {
-                       ext2fs_bg_free_blocks_count_set(fs, group++,
-                                                       group_free);
-                       count = 0;
-                       group_free = 0;
-               }
-       }
-       total_free = EXT2FS_C2B(fs, total_free);
-       ext2fs_free_blocks_count_set(fs->super, total_free);
-
-       /*
-        * Next, calculate the inode statistics
-        */
-       group_free = 0;
-       total_free = 0;
-       count = 0;
-       group = 0;
-
-       /* Protect loop from wrap-around if s_inodes_count maxed */
-       for (ino = 1; ino <= fs->super->s_inodes_count && ino > 0; ino++) {
-               if (!ext2fs_fast_test_inode_bitmap2(fs->inode_map, ino)) {
-                       group_free++;
-                       total_free++;
-               }
-               count++;
-               if ((count == fs->super->s_inodes_per_group) ||
-                   (ino == fs->super->s_inodes_count)) {
-                       ext2fs_bg_free_inodes_count_set(fs, group++,
-                                                       group_free);
-                       count = 0;
-                       group_free = 0;
-               }
-       }
-       fs->super->s_free_inodes_count = total_free;
-       ext2fs_mark_super_dirty(fs);
-       return 0;
-}
 
 #define list_for_each_safe(pos, pnext, head) \
        for (pos = (head)->next, pnext = pos->next; pos != (head); \
@@ -2568,7 +2750,7 @@ static int resize_inode(ext2_filsys fs, unsigned long new_size)
        if (retval)
                goto err_out_undo;
 
-       ext2fs_calculate_summary_stats(fs);
+       ext2fs_calculate_summary_stats(fs, 1 /* super only */);
 
        fs->super->s_state |= EXT2_VALID_FS;
        /* mark super block and block bitmap as dirty */
@@ -2706,6 +2888,11 @@ fs_update_journal_user(struct ext2_super_block *sb, __u8 old_uuid[UUID_SIZE])
        jsb = (journal_superblock_t *) buf;
        /* Find the filesystem UUID */
        nr_users = ntohl(jsb->s_nr_users);
+       if (nr_users > JBD2_USERS_MAX) {
+               fprintf(stderr, _("Journal superblock is corrupted, nr_users\n"
+                                "is too high (%d).\n"), nr_users);
+               return EXT2_ET_CORRUPT_JOURNAL_SB;
+       }
 
        j_uuid = journal_user(old_uuid, jsb->s_users, nr_users);
        if (j_uuid == NULL) {
@@ -2775,7 +2962,8 @@ retry_open:
        if ((open_flag & EXT2_FLAG_RW) == 0 || f_flag)
                open_flag |= EXT2_FLAG_SKIP_MMP;
 
-       open_flag |= EXT2_FLAG_64BITS | EXT2_FLAG_JOURNAL_DEV_OK;
+       open_flag |= EXT2_FLAG_64BITS | EXT2_FLAG_THREADS |
+               EXT2_FLAG_JOURNAL_DEV_OK;
 
        /* keep the filesystem struct around to dump MMP data */
        open_flag |= EXT2_FLAG_NOFREE_ON_ERROR;
@@ -2838,8 +3026,10 @@ retry_open:
                        rc = 1;
                        goto closefs;
                }
-               check_fsck_needed(fs,
+               rc = check_fsck_needed(fs,
                        _("Resizing inodes could take some time."));
+               if (rc)
+                       goto closefs;
                /*
                 * If inode resize is requested use the
                 * Undo I/O manager
@@ -2866,8 +3056,7 @@ retry_open:
 
        if (print_label) {
                /* For e2label emulation */
-               printf("%.*s\n", (int) sizeof(sb->s_volume_name),
-                      sb->s_volume_name);
+               printf("%.*s\n", EXT2_LEN_STR(sb->s_volume_name));
                remove_error_table(&et_ext2_error_table);
                goto closefs;
        }
@@ -2880,6 +3069,37 @@ retry_open:
                rc = 1;
                goto closefs;
        }
+
+#ifdef NO_RECOVERY
+       /* Warn if file system needs recovery and it is opened for writing. */
+       if ((open_flag & EXT2_FLAG_RW) && !(mount_flags & EXT2_MF_MOUNTED) &&
+           (sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) &&
+           (sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER)) {
+               fprintf(stderr,
+_("Warning: The journal is dirty. You may wish to replay the journal like:\n\n"
+  "\te2fsck -E journal_only %s\n\n"
+  "then rerun this command.  Otherwise, any changes made may be overwritten\n"
+  "by journal recovery.\n"), device_name);
+       }
+#else
+       /* Recover the journal if possible. */
+       if ((open_flag & EXT2_FLAG_RW) && !(mount_flags & (EXT2_MF_BUSY | EXT2_MF_MOUNTED)) &&
+           ext2fs_has_feature_journal_needs_recovery(fs->super)) {
+               printf(_("Recovering journal.\n"));
+               retval = ext2fs_run_ext3_journal(&fs);
+               if (retval) {
+                       com_err("tune2fs", retval,
+                               "while recovering journal.\n");
+                       printf(_("Please run e2fsck -fy %s.\n"), argv[1]);
+                       if (fs)
+                               ext2fs_close_free(&fs);
+                       rc = 1;
+                       goto closefs;
+               }
+               sb = fs->super;
+       }
+#endif
+
        /* Normally we only need to write out the superblock */
        fs->flags |= EXT2_FLAG_SUPER_ONLY;
 
@@ -2978,13 +3198,13 @@ retry_open:
                        fputs(_("Warning: label too long, truncating.\n"),
                              stderr);
                memset(sb->s_volume_name, 0, sizeof(sb->s_volume_name));
-               strncpy(sb->s_volume_name, new_label,
+               strncpy((char *)sb->s_volume_name, new_label,
                        sizeof(sb->s_volume_name));
                ext2fs_mark_super_dirty(fs);
        }
        if (M_flag) {
                memset(sb->s_last_mounted, 0, sizeof(sb->s_last_mounted));
-               strncpy(sb->s_last_mounted, new_last_mounted,
+               strncpy((char *)sb->s_last_mounted, new_last_mounted,
                        sizeof(sb->s_last_mounted));
                ext2fs_mark_super_dirty(fs);
        }
@@ -3026,7 +3246,9 @@ retry_open:
                        rc = 1;
                        goto closefs;
                }
-               handle_quota_options(fs);
+               rc = handle_quota_options(fs);
+               if (rc)
+                       goto closefs;
        }
 
        if (U_flag) {
@@ -3035,6 +3257,24 @@ retry_open:
                char buf[SUPERBLOCK_SIZE] __attribute__ ((aligned(8)));
                __u8 old_uuid[UUID_SIZE];
 
+               if (ext2fs_has_feature_stable_inodes(fs->super)) {
+                       fputs(_("Cannot change the UUID of this filesystem "
+                               "because it has the stable_inodes feature "
+                               "flag.\n"), stderr);
+                       exit(1);
+               }
+
+               if (!ext2fs_has_feature_csum_seed(fs->super) &&
+                   (ext2fs_has_feature_metadata_csum(fs->super) ||
+                    ext2fs_has_feature_ea_inode(fs->super))) {
+                       rc = check_fsck_needed(fs,
+                               _("Setting the UUID on this "
+                                 "filesystem could take some time."));
+                       if (rc)
+                               goto closefs;
+                       rewrite_checksums = REWRITE_ALL;
+               }
+
                if (ext2fs_has_group_desc_csum(fs)) {
                        /*
                         * Changing the UUID on a metadata_csum FS requires
@@ -3053,12 +3293,9 @@ retry_open:
                                        "metadata_csum_seed' and re-run this "
                                        "command.\n"), stderr);
                                try_confirm_csum_seed_support();
-                               exit(1);
+                               rc = 1;
+                               goto closefs;
                        }
-                       if (!ext2fs_has_feature_csum_seed(fs->super))
-                               check_fsck_needed(fs,
-                                       _("Setting UUID on a checksummed "
-                                         "filesystem could take some time."));
 
                        /*
                         * Determine if the block group checksums are
@@ -3116,9 +3353,6 @@ retry_open:
                }
 
                ext2fs_mark_super_dirty(fs);
-               if (ext2fs_has_feature_metadata_csum(fs->super) &&
-                   !ext2fs_has_feature_csum_seed(fs->super))
-                       rewrite_checksums = 1;
        }
 
        if (I_flag) {
@@ -3150,7 +3384,7 @@ retry_open:
                if (retval == 0) {
                        printf(_("Setting inode size %lu\n"),
                                                        new_inode_size);
-                       rewrite_checksums = 1;
+                       rewrite_checksums = REWRITE_ALL;
                } else {
                        printf("%s", _("Failed to change inode size\n"));
                        rc = 1;
@@ -3159,7 +3393,7 @@ retry_open:
        }
 
        if (rewrite_checksums)
-               rewrite_metadata_checksums(fs);
+               rewrite_metadata_checksums(fs, rewrite_checksums);
 
        if (l_flag)
                list_super(sb);
@@ -3183,35 +3417,6 @@ retry_open:
                free(ext_mount_opts);
        }
 
-#ifdef NO_RECOVERY
-       /* Warn if file system needs recovery and it is opened for writing. */
-       if ((open_flag & EXT2_FLAG_RW) && !(mount_flags & EXT2_MF_MOUNTED) &&
-           (sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) &&
-           (sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER)) {
-               fprintf(stderr,
-_("Warning: The journal is dirty. You may wish to replay the journal like:\n\n"
-  "\te2fsck -E journal_only %s\n\n"
-  "then rerun this command.  Otherwise, any changes made may be overwritten\n"
-  "by journal recovery.\n"), device_name);
-       }
-#else
-       /* Recover the journal if possible. */
-       if ((open_flag & EXT2_FLAG_RW) && !(mount_flags & EXT2_MF_MOUNTED) &&
-           ext2fs_has_feature_journal_needs_recovery(fs->super)) {
-               errcode_t err;
-
-               printf(_("Recovering journal.\n"));
-               err = ext2fs_run_ext3_journal(&fs);
-               if (err) {
-                       com_err("tune2fs", err, "while recovering journal.\n");
-                       printf(_("Please run e2fsck -fy %s.\n"), argv[1]);
-                       goto closefs;
-               }
-               ext2fs_clear_feature_journal_needs_recovery(fs->super);
-               ext2fs_mark_super_dirty(fs);
-       }
-#endif
-
        free(device_name);
        remove_error_table(&et_ext2_error_table);
 
@@ -3223,6 +3428,7 @@ closefs:
 #endif
        }
 
-       convert_64bit(fs, feature_64bit);
+       if (feature_64bit)
+               convert_64bit(fs, feature_64bit);
        return (ext2fs_close_free(&fs) ? 1 : 0);
 }
index 7b7e431..f31c832 100644 (file)
@@ -14,8 +14,8 @@
 extern "C" {
 #endif
 
-/* Takes exactly the same args as the tune2fs exectuable.
- * Is the entrypoint for libtune2fs.
+/* Takes exactly the same args as the tune2fs executable.
+ * Is the entry point for libtune2fs.
  */
 int tune2fs_main(int argc, char **argv);
 
index 0ff3d49..48e623d 100644 (file)
@@ -91,6 +91,7 @@ void proceed_question(int delay)
 {
        char buf[256];
        const char *short_yes = _("yY");
+       const char *english_yes = "yY";
 
        fflush(stdout);
        fflush(stderr);
@@ -101,14 +102,16 @@ void proceed_question(int delay)
                        return;
                }
                signal(SIGALRM, alarm_signal);
-               printf(_("Proceed anyway (or wait %d seconds) ? (y,N) "),
+               printf(_("Proceed anyway (or wait %d seconds to proceed) ? (y,N) "),
                       delay);
                alarm(delay);
        } else
                fputs(_("Proceed anyway? (y,N) "), stdout);
        buf[0] = 0;
        if (!fgets(buf, sizeof(buf), stdin) ||
-           strchr(short_yes, buf[0]) == 0) {
+           strchr(_("nN"), buf[0]) ||
+           !(strchr(short_yes, buf[0]) ||
+             strchr(english_yes, buf[0]))) {
                putc('\n', stdout);
                exit(1);
        }
@@ -197,6 +200,14 @@ void parse_journal_opts(const char *opts)
                        journal_size = strtoul(arg, &p, 0);
                        if (*p)
                                journal_usage++;
+               } else if (strcmp(token, "fast_commit_size") == 0) {
+                       if (!arg) {
+                               journal_usage++;
+                               continue;
+                       }
+                       journal_fc_size = strtoul(arg, &p, 0);
+                       if (*p)
+                               journal_usage++;
                } else if (!strcmp(token, "location")) {
                        if (!arg) {
                                journal_usage++;
@@ -226,42 +237,63 @@ void parse_journal_opts(const char *opts)
        free(buf);
 }
 
+static inline int jsize_to_blks(ext2_filsys fs, int size)
+{
+       return (size * 1024) / (fs->blocksize / 1024);
+}
+
+/* Fast commit size is in KBs */
+static inline int fcsize_to_blks(ext2_filsys fs, int size)
+{
+       return (size * 1024) / (fs->blocksize);
+}
+
 /*
  * Determine the number of journal blocks to use, either via
  * user-specified # of megabytes, or via some intelligently selected
  * defaults.
  *
- * Find a reasonable journal file size (in blocks) given the number of blocks
- * in the filesystem.  For very small filesystems, it is not reasonable to
- * have a journal that fills more than half of the filesystem.
+ * Find a reasonable journal file size (in blocks) given the number of blocks in
+ * the filesystem. For very small filesystems, it is not reasonable to have a
+ * journal that fills more than half of the filesystem.
  */
-unsigned int figure_journal_size(int size, ext2_filsys fs)
+void figure_journal_size(struct ext2fs_journal_params *jparams,
+               int requested_j_size, int requested_fc_size, ext2_filsys fs)
 {
-       int j_blocks;
+       int total_blocks, ret;
 
-       j_blocks = ext2fs_default_journal_size(ext2fs_blocks_count(fs->super));
-       if (j_blocks < 0) {
+       ret = ext2fs_get_journal_params(jparams, fs);
+       if (ret) {
                fputs(_("\nFilesystem too small for a journal\n"), stderr);
-               return 0;
+               return;
        }
 
-       if (size > 0) {
-               j_blocks = size * 1024 / (fs->blocksize / 1024);
-               if (j_blocks < 1024 || j_blocks > 10240000) {
-                       fprintf(stderr, _("\nThe requested journal "
+       if (requested_j_size > 0 ||
+               (ext2fs_has_feature_fast_commit(fs->super) && requested_fc_size > 0)) {
+               if (requested_j_size > 0)
+                       jparams->num_journal_blocks =
+                               jsize_to_blks(fs, requested_j_size);
+               if (ext2fs_has_feature_fast_commit(fs->super) &&
+                       requested_fc_size > 0)
+                       jparams->num_fc_blocks =
+                               fcsize_to_blks(fs, requested_fc_size);
+               else if (!ext2fs_has_feature_fast_commit(fs->super))
+                       jparams->num_fc_blocks = 0;
+               total_blocks = jparams->num_journal_blocks + jparams->num_fc_blocks;
+               if (total_blocks < 1024 || total_blocks > 10240000) {
+                       fprintf(stderr, _("\nThe total requested journal "
                                "size is %d blocks; it must be\n"
                                "between 1024 and 10240000 blocks.  "
                                "Aborting.\n"),
-                               j_blocks);
+                               total_blocks);
                        exit(1);
                }
-               if ((unsigned) j_blocks > ext2fs_free_blocks_count(fs->super) / 2) {
-                       fputs(_("\nJournal size too big for filesystem.\n"),
+               if ((unsigned int) total_blocks > ext2fs_free_blocks_count(fs->super) / 2) {
+                       fputs(_("\nTotal journal size too big for filesystem.\n"),
                              stderr);
                        exit(1);
                }
        }
-       return j_blocks;
 }
 
 void print_check_message(int mnt, unsigned int check)
@@ -285,7 +317,8 @@ void dump_mmp_msg(struct mmp_struct *mmp, const char *msg)
        if (mmp) {
                time_t t = mmp->mmp_time;
 
-               printf("MMP error info: last update: %s node: %s device: %s\n",
-                      ctime(&t), mmp->mmp_nodename, mmp->mmp_bdevname);
+               printf("MMP error info: node: %.*s, device: %.*s, updated: %s",
+                      EXT2_LEN_STR(mmp->mmp_nodename),
+                      EXT2_LEN_STR(mmp->mmp_bdevname), ctime(&t));
        }
 }
index 49b4b9c..ccdc7fb 100644 (file)
@@ -11,6 +11,7 @@
  */
 
 extern int      journal_size;
+extern int      journal_fc_size;
 extern int      journal_flags;
 extern char    *journal_device;
 extern char    *journal_location_string;
@@ -22,6 +23,7 @@ extern char *get_progname(char *argv_zero);
 extern void proceed_question(int delay);
 extern void parse_journal_opts(const char *opts);
 extern void check_mount(const char *device, int force, const char *type);
-extern unsigned int figure_journal_size(int size, ext2_filsys fs);
+extern void figure_journal_size(struct ext2fs_journal_params *jparams,
+               int requested_j_size, int requested_fc_size, ext2_filsys fs);
 extern void print_check_message(int, unsigned int);
 extern void dump_mmp_msg(struct mmp_struct *mmp, const char *msg);
index 985e80d..cb8b3a8 100644 (file)
@@ -1,15 +1,15 @@
 .\" Copyright 1999 Andreas Dilger (adilger@enel.ucalgary.ca)
 .\"
 .\" This man page was created for libuuid.so.1.1 from e2fsprogs-1.14.
-.\" 
+.\"
 .\" This file may be copied under the terms of the GNU Public License.
-.\" 
+.\"
 .\" Created  Wed Mar 10 17:42:12 1999, Andreas Dilger
 .TH UUIDGEN 1 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
 uuidgen \- command\-line utility to create a new UUID value
 .SH SYNOPSIS
-.B uuidgen 
+.B uuidgen
 [
 .B \-r
 |
@@ -18,22 +18,22 @@ uuidgen \- command\-line utility to create a new UUID value
 .SH DESCRIPTION
 The
 .B uuidgen
-program creates (and prints) 
+program creates (and prints)
 a new universally unique identifier (UUID) using the
 .BR libuuid (3)
-library.  The new UUID can reasonably be considered unique among 
-all UUIDs created on the local system, 
+library.  The new UUID can reasonably be considered unique among
+all UUIDs created on the local system,
 and among UUIDs created on other systems in the past
 and in the future.
 .PP
-There are two types of UUID's which 
+There are two types of UUID's which
 .B uuidgen
-can generate: time-based UUID's and random-based UUID's.  By 
-default 
+can generate: time-based UUID's and random-based UUID's.  By
+default
 .B uuidgen
 will generate a random-based UUID if a high-quality random number
-generator is present.  Otherwise, it will chose a time-based UUID.  It 
-is possible to force the generation of one of these two 
+generator is present.  Otherwise, it will chose a time-based UUID.  It
+is possible to force the generation of one of these two
 UUID types by using the
 .B \-r
 or
@@ -48,7 +48,7 @@ quality random number generator, such as
 .IR /dev/random .
 .TP
 .B \-t
-Generate a time-based UUID.  This method creates a UUID based on the system 
+Generate a time-based UUID.  This method creates a UUID based on the system
 clock plus the system's ethernet hardware address, if present.
 .SH "CONFORMING TO"
 OSF DCE 1.1
index babfdca..9217232 100644 (file)
@@ -1 +1 @@
-ca cs da de eo es fi fr hu id it ms nl pl sr sv tr uk vi zh_CN
+ca cs da de eo es fi fr hu id it ms nl pl pt sr sv tr uk vi zh_CN
index 2ae2f2a..f21852f 100644 (file)
@@ -1,18 +1,19 @@
 # Makefile for PO directory in any package using GNU gettext.
-# Copyright (C) 1995-1997, 2000-2004 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
 #
-# This file can be copied and used freely without restrictions.  It can
-# be used in projects which are not available under the GNU General Public
-# License but which still want to provide support for the GNU gettext
-# functionality.
-# Please note that the actual code of GNU gettext is covered by the GNU
-# General Public License and is *not* in the public domain.
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.  This file is offered as-is,
+# without any warranty.
 #
-# Origin: gettext-0.14
+# Origin: gettext-0.19.8
+GETTEXT_MACRO_VERSION = 0.19
 
 PACKAGE = @PACKAGE@
 VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 
+SED = @SED@
 SHELL = /bin/sh
 @SET_MAKE@
 
@@ -24,17 +25,41 @@ prefix = @prefix@
 exec_prefix = @exec_prefix@
 datarootdir = @datarootdir@
 datadir = @datadir@
-localedir = $(datadir)/locale
+localedir = @localedir@
 gettextsrcdir = $(datadir)/gettext/po
 
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
 
-GMSGFMT = @GMSGFMT@
-MSGFMT = @MSGFMT@
-XGETTEXT = @XGETTEXT@
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+# When building gettext-tools, we prefer to use the built programs
+# rather than installed programs.  However, we can't do that when we
+# are cross compiling.
+CROSS_COMPILING = @CROSS_COMPILING@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
 MSGMERGE = msgmerge
 MSGMERGE_UPDATE = @MSGMERGE@ --update
 MSGINIT = msginit
@@ -47,7 +72,7 @@ UPDATEPOFILES = @UPDATEPOFILES@
 DUMMYPOFILES = @DUMMYPOFILES@
 DISTFILES.common = Makefile.in.in remove-potcdate.sin \
 $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
-DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
 $(POFILES) $(GMOFILES) \
 $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
 
@@ -55,20 +80,30 @@ POTFILES = \
 
 CATALOGS = @CATALOGS@
 
+POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
+POFILESDEPS_yes = $(POFILESDEPS_)
+POFILESDEPS_no =
+POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
+
+DISTFILESDEPS_ = update-po
+DISTFILESDEPS_yes = $(DISTFILESDEPS_)
+DISTFILESDEPS_no =
+DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
+
 # Makevars gets inserted here. (Don't remove this line!)
 
 .SUFFIXES:
 .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
 
 .po.mo:
-       $(E) "$(MSGFMT) -c -o $@ $<"
+       $(E) "$(MSGFMT) -c -o $@ $<"; \
        $(Q) $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
 
 .po.gmo:
        @lang=`echo $* | sed -e 's,.*/,,'`; \
        test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
-       echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
-       cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+       echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \
+       cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
 
 .sin.sed:
        sed -e '/^#/d' $< > t-$@
@@ -79,6 +114,22 @@ all: all-@USE_NLS@
 
 all-yes: @MAINTAINER_CMT@stamp-po
 all-no:
+all-static:
+depend:
+coverage.txt:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+CHECK_MACRO_VERSION = \
+       test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+         || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+              exit 1; \
+            }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
 
 # stamp-po is a timestamp denoting the last time at which the CATALOGS have
 # been loosely updated. Its purpose is that when a developer or translator
@@ -89,10 +140,14 @@ all-no:
 # $(POFILES) has been designed to not touch files that don't need to be
 # changed.
 stamp-po: $(srcdir)/$(DOMAIN).pot
-       test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
-       @echo "touch stamp-po"
-       @echo timestamp > stamp-poT
-       @mv stamp-poT stamp-po
+       @$(CHECK_MACRO_VERSION)
+       test ! -f $(srcdir)/$(DOMAIN).pot || \
+         test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+       @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+         echo "touch stamp-po" && \
+         echo timestamp > stamp-poT && \
+         mv stamp-poT stamp-po; \
+       }
 
 # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
 # otherwise packages like GCC can not be built if only parts of the source
@@ -100,18 +155,65 @@ stamp-po: $(srcdir)/$(DOMAIN).pot
 
 # This target rebuilds $(DOMAIN).pot; it is an expensive operation.
 # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+# The determination of whether the package xyz is a GNU one is based on the
+# heuristic whether some file in the top level directory mentions "GNU xyz".
+# If GNU 'find' is available, we avoid grepping through monster files.
 $(DOMAIN).pot-update: $(srcdir)/POTFILES.in remove-potcdate.sed \
        $(srcdir)/at-expand.pl
-       $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
-         --directory=$(top_builddir) \
-         --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
-         --files-from=$(srcdir)/POTFILES.in \
-         --copyright-holder='$(COPYRIGHT_HOLDER)' \
-         --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)'
+       package_gnu="$(PACKAGE_GNU)"; \
+       test -n "$$package_gnu" || { \
+         if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+                LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \
+                              -size -10000000c -exec grep 'GNU @PACKAGE@' \
+                              /dev/null '{}' ';' 2>/dev/null; \
+              else \
+                LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+              fi; \
+            } | grep -v 'libtool:' >/dev/null; then \
+            package_gnu=yes; \
+          else \
+            package_gnu=no; \
+          fi; \
+       }; \
+       if test "$$package_gnu" = "yes"; then \
+         package_prefix='GNU '; \
+       else \
+         package_prefix=''; \
+       fi; \
+       if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+         msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+       else \
+         msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+       fi; \
+       case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+         '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+           $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+             --directory=$(top_builddir) \
+             --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+             --files-from=$(srcdir)/POTFILES.in \
+             --copyright-holder='$(COPYRIGHT_HOLDER)' \
+             --msgid-bugs-address="$$msgid_bugs_address" \
+           ;; \
+         *) \
+           $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+             --directory=$(top_builddir) \
+             --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+             --files-from=$(srcdir)/POTFILES.in \
+             --copyright-holder='$(COPYRIGHT_HOLDER)' \
+             --package-name="$${package_prefix}@PACKAGE@" \
+             --package-version='@VERSION@' \
+             --msgid-bugs-address="$$msgid_bugs_address" \
+           ;; \
+       esac
        perl $(srcdir)/at-expand.pl < $(DOMAIN).po > $(DOMAIN).po.new
        mv $(DOMAIN).po $(DOMAIN).po.bak
        mv $(DOMAIN).po.new $(DOMAIN).po
        test ! -f $(DOMAIN).po || { \
+         if test -f $(srcdir)/$(DOMAIN).pot-header; then \
+           sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
+           cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po; \
+           rm -f $(DOMAIN).1po; \
+         fi; \
          if test -f $(srcdir)/$(DOMAIN).pot; then \
            sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
            sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
@@ -134,12 +236,20 @@ $(srcdir)/$(DOMAIN).pot:
 
 # This target rebuilds a PO file if $(DOMAIN).pot has changed.
 # Note that a PO file is not touched if it doesn't need to be changed.
-$(POFILES): $(srcdir)/$(DOMAIN).pot
+$(POFILES): $(POFILESDEPS)
        @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
        if test -f "$(srcdir)/$${lang}.po"; then \
+         test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \
          test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
-         echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
-         cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+         echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
+         cd $(srcdir) \
+           && { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+                  '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+                    $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+                  *) \
+                    $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \
+                esac; \
+              }; \
        else \
          $(MAKE) $${lang}.po-create; \
        fi
@@ -149,7 +259,7 @@ install: install-exec install-data
 install-exec:
 install-data: install-data-@USE_NLS@
        if test "$(PACKAGE)" = "gettext-tools"; then \
-         $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+         $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
          for file in $(DISTFILES.common) Makevars.template; do \
            $(INSTALL_DATA) $(srcdir)/$$file \
                            $(DESTDIR)$(gettextsrcdir)/$$file; \
@@ -162,13 +272,12 @@ install-data: install-data-@USE_NLS@
        fi
 install-data-no: all
 install-data-yes: all
-       $(mkinstalldirs) $(DESTDIR)$(datadir)
        @catalogs='$(CATALOGS)'; \
        for cat in $$catalogs; do \
          cat=`basename $$cat`; \
          lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
          dir=$(localedir)/$$lang/LC_MESSAGES; \
-         $(mkinstalldirs) $(DESTDIR)$$dir; \
+         $(mkdir_p) $(DESTDIR)$$dir; \
          if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
          $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
          echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
@@ -208,19 +317,18 @@ installdirs: installdirs-exec installdirs-data
 installdirs-exec:
 installdirs-data: installdirs-data-@USE_NLS@
        if test "$(PACKAGE)" = "gettext-tools"; then \
-         $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+         $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
        else \
          : ; \
        fi
 installdirs-data-no:
 installdirs-data-yes:
-       $(mkinstalldirs) $(DESTDIR)$(datadir)
        @catalogs='$(CATALOGS)'; \
        for cat in $$catalogs; do \
          cat=`basename $$cat`; \
          lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
          dir=$(localedir)/$$lang/LC_MESSAGES; \
-         $(mkinstalldirs) $(DESTDIR)$$dir; \
+         $(mkdir_p) $(DESTDIR)$$dir; \
          for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
            if test -n "$$lc"; then \
              if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
@@ -270,20 +378,18 @@ uninstall-data-yes:
          done; \
        done
 
-check: all
+fullcheck check: all
 
 info dvi ps pdf html tags TAGS ctags CTAGS ID:
 
 mostlyclean:
-       rm -f remove-potcdate.sed 
+       rm -f remove-potcdate.sed
        rm -f stamp-poT
        rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
        rm -f $(DOMAIN).po.bak
        rm -fr *.o
 
-coverage.txt::
-
-clean:: mostlyclean
+clean: mostlyclean
 
 distclean: clean
        rm -f Makefile Makefile.in POTFILES *.mo
@@ -295,14 +401,17 @@ maintainer-clean: distclean
 
 distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
 dist distdir:
-       $(MAKE) update-po
+       test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
        @$(MAKE) dist2
 # This is a separate target because 'update-po' must be executed before.
-dist2: $(DISTFILES)
+dist2: stamp-po $(DISTFILES)
        dists="$(DISTFILES)"; \
        if test "$(PACKAGE)" = "gettext-tools"; then \
          dists="$$dists Makevars.template"; \
        fi; \
+       if test -f $(srcdir)/$(DOMAIN).pot; then \
+         dists="$$dists $(DOMAIN).pot stamp-po"; \
+       fi; \
        if test -f $(srcdir)/ChangeLog; then \
          dists="$$dists ChangeLog"; \
        fi; \
@@ -314,9 +423,9 @@ dist2: $(DISTFILES)
        if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
        for file in $$dists; do \
          if test -f $$file; then \
-           cp -p $$file $(distdir); \
+           cp -p $$file $(distdir) || exit 1; \
          else \
-           cp -p $(srcdir)/$$file $(distdir); \
+           cp -p $(srcdir)/$$file $(distdir) || exit 1; \
          fi; \
        done
 
@@ -336,13 +445,19 @@ update-po: Makefile
 
 .nop.po-update:
        @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
-       if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+       if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \
        tmpdir=`pwd`; \
        echo "$$lang:"; \
        test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
-       echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+       echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
        cd $(srcdir); \
-       if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+       if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+              '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+                $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+              *) \
+                $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+            esac; \
+          }; then \
          if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
            rm -f $$tmpdir/$$lang.new.po; \
          else \
@@ -363,10 +478,13 @@ $(DUMMYPOFILES):
 update-gmo: Makefile $(GMOFILES)
        @:
 
-Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
        cd $(top_builddir) \
-         && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
-              $(SHELL) ./config.status
+         && CONFIG_FILES=$(subdir)/$@.in @SHELL@ ./config.status po-directories
 
 force:
 
index cdd9d30..932a209 100644 (file)
@@ -39,3 +39,33 @@ MSGID_BUGS_ADDRESS = tytso@alum.mit.edu
 # This is the list of locale categories, beyond LC_MESSAGES, for which the
 # message catalogs shall be used.  It is usually empty.
 EXTRA_LOCALE_CATEGORIES =
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context.  Possible values are "yes" and "no".  Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = no
+
+# These options get passed to msgmerge.
+# Useful options are in particular:
+#   --previous            to keep previous msgids of translated messages,
+#   --quiet               to reduce the verbosity.
+MSGMERGE_OPTIONS =
+
+# These options get passed to msginit.
+# If you want to disable line wrapping when writing PO files, add
+# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
+# MSGINIT_OPTIONS.
+MSGINIT_OPTIONS =
+
+# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
+# has changed.  Possible values are "yes" and "no".  Set this to no if
+# the POT file is checked in the repository and the version control
+# program ignores timestamps.
+PO_DEPENDS_ON_POT = no
+
+# This tells whether or not to forcibly update $(DOMAIN).pot and
+# regenerate PO files on "make dist".  Possible values are "yes" and
+# "no".  Set this to no if the POT file and PO files are maintained
+# externally.
+DIST_DEPENDS_ON_UPDATE_PO = no
index d6b4f43..f5b5936 100644 (file)
@@ -5,6 +5,7 @@ e2fsck/e2fsck.c
 e2fsck/ea_refcount.c
 e2fsck/ehandler.c
 e2fsck/emptydir.c
+e2fsck/encrypted_files.c
 e2fsck/extend.c
 e2fsck/extents.c
 e2fsck/flushb.c
index 9c2a995..baf6528 100644 (file)
@@ -1,3 +1,4 @@
+# This file, Rules-quot, can be copied and used freely without restrictions.
 # Special Makefile rules for English message catalogs with quotation marks.
 
 DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
@@ -14,13 +15,23 @@ en@boldquot.po-update: en@boldquot.po-update-en
 
 .insert-header.po-update-en:
        @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
-       if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+       if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
        tmpdir=`pwd`; \
        echo "$$lang:"; \
        ll=`echo $$lang | sed -e 's/@.*//'`; \
        LC_ALL=C; export LC_ALL; \
        cd $(srcdir); \
-       if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+       if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \
+          | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \
+          { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+            '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \
+              $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \
+              ;; \
+            *) \
+              $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \
+              ;; \
+            esac } 2>/dev/null > $$tmpdir/$$lang.new.po \
+            ; then \
          if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
            rm -f $$tmpdir/$$lang.new.po; \
          else \
index bc1a744..fe68556 100644 (file)
@@ -25,7 +25,14 @@ my @translator_help = (
  "#. it can expand to either the string \"indirect block\" (possibly preceded\n",
  "#. by the word \"double\" or \"triple\"), or the string \"block #\" immediately\n",
  "#. followed by an integer indicating a block sequence number.\n",
- "#.  \n",
+ "#.\n",
+ "#. Please note that the %-expansion for most e2fsck's problem.c should not\n",
+ "#. use positional indicators such as %1$c, since although they look like c-style\n",
+ "#. format strings, they are NOT c-style format strings, and the positional\n",
+ "#. indicators (which BTW are GNU extensions and so won't work on other Unix\n",
+ "#. gettext implementations) won't work with e2fsck's print_e2fsck_message()\n",
+ "#. function found in e2fsck/message.c\n",
+ "#.\n",
  "#.   %b      <blk>                   block number\n",
  "#.   %B      \"indirect block\" | \"block #\"<blkcount>      string | string+integer\n",
  "#.   %c      <blk2>                  block number\n",
@@ -45,7 +52,7 @@ my @translator_help = (
  "#.   %IM     <inode> -> i_mtime\n",
  "#.   %IF     <inode> -> i_faddr\n",
  "#.   %If     <inode> -> i_file_acl\n",
- "#.   %Id     <inode> -> i_dir_acl\n",
+ "#.   %Id     <inode> -> i_size_high\n",
  "#.   %Iu     <inode> -> i_uid\n",
  "#.   %Ig     <inode> -> i_gid\n",
  "#.   %It     <str>                   file type\n",
index 0dafc91..7aea756 100644 (file)
Binary files a/po/ca.gmo and b/po/ca.gmo differ
index 3aa4e18..d3f1518 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -48,7 +48,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
@@ -70,7 +70,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: e2fsprogs 1.42.12-pre2\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
+"POT-Creation-Date: 2018-08-18 21:03-0400\n"
 "PO-Revision-Date: 2015-07-26 11:42+0100\n"
 "Last-Translator: Angel Mompo <mecatxis@mecatxis.cat>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
@@ -78,11 +78,12 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "X-Poedit-Bookmarks: 434,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 1.7.5\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Bloc erroni %u fora dels límits; s'ignorarà.\n"
@@ -95,11 +96,12 @@ msgstr "en comprovar l'estat del node-i de blocs erronis"
 msgid "while reading the bad blocks inode"
 msgstr "en llegir el node-i de blocs erronis"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1550
+#: e2fsck/unix.c:1664 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1404
+#: misc/e2image.c:1588 misc/e2image.c:1609 misc/mke2fs.c:236
+#: misc/tune2fs.c:2837 misc/tune2fs.c:2931 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "en intentar obrir %s"
@@ -109,7 +111,7 @@ msgstr "en intentar obrir %s"
 msgid "while trying popen '%s'"
 msgstr "en intentar popen en «%s»"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "en llegir la llista de blocs erronis del fitxer"
 
@@ -124,6 +126,11 @@ msgstr ""
 "Avís: s'ha trobat el bloc no vàlid %u en el node-i de blocs erronis.  S'ha "
 "esborrat.\n"
 
+#: e2fsck/dirinfo.c:331
+#, fuzzy
+msgid "while freeing dir_info tdb file"
+msgstr "en llegir el node arrel"
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -202,12 +209,12 @@ msgstr ""
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Forma d'ús: %s [-F] [-I blocs_de_mem_int_del_node_i] dispositiu\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1075
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "en obrir %s per a buidar-lo"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1081 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "en intentar buidar %s"
@@ -217,11 +224,11 @@ msgstr "en intentar buidar %s"
 msgid "while trying to open '%s'"
 msgstr "en intentar obrir «%s»"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1297
 msgid "while opening inode scan"
 msgstr "en obrir l'escaneig de nodes-i"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1316
 msgid "while getting next inode"
 msgstr "en obtenir el node-i següent"
 
@@ -230,270 +237,288 @@ msgstr "en obtenir el node-i següent"
 msgid "%u inodes scanned.\n"
 msgstr "%u nodes-i escanejats.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "s'està llegint el superbloc del registre de transaccions\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: no s'ha trobat cap superbloc del registre de transaccions vàlid\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: el registre de transaccions és massa curt\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3786
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: recuperació del registre de transaccions\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr ""
 "%s: no es recuperarà el registre de transaccions mentre sigui de només "
 "lectura\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "en intentar tornar a obrir %s"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "aatribut ampliat"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Aerror en l'assignació"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bbloc"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bmapa de bits"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "ccompressió"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Centra en conflicte amb algun altre @b del sistema de fitxers"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "ddirectori"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Dsuprimit"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "eentrada"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e «%Dn» a %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "fsistema de fitxers"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fper a l'@i %i (%Q) és"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "ggrup"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "h@i del @d HTREE"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "inode-i"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Iil·legal"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jregistre de transaccions"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Lés un enllaç"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mreclamat múltiplement"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "nno vàlid"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oorfe"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pproblema en"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qlímit"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "r@i arrel"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "shauria de ser"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssuper@b"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "udesacoblat(s)"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vdispositiu"
 
 # http://en.wikipedia.org/wiki/Extent_(file_systems). Hi ha la ubicació basada en blocs i la ubicació basada en «extents» (dpm).
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xextent"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "zmida zero"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<El node-i NULL>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<El node-i de blocs erronis>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<La quota de node-i per l'usuari>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<La quota de node-i per al grup>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<El node-i del carregador>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<El node-i del directori de desfer les supressions>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<El node-i del descriptor de grup>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<El node-i del registre de transaccions>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Node-i reservat 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Node-i reservat 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "fitxer normal"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "directori"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "dispositiu"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "dispositiu d'accés per bloc"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "conducte amb nom"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "enllaç simbòlic"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "sòcol"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "tips de fitxer desconegut amb mode 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "bloc indirecte"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "bloc indirecte doble"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "bloc indirecte triple"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "bloc del traductor"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "bloc #"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr ""
+
+#: e2fsck/message.c:485
+#, fuzzy
+msgid "group"
+msgstr "ggrup"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr ""
+
+#: e2fsck/message.c:491
+#, fuzzy
+msgid "unknown quota type"
+msgstr "sistema operatiu desconegut - %s"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "mapa de nodes-i reclamat múltiplement"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "error intern: no s'ha trobat dup_blk per a %llu\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "s'ha tornat de la funció clone_file_block"
 
 # FIXME (dpm)
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr ""
@@ -501,97 +526,102 @@ msgstr ""
 "(EA) per a %llu"
 
 # FIXME (dpm)
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr ""
 "error intern: no s'ha pogut cercar el registre de node-i d'atributs ampliats "
 "(EA) per a %u"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:356
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr ""
+
+#: e2fsck/pass1.c:774 e2fsck/pass2.c:1005
 msgid "reading directory block"
 msgstr "s'està llegint el bloc de directori"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1223
 msgid "in-use inode map"
 msgstr "mapa de nodes-i en ús"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1234
 msgid "directory inode map"
 msgstr "mapa de nodes-i de directoris"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1244
 msgid "regular file inode map"
 msgstr "mapa de nodes-i de fitxers normals"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1253 misc/e2image.c:1272
 msgid "in-use block map"
 msgstr "mapa de blocs en ús"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1262
 #, fuzzy
 msgid "metadata block map"
 msgstr "blocs de metadades"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1324
 msgid "opening inode scan"
 msgstr "s'està obring l'escaneig de nodes-i"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1362
 msgid "getting next inode from scan"
 msgstr "s'està obtenint el node-i següent de l'escaneig"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2066
 msgid "Pass 1"
 msgstr "Pas 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2127
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "s'estan llegint els blocs indirectes del node-i %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2178
 msgid "bad inode map"
 msgstr "mapa de nodes-i malmesos"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2218
 msgid "inode in bad block map"
 msgstr "node-i en el mapa de nodes-i malmesos"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2238
 msgid "imagic inode map"
 msgstr "mapa de nodes-i imagic"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2269
 msgid "multiply claimed block map"
 msgstr "mapa de blocs reclamat més d'un cop"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2394
 msgid "ext attr block map"
 msgstr "mapa de blocs d'atributs estesos"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3637
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu(%c): s'esperava %6lu i s'ha obtingut phys %6lu (blkcnt %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4054
 msgid "block bitmap"
 msgstr "mapa de bits de blocs"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4060
 msgid "inode bitmap"
 msgstr "mapa de bits d'i-nodes"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4066
 msgid "inode table"
 msgstr "taula d'inodes"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Pas 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1077 e2fsck/pass2.c:1244
 msgid "Can not continue."
 msgstr "No es pot continuar."
 
@@ -612,19 +642,19 @@ msgstr "Pas 3"
 msgid "inode loop detection bitmap"
 msgstr "mapa de bits de la detecció de nodes-i de bucle"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Pas 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Pas 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr ""
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr ""
 
@@ -790,18 +820,18 @@ msgid "WILL RECREATE"
 msgstr "ES TORNARÀ A CREAR"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:112
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "El @b @B per al @g %g no és a @g.  (@b %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:116
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "El @i @B per al @g %g no és a @g.  (@b %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:121
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -818,7 +848,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:127
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -844,7 +874,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:138
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -857,7 +887,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:145
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -868,24 +898,24 @@ msgstr ""
 "coincideixen amb la mida del @b.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:152
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "@bs_per_grup del @S = %b, hauria d'haver estat %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:157
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "primer_@b_de_dades del @S = %b, hauria d'haver estat %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:162
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
 msgstr "El @f no té cap UUID; se li'n generarà un.\n"
 
-#: e2fsck/problem.c:165
+#: e2fsck/problem.c:167
 #, c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
@@ -902,48 +932,48 @@ msgstr ""
 "descriptors de grups de blocs de còpia de seguretat potser estan bé.\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:176
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "El @S està malmès. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
+#: e2fsck/problem.c:181
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "S'ha produït un error en determinar la mida del @v físic: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:186
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "El nombre de nodes-i en el @S és %i (@s %j).\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:190
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "El Hurd no és compatible amb la característica de tipus de fitxer.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
+#: e2fsck/problem.c:195
 #, c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "El @S té un @j @n (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:200
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr "El @j extern té múltiples usuaris del @f (no compatible).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:205
 msgid "Can't find external @j\n"
 msgstr "No s'ha trobat el @j extern\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:210
 msgid "External @j has bad @S\n"
 msgstr "El @j extern té un @S malmès\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:215
 msgid "External @j does not support this @f\n"
 msgstr "El @j extern no és compatible amb aquest @f\n"
 
@@ -951,7 +981,7 @@ msgstr "El @j extern no és compatible amb aquest @f\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:220
 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 "
@@ -964,88 +994,88 @@ msgstr ""
 "També pot ser que el @S @j estigui malmès.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:228
 msgid "@j @S is corrupt.\n"
 msgstr "El @S del @j està malmès.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:233
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "El senyalador has_@j del @S està buit, però el @j té dades.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:238
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr ""
 "El @S té el senyalador «needs_recovery» (recuperació_necessària) activat, "
 "però no té cap @j.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:243
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "El senyalador de recuperació @S està buit, però el @j té dades.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:248
 msgid "Clear @j"
 msgstr "Esborra el @j"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:253 e2fsck/problem.c:764
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr ""
 "El @f té els senyaladors de característica (feature) activat, però és un @f "
 "de versió 0.  "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:258
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s @i @o %i (uid=%Iu, gid=%Ig, mode=%Im, mida=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:263
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "S'ha trobat %B @I (%b) a l'@i @o %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:268
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "S'ha trobat %B (%b) que ja està esborrat a l'@i @o %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
+#: e2fsck/problem.c:273
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@i @o @I %i en el @S.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
+#: e2fsck/problem.c:278
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@i @o @I %i a la llista de nodes-i @os.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:283
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
 "El @S del @j té un senyalador de característica de només lectura activat "
 "desconegut.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:288
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
 "El @S del @j té un senyalador de característica no compatible activat no "
 "compatible.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:293
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "La versió del @j no funciona amb aquest e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
+#: e2fsck/problem.c:298
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -1056,7 +1086,7 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
+#: e2fsck/problem.c:303
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -1068,7 +1098,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:308
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1079,12 +1109,12 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:314
 msgid "Run @j anyway"
 msgstr "Executa el @j de totes maneres"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:319
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
 "El senyalador de recuperació no està definit en la còpia del @S, per la qual "
@@ -1092,7 +1122,7 @@ msgstr ""
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:324
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1103,7 +1133,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:330
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1112,18 +1142,18 @@ msgstr ""
 "és %N; @s zero.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:336
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr "Resize_@i no està habilitat, però el @i de redimensió no és zero.  "
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:341
 msgid "Resize @i not valid.  "
 msgstr "El @i de redimensió no és vàlid.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:346
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1133,7 +1163,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:351
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1142,14 +1172,14 @@ msgstr ""
 "\tara = %T) és en el futur.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
+#: e2fsck/problem.c:356
 #, c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "L'apunt de @S per al superbloc extern @s %X.  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:361
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1158,13 +1188,13 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:366
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr ""
 "La suma de verificació del descriptor de @g %g és %04x, hauria de ser %04y.  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:371
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr ""
@@ -1172,30 +1202,30 @@ msgstr ""
 "activada.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:376
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr "El descriptor de @g %g té %b nodes-i no vàlids que no es fan servir.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:381
 msgid "Last @g @b @B uninitialized.  "
 msgstr "L'últim @B @g @b no està inicialitzat.  "
 
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:386
 #, c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr ""
 "La transacció del registre de transaccions %i està malmesa, se n'ha "
 "interromput la repetició\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:391
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "El senyalador test_fs està activat (i està disponible ext4).  "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:396
 #, fuzzy
 msgid ""
 "@S last mount time is in the future.\n"
@@ -1209,7 +1239,7 @@ msgstr ""
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:402
 #, fuzzy
 msgid ""
 "@S last write time is in the future.\n"
@@ -1221,211 +1251,232 @@ msgstr ""
 "maquinàri)  "
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:408
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr ""
 "Una o més sumes de verificació del descriptor de @g de @b no són vàlids.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:413
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "S'allibera @is conta fins a %j (abans era %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:418
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "S'allibera @bs conta fins a %c (abans era %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:423
+#, fuzzy
+msgid "Hiding %U @q @i %i (%Q).\n"
 msgstr "Es fa ocult l'@i @q %i (%Q).\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:428
 msgid "@S has invalid MMP block.  "
 msgstr "@S té un bloc MMP no vàlid.  "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:433
 msgid "@S has invalid MMP magic.  "
 msgstr "El @S té un MMP màgic no vàlid.  "
 
-#: e2fsck/problem.c:433
+#: e2fsck/problem.c:438
 #, c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2: %m\n"
 
-#: e2fsck/problem.c:438
+#: e2fsck/problem.c:443
 #, c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
+#: e2fsck/problem.c:449
 msgid ""
 "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
 "simultaneously."
 msgstr ""
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:455
 #, fuzzy
-msgid "@S MMP block checksum does not match MMP block.  "
+msgid "@S MMP @b checksum does not match.  "
 msgstr "La suma de verificació del bloc MMP no coincideix amb el bloc MMP"
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:460
+#, fuzzy
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr ""
 "El @S del sistema de fitxers de 64 bits necessita «extents» per accedir al "
 "disc sencer.  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:465
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "First_meta_bg és massa gran.  (%N, valor màx %g).  "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:470
 #, fuzzy
 msgid "External @j @S checksum does not match @S.  "
 msgstr ""
 "La suma de verificació del bloc «extent» no coincideix amb el bloc «extent»"
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:475
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr ""
 
-#: e2fsck/problem.c:477
+#: e2fsck/problem.c:480
 #, c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr ""
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:485
 msgid "Bad required extra isize in @S (%N).  "
 msgstr ""
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:490
 msgid "Bad desired extra isize in @S (%N).  "
 msgstr ""
 
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:495
+#, fuzzy
+msgid "Invalid %U @q @i %i.  "
+msgstr "@i de @z %i @u.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:500
+msgid "@S would have too many inodes (%N).\n"
+msgstr ""
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:505
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
+msgstr ""
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:513
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Pas 1: comprovació de nodes-i, @bs i mides\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:517
 msgid "@r is not a @d.  "
 msgstr "el @r no és un @d.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:522
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "el @r té el dtime definit (segurament degut a un mke2fs antic)."
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:527
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "El @i %i (%Q) té un mode @n.  "
 
 # FIXME dtime (dpm)
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:532
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "El @i %i @D té un dtime zero.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:537
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "El @i %i s'està utilitzant, però té dtime definit."
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:542
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "El @i %i és un @d de @z.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:547
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "@B de @g de @b %g a %b @C.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:552
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "@B de @g de @i %g a %b @C.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:557
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "Taula de @g de @i %g a %b @C.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:562
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "@B de @g de @b %g (%b) és erroni.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:567
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "@B de @g de @i %g (%b) és erroni.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:572
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size és %Is, @s %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:577
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_@bs és %Ib, @s %N.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:582
 msgid "@I %B (%b) in @i %i.  "
 msgstr "%B (%b) @I a @i %i.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:587
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B (%b) se sobreposa al @f de metadades al @i %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "El @i %i té @bs no vàlids.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Hi ha massa @b no vàlids al @i %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "%B (%b) @I en @b @i dolents.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:607
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "El @i de @b erronis té @bs no vàlids.  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:612
 msgid "Duplicate or bad @b in use!\n"
 msgstr "S'està utilitzant el @b duplicat o erroni\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:617
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "El @ erroni %b es fa servir com a @b indirecte @b @i erroni.  "
 
@@ -1433,7 +1484,7 @@ msgstr "El @ erroni %b es fa servir com a @b indirecte @b @i erroni.  "
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:622
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1447,7 +1498,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:629
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1458,7 +1509,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:634
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1469,129 +1520,129 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:640
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "El @S primary (%b) és a la llista de @bs erronis.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:645
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 "El bloc %b del @g de descriptors primari és a la llista de @b erronis\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:651
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Avís: el @S (%b) del grup %s és erroni.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:657
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 "Avís: la còpia dels descriptors de @g del grup %g té un @b erroni (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:663
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 "Es probable que s'hagi produït un error de programació: el @b #%b ha estat "
 "reclamat sense motiu a process_bad_@b.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:669
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A %N @b(s) contigus al @g @b %g per %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:674
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A de la memòria intermèdia del @b per a reubicar %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:679
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "S'està reubicant %g del @g %s de %b a %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:684
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "S'està reubicant %g del @g %s a %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:689
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Avís: no s'ha pogut llegir el @b %b de %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:694
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Avís: no s'ha pogut escriure el @b %b per a %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:699 e2fsck/problem.c:1776
 msgid "@A @i @B (%N): %m\n"
 msgstr "S'ha produït un @A del @B del @i (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:704
 msgid "@A @b @B (%N): %m\n"
 msgstr "S'ha produït un @A del @B del @b (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:709
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A la informació d'enllaç de l'icount: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:714
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A la cadena del @b de @s: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
+#: e2fsck/problem.c:719
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "S'ha produït un error en escanejar els nodes-i (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
+#: e2fsck/problem.c:724
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "S'ha produït un error en iterar a través dels @bs del @i (%i): %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:729
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 "S'ha produït un error en desar la informació del nombre de nodes-i (@i=%i, "
 "nombre=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:734
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 "S'ha produït un error en desar la informació del @b de @d (@i=%i, @b=%b, núm="
 "%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
+#: e2fsck/problem.c:740
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "S'ha produït un error en llegir el @i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:748
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "El @i %i té activat el senyalador imagic.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:753
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1601,110 +1652,110 @@ msgstr ""
 "l'indicador d'immutable o de només afegir.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
+#: e2fsck/problem.c:759
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "El @i especial %i (@v/socket/fifo) té una mida diferent de zero.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:769
 msgid "@j @i is not in use, but contains data.  "
 msgstr "El @i del @j no s'utilitza, però conté dades.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:774
 msgid "@j is not regular file.  "
 msgstr "El @j no és un fitxer normal.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:779
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "El @i %i és part de la llista de nodes-i @os.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:785
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
 "S'han trobat nodes-i que són part d'una llista enllaçada d'orfes malmesa.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:790
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A l'estructura de refcount (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:795
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "S'ha produït un error en llegir el @b d'@a del @i %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:800
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "El @i %i té un @b d'@a %b malmès.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:805
 msgid "Error reading @a @b %b (%m).  "
 msgstr "S'ha produït un error en llegir el @b d'@a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:810
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "@a @b %b té un comptador de referència %r, @s %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:815
 msgid "Error writing @a @b %b (%m).  "
 msgstr "S'ha produït un error en escriure el @b d'@a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:820
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "@b @a %b té h_@bs > 1.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:825
 #, fuzzy
 msgid "@A @a region allocation structure.  "
 msgstr "@A de l'estructura icount: %m\n"
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:830
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "El @b d'@a està malmès (col·lisió en l'assignació).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:835
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "El @b d'@a està malmès (nom @n).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:840
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "El @b d'@a està malmès (valor @n).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
+#: e2fsck/problem.c:845
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "El @i %i és massa gran.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:849
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "El %B (%b) fa que el @d sigui massa gran.  "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:854
 msgid "%B (%b) causes file to be too big.  "
 msgstr "El %B (%b) fa que el fitxer sigui massa gran.  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:859
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "El %B (%b) fa que l'enllaç simbòlic sigui massa gran.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:864
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
@@ -1712,36 +1763,36 @@ msgstr ""
 "l'htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
+#: e2fsck/problem.c:869
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "El @i %i té el senyalador INDEX_FL definit però no és un @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
+#: e2fsck/problem.c:874
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "El @h %i té un node arrel @n.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:879
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "@h %i té una versió de resum no compatible (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
+#: e2fsck/problem.c:884
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "@h %i fa servir el senyalador de node arrel htree no compatible.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:889
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "@h %i té una profunditat de directoris (%N) massa gran\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:895
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1750,55 +1801,55 @@ msgstr ""
 "en conflicte amb el @f de metadades.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
+#: e2fsck/problem.c:901
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "No s'ha pogut (tornar a) dimensionar el @: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:906
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "El @i té una mida addicional (%IS) què no és vàlida\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:911
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "La llargada del nom (%N) de l'@a del @i %i no és vàlida\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:916
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "El desplaçament del valor (%N) de l'@a del @i %i no és vàlid\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:921
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "El @b del valor (%N) de l'@a del @i %i no és vàlid (hauria de ser 0)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:926
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "La mida del valor (%N) de l'@a del @i %i no és vàlida\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:931
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "L'@a del @i %i té un resum (%N) que no és vàlid\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:936
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "El @i %i és un %It, però sembla ser un directori en realitat.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
+#: e2fsck/problem.c:941
 #, c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "S'ha produït un error en llegir l'arbre d'@x al @i %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:946
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1808,7 +1859,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:952
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1818,7 +1869,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:957
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1827,7 +1878,7 @@ msgstr ""
 "\t(@b lògic %c, @ físic %b, longitud @n %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
+#: e2fsck/problem.c:962
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr ""
@@ -1835,26 +1886,26 @@ msgstr ""
 "«extents».\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
+#: e2fsck/problem.c:967
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr ""
 "El @i %i té format «extent», però el @S no té la característica EXTENTS\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
+#: e2fsck/problem.c:972
 #, c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "El @i %i no té EXTENT_FL, però té el format «extents»\n"
 
-#: e2fsck/problem.c:956
+#: e2fsck/problem.c:977
 #, c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "L'enllaç simbòlic ràpid %i té activat el EXTENT_FL.  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:982
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1863,39 +1914,40 @@ msgstr ""
 "\t(@b lògic %c @n, @b físic %b, longitud %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:986
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "El @i %i té un node «extent» no vàlid (blc %b, lblc %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
+#: e2fsck/problem.c:991
 #, c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "S'ha produït un error quan es convertia el grup de sectors @b @B: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
+#. @-expanded: quota inode is not a regular file.  
+#: e2fsck/problem.c:996
+#, fuzzy
+msgid "@q @i is not a regular file.  "
 msgstr "L' @i de @q no és un fitxer normal.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1001
 msgid "@q @i is not in use, but contains data.  "
 msgstr "L'@i de @q no s'utilitza, però conté dades.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1006
 msgid "@q @i is visible to the user.  "
 msgstr "L'@i de @q és visible per a l'usuari.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1011
 msgid "The bad @b @i looks @n.  "
 msgstr "El @i del @b dolent sembla @n.  "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1016
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1904,13 +1956,13 @@ msgstr ""
 "\t(@b lògic %c @n, @b físic %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
+#: e2fsck/problem.c:1021
 #, fuzzy, c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "El @i %i és massa gran.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
+#: e2fsck/problem.c:1026
 #, fuzzy, c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr ""
@@ -1918,14 +1970,14 @@ msgstr ""
 "de bits"
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
+#: e2fsck/problem.c:1031
 #, fuzzy, c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "El @b d'@a està malmès (col·lisió en l'assignació).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1039
 #, fuzzy
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
@@ -1935,13 +1987,13 @@ msgstr ""
 "\t(@b lògic %c @n, @b físic %b, longitud %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1048
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
 msgstr ""
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1053
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1951,7 +2003,7 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1059
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1960,14 +2012,14 @@ msgstr ""
 "\t(@b lògic %c, @b físic %b, longitud %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
+#: e2fsck/problem.c:1064
 #, fuzzy, c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr ""
 "El @i %i té format «extent», però el @S no té la característica EXTENTS\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
+#: e2fsck/problem.c:1069
 #, fuzzy, c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
 msgstr ""
@@ -1975,25 +2027,25 @@ msgstr ""
 "l'htree.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
+#: e2fsck/problem.c:1076
 msgid ""
 "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
 msgstr ""
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1081
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "El @i de @d %i @b %b ha de ser al @b %c.  "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
+#: e2fsck/problem.c:1086
 #, c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "El @i de @d %i té un @x marcar com a no inicialitzat a @b %c.  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1091
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
@@ -2002,14 +2054,14 @@ msgstr ""
 "S'arreglara al pas 1B.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
+#: e2fsck/problem.c:1096
 #, fuzzy, c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
 msgstr "El @i %i té el senyalador INDEX_FL definit però no és un @d.\n"
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
+#: e2fsck/problem.c:1102
 #, fuzzy, c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
@@ -2019,43 +2071,43 @@ msgstr ""
 "l'indicador d'immutable o de només afegir.  "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1108
 #, c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1113
 #, c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
 msgstr ""
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1128
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr ""
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1133
 #, fuzzy
 msgid "@A @x region allocation structure.  "
 msgstr "@A de l'estructura icount: %m\n"
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1138
 #, fuzzy
 msgid ""
 "@i %i has a duplicate @x mapping\n"
@@ -2065,37 +2117,58 @@ msgstr ""
 "\t(@b lògic %c, @b físic @n %b, longitud %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1143
 msgid "@A memory for encrypted @d list\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1148
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr ""
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1153
 #, c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr ""
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
+#: e2fsck/problem.c:1158
 #, fuzzy, c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "El @b d'@a està malmès (nom @n).  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
+#: e2fsck/problem.c:1163
 #, c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr ""
 
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1168
+#, fuzzy
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "El @i %i té un @b d'@a %b malmès.  "
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1174
+#, fuzzy
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr ""
+"El @i %i té format «extent», però el @S no té la característica EXTENTS\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1179
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1187
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2107,50 +2180,50 @@ msgstr ""
 "Pas 1B: Es torna a escanejar per @bs @m\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
+#: e2fsck/problem.c:1193
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "@b(s) reclamat(s) múltiplement del @i %i:"
 
-#: e2fsck/problem.c:1172
+#: e2fsck/problem.c:1208
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "S'ha produït un error en escanejar els nodes-i (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
+#: e2fsck/problem.c:1213
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A @B de @i (@i_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
+#: e2fsck/problem.c:1218
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "S'ha produït un error en iterar pels @bs al @i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1223 e2fsck/problem.c:1585
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 "S'ha produït un error en ajustar el nombre de referències del @b d'@a %b (@i "
 "%i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1233
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
 "Pas 1C: escaneig dels directoris dels nodes-i amb @bs reclamats "
 "múltiplement\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1239
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Pas 1D: conciliació dels @bs reclamats múltiplement\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1244
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2159,18 +2232,18 @@ msgstr ""
 "  té %r @m @b(s) @m, compartits amb %N fitxer(s):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1250
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i #%i, hora de modificació %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1255
 msgid "\t<@f metadata>\n"
 msgstr "\t<metadades del @f>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1260
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2178,7 +2251,7 @@ msgstr "(Hi ha %N nodes-i que contenen @bs múltiplement reclamats.)\n"
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1265
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2186,348 +2259,349 @@ msgstr ""
 "@bs reclamats múltiplement ja reassignats o clonats.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
+#: e2fsck/problem.c:1278
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "No s'ha pogut clonar el fitxer: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1284
 #, fuzzy
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Pas 3A: optimització dels directoris\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
+#: e2fsck/problem.c:1289
 #, fuzzy, c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "No s'ha pogut optimitzar el directori %q (%d): %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1294
 #, fuzzy
 msgid "Optimizing @x trees: "
 msgstr "S'estan optimitzant els directoris: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1309
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1314
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1319
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr ""
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1326
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Pas 2: comprovació de l'estructura del @d\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1331
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "El número de @i @n per «.» al @i de @d %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1336
 msgid "@E has @n @i #: %Di.\n"
 msgstr "L'@E té un @i @n #: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1341
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E té el @i %Di @D o sense fer servir.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1346
 msgid "@E @L to '.'  "
 msgstr "L'@E @L a «.»"
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1351
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "L'@E apunta al @i (%Di) ubicat en un @b malmès.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1356
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "L'@E @L al @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1361
 msgid "@E @L to the @r.\n"
 msgstr "L'@E @L al @r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1366
 msgid "@E has illegal characters in its name.\n"
 msgstr "El nom de l'@E conté caràcters no vàlids.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
+#: e2fsck/problem.c:1371
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Manca el «.» en el @i de @d %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
+#: e2fsck/problem.c:1376
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Manca el «..» en el @i de @d %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1381
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "La primera @e «%Dn» (@i=%Di) en el @i de @d %i (%p) @s «.»\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1386
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "La segona @e «%Dn» (@i=%Di) en el @i de @d %i (%p) @s «..»\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1391
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "L'i_faddr @F %IF, @s zero.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1396
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "L'i_file_acl @F %If, @s zero.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "L'i_dir_acl @F %Id, @s zero.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1401
+#, fuzzy
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "L'i_fsize @F %N, @s zero.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1406
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "L'i_frag @F %N, @s zero.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1411
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "L'i_fsize @F %N, @s zero.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1416
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "El @i %i (%Q) té un mode @n (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1421
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "El @i de @d %i, %B, desplaçament %N: el @d corromput\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1426
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "El @i de @d %i, %B, desplaçament %N: el nom de fitxer és massa llarg\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1431
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "El @i de @d %i té un %B no assignat.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
+#: e2fsck/problem.c:1436
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "L'@e de @d «.» en el @i de @d %i no acaba en NUL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
+#: e2fsck/problem.c:1441
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "L'@e de @d «..» en el @i de @d %i no acaba en NUL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1446
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "El @i %i (%Q) és un @v de caràcters @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1451
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "El @i %i (%Q) és un @v de blocs @I.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1456
 msgid "@E is duplicate '.' @e.\n"
 msgstr "L'@E és un duplicat de l'@e «.»\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1461
 msgid "@E is duplicate '..' @e.\n"
 msgstr "L'@E és un duplicat de l'@e «..»\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
+#: e2fsck/problem.c:1466 e2fsck/problem.c:1801
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "S'ha produït un error intern: no s'ha trobat dir_info per a %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1471
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E té el rec_len de %Dr, @s %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
+#: e2fsck/problem.c:1476
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A de l'estructura icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
+#: e2fsck/problem.c:1481
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "S'ha produït en iterar pels @bs de @d: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1486
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "S'ha produït un error en llegir el @b de @d %b (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1491
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "S'ha produït un error en escriure el @b de @d %b (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
+#: e2fsck/problem.c:1496
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A el nou @b de @d del @i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
+#: e2fsck/problem.c:1501
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "S'ha produït un error en desassignar el @i %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
+#: e2fsck/problem.c:1506
 #, c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "L'@e de @d per a «.» a %p (%i) és gran. \n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1511
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "El @i %i (%Q) és una FIFO no vàlida.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1516
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "El @i %i (%Q) és un sòcol @I.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1521
 msgid "Setting filetype for @E to %N.\n"
 msgstr "S'està establint el tipus de fitxer per a l'@E a %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1526
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "El tipus de fitxer de l'@E és incorrecte (és %Dt, @s %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1531
 msgid "@E has filetype set.\n"
 msgstr "El tipus de fitxer de l@E està definit.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1536
 msgid "@E has a @z name.\n"
 msgstr "El nom de l'@E és de @z.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1541
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "L'enllaç simbòlic %Q (@i #%i) és @n.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1546
 msgid "@a @b @F @n (%If).\n"
 msgstr "El @b d'@a @F @n (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1551
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 "El @f conté fitxers grans, però li manca el senyalador LARGE_FILE al @S.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1556
 msgid "@p @h %d: %B not referenced\n"
 msgstr "S'ha produït un @p al @h %d: %B no està referenciat\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1561
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "S'ha produït un @p al @h %d: %B està referenciat dues vegades\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1566
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "S'ha produït un @p en el @h %d: %B té un resum min. erroni\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1571
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "S'ha produït un @p al @h %d: %B té un resum max. erroni\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1576
 msgid "@n @h %d (%q).  "
 msgstr "el @h %d (%q) és @n.  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1580
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "S'ha produït un @p al @h %d (q): número de @b %b incorrecte.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
+#: e2fsck/problem.c:1590
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "S'ha produït un @p al @h %d:el node arrel no és vàlid\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1595
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "S'ha produït un @p al @h %d: %B té un límit (%N) @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1600
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "S'ha produït un @p al @h %d: %B té un comptador (%N) @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1605
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "S'ha produït un @p al @h %d: %B té una taula de resum desordenada\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1610
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "S'ha produït un @p al @h %d: %B té una profunditat (%N) @n\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1615
 msgid "Duplicate @E found.  "
 msgstr "S'ha trobat una @E duplicada.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1620
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2539,7 +2613,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1625
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2550,158 +2624,158 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1630
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "L'i_blocks_hi @F %N, @s zero.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1635
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "No s'esperava el @b al @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:1603
+#: e2fsck/problem.c:1639
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr ""
 "@E que fa referència al @i %Di a @g %g on _INODE_UNINIT està activat.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1644
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr ""
 "@E que fa referència al @i %Di ha trobat a @g %g's àrees de nodes-i sense "
 "fer servir .\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1649
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "i_file_acl_hi @F %N, @s zero.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
+#: e2fsck/problem.c:1654
 #, fuzzy, c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr "S'ha produït un @p al @h %d:el node arrel no és vàlid\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
+#: e2fsck/problem.c:1659
 #, fuzzy, c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr "S'ha produït un @p al @h %d:el node arrel no és vàlid\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1664
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "El @i de @d %i, %B, desplaçament %N: el @d corromput\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1669
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr ""
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1674
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr ""
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
+#: e2fsck/problem.c:1679
 #, c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr ""
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1684
 msgid "Encrypted @E is too short.\n"
 msgstr ""
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1691
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Pas 3: comprovació de la connectivitat dels @ds\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1696
 msgid "@r not allocated.  "
 msgstr "El @r no està assignat.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1701
 msgid "No room in @l @d.  "
 msgstr "No hi ha prou espai en el @d @l.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
+#: e2fsck/problem.c:1706
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "@i de @d %i desconnectat (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1711
 msgid "/@l not found.  "
 msgstr "No s'ha trobat /@l.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1716
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "«..» a %Q (%i) és %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1721
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "El directori /@l no existeix o està malmès.  No es pot reconnectar.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
+#: e2fsck/problem.c:1726
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "No s'ha pogut expandir el directori /@l: %m\n"
 
-#: e2fsck/problem.c:1695
+#: e2fsck/problem.c:1731
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "No s'ha pogut reconnectar %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
+#: e2fsck/problem.c:1736
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "S'ha produït un error en cercar el directori /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
+#: e2fsck/problem.c:1741
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block: %m en intentar crear el @d /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
+#: e2fsck/problem.c:1746
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode: %m en intentar crear el @d /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
+#: e2fsck/problem.c:1751
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block: %m en crear el @b de @d nou\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
+#: e2fsck/problem.c:1756
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_new_dir_block: %m en crear el @b de @d nou per a /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
+#: e2fsck/problem.c:1761
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "S'ha produït un error en ajustar el nombre de nodes-i al @i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
+#: e2fsck/problem.c:1766
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2712,7 +2786,7 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
+#: e2fsck/problem.c:1771
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2722,41 +2796,41 @@ msgstr ""
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
+#: e2fsck/problem.c:1781
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "S'ha produït un error en crear el @d arrel (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
+#: e2fsck/problem.c:1786
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "S'ha produït un error en crear el @d /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1791
 msgid "@r is not a @d; aborting.\n"
 msgstr "el @r no és un @d; s'interromprà.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1796
 msgid "Cannot proceed without a @r.\n"
 msgstr "No es pot continuar sense un @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
+#: e2fsck/problem.c:1806
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l no és un @d (node-i=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1811
 msgid "/@l has inline data\n"
 msgstr ""
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1816
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2765,7 +2839,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1821
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2773,53 +2847,53 @@ msgid ""
 msgstr ""
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1826
 #, fuzzy
 msgid "/@l is encrypted\n"
 msgstr "La imatge (%s) està xifrada\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1833
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Pas 3A: optimització dels directoris\n"
 
-#: e2fsck/problem.c:1802
+#: e2fsck/problem.c:1838
 #, c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "No s'ha pogut crear l'iterador dirs_to_hash: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1843
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "No s'ha pogut optimitzar el directori %q (%d): %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1848
 msgid "Optimizing directories: "
 msgstr "S'estan optimitzant els directoris: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1865
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Pas 4: comprovació dels nombres de referències\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
+#: e2fsck/problem.c:1870
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "@i de @z %i @u.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
+#: e2fsck/problem.c:1875
 #, c-format
 msgid "@u @i %i\n"
 msgstr "@i %i @u\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1880
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "el nombre de referències del @i %s és %Il, @s %N."
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1884
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2831,65 +2905,76 @@ msgstr ""
 "inode_link_info[%i] és %N, inode.i_links_count és %Il.  Haurien de "
 "coincidir!\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1891
+#, fuzzy
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "el nombre de referències del @i %s és %Il, @s %N."
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1896
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
+
 # FIXME
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:1903
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Pas 5: comprovació del resum de la informació del @g\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:1908
 msgid "Padding at end of @i @B is not set. "
 msgstr "El farciment al final del @B del @i no està habilitat. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:1913
 msgid "Padding at end of @b @B is not set. "
 msgstr "El farciment al final del @B del @b no està habilitat. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:1918
 msgid "@b @B differences: "
 msgstr "Diferències del @B del @b: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:1938
 msgid "@i @B differences: "
 msgstr "Diferències del @B del @i: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:1958
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 "El nombre de nodes-i lliures no és correcte per al @g núm. %g (%i, recompte="
 "%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:1963
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 "El nombre de directoris no és correcte per al @g núm. %g (%i, recompte=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:1968
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "El nombre de nodes-i lliures no és correcte (%i, recompte=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:1973
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr ""
 "El nombre de @bs lliures no és correcte per al @g núm. %g (%i, recompte="
 "%j).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:1978
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "El nombre de @bs lliures no és correcte (%i, recompte=%j).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
+#: e2fsck/problem.c:1983
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
@@ -2897,24 +2982,24 @@ msgstr ""
 "ERROR DE PROGRAMACIÓ: Els finals del @B (%b, %c) del @f (#%N) no "
 "coincideixen amb els finals del @B (%i, %j) calculats\n"
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:1989
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Error intern: es falseja el final del mapa de bits (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
+#: e2fsck/problem.c:1994
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "S'ha produït un error copiant en reemplaçar el @B del @i: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
+#: e2fsck/problem.c:1999
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "S'ha produït un error copiant en reemplaçar el @B del @b: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
+#: e2fsck/problem.c:2024
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
@@ -2922,7 +3007,7 @@ msgstr ""
 "BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
+#: e2fsck/problem.c:2029
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr ""
@@ -2930,61 +3015,61 @@ msgstr ""
 "INODE_UNINIT\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
+#: e2fsck/problem.c:2034
 #, c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
+#: e2fsck/problem.c:2039
 #, c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2046
 msgid "Recreate @j"
 msgstr "Torna a crear el @j"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2051
 msgid "Update quota info for quota type %N"
 msgstr "Actualitza la informació de la quota de tipus %N"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
+#: e2fsck/problem.c:2056
 #, c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr ""
 "S'ha produït un error en establir la informació de suma de verificació del "
 "@g de @b: %m\n"
 
-#: e2fsck/problem.c:2016
+#: e2fsck/problem.c:2061
 #, c-format
 msgid "Error writing file system info: %m\n"
 msgstr "S'ha produït un error quant s'escrivia la informació del sistema: %m\n"
 
-#: e2fsck/problem.c:2021
+#: e2fsck/problem.c:2066
 #, c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr ""
 "S'ha produït un error quan es buidaven les escriptures del dispositiu "
 "d'emmagatzemament: %m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2071
 #, fuzzy
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "Actualitza la informació de la quota de tipus %N"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2194
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "S'ha produït un error amb un codi no gestionat (0x%x)\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2320 e2fsck/problem.c:2324
 msgid "IGNORED"
 msgstr "IGNORAT"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr ""
 
@@ -3006,21 +3091,21 @@ msgstr "en iniciar l'exploració dels nodes-i"
 msgid "while doing inode scan"
 msgstr "en fer l'exploració dels nodes-i"
 
-#: e2fsck/super.c:190
-#, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
+#: e2fsck/super.c:224
+#, fuzzy, c-format
+msgid "while calling ext2fs_block_iterate for inode %u"
 msgstr "en fer la crida a ext2fs_block_iterate per al node-i %d"
 
-#: e2fsck/super.c:213
-#, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
+#: e2fsck/super.c:249
+#, fuzzy, c-format
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
 msgstr "en fer la crida a ext2fs_adjust_ea_refcount2 per al node-i %d"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Truncament"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Neteja"
 
@@ -3076,12 +3161,12 @@ msgstr ""
 " -l bad_blocks_file   Afegeix a la llista de blocs erronis (badblocks)\n"
 " -L bad_blocks_file   Estableix la llista de blocs erronis(badblocks)\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:136
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %u/%u fitxers (%0d.%d%% no contigus), %llu/%llu blocs\n"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:162
 #, c-format
 msgid ""
 "\n"
@@ -3096,14 +3181,14 @@ msgstr[1] ""
 "\n"
 "%12u nodes-i emprats (%2.2f%% de %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:166
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
 msgstr[0] "%12u fitxer no contigu (%0d.%d%%)\n"
 msgstr[1] "%12u fitxers no contigus (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:171
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
@@ -3111,37 +3196,37 @@ msgstr[0] "%12u directori no contigu (%0d.%d%%)\n"
 msgstr[1] "%12u directoris no contigus (%0d.%d%%)\n"
 
 # ind: indirect, dind: double indirect, tind: triple indirect (dpm)
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:176
 #, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "     nombre de nodes-i amb blocs ind/dind/tind: %u/%u/%u\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:184
 msgid "             Extent depth histogram: "
 msgstr "             Histograma profund estès: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:193
 #, c-format
 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 emprat (%2.2f%% de %llu)\n"
 msgstr[1] "%12llu blocs emprats (%2.2f%% de %llu)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:197
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%12u bloc dolent\n"
 msgstr[1] "%12u blocs dolents\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:199
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] "%12u fitxer gran\n"
 msgstr[1] "%12u fitxers grans\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:201
 #, c-format
 msgid ""
 "\n"
@@ -3156,96 +3241,96 @@ msgstr[1] ""
 "\n"
 "%12u fitxers normals\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:203
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u directori\n"
 msgstr[1] "%12u directoris\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:205
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
 msgstr[0] "%12u fitxer de dispositiu orientat a caràcters\n"
 msgstr[1] "%12u fitxers de dispositiu orientat a caràcters\n"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:208
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
 msgstr[0] "%12u fitxer de dispositiu orientat a blocs\n"
 msgstr[1] "%12u fitxers de dispositiu orientat a blocs\n"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:210
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u fifo\n"
 msgstr[1] "%12u fifos\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:212
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u enllaç\n"
 msgstr[1] "%12u enllaços\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:214
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u enllaç simbòlic"
 msgstr[1] "%12u enllaços simbòlics"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:216
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%u enllaç simbòlic ràpid)\n"
 msgstr[1] " (%u enllaços simbòlics ràpids)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:220
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u sòcol\n"
 msgstr[1] "%12u sòcols\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:224
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u fitxer\n"
 msgstr[1] "%12u fitxers\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:237 misc/badblocks.c:1002 misc/tune2fs.c:3022 misc/util.c:126
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "en determinar si %s està muntat."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:258
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Avís!  %s està muntat.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:261
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Avís!  %s s'està fent servir.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:267
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s està muntat.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:269
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s s'està fent servir.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:271
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3253,7 +3338,7 @@ msgstr ""
 "No es pot continuar, s'interromprà.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:273
 msgid ""
 "\n"
 "\n"
@@ -3267,85 +3352,116 @@ msgstr ""
 "danys ***GREUS*** al sistema de fitxers.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:278
 msgid "Do you really want to continue"
 msgstr "Esteu segur que voleu continuar?"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:280
 msgid "check aborted.\n"
 msgstr "s'ha interromput la comprovació.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:374
 msgid " contains a file system with errors"
 msgstr " conté un sistema de fitxers amb errors"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:376
 msgid " was not cleanly unmounted"
 msgstr " no es va desmuntar correctament"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:378
 msgid " primary superblock features different from backup"
 msgstr ""
 " les característiques del superbloc primari són diferents de les del de la "
 "còpia de seguretat"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:382
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " s'ha muntat %u vegades sense haver estat comprovat"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:389
 msgid " has filesystem last checked time in the future"
 msgstr ""
 "té la darrera hora de comprovació del sistema de fitxers és en el futur"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:395
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " no s'ha comprovat des de fa %u dies"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:403
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:409
 msgid ", check forced.\n"
 msgstr ", es forçarà la comprovació.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:442
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: net, %u/%u fitxers, %llu/%llu blocs"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:462
 msgid " (check deferred; on battery)"
 msgstr " (s'ha ajornat la comprovació; s'està utilitzant la bateria)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:465
 msgid " (check after next mount)"
 msgstr " (es comprovarà després del muntatge següent)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:467
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (es comprovarà en %ld muntades)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:617
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ERROR: no s'ha pogut obrir /dev/null (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:688
 msgid "Invalid EA version.\n"
 msgstr "La versió dels atributs ampliats no és vàlida.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:701
 #, fuzzy
 msgid "Invalid readahead buffer size.\n"
 msgstr "Paràmetre de canvi de mida no vàlid: %s\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:750
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Es desconeix l'opció ampliada: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:758
+#, fuzzy
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"S'ha especificat opció(ons) esteses incorrectes: %s\n"
+"\n"
+"Les opcions esteses se separen amb comes, i poden emprar un argument que\n"
+"\n"
+"s'estableix amb un signe igual («=»).\n"
+"\n"
+"Les opcions esteses vàlides són:\n"
+"\tsuperblock=<número de superbloc>\n"
+"\tblocksize=<mida del bloc>\n"
+
+#: e2fsck/unix.c:762
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr ""
+
+#: e2fsck/unix.c:771
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr ""
+
+#: e2fsck/unix.c:783
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3355,58 +3471,58 @@ msgstr ""
 "%d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:856
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "S'ha produït un error en validar el descriptor de fitxer %d: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:860
 msgid "Invalid completion information file descriptor"
 msgstr "El fitxer descriptor de la informació de completat no és vàlid"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:875
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr ""
 "Només es pot especificar una de les opcions -p/-a, -n o -y a la vegada."
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:896
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "L'opció -t no està implementada en aquesta versió de l'e2fsck.\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:927 e2fsck/unix.c:1005 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1741 misc/tune2fs.c:2036 misc/tune2fs.c:2054
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "No s'ha pogut resoldre «%s»"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:984
 msgid "The -n and -D options are incompatible."
 msgstr "Les opcions -n i -D no són compatibles."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:989
 msgid "The -n and -c options are incompatible."
 msgstr "Les opcions -n i -c no són compatibles"
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:994
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Les opcions -n i -l/-L no són compatibles."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1018
 #, fuzzy
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Les opcions -n i -D no són compatibles."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1024
 #, fuzzy
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Les opcions -n i -D no són compatibles."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1088
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "No es poden utilitzar les opcions -c i -l/-L al mateix temps.\n"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1135
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3415,7 +3531,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG «%s» no és un enter\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1144
 #, c-format
 msgid ""
 "\n"
@@ -3426,7 +3542,7 @@ msgstr ""
 "L'argument no numèric de -%c no és vàlid («%s»)\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1235
 #, c-format
 msgid ""
 "MMP interval is %u seconds and total wait time is %u seconds. Please "
@@ -3435,27 +3551,28 @@ msgstr ""
 "L'interval MMP és de %u segons i el temps d'espera total és de %u segons. "
 "Espereu si us plau...\n"
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1252 e2fsck/unix.c:1257
 msgid "while checking MMP block"
 msgstr "mentre es comprovava el bloc MMP"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1259
+#, fuzzy, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 "Si esteu segur que el sistema de fitxers no s'està fent servir a cap node, "
 "executeu:\n"
 "'tune2fs -f -E clear_mmp {dispositiu}'\n"
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1275
 #, fuzzy
 msgid "while reading MMP block"
 msgstr "en llegir el bloc MMP."
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1295 e2fsck/unix.c:1347 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2613 misc/mke2fs.c:2664 misc/tune2fs.c:2754
+#: misc/tune2fs.c:2799 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3467,57 +3584,57 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1336 misc/e2undo.c:270 misc/mke2fs.c:2653 misc/tune2fs.c:2788
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "en intentar suprimir %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1362 misc/mke2fs.c:2679 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "en provar de configurar el fitxer de desfer\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1405
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Error: la versió de la biblioteca de l'ext2fs és massa antiga.\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1412
 msgid "while trying to initialize program"
 msgstr "en intentar inicialitzar el programa"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1435
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tS'utilitza %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1447
 msgid "need terminal for interactive repairs"
 msgstr "cal un terminal per a les reparacions interactives"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1508
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s provant els blocs de còpia de seguretat...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1510
 msgid "Superblock invalid,"
 msgstr "Superbloc no vàlid,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1511
 msgid "Group descriptors look bad..."
 msgstr "Els descriptors de grup no estan en bon estat..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1521
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s mentre es feien servir els blocs de còpia de seguretat"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1525
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: mentre es tornava al superbloc original\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1554
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3528,32 +3645,32 @@ msgstr ""
 "(O bé el superbloc del sistema de fitxers està malmès)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1561
 msgid "Could this be a zero-length partition?\n"
 msgstr "Pot ser que això sigui una partició de mida zero?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1563
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr ""
 "Cal que tingueu accés de %s al sistema de fitxers o bé que sigueu l'usuari "
 "primari\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1569
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Pot ser que no existeixi el dispositiu o bé que sigui d'intercanvi?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1571
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 "Pot ser que el sistema de fitxers l'hagi muntat o obert un altre programa de "
 "manera exclusiva?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1575
 msgid "Possibly non-existent device?\n"
 msgstr "Pot ser que no existeixi el dispositiu?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1578
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3561,21 +3678,26 @@ msgstr ""
 "El disc està protegit contra escriptura; utilitzeu l'opció\n"
 "-n per a fer una comprovació de només-lectura del dispositiu.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1592
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1667
 msgid "Get a newer version of e2fsck!"
 msgstr "Hauríeu d'obtenir una versió més recent de l'e2fsck"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1711
 #, fuzzy, c-format
 msgid "while checking journal for %s"
 msgstr "en comprovar el registre de transaccions per a %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1714
 #, fuzzy
 msgid "Cannot proceed with file system check"
 msgstr "No es pot continuar sense un @r.\n"
 
-#: e2fsck/unix.c:1661
+#: e2fsck/unix.c:1725
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
@@ -3583,50 +3705,50 @@ msgstr ""
 "Avís: s'omet la recuperació del registre de transaccions perquè s'està "
 "comprovant el sistema de fitxers en mode de només-lectura.\n"
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1737
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "no s'han pogut definir els senyaladors del superbloc a %s\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1743
 #, fuzzy, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "No s'ha trobat el superbloc del registre de transaccions\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1747
 #, fuzzy, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "S'ha suprimit el registre de transaccions\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1751
 #, fuzzy, c-format
 msgid "while recovering journal of %s"
 msgstr "en recuperar el registre de transaccions ext3 de %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1773
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s té caracteristiques no implementades:"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1832
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s en llegir el node-i dels blocs erronis\n"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1835
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Això no és un bon presagi, però s'intentarà continuar...\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1875
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Creació del registre de transaccions (%d blocs): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1885
 msgid " Done.\n"
 msgstr " Fet.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1887
 #, fuzzy
 msgid ""
 "\n"
@@ -3636,24 +3758,38 @@ msgstr ""
 "*** s'ha tornat a crear el registre de transaccions - el sist. de fitxers "
 "torna a ser ext3 ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1893
 msgid "aborted"
 msgstr "s'ha interromput"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1895
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: s'ha cancel·lat l'e2fsck.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1922
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "S'està tornant a iniciar l'e2fsck des del començament...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1926
 msgid "while resetting context"
 msgstr "en reiniciar el context"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:1985
+#, fuzzy, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** S'HA MODIFICAT EL SISTEMA DE FITXERS *****\n"
+
+#: e2fsck/unix.c:1987
+#, fuzzy, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: l'ordre dels bytes del sistema de fitxers ja està normalitzat.\n"
+
+#: e2fsck/unix.c:1991 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3662,12 +3798,12 @@ msgstr ""
 "\n"
 "%s: ***** S'HA MODIFICAT EL SISTEMA DE FITXERS *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:1996
 #, fuzzy, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** REINICIEU EL LINUX *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2006 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3678,51 +3814,51 @@ msgstr ""
 "%s: ********** AVÍS: el sistema de fitxers encara té errors **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "sS"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr ""
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr ""
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<s>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (s/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "s'ha cancel·lat\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr ""
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "sí\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "no\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3731,7 +3867,7 @@ msgstr ""
 "%s? no\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3740,38 +3876,38 @@ msgstr ""
 "%s? sí\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "sí"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "no"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: El(s) mapa(es) de blocs no és correcte per %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "es llegeixen el mapes de bits dels blocs i dels nodes-i"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "en tornar a intentar la lectura dels mapes de bits per a %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "escriptura dels mapes de bits de bloc i de node-i"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "en tornar a escriure els mapes de bits de bloc i de node-i per de %s"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3784,37 +3920,37 @@ msgstr ""
 "%s: INCONSISTÈNCIA INESPERADA; EXECUTEU fsck MANUALMENT.\n"
 "\t(és a dir, sense les opcions -a o -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Memòria utilitzada: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Memòria utilitzada: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "temps: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "temps transcorregut: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "en llegir el node-i %lu a %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "en escriure el node-i %lu a %s"
 
-#: e2fsck/util.c:765
+#: e2fsck/util.c:792
 msgid ""
 "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
 "running.\n"
@@ -3822,14 +3958,14 @@ msgstr ""
 "INCONGRUÈNCIA INESPERADA: El sistema de fitxers que l'fsck està modificant "
 "s'està executant.\n"
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "fet                                                  \n"
 
-#: misc/badblocks.c:97
-#, c-format
+#: misc/badblocks.c:100
+#, fuzzy, c-format
 msgid ""
-"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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"
@@ -3842,7 +3978,7 @@ msgstr ""
 "       [-p nombre_de_passos] [-t patró_de_prova [-t patró_de_prova [...]]]\n"
 "       dispositiu [darrer_bloc [bloc_d'inici]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3851,85 +3987,85 @@ msgstr ""
 "%s: les opcions -n i -w són mutualment exclusives.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f%% fet, %s transcorreguts. (%d/%d/%d errors)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Comprovació amb un patró arbitrari: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Comprovació amb el patró 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "durant la cerca"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Valor estrany (%ld) a do_read\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "durant l'execució de ext2fs_sync_device"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "en iniciar la iteració per la llista de blocs erronis"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "en assignar les memòries intermèdies"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Comprovació dels blocs %lu a %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "S'està comprovant si hi ha blocs erronis en mode de només-lectura\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "S'està comprovant si hi ha blocs erronis (prova de només-lectura): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Hi ha massa blocs erronis, s'interromprà la comprovació\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr ""
 "S'està comprovant si hi ha blocs erronis en mode de lectura-escriptura\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Dels blocs %lu a %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Lectura i comparació: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
 "S'està comprovant si hi ha blocs erronis en mode de lectura-escriptura no "
 "destructiu\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr ""
 "S'està comprovant si hi ha blocs erronis (prova en mode de lectura-"
 "escriptura no destructiu)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3937,63 +4073,63 @@ msgstr ""
 "\n"
 "S'ha interceptat una interrupció; s'iniciaran les tasques de neteja\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "durant l'escriptura de les dades de prova, bloc %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:131
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s està muntat; "
 
 # FIXME: Hope - esperem ? (dpm)
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 "s'ha forçat badblocks de totes maneres.  Segurament /etc/mtab sigui "
 "incorrecte.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "l'execució de badblocks no és segura!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:142
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s està essent utilitzat pel sistema; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "s'ha forçat badblocks de totes maneres.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "%s no vàlid - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr ""
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "no es pot assignar memòria per al patró_de_prova - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr ""
 "Només es pot especificar un patró_de_prova com a màxim en mode de només-"
 "lectura"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr ""
 "No es pot utilitzar un patró_de_prova arbitrari en mode de només-lectura"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -4001,41 +4137,41 @@ msgstr ""
 "No s'ha pogut determinar la mida del dispositiu;\n"
 "l'haureu d'especificar manualment\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "en intentar determinar la mida del dispositiu"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "últim bloc"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "primer bloc"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "bloc d'inici no vàlid (%llu): hauria de ser inferior a %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "bloc de finalització no vàlid (%llu): ha de ser un valor de 32 bits"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "en crear la llista de blocs erronis en memòria"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "Fitxer d'entrada - format incorrecte"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "en afegir a la llista de blocs erronis en memòria"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Pas completat. S'han trobat %u blocs erronis. (%d/%d/%d errors)\n"
@@ -4107,159 +4243,159 @@ msgstr "= no és compatible amb - i +\n"
 msgid "Must use '-v', =, - or +\n"
 msgstr "Cal utilitzar «-v», =, - o +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:79 misc/create_inode.c:118
 #, fuzzy, c-format
 msgid "while reading inode %u"
 msgstr "en llegir el node-i %lu a %s"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:89 misc/create_inode.c:287 misc/create_inode.c:352
+#: misc/create_inode.c:390
 #, fuzzy
 msgid "while expanding directory"
 msgstr "en expandir el /lost+found"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:96
 #, fuzzy, c-format
 msgid "while linking \"%s\""
 msgstr "en obrir %s"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:104 misc/create_inode.c:131 misc/create_inode.c:321
 #, fuzzy, c-format
 msgid "while writing inode %u"
 msgstr "en escriure el node-i %lu a %s"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:151 misc/create_inode.c:175
 #, fuzzy, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "en intentar truncar %s"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:162
 #, fuzzy, c-format
 msgid "while opening inode %u"
 msgstr "en obrir l'escaneig de nodes-i"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:168 misc/create_inode.c:195 misc/create_inode.c:975
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 #, fuzzy
 msgid "while allocating memory"
 msgstr "en assignar la memòria intermèdia"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:188 misc/create_inode.c:204
 #, fuzzy, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "en llegir els senyaladors a %s"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:213
 #, fuzzy, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "en escriure el node-i %lu a %s"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:223
 #, fuzzy, c-format
 msgid "while closing inode %u"
 msgstr "en fer l'exploració dels nodes-i"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:274
 #, fuzzy, c-format
 msgid "while allocating inode \"%s\""
 msgstr "en ubicar la memòria intermèdia per al node-i"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:293
 #, fuzzy, c-format
 msgid "while creating inode \"%s\""
 msgstr "en llegir el node-i %lu a %s"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:359
 #, fuzzy, c-format
 msgid "while creating symlink \"%s\""
 msgstr "en llegir els senyaladors a %s"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:377 misc/create_inode.c:896
 #, fuzzy, c-format
 msgid "while looking up \"%s\""
 msgstr "en cercar el /lost+found"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:397
 #, fuzzy, c-format
 msgid "while creating directory \"%s\""
 msgstr "en crear el directori arrel"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:625
 #, fuzzy, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "en obrir %s"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:739
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:747
 #, fuzzy, c-format
 msgid "while opening directory \"%s\""
 msgstr "en obrir %s"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:757
 #, fuzzy, c-format
 msgid "while lstat \"%s\""
 msgstr "en intentar mostrar la informació de %s"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:808
 #, fuzzy, c-format
 msgid "while creating special file \"%s\""
 msgstr "en llegir el node-i %lu a %s"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:817
 #, fuzzy
 msgid "malloc failed"
 msgstr "L'assignació de memòria ha fallat"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:825
 #, fuzzy, c-format
 msgid "while trying to read link \"%s\""
 msgstr "en intentar redimensionar %s"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:832
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr ""
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:843
 #, fuzzy, c-format
 msgid "while writing symlink\"%s\""
 msgstr "en escriure el node-i %lu a %s"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:854
 #, fuzzy, c-format
 msgid "while writing file \"%s\""
 msgstr "en escriure el node-i %lu a %s"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:867
 #, fuzzy, c-format
 msgid "while making dir \"%s\""
 msgstr "en obrir %s"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:885
 #, fuzzy
 msgid "while changing directory"
 msgstr "s'està llegint el bloc de directori"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:891
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:904
 #, fuzzy, c-format
 msgid "while setting inode for \"%s\""
 msgstr "en establir la versió a %s"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:911
 #, fuzzy, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "en establir els senyaladors a %s"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:937
 #, fuzzy
 msgid "while saving inode data"
 msgstr "en iniciar l'exploració dels nodes-i"
@@ -4267,7 +4403,7 @@ msgstr "en iniciar l'exploració dels nodes-i"
 #: misc/dumpe2fs.c:56
 #, fuzzy, c-format
 msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+"Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
 msgstr ""
 "Forma d'ús: %s [-bfhixV] [-o superbloc=<num>] [-o midadelbloc=<num>] "
 "dispositiu\n"
@@ -4387,105 +4523,56 @@ msgstr "en imprimir la llista de blocs erronis"
 msgid "Bad blocks: %u"
 msgstr "Blocs erronis: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:367
 msgid "while reading journal inode"
 msgstr "en llegir el node-i del registre de transaccions"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "en obrir el node-i del registre de transaccions"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "en llegir el superbloc del registre de transaccions"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "El numero màgic del registre de transaccions no és vàlid!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Característiques del registre de transaccions:       "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Mida del registre de transaccions:              "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Llargada del reg. de trans.:          %u\n"
-"Seqüència del reg. de trans.:         0x%08x\n"
-"Inici del registre de trans.:         %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Número d'error del regi. de trans.:       %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "en llegir el superbloc del registre de transaccions"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr ""
 "No s'han trobat els números màgics del superbloc del registre de transaccions"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Mida de bloc del reg. de trans.:      %u\n"
-"Llargada del reg. de trans.:          %u\n"
-"Primer bloc del reg. de trans.:       %u\n"
-"Seqüència del reg. de trans.:         0x%08x\n"
-"Inici del registre de trans.:         %u\n"
-"Nombre d'usuaris del reg. de trans.:  %u\n"
+#: misc/dumpe2fs.c:468
+#, fuzzy
+msgid "failed to alloc MMP buffer\n"
+msgstr "en assignar la memòria intermèdia"
 
-#: misc/dumpe2fs.c:514
-#, c-format
-msgid "Journal users:            %s\n"
-msgstr "Usuaris del registre de trans.:       %s\n"
+#: misc/dumpe2fs.c:479
+#, fuzzy, c-format
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "Comprovació dels blocs %lu a %lu\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:798 misc/tune2fs.c:2073
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "No s'ha pogut assignar memòria per a analitzar les opcions\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Paràmetre del superbloc no vàlid: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Paràmetre de mida de bloc no vàlida: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4509,50 +4596,43 @@ msgstr ""
 "\tsuperblock=<número de superbloc>\n"
 "\tblocksize=<mida del bloc>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1845
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tEn utilitzar %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1590 misc/tune2fs.c:2949
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "No s'ha trobat un superbloc del sistema de fitxers vàlid.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:730
-#, c-format
+#: misc/dumpe2fs.c:747
+#, fuzzy, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "en tornar a intentar la lectura dels mapes de bits per a %s"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
-"\n"
-"%s: %s: s'ha produït un error en llegir els mapes de bits: %s\n"
 
-#: misc/e2image.c:106
-#, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
+#: misc/e2image.c:107
+#, fuzzy, c-format
+msgid "Usage: %s [ -r|Q ] [ -f ] device image-file\n"
 msgstr "Forma d'ús: %s [ -r|Q ] [ -fr ] dispositiu fitxer-imatge\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:109
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "       %s -I dispositiu fitxer-imatge\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:110
 #, c-format
 msgid ""
 "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
@@ -4561,107 +4641,107 @@ msgstr ""
 "       %s -ra  [  -cfnp  ] [ -o desplaç_font ] [ -O desplaç_destí ] sf_font "
 "[ sf_destí ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:175 misc/e2image.c:580 misc/e2image.c:586 misc/e2image.c:1185
 msgid "while allocating buffer"
 msgstr "en assignar la memòria intermèdia"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:180
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "S'escriu el bloc %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:194
 #, c-format
 msgid "error writing block %llu"
 msgstr "S'ha produït un error en escriure el bloc %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:197
 msgid "error in generic_write()"
 msgstr "S'ha produït un error a generic_write()"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:214
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Error: La mida de la capçalera és més gran que wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:219
 msgid "Couldn't allocate header buffer\n"
 msgstr "No s'ha pogut ubicar la capçalera de la memòria intermèdia\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:247
 msgid "while writing superblock"
 msgstr "en escriure el superbloc"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:256
 msgid "while writing inode table"
 msgstr "en escriure la taula de nodes-i"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:264
 msgid "while writing block bitmap"
 msgstr "en escriure el mapa de bits dels blocs"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:272
 msgid "while writing inode bitmap"
 msgstr "en escriure el mapa de bits dels nodes-i"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:506
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr ""
 "El bloc de directori %llu està corromput: la longitud de registre "
 "«rec_len» (%d) és incorrecta\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:518
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr ""
 "El bloc de directori %llu està corromput: la longitud del nom "
 "«name_len» (%d) és incorrecta\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:559
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu blocs (%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:590 misc/e2image.c:630
 msgid "Copying "
 msgstr "S'està copiant "
 
-#: misc/e2image.c:626
+#: misc/e2image.c:627
 msgid ""
 "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr ""
 "Si atureu ara el procés destruireu el sistema de fitxers, interrompeu un "
 "altre cop si n'esteu segurs\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:653
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " queden %s a %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:665 misc/e2image.c:1195
 #, c-format
 msgid "error reading block %llu"
 msgstr "S'ha produït un error en llegir el bloc %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:719
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "S'han copiat %llu / %llu blocs (%d%%) en %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:723
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "a %.2f MB/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:759
 msgid "while allocating l1 table"
 msgstr "en assignar la taula l1"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:804
 msgid "while allocating l2 cache"
 msgstr "en assignar la memòria cau l2"
 
-#: misc/e2image.c:826
+#: misc/e2image.c:827
 msgid ""
 "Warning: There are still tables in the cache while putting the cache, data "
 "will be lost so the image may not be valid.\n"
@@ -4669,77 +4749,77 @@ msgstr ""
 "Avís: encara hi ha taules a la memòria cau en el moment de posar-la. Es "
 "perdran dades i la imatge no serà vàlida.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1152
 msgid "while allocating ext2_qcow2_image"
 msgstr "en assignar la ext2_qcow2_image"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1159
 msgid "while initializing ext2_qcow2_image"
 msgstr "en inicialitzar la ext2_qcow2_image"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1218 misc/e2image.c:1236
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr ""
 "Error de programació: s'han creat múltiples blocs refcount seqüencials!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1276
 msgid "while allocating block bitmap"
 msgstr "en assignar el mapa de bits dels blocs"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1285
 msgid "while allocating scramble block bitmap"
 msgstr "en assignar el mapa de bits xifrat dels blocs"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1292
 msgid "Scanning inodes...\n"
 msgstr "Escaneig de nodes-i...\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1304
 msgid "Can't allocate block buffer"
 msgstr "No es pot assignar la memòria intermèdia de blocs"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1343 misc/e2image.c:1357
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "mentre s'iterava sobre el node-i %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1389
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "No es poden instal·lar les imatges raw i QCOW2"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1411
 msgid "error reading bitmaps"
 msgstr "error en llegir els mapes de bits"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1423
 msgid "while opening device file"
 msgstr "en obrir el fitxer de dispositius"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1434
 msgid "while restoring the image table"
 msgstr "en restaurar la taula d'imatges"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1531
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "l'opció -a només es pot fer servir amb imatges raw o QCOW2."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1537
 msgid "Offsets are only allowed with raw images."
 msgstr "Els desplaçaments només es poden fer servir en imatges raw."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1542
 msgid "Move mode is only allowed with raw images."
 msgstr "El mode «Moure» només es pot fer servir en imatges raw."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1547
 msgid "Move mode requires all data mode."
 msgstr "El mode «Moure» necessita el mode «totes les dades»."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1557
 msgid "checking if mounted"
 msgstr "es comprova si està muntat"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1564
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4751,48 +4831,53 @@ msgstr ""
 "en una imatge inconsistent que pot no ser útil per depurar.\n"
 "Feu servir l'opció -f si realment voleu fer-ho.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1618
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "La imatge QCOW2 no es pot escriure a la sortida estàndard (stdout)!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1624
 msgid "Can not stat output\n"
 msgstr "No es pot veure l'estat de la sortida\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1634
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "La imatge (%s) està comprimida\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1637
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "La imatge (%s) està xifrada\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1640
+#, fuzzy, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "La imatge (%s) està xifrada\n"
+
+#: misc/e2image.c:1644
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr "en provar de convertir una imatge QCOW2 (%s) en una imatge raw (%s)"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1654
 msgid "The -c option only supported in raw mode\n"
 msgstr "L'opció -c només es pot fer servir en mode raw\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1659
 msgid "The -c option not supported when writing to stdout\n"
 msgstr ""
 "L'opció -c no es pot fer servir quan s'escriu a la sortida estàndard "
 "(stdout)\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1666
 msgid "while allocating check_buf"
 msgstr "en assignar check_buf"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1672
 msgid "The -p option only supported in raw mode\n"
 msgstr "L'opció -p només es pot fer servir em mode raw\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1682
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d blocs ja contenen les dades que cal copiar\n"
@@ -4822,7 +4907,7 @@ msgstr "e2label: s'ha produït un error en llegir el superbloc\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: aquest no és un sistema de fitxers ext2\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3152
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Avís: l'etiqueta és massa llarga, es truncarà.\n"
@@ -4837,171 +4922,173 @@ msgstr "e2label: no es pot tornar a anar al superbloc\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2lable: s'ha produït un error en escriure el superbloc\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1733
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Forma d'ús: e2label dispositiu [etiquetanova]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, fuzzy, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+msgid ""
+"Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> "
+"<filesystem>\n"
 msgstr "Forma d'ús: %s <fitxer de transaccions> <sistema de fitxers>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 #, fuzzy
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr "L'hora de muntatge del sistema de fitxers no concorda amb %u\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 #, fuzzy
 msgid "Last mount time does not match.\n"
 msgstr "L'hora de muntatge del sistema de fitxers no concorda amb %u\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 #, fuzzy
 msgid "while reading filesystem superblock."
 msgstr "en llegir el superbloc del registre de transaccions"
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 #, fuzzy
 msgid "while fetching superblock"
 msgstr "en escriure el superbloc"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, fuzzy, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "La suma de verificació del superbloc no coincideix amb el superbloc"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, fuzzy, c-format
 msgid "illegal offset - %s"
 msgstr "El desplaçament no és vàlid: %s\n"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr ""
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, fuzzy, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "en obrir el fitxer de dispositius"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 #, fuzzy
 msgid "while reading undo file"
 msgstr "en llegir el node arrel"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, fuzzy, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: s'han especificat massa dispositius\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, fuzzy, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "La suma de verificació del node-i no coincideix amb el node-i"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, fuzzy, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "La capçalera estesa està corrompuda"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr ""
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, fuzzy, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "mida del bloc erroni - %s"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, fuzzy, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr ""
 "El @S del @j té un senyalador de característica no compatible activat no "
 "compatible.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, fuzzy, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "S'ha produït un error en determinar si %s està muntat.\n"
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 #, fuzzy
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr ""
 "e2undo només s'hauria d'executar en un sistema de fitxers sense muntar\n"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, fuzzy, c-format
 msgid "while opening `%s'"
 msgstr "en obrir %s"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr ""
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 #, fuzzy
 msgid "while reading keys"
 msgstr "en llegir els mapes de bits"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr ""
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr ""
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, fuzzy, c-format
 msgid "%s: block %llu is too long."
 msgstr "Dels blocs %lu a %lu\n"
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, fuzzy, c-format
 msgid "while fetching block %llu."
 msgstr "S'escriu el bloc %llu\n"
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr ""
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, fuzzy, c-format
 msgid "while writing block %llu."
 msgstr "S'ha produït un error en escriure el bloc %llu"
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr ""
@@ -5079,37 +5166,37 @@ msgstr ""
 "\tsolucionar corregint el fitxer /etc/fstab com més aviat millor.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: no s'ha trobat\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: no hi ha cap més procés fill!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Avís... %s per al dispositiu %s ha sortit amb el senyal %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: l'estat és %x, cosa que no hauria de succeir mai.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "S'ha finalitzat amb %s (estat de sortida %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: s'ha produït l'error %d en executar l'fsck.%s per a %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5118,11 +5205,11 @@ msgstr ""
 "prefixar\n"
 "amb «no» o «!».\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "No s'ha pogut assignar memòria per al sistema de fitxers\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
@@ -5131,85 +5218,85 @@ msgstr ""
 "%s: se salta una línia incorrecta de /etc/fstab: muntatge lligat(bind) amb "
 "un número de contrasenya diferent de zero\n"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: no es pot comprovar %s: no s'ha trobat el fsck.%s\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "S'estan comprovant tots els sistemes de fitxers.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--en espera-- (pas %d)\n"
 
-#: misc/fsck.c:1078
+#: misc/fsck.c:1085
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Forma d'ús: fsck [-AMNPRTV] [ -C [ fd ] ] [-t tipusdesistdefitxers] [opcions-"
 "delsistdefitxers] [sistdefitxers ...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: s'han especificat massa dispositius\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: s'han especificat massa arguments\n"
 
-#: misc/fuse2fs.c:3745
+#: misc/fuse2fs.c:3739
 #, fuzzy
 msgid "Mounting read-only.\n"
 msgstr "El fitxer s'ha obert com a només de lectura"
 
-#: misc/fuse2fs.c:3769
+#: misc/fuse2fs.c:3763
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3775 misc/fuse2fs.c:3789
 #, c-format
 msgid "%s: %s.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3776 misc/fuse2fs.c:3791 misc/tune2fs.c:3049
 #, fuzzy, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr ""
 "Executeu «e2fsck -f %s» primer.\n"
 "\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3798
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3806
 #, fuzzy, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "La reducció de la mida del node-i no està implementada\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3821
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3825
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3830
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3834
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3838
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr ""
 
@@ -5233,7 +5320,7 @@ msgstr "En llegir la versió a %s"
 msgid "While reading version on %s"
 msgstr "En llegir la versió a %s"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5255,39 +5342,39 @@ msgstr ""
 "\t[-t tipus-sf] [-T Tipus-ús ] [-U UUID] [-jnqvDFKSV] dispositiu [comptador-"
 "blocs]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "S'està executant l'ordre: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "en intentar executar «%s»"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "en processar la llista de blocs erronis des del programa"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
 "El bloc %d de l'àrea del descriptor del superbloc/grup primari és "
 "incorrecte.\n"
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "Els blocs %u fins a %u han d'ésser correctes per a poder crear un sistema de "
 "fitxers.\n"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "S'està interrompent...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5298,15 +5385,20 @@ msgstr ""
 "\tcontenen blocs erronis.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "en marcar els blocs erronis com a utilitzats"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+#, fuzzy
+msgid "while writing reserved inodes"
+msgstr "en escriure al node-i del registre de transaccions"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Escriptura de les taules de nodes-i:"
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5316,78 +5408,78 @@ msgstr ""
 "No s'han pogut escriure %d blocs a la taula de nodes-i que comença a %llu: "
 "%s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2726 misc/mke2fs.c:3131
 msgid "done                            \n"
 msgstr "fet                            \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "en crear el directori arrel"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "en llegir el node arrel"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "en establir la propietat del node-i arrel"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "en crear /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "en cercar el /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "en expandir el /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "en establir el node-i de blocs erronis"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "S'ha exhaurit la memòria en esborrar els sectors %d-%d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Avís: no s'ha pogut llegir el bloc 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Avís: no s'ha pogut esborrar el sector %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "en inicialitzar el superbloc del registre de transaccions"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "S'estan escrivint zeros al dispositiu de registre de transaccions:"
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr ""
 "en escriure zeros al dispositiu de registre de transaccions (bloc %llu, "
 "recompte %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "en escriure el superbloc del registre de transaccions"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "S'està creant un sistema de fitxers amb %llu %dk blocs i %u nodes-i\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5396,160 +5488,165 @@ msgstr ""
 "avís: %llu blocs no utilitzats.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Etiqueta del sistema de fitxers=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Tipus de sistema operatiu: %s\n"
 
 # FIXME: log
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Mida del bloc=%u (log=%u)\n"
 
 # FIXME: log
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Mida del grup de sectors=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Mida del fragment=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Stride=%u blocs, amplada del Stripe=%u blocs\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u nodes-i, %llu blocs\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu blocs (%2.2f%%) reservats per al superusuari\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Bloc de dades inicial=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Propietari del directori arrel = %u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Màxim de blocs del sistema de fitxers=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u grups de blocs\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u grup de blocs\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u blocs per grup, %u grups de sectors per grup\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blocs per grup, %u fragments per grup\n"
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u nodes-i per grup\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "UUID del sistema de fitxers=%s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Còpies de seguretat del superbloc desades en els blocs: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:820
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s necessita «-O 64bit»\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:826
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "«%s» ha d'anar abans de «resize=%u»\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:839
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "El desc_size no és vàlid: «%s»\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:853
+#, fuzzy, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "La mida nova no és vàlida: %s\n"
+
+#: misc/mke2fs.c:865
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "El desplaçament no és vàlid: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:879 misc/tune2fs.c:2101
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "L'mmp_update_interval no és vàlid: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:896
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "El nombre de superblocs de la còpia de seguretat no és vàlid: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:918
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "El paràmetre de stride no és vàlid: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:933
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "L'amplada del stripe no és vàlida: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:956
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Paràmetre de canvi de mida no vàlid: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:963
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 "El màxim del canvi de mida ha de ser més gran que la mida del sistema de "
 "fitxers.\n"
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:987
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 "El canvi de mida en línia no és compatible amb sistemes de fitxers de versió "
 "0\n"
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1013 misc/mke2fs.c:1022
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "El root_owner no és vàlid: «%s»\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1065
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -5599,7 +5696,7 @@ msgstr ""
 "\tquotatype=<usuari o grup>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1090
 #, c-format
 msgid ""
 "\n"
@@ -5611,7 +5708,7 @@ msgstr ""
 "%u.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1135
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5620,17 +5717,17 @@ msgstr ""
 "Error de sintaxi en el fitxer de configuració del mke2fs (%s, línia no. %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1148 misc/tune2fs.c:1120
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "S'ha definit una opció del sistema de fitxers no vàlida: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1160 misc/tune2fs.c:411
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "S'ha establert una opció de muntatge no vàlida: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1296
 #, c-format
 msgid ""
 "\n"
@@ -5639,7 +5736,7 @@ msgstr ""
 "\n"
 "El vostre fitxer mke2fs.conf no defineix el tipus de sistema de fitxers %s.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1300
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5647,11 +5744,11 @@ msgstr ""
 "Segurament cal que instal·leu un fitxer mke2fs.conf actualitzat.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1304
 msgid "Aborting...\n"
 msgstr "S'interromp...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1345
 #, c-format
 msgid ""
 "\n"
@@ -5662,72 +5759,72 @@ msgstr ""
 "Avis: el fs_type %s no està definit a l'mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1527
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "No s'ha pogut assignar memòria per al nou CAMÍ.\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1564
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "El perfil no s'ha pogut inicialitzar correctament (error: %ld).\n"
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1597
 #, c-format
 msgid "invalid block size - %s"
 msgstr "mida de bloc no vàlida - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1601
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
 "Avís: la mida de bloc %d no es pot utilitzar a la majoria dels sistemes.\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1617
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "la mida del grup de sectors no és vàlida - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1630
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "«-R» ja no està suportada, feu servir «-E»"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1644 misc/tune2fs.c:1830
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "comportament d'error erroni - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1656
 msgid "Illegal number for blocks per group"
 msgstr "Nombre no vàlid per als blocs per grup"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1661
 msgid "blocks per group must be multiple of 8"
 msgstr "el nombre de blocs per grup ha de ser múltiple de 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1669
 msgid "Illegal number for flex_bg size"
 msgstr "Número no vàlid per a la mida de flex_bg"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1675
 msgid "flex_bg size must be a power of 2"
 msgstr "la mida de flex_bg ha de ser una potència de 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1680
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "la mida de flex_bg (%lu) ha de ser menor o igual a 2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1690
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "ràtio de nodes-i %s no vàlida (mín %d/màx %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1700
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "mida de node-i errònia - %s"
 
-#: misc/mke2fs.c:1684
+#: misc/mke2fs.c:1713
 msgid ""
 "Warning: -K option is deprecated and should not be used anymore. Use '-E "
 "nodiscard' extended option instead!\n"
@@ -5735,82 +5832,82 @@ msgstr ""
 "Avís: L'opció K ja no està suportada i no s'hauria de fer servir. Feu servir "
 "l'opció estesa «-E nodiscard»!\n"
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1724
 msgid "in malloc for bad_blocks_filename"
 msgstr "en malloc el bad_blocks_filename"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1733
 #, fuzzy, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr "Avís: l'etiqueta és massa llarga, es truncarà.\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1742
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "percentatge de blocs reservats no vàlid - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1757
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "nombre de nodes-i no vàlid - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1770
 #, fuzzy
 msgid "while allocating fs_feature string"
 msgstr "en assignar les memòries intermèdies"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1787
 #, c-format
 msgid "bad revision level - %s"
 msgstr "nivell de versió erroni - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1792
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "en provar de crear la versió %d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1806
 msgid "The -t option may only be used once"
 msgstr "L'opció -t només es pot especificar una vegada"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1814
 msgid "The -T option may only be used once"
 msgstr "L'opció -T només es pot especificar una vegada"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1870 misc/mke2fs.c:3215
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "en intentar obrir el dispositiu de registre de transaccions %s\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1876
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 "La mida de bloc del dispositiu de registre de transaccions (%d) és menor que "
 "la mida mínima de bloc %d\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1882
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr ""
 "Mida de bloc del dispositiu de registre de transaccions a utilitzar: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1893
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "nombre de blocs «%s» no vàlid al dispositiu «%s»"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1923
 msgid "filesystem"
 msgstr "sistema de fitxers"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1941 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "en intentar determinar la mida del sistema de fitxers"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1947
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5818,7 +5915,7 @@ msgstr ""
 "No s'ha pogut determinar la mida del dispositiu; hau d'especificar\n"
 "la mida del sistema de fitxers\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1954
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5831,44 +5928,49 @@ msgstr ""
 "\tser que hàgiu de reiniciar perquè es pugui tornar a llegir la taula de.\n"
 "\tparticions.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:1971
 msgid "Filesystem larger than apparent device size."
 msgstr ""
 "La mida del sistema de fitxers és més gran que la mida aparent del "
 "dispositiu."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:1991
 msgid "Failed to parse fs types list\n"
 msgstr "No s'ha pogut analitzar la llista de sistemes de fitxers\n"
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2040
 #, fuzzy
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "El Hurd no és compatible amb la característica de tipus de fitxer.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2045
 #, fuzzy
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "El Hurd no és compatible amb la característica de tipus de fitxer.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2050
 #, fuzzy
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "El Hurd no és compatible amb la característica de tipus de fitxer.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2055
+#, fuzzy
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "El Hurd no és compatible amb la característica de tipus de fitxer.\n"
+
+#: misc/mke2fs.c:2065
 msgid "while trying to determine hardware sector size"
 msgstr "en intentar determinar la mida del sector del maquinari"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2071
 msgid "while trying to determine physical sector size"
 msgstr "en intentar determinar la mida física del sector"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2103
 msgid "while setting blocksize; too small for device\n"
 msgstr "en establir la mida del bloc. Massa petita pel dispositiu\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
@@ -5876,7 +5978,7 @@ msgstr ""
 "Avís: la mida del bloc especificada %d és més petita que la mida física del "
 "sector del dispositiu %d\n"
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2132
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5886,7 +5988,7 @@ msgstr ""
 "la \n"
 "\ten 32 bits. S'utilitzarà una mida de bloc de %d.\n"
 
-#: misc/mke2fs.c:2098
+#: misc/mke2fs.c:2144
 #, fuzzy, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
@@ -5896,34 +5998,34 @@ msgstr ""
 "la \n"
 "\ten 32 bits. S'utilitzarà una mida de bloc de %d.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2166
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "Resolució del fs_types per mke2fs.conf: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2173
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 "Les característiques del sistema de fitxers no són compatibles amb sistemes "
 "de fitxers amb versió 0\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2181
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 "Els superblocs dispersos no són compatibles amb sistemes de fitxers amb "
 "versió 0\n"
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2191
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 "Els registres de transaccions no són compatibles amb sistemes de fitxers amb "
 "versió 0\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2204
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "percentatge de blocs reservats no vàlid - %lf"
 
-#: misc/mke2fs.c:2175
+#: misc/mke2fs.c:2221
 msgid ""
 "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
 "rectify.\n"
@@ -5931,29 +6033,29 @@ msgstr ""
 "«Extents» HA d'estar habilitat per sistemes de fitxers de 64 bits.  Indiqueu "
 "-O extents per rectificar-ho.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2241
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr ""
 "La mida del grup de sectors no hauria de ser més petita que la mida del "
 "bloc.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2247
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr ""
 "L'especificació de la mida del grup de sectors necessita la característica "
 "bigalloc"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2267
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "avís: No es pot obtenir la geometria del dispositiu de %s\n"
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2270
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "L'alineació de %s està desplaçada %lu bytes.\n"
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2272
 #, c-format
 msgid ""
 "This may result in very poor performance, (re)-partitioning suggested.\n"
@@ -5961,12 +6063,12 @@ msgstr ""
 "Això pot resultar en un funcionament molt pobre. Se suggereix (tornar a) fer "
 "les particions.\n"
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2293
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "Els blocs de %d-byte són massa grans pel sistema (màx %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2297
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
@@ -5974,14 +6076,14 @@ msgstr ""
 "Avís: Els blocs de %d-byte són massa grans pel sistema (màx %d), es força a "
 "continuar\n"
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2305
 #, c-format
 msgid ""
 "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
 "and journal checksum features.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2360
 #, c-format
 msgid ""
 "\n"
@@ -5991,13 +6093,18 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2375
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr ""
+
+#: misc/mke2fs.c:2397
 msgid "Can't support bigalloc feature without extents feature"
 msgstr ""
 "No es pot fer servir la característica bigalloc sense la característica "
 "«extents»"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2404
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -6005,7 +6112,7 @@ msgstr ""
 "Les característiques resize_inode i meta_bg no són compatibles.\n"
 "No es poden activar de manera simultània.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2412
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -6017,49 +6124,44 @@ msgstr ""
 "Vegeu https://ext4.wiki.kernel.org/index.php/Bigalloc per més informació\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2424
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "La funció reservada per redimensionar blocs en línia no està implementada "
 "per sistemes de fitxers no dispersos"
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2433
 msgid "blocks per group count out of range"
 msgstr "el nombre de blocs per grup està fora de l'interval permès"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2455
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 "La característica flex_bg no està habilitada, per la qual cosa no és permès "
 "especificar la mida de flex_bg"
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2467
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "mida de node-i no vàlida (%d) (mín %d/màx %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2482
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr ""
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2497
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "hi ha massa nodes-i (%llu), voleu incrementar-ne la ràtio?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2504
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr ""
 "hi ha massa nodes-i (%llu), hauríeu d'especificar-ne un nombre menor a 2^32"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2518
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -6070,70 +6172,76 @@ msgstr ""
 "\tun sistema de fitxers amb %llu blocs. Especifiqueu una inode_ratio (-i)\n"
 "\tmés gran o bé un nombre menor de nodes-i (-N).\n"
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2705
 msgid "Discarding device blocks: "
 msgstr "Es descarten els blocs del dispositiu: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2721
 msgid "failed - "
 msgstr "ha fallat - "
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2780
 #, fuzzy
 msgid "while initializing quota context"
 msgstr "en inicialitzar la ext2_qcow2_image"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2787
 #, fuzzy
 msgid "while writing quota inodes"
 msgstr "en escriure al node-i del registre de transaccions"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2812
 #, fuzzy, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "comportament d'error erroni - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2888
+#, fuzzy
+msgid "in malloc for android_sparse_params"
+msgstr "en malloc el bad_blocks_filename"
+
+#: misc/mke2fs.c:2902
 msgid "while setting up superblock"
 msgstr "en configurar el superbloc"
 
-#: misc/mke2fs.c:2849
+#: misc/mke2fs.c:2918
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Pass -O extents to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2856
+#: misc/mke2fs.c:2925
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr ""
+#: misc/mke2fs.c:2933
+#, fuzzy
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "El Hurd no és compatible amb la característica de tipus de fitxer.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:2957
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr ""
 "S'ha descartat correctament i es posaran 0s - se salta la neteja de la taula "
 "de nodes-i\n"
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3056
 #, c-format
 msgid "unknown os - %s"
 msgstr "sistema operatiu desconegut - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3119
 msgid "Allocating group tables: "
 msgstr "S'assignen les taules de grup: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3127
 msgid "while trying to allocate filesystem tables"
 msgstr "en intentar assignar les taules del sistema de fitxers"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3136
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6141,30 +6249,30 @@ msgstr ""
 "\n"
 "\ten convertir el mapa de bits del subgrup de sectors"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3142
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr ""
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3183
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "en escriure zeros al bloc %llu al final del sistema de fitxers"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3196
 msgid "while reserving blocks for online resize"
 msgstr "en reservar blocs per al canvi de mida en línia"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3208 misc/tune2fs.c:1538
 msgid "journal"
 msgstr "registre de transaccions"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3220
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Addició d'un registre de transaccions al dispositiu %s:"
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3227
 #, c-format
 msgid ""
 "\n"
@@ -6173,22 +6281,22 @@ msgstr ""
 "\n"
 "\ten intentar afegir un registre de transaccions al dispositiu %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3232 misc/mke2fs.c:3261 misc/mke2fs.c:3299
+#: misc/mk_hugefiles.c:598 misc/tune2fs.c:1567 misc/tune2fs.c:1586
 msgid "done\n"
 msgstr "fet\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3238
 msgid "Skipping journal creation in super-only mode\n"
 msgstr ""
 "Es salta la creació del registre de transaccions en el mode només súper\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3248
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Creació del registre de transaccions (%u blocs): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3257
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6196,7 +6304,7 @@ msgstr ""
 "\n"
 "\ten intentar crear el registre de transaccions"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3269 misc/tune2fs.c:1185
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
@@ -6205,41 +6313,37 @@ msgstr ""
 "S'ha produït un error en habilitar la característica de protecció de "
 "muntatge múltiple."
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3274
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 "S'ha habilitat la protecció de muntatge múltiple amb un interval "
 "d'actualització de %d segons.\n"
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3290
 #, fuzzy
 msgid "Copying files into the device: "
 msgstr ""
 "S'ha produït un error quan es buidaven les escriptures del dispositiu "
 "d'emmagatzemament: %m\n"
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3296
 #, fuzzy
 msgid "while populating file system"
 msgstr "en assignar la taula l1"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3303
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 "Escriptura de la informació dels superblocs i de comptabilitat del sistema "
 "de fitxers:"
 
-#: misc/mke2fs.c:3230
+#: misc/mke2fs.c:3310
 #, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Avís: hi ha hagut problemes en escriure els superblocs."
+msgid "while writing out and closing file system"
+msgstr "en escriure zeros al bloc %llu al final del sistema de fitxers"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3313
 msgid ""
 "done\n"
 "\n"
@@ -6247,29 +6351,34 @@ msgstr ""
 "fet\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
+#, fuzzy, c-format
+msgid "while zeroing block %llu for hugefile"
+msgstr "en escriure zeros al bloc %llu al final del sistema de fitxers"
+
+#: misc/mk_hugefiles.c:514
 #, c-format
 msgid ""
 "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:581
 msgid "Huge files will be zero'ed\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:582
 #, fuzzy, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "Es crea el fitxer normal %s\n"
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:584
 #, fuzzy, c-format
 msgid "with %llu blocks each"
 msgstr ""
 "avís: %llu blocs no utilitzats.\n"
 "\n"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:593
 #, fuzzy, c-format
 msgid "while creating huge file %lu"
 msgstr "mentre s'iterava sobre el node-i %u"
@@ -6314,23 +6423,29 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   inici=%8d mida=%8lu final=%8d\n"
 
 #: misc/tune2fs.c:119
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+
+#: misc/tune2fs.c:121
 #, fuzzy
 msgid "Please run e2fsck -f on the filesystem.\n"
 msgstr "Hauríeu d'executar l'e2fsck en el sistema de fitxers.\n"
 
-#: misc/tune2fs.c:121
+#: misc/tune2fs.c:123
 #, fuzzy
 msgid "Please run e2fsck -fD on the filesystem.\n"
 msgstr "Hauríeu d'executar l'e2fsck en el sistema de fitxers.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
@@ -6347,26 +6462,26 @@ msgstr ""
 "\t[-E opció_estesa[,...]] [-T últim_cop_comprovat] [-U UUID]\n"
 "\t[ -I nova_mida_node-i] dispositiu\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "No s'ha trobat el superbloc del registre de transaccions\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "en intentar obrir el registre de transaccions extern"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2845
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s no és un dispositiu de registre de transaccions.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:297 misc/tune2fs.c:2856
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
 "No s'ha trobat l'UUID del sistema de fitxers en el dispositiu del registre "
 "de transaccions.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:321
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6376,74 +6491,74 @@ msgstr ""
 "Feu servir l'opció -f per treure el dispositiu per al registre de "
 "transaccions que falta.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:330
 msgid "Journal removed\n"
 msgstr "S'ha suprimit el registre de transaccions\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:374
 msgid "while reading bitmaps"
 msgstr "en llegir els mapes de bits"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:382
 msgid "while clearing journal inode"
 msgstr "en netejar el node-i del registre de transaccions"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:393
 msgid "while writing journal inode"
 msgstr "en escriure al node-i del registre de transaccions"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:429 misc/tune2fs.c:452 misc/tune2fs.c:465
 msgid "(and reboot afterwards!)\n"
 msgstr "(i reinicieu després)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:480
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr ""
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:483
 #, fuzzy, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr ""
 "Executeu «e2fsck -f %s» primer.\n"
 "\n"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:487
 #, c-format
 msgid " -z \"%s\""
 msgstr ""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:489
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:491
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1087
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1123
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
 "La característica de neteja del sistema de fitxers «%s» no està "
 "implementada.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1129
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 "L'establiment de la característica del sistema de fitxers «%s» no està "
 "implementada.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1138
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6452,7 +6567,7 @@ msgstr ""
 "no\n"
 "està muntat, o bé està muntat en mode de només lectura.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1146
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6460,7 +6575,7 @@ msgstr ""
 "El senyalador needs_recovery està establert. Hauríeu d'executar l'e2fsck\n"
 "abans de netejar el senyalador has_journal.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1164
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
@@ -6469,7 +6584,7 @@ msgstr ""
 "està implementada\n"
 "per als sistemes de fitxers amb l'opció meta_bg habilitada\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1177
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6479,14 +6594,14 @@ msgstr ""
 "no es pot habilitar si el sistema de fitxers està muntat\n"
 "o és de només lectura.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1195
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 "S'ha habilitat la protecció contra muntatges múltiples amb un interval "
 "d'actualització de %ds.\n"
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1204
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6494,21 +6609,21 @@ msgstr ""
 "La protecció contra muntatges múltiples no es pot\n"
 "deshabilitar si el sistema de fitxers és de només lectura.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1212
 msgid "Error while reading bitmaps\n"
 msgstr "S'ha produït un en llegir els mapes de bits\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1221
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr ""
 "Els númeri màgic del bloc MMP no coincideix. S'esperava: %x, i és: %x\n"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1226
 msgid "while reading MMP block."
 msgstr "en llegir el bloc MMP."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1258
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
@@ -6516,7 +6631,7 @@ msgstr ""
 "Treure el senyalador flex_bg pot fer que el sistema de fitxers\n"
 "no sigui consistent.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1269
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6525,53 +6640,52 @@ msgstr ""
 "no\n"
 "està muntat, o bé està muntat en mode de només lectura.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1280
 msgid "Enabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1282
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1175
+#: misc/tune2fs.c:1288
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Re-run with -O extent to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1182
+#: misc/tune2fs.c:1295
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Run resize2fs -b to "
 "rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1321
 msgid "Disabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1323
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1386
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1396
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1426
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1447
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6579,7 +6693,7 @@ msgstr ""
 "\n"
 "Avís: L'opció «^quota» substitueix els arguments de «-Q».\n"
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1465
 #, fuzzy
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
@@ -6589,18 +6703,22 @@ msgstr ""
 "està implementada\n"
 "per als sistemes de fitxers amb l'opció meta_bg habilitada\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1483
 msgid ""
 "UUID has changed since enabling metadata_csum.  Filesystem must be "
 "unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1489
+msgid "Recalculating checksums could take some time."
+msgstr ""
+
+#: misc/tune2fs.c:1531
 msgid "The filesystem already has a journal.\n"
 msgstr "El sistema de fitxers ja té un registre de transaccions.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1551
 #, c-format
 msgid ""
 "\n"
@@ -6609,21 +6727,21 @@ msgstr ""
 "\n"
 "\ten intentar obrir el registre de transaccions a %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1555
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Creació del registre de transaccions al dispositiu %s:"
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1563
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "en afegir un sistema de fitxers al registre de transaccions a %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1569
 msgid "Creating journal inode: "
 msgstr "Creació del node-i del registre de transaccions:"
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1583
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6631,27 +6749,32 @@ msgstr ""
 "\n"
 "\ten intentar crear el fitxer del registre de transaccions"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1621
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1634
 #, fuzzy
 msgid "while initializing quota context in support library"
 msgstr "en inicialitzar el superbloc del registre de transaccions"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1649
 #, fuzzy, c-format
 msgid "while updating quota limits (%d)"
 msgstr "en actualitzar el node-i de block erronis"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1657
 #, fuzzy, c-format
 msgid "while writing quota file (%d)"
 msgstr "en escriure la taula dels nodes-i (grup %d)"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1675
 #, fuzzy, c-format
 msgid "while removing quota file (%d)"
 msgstr "en llegir la taula dels nodes-i (grup %d)"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1718
 #, fuzzy
 msgid ""
 "\n"
@@ -6674,65 +6797,65 @@ msgstr ""
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1776
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "No s'ha pogut analitzar l'especificador de data/hora: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1801 misc/tune2fs.c:1814
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "nombre de muntatges erroni - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1857
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "nom de grup/gid erroni - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1890
 #, c-format
 msgid "bad interval - %s"
 msgstr "interval erroni - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1919
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "ràtio de blocs reservats errònia - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1934
 msgid "-o may only be specified once"
 msgstr "-o només es pot especificar una vegada"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1943
 msgid "-O may only be specified once"
 msgstr "-O només es pot especificar una vegada"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "número de blocs reservats erroni - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1989
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "nom d'usuari/uid erroni - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:2006
 #, c-format
 msgid "bad inode size - %s"
 msgstr "mida del node-i errònia - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:2013
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "La mida del node-i ha de ser una potència de 2 - %s"
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2110
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "L'mmp_update_interval és massa gran: %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2115
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
 msgid_plural ""
@@ -6744,27 +6867,28 @@ msgstr[1] ""
 "S'estableix l'interval d'actualització de la protecció contra muntatges "
 "múltiples a %lu segons\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2138
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "L'stride del RAID no és vàlid: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2153
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "L'stripe-width del RAID no és vàlid: %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2168
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Algorisme de resum no vàlid: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2174
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Establiment de l'algorisme de resum predeterminat a %s (%d)\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2193
+#, fuzzy
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6776,6 +6900,7 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
 "\ttest_fs\n"
@@ -6795,32 +6920,32 @@ msgstr ""
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2663
 msgid "Failed to read inode bitmap\n"
 msgstr "No s'ha pogut llegit el mapa de bits del node-i\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2668
 msgid "Failed to read block bitmap\n"
 msgstr "No s'ha pogut llegit el mapa de bits del bloc\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2685 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "blocs a moure"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2688
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr ""
 "No s'ha pogut assignar el mapa de bits del bloc en fer més gran el node-i\n"
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2694
 msgid "Not enough space to increase inode size \n"
 msgstr "No hi ha prou espai per fer més gran el node-i\n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2699
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "No s'ha pogut reubicar els blocs en canviar la mida de node-i\n"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2731
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6828,7 +6953,16 @@ msgstr ""
 "S'ha produït un error en canviar la mida del node-i.\n"
 "Executeu l'e2undo per a desfer els canvis al sistema de fitxers. \n"
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2936
+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 esteu segur que el sistema de fitxers no s'està fent servir a cap node, "
+"executeu:\n"
+"'tune2fs -f -E clear_mmp {dispositiu}'\n"
+
+#: misc/tune2fs.c:2943
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
@@ -6837,75 +6971,91 @@ msgstr ""
 "El bloc màgic MMP està malament. Proveu d'arreglar-lo fent servir:\n"
 "'e2fsck -f %s'\n"
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2955
 #, fuzzy
 msgid "Cannot modify a journal device.\n"
 msgstr "%s no és un dispositiu de registre de transaccions.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2968
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "La mida del node-i ja és %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2975
 msgid "Shrinking inode size is not supported\n"
 msgstr "La reducció de la mida del node-i no està implementada\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2980
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "La mida del node-i no és vàlida %lu (màx %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2986
 msgid "Resizing inodes could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3034
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+
+#: misc/tune2fs.c:3045
+#, fuzzy, c-format
+msgid "Recovering journal.\n"
+msgstr "%s: recuperació del registre de transaccions\n"
+
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Establiment del nombre màxim de muntatges a %d\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Establiment del nombre de muntatges actual a %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3074
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Establiment del comportament d'error a %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3079
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Establiment del GID dels blocs reservats a %lu\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3084
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "L'interval entre comprovacions és massa gran (%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3091
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Establiment de l'interval entre comprovacions a %lu segons\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3098
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "S'estableix el percentatge de blocs reservats a %g%% (%llu blocs)\n"
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3104
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "el contador de blocs reservats és massa gran (%llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3111
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "S'estableix el contador de blocs reservats a %llu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3116
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6913,7 +7063,7 @@ msgstr ""
 "\n"
 "El sistema de fitxers ja té superblocs dispersos.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3119
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6923,7 +7073,7 @@ msgstr ""
 "L'establiment del senyalador de superbloc dispers no està implementat\n"
 "pels sistemes de fitxers amb la característica meta_bg  habilitada.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3129
 #, c-format
 msgid ""
 "\n"
@@ -6932,7 +7082,7 @@ msgstr ""
 "\n"
 "S'ha establert el senyalador de superbloc dispers. %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3134
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6940,58 +7090,58 @@ msgstr ""
 "\n"
 "La neteja del senyalador de superbloc dispers no està implementada.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3142
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Establiment de la darrera comprovació del sistema de fitxers a %s\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3148
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Establiment de l'UID dels blocs reservats a %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3180
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr ""
 "S'ha produït un error en fer servir clear_mmp. S'ha de fer servir amb -f\n"
 
-#: misc/tune2fs.c:3024
+#: misc/tune2fs.c:3198
 msgid ""
 "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "La característica quota s'ha de canviar només quan el sistema de fitxers "
 "està desmuntat.\n"
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3222
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "L'UUID s'ha de canviar només quan el sistema de fitxers està desmuntat.\n"
 
-#: misc/tune2fs.c:3051
+#: misc/tune2fs.c:3225
 msgid ""
 "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
 "and re-run this command.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3060
+#: misc/tune2fs.c:3234
 msgid "Setting UUID on a checksummed filesystem could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3259
 msgid "Invalid UUID format\n"
 msgstr "El format de l'UUID no és vàlid\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3275
 msgid "Need to update journal superblock.\n"
 msgstr "S'ha d'actualitzar el registre de transaccions\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3301
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "La mida del node-i només es pot canviar quan el sistema de fitxers està "
 "desmuntat.\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3308
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -6999,53 +7149,37 @@ msgstr ""
 "No està implementat el canvi de mida del node-i en sistemes de fitxers\n"
 "amb la característica flex_bg habilitada.\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3326
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "S'estableix la mida de node-i a %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3330
 msgid "Failed to change inode size\n"
 msgstr "No s'ha pogut canviar la mida del node-i\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3344
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "S'estableix la mida de l'stride a %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3349
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "S'estableix l'amplada de l'stride a %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3356
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "S'estableix les opcions esteses de muntatge per defecte «%s»\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, fuzzy, c-format
-msgid "Recovering journal.\n"
-msgstr "%s: recuperació del registre de transaccions\n"
-
 #: misc/util.c:100
 msgid "<proceeding>\n"
 msgstr "<continuar>\n"
 
 #: misc/util.c:104
 #, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
 msgstr "Voleu continuar de totes maneres (o esperar %d segons) ? (s,n)"
 
 #: misc/util.c:108
@@ -7300,43 +7434,43 @@ msgstr "#\tNúm=%llu, Mida=%llu, Cursor=%llu, Ordenat=%llu\n"
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"[-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
 "Forma d'ús: %s [-d senyaladors_de_depuració] [-f] [-F] [-M] [-P] [-p] "
 "dispositiu [mida nova]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Ampliació de la taula de nodes-i"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Reubicació dels blocs"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Escaneig de la taula de nodes-i"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Actualització de les referències dels nodes-i"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Trasllat de la taula de nodes-i"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Pas desconegut!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Inici del pas %d (màx = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7350,17 +7484,17 @@ msgstr ""
 "maneres.\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "en obrir %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "eon obtenir la informació d'«stat» per a %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7369,30 +7503,30 @@ msgstr ""
 "Executeu «e2fsck -f %s» primer.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Mida mínima estimada del sistema de fitxers: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "La mida nova no és vàlida: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "La mida nova és massa gran per ser expressada en 32 bits\n"
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "La mida nova és inferior al mínim (%llu)\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "La longitud del stride no és vàlida"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7404,33 +7538,33 @@ msgstr ""
 "N'heu requerit una mida nova de %llu blocs.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr ""
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
 msgid ""
 "Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
 "blocks.\n"
 msgstr ""
 
-#: resize/main.c:575
+#: resize/main.c:581
 #, fuzzy, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr ""
 "La característica quota s'ha de canviar només quan el sistema de fitxers "
 "està desmuntat.\n"
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
 msgid ""
 "Please enable the extents feature with tune2fs before enabling the 64bit "
 "feature.\n"
 msgstr ""
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
@@ -7440,39 +7574,39 @@ msgstr ""
 "res!\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, fuzzy, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "El sistema de fitxers ja té un registre de transaccions.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, fuzzy, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "El sistema de fitxers ja té un registre de transaccions.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, fuzzy, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "Establiment de la darrera comprovació del sistema de fitxers a %s\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, fuzzy, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "Establiment de la darrera comprovació del sistema de fitxers a %s\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr ""
 "Es canvia la mida del sistema de fitxers que hi ha a %s a %llu (%dk) blocs.\n"
 "\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "en intentar redimensionar %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7481,7 +7615,7 @@ msgstr ""
 "Executeu «e2fsck -fy %s» per arreglar el sistema de fitxers\n"
 "després d'interrompre la operació de canvi de mida.\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7490,7 +7624,7 @@ msgstr ""
 "El sistema de fitxers a %s té ara una llargària de %llu (%dk) blocs.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "en intentar truncar %s"
@@ -7555,12 +7689,12 @@ msgstr "Es realitza un canvi de mida en línia de %s a %llu (%dk) blocs.\n"
 msgid "While trying to extend the last group"
 msgstr "En intentar ampliar el darrer grup"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "En intentar afegir el grup #%d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
 msgid ""
 "Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
@@ -7570,38 +7704,38 @@ msgstr ""
 "compatible amb el canvi de mida en línia.\n"
 
 #: resize/resize2fs.c:759
-#, c-format
-msgid "inodes (%llu) must be less than %u"
+#, fuzzy, c-format
+msgid "inodes (%llu) must be less than %u\n"
 msgstr "el nombre de nodes-i (%llu) ha de ser menor que %u"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "blocs reservats"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "blocs de metadades"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2475
 msgid "new meta blocks"
 msgstr "nous blocs de metadades"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2698
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr "No hauria de passar mai!  No hi ha sb al darrer super_sparse bg?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2703
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr "No hauria de passar mai!  old_desc inesperat al super_sparse bg?\n"
 
 # FIXME: (dpm)
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2776
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Això no hauria de passar mai: canvi de mida del node-i malmesa\n"
 
 #: lib/ext2fs/ext2_err.c:11
 #, fuzzy
-msgid "EXT2FS Library version 1.43.4-WIP"
+msgid "EXT2FS Library version 1.44.4"
 msgstr "Versió 1.42.12 de la llibreria EXT2FS"
 
 #: lib/ext2fs/ext2_err.c:12
@@ -8196,7 +8330,8 @@ msgid "MMP: device currently active"
 msgstr "MMP: dispositiu actualment actiu"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
+#, fuzzy
+msgid "MMP: e2fsck being run"
 msgstr "MMP: s'està executant el fsck"
 
 #: lib/ext2fs/ext2_err.c:152
@@ -8258,7 +8393,8 @@ msgid "Unknown checksum algorithm"
 msgstr "L'algorisme de la suma de verificació és desconegut"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
+#, fuzzy
+msgid "MMP block checksum does not match"
 msgstr "La suma de verificació del bloc MMP no coincideix amb el bloc MMP"
 
 #: lib/ext2fs/ext2_err.c:166
@@ -8368,6 +8504,10 @@ msgstr "El superbloc d'ext2 està corromput"
 msgid "Inode is corrupted"
 msgstr "El canvi de mida del node-i està corromput"
 
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
+
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
 msgstr "Versió 0.0 del perfil"
@@ -8561,6 +8701,24 @@ msgstr "%s conté un sistema de fitxers %s\n"
 msgid "%s contains `%s' data\n"
 msgstr "%s conté un sistema de fitxers %s\n"
 
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %s: s'ha produït un error en llegir els mapes de bits: %s\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Avís: hi ha hagut problemes en escriure els superblocs."
+
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "L'i_dir_acl @F %Id, @s zero.\n"
+
 #~ msgid "@i %i has @cion flag set on @f without @cion support.  "
 #~ msgstr ""
 #~ "El @i %i té el senyalador de @c definit en un @f que no és compatible amb "
@@ -8585,6 +8743,44 @@ msgstr "%s conté un sistema de fitxers %s\n"
 #~ msgid ", unused inodes %u\n"
 #~ msgstr ", %u nodes-i no utilitzats\n"
 
+#~ msgid "Journal features:        "
+#~ msgstr "Característiques del registre de transaccions:       "
+
+#~ msgid "Journal size:             "
+#~ msgstr "Mida del registre de transaccions:              "
+
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "Llargada del reg. de trans.:          %u\n"
+#~ "Seqüència del reg. de trans.:         0x%08x\n"
+#~ "Inici del registre de trans.:         %u\n"
+
+#~ msgid "Journal errno:            %d\n"
+#~ msgstr "Número d'error del regi. de trans.:       %d\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Mida de bloc del reg. de trans.:      %u\n"
+#~ "Llargada del reg. de trans.:          %u\n"
+#~ "Primer bloc del reg. de trans.:       %u\n"
+#~ "Seqüència del reg. de trans.:         0x%08x\n"
+#~ "Inici del registre de trans.:         %u\n"
+#~ "Nombre d'usuaris del reg. de trans.:  %u\n"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "Usuaris del registre de trans.:       %s\n"
+
 #~ msgid "Failed to read the file system data \n"
 #~ msgstr "No s'han pogut llegir les dades del sistema de fitxers \n"
 
@@ -8672,9 +8868,5 @@ msgstr "%s conté un sistema de fitxers %s\n"
 #~ msgid "while calling iterator function"
 #~ msgstr "en fer la crida a la funció d'iteració"
 
-#~ msgid "%s: Filesystem byte order already normalized.\n"
-#~ msgstr ""
-#~ "%s: l'ordre dels bytes del sistema de fitxers ja està normalitzat.\n"
-
 #~ msgid "invalid starting block - %s"
 #~ msgstr "bloc d'inici no vàlid - %s"
index 05de756..3a73e4e 100644 (file)
Binary files a/po/cs.gmo and b/po/cs.gmo differ
index 14f8964..7fad882 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -3,7 +3,11 @@
 # This file is distributed under the same license as the e2fsprogs package.
 # Miloslav Trmac <mitr@volny.cz>, 2003.
 # Petr Pisar <petr.pisar@atlas.cz>, 2008, 2009, 2010, 2011, 2012, 2013, 2014.
-# Petr Pisar <petr.pisar@atlas.cz>, 2016.
+# Petr Pisar <petr.pisar@atlas.cz>, 2016, 2017, 2018, 2019.
+#
+# %i, %b, %N in e2fsck/problem.c do not support positional ordering (%2$i).
+# But they can be freely reordered because those are extracted from a context,
+# not from the separate positional arguments.
 #
 #. 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,
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -49,7 +60,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.43.1\n"
+"Project-Id-Version: e2fsprogs 1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2016-10-14 20:17+02:00\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2019-07-20 16:26+02:00\n"
 "Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
 "Language: cs\n"
@@ -82,7 +93,7 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Špatný blok %u mimo rozsah; ignorován.\n"
@@ -95,11 +106,12 @@ msgstr "při kontrole správnosti iuzlu špatných bloků"
 msgid "while reading the bad blocks inode"
 msgstr "při čtení iuzlu špatných bloků"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "při pokusu otevřít %s"
@@ -109,7 +121,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:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "při načítání seznamu špatných bloků ze souboru"
 
@@ -120,8 +132,11 @@ msgstr "při aktualizaci iuzlu špatných bloků"
 #: e2fsck/badblocks.c:133
 #, 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/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "při uvolňování TDB souboru dir_info"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -200,12 +215,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:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "při otevírání %s pro synchronizaci"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "při pokusu synchronizovat %s"
@@ -215,11 +230,11 @@ msgstr "při pokusu synchronizovat %s"
 msgid "while trying to open '%s'"
 msgstr "při pokusu otevřít „%s“"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr "při zahájení průchodu iuzly"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr "při získávání dalšího iuzlu"
 
@@ -228,364 +243,389 @@ msgstr "při získávání dalšího iuzlu"
 msgid "%u inodes scanned.\n"
 msgstr "prozkoumáno %u iuzlů.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "čtení superbloku žurnálu\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: nenalezen platný superblok žurnálu\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: žurnál příliš krátký\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: obnovuje se žurnál\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: v režimu jen pro čtení se žurnál obnovovat nebude\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "při pokusu znovu otevřít %s"
 
 # These shortcuts are a nightmare.
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "arozšířený atribut"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Achyba při alokaci"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bblok"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bbitmap"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "ckomprimovat"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Ckoliduje s jiným blokem systému souborů"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "dadresář"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Dodstraněn"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "epoložka"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "Epoložka „%Dn“ v %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "fsystém souborů"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fpro inode %i (%Q) je"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "gskupin"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "hiuzel HTREE adresáře"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "iinode"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Inepovolen"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jžurnál"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Lje odkaz"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mvíce krát alokováno"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "nneplatný"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oosiřel"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pproblém v"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qkvóta"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "rkořenový iuzel"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "smělo by být"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssuperblok"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "unepřipojen"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vzařízení"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xrozsah"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "znulové délky"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<Iuzel NULL>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<Iuzel špatných bloků>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<Iuzel kvóty uživatelů>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<Iuzel kvóty skupin>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<Iuzel zavaděče systému>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<Iuzel adresáře undelete>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<Iuzel deskriptoru skupiny>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<Iuzel žurnálu>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Rezervovaný iuzel 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Rezervovaný iuzel 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "obyčejný soubor"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "adresář"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "znakové zařízení"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "blokové zařízení"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "pojmenovaná roura"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "symbolický odkaz"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "soket"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "neznámý druh souboru o módu 0%o"
 
 # Expansion of %B in singular nominativ
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "nepřímý blok"
 
 # Expansion of %B in singular nominativ
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "dvojnásobně nepřímý blok"
 
 # Expansion of %B in singular nominativ
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "trojnásobně nepřímý blok"
 
 # Expansion of %B in singular nominativ
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "překladový blok"
 
 # Expansion of %B in singular nominativ
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "blok č."
 
+# user quota
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "uživatele"
+
+# group quota
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "skupiny"
+
+# project quota
+#: e2fsck/message.c:488
+msgid "project"
+msgstr "projektu"
+
+# unknown quota type quota
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "neznámého druhu"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "mapa několikrát alokovaných iuzlů"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "vnitřní chyba: nemohu najít dup_blk pro %llu\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "vrácený z clone_file_block"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr "Vnitřní chyba: nemohu najít záznam EA bloku pro %llu"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "Vnitřní chyba: nemohu najít záznam EA iuzlu pro %u"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr "při výpočtu hashe položky s e_value_inum = %u"
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 msgid "reading directory block"
 msgstr "čtení adresářového bloku"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 msgid "in-use inode map"
 msgstr "mapa používaných iuzlů"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 msgid "directory inode map"
 msgstr "mapa iuzlů adresářů"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 msgid "regular file inode map"
 msgstr "mapa iuzlů obyčejných souborů"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr "mapa používaných bloků"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1263
 msgid "metadata block map"
 msgstr "mapa bloků metadat"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 msgid "opening inode scan"
 msgstr "otevírání průzkumu iuzlů"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr "získávání dalšího iuzlu z průzkumu"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 msgid "Pass 1"
 msgstr "Průchod 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "čtu nepřímé bloky iuzlu %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 msgid "bad inode map"
 msgstr "mapa špatných iuzlů"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 msgid "inode in bad block map"
 msgstr "iuzel v mapě špatných bloků"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 msgid "imagic inode map"
 msgstr "mapa imagic iuzlů"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr "mapa několikrát alokovaných bloků"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr "mapa bloků rozšířených atributů"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu(%c): očekáváno %6lu, obdrženo fyz. %6lu (bloků %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 msgid "block bitmap"
 msgstr "bitmapa bloků"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 msgid "inode bitmap"
 msgstr "bitmapa iuzlů"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 msgid "inode table"
 msgstr "tabulka iuzlů"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Průchod 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 msgid "Can not continue."
 msgstr "Nemohu pokračovat."
 
@@ -605,195 +645,203 @@ msgstr "Průchod 3"
 msgid "inode loop detection bitmap"
 msgstr "bitmapa detekce cyklů iuzlů"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Průchod 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Průchod 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr "check_inode_bitmap_checksum: Chyba při alokaci paměti"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr "check_block_bitmap_checksum: Chyba při alokaci paměti"
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 msgid "(no prompt)"
 msgstr "(žádná výzva)"
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 msgid "Fix"
 msgstr "Opravit"
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:54
 msgid "Clear"
 msgstr "Vymazat"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr "Přemístit"
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
 msgid "Allocate"
 msgstr "Alokovat"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 msgid "Expand"
 msgstr "Zvětšit"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 msgid "Connect to /lost+found"
 msgstr "Připojit do /lost+found"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 msgid "Create"
 msgstr "Vytvořit"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr "Zachránit"
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
 msgid "Truncate"
 msgstr "Useknout"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 msgid "Clear inode"
 msgstr "Vyčistit iuzel"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 msgid "Abort"
 msgstr "Přerušit"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 msgid "Split"
 msgstr "Rozdělit"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 msgid "Continue"
 msgstr "Pokračovat"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr "Klonovat více krát alokované bloky"
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 msgid "Delete file"
 msgstr "Odstranit soubor"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 msgid "Suppress messages"
 msgstr "Potlačit zprávy"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
 msgid "Unlink"
 msgstr "Odstranit odkaz"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 msgid "Clear HTree index"
 msgstr "Vymazat index HTree"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 msgid "Recreate"
 msgstr "Znovu vytvořit"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr "Optimalizovat"
+
+#: e2fsck/problem.c:81
 msgid "(NONE)"
 msgstr "(ŽÁDNÝ)"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 msgid "FIXED"
 msgstr "OPRAVENO"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 msgid "CLEARED"
 msgstr "VYMAZÁNO"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr "PŘEMÍSTĚNO"
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 msgid "ALLOCATED"
 msgstr "ALOKOVÁNO"
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr "ZVĚTŠENO"
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr "PŘIPOJENO"
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 msgid "CREATED"
 msgstr "VYTVOŘENO"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr "ZACHRÁNĚNO"
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
 msgid "TRUNCATED"
 msgstr "USEKNUTO"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 msgid "INODE CLEARED"
 msgstr "INODE VYMAZÁNA"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 msgid "ABORTED"
 msgstr "PŘERUŠENO"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 msgid "SPLIT"
 msgstr "ROZDĚLENO"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr "POKRAČUJI"
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr "VÍCE KRÁT ALOKOVANÉ BLOKU NAKLONOVÁNY"
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 msgid "FILE DELETED"
 msgstr "SOUBOR ODSTRANĚN"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr "POTLAČENO"
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr "ODKAZ ODSTRANĚN"
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 msgid "HTREE INDEX CLEARED"
 msgstr "INDEX HTREE VYMAZÁN"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 msgid "WILL RECREATE"
 msgstr "BUDE ZNOVU VYTVOŘENO"
 
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr "BUDE SE OPTIMALIZOVAT"
+
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:115
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "Bitmapa bloků pro skupinu %g není ve skupině. (blok %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:119
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "Bitmapa iuzlů pro skupinu %g není ve skupině. (blok %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -810,7 +858,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -835,7 +883,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -848,7 +896,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -859,18 +907,18 @@ msgstr ""
 "od velikosti bloku.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "V superbloku blocks_per_group = %b, mělo by být %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "V superbloku first_data_block = %b, mělo by být %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -878,8 +926,8 @@ msgstr ""
 "Systém souborů neměl UUID; generuji je.\n"
 "\n"
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -897,48 +945,48 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "V superbloku nalezeno poškození. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:186
+#, no-c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Chyba při zjišťování velikosti fyzického zařízení: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:191
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "Počet iuzlů v superbloku je %i, měl by být %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd nepodporuje vlastnost filetype.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:201
+#, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "Superblok má neplatný žurnál (iuzel %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr "Externí žurnál používá více systémů souborů (nepodporováno).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:211
 msgid "Can't find external @j\n"
 msgstr "Nemohu nalézt externí žurnál\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 msgid "External @j has bad @S\n"
 msgstr "Externí žurnál má špatný superblok\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 msgid "External @j does not support this @f\n"
 msgstr "Externí žurnál nepodporuje tento systém souborů\n"
 
@@ -946,104 +994,92 @@ msgstr "Externí žurnál nepodporuje tento systém souborů\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:235
 msgid "@j @S is corrupt.\n"
 msgstr "Superblok žurnálu je poškozen.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
-msgstr ""
-"Příznak superbloku has_journal (má_žurnál) není nastaven, avšak žurnál je "
-"přítomen.\n"
+msgstr "Příznak superbloku has_journal (má_žurnál) není nastaven, avšak žurnál je přítomen.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 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:241
+#: e2fsck/problem.c:250
 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:246
+#: e2fsck/problem.c:255
 msgid "Clear @j"
 msgstr "Vymazat žurnál"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 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:256
+#: e2fsck/problem.c:265
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s osiřelý iuzel %i (uid=%Iu, gid=%Ig, práva=%Im, velikost=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:270
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "Neplatný %B (%b) nalezen v osiřelém iuzlu %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:275
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Již vymazaný %B (%b) nalezen v osiřelém iuzlu %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:281
+#, no-c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "V superbloku neplatný osiřelý iuzel %i.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:287
+#, no-c-format
 msgid "@I @i %i in @o @i list.\n"
 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:281
+#: e2fsck/problem.c:292
 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:286
+#: e2fsck/problem.c:297
 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:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Verze žurnálu nepodporována tímto e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:308
+#, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1053,8 +1089,8 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:314
+#, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1065,7 +1101,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1076,20 +1112,18 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 msgid "Run @j anyway"
 msgstr "Přesto spustit žurnál"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 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
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1099,7 +1133,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1108,18 +1142,18 @@ msgstr ""
 "ale s_reserved_gdt_blocks je %N, ačkoliv by mělo být nula."
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr "Resize_inode není zapnuto, avšak iuzel pro měnění velikosti není nula."
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:352
 msgid "Resize @i not valid.  "
 msgstr "Iuzel na měnění velikosti není platný. "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1129,7 +1163,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1138,14 +1172,14 @@ msgstr ""
 "\tnyní = %T) leží v budoucnosti.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:368
+#, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "Nápověda superbloku pro externí superblok by měla být %X. "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1154,269 +1188,274 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "Kontrolní součet deskriptoru skupiny %g je %04x, měl by být %04y. "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-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:372
+#: e2fsck/problem.c:389
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr "Deskriptor skupiny %g má neplatný počet nepoužitých bloků %b. "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:394
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Poslední bitmapa bloků skupiny není inicializována.  "
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "Transakce žurnálu %i byla poškozena, přehrání bylo zrušeno.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:405
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "Příznak test_fs je nastaven (a ext4 je dostupný). "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "Čas posledního připojení superbloku leží v budoucnosti.\n"
-"\t(rozdíl menší než den, pravděpodobně jsou chybně nastaveny hardwarové "
-"hodiny)\n"
+"\t(rozdíl menší než den, pravděpodobně jsou chybně nastaveny hardwarové hodiny)\n"
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "Čas posledního zápisu superbloku leží v budoucnosti.\n"
-"\t(rozdíl menší než den, pravděpodobně jsou chybně nastaveny hardwarové "
-"hodiny)\n"
+"\t(rozdíl menší než den, pravděpodobně jsou chybně nastaveny hardwarové hodiny)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 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:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Nastavuje se počet volných iuzlů na %j (byl %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Nastavuje se počet volných bloků na %c (byl %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr "Iuzel kvóty %i (%Q) se označuje jako skrytý.\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "Iuzel %i kvóty %U (%Q) se označuje jako skrytý.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 msgid "@S has invalid MMP block.  "
 msgstr "Superblok má špatný blok MMP.  "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
 msgid "@S has invalid MMP magic.  "
 msgstr "Superblok má neplatná čísla MMP.  "
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:453
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2: %m\n"
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:459
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
-msgstr ""
-"metadata_csum superbloku nahrazuje uninit_bg, oba bity vlastností nemohou "
-"být nastaveny zároveň."
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "metadata_csum superbloku nahrazuje uninit_bg, oba bity vlastností nemohou být nastaveny zároveň."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "Kontrolní součet bloku superbloku MMP neodpovídá bloku MMP. "
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+msgid "@S MMP @b checksum does not match.  "
+msgstr "Kontrolní součet bloku superbloku MMP neodpovídá. "
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
-msgstr ""
-"Superblok 64bitových souborových systémů potřebuje rozsahy, aby bylo možné "
-"přistoupit na celý disk. "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
+msgstr "Superblok 64bitových souborových systémů potřebuje rozsahy, aby bylo možné přistoupit na celý disk. "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "First_meta_bg je příliš velký. (%N, maximální hodnota %g). "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:486
 msgid "External @j @S checksum does not match @S.  "
 msgstr "Kontrolní součet superbloku externího žurnálu neodpovídá superbloku. "
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr "metadata_csum_seed superbloku není bez metadata_csum potřeba."
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr "Chyba při inicializaci kontextu kvót v podpůrné knihovně: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Špatná vyžadovaná extra velikost iuzlu v superbloku (%N)."
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Špatná vytoužená extra velikost iuzlu v superbloku (%N)."
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "Neplatný iuzel %i kvóty %U. "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr "Superblok by měl příliš mnoho iuzlů (%N).\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
+"Vlastnosti resize_inode a meta_bg jsou zapnuty. Tyto vlastnosti se vylučují.\n"
+"Měnění velikosti iuzlu bude vypnuto. "
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Průchod 1: Kontrolují se iuzly, bloky a velikosti\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 msgid "@r is not a @d.  "
 msgstr "Kořenový iuzel není adresář. "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "Kořenový iuzel má nastaven dtime (možná kvůli starém mke2fs). "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:544
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Rezervovaný iuzel %i (%Q) má špatný mód. "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:550
+#, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "Odstraněný iuzel %i má nulový dtime. "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "Iuzel %i se používá, ale má nastaven dtime. "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:562
+#, no-c-format
 msgid "@i %i is a @z @d.  "
 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:528
+#: e2fsck/problem.c:567
 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:533
+#: e2fsck/problem.c:572
 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:538
+#: e2fsck/problem.c:577
 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:543
+#: e2fsck/problem.c:582
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "Bitmapa bloků skupiny %g (%b) je špatná. "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "Bitmapa iuzlů skupiny %g (%b) je špatná. "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "V iuzlu %i je i_size %Is, měla by být %N. "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "V iuzlu %i je i_blocks %Ib, mělo by být %N. "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in @i %i.  "
 msgstr "Neplatný %B (%b) v iuzlu %i. "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B (%b) se překrývá s metadaty systému souborů v iuzlu %i. "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:613
+#, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "Iuzel %i má neplatný blok(y). "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Příliš mnoho neplatných bloků v iuzlu %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "Neplatný %B (%b) v iuzlu špatných bloků. "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "Iuzel špatných bloků má neplatný blok(y). "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Používá se duplikátní nebo špatný blok!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "Špatný blok %b používán jako nepřímý blok špatných bloků. "
 
@@ -1424,7 +1463,7 @@ msgstr "Špatný blok %b používán jako nepřímý blok špatných bloků. "
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1437,7 +1476,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1448,7 +1487,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1459,129 +1498,123 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 msgid "The primary @S (%b) is on the bad @b list.\n"
 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:626
+#: e2fsck/problem.c:667
 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:632
+#: e2fsck/problem.c:673
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 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:637
+#: e2fsck/problem.c:679
 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:643
+#: e2fsck/problem.c:685
 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:649
+#: e2fsck/problem.c:691
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "Chyba při alokaci %N souvislých bloků ve skupině bloků %g pro %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
-#, c-format
+#: e2fsck/problem.c:697
+#, no-c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "Chyba při alokaci vyrovnávací paměti bloků pro přemístění %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:702
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Přemísťuji %s skupiny %g z %b do %c…\n"
 
 # FIXME: no-c-format so that I can reorder it properly
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
-#, c-format
+#: e2fsck/problem.c:708
+#, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Přemísťuji skupiny %g %s do %c…\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Varování: nemohu načíst blok %s %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:718
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Varování: nemohu zapsat blok %b pro %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
 msgstr "Chyba při alokaci bitmapy iuzlů (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
 msgstr "Chyba při alokaci bitmapy bloků (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:734
+#, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "Chyba při alokaci informací odkazů icount: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:740
+#, no-c-format
 msgid "@A @d @b array: %m\n"
 msgstr "Chyba při alokaci pole bloků adresáře: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:746
+#, no-c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Chyba při zkoumání iuzlů (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 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:709
+#: e2fsck/problem.c:757
 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:714
+#: e2fsck/problem.c:762
 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:720
-#, c-format
+#: e2fsck/problem.c:769
+#, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Chyba při čtení iuzlu %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "Iuzel %i má nastaven příznak imagic. "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
@@ -1590,148 +1623,143 @@ msgstr ""
 "má nastaven příznak immutable nebo append-only. "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Speciální (zařízení/socket/fifo) iuzel %i má nenulovou délku. "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
 msgid "@j @i is not in use, but contains data.  "
 msgstr "Iuzel žurnálu se nepoužívá, ale obsahuje data. "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 msgid "@j is not regular file.  "
 msgstr "Žurnál není obyčejný soubor. "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:812
+#, no-c-format
 msgid "@i %i was part of the @o @i list.  "
 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:765
+#: e2fsck/problem.c:818
 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:770
+#: e2fsck/problem.c:823
 msgid "@A refcount structure (%N): %m\n"
 msgstr "Chyba při alokaci struktury refcount (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:828
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Chyba při čtení bloku rozšířených atributů %b pro iuzel %i. "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:833
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "Iuzel %i má špatný blok rozšířených atributů %b. "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Chyba při čtení bloku rozšířených atributů %b (%m). "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:843
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "Blok rozšířených atributů %b má počet odkazů %r, měl by být %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:848
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Chyba při zápisu bloku rozšířených atributů %b (%m). "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:853
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "Blok rozšířených atributů %b má h_blocks > 1. "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:858
 msgid "@A @a region allocation structure.  "
 msgstr "Chyba při alokaci struktury pro alokaci oblasti rozšířených atributů. "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "Blok rozšířených atributů %b je poškozen (kolize alokace). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:868
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "Blok rozšířených atributů %b je poškozen (neplatný název). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "Blok rozšířených atributů %b je poškozen (neplatná hodnota). "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:879
+#, no-c-format
 msgid "@i %i is too big.  "
 msgstr "Iuzel %i je příliš velká. "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B (%b) způsobuje, že adresář je příliš velký. "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr "%B (%b) způsobuje, že soubor je příliš velký. "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "%B (%b) způsobuje, že symbolický odkaz je příliš velký. "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-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:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "Iuzel %i má nastaven příznak INDEX_FL, ale není adresář.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:911
+#, no-c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "Iuzel HTREE adresáře %i má neplatný kořenový uzel.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:916
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "Iuzel HTREE adresáře %i má nepodporovanou verzi hashe (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-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:869
+#: e2fsck/problem.c:927
 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.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1740,59 +1768,55 @@ msgstr ""
 "souborového systému. "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "(Znovu) vytvoření iuzlu pro změny velikosti selhalo: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "Iuzel %i má velikost navíc (%IS), která není platná\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:950
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "Rozšířený atribut v iuzlu %i má délku jména (%N), která není platná\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:955
 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:900
+#: e2fsck/problem.c:960
 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:905
+#: e2fsck/problem.c:965
 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:910
+#: e2fsck/problem.c:970
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "Rozšířený atribut v iuzlu %i má hash (%N), který není platný\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:975
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "Iuzel %i je %It, ale ve skutečnosti vypadá na adresář.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
-#, c-format
+#: e2fsck/problem.c:981
+#, no-c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Chyba při pročítání stromu @x v iuzlu %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1802,7 +1826,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1812,7 +1836,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1821,33 +1845,31 @@ msgstr ""
 "\t(logický blok %c, fyzický blok %b, neplatná délka %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-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:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr "Iuzel %i rozsahový formát, ale superbloku chybí vlastnost EXTENTS\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "Iuzlu %i chybí EXTENT_FL, ale je v rozsahovém formátu\n"
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "Rychlý symbolický odkaz %i na nastaveno EXTENT_FL.  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1856,39 +1878,39 @@ msgstr ""
 "\t(neplatný logický blok %c, fyzický blok %b, délka %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1030
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "Iuzel %i má neplatný uzel rozsahů (op %s, blk %b, lblk %c): %m\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1036
+#, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Chyba při převodu bitmapy bloků subclusteru: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not regular file.  "
 msgstr "Iuzel kvóty není obyčejný soubor. "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
 msgid "@q @i is not in use, but contains data.  "
 msgstr "Iuzel kvóty se nepoužívá, ale obsahuje data. "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 msgid "@q @i is visible to the user.  "
 msgstr "Iuzel kvóty je pro uživatele viditelný. "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 msgid "The bad @b @i looks @n.  "
 msgstr "Iuzel špatných bloků se zdá být neplatný. "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1897,26 +1919,26 @@ msgstr ""
 "\t(neplatný logický blok %c, fyzický blok %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, c-format
+#: e2fsck/problem.c:1067
+#, no-c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "Zdá se, že Iuzel %i obsahuje nesmysly. "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr "Iuzel %i projde kontrolami, ale kontrolní součet iuzlu neodpovídá. "
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "Rozšířený atribut iuzlu %i je poškozen (kolize alokace). "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1926,16 +1948,14 @@ msgstr ""
 "\t(logický blok %c, fyzický blok %b, délka %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
-msgstr ""
-"Block %2$b rozšířeného atributu iuzlu %1$i projde kontrolami, ale kontrolní "
-"součet bloku neodpovídá. "
+msgstr "Blok %b rozšířeného atributu iuzlu %i projde kontrolami, ale kontrolní součet bloku neodpovídá. "
 
 # ??? WTF
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1945,7 +1965,7 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1954,42 +1974,37 @@ msgstr ""
 "\t(logický blok %c, fyzický blok %b, délka %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr "Iuzel %i má data v sobě, ale superbloku chybí vlastnost INLINE_DATA\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
-msgstr ""
-"Iuzel %i má nastaven příznak INLINE_DATA_FL na systému souborů bez podpory "
-"vestavěných dat.\n"
+msgstr "Iuzel %i má nastaven příznak INLINE_DATA_FL na systému souborů bez podpory vestavěných dat.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
-msgstr ""
-"Blok %2$b iuzlu %1$i se neslučuje s kritickými metadaty, kontrola bloku se "
-"vynechá.\n"
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+msgstr "Blok %b iuzlu %i se neslučuje s kritickými metadaty, kontrola bloku se vynechá.\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "Iuzel adresáře %i blok %b by měl být na bloku %c. "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1138
+#, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
-msgstr ""
-"Iuzel adresáře %i má na bloku %c rozsah označený jako neinicializovaný. "
+msgstr "Iuzel adresáře %i má na bloku %c rozsah označený jako neinicializovaný. "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
@@ -1998,17 +2013,15 @@ msgstr ""
 "alokace clusteru. Bude opraveno v průchodu 1B.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
-msgstr ""
-"Iuzel %i má nastaven příznak INLINE_DATA_FL, ale rozšířený atribut "
-"nenalezen. "
+msgstr "Iuzel %i má nastaven příznak INLINE_DATA_FL, ale rozšířený atribut nenalezen. "
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
@@ -2017,48 +2030,42 @@ msgstr ""
 "má nastaven příznak rozsahů nebo vestavěných dat. "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
-msgstr ""
-"Iuzel %i má hlavičku pro rozsah, ale příznak vestavěných dat je nastaven.\n"
+msgstr "Iuzel %i má hlavičku pro rozsah, ale příznak vestavěných dat je nastaven.\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr "Iuzel %i se zdá mít vestavěná data, ale příznak rozsahu je nastaven.\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
-msgstr ""
-"Iuzel %i se zdá mít mapu bloků, ale příznaky vestavěných data a rozsahu jsou "
-"nastaveny.\n"
+msgstr "Iuzel %i se zdá mít mapu bloků, ale příznaky vestavěných data a rozsahu jsou nastaveny.\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
-msgstr ""
-"Iuzel %i má nastavené příznaky vestavěných dat a rozsahu, ale i_block "
-"obsahuje nesmysly.\n"
+msgstr "Iuzel %i má nastavené příznaky vestavěných dat a rozsahu, ale i_block obsahuje nesmysly.\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
-msgstr ""
-"Seznam chybných bloků říká, že iuzel seznamu chybných bloků je chybný. "
+msgstr "Seznam chybných bloků říká, že iuzel seznamu chybných bloků je chybný. "
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1191
 msgid "@A @x region allocation structure.  "
 msgstr "Chyba při alokaci struktury pro alokaci oblasti rozsahu. "
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -2067,38 +2074,57 @@ msgstr ""
 "\t(logický blok %c, neplatný fyzický blok %b, délka %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
 msgid "@A memory for encrypted @d list\n"
 msgstr "Chyba při alokaci paměti pro seznam šifrovaných adresářů\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr "Strom rozsahů iuzlu %i by mohl být mělčí (%b, mohl by být <= %c)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr "Iuzel %i na souborovém systému s bigalloc nemůže mapován do bloků. "
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, c-format
+#: e2fsck/problem.c:1218
+#, no-c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "Iuzel %i má poškozenou hlavičku rozsahu. "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
+msgstr "Časové údaje iuzlu %i po 4. dubnu 2310 pravděpodobně spadají před rok 1970.\n"
+
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "Iuzel %i má zakázaný iuzel rozšířených atributů %N.\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "Iuzel %i má neplatný rozšířený atribut. Iuzlu rozšířeného atributu %N chybí příznak EA_INODE.\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
 msgstr ""
-"Časové údaje iuzlu %i po 4. dubnu 2310 pravděpodobně spadají před rok 1970.\n"
+"Iuzlu rozšířeného atributu %N pro rodičovský iuzel %i chybí příznak EA_INODE.\n"
+" "
 
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2110,47 +2136,46 @@ msgstr ""
 "Průchod 1B: Znovu vyšetřuji více krát alokované bloky\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
-#, c-format
+#: e2fsck/problem.c:1255
+#, no-c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "Více krát alokovaný(é) blok(y) v iuzlu %i:"
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1271
+#, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Chyba při zkoumání iuzlů (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "Chyba při alokaci bitmapy iuzlů (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 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:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 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:1197
+#: e2fsck/problem.c:1298
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Průchod 1C: Hledání iuzlů s duplikovanými bloky v adresářích.\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Průchod 1D: Opravuji duplikátní bloky\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2159,18 +2184,18 @@ msgstr ""
 "  má %r duplikovaný(ch) blok(ů) sdílený(ch) mezi %N soubory/souborem:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "        %Q (iuzel %i, čas změny %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
 msgid "\t<@f metadata>\n"
 msgstr "\t<metadata systému souborů>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2180,7 +2205,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2188,353 +2213,347 @@ msgstr ""
 "Duplikátní bloky již přiřazeny nebo naklonovány.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1344
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Nemohu klonovat soubor: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1350
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Průchod 1E: Optimalizují se stromy rozsahů\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, c-format
+#: e2fsck/problem.c:1356
+#, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Optimalizace stromu rozsahů %p (%i) selhala: %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1361
 msgid "Optimizing @x trees: "
 msgstr "Optimalizují se stromy rozsahů: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
-msgstr ""
-"Vnitřní chyba: maximální hloubka stromu rozsahů je příliš velká (%b, "
-"očekáváno=%c).\n"
+msgstr "Vnitřní chyba: maximální hloubka stromu rozsahů je příliš velká (%b, očekáváno=%c).\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr "Strom rozsahu iuzlu %i (na úrovni %b) by mohl být kratší. "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr "Strom rozsahu iuzlu %i (na úrovni %b) by mohl být užší. "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Průchod 2: Kontroluje se struktura adresářů\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1399
+#, no-c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Špatné číslo iuzlu pro „.“ v iuzlu adresáře %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1404
 msgid "@E has @n @i #: %Di.\n"
 msgstr "Položka „%Dn“ v %p (%i) má špatné číslo iuzlu: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1409
 msgid "@E has @D/unused @i %Di.  "
 msgstr "Položka „%Dn“ v %p (%i) má odstraněný/nepoužívaný iuzel %Di. "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1414
 msgid "@E @L to '.'  "
 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:1315
+#: e2fsck/problem.c:1419
 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:1320
+#: e2fsck/problem.c:1424
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "Položka „%Dn“ v %p (%i) je odkaz na adresář %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1429
 msgid "@E @L to the @r.\n"
 msgstr "Položka „%Dn“ v %p (%i) je odkaz na kořenový iuzel.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
 msgstr "Položka „%Dn“ v %p (%i) má ve svém jméně neplatné znaky.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, c-format
+#: e2fsck/problem.c:1440
+#, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Chybí „.“ v iuzlu adresáře %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1446
+#, no-c-format
 msgid "Missing '..' in @d @i %i.\n"
 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:1345
+#: e2fsck/problem.c:1451
 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:1350
+#: e2fsck/problem.c:1456
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Druhá položka „%Dn“ (iuzel=%Di) v iuzlu adresáře %i by měla být „..“\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr pro iuzel %i (%Q) je %IF, měla by být nula.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1466
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl pro iuzel %i (%Q) je %If, mělo by být nula.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl pro iuzel %i (%Q) je %N, mělo by být nula.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_size_high pro iuzel %i (%Q) je %Id, měla by být nula.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag pro iuzel %i (%Q) je %N, mělo by být nula.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize pro iuzel %i (%Q) je %N, měla by být nula.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "Iuzel %i (%Q) má špatný mód (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1491
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "Iuzel adresáře %i, %B, pozice %N: adresář poškozen\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "Iuzel adresáře %i, blok %B, pozice %N: název souboru příliš dlouhý\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "Iuzel adresáře %i má nealokovaný %B. "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Položka adresáře „.“ v iuzlu adresáře %i není ukončena NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Položka adresáře „..“ v iuzlu adresáře %i není ukončena NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "Iuzel %i (%q) je neplatné znakové zařízení.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "Iuzel %i (%Q) je neplatné blokové zařízení.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "Položka „%Dn“ v %p (%i) je duplikátní položka „.“.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "Položka „%Dn“ v %p (%i) je duplikátní položka „..“.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Interní chyba: nemohu najít dir_info pro %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "Položka „%Dn“ v %p (%i) má rec_len %Dr, měla by být %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, c-format
+#: e2fsck/problem.c:1550
+#, no-c-format
 msgid "@A icount structure: %m\n"
 msgstr "Chyba při alokaci struktury icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Chyba při iterování přes bloky adresáře: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Chyba při čtení bloku adresáře %b (iuzel %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Chyba při zápisu bloku adresáře %b (iuzel %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "Chyba při alokaci nového bloku adresáře pro iuzel %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Chyba při dealokaci iuzlu %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1584
+#, no-c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "Položka adresáře pro „.“ v %p (%i) je velká.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "Iuzel %i (%Q) je neplatná FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "Iuzel %i (%Q) je neplatný socket.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Nastavuje se filetype pro položku „%Dn“ v %p (%i) na %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1604
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "Položka „%Dn“ v %p (%i) má chybný filetype (byl %Dt, měl by být %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 msgstr "Položka „%Dn“ v %p (%i) má nastaven filetype.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "Položka „%Dn“ v %p (%i) má název nulové délky.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Symbolický odkaz %Q (iuzel #%i) není platný.\n"
 
 # FIXME: @F already ends with 'is'
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1624
 msgid "@a @b @F @n (%If).\n"
 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:1515
+#: e2fsck/problem.c:1629
 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:1520
+#: e2fsck/problem.c:1634
 msgid "@p @h %d: %B not referenced\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: na %B neexistuje odkaz\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: na %B vedou dva odkazy\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1644
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: %B má špatný min hash\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1649
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: %B má špatný max hash\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
 msgstr "Neplatný iuzel HTREE adresáře %d (%q). "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "Problém v iuzlu HTREE adresáře %d (%q): špatné číslo bloku %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: kořenový uzel není platný\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1674
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: %B má špatný limit (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1679
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: %B má špatný počet (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1684
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: %B má nesetříděnou hash tabulku\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1689
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: %B má špatnou hloubku (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
 msgstr "Nalezena duplikátní položka „%Dn“ v %p (%i). "
 
 # FIXME: no-c-format
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2546,7 +2565,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2557,166 +2576,156 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi pro iuzel %i (%Q) je %N, měl by být nula.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %d (%q).\n"
 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:1603
+#: e2fsck/problem.c:1719
 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:1608
+#: e2fsck/problem.c:1724
 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:1613
+#: e2fsck/problem.c:1729
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "i_file_acl_hi pro iuzel %i (%Q) je %N, mělo by být nula.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, c-format
+#: e2fsck/problem.c:1735
+#, no-c-format
 msgid "@p @h %d: root node fails checksum.\n"
-msgstr ""
-"Problém v iuzlu HTREE adresáře %d: kontrolní součet kořenového uzlu "
-"nesouhlasí.\n"
+msgstr "Problém v iuzlu HTREE adresáře %d: kontrolní součet kořenového uzlu nesouhlasí.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, c-format
+#: e2fsck/problem.c:1741
+#, no-c-format
 msgid "@p @h %d: internal node fails checksum.\n"
-msgstr ""
-"Problém v iuzlu HTREE adresáře %d: kontrolní součet vnitřního uzlu "
-"nesouhlasí.\n"
+msgstr "Problém v iuzlu HTREE adresáře %d: kontrolní součet vnitřního uzlu nesouhlasí.\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1746
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "Iuzel adresáře %i, %B, pozice %N: adresář nemá kontrolní součet.\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
-msgstr ""
-"Iuzel adresáře %i, %B: adresář prošel kontrolami, ale součet nesouhlasí.\n"
+msgstr "Iuzel adresáře %i, %B: adresář prošel kontrolami, ale součet nesouhlasí.\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
-msgstr ""
-"Velikost (%2$N) iuzlu %1$i vestavěného adresáře musí být násobek čtyř.\n"
+msgstr "Velikost (%N) iuzlu %i vestavěného adresáře musí být násobek čtyř.\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr "Oprava velikosti iuzly vestavěného adresáře %i se nepodařila.\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
 msgid "Encrypted @E is too short.\n"
 msgstr "Zašifrovaný záznam „%Dn“ v %p (%i) je příliš krátký.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Průchod 3: Kontroluje se dosažitelnost adresářů\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
 msgstr "Kořenový iuzel nealokován. "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "Není místo v adresáři lost+found. "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1790
+#, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Nepřipojený adresářový iuzel %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
 msgstr "/lost+found nenalezeno. "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "„..“ v %Q (%i) je %P (%j), mělo by být %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "Špatné nebo neexistující /lost+found. Nemohu znovu připojit.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Nemohu zvětšit /lost+found: %m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Nemohu znovu připojit %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Chyba při pokusu najít /lost+found: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block: %m při pokusu vytvořit adresář /lost+found\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode: %m při pokusu vytvořit adresář /lost+found\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-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:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_block: %m při zápisu bloku adresáře pro /lost+found\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Chyba při úpravě četnosti iuzlu v iuzlu %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2726,8 +2735,8 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
@@ -2736,41 +2745,41 @@ msgstr ""
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Chyba při vytváření kořenového adresáře (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Chyba při vytváření adresáře /lost+found (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "Kořenový iuzel není adresář; končím.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "Nemohu pokračovat bez kořenového iuzlu.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/lost+found není adresář (ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
 msgid "/@l has inline data\n"
 msgstr "/lost+found má vestavěná data\n"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2781,7 +2790,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2791,52 +2800,52 @@ msgstr ""
 "Přesuňte data ze souborového systému a e2fsck spusťte znovu.\n"
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1924
 msgid "/@l is encrypted\n"
 msgstr "/lost+found je zašifrován\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Průchod 3A: Optimalizuji adresáře\n"
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Nemohu vytvořit iterátor dirs_to_hash: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Nemohu optimalizovat adresář %q (%d): %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
 msgstr "Optimalizuji adresáře: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Průchod 4: Kontrolují se počty odkazů\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
 msgstr "Osiřelý iuzel %i s nulovou délkou. "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
 msgstr "Osiřelý iuzel %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "Počet odkazů na iuzel %i je %Il, měl by být %N. "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2847,150 +2856,151 @@ msgstr ""
 "\tSOUBORŮ.\n"
 "inode_link_info[%i] je %N, inode.i_links_count je %Il. Měly by být stejné!\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "Počet odkazů na iuzel rozšířeného atributu %i je %N, měl by být %n. "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr "Adresář překračuje maximum odkazů, ale v superbloku chybí vlastnost DIR_NLINK.\n"
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Průchod 5: Kontrolují se souhrnné informace skupin\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
 msgstr "Výplň na konci bitmapy iuzlů není nastavena. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
 msgstr "Výplň na konci bitmapy bloků není nastavena. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "Rozdíly v bitmapě bloků: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "Rozdíly v bitmapě iuzlů: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Počet volných iuzlů ve skupině č. %g špatně (%i, spočteno=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:2068
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Počet adresářů ve skupině č. %g špatně (%i, spočteno=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Počet volných iuzlů špatně (%i, spočteno=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2078
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Počet volných bloků ve skupině č. %g špatně (%b, spočteno=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 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:1938
-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:2088
+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:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Interní chyba: pokažený konec bitmapy (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Chyba při kopírování do náhradní bitmapy iuzlů: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Chyba při kopírování do náhradní bitmapy bloků: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-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:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-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: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr "Bitmapa iuzlů skupiny %g neodpovídá kontrolnímu součtu.\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr "Bitmapa bloků skupiny %g neodpovídá kontrolnímu součtu.\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 msgid "Recreate @j"
 msgstr "Znovu vytvořit žurnál"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr "Aktualizovat údaje o kvótách pro druh kvót %N"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2172
+#, no-c-format
 msgid "Error setting @b @g checksum info: %m\n"
-msgstr ""
-"Chyba při nastavování informace o kontrolním součtu skupiny bloků: %m\n"
+msgstr "Chyba při nastavování informace o kontrolním součtu skupiny bloků: %m\n"
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2178
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Chyba při zápisu údajů o souborovém systému: %m\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr "Chyba při synchronizaci zápisů na zařízení úložiště: %m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2189
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "Chyba při zápisu údajů o kvótách pro druh kvót %N: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Neobsloužený kód chyby (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "IGNOROVÁNO"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr "v move_quota_inode"
 
@@ -3012,25 +3022,25 @@ msgstr "při spouštění prohlídky iuzlů"
 msgid "while doing inode scan"
 msgstr "při provádění prohlídky iuzlů"
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "při volání ext2fs_block_iterate pro iuzel %d"
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "při volání ext2fs_block_iterate pro iuzel %u"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "při volání ext2fs_adjust_ea_refcount2 pro iuzel %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "při volání ext2fs_adjust_ea_refcount2 pro iuzel %u"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Usekávám"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Mažu"
 
-#: e2fsck/unix.c:77
+#: e2fsck/unix.c:78
 #, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
@@ -3041,15 +3051,14 @@ msgstr ""
 "\t\t[-l|-L soubor_špatných_bloků] [-C fd] [-j externí_žurnál]\n"
 "\t\t[-E rozšířené-přepínače] [-z soubor_s_historií] zařízení\n"
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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"
@@ -3057,12 +3066,10 @@ 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:88
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -3083,12 +3090,12 @@ msgstr ""
 " -z soubor_s_historií\n"
 "                      Vytvořit soubor pro návrat změn\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, 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:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3106,7 +3113,7 @@ msgstr[2] ""
 "\n"
 "%12u použitých iuzlů (%2.2f %% z %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
@@ -3114,7 +3121,7 @@ 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:169
+#: e2fsck/unix.c:172
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
@@ -3122,16 +3129,16 @@ 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:174
+#: e2fsck/unix.c:177
 #, 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"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr "             Histogram hloubky rozsahu: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
@@ -3139,7 +3146,7 @@ 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:195
+#: e2fsck/unix.c:198
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
@@ -3147,7 +3154,7 @@ msgstr[0] "%12u chybný blok\n"
 msgstr[1] "%12u chybné bloky\n"
 msgstr[2] "%12u chybných bloků\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:200
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
@@ -3155,7 +3162,7 @@ msgstr[0] "%12u velký soubor\n"
 msgstr[1] "%12u velké soubory\n"
 msgstr[2] "%12u velkých souborů\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -3173,7 +3180,7 @@ msgstr[2] ""
 "\n"
 "%12u obyčejných souborů\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
@@ -3181,7 +3188,7 @@ msgstr[0] "%12u adresář\n"
 msgstr[1] "%12u adresáře\n"
 msgstr[2] "%12u adresářů\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
@@ -3189,7 +3196,7 @@ 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:206
+#: e2fsck/unix.c:209
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
@@ -3197,7 +3204,7 @@ 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:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
@@ -3205,7 +3212,7 @@ msgstr[0] "%12u roura\n"
 msgstr[1] "%12u roury\n"
 msgstr[2] "%12u rour\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
@@ -3213,7 +3220,7 @@ msgstr[0] "%12u odkaz\n"
 msgstr[1] "%12u odkazy\n"
 msgstr[2] "%12u odkazů\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
@@ -3221,7 +3228,7 @@ msgstr[0] "%12u symbolický odkaz"
 msgstr[1] "%12u symbolické odkazy"
 msgstr[2] "%12u symbolických odkazů"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
@@ -3229,7 +3236,7 @@ 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:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
@@ -3237,7 +3244,7 @@ msgstr[0] "%12u socket\n"
 msgstr[1] "%12u sockety\n"
 msgstr[2] "%12u socketů\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
@@ -3245,33 +3252,33 @@ msgstr[0] "%12u soubor\n"
 msgstr[1] "%12u soubory\n"
 msgstr[2] "%12u souborů\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "při zjišťování, jestli je %s připojen."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Pozor! %s je připojen.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Pozor! %s se používá.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s je připojen.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s se používá.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3279,7 +3286,7 @@ msgstr ""
 "Nemohu pokračovat, končím.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3293,81 +3300,105 @@ msgstr ""
 "***ZPŮSOBÍTE VÁŽNÉ*** poškození systému souborů.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "Chcete opravdu pokračovat"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "kontrola přerušena.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr " obsahuje systém souborů s chybami"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " nebyl čistě odpojen"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 msgid " primary superblock features different from backup"
 msgstr " vlastnosti primárního superbloku se liší od záložního"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:383
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " byl připojen %ukrát bez kontroly"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:390
 msgid " has filesystem last checked time in the future"
 msgstr " má čas poslední kontroly systému souborů v budoucnosti"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " nebyl kontrolován %u dní"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr "ignoruje se interval mezi kontrolami, je nastaveno broken_system_clock\n"
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ", kontrola vynucena.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: čistý, %'u/%'u souborů, %'llu/%'llu bloků"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
 msgstr " (kontrola odložena, běžím na baterii)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr " (kontrola po příštím připojení)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (kontrola za %ld připojení)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "CHYBA: Nemohu otevřít /dev/null (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "Neplatná verze EA.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:702
 msgid "Invalid readahead buffer size.\n"
 msgstr "Neplatná velikost paměti pro přednačítání.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Neznámý rozšířený přepínač: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Rozšířené přepínače jsou odděleny čárkami a mohou mít argument, který je\n"
+"oddělen znaménkem rovná se („=“). Platné rozšířené přepínače jsou:\n"
+"\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr "\tea_ver=<verze_rozšířeného_atributu (1 nebo 2)>\n"
+
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "\treadahead_kb=<velikost_vyrovnávací_paměti>\n"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3376,55 +3407,55 @@ msgstr ""
 "Syntaktická chyba v konfiguračním souboru e2fsck (%s, řádek č. %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, 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:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr "Neplatný deskriptor souborů informace o dokončení"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 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:865
+#: e2fsck/unix.c:903
 #, 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:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Nelze vyřešit „%s“"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 msgid "The -n and -D options are incompatible."
 msgstr "Přepínače -n a -D se vzájemně vylučují."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 msgid "The -n and -c options are incompatible."
 msgstr "Přepínače -n a -c se vzájemně vylučují."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 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:986
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Přepínače -D a -E fixes_only se vzájemně vylučují."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Přepínače -E bmap2extent a fixes_only se vzájemně vylučují."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 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:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3433,7 +3464,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG „%s“ není celým číslem\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3444,35 +3475,31 @@ msgstr ""
 "Neplatný nečíselný argument u -%c („%s“)\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, 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:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr "při kontrole bloku MMP"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
-"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"
+"Jste-li si jisti, že souborový systém není používán na žádném uzlu, spusťte:\n"
+"„tune2fs -f -E clear_mmp %s“\n"
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
 msgstr "při čtení bloku MMP"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3482,57 +3509,57 @@ msgstr ""
 "Přepisuji existující systém souborů, toto může být odčiněno příkazem:\n"
 "   e2undo %s %s\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "při pokusu smazat %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "při pokusu nastavit soubor pro odvolání změn\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Chyba: stará verze knihovny ext2fs!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "při pokusu inicializovat program"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tPoužívám %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr "pro interaktivní opravy potřebuji terminál"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s zkouším záložní bloky…\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr "Neplatný superblok,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
 msgstr "Deskriptory skupin vypadají špatně…"
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, 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:1482
+#: e2fsck/unix.c:1546
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: návrat k původnímu superbloku\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3542,28 +3569,28 @@ msgstr ""
 "(Nebo je superblok systému souborů poškozen)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr "Mohl by toto být oddíl nulové délky?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, 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:1526
+#: e2fsck/unix.c:1590
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Pravděpodobně neexistující nebo odkládací zařízení?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1592
 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:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr "Pravděpodobně neexistující zařízení?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3571,71 +3598,79 @@ 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:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr "%s: Superblok se zkusí načíst i přes chyby…\n"
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr "Sežeňte novější verzi e2fsck!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1749
 #, c-format
 msgid "while checking journal for %s"
 msgstr "při kontrole žurnálu pro %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1752
 msgid "Cannot proceed with file system check"
 msgstr "Nelze pokračovat v kontrole souborového systému"
 
-#: e2fsck/unix.c:1661
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+#: e2fsck/unix.c:1763
+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:1673
+#: e2fsck/unix.c:1775
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "nemohu nastavit příznaky superbloku na %s\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1781
 #, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Nalezena chyba kontrolního součtu žurnálu v %s\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1785
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "Žurnál poškozen v %s\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1789
 #, c-format
 msgid "while recovering journal of %s"
 msgstr "při obnově žurnálu %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s má nepodporovanou vlastnost(i):"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1826
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "%s má nepodporované kódování: %0x\n"
+
+#: e2fsck/unix.c:1876
 #, 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:1771
+#: e2fsck/unix.c:1879
 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:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Vytváří se žurnál (%d bloků): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr " Hotovo.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1931
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
@@ -3643,24 +3678,38 @@ msgstr ""
 "\n"
 "*** žurnál byl znovu vytvořen ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "přerušen"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck přerušen.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Spouštím e2fsck od začátku…\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "při nulování kontextu"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** CHYBY SOUBOROVÉHO SYSTÉM BYLY OPRAVENY *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: Souborový systém byl pozměněn.\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3669,12 +3718,12 @@ msgstr ""
 "\n"
 "%s: ***** SYSTÉM SOUBORŮ BYL ZMĚNĚN *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:2040
 #, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** ZNOVU ZAVEĎTE SYSTÉM *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3685,51 +3734,51 @@ msgstr ""
 "%s: ********** VAROVÁNÍ: Systém souborů má stále chyby **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "aA"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr "vV"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr " („v“ zapne „ano“ pro vše) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<a>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (a/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "přerušeno!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr "ano pro vše\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "ano\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "ne\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3738,7 +3787,7 @@ msgstr ""
 "%s? ne\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3747,38 +3796,38 @@ msgstr ""
 "%s? ano\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "ano"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "ne"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: neplatný blok(y) bitmapy pro %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "čtení bitmap iuzlů a bloků"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "při opakovaném pokusu načíst bitmapy pro %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "zápisu bitmap bloků a iuzlů"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "při přepisu bitmap bloků a iuzlů pro %s"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3791,63 +3840,59 @@ msgstr ""
 "%s: NEOČEKÁVANÁ NEKONZISTENCE; SPUSŤTE fsck RUČNĚ.\n"
 "\t(tj. bez přepínačů -a nebo -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Použitá paměť: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Použitá paměť: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "čas: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "strávený čas: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "při čtení iuzlu %lu v %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "při zápisu iuzlu %lu v %s"
 
-#: e2fsck/util.c:765
-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"
+#: e2fsck/util.c:792
+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:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "hotovo                                               \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, 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"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 ""
 "Použití: %s [-b velikost_bloku] [-i vstupní_soubor] [-o výstupní_soubor]\n"
-"   [-svwnf] [-c bloků_najednou] [-d činitel_zpoždění_mezi_čteními]\n"
+"   [-svwnfBX] [-c bloků_najednou] [-d činitel_zpoždění_mezi_čteními]\n"
 "   [-e max_špatných_bloků] [-p počet_průchodů]\n"
 "   [-t zkušební_vzorek [-t zkušební_vzorek […]]]\n"
 "   zařízení [poslední_blok [první_blok]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3856,80 +3901,80 @@ msgstr ""
 "%s: Přepínače „-n“ a „-w“ se vzájemně vylučují.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f %% hotovo, %s uplynulo. (%d/%d/%d chyb)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Zkouším s náhodným vzorkem: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Zkouším se vzorkem 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "při posunu"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Divná hodnota (%ld) v do_read\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "při ext2fs_sync_device"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "při začátku iterace v seznamu špatných bloků"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "při alokaci vyrovnávacích paměti"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Ověřují se bloky %lu až %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Hledají se špatné bloky v režimu jen pro čtení\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Hledají se špatné bloky (test jen pro čtení): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Příliš mnoho špatných bloků, přerušuji test\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Hledají se špatné bloky v režimu čtení i zápis\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Od bloku %lu do %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Čtení a porovnání: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Hledají se špatné bloky v nedestruktivním režimu čtení i zápis\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Hledají se špatné bloky (nedestruktivní test čtení i zápisu)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3937,57 +3982,57 @@ msgstr ""
 "\n"
 "Zachyceno přerušení, uklízí se\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "při testovacím zápisu dat, blok %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s je připojen; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "badblocks přesto vynucen. Doufám, že /etc/mtab je nesprávný.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "není bezpečné spouštět badblocks!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s je zjevně systémem právě používán; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "badblocks přesto vynucen.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "neplatný %s – %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr "Příliš velký počet chybných bloků %u – maximum je %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "Nemohu alokovat paměť pro zkušební_vzorek – %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "V režimu pouhého čtení lze zadat nejvýše jeden zkušební_vzorek"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "V režimu pouhého čtení není náhodný zkušební_vzorek přípustný"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3995,270 +4040,268 @@ msgstr ""
 "Nemohu zjistit velikost zařízení; musíte velikost\n"
 "zadat ručně\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "při pokusu zjistit velikost zařízení"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "poslední blok"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "první blok"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "špatný počáteční blok (%llu): musí být menší než %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "špatný koncový blok (%llu): musí se jednat o 32bitovou hodnotu"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "při vytváření seznam špatných bloků v paměti"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "vstupní soubor – chybný formát"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "při přidávání do seznamu špatných bloků v paměti"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Průchod dokončen, nalezeno %u špatných bloků (%d/%d/%d chyb).\n"
 
 #: misc/chattr.c:89
 #, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
-msgstr "Použití: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v verze] soubory…\n"
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "Použití: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v verze] soubory…\n"
 
-#: misc/chattr.c:159
+#: misc/chattr.c:160
 #, c-format
 msgid "bad project - %s\n"
 msgstr "špatný projekt – %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "špatná verze – %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "při pokusu stat %s"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "při čtení příznaků %s"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Příznaky %s nastaveny na "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "při nastavování příznaků %s"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Verze %s nastavena na %lu\n"
 
-#: misc/chattr.c:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "při nastavování verze %s"
 
-#: misc/chattr.c:271
+#: misc/chattr.c:272
 #, c-format
 msgid "Project of %s set as %lu\n"
 msgstr "Verze %s nastavena na %lu\n"
 
-#: misc/chattr.c:275
+#: misc/chattr.c:276
 #, c-format
 msgid "while setting project on %s"
 msgstr "při nastavování projektu na %s"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Nemohu alokovat proměnou path v chattr_dir_proc"
 
-#: misc/chattr.c:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "= je neslučitelné s - a +\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "Musíte použít '-v', =, - nebo +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:80 misc/create_inode.c:119
 #, c-format
 msgid "while reading inode %u"
 msgstr "při čtení iuzlu %u"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 msgid "while expanding directory"
 msgstr "při zvětšování adresáře"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:97
 #, c-format
 msgid "while linking \"%s\""
 msgstr "při vytváření odkazu „%s“"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
 #, c-format
 msgid "while writing inode %u"
 msgstr "při zápisu iuzlu %u"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:152 misc/create_inode.c:176
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "při vypisování atributů „%s“"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:163
 #, c-format
 msgid "while opening inode %u"
 msgstr "při otevírání iuzlu %u"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr "při alokaci paměti"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:189 misc/create_inode.c:205
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "při čtení atributu „%s“ u „%s“"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:214
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "při zápisu atributu „%s“ do iuzlu %u"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:224
 #, c-format
 msgid "while closing inode %u"
 msgstr "při uzavírání iuzlu %u"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:275
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr "při alokaci iuzlu „%s“"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:294
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr "při vytváření iuzlu „%s“"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:360
 #, c-format
 msgid "while creating symlink \"%s\""
 msgstr "při vytváření symbolického odkazu „%s“"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:378 misc/create_inode.c:963
 #, c-format
 msgid "while looking up \"%s\""
 msgstr "při vyhledávání „%s“"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:398
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr "při vytváření adresáře „%s“"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:627
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "při otevírání „%s“ za účelem kopírování"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr "při změně pracovního adresáře na „%s“"
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:815
 #, c-format
-msgid "while opening directory \"%s\""
-msgstr "při otevírání adresáře „%s“"
+msgid "while scanning directory \"%s\""
+msgstr "při zkoumání adresáře „%s“"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:825
 #, c-format
 msgid "while lstat \"%s\""
 msgstr "při volání lstat nad „%s“"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:875
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr "při vytváření zvláštního souboru „%s“"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:884
 msgid "malloc failed"
 msgstr "volání malloc selhalo"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:892
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr "při pokusu přečíst odkaz „%s“"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
-msgstr ""
-"mezi voláním lstat() a readlink() se velikost symbolického odkazu prodloužila"
+msgstr "mezi voláním lstat() a readlink() se velikost symbolického odkazu prodloužila"
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:910
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr "při zápisu symbolického odkazu „%s“"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:921
 #, c-format
 msgid "while writing file \"%s\""
 msgstr "při zápisu souboru „%s“"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:934
 #, c-format
 msgid "while making dir \"%s\""
 msgstr "při výrobě adresáře „%s“"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:952
 msgid "while changing directory"
 msgstr "při změně adresáře"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:958
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr "ignoruje se záznam „%s“"
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:971
 #, c-format
 msgid "while setting inode for \"%s\""
 msgstr "při nastavování iuzlu pro „%s“"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:978
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "při nastavování rozšířených atributů u „%s“"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:1004
 msgid "while saving inode data"
 msgstr "při ukládání dat iuzlu"
 
 #: misc/dumpe2fs.c:56
 #, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr "Použití: %s [-bfghixV] [-o superblock=N] [-o blocksize=N] zařízení\n"
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "Použití: %s [-bfghimxV] [-o superblock=N] [-o blocksize=N] zařízení\n"
 
 # Unit name after numeric value
 #: misc/dumpe2fs.c:159
@@ -4379,106 +4422,54 @@ msgstr "při tisku seznamu špatných bloků"
 msgid "Bad blocks: %u"
 msgstr "Špatné bloky: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "při čtení iuzlu žurnálu"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "při otevírání iuzlu žurnálu"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "při čtení superbloku žurnálu"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Magické číslo superbloku žurnálu je špatně!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Vlastnosti žurnálu:      "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Velikost žurnálu:         "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Délka žurnálu:            %u\n"
-"Sekvence žurnálu:         0x%08x\n"
-"Začátek žurnálu:          %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr "Typ kontrolního součtu žurnálu: crc32\n"
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-"Typ kontrolního součtu žurnálu: %s\n"
-"Kontrolní součet žurnálu:       0x%08x\n"
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Chybové číslo žurnálu:    %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "při čtení superbloku žurnálu"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Nemohu najít magická čísla superbloku žurnálu"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Velikost bloku žurnálu:   %u\n"
-"Délka žurnálu:            %u\n"
-"První blok žurnálu:       %u\n"
-"Sekvence žurnálu:         0x%08x\n"
-"Začátek žurnálu:          %u\n"
-"Počet uživatelů žurnálu:  %u\n"
+#: misc/dumpe2fs.c:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "alokace vyrovnávací paměti pro MMP selhala\n"
 
-#: misc/dumpe2fs.c:514
+#: misc/dumpe2fs.c:479
 #, c-format
-msgid "Journal users:            %s\n"
-msgstr "Uživatelé žurnálu:        %s\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "čtení MMP bloku %llu z „%s“\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Nemohu alokovat paměť pro zpracování přepínačů!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Neplatný parametr superblok: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Neplatný parametr blocksize (velikost_bloku): %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4501,240 +4492,225 @@ msgstr ""
 "\tsuperblock=<číslo superbloku>\n"
 "\tblocksize=<velikost bloku>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tPoužívám %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** Na souborovém systému byly nalezeny chyby kontrolního součtu!\n"
-"*** Okamžitě spusťte e2fsck!\n"
-"\n"
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Nemohu najít platný superblok systému souborů.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** V bitmapách byly nalezeny chyby kontrolního součtu!\n"
-"*** Okamžitě spusťte e2fsck!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s: vlastnost MMP není zapnuta.\n"
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:747
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "při pokusu načíst bitmapy pro %s\n"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"*** Nyní spusťte e2fsck!\n"
 "\n"
-"%s: %s: chyba při čtení bitmap: %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
-msgstr "Použití: %s [-r|Q] [-fr] zařízení soubor_s_obrazem\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
+msgstr "Použití: %s [-r|Q] [-f] [-b superblok] [-B velikost_bloku] [-fr] zařízení soubor_s_obrazem\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "       %s -I zařízení soubor_s_obrazem\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
 msgstr ""
 "       %s -ra [-cfnp] [-o pozice_zdroje] [ -O pozice_cíle]\n"
 "          zdrojový_souborový_systém [cílový_souborový_systém]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr "při alokaci vyrovnávací paměti"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "Zapisuje se blok %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr "chyba při zápisu bloku %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr "chyba ve funkci generic_write()"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Chyba: hlavička je větší než wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr "Nemohu alokovat vyrovnávací paměť hlavičky\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "při zápisu superbloku"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "při zápisu tabulky iuzlů"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "při zápisu bitmapy bloků"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "při zápisu bitmapy iuzlů"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Poškozený blok adresáře %llu: chybný rec_len (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Poškozený blok adresáře %llu: chybný name_len (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu/%llu bloků (%d %%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
 msgstr "Kopíruje se "
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr ""
 "Zastavení na tomto místě zničí souborový systém. Jste-li si jisti,\n"
 "vyvolejte přerušení znovu\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " %s zbývá při %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr "chyba při čtení bloku %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "Zkopírováno %llu/%llu bloků (%d %%) v %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "při %.2f MB/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
 msgstr "při alokaci tabulky l1"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr "při alokaci vyrovnávacích paměti druhé úrovně"
 
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
-msgstr ""
-"Pozor: V okamžiku vkládání vyrovnávací paměti stále jsou ve vyrovnávací "
-"paměti tabulky, což vede ke ztrátě dat a obraz možná bude poškozený.\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
+msgstr "Pozor: V okamžiku vkládání vyrovnávací paměti stále jsou ve vyrovnávací paměti tabulky, což vede ke ztrátě dat a obraz možná bude poškozený.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr "při alokaci ext2_qcow2_image"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr "při inicializaci ext2_qcow2_image"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr "Chyba v programu: vytvořeny násobné bloky posloupných počtů odkazů!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr "při alokaci bitmapy bloků"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr "při alokaci bitmapy zatemňovacích bloků"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
 msgstr "Hledají se iuzly…\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr "Nelze alokovat vyrovnávací paměť bloku"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "při procházení iuzlu %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "Obyčejné a QCOW2 obrazy nelze nainstalovat"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr "chyba při čtení bitmap"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr "při otevírání souboru zařízení"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr "při obnovování tabulky obrazu"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "Přepínač -a lze použít jen s s obyčejnými nebo QCOW2 obrazy."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "Přepínač -b lze použít jen s obyčejnými nebo QCOW2 obrazy."
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr "Pozice jsou dovoleny jen u obyčejných obrazů."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr "Režim přesunu je dovolen jen u obyčejných obrazů."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr "Režim přesunu vyžaduje režim všech dat."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr "kontrola na připojení"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4746,46 +4722,51 @@ msgstr ""
 "k nekonzistentnímu obrazu, který se nehodí na ladění.\n"
 "Pokud tak opravdu chcete, použijte přepínač -f.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "QCOW2 obraz nelze zapsat na standardní výstup!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr "Nelze zjistit údaje o výstupu\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "Obraz (%s) je komprimován.\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "Obraz (%s) je zašifrován\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Obraz (%s) je poškozen\n"
+
+#: misc/e2image.c:1683
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr "při pokusu převést obraz qcow2 (%s) do binární obrazu (%s)"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr "Přepínač -c je podporován jen v obyčejném režimu\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "Přepínač -c není při zápisu na standardní výstup podporován\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr "při alokaci check_buf"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr "Přepínač -p je podporován jen v obyčejném režimu\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d bloků již obsahuje data, která se měla zkopírovat\n"
@@ -4815,7 +4796,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:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Varování: jmenovka příliš dlouhá, zkracuji.\n"
@@ -4830,166 +4811,164 @@ 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:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Použití: e2label zařízení [novájmenovka]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
 msgstr ""
-"Použití: %s [-f] [-h] [-n] [-v] <transakční_soubor> <souborový_systém>\n"
+"Použití: %s [-f] [-h] [-n]  [-o pozice] [-v]\n"
+"            [-z soubor_pro_odvolání_změn] <transakční_soubor>\n"
+"            <souborový_systém>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
-msgstr ""
-"Superblok systému souborů se neshoduje se souborem pro odvolání změn.\n"
+msgstr "Superblok systému souborů se neshoduje se souborem pro odvolání změn.\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr "UUID nesouhlasí.\n"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr "Čas posledního připojení neodpovídá.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr "Čas posledního zápisu neodpovídá.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr "Celoživotní počítadlo zápisů neodpovídá.\n"
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr "při čtení superbloku souborového systému."
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr "při čtení superbloku"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "Kontrolní součet superbloku souboru pro odvolání změn neodpovídá.\n"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr "neplatná pozice – %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
-msgstr ""
-"Nebude zapisovat do souboru pro odvolání změn, zatímco se z něj přehrává.\n"
+msgstr "Nebude zapisovat do souboru pro odvolání změn, zatímco se z něj přehrává.\n"
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "při otevírání souboru pro odvolání změn „%s“\n"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 msgid "while reading undo file"
 msgstr "při čtení souboru pro odvolání změn"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: Nejedná se o soubor pro odvolání změn.\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "%s: Kontrolní součet hlavičky neodpovídá.\n"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "%s: Poškozená hlavička souboru pro odvolání změn.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr "%s: Velikost bloku pro odvolání změn je příliš veliká.\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "%s: Velikost bloku pro odvolání změn je příliš malá.\n"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr "%s: Nastaven příznak vlastnosti neznámého souboru pro odvolání změn.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "Chyba při zjišťování, jestli je %s připojen."
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr "e2undo by měl být pouštěn jen na nepřipojených souborových systémech"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, c-format
 msgid "while opening `%s'"
 msgstr "při otevírání „%s“"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr "zadaná pozice je příliš velká"
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 msgid "while reading keys"
 msgstr "při čtení klíčů"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr "%s: chybné signatura klíče na pozici %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr "%s: chyba kontrolního součtu bloku s klíčem na pozici %llu.\n"
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, c-format
 msgid "%s: block %llu is too long."
 msgstr "%s: blok %llu je příliš dlouhý."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, c-format
 msgid "while fetching block %llu."
 msgstr "při čtení bloku %llu."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
-msgstr ""
-"chyba kontrolního součtu v bloku souborového systému %llu (odvolací blok "
-"%llu)\n"
+msgstr "chyba kontrolního součtu v bloku souborového systému %llu (odvolací blok %llu)\n"
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, c-format
 msgid "while writing block %llu."
 msgstr "při zápisu bloku %llu."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr "Soubor pro odvolání změn je poškozený, IHNED spusťte e2fsck!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr "Chyba vstupu-výstupu při přehrávání, IHNED spusťte e2fsck!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr "Neúplný záznam pro odvolání změn, spusťte e2fsck.\n"
@@ -5035,12 +5014,8 @@ msgstr ""
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
-msgstr ""
-"bajt_posun   bajt_začát     bajt_konec ss_bloky velbl  sku  mkfs/"
-"čas_připojení        sb_uuid jmenovka\n"
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+msgstr "bajt_posun   bajt_začát     bajt_konec ss_bloky velbl  sku  mkfs/čas_připojení        sb_uuid jmenovka\n"
 
 #: misc/findsuper.c:264
 #, c-format
@@ -5073,37 +5048,37 @@ msgstr ""
 "\topravit, jak nejdříve budete moci.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: nenalezen\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: Žádný další synovský proces?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Varování… %s pro zařízení %s skončil se signálem %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: stav je %x, nemělo by se nikdy stát.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Dokončen s %s (stav ukončení %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Chyba %d při spouštění fsck.%s pro %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5111,46 +5086,41 @@ msgstr ""
 "Buď všechny nebo žádný typ systému souborů předaný -t musí mít předponu\n"
 "„no“ nebo „!“.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Nemohu alokovat paměť pro typy systému souborů\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, 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"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: nemohu zkontrolovat %s: fsck.%s nenalezen\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Kontrolují se všechny systémy souborů.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 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"
+#: misc/fsck.c:1085
+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
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: příliš mnoho zařízení\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: příliš mnoho argumentů\n"
@@ -5162,47 +5132,44 @@ msgstr "Připojuje se jen pro čtení.\n"
 #: misc/fuse2fs.c:3769
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
-msgstr ""
-"%s: Uživatelé budou mít dovoleno alokovat všechny bloky. To je nebezpečné!\n"
+msgstr "%s: Uživatelé budou mít dovoleno alokovat všechny bloky. To je nebezpečné!\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
 msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr "Spusťte prosím „e2fsck -fy %s“.\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr "Žurnál potřebuje obnovu, je třeba spustit „e2fsck -E journal_only“.\n"
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3812
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "%s: Zapisování do žurnálu není podporováno.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
-msgstr ""
-"Pozor: Připojuje se nezkontrolovaný systém, doporučuje se spustit e2fsck.\n"
+msgstr "Pozor: Připojuje se nezkontrolovaný systém, doporučuje se spustit e2fsck.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
-msgstr ""
-"Pozor: Dosaženo maximálního počtu připojení, doporučuje se spustit e2fsck.\n"
+msgstr "Pozor: Dosaženo maximálního počtu připojení, doporučuje se spustit e2fsck.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr "Pozor: Čas kontroly dosažen, doporučuje se spustit e2fsck.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr "Nalezeni sirotci, doporučuje se spustit e2fsck.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr "Nalezeny chyby, doporučuje se spustit e2fsck.\n"
 
@@ -5226,7 +5193,7 @@ msgstr "Při čtení projektu %s"
 msgid "While reading version on %s"
 msgstr "Při čtení verze %s"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5235,8 +5202,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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 "Použití: %s [-c|-l názevsouboru] [-b velikost-bloku] [-C velkost-clusteru]\n"
@@ -5249,35 +5215,35 @@ msgstr ""
 "\t[-e chování_při_chybě][-z soubor_pro_odvolání_změn]\n"
 "\t[-jnqvDFKSV] zařízení [počet-bloků]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Spouštím příkaz: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "při pokusu spustit „%s“"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "při zpracovávání seznamu špatných bloků z programu"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, 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:295
+#: misc/mke2fs.c:301
 #, 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:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Končím…\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5288,15 +5254,19 @@ msgstr ""
 "\tšpatné bloky.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "při označování špatných bloků jako použité"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "při zápisu vyhrazených iuzlů"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Zapisuji tabulky iuzlů: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5305,77 +5275,77 @@ msgstr ""
 "\n"
 "Nemohu zapsat %d bloků do tabulky iuzlů počínaje %llu: %s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "hotovo                          \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "při vytváření kořenového adresáře"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "při čtení kořenového iuzlu"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "při nastavování vlastnictví kořenového iuzlu"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "při vytváření /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "při vyhledávání /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "při zvětšování /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "při nastavování iuzlu špatných bloků"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, 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:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Varování: nemohu načíst blok 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Varování: nemohu vymazat sektor %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "při inicializaci superbloku žurnálu"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Nuluji zařízení žurnálu: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, 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:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "při zápisu superbloku žurnálu"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "Vytváří se systém souborů s %'llu (%dk) bloky a %'u uzly\n"
 
 # TODO pluralize
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5384,154 +5354,164 @@ msgstr ""
 "pozor: nepoužito %'llu bloků.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Jmenovka systému souborů=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Typ OS: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Velikost bloku=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Velikost clusteru=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Velikost fragmentu=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Krok=%u bloků, Šířka pásu=%u bloků\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u iuzlů, %llu bloků\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, 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:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "První blok dat=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Vlastník kořenového adresáře=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximum bloků v systému souborů=%'lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u skupin bloků\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u skupina bloků\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, 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:702
+#: misc/mke2fs.c:714
 #, 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:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u iuzlů ve skupině\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "UUID systému souborů=%s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Zálohy superbloku uloženy v blocích: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:822
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s vyžaduje „-O 64bit“\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "„%s“ musí být před „resize=%u“\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Neplatná desc_size: „%s“\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Neplatná počáteční hodnota hashe: %s\n"
+
+#: misc/mke2fs.c:867
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Neplatná pozice: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Neplatný interval_aktualizace_mmp: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Neplatný počet záložních superbloků: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Neplatný parametr kroku (stride): %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Neplatný parametr šířka-pásu (stripe-width): %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Neplatný parametr změny velikosti: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:965
 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:959
+#: misc/mke2fs.c:989
 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:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Neplatný vlastník kořenu: „%s“\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1069
+#, c-format
+msgid "Invalid encoding: %s"
+msgstr "Neplatné kódování: %s"
+
+#: misc/mke2fs.c:1087
 #, c-format
 msgid ""
 "\n"
@@ -5554,6 +5534,8 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
@@ -5577,10 +5559,12 @@ msgstr ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<kódování>\n"
+"\tencoding_flags=<příznaky>\n"
 "\tquotatype=<zapnuté druhy kvót>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5591,7 +5575,17 @@ msgstr ""
 "Varování: šířka pruhu RAIDu %u není sudý násobek kroku (stride) %u.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr "chyba: Neplatné příznaky kódování: %s\n"
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr "chyba: Jsou-li předány příznaky kódování, je třeba explicitně určit kódování\n"
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5600,17 +5594,17 @@ msgstr ""
 "Chyba syntaxe v konfiguračním souboru mke2fs (%s, řádek č. %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
-msgstr "Neplatný sada přepínačů systému souborů: %s\n"
+msgstr "Neplatná sada přepínačů systému souborů: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Nastaven neplatný přepínač připojení: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
@@ -5619,7 +5613,7 @@ msgstr ""
 "\n"
 "Váš soubor mke2fs.conf nedefinuje druh souborového systému %s.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5627,11 +5621,11 @@ msgstr ""
 "Pravděpodobně potřebujete nainstalovat aktualizovaný soubor mke2fs.conf.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 msgid "Aborting...\n"
 msgstr "Přerušuje se…\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5642,151 +5636,146 @@ msgstr ""
 "Pozor: fs_type (druh SS) %s není v mke2fs.conf definován\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Nemohu alokovat paměť pro novou proměnnou PATH.\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1608
 #, 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:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "špatná velikost bloku – %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, 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:1588
+#: misc/mke2fs.c:1661
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "špatná velikost clusteru – %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "Přepínač „-R“ je zastaralý, použijte místo něj „-E“"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "špatné chování při chybách - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr "Neplatný počet bloků ve skupině"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 msgid "blocks per group must be multiple of 8"
 msgstr "bloky ve skupině musí být násobek 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "Neplatné číslo pro velikost flex_bg"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
 msgstr "Velikost flex_bg musí být mocninou 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "Velikost flex_bg (%lu) musí menší nebo rovna 2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "špatný podíl iuzlů %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1744
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "špatná velikost iuzlu – %s"
 
-#: misc/mke2fs.c:1684
-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:1757
+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:1695
+#: misc/mke2fs.c:1768
 msgid "in malloc for bad_blocks_filename"
 msgstr "v malloc pro bad_blocks_filename"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1777
 #, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr "Pozor: jmenovka je příliš dlouhá, bude zkrácena na „%s“\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "špatné procento rezervovaných bloků – %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "chybný počet iuzlů – %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1814
 msgid "while allocating fs_feature string"
 msgstr "při alokaci řetězce fs_feature"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1831
 #, c-format
 msgid "bad revision level - %s"
 msgstr "špatné číslo revize – %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "při pokusu vytvořit revizi %d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 msgid "The -t option may only be used once"
 msgstr "Přepínač -t lze použít jen jednou"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1858
 msgid "The -T option may only be used once"
 msgstr "Přepínač -T lze použít jen jednou"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, 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:1847
+#: misc/mke2fs.c:1920
 #, 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:1853
+#: misc/mke2fs.c:1926
 #, 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:1864
+#: misc/mke2fs.c:1937
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "špatné bloky „%s“ na zařízení „%s“"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "systém souborů"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "při pokusu zjistit velikost systému souborů"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5794,7 +5783,7 @@ msgstr ""
 "Nemohu zjistit velikost zařízení; musíte zadat\n"
 "velikost systému souborů\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5806,46 +5795,48 @@ 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:1931
+#: misc/mke2fs.c:2015
 msgid "Filesystem larger than apparent device size."
 msgstr "Systém souborů větší než velikost zařízení."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:2035
 msgid "Failed to parse fs types list\n"
 msgstr "Seznam druhů souborových systému se nezdařilo rozebrat\n"
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2085
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "Hurd nepodporuje vlastnost filetype (druh souboru).\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2090
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "Hurd nepodporuje vlastnost huge_file (velký soubor).\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "Hurd nepodporuje vlastnost metadata_csum (kontrolní součet metadat).\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2100
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "Hurd nepodporuje vlastnost ea_inode (iuzly rozšířených atributů).\n"
+
+#: misc/mke2fs.c:2110
 msgid "while trying to determine hardware sector size"
 msgstr "při pokusu zjistit velikost hardwarového sektoru"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2116
 msgid "while trying to determine physical sector size"
 msgstr "při pokusu určit velikost fyzického sektoru"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2148
 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:2062
+#: misc/mke2fs.c:2153
 #, 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:2086
+#: misc/mke2fs.c:2177
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5854,93 +5845,91 @@ 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:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2191
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 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"
+"%s: Velikost zařízení (0x%llx bloků) %s je příliš velká, aby bylo\n"
+"možné vytvořit souborový systém za použití bloku o velikosti %d.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "fs_types (druhy SS) pro řešení v mke2fs.conf: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 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:2135
+#: misc/mke2fs.c:2228
 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:2145
+#: misc/mke2fs.c:2238
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Revize 0 systému souborů žurnály nepodporuje\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2251
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "špatné procento rezervovaných bloků – %lf"
 
-#: misc/mke2fs.c:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
 msgstr ""
 "Rozsahy MUSÍ být u 64bitových souborových systémů zapnuty. Toho docílíte\n"
 "zadáním „-O extents“.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "Velikost clusteru nemusí být menší než velikost bloku.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "definice velikosti clusteru vyžaduje vlastnost bigalloc"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, 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:2224
+#: misc/mke2fs.c:2317
 #, 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:2226
+#: misc/mke2fs.c:2319
 #, 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:2247
+#: misc/mke2fs.c:2340
 #, 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:2251
+#: misc/mke2fs.c:2344
 #, 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:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
-msgstr ""
-"Návrh: Pro vyšší stabilitu metadat a schopnost kontrolních součtů žurnálu "
-"použijte linuxové jádro >= 3.18.\n"
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "Návrh: Pro vyšší stabilitu metadat a schopnost kontrolních součtů žurnálu použijte linuxové jádro >= 3.18.\n"
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
+msgstr "Neznámé kódování názvů souborů v profilu: %s"
+
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr "Neznámé příznaky kódování v profilu: %s"
+
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -5955,11 +5944,24 @@ msgstr ""
 "nemusí být to, co chcete.\n"
 "\n"
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2449
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr "%dbajtové iuzly jsou příliš malé pro projektové kvóty"
+
+#: misc/mke2fs.c:2465
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Vlastnosti encrypt a casefold nejsou slučitelné.\n"
+"Obě nemohou být zapnuty současně.\n"
+
+#: misc/mke2fs.c:2480
 msgid "Can't support bigalloc feature without extents feature"
 msgstr "Vlastnost bigalloc nelze bez vlastnosti rozsahů zapnout"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -5967,7 +5969,7 @@ msgstr ""
 "Vlastnosti resize_inode a meta_bg nejsou slučitelné.\n"
 "Obě nemohou být zapnuty současně.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5979,49 +5981,41 @@ msgstr ""
 "Podrobnosti naleznete na <https://ext4.wiki.kernel.org/index.php/Bigalloc>.\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 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:2367
+#: misc/mke2fs.c:2516
 msgid "blocks per group count out of range"
 msgstr "počet bloků ve skupině mimo rozsah"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2538
 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:2401
+#: misc/mke2fs.c:2550
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "špatná velikost iuzlu %d (min %d/max %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
-msgstr ""
-"%dbajtové iuzly jsou příliš malé pro vestavěná data. Zadejte větší velikost."
-
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-"%dbajtové iuzly jsou příliš malé pro projektové kvóty. Zadejte větší "
-"velikost."
+msgstr "%dbajtové iuzly jsou příliš malé pro vestavěná data. Zadejte větší velikost."
 
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "příliš mnoho iuzlů (%'llu), zvýšit poměr iuzlů?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2587
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "příliš mnoho iuzlů (%'llu), zadejte < 2^32 iuzlů"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2601
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -6032,75 +6026,72 @@ 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:2652
+#: misc/mke2fs.c:2788
 msgid "Discarding device blocks: "
 msgstr "Zahazují se bloky zařízení: "
 
 # Continuation of "Calling BLKDISCARD from %llu to %llu "
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 msgid "failed - "
 msgstr "selhalo – "
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2863
 msgid "while initializing quota context"
 msgstr "při inicializaci kontextu kvót"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2870
 msgid "while writing quota inodes"
 msgstr "při zápisu iuzlů kvót"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2895
 #, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "v profilu je špatné chování při chybě - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2971
+msgid "in malloc for android_sparse_params"
+msgstr "v malloc pro android_sparse_params"
+
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "při nastavování superbloku"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
 msgstr ""
 "Rozsahy nejsou zapnuty. Strom rozsahů souborů může být kontrolován součty,\n"
 "zatímco mapy bloků nikoliv. Nezapnutí rozsahů snižuje pokrytí metadat\n"
 "kontrolními součty. Situaci lze napravit uvedením -O extents.\n"
 
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
 "Podpora 64bitového souborového systému není zapnuta. Větší položky dostupné\n"
 "s touto vlastností umožňují silnější kontrolní součty. Situaci lze napravit\n"
 "uvedením -I 64bit.\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
+#: misc/mke2fs.c:3016
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
 msgstr "Vlastnost metadata_csum_seed vyžaduje vlastnost metadata_csum.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 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:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "neznámý os – %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 msgid "Allocating group tables: "
 msgstr "Alokují se tabulky skupin: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr "při pokusu alokovat tabulky systému souborů"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6108,30 +6099,30 @@ msgstr ""
 "\n"
 "\tpři převodu bitmapy subclusterů"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr "%s může být dále poškozen přepsáním superbloku\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, 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:3114
+#: misc/mke2fs.c:3279
 msgid "while reserving blocks for online resize"
 msgstr "při rezervaci bloků pro změnu velikosti za běhu"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "žurnál"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Přidávám žurnál k zařízení %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
@@ -6140,21 +6131,21 @@ msgstr ""
 "\n"
 "\tpři pokusu přidat žurnál k zařízení %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "hotovo\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 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:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Vytváří se žurnál (%'u bloků): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6162,7 +6153,7 @@ msgstr ""
 "\n"
 "\tpři pokusu vytvořit žurnál"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
@@ -6171,35 +6162,28 @@ msgstr ""
 "Chyba při zapínání ochrany proti násobnému připojení."
 
 # TODO: Pluralize
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3357
 #, 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:3210
+#: misc/mke2fs.c:3373
 msgid "Copying files into the device: "
 msgstr "Kopírování souborů na zařízení: "
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3379
 msgid "while populating file system"
 msgstr "při naplňování souborového systému"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Zapisuji superbloky a účtovací informace systému souborů: "
 
-#: misc/mke2fs.c:3230
-#, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Varování, měl jsem problémy při zápisu superbloků."
+#: misc/mke2fs.c:3393
+msgid "while writing out and closing file system"
+msgstr "při zapisování a uzavírání systému souborů"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6207,30 +6191,33 @@ msgstr ""
 "hotovo\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
-msgstr ""
-"Odsazení oddílu %llu (%uk) bloků není slučitelné s velikostí clusteru %u.\n"
+msgid "while zeroing block %llu for hugefile"
+msgstr "při nulování bloku %llu pro obrovský soubor (hugefile)"
+
+#: misc/mk_hugefiles.c:515
+#, c-format
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgstr "Odsazení oddílu %llu (%uk) bloků není slučitelné s velikostí clusteru %u.\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
 msgstr "Velké soubory budou vynulovány\n"
 
 # TODO: pluralize
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:584
 #, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "Vytváří se %lu velkých souborů "
 
 # TODO pluralize
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:586
 #, c-format
 msgid "with %llu blocks each"
 msgstr "každý o %'llu blocích"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:595
 #, c-format
 msgid "while creating huge file %lu"
 msgstr "při vytváření velkého souboru %lu"
@@ -6275,23 +6262,29 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   začátek=%8d velikost=%8lu konec=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "Spusťte prosím na tomto systému souborů e2fsck -D.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+"\n"
+"Tato operace vyžaduje nově zkontrolovaný souborový systém.\n"
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Spusťte prosím na tomto systému souborů e2fsck -f.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "Spusťte prosím na tomto systému souborů e2fsck -D.\n"
+msgstr "Spusťte prosím na tomto systému souborů e2fsck -fD.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
@@ -6299,31 +6292,39 @@ msgstr ""
 "Použití: %s [-c max_počet_připojení] [-e chování_při_chybách] [-f]\n"
 "\t[-g skupina] [-i interval[d|m|w]] [-j] [-J přepínače_žurnálu] [-l]\n"
 "\t[-m procento_rezervovaných_bloků] [-o [^]přepínače_připojení[,…]]\n"
-"\t[-p interval_aktualizace_mmp] [-r počet_rezervovaných_bloků]\n"
-"\t[-u uživatel] [-C počet_připojení] [-L jmenovka_svazku]\n"
-"\t[-M poslední_adresář_připojení] [-O [^]vlastnost[,…]]\n"
-"\t[-Q přepínače_kvót]\n"
+"\t[-r počet_rezervovaných_bloků] [-u uživatel] [-C počet_připojení]\n"
+"\t[-L jmenovka_svazku] [-M poslední_adresář_připojení]\n"
+"\t[-O [^]vlastnost[,…]] [-Q přepínače_kvót]\n"
 "\t[-E rozšířený_přepínač[,…]] [-T čas_poslední_kontroly] [-U UUID]\n"
 "\t[-I nová_velikost_iuzlu] [-z soubor_pro_odvolání_změn] zařízení\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Superblok žurnálu nenalezen!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "při pokusu otevřít externí žurnál"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s není zařízení žurnálu.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr ""
+"Superblok žurnálu je poškozený, hodnota nr_users\n"
+"je příliš vysoká (%d).\n"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "UUID systému souborů nenalezeno na zařízení žurnálu.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6331,52 +6332,52 @@ msgstr ""
 "Zařízení žurnálu nelze nalézt. Odstraněno NEBYLO.\n"
 "Chybějící zařízení žurnálu lze odebrat přepínačem -f.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "Žurnál odstraněn\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "při čtení bitmap"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
 msgstr "při čištění iuzlu žurnálu"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "při zápisu iuzlu žurnálu"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(a po té rebootujte!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr "Po dokončení e2fsck spusťte, prosím, „resize2fs %s %s"
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:489
 #, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr "Spusťte, prosím, „resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
 msgstr " -z „%s“"
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:495
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr "“, abyste zapnuli 64bitový režim.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:497
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr "“, abyste vypnuli 64bitový režim.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
@@ -6384,17 +6385,17 @@ msgstr ""
 "POZOR: Nebylo možné potvrdit podporu pro metadata_csum_seed v jádře.\n"
 "Tato vlastnost vyžaduje Linux >= v4.4.\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Odstranění vlastnosti systému souborů „%s“ není podporováno.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Nastavená vlastnosti systému souborů „%s“ není podporováno.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6402,7 +6403,7 @@ msgstr ""
 "Příznak has_journal může být vymazán jen, když je systém souborů\n"
 "odpojen nebo připojen jen pro čtení.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6410,7 +6411,7 @@ msgstr ""
 "Příznak needs_recovery je nastaven. Před vymazáním příznaku has_journal\n"
 "prosím spusťte e2fsck.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
@@ -6418,7 +6419,7 @@ msgstr ""
 "Na souborových systémech se zapnutou vlastností meta_bg není nastavení\n"
 "vlastnosti „sparse_super“ podporováno.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6427,14 +6428,12 @@ msgstr ""
 "Ochranu před násobným připojením nelze nastavit,\n"
 "pokud je systém souborů připojen nebo je-li jen pro čtení.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1143
 #, 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:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6442,21 +6441,20 @@ msgstr ""
 "Ochranu před násobným přijením nelze vypnout,\n"
 "je-li souborový systém jen pro čtení.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 msgid "Error while reading bitmaps\n"
 msgstr "Chyba při čtení bitmap\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, 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:1113
+#: misc/tune2fs.c:1174
 msgid "while reading MMP block."
 msgstr "při čtení bloku MMP."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
@@ -6464,7 +6462,7 @@ msgstr ""
 "Odstranění příznaku flex_bg by mohlo způsobit nekonzistenci systému\n"
 "souborů.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6472,61 +6470,52 @@ msgstr ""
 "Příznak huge_file může být vymazán jen, když je systém souborů\n"
 "odpojen nebo připojen jen pro čtení.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
 msgstr "Zapnutí kontrolních součtů by mohlo trvat nějakou dobu."
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr "Na připojeném souborovém systému nelze zapnout metadata_csum!\n"
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
 msgstr ""
 "Rozsahy nejsou zapnuty. Strom rozsahů souborů může být prověřen na\n"
 "kontrolní součty, ale mapy bloků nikoliv. Nezapnutí rozsahů snižuje pokrytí\n"
 "metadat kontrolními součty. Situaci lze napravit spuštěním s -O extent.\n"
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
 msgstr ""
 "Podpora pro 64bitový souborový systém není zapnuta. Větší položky dostupné\n"
 "s touto podporou umožní silnější kontrolní součty. Situaci lze napravit\n"
 "spuštěním resize2fs -b.\n"
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
 msgstr "Vypnutí kontrolních součtů by mohlo trvat nějakou dobu."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr "Na připojeném souborovém systému nelze vypnout metadata_csum!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr "64bitový režim nelze zapnout, je-li systém připojen!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr "64bitový systém nelze vypnout, je-li systém připojen!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
-msgstr ""
-"\n"
-"Pozor: je zapnut projekt bez kvót\n"
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
+msgstr "Nelze zapnout vlastnost projekty, velikost iuzlu je příliš malá.\n"
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6534,7 +6523,11 @@ msgstr ""
 "\n"
 "Pozor: přepínač „^quota“ přebije argumenty „–Q“.\n"
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr "Na souborových systémech se zapnutou vlastností encoding nelze zapnout vlastnost encrypt.\n"
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
@@ -6542,20 +6535,23 @@ msgstr ""
 "Nastavení vlastnosti „metadata_csum_seed“ je podporováno jen\n"
 "na souborových systémech se zapnutou vlastností metadata_csum.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
 "Od zapnutí metadata_csum se UUID změnilo. Aby se bezpečně přepsala\n"
 "všechna metadata na nové UUID, souborový systém musí být odpojen.\n"
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr "Přepočet kontrolních součtů by mohlo trvat nějakou dobu."
+
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "Systém souborů již žurnál má.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, c-format
 msgid ""
 "\n"
@@ -6564,21 +6560,21 @@ msgstr ""
 "\n"
 "\tpři pokusu otevřít žurnál na %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Vytváří se žurnál na zařízení %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "při přidávání systému souborů do žurnálu na %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "Vytváří se iuzel žurnálu: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6586,32 +6582,36 @@ msgstr ""
 "\n"
 "\tpři pokusu vytvořit soubor žurnálu"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr "Nelze zapnout projektové kvóty, iuzel je příliš malý.\n"
+
+#: misc/tune2fs.c:1588
 msgid "while initializing quota context in support library"
 msgstr "při inicializaci kontextu kvóty v podpůrné knihovně"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1603
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr "při aktualizaci hodnot kvót (%d)"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1611
 #, c-format
 msgid "while writing quota file (%d)"
 msgstr "při zápisu souboru s kvótami (%d)"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "while removing quota file (%d)"
 msgstr "při odstraňovaní souboru s kvótami (%d)"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6628,100 +6628,98 @@ msgstr ""
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Nemohu zpracovat určení data/času: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "špatný počet připojení - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "špatné gid/jméno skupiny - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "Špatný interval - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "špatný podíl rezervovaných bloků - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
 msgid "-o may only be specified once"
 msgstr "-o může být zadáno jen jednou"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
 msgid "-O may only be specified once"
 msgstr "-O může být zadáno jen jednou"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "špatný počet rezervovaných bloků - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "špatné uid/jméno uživatele - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "špatná velikost iuzlu – %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Velikost iuzlu musí být mocnina dvou – %s"
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "interval_aktualizace_mmp je příliš velký: %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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:2078
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "Nastavuje se příznak chyby souborového systému, aby se vynutila jeho kontrola.\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Neplatný kroku (stride) RAIDu: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Neplatná šířka pruhu RAIDu (stripe-width): %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2126
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Neplatný hashovací algoritmus: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2132
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Implicitní hashovací algoritmus se nastavuje na %s (%d)\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2151
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6733,8 +6731,10 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -6748,36 +6748,38 @@ msgstr ""
 "\tclear_mmp\n"
 "\thash_alg=<hashovací algoritmus>\n"
 "\tmount_opts=<rozšířené přepínače implicitní při připojení>\n"
+"\tmmp_update_interval=<interval aktualizace mmp v sekundách>\n"
 "\tstride=<velikost shluku (chunk) na jednom raidovém disku v blocích>\n"
 "\tstripe_width=<krok (stride) RAIDu * datových disků v blocích>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 msgid "Failed to read inode bitmap\n"
 msgstr "Čtení bitmapy iuzlů selhalo.\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 msgid "Failed to read block bitmap\n"
 msgstr "Čtení bitmapy bloků selhalo\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "bloky pro přesun"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 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:2550
+#: misc/tune2fs.c:2653
 msgid "Not enough space to increase inode size \n"
 msgstr "Nedostatek místa pro zvětšení iuzlu\n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2658
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "Během změny velikosti iuzlu selhala realokace bloků\n"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6785,7 +6787,15 @@ 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:2799
+#: misc/tune2fs.c:2900
+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"
+"„tune2fs -f -E clear_mmp ZAŘÍZENÍ“\n"
+
+#: misc/tune2fs.c:2907
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
@@ -6794,74 +6804,96 @@ msgstr ""
 "Magické číslo bloku MMP je chybné. Můžete jej zkusit opravit pomocí:\n"
 "„e2fsck -f %s“\n"
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2919
 msgid "Cannot modify a journal device.\n"
 msgstr "Zařízení žurnálu nelze upravit.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Velikost iuzlu již je %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 msgid "Shrinking inode size is not supported\n"
 msgstr "Zmenšování velikosti iuzlu není podporováno\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "špatná velikost iuzlu %lu (max %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
 msgstr "Změna velikosti iuzlů by mohla trvat nějakou dobu."
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+"Pozor: Žurnál není čistý. Možná si budete přát přehrát žurnál takto:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"Pak tento příkaz spusťte znovu. Jinak jakékoliv provedené změny mohou být\n"
+"přepsány při obnově žurnálu.\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Obnovuje se žurnál.\n"
+
+#: misc/tune2fs.c:3028
 #, 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:2895
+#: misc/tune2fs.c:3034
 #, 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:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Nastavuje se chování při chybách na %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Nastavuje se GID rezervovaných bloků na %lu\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3049
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "interval mezi kontrolami je příliš dlouhý (%'lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3056
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Interval mezi kontrolami se nastavuje na %'lu sekund\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3063
 #, 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:2930
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "počet rezervovaných bloků je příliš velký (%'llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3076
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Počet rezervovaných bloků se nastavuje na %'llu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3081
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6869,7 +6901,7 @@ msgstr ""
 "\n"
 "Systém souborů již má řídké superbloky.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6879,7 +6911,7 @@ msgstr ""
 "Na souborových systémech se zapnutou vlastností meta_bg není nastavení\n"
 "příznaku řídkého superbloku podporováno.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
@@ -6888,7 +6920,7 @@ msgstr ""
 "\n"
 "Příznak řídkých superbloků nastaven.  %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6896,143 +6928,114 @@ msgstr ""
 "\n"
 "Odstranění příznaku řídkého superbloku není podporováno.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, 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:2974
+#: misc/tune2fs.c:3113
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Nastavuje se UID rezervovaných bloků na %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3145
 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:3024
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
+#: misc/tune2fs.c:3163
+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:3048
+#: misc/tune2fs.c:3181
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "Nastavení UUID na tomto souborovém systému může nějakou dobu trvat."
+
+#: misc/tune2fs.c:3196
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr "UUID smí být změněno, jen když je systém souborů odpojen.\n"
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
 msgstr ""
 "Pouze pokud používáte jádra novější než v4.4, spusťte\n"
 "„tune2fs -O metadata_csum_seed“ a poté znovu tento příkaz.\n"
 
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr ""
-"Nastavení UUID na souborovém systému s kontrolnímu součty může nějakou dobu "
-"trvat."
-
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "Neplatný formát UUID\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 msgid "Need to update journal superblock.\n"
 msgstr "Je třeba aktualizovat superblok žurnálu.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 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:3133
+#: misc/tune2fs.c:3274
 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:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Velikost iuzlu se nastavuje na %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 msgid "Failed to change inode size\n"
 msgstr "Změna velikosti iuzlu selhala.\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Velikost kroku (stride) se nastavuje na %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Šířka pruhu (stripe width) se nastavuje na %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3322
 #, 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"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-"Pozor: Žurnál není čistý. Možná si budete přát přehrát žurnál takto:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"Pak tento příkaz spusťte znovu. Jinak jakékoliv provedené změny mohou být\n"
-"přepsány při obnově žurnálu.\n"
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr "Obnovuje se žurnál.\n"
-
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr "<pokračuje se>\n"
 
 # TODO: Pluralize
-#: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Přesto pokračovat (nebo počkat %d sekund)? (a,n) "
+#: misc/util.c:105
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "Přesto pokračovat (nebo počkat %d sekund do pokračování)? (a,N) "
 
-#: misc/util.c:108
-#, fuzzy
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
-msgstr "Přesto pokračovat? (a,n) "
+msgstr "Přesto pokračovat? (a,N) "
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "mke2fs přesto vynucen. Doufám, že /etc/mtab je nesprávná.\n"
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr "nebudu tady vytvářet %s!\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr "mke2fs stejně vynucen.\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr "Nemohu alokovat paměť pro zpracování přepínačů žurnálu!\n"
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
@@ -7041,7 +7044,7 @@ msgstr ""
 "\n"
 "Nebylo možné najít žurnálovací zařízení odpovídající %s\n"
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -7071,7 +7074,7 @@ msgstr ""
 "Velikost žurnálu musí být mezi 1024 a 10240000 bloky systému souborů.\n"
 "\n"
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
@@ -7079,7 +7082,7 @@ msgstr ""
 "\n"
 "Systém souborů příliš malý na žurnál\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -7090,7 +7093,7 @@ msgstr ""
 "Požadovaná velikost žurnálu je %'d bloků; musí být\n"
 "mezi 1024 a 102400 bloky. Končím.\n"
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
@@ -7098,15 +7101,14 @@ msgstr ""
 "\n"
 "Velikost žurnálu příliš velká pro systém souborů.\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
 "%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:49
 #, c-format
@@ -7255,44 +7257,43 @@ msgstr "#\tČís=%llu, Velikost=%llu, Kurzor=%llu, Seřazeno=%llu\n"
 #: resize/main.c:49
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
 "Použití: %s [-d ladicí_přepínače] [-f] [-F] [-M] [-P] [-p]\n"
-"         zařízení [-b|-s|nová_velikost] [-z soubor_s_historií]\n"
+"         zařízení [-b|-s|nová_velikost] [-S krok_RAIDu] [-z soubor_s_historií]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Zvětšuji tabulku iuzlů"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Přesouvám bloky"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Procházím tabulku iuzlů"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Aktualizuji odkazy na iuzly"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Přesouvám tabulku iuzlů"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Neznámý průchod?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Začátek průchodu %d (max = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7305,17 +7306,17 @@ msgstr ""
 "použijte přepínač vynucení.\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "při otevírání %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "při zjišťování stat informací o %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7324,30 +7325,30 @@ msgstr ""
 "Spusťte prosím nejdříve „e2fsck -f %s“.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Odhadovaná minimální velikost systému souborů: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Chybná nová velikost: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 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:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Nová velikost je menší než minimum (%llu)\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Neplatná délka kroku"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7358,35 +7359,31 @@ msgstr ""
 "Požadovali jste novou velikost %'llu bloků.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr "Vlastnost 64 bitů nelze zapnout a vypnout.\n"
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
 msgstr ""
 "Na souborovém systému, který je větší než 2^32 bloků, nelze přepnout\n"
 "vlastnost 64 bitů.\n"
 
-#: resize/main.c:575
+#: resize/main.c:581
 #, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr "Je-li systém souborů připojen, vlastnost 64 bitů nelze přepnout.\n"
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
 msgstr ""
 "Před tím než zapnete vlastnost 64 bitů, prosím, nejprve zapněte vlastnost\n"
 "rozsahy pomocí tune2fs.\n"
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
@@ -7395,37 +7392,37 @@ msgstr ""
 "Souborový systém již je dlouhý %'llu (%dk) bloků. Není co dělat!\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "Systém souborů již je 64bitový.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "Systém souborů již je 32bitový.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "Souborový systém se převádí do 64 bitů.\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "Souborový systém se převádí do 32 bitů.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, 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:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "při pokusu změnit velikost %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7434,7 +7431,7 @@ msgstr ""
 "Po přerušené změně velikosti, prosím, opravte souborový systém pomocí\n"
 "„e2fsck -fy %s“\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7443,7 +7440,7 @@ msgstr ""
 "Systém souborů na %s je nyní %'llu (%dk) bloků dlouhý.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "při pokusu zkrátit %s"
@@ -7506,56 +7503,48 @@ msgstr "Mění se velikosti za běhu %s na %'llu (%dk) bloků.\n"
 msgid "While trying to extend the last group"
 msgstr "Při pokusu rozšířit poslední skupinu"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Při pokusu přidat skupinu č. %d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, 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:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "iuzlů (%'llu) musí být méně než %'u"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "iuzlů (%'llu) musí být méně než %'u\n"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "rezervované bloky"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "bloky meta-dat"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr "nové meta bloky"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
-msgstr ""
-"Toto by nikdy nemělo stát! žádný superblok v posledním super_sparse bg?\n"
+msgstr "Toto by nikdy nemělo stát! žádný superblok v posledním super_sparse bg?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
-msgstr ""
-"Toto by se nikdy nemělo stát! Neočekávaný old_desc v super_sparse bg?\n"
+msgstr "Toto by se nikdy nemělo stát! Neočekávaný old_desc v super_sparse bg?\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 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.43.4-WIP"
-msgstr "Knihovna EXT2FS verze 1.43"
+msgid "EXT2FS Library version 1.45.3"
+msgstr "Knihovna EXT2FS verze 1.45.3"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -8100,14 +8089,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"
@@ -8118,8 +8104,8 @@ msgid "MMP: device currently active"
 msgstr "MMP: zařízení je právě aktivní"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
-msgstr "MMP: právě běží kontrola souborového systému"
+msgid "MMP: e2fsck being run"
+msgstr "MMP: e2fsck právě běží"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
@@ -8174,8 +8160,8 @@ msgid "Unknown checksum algorithm"
 msgstr "Neznámý algoritmus kontrolního součtu"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr "Kontrolní součet bloku MMP neodpovídá bloku MMP"
+msgid "MMP block checksum does not match"
+msgstr "Kontrolní součet bloku MMP neodpovídá"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
@@ -8267,9 +8253,12 @@ msgid "The journal superblock is corrupt"
 msgstr "Superblok žurnálu je poškozený"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "Iuzel určený pro změnu velikosti je poškozený"
+msgstr "Iuzel je poškozený"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr "Iuzel obsahující hodnotu rozšířeného atributu je poškozený"
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8463,13 +8452,106 @@ msgstr "%s obsahuje systém souborů %s\n"
 msgid "%s contains `%s' data\n"
 msgstr "%s obsahuje data „%s“\n"
 
+#~ msgid "while opening directory \"%s\""
+#~ msgstr "při otevírání adresáře „%s“"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** Na souborovém systému byly nalezeny chyby kontrolního součtu!\n"
+#~ "*** Okamžitě spusťte e2fsck!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** V bitmapách byly nalezeny chyby kontrolního součtu!\n"
+#~ "*** Okamžitě spusťte e2fsck!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %s: chyba při čtení bitmap: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Pozor, byly problémy se zápisem superbloků.\n"
+
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "i_dir_acl pro iuzel %i (%Q) je %N, mělo by být nula.\n"
+
+#~ msgid "Journal features:        "
+#~ msgstr "Vlastnosti žurnálu:      "
+
+#~ msgid "Journal size:             "
+#~ msgstr "Velikost žurnálu:         "
+
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "Délka žurnálu:            %u\n"
+#~ "Sekvence žurnálu:         0x%08x\n"
+#~ "Začátek žurnálu:          %u\n"
+
+#~ msgid "Journal checksum type:    crc32\n"
+#~ msgstr "Typ kontrolního součtu žurnálu: crc32\n"
+
+#~ msgid ""
+#~ "Journal checksum type:    %s\n"
+#~ "Journal checksum:         0x%08x\n"
+#~ msgstr ""
+#~ "Typ kontrolního součtu žurnálu: %s\n"
+#~ "Kontrolní součet žurnálu:       0x%08x\n"
+
+#~ msgid "Journal errno:            %d\n"
+#~ msgstr "Chybové číslo žurnálu:    %d\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Velikost bloku žurnálu:   %u\n"
+#~ "Délka žurnálu:            %u\n"
+#~ "První blok žurnálu:       %u\n"
+#~ "Sekvence žurnálu:         0x%08x\n"
+#~ "Začátek žurnálu:          %u\n"
+#~ "Počet uživatelů žurnálu:  %u\n"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "Uživatelé žurnálu:        %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning: enabled project without quota together\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Pozor: je zapnut projekt bez kvót\n"
+
 #~ msgid "Please run e2fsck on the filesystem.\n"
 #~ msgstr "Spusťte prosím na tomto systému souborů e2fsck.\n"
 
 #~ 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. "
 
 #~ msgid "@A @a @b %b.  "
 #~ msgstr "Chyba při alokaci bloku rozšířených atributů %b. "
@@ -8532,12 +8614,8 @@ msgstr "%s obsahuje data „%s“\n"
 #~ msgid "%s is entire device, not just one partition!\n"
 #~ msgstr "%s je celé zařízení, ne jen jeden oddíl!\n"
 
-#~ msgid ""
-#~ "\b\b\b\b\b\b\b\bCopied %llu / %llu blocks (%llu%%) in %s at %.2f MB/"
-#~ "s       \n"
-#~ msgstr ""
-#~ "\b\b\b\b\b\b\b\bZkopírováno %llu/%llu bloků (%llu %%) do %s při %.2f MB/"
-#~ "s       \n"
+#~ msgid "\b\b\b\b\b\b\b\bCopied %llu / %llu blocks (%llu%%) in %s at %.2f MB/s       \n"
+#~ msgstr "\b\b\b\b\b\b\b\bZkopírováno %llu/%llu bloků (%llu %%) do %s při %.2f MB/s       \n"
 
 #~ msgid ""
 #~ "\n"
@@ -8564,13 +8642,10 @@ msgstr "%s obsahuje data „%s“\n"
 #~ "\t!resize_inode není podporována nástrojem resize2fs.\n"
 
 #~ 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"
@@ -8631,9 +8706,7 @@ msgstr "%s obsahuje data „%s“\n"
 #~ 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 iterator function"
 #~ msgstr "při volání funkce iterátoru"
@@ -8652,8 +8725,7 @@ msgstr "%s obsahuje data „%s“\n"
 #~ 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"
@@ -8671,8 +8743,7 @@ msgstr "%s obsahuje data „%s“\n"
 #~ "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 ""
@@ -8682,8 +8753,7 @@ msgstr "%s obsahuje data „%s“\n"
 #~ "\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"
 
@@ -8732,8 +8802,7 @@ msgstr "%s obsahuje data „%s“\n"
 #~ 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"
@@ -8767,17 +8836,6 @@ msgstr "%s obsahuje data „%s“\n"
 #~ "--------\n"
 #~ "%8d souborů\n"
 
-#~ msgid ""
-#~ "Extended options are separated by commas, and may take an argument which\n"
-#~ "is set off by an equals ('=') sign.  Valid raid options are:\n"
-#~ "\tea_ver=<ea_version (1 or 2)\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Rozšířené přepínače jsou odděleny čárkami a mohou mít argument, který je\n"
-#~ "oddělen znaménkem rovná se („=“). Platné přepínače raid jsou:\n"
-#~ "\tea_ver=<verze_ea (1 nebo 2)\n"
-#~ "\n"
-
 #~ msgid "done                        \n"
 #~ msgstr "hotovo                      \n"
 
index 5eb1e11..be8c624 100644 (file)
Binary files a/po/da.gmo and b/po/da.gmo differ
index 04e17d8..bf44f21 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -4,7 +4,7 @@
 #     by Theodore Ts'o
 # This file is distributed under the same license as the e2fsprogs package.
 # Theodore Ts'o <tytso@mit.edu>, 2012.
-# Joe Hansen <joedalton2@yahoo.dk>, 2012, 2014, 2015, 2016.
+# Joe Hansen <joedalton2@yahoo.dk>, 2012, 2014, 2015, 2016, 2017.
 #
 #. 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,
@@ -50,7 +50,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.43.1\n"
+"Project-Id-Version: e2fsprogs 1.44.3-rc1\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2016-06-20 22:00+0200\n"
+"POT-Creation-Date: 2018-08-18 21:03-0400\n"
+"PO-Revision-Date: 2018-08-12 22:00+0200\n"
 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
 "Language: da\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Ugyldig blok %u uden for interval; ignoreret\n"
@@ -95,11 +96,12 @@ msgstr "under tilregnelighedskontrol af de ugyldige blokkes iknude"
 msgid "while reading the bad blocks inode"
 msgstr "under læsning af de ugyldige blokkes iknude"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1550
+#: e2fsck/unix.c:1664 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1404
+#: misc/e2image.c:1588 misc/e2image.c:1609 misc/mke2fs.c:236
+#: misc/tune2fs.c:2837 misc/tune2fs.c:2931 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "under åbning af %s"
@@ -109,7 +111,7 @@ msgstr "under åbning af %s"
 msgid "while trying popen '%s'"
 msgstr "under popen af »%s«"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "under læsning i liste over ødelagte blokke fra fil"
 
@@ -122,6 +124,10 @@ msgstr "under opdatering af ødelagt blok-iknude"
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr "Advarsel: Ugyldig blok %u fundet i ødelagt blok-iknude. Ryddet.\n"
 
+#: e2fsck/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "under frigørelse af dir_info-fil"
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -197,12 +203,12 @@ msgstr "BLKFLSBUF ioctl er ikke understøttet! Kan ikke tømme mellemlagre.\n"
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Brug: %s [-F] [-I inode_buffer_blocks] enhed\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1075
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "under åbning af %s for tømning"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1081 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "under forsøg på at tømme %s"
@@ -212,11 +218,11 @@ msgstr "under forsøg på at tømme %s"
 msgid "while trying to open '%s'"
 msgstr "under åbning af »%s«"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1297
 msgid "while opening inode scan"
 msgstr "under åbing af iknudeskanning"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1316
 msgid "while getting next inode"
 msgstr "under indhentelse af tekstiknude"
 
@@ -225,358 +231,380 @@ msgstr "under indhentelse af tekstiknude"
 msgid "%u inodes scanned.\n"
 msgstr "%u iknuder skannet.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "læsning af journal superblok\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: ingen gyldig journal superblok fundet\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: journal for kort\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3786
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: genskaber journal\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: udfører ikke journalgendannelse når skrivebeskyttet\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "under forsøg på at genåbne %s"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "audvidet attribut"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Afejlallokering"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bblok"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bbitmap"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "ckomprimer"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Cer i konflikt med nogle andre filsystemblokke"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "dmappe"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Dslettet"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "epost"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e »%Dn« i %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "ffilsystem"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Ffor @i %i (%Q) er"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "ggruppe"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "hHTREE @d @i"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "iiknude"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Iillegal"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jjournal"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "ltabt+fundet"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Ler en henvisning"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mmultiplicere-krævet"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "nugyldig"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oforældreløs"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pproblem i"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qkvota"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "rroot @i"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "sbør være"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssuper@b"
 
-#: e2fsck/message.c:140
+# kunne måske også være: løstliggende
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "uikke forbundet"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "venhed"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xudvid"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "znul-længde"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<NULL-iknuden>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<De ugyldige blokkes iknude>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<Brugerkvotaens iknude>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<Gruppekvotaens iknude>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<Opstartsindlæserens iknude>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<Fortryd mappe-iknuden"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<Gruppebeskriver-iknuden>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<Journalens iknude>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Reserveret iknude 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Reserveret iknude 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "regulær fil"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "mappe"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "tegnenhed"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "blokenhed"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "navngivet datakanal"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "symbolsk henvisning"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "sokkel"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "ukendt filtype med tilstand 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "indirekte blok"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "dobbelt indirekte blok"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "tredobbelt indirekte blok"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "oversættterblok"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "blok #"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "bruger"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "gruppe"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr "projekt"
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "ukendt kvotatype"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "forøg hævdede iknudekort"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "intern fejl: kan ikke finde dup_blk for %llu\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "returneret fra clone_file_block"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr "intern fejl: kunne ikke slå EA-blokpost op for %llu"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "intern fejl: kunne ikke slå EA-iknudepost op for %u"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:356
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr "under hashing af post med e_Value_inum = %u"
+
+#: e2fsck/pass1.c:774 e2fsck/pass2.c:1005
 msgid "reading directory block"
 msgstr "læser mappeblok"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1223
 msgid "in-use inode map"
 msgstr "i brug-iknudekort"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1234
 msgid "directory inode map"
 msgstr "mappe-iknudekort"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1244
 msgid "regular file inode map"
 msgstr "regulær fil-iknudekort"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1253 misc/e2image.c:1272
 msgid "in-use block map"
 msgstr "i brug-blokkort"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1262
 msgid "metadata block map"
 msgstr "metadatablokkort"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1324
 msgid "opening inode scan"
 msgstr "åbner iknudeskanning"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1362
 msgid "getting next inode from scan"
 msgstr "henter næste iknude fra skanning"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2066
 msgid "Pass 1"
 msgstr "Gennemløb 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2127
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "læser indirekte blokke for iknude %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2178
 msgid "bad inode map"
 msgstr "ugyldig iknudekort"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2218
 msgid "inode in bad block map"
 msgstr "iknude i ugyldig blokkort"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2238
 msgid "imagic inode map"
 msgstr "imagic-iknudekort"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2269
 msgid "multiply claimed block map"
 msgstr "forøg hævdet blokkort"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2394
 msgid "ext attr block map"
 msgstr ""
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3637
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu(%c): forventer %6lu fik phys %6lu (blkcnt %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4054
 msgid "block bitmap"
 msgstr "blok-bitmap"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4060
 msgid "inode bitmap"
 msgstr "iknude-bitmap"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4066
 msgid "inode table"
 msgstr "iknudetabel"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Gennemløb 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1077 e2fsck/pass2.c:1244
 msgid "Can not continue."
 msgstr "Kan ikke fortsætte."
 
@@ -596,21 +624,21 @@ msgstr "Gennemløb 3"
 msgid "inode loop detection bitmap"
 msgstr "iknude-loopdetektionsbitmap"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Gennemløb 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Gennemløb 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
-msgstr ""
+msgstr "check_inode_bitmap_checksum: Hukommelsesallokeringsfejl"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
-msgstr ""
+msgstr "check_block_bitmap_checksum: Hukommelsesallokeringsfejl"
 
 #: e2fsck/problem.c:51
 msgid "(no prompt)"
@@ -773,18 +801,18 @@ msgid "WILL RECREATE"
 msgstr "VIL GENSKABE"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:112
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "blokbitmap for gruppe %g er ikke i gruppe. (blok %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:116
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "iknude-bitmap for gruppe %g er ikke i gruppe. (blok %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:121
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -801,7 +829,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:127
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -828,7 +856,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:138
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -841,7 +869,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:145
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -852,18 +880,18 @@ msgstr ""
 "forskellige fra blokstørrelsen.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:152
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "Superblok blokke_per_gruppe = %b, skulle have været %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:157
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "@S first_data_@b = %b, skulle have været %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:162
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -871,7 +899,7 @@ msgstr ""
 "@f havde ikke en UUID; oprette en.\n"
 "\n"
 
-#: e2fsck/problem.c:165
+#: e2fsck/problem.c:167
 #, c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
@@ -888,48 +916,48 @@ msgstr ""
 "blokgruppebeskrivere kan være o.k.\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:176
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Korruption fundet i @S. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
+#: e2fsck/problem.c:181
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Fejl under bestemmelse af størrelsen på den fysiske @v: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:186
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "iknude-antal i superblok er %i, skal være %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:190
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd'en understøtter ikke filtypefunktionen.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
+#: e2fsck/problem.c:195
 #, c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "superblokken har en ugyldig journal (iknude %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:200
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr "Ekstern journal har flere filsystembrugere (ikke understøttet).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:205
 msgid "Can't find external @j\n"
 msgstr "Kan ikke finde @j\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:210
 msgid "External @j has bad @S\n"
 msgstr "Ekstern @j har ugyldig @S\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:215
 msgid "External @j does not support this @f\n"
 msgstr "Ekstern @j understøtter ikke dette @f\n"
 
@@ -937,7 +965,7 @@ msgstr "Ekstern @j understøtter ikke dette @f\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:220
 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 "
@@ -946,84 +974,84 @@ msgid ""
 msgstr ""
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:228
 msgid "@j @S is corrupt.\n"
 msgstr "@j @S er ødelagt.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:233
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "superbloks has_journal-flag er ryddet, men en journal er til stede.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:238
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr ""
 "superbloks needs_recovery-flag er angivet, men ingen journal er til stede.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:243
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "superbloks needs_recovery-flag er ryddet, men journal har data.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:248
 msgid "Clear @j"
 msgstr "Ryd @j"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:253 e2fsck/problem.c:764
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr "filsytem har funktionsflag angivet, men er et revision 0-filsystem."
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:258
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr ""
 "%s forældreløs iknude %i (uid=%Iu, gid=%Ig, tilstand=%Im, størrelse=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:263
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "illegal %B (%b) fundet i forældreløs iknude %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:268
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Allerede ryddet %b (%b) fundet i forældreløs iknude %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
+#: e2fsck/problem.c:273
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "Illegal forældeløs iknude %i i superblok.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
+#: e2fsck/problem.c:278
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "Illegal iknude %i i forældreløs iknudeliste.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:283
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
 "Journalsuperblok har et ukendt skrivebeskyttet funktionsflag angivet.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:288
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
 "Journalsuperblok har et ukendt og ikke kompatibelt funktionsflag angivet.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:293
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Journalversion er ikke understøttet af denne e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
+#: e2fsck/problem.c:298
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -1034,7 +1062,7 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
+#: e2fsck/problem.c:303
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -1046,7 +1074,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:308
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1057,12 +1085,12 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:314
 msgid "Run @j anyway"
 msgstr "Kør journal alligevel"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:319
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
 "Gendannelsesflag er ikke angivet i sikkerhedskopien superblok, så kører "
@@ -1070,7 +1098,7 @@ msgstr ""
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:324
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1078,7 +1106,7 @@ msgstr "Laver sikkerhedskopi af journalens iknude-blokinformation.\n"
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:330
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1087,18 +1115,18 @@ msgstr ""
 "er %N; skal være nul."
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:336
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr "Resize_inode er ikke aktiveret, men resize-iknude er non-zero.  "
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:341
 msgid "Resize @i not valid.  "
 msgstr "Resize-iknude er ikke gyldig.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:346
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1108,21 +1136,21 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:351
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
 msgstr ""
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
+#: e2fsck/problem.c:356
 #, c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "Superblok-fif for ekstern superblok skal være %X."
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:361
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1131,40 +1159,40 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:366
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "Gruppebeskriver %g's kontrolsum er %04x, skal være %04y. "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:371
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr ""
 "Gruppebeskriver %g markeret som ikke initialiseret uden funktionssæt.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:376
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr "gruppebeskriver %g har ugyldig ubrugt iknudeantal %b.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:381
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Sidste gruppeblokbitmap er ikke initialiseret.  "
 
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:386
 #, c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "Journaltransaktion %i var ødelagt, genafspilning blev afbrudt.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:391
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "Flaget test_fs er angivet (og ext2 er tilgængelig).  "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:396
 msgid ""
 "@S last mount time is in the future.\n"
 "\t(by less than a day, probably due to the hardware clock being incorrectly "
@@ -1174,7 +1202,7 @@ msgstr ""
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:402
 msgid ""
 "@S last write time is in the future.\n"
 "\t(by less than a day, probably due to the hardware clock being incorrectly "
@@ -1182,205 +1210,230 @@ msgid ""
 msgstr ""
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:408
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr "En eller flere blokgruppebeskriveres kontrolsummer er ugyldige.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:413
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Angiver frit iknudeantal til %j (var %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:418
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Angiver frit blokantal til %c (var %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr "Laver kvota-iknude %i (%Q) skjult.\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:423
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "Skjuler %U kvota-iknude %i (%Q).\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:428
 msgid "@S has invalid MMP block.  "
 msgstr "@S har ugyldig MMP-blok.  "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:433
 msgid "@S has invalid MMP magic.  "
 msgstr "superblok har ugyldig MMP-magi.  "
 
-#: e2fsck/problem.c:433
+#: e2fsck/problem.c:438
 #, c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2: %m\n"
 
-#: e2fsck/problem.c:438
+#: e2fsck/problem.c:443
 #, c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
+#: e2fsck/problem.c:449
 msgid ""
 "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
 "simultaneously."
 msgstr ""
+"superblok metadata_csum efterfølger uninit_bg; begge funktionsbit kan ikke "
+"være angivet samtidig."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "superblok MMP-blokkens kontrolsum matcher ikke MMP-blok.  "
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:455
+msgid "@S MMP @b checksum does not match.  "
+msgstr "superblok MMP-blokkens kontrolsum matcher ikke.  "
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:460
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr ""
 "superblok 64-bit filsystemer kræver udvidelser for at tilgå hele disken.  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:465
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "First_meta_bg er for stor. (%N, maks. værdi %g).  "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:470
 msgid "External @j @S checksum does not match @S.  "
 msgstr "Ekstern kontrolsum for journalsuperblok matcher ikke superblok.  "
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:475
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr "superblok metadata_csum_seed er ikke nødvendig uden metadata_csum."
 
-#: e2fsck/problem.c:477
+#: e2fsck/problem.c:480
 #, c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr ""
+"Fejl under initialisering af kvotakontekst i understøttelsesbibliotek: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:485
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Ugyldig krævet ekstra isize i superblok (%N).  "
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:490
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Ugyldig ønsket ekstra isize i superblok (%N).  "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:495
+msgid "Invalid %U @q @i %i.  "
+msgstr "Ugyldig %U kvota iknude %i.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:500
+msgid "@S would have too many inodes (%N).\n"
+msgstr "superblok ville have for mange iknuder (%N).\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:505
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:513
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Gennemløb 1: Kontrollerer iknuder, blokke og størrelser\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:517
 msgid "@r is not a @d.  "
 msgstr "rod-iknude er ikke en mappe.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:522
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr ""
+"rot-iknude har dtime angivet (sandsynligvis på grund af gammel mke2fs).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:527
 msgid "Reserved @i %i (%Q) has @n mode.  "
-msgstr ""
+msgstr "Reserveret iknude %i (%Q) har ugyldig tilstand.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:532
 #, c-format
 msgid "@D @i %i has zero dtime.  "
-msgstr ""
+msgstr "slettet iknude %i har nul dtime.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:537
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
-msgstr ""
+msgstr "iknude %i er i brug, men har dtime angivet.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:542
 #, c-format
 msgid "@i %i is a @z @d.  "
-msgstr ""
+msgstr "iknude %i er en nulængde mappe.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:547
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr ""
+"gruppe %g's blok-bitmap på %b er i konflikt med nogle andre fs-blokke.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:552
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr ""
+"gruppe %g's iknude-bitmap på %b er i konflikt med nogle andre fs-blokke.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:557
 msgid "@g %g's @i table at %b @C.\n"
 msgstr ""
+"gruppe %g's iknude-tabel på %b er i konflikt med nogle andre fs-blokke.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:562
 msgid "@g %g's @b @B (%b) is bad.  "
-msgstr ""
+msgstr "gruppe %g's blok-bitmap (%b) er ugyldig.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:567
 msgid "@g %g's @i @B (%b) is bad.  "
-msgstr ""
+msgstr "gruppe %g's iknude-bitmap (%b) er ugyldig.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:572
 msgid "@i %i, i_size is %Is, @s %N.  "
-msgstr ""
+msgstr "iknude %i, i_size er %Is, skal være %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:577
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
-msgstr ""
+msgstr "iknude %i, i_blocks er %Ib, skal være %N.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:582
 msgid "@I %B (%b) in @i %i.  "
-msgstr ""
+msgstr "Illegal %B (%b) i iknude %i."
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:587
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
-msgstr ""
+msgstr "%B (%b) overlapper filsystemmetadata i iknude %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@i %i has illegal @b(s).  "
-msgstr ""
+msgstr "iknude %i har illegale blokke.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
-msgstr ""
+msgstr "For mange illegale blokke i iknude %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in bad @b @i.  "
-msgstr ""
+msgstr "illegal %B (%b) i ugyldig blok-iknude.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:607
 msgid "Bad @b @i has illegal @b(s).  "
-msgstr ""
+msgstr "Ugyldig blok-iknude har illegale blokke.  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:612
 msgid "Duplicate or bad @b in use!\n"
 msgstr ""
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:617
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr ""
 
@@ -1388,7 +1441,7 @@ msgstr ""
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:622
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1398,7 +1451,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:629
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1407,7 +1460,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:634
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1415,124 +1468,124 @@ msgid ""
 msgstr ""
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:640
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr ""
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:645
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 "Blok %b i de primære gruppebeskrivere er på listen med ugyldige blokke\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:651
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Advarsel: Gruppe %gs superblok (%b) er ugyldig.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:657
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 "Advarsel: Gruppe %gs kopi af gruppebeskriverne har en ugyldig blok (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:663
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 "Programmeringsfejl? blok #%b reserveret uden årsag i process_bad_block.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:669
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr ""
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:674
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr ""
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:679
 msgid "Relocating @g %g's %s from %b to %c...\n"
-msgstr ""
+msgstr "Flytter gruppen %g's %s fra %b til %c ...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:684
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
-msgstr ""
+msgstr "Flytter gruppen %g's %s til %c ...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:689
 msgid "Warning: could not read @b %b of %s: %m\n"
-msgstr ""
+msgstr "Advarsel: kunne ikke læse blok %b for %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:694
 msgid "Warning: could not write @b %b for %s: %m\n"
-msgstr ""
+msgstr "Advarsel: kunne ikke skrive blok %b for %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:699 e2fsck/problem.c:1776
 msgid "@A @i @B (%N): %m\n"
-msgstr ""
+msgstr "der opstod en fejl under allokering af iknude-bitmap (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:704
 msgid "@A @b @B (%N): %m\n"
-msgstr ""
+msgstr "der opstod en fejl under allokering af blok-bitmap (%n): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:709
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr ""
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:714
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr ""
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
+#: e2fsck/problem.c:719
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr ""
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
+#: e2fsck/problem.c:724
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr ""
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:729
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:734
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
+#: e2fsck/problem.c:740
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Der opstod en fejl under læsning af iknude %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:748
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "iknude %i har magisk flag angivet.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:753
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1543,113 +1596,113 @@ msgstr ""
 "eller tilføj-kun flag angivet.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
+#: e2fsck/problem.c:759
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
 "Speciel (enhed/sokkel/fifo) iknude %i har en størrelse forskellig fra nul.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:769
 msgid "@j @i is not in use, but contains data.  "
 msgstr "journal-iknude er ikke i brug, men indeholder data.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:774
 msgid "@j is not regular file.  "
 msgstr "journal er ikke en normal fil.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:779
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "iknude %i var en del af den forældreløse iknudeliste.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:785
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
 "iknuder som var del af en ødelagt forældeløs lænket liste blev fundet.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:790
 msgid "@A refcount structure (%N): %m\n"
 msgstr "der opstod en fejl under allokering af refcount-struktur (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:795
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr ""
 "Der opstod en fejl under læsning af udvidet attributblok %b for iknude %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:800
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "iknude %i har en ugyldig udvidet attributblok %b.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:805
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Der opstod en fejl under læsning af udvidet attributblok %b (%m)."
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:810
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "udvidet attributblok %b har referenceantal %r, skal være %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:815
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Der opstod en fejl under skrivning af udvidet attributblok %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:820
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "udvidet attributblok %b har h_blokke > 1.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:825
 msgid "@A @a region allocation structure.  "
 msgstr ""
 "der opstod en fejl under allokering af udvidet attributstruktur for "
 "regionallokering.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:830
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "udvidet attributblok %b er ødelagt (allokeringskollision).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:835
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "udvidet attributblok %b er ødelagt (ugyldigt navn).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:840
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "udvidet attributblok %b er ødelagt (ugyldig værdi).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
+#: e2fsck/problem.c:845
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "iknude %i er for stor.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:849
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B (%b) medfører at mappe er for stor."
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:854
 msgid "%B (%b) causes file to be too big.  "
 msgstr "%B (%b) medfører at fil er for stor.  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:859
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "%B (%b) medfører at symbolsk henvisning er for stor.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:864
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
@@ -1657,36 +1710,36 @@ msgstr ""
 "understøttelse.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
+#: e2fsck/problem.c:869
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "iknude %i har flaget INDEX-FL angivet, men er ikke en mappe.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
+#: e2fsck/problem.c:874
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "HTREE-mappe-iknude %i har en ugyldig root-knde.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:879
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "HTREE-mappe-iknude %i har en ikke understøttet hash-version (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
+#: e2fsck/problem.c:884
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr ""
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:889
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "HTREE-mappe-iknude %i har en trædybde (%N) som er for stor\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:895
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1695,59 +1748,59 @@ msgstr ""
 "filsystemets metadata."
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
+#: e2fsck/problem.c:901
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Ændring af størrelse for iknude (gen)skabelse mislykkedes: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:906
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "iknude %i har en ekstra størrelse (%IS) som er ugyldig\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:911
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "udvidet attribut i iknude %i har en namelen (%N) som er ugyldig\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:916
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr ""
 "udvidet attribut i iknude %i har en værdiforskydning (%N) som er ugyldig\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:921
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr ""
 "udvidet attribut i iknude %i har en værdiblok (%N) som er ugyldig (skal være "
 "o)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:926
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr ""
 "udvidet attribut i iknude %i har en værdistørrelse (%N) som er ugyldig\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:931
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr ""
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:936
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "iknude %i er en %It men ligner egentlig en mappe.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
+#: e2fsck/problem.c:941
 #, c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr ""
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:946
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1755,7 +1808,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:952
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1763,116 +1816,118 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:957
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
+#: e2fsck/problem.c:962
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr ""
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
+#: e2fsck/problem.c:967
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr ""
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
+#: e2fsck/problem.c:972
 #, c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr ""
 
-#: e2fsck/problem.c:956
+#: e2fsck/problem.c:977
 #, c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr ""
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:982
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:986
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr ""
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
+#: e2fsck/problem.c:991
 #, c-format
 msgid "Error converting subcluster @b @B: %m\n"
-msgstr ""
+msgstr "Der opstod en fejl under konvertering af underklyngeblokbitmap: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
-msgstr ""
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:996
+msgid "@q @i is not regular file.  "
+msgstr "kvotaiknude er ikke en normal fil.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1001
 msgid "@q @i is not in use, but contains data.  "
-msgstr ""
+msgstr "kvotaiknude er ikke i brug, men indehoder data.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1006
 msgid "@q @i is visible to the user.  "
 msgstr "Iknudens kvota er synlig for brugeren.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1011
 msgid "The bad @b @i looks @n.  "
 msgstr "Den ugyldige blok-iknude virker invalid.  "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1016
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
 msgstr ""
+"iknude %i har nullængdeomfang\n"
+"\t(ugyldig logisk blok %c, fysisk blok %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
+#: e2fsck/problem.c:1021
 #, c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "iknude %i ser ud til at indhold bras.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
+#: e2fsck/problem.c:1026
 #, c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr "Iknude %i består kontroller, men kontrolsum matcher ikke iknude.  "
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
+#: e2fsck/problem.c:1031
 #, c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "iknuden %i's udvidet attribut er ødelagt (allokeringskollision).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1039
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1048
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
 msgstr ""
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1053
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1880,20 +1935,20 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1059
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
+#: e2fsck/problem.c:1064
 #, c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
+#: e2fsck/problem.c:1069
 #, c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
 msgstr ""
@@ -1901,32 +1956,32 @@ msgstr ""
 "dataunderstøttelse.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
+#: e2fsck/problem.c:1076
 msgid ""
 "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
 msgstr ""
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1081
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr ""
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
+#: e2fsck/problem.c:1086
 #, c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr ""
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1091
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
+#: e2fsck/problem.c:1096
 #, c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
 msgstr ""
@@ -1935,7 +1990,7 @@ msgstr ""
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
+#: e2fsck/problem.c:1102
 #, c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
@@ -1945,36 +2000,36 @@ msgstr ""
 "eller indlejret-data flag angivet.  "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1108
 #, c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1113
 #, c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
 msgstr ""
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1128
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr ""
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1133
 msgid "@A @x region allocation structure.  "
 msgstr ""
 "der opstod en fejl under allokering af extent-struktur for "
@@ -1982,45 +2037,64 @@ msgstr ""
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1138
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1143
 msgid "@A memory for encrypted @d list\n"
 msgstr ""
 "der opstod en fejl under allokering af hukommelse for krypteret mappeliste\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1148
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr ""
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1153
 #, c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr ""
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
+#: e2fsck/problem.c:1158
 #, c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "iknude %i har et ødelagt extent-teksthoved.  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
+#: e2fsck/problem.c:1163
 #, c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr ""
 
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1168
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "iknude %i har en illegal udvidet attributværdi-iknude %N\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1174
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr ""
+"iknude %i har ugyldig udvidet attribut. EA-iknude %N mangler EA_INODE-flag.\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1179
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1187
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2028,64 +2102,64 @@ msgid ""
 msgstr ""
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
+#: e2fsck/problem.c:1193
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr ""
 
-#: e2fsck/problem.c:1172
+#: e2fsck/problem.c:1208
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr ""
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
+#: e2fsck/problem.c:1213
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr ""
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
+#: e2fsck/problem.c:1218
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr ""
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1223 e2fsck/problem.c:1585
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1233
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1239
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr ""
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1244
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
 msgstr ""
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1250
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr ""
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1255
 msgid "\t<@f metadata>\n"
 msgstr ""
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1260
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2093,354 +2167,354 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1265
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1242
+#: e2fsck/problem.c:1278
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Kunne ikke klone fil: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1284
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Gennemløb 1E: Optimerer extent-træer\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
+#: e2fsck/problem.c:1289
 #, c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Kunne ikke optimere extent-træ %p (%i): %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1294
 msgid "Optimizing @x trees: "
 msgstr "Optimerer extent-træer: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1309
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr "Intern fejl: maks. extent-trædybde er for stor (%b; forventede=%c).\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1314
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr "iknude %i extent-træ (på niveau %b) kunne være kortere.  "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1319
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr "iknude %i extent-træ (på niveau %b) kunne være smallere.  "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1326
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Gennemløb 2: Kontrollerer mappestruktur\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1331
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "ugyldig iknudenummer for ».« i mappeiknude %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1336
 msgid "@E has @n @i #: %Di.\n"
 msgstr "posten »%Dn« i %p (%i) har ugyldig iknude #: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1341
 msgid "@E has @D/unused @i %Di.  "
 msgstr "posten »%Dn« i %p (%i) har slettet/ubrugt iknude %Di."
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1346
 msgid "@E @L to '.'  "
 msgstr "posten »%Dn« i %p (%i) er en henvisning til ».«"
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1351
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr ""
 "posten »%Dn« i %p (%i) peger på iknude (%Di) placeret i en ugyldig blok.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1356
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "posten »%Dn« i %p (%i) er en henvisning til mappen %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1361
 msgid "@E @L to the @r.\n"
 msgstr "posten »%Dn« i %p (%i) er en henvisning til root-iknuden.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1366
 msgid "@E has illegal characters in its name.\n"
 msgstr "posten »%Dn« i %p (%i) har illegale tegn i sit navn.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
+#: e2fsck/problem.c:1371
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Mangler ».« i mappe-iknude %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
+#: e2fsck/problem.c:1376
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Mangler »..« i mappe-iknude %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1381
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Første post »%Dn« (iknude=%Di) i mappe-iknude %i (%p) skal være ».«\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1386
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Anden post »%Dn« (iknude=%Di) i mappe-iknude %i skal være ».«\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1391
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr for iknude %i (%Q) er %IF, skal være nul.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1396
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl for iknude %i (%Q) er %If, skal være nul.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl for iknude %i (%Q) er %Id, skal være nul.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1401
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_size_high for iknude %i (%Q) er %Id, skal være nul.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1406
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag for iknude %i (%Q) er %N, skal være nul.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1411
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize for iknude %i (%Q) er %N, skal være nul.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1416
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "iknude %i (%Q) har ugyldig tilstand (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1421
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "mappe-iknude %i, %B, forskydning %N: mappe ødelagt\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1426
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "mappe-iknude %i, %B, forskydning %N: filnavn er for langt\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1431
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "mappe-iknude %i har en uallokeret %B."
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
+#: e2fsck/problem.c:1436
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "».«-mappepost i mappe-iknude %i er ikke NUL-afsluttet\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
+#: e2fsck/problem.c:1441
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "»..«-mappepost i mappeiknude %i er ikke NUl-afsluttet\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1446
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "iknude %i (%Q) er en illegal tegnenhed.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1451
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "iknude %i (%Q) er en illegal blokenhed.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1456
 msgid "@E is duplicate '.' @e.\n"
 msgstr "posten »%Dn« i %p (%i) er en duplikeret ».«-post.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1461
 msgid "@E is duplicate '..' @e.\n"
 msgstr "posten »%Dn« i %p (%i) er en duplieret »..«-post\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
+#: e2fsck/problem.c:1466 e2fsck/problem.c:1801
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Intern fejl: kunne ikke finde dir_info for %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1471
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "posten »%Dn« i %p (%i) har rec_len for %Dr, skal være %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
+#: e2fsck/problem.c:1476
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "der opstod en fejl under allokering af icount-struktur: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
+#: e2fsck/problem.c:1481
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Der opstod en fejl under gennemløb over mappeblokke: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1486
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Der opstod en fejl under læsning af mappeblok %b (iknude %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1491
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Der opstod en fejl under skrivning af mappeblok %b (iknude %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
+#: e2fsck/problem.c:1496
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr ""
 "Der opstod en fejl under allokering af ny mappeblok for iknude %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
+#: e2fsck/problem.c:1501
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Der opstod en fejl under deallokering af iknude %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
+#: e2fsck/problem.c:1506
 #, c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "mappepost for ».« i %p (%i) er stor.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1511
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "iknude %i (%Q) er en illegal FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1516
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "iknude %i (%Q) er en illegal sokkel.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1521
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Angiver filtype for posten »%Dn« i %p (%i) til %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1526
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr ""
 "posten »%Dn« i %p (%i) har en forkert filtype (var %Dt, skal være %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1531
 msgid "@E has filetype set.\n"
 msgstr "posten »%Dn« i %p (%i) har filtypesæt.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1536
 msgid "@E has a @z name.\n"
 msgstr "posten »%Dn« i %p (%i) har et nullængde navn.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1541
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Symbolsk henvisning %Q (iknude #%i) er ugyldig.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1546
 msgid "@a @b @F @n (%If).\n"
 msgstr ""
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1551
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1556
 msgid "@p @h %d: %B not referenced\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1561
 msgid "@p @h %d: %B referenced twice\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1566
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1571
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr ""
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1576
 msgid "@n @h %d (%q).  "
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1580
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
+#: e2fsck/problem.c:1590
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1595
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1600
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "problem i HTREE-mappens iknude %d: %B har ugyldigt antal (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1605
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "problem i HTREE-amappens iknude %d: %B har en uordnet hashtabel\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1610
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr ""
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1615
 msgid "Duplicate @E found.  "
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1620
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2450,7 +2524,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1625
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2458,155 +2532,155 @@ msgid ""
 msgstr ""
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1630
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr ""
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1635
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1639
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1644
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr ""
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1649
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
+#: e2fsck/problem.c:1654
 #, c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
+#: e2fsck/problem.c:1659
 #, c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr ""
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1664
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "mappe-iknude %i, %B, forskydning %N: mappe har ingen kontrolsum.\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1669
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr ""
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1674
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr ""
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
+#: e2fsck/problem.c:1679
 #, c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr "Rettelse af størrelsen for indlejret mappe-iknude %i mislykkedes.\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1684
 msgid "Encrypted @E is too short.\n"
 msgstr "Krypteret post »%Dn« i %p (%i) er for kort.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1691
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Gennemløb 3: Kontrollerer mappeforbindelse\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1696
 msgid "@r not allocated.  "
 msgstr "Root-iknude er ikke allokeret.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1701
 msgid "No room in @l @d.  "
 msgstr "Ingen plads i mappen lost+found."
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
+#: e2fsck/problem.c:1706
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr ""
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1711
 msgid "/@l not found.  "
 msgstr ""
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1716
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr ""
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1721
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr ""
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
+#: e2fsck/problem.c:1726
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Kunne ikke udvide /lost+found: %m\n"
 
-#: e2fsck/problem.c:1695
+#: e2fsck/problem.c:1731
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Kunne ikke genforbinde %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
+#: e2fsck/problem.c:1736
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Der opstod en fej under forsøget på at finde /lost+found: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
+#: e2fsck/problem.c:1741
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_ny_blok: %m under forsøg på at oprette mappen /lost+found\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
+#: e2fsck/problem.c:1746
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr ""
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
+#: e2fsck/problem.c:1751
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block: %m under oprettelse af ny mappeblok\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
+#: e2fsck/problem.c:1756
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr ""
 "ext2fs_write_dir_block: %m under skrivning af mappeblokken for /lost+found\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
+#: e2fsck/problem.c:1761
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Fejl under justering af iknude-antal på iknude %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
+#: e2fsck/problem.c:1766
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2615,7 +2689,7 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
+#: e2fsck/problem.c:1771
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2623,41 +2697,41 @@ msgid ""
 msgstr ""
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
+#: e2fsck/problem.c:1781
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Der opstod en fejl under oprette af rodmappe (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
+#: e2fsck/problem.c:1786
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Fejl under oprettelse af /@l @d (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1791
 msgid "@r is not a @d; aborting.\n"
 msgstr "@r er ikke en @d; afbryder.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1796
 msgid "Cannot proceed without a @r.\n"
 msgstr "Kan ikke fortsætte uden en @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
+#: e2fsck/problem.c:1806
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l er ikke en @d (ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1811
 msgid "/@l has inline data\n"
 msgstr ""
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1816
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2666,7 +2740,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1821
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2674,195 +2748,207 @@ msgid ""
 msgstr ""
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1826
 msgid "/@l is encrypted\n"
 msgstr "/lost+found er krypteret\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1833
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Gennemløb 3A: Optimerer mapper\n"
 
-#: e2fsck/problem.c:1802
+#: e2fsck/problem.c:1838
 #, c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Kunne ikke oprette dirs_to_hash-iterator: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1843
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Kunne ikke optimere mappe %q (%d): %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1848
 msgid "Optimizing directories: "
 msgstr "Optimerer mapper: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1865
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Gennemløb 4: Kontrollerer referenceantal\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
+#: e2fsck/problem.c:1870
 #, c-format
 msgid "@u @z @i %i.  "
-msgstr ""
+msgstr "ikke forbundet nullængde iknude %i.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
+#: e2fsck/problem.c:1875
 #, c-format
 msgid "@u @i %i\n"
-msgstr ""
+msgstr "ikke forbundet iknude %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1880
 msgid "@i %i ref count is %Il, @s %N.  "
-msgstr ""
+msgstr "iknude %i ref-antal er %Il, skal være %n.  "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1884
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1891
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "udvidet attribut-iknude %i ref-antal er %N, skal være %n.  "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1896
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
+"mappe overstiger maks. henvisninger, men ingen DIR_NLINK-funktion er "
+"superblok.\n"
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:1903
 msgid "Pass 5: Checking @g summary information\n"
-msgstr ""
+msgstr "Gennemløb 5: Kontrollerer resumeinformation for gruppe\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:1908
 msgid "Padding at end of @i @B is not set. "
 msgstr ""
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:1913
 msgid "Padding at end of @b @B is not set. "
 msgstr ""
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:1918
 msgid "@b @B differences: "
-msgstr ""
+msgstr "forskelle på blokbitmap: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:1938
 msgid "@i @B differences: "
-msgstr ""
+msgstr "forskelle på iknude-bitmap: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:1958
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:1963
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:1968
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr ""
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:1973
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr ""
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:1978
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr ""
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
+#: e2fsck/problem.c:1983
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:1989
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr ""
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
+#: e2fsck/problem.c:1994
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Fejl under kopiering af erstatningsiknude-bitmap: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
+#: e2fsck/problem.c:1999
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Fejl under kopiering af erstatningsblok-bitmap: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
+#: e2fsck/problem.c:2024
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr "gruppe %g blokke i brug men grupper er markeret BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
+#: e2fsck/problem.c:2029
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr "gruppe %g iknuder i brug men gruppe er markeret INODE_UNINIT\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
+#: e2fsck/problem.c:2034
 #, c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
+#: e2fsck/problem.c:2039
 #, c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2046
 msgid "Recreate @j"
 msgstr "Genskab journal"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2051
 msgid "Update quota info for quota type %N"
 msgstr "Opdater kvotainfo for kvotatype %N"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
+#: e2fsck/problem.c:2056
 #, c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "Fejl ved angivelse af blokgruppens kontrolsumsinfo: %m\n"
 
-#: e2fsck/problem.c:2016
+#: e2fsck/problem.c:2061
 #, c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Fejl under skrivning af filsysteminfo: %m\n"
 
-#: e2fsck/problem.c:2021
+#: e2fsck/problem.c:2066
 #, c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2071
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "Fejl under skrivning af kvotainfo for kvotatype %N: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2194
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Uhåndteret fejlkode (ox%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2320 e2fsck/problem.c:2324
 msgid "IGNORED"
 msgstr "IGNORERET"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr "i move_quota-inode"
 
@@ -2884,21 +2970,21 @@ msgstr "under start af iknudeskanning"
 msgid "while doing inode scan"
 msgstr "under udførsel af iknudeskanning"
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "under kald af ext2fs_block_iterate for iknude %d"
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "under kald af ext2fs_block_iterate for iknude %u"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "under kald af ext2fs_adjust_ea_refcount2 for iknude %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "under kald af ext2fs_adjust_ea_refcount2 for iknude %u"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
-msgstr ""
+msgstr "Beskærer"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Rydder"
 
@@ -2933,12 +3019,12 @@ msgid ""
 " -z undo_file         Create an undo file\n"
 msgstr ""
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:136
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr ""
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:162
 #, c-format
 msgid ""
 "\n"
@@ -2953,51 +3039,51 @@ msgstr[1] ""
 "\n"
 "%12u iknuder brugt (%2.2f%%, ud af %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:166
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%12u ikketilgrænsende fil (%0d.%d%%)\n"
+msgstr[1] "%12u ikketilgrænsende filer (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:171
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%12u ikketilgrænsende mappe (%0d.%d%%)\n"
+msgstr[1] "%12u ikketilgrænsende mapper (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:176
 #, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "             # af iknuder med ind/dind/tind-blokke: %u/%u/%u\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:184
 msgid "             Extent depth histogram: "
 msgstr "             Udvid dybdehistogram: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:193
 #, c-format
 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 brugt (%2.2f%%, ud af %llu)\n"
 msgstr[1] "%12llu blokke brugt (%2.2f%%, ud af %llu)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:197
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%12u ugyldig blok\n"
 msgstr[1] "%12u ugyldige blokke\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:199
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] "%12u stor fil\n"
 msgstr[1] "%12u store filer\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:201
 #, c-format
 msgid ""
 "\n"
@@ -3012,96 +3098,96 @@ msgstr[1] ""
 "\n"
 "%12u normale filer\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:203
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u mappe\n"
 msgstr[1] "%12u mapper\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:205
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
 msgstr[0] "%12u tegnenhedsfil\n"
 msgstr[1] "%12u tegnenhedsfiler\n"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:208
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
 msgstr[0] "%12u blokenhedsfil\n"
 msgstr[1] "%12u blokenhedsfiler\n"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:210
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u fifo\n"
 msgstr[1] "%12u fifo'er\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:212
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u henvisning\n"
 msgstr[1] "%12u henvisninger\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:214
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u symbolsk henvisning"
 msgstr[1] "%12u symbolske henvisninger"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:216
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%u hurtig symbolsk henvisning)\n"
 msgstr[1] " (%u hurtige symbolske henvisninger)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:220
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u sokkel\n"
 msgstr[1] "%12u sokler\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:224
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u fil\n"
 msgstr[1] "%12u filer\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:237 misc/badblocks.c:1002 misc/tune2fs.c:3022 misc/util.c:126
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "under bestemmelse af hvorvidt %s er monteret."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:258
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Advarsel! %s er monteret.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:261
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Advarsel! %s er i brug.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:267
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s er monteret.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:269
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s er i brug.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:271
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3109,7 +3195,7 @@ msgstr ""
 "Kan ikke fortsætte, afbryder.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:273
 msgid ""
 "\n"
 "\n"
@@ -3117,82 +3203,107 @@ msgid ""
 "cause ***SEVERE*** filesystem damage.\n"
 "\n"
 msgstr ""
+"\n"
+"\n"
+"ADVARSEL!!!  Filsystemet er monteret. Hvis du fortsætter så ***VIL***\n"
+"du påføre ***ALVORLIG*** skade på filsystemet.\n"
+"\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:278
 msgid "Do you really want to continue"
 msgstr "Ønsker du virkelig at fortsætte"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:280
 msgid "check aborted.\n"
 msgstr "kontrol afbrudt.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:374
 msgid " contains a file system with errors"
 msgstr " indeholder et filsytem med fejl"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:376
 msgid " was not cleanly unmounted"
 msgstr " var ikke ordenlig afmonteret"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:378
 msgid " primary superblock features different from backup"
-msgstr ""
+msgstr " primære superblokfunktioner er forskellige fra sikkerhedskopi"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:382
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " er blevet monteret %u gange uden at blive kontrolleret"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:389
 msgid " has filesystem last checked time in the future"
 msgstr " har datoen for sidste kontrol af filsystemet ude i fremtiden"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:395
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " er ikke blevet kontrolleret i %u dage"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:403
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:409
 msgid ", check forced.\n"
 msgstr ", tvungen kontrol.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:442
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: ren, %u/%u filer, %llu/%llu blokke"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:462
 msgid " (check deferred; on battery)"
 msgstr " (kontrol udskudt; på batteri)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:465
 msgid " (check after next mount)"
 msgstr " (kontrol efter næste montering)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:467
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (kontroller om %ld monteringer)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:617
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "FEJL: Kunne ikke åbne /dev/null (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:688
 msgid "Invalid EA version.\n"
 msgstr "Ugyldig EA-version.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:701
 msgid "Invalid readahead buffer size.\n"
 msgstr ""
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:750
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Ukendt udvidet tilvalg: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:758
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+
+#: e2fsck/unix.c:762
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr ""
+
+#: e2fsck/unix.c:771
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr ""
+
+#: e2fsck/unix.c:783
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3201,55 +3312,55 @@ msgstr ""
 "Syntaksfejl i e2fsck-konfigurationsfilen (%s, linje #%d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:856
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Der opstod en fejl under validering af filbeskriver %d: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:860
 msgid "Invalid completion information file descriptor"
 msgstr "Ugyldig filbeskriver for fuldførelsesinformation"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:875
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Kun en af tilvalgene -p/-a, -n eller -y må angives."
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:896
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Tilvalget -t er ikke understøttet på denne version af e2fsck.\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:927 e2fsck/unix.c:1005 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1741 misc/tune2fs.c:2036 misc/tune2fs.c:2054
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Kan ikke løse »%s«"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:984
 msgid "The -n and -D options are incompatible."
 msgstr "Tilvalgene -n og -D er ikke kompatible."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:989
 msgid "The -n and -c options are incompatible."
 msgstr "Tilvalgene -n og -D er ikke kompatible."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:994
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Tilvalgene -n og -l/-L er ikke kompatible."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1018
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Tilvalgene -D og -E fixes_only er ikke kompatible."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1024
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Tilvalgene -E bmap2extent og fixes_only er ikke kompatible."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1088
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Tilvalgene -c og -l/-L må ikke bruges på samme tid.\n"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1135
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3258,7 +3369,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG »%s« er ikke et heltal\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1144
 #, c-format
 msgid ""
 "\n"
@@ -3269,7 +3380,7 @@ msgstr ""
 "Ugyldig ikke-numerisk argument for -%c (»%s«)\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1235
 #, c-format
 msgid ""
 "MMP interval is %u seconds and total wait time is %u seconds. Please "
@@ -3278,25 +3389,26 @@ msgstr ""
 "MMP-interval er %u sekunder og samlet ventetid er %u sekunder. Vent "
 "venligst ...\n"
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1252 e2fsck/unix.c:1257
 msgid "while checking MMP block"
 msgstr "under kontrol af MMP-blok"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1259
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 "Hvis du er sikker på, at filsystemet ikke er i brug på nogen knude, så kør:\n"
-"»tune2fs -f -E clear_mmp {device}«\n"
+"»tune2fs -f -E clear_mmp %s«\n"
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1275
 msgid "while reading MMP block"
 msgstr "under læsning af MMP-blok"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1295 e2fsck/unix.c:1347 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2613 misc/mke2fs.c:2664 misc/tune2fs.c:2754
+#: misc/tune2fs.c:2799 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3308,57 +3420,57 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1336 misc/e2undo.c:270 misc/mke2fs.c:2653 misc/tune2fs.c:2788
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "under forsøg på at slette %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1362 misc/mke2fs.c:2679 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "under forsøg på at opsætte undo-filen\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1405
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Fejl: ext2fs-biblioteksversionen er forældet!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1412
 msgid "while trying to initialize program"
 msgstr "under forsøg på at intialisere program"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1435
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tBruger %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1447
 msgid "need terminal for interactive repairs"
 msgstr "kræver terminal for interaktive reparationer"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1508
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s tester sikkerhedskopiblokke ...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1510
 msgid "Superblock invalid,"
 msgstr "Superblok ugyldig,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1511
 msgid "Group descriptors look bad..."
 msgstr "Gruppebeskrivere ser ugyldige ud ..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1521
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s under brug af sikkerhedskopiblokkene"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1525
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: går tilbage til original superblok\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1554
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3367,28 +3479,28 @@ msgstr ""
 "Filsystemrevisionen er tilsyneladende for høj for denne version af e2fsck.\n"
 "(Eller filsystemets superblok er ødelagt)\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1561
 msgid "Could this be a zero-length partition?\n"
 msgstr "Kunne dette være en partition med nullængde?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1563
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Du skal have %s-adgang til filsystemet eller være root\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1569
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Muligvis ikkeeksisterende eller swapenhed?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1571
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr "Filsystem monteret eller åbnes eksklusivt af et andet program?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1575
 msgid "Possibly non-existent device?\n"
 msgstr "Muligvis ikkeeksisterende enhed?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1578
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3396,20 +3508,25 @@ msgstr ""
 "Disk skrivebeskyttet; brug tilvalget -n for at udføre en\n"
 "skrivebeskyttet kontrol af enheden.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1592
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1667
 msgid "Get a newer version of e2fsck!"
 msgstr "Hent en nyere version af e2fsck!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1711
 #, c-format
 msgid "while checking journal for %s"
 msgstr "under kontrol af journal for %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1714
 msgid "Cannot proceed with file system check"
 msgstr "Kan ikke fortsætte uden kontrol af filsystem"
 
-#: e2fsck/unix.c:1661
+#: e2fsck/unix.c:1725
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
@@ -3418,50 +3535,50 @@ msgstr ""
 "kontrol\n"
 "af filsystemet.\n"
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1737
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "kan ikke angive superblokflag på %s\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1743
 #, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Kontrolsumfejl for journal fundet i %s\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1747
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "Journal ødelagt i %s\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1751
 #, c-format
 msgid "while recovering journal of %s"
 msgstr "under gendannelse af journal for %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1773
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s har funktioner der ikke er understøttet:"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1832
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s under læsning af ugyldig blok-iknude\n"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1835
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Dette tyder ikke godt, men vi forsøger at fortsætte ...\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1875
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Opretter journal (%d blokke): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1885
 msgid " Done.\n"
 msgstr " Færdig.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1887
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
@@ -3469,24 +3586,38 @@ msgstr ""
 "\n"
 "*** journal har blevet genskabt ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1893
 msgid "aborted"
 msgstr "afbrudt"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1895
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck afbrudt.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1922
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Genstarter e2fsck fra begyndelsen ...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1926
 msgid "while resetting context"
 msgstr "under nulstilling af kontekst"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:1985
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** FILSYSTEMFEJL BLEV RETTET *****\n"
+
+#: e2fsck/unix.c:1987
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: Filsystem blev ændret.\n"
+
+#: e2fsck/unix.c:1991 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3495,12 +3626,12 @@ msgstr ""
 "\n"
 "%s: ***** FILSYSTEMET BLEV ÆNDRET *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:1996
 #, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** GENSTART SYSTEM *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2006 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3511,51 +3642,51 @@ msgstr ""
 "%s: ********** ADVARSEL: Filsystemet har stadig fejl **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "jJ"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr "aA"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr " (»a« aktiverer »yes« (ja) for alle) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<j>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (j/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "afbrudt!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr "ja til alle\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "ja\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "nej\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3564,7 +3695,7 @@ msgstr ""
 "%s? nej\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3573,38 +3704,38 @@ msgstr ""
 "%s? ja\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "ja"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "nej"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: ulovlige bitmap-blokke for %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "læser iknude og blok-bitmap"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "under forsøg på at læse bitmap igen for %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "skriver blok- og iknudebitmap"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "under genskrivning af blok- og iknudebitmap for %s"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3617,62 +3748,62 @@ msgstr ""
 "%s: UVENTET UOVERENSSTEMMELSE; KØR fsck MANUELT.\n"
 "\t(dvs., uden tilvalgene -a eller -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Hukommelse brugt: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Hukommelse brugt: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "tid: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "forløbet tid: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "under læsning af iknude %lu i %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "under skrivning af iknude %lu i %s"
 
-#: e2fsck/util.c:765
+#: e2fsck/util.c:792
 msgid ""
 "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
 "running.\n"
 msgstr "UVENTET UOVERENSSTEMMELSE: filsystemet ændres mens fsck kører.\n"
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "færdig                                               \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
-"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 ""
-"Brug: %s [-b blokstørrelse] [-i inddatafil] [-o uddatafil] [-svwnf]\n"
+"Brug: %s [-b blokstørrelse] [-i inddatafil] [-o uddatafil] [-svwnfBX]\n"
 "       [-c blokke_på_en_gang] [-d forsinkelsesfaktor_mellem_læsninger] [-e "
 "maks_ugyldige_blokke]\n"
 "       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
 "       enhed [sidste_blok [første_blok]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3681,136 +3812,136 @@ msgstr ""
 "%s: Tilvalgene -n og -w udelukker hinanden.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f%% færdig, %s forløbet. (%d/%d/%d fejl)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Test med vilkårligt mønster: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Tester med mønster 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "under søgning"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Mærkelig værdi (%ld) i do_read\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "under ext2fs_sync_device"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "under begyndelsen af gennemløb af listen med ugyldige blokke"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "under allokering af mellemlagre"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Kontroller blokke %lu til %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Kontrollerer for ugyldige blokke i skrivebeskyttet tilstand\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Kontrollerer for ugyldige blokke (skrivebeskyttet test): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "For mange ugyldige blokke, afbryder test\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Kontrollerer for ugyldige blokke i læs-skriv tilstand\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Fra blok %lu til %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Læser og sammenligner: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Kontroller for ugyldige blokke i ikkedestruktiv læs-skriv tilstand\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Kontroller for ugyldige blokke (ikkedestruktiv læs-skriv test)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
 msgstr ""
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "under testdataskrivning, blok %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:131
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s er monteret; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "det er ikke sikkert at køre badblocks!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:142
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s er øjensynlig i brug af systemet; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr ""
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "ugyldig %s - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr ""
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "kan ikke allokere hukommelse for test_pattern - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "Kun en test_pattern kan angives i skrivebeskyttet tilstand"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Vilkårlig test_pattern er ikke tilladt i skrivebeskyttet tilstand"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3818,41 +3949,41 @@ msgstr ""
 "Kunne ikke bestemme enhedsstørrelse; du må angive\n"
 "størrelsen manuelt\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "under forsøg på at bestemme enhedsstørrelse"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "sidste blok"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "første blok"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr ""
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "ugyldig slutblok (%llu): skal være en 32-bit værdi"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr ""
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr ""
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr ""
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Gennemløb færdig, %u ugyldige blokke fundet. (%d/%d/%d fejl)\n"
@@ -3924,163 +4055,164 @@ msgstr "= er inkompatibel med - og +\n"
 msgid "Must use '-v', =, - or +\n"
 msgstr "Skal bruge »-v«, =, - eller +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:79 misc/create_inode.c:118
 #, c-format
 msgid "while reading inode %u"
 msgstr "under læsning af iknude %u"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:89 misc/create_inode.c:287 misc/create_inode.c:352
+#: misc/create_inode.c:390
 msgid "while expanding directory"
 msgstr "under udvidelse af mappe"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:96
 #, c-format
 msgid "while linking \"%s\""
 msgstr "under oprettelse af forbindelse for »%s«"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:104 misc/create_inode.c:131 misc/create_inode.c:321
 #, c-format
 msgid "while writing inode %u"
 msgstr "under skrivning af iknude %u"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:151 misc/create_inode.c:175
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "under visning af attributter for »%s«"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:162
 #, c-format
 msgid "while opening inode %u"
 msgstr "under åbning af iknude %u"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:168 misc/create_inode.c:195 misc/create_inode.c:975
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr "under allokering af hukommelse"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:188 misc/create_inode.c:204
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "under læsning af attribut »%s« for »%s«"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:213
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "under skrivning af attribut »%s« til iknude %u"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:223
 #, c-format
 msgid "while closing inode %u"
 msgstr "under lukning af iknude %u"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:274
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr "under allokering af iknude »%s«"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:293
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr "under oprettelse af iknude »%s«"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:359
 #, c-format
 msgid "while creating symlink \"%s\""
 msgstr "under oprettelse af symbolsk henvisning »%s«"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:377 misc/create_inode.c:896
 #, c-format
 msgid "while looking up \"%s\""
 msgstr "under opslag af »%s«"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:397
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr "under oprettelse af mappe »%s«"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:625
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "under åbning af »%s« til kopi"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:739
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr "under ændring af arbejdsmappe til »%s«"
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:747
 #, c-format
 msgid "while opening directory \"%s\""
 msgstr "under åbning af mappe »%s«"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:757
 #, c-format
 msgid "while lstat \"%s\""
 msgstr "under forsøg på at køre lstat for %s"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:808
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr "under oprettelse af speciel fil »%s«"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:817
 msgid "malloc failed"
 msgstr "malloc mislykkedes"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:825
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr "under forsøg på at læse henvisning »%s«"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:832
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr "symbolsk henvisning øget i størrelse mellem lstat() og readlink()"
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:843
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr "under skrivning af symbolsk henvisning »%s«"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:854
 #, c-format
 msgid "while writing file \"%s\""
 msgstr "under skrivning af fil »%s«"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:867
 #, c-format
 msgid "while making dir \"%s\""
 msgstr "under udarbejdelse af mappe »%s«"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:885
 msgid "while changing directory"
 msgstr "under ændring af mappe"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:891
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr "ignorerer post »%s«"
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:904
 #, c-format
 msgid "while setting inode for \"%s\""
 msgstr "under angivelse af iknude for »%s«"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:911
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "under angivelse af xattrs for »%s«"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:937
 msgid "while saving inode data"
 msgstr "under lagring af iknude-data"
 
 #: misc/dumpe2fs.c:56
 #, c-format
 msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr "Brug: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] enhed\n"
+"Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr ""
+"Brug: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] enhed\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -4194,97 +4326,54 @@ msgstr ""
 msgid "Bad blocks: %u"
 msgstr "Ugyldige blokke: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:367
 msgid "while reading journal inode"
 msgstr ""
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr ""
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
-msgstr ""
+msgstr "under læsning af journals superblok"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Journalfunktioner:       "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Journalstørrelse:         "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Journallængde:            %u\n"
-"Journalsekvens:           0x%08x\n"
-"Journalstart:             %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
+msgstr "Journals magiske numre for superblok er ugyldige!\n"
 
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
-msgstr ""
+msgstr "under læsning af journalsuperblok"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
-msgstr ""
+msgstr "Kunne ikke finde journals magiske numre for superblok"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
+#: misc/dumpe2fs.c:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "mislykkedes i at allokere MMP-mellemlager\n"
 
-#: misc/dumpe2fs.c:514
+#: misc/dumpe2fs.c:479
 #, c-format
-msgid "Journal users:            %s\n"
-msgstr ""
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "læser MMP-blok %llu fra »%s«\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:798 misc/tune2fs.c:2073
 msgid "Couldn't allocate memory to parse options!\n"
-msgstr ""
+msgstr "Kunne ikke allokere hukommelse til at fortolke tilvalg!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
-msgstr ""
+msgstr "Ugyldig superblokparameter: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
-msgstr ""
+msgstr "Ugyldig blokstørrelseparameter: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4298,224 +4387,225 @@ msgid ""
 "\tblocksize=<blocksize>\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1845
 #, c-format
 msgid "\tUsing %s\n"
-msgstr ""
+msgstr "\tBruger %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1590 misc/tune2fs.c:2949
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
-msgstr ""
+msgstr "Kunne ikke finde gyldig filsystemsuperblok.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
-msgstr ""
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s: MMP-funktioner er ikke aktiveret.\n"
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:747
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "under forsøg på at læse »%s«-bitmap\n"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"*** Kør e2fsck nu!\n"
+"\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
-msgstr ""
+msgid "Usage: %s [ -r|Q ] [ -f ] device image-file\n"
+msgstr "Brug: %s [ -r|Q ] [ -f ] enhedsaftryksfil\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:109
 #, c-format
 msgid "       %s -I device image-file\n"
-msgstr ""
+msgstr "      %s -I enhedsaftryksfil\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:110
 #, c-format
 msgid ""
 "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
 "[ dest_fs ]\n"
 msgstr ""
+"       %s -ra  [  -cfnp  ] [ -o src_forskydning ] [ -O dest_forskydning ] "
+"src_fs [ dest_fs ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:175 misc/e2image.c:580 misc/e2image.c:586 misc/e2image.c:1185
 msgid "while allocating buffer"
-msgstr ""
+msgstr "under allokering af mellemlager"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:180
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "Skriver blok %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:194
 #, c-format
 msgid "error writing block %llu"
 msgstr "fejl ved skrivning af blok %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:197
 msgid "error in generic_write()"
 msgstr "fejl i generic_write()"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:214
 msgid "Error: header size is bigger than wrt_size\n"
-msgstr ""
+msgstr "Fejl: teksthovedstørrelse er større end wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:219
 msgid "Couldn't allocate header buffer\n"
 msgstr ""
 
-#: misc/e2image.c:246
+#: misc/e2image.c:247
 msgid "while writing superblock"
-msgstr ""
+msgstr "under skrivning af superblok"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:256
 msgid "while writing inode table"
 msgstr ""
 
-#: misc/e2image.c:263
+#: misc/e2image.c:264
 msgid "while writing block bitmap"
 msgstr ""
 
-#: misc/e2image.c:271
+#: misc/e2image.c:272
 msgid "while writing inode bitmap"
 msgstr ""
 
-#: misc/e2image.c:505
+#: misc/e2image.c:506
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Ødelagt mappeblok %llu: ugyldig rec_len (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:518
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Ødelagt mappeblok %llu: ugydlig name_len (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:559
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu blokke (%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:590 misc/e2image.c:630
 msgid "Copying "
 msgstr "Kopierer "
 
-#: misc/e2image.c:626
+#: misc/e2image.c:627
 msgid ""
 "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr ""
+"Hvis du stopper nu, vil filsystemet blive ødelagt, afbryd igen hvis du er "
+"sikker\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:653
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr ""
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:665 misc/e2image.c:1195
 #, c-format
 msgid "error reading block %llu"
 msgstr "fejl ved læsning af blok %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:719
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "Kopierede %llu / %llu blokke (%d%%) i %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:723
 #, c-format
 msgid "at %.2f MB/s"
 msgstr ""
 
-#: misc/e2image.c:758
+#: misc/e2image.c:759
 msgid "while allocating l1 table"
 msgstr "under allokering af l1-tabel"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:804
 msgid "while allocating l2 cache"
 msgstr "under allokering af l2-cache"
 
-#: misc/e2image.c:826
+#: misc/e2image.c:827
 msgid ""
 "Warning: There are still tables in the cache while putting the cache, data "
 "will be lost so the image may not be valid.\n"
 msgstr ""
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1152
 msgid "while allocating ext2_qcow2_image"
-msgstr ""
+msgstr "under allokering af ext2_qcow2_image"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1159
 msgid "while initializing ext2_qcow2_image"
 msgstr ""
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1218 misc/e2image.c:1236
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr ""
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1276
 msgid "while allocating block bitmap"
 msgstr "under allokering af blokbitmap"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1285
 msgid "while allocating scramble block bitmap"
 msgstr "under allokering af scramble blokbitmap"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1292
 msgid "Scanning inodes...\n"
 msgstr "Skanner iknuder ...\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1304
 msgid "Can't allocate block buffer"
 msgstr "Kan ikke allokere blokbuffer"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1343 misc/e2image.c:1357
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "under gennemløb over iknude %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1389
 msgid "Raw and qcow2 images cannot be installed"
-msgstr ""
+msgstr "Rå og qcow2-aftryk kan ikke installeres"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1411
 msgid "error reading bitmaps"
-msgstr ""
+msgstr "der opstod en fejl under læsning af bitmap"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1423
 msgid "while opening device file"
 msgstr "under åbning af enhedsfil"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1434
 msgid "while restoring the image table"
 msgstr "under gendannelse af billedtabellen"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1531
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "-a tilvalg kan kun bruges med rå eller QCOW2-billeder."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1537
 msgid "Offsets are only allowed with raw images."
 msgstr "Forskydninger er kun tilladte med rå billeder."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1542
 msgid "Move mode is only allowed with raw images."
 msgstr "Flyttilstand er kun tilladt med rå billeder."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1547
 msgid "Move mode requires all data mode."
 msgstr "Flyttilstand kræver alle datatilstand."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1557
 msgid "checking if mounted"
 msgstr "kontrollerer om monteret"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1564
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4527,47 +4617,52 @@ msgstr ""
 "i et inkonsistent billede, som ikke vil være nyttigt til fejlsøgning.\n"
 "Brug tilvalget -f hvis du virkelig ønsker dette.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1618
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "QCOW2-billede kan ikke skrives til standardud!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1624
 msgid "Can not stat output\n"
 msgstr "Kan ikke køre stat på uddata\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1634
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "Billedet (%s) er komprimeret\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1637
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "Billedet (%s) er krypteret\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1640
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Billedet (%s) er ødelagt\n"
+
+#: misc/e2image.c:1644
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr ""
 "under forsøg på at konvertere qcow2-billedet (%s) til et rå billede (%s)"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1654
 msgid "The -c option only supported in raw mode\n"
 msgstr "Tilvalget -c er kun understøttet i raw-tilstand\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1659
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "Tilvalget -c er ikke understøttet under skrivning til standardud\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1666
 msgid "while allocating check_buf"
 msgstr "under allokering af check_buf"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1672
 msgid "The -p option only supported in raw mode\n"
 msgstr "Tilvalget -p er kun understøttet i rå tilstand\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1682
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d blokke indeholdt allerede dataene til kopiering\n"
@@ -4597,7 +4692,7 @@ msgstr "e2label: fejl under læsningaf superblok\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: ikke et ext2-filsystem\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3152
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Advarsel: etiket er for lang, afkorter.\n"
@@ -4612,198 +4707,198 @@ msgstr "e2label: kan ikke søge til superblok igen\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: der opstod en fejl under skrivning af superblok\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1733
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Brug: e2label enhed [nyetiket]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
-msgstr "Brug: %s [-f] [-h] [-n] [-v] <transaktionsfil><filsystem>\n"
+msgid ""
+"Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> "
+"<filesystem>\n"
+msgstr ""
+"Brug: %s [-f] [-h] [-n] [-o forskydning] [-v] [-z fortryd_fil] "
+"<transaktionsfil> <filsystem>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr "Filsystemets superblok matcher ikke genskabfilen.\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr "UUID matcher ikke.\n"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr "Sidste monteringstidspunkt matcher ikke.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr "Sidste skrivetidspunkt matcher ikke.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr "under læsning af filsystemets superblok."
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr "under indhentelse af superblok"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "Superblokkens kontrolsum for genskab matcher ikke superblok.\n"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr "ugyldig forskydning - %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr "Vil ikke skrive til en gendanfil under afspilning af den.\n"
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "under åbning af genskabfilen »%s«\n"
 
-#: misc/e2undo.c:374
-#, fuzzy
+#: misc/e2undo.c:380
 msgid "while reading undo file"
-msgstr "under læsning af rod-iknude"
+msgstr "under læsning af genskabfil"
 
-#: misc/e2undo.c:379
-#, fuzzy, c-format
+#: misc/e2undo.c:385
+#, c-format
 msgid "%s: Not an undo file.\n"
-msgstr "%s: for mange enheder\n"
+msgstr "%s: Ikke en genskabfil.\n"
 
-#: misc/e2undo.c:390
-#, fuzzy, c-format
+#: misc/e2undo.c:396
+#, c-format
 msgid "%s: Header checksum doesn't match.\n"
-msgstr "Iknudens kontrolsum matcher ikke iknude"
+msgstr "%s: Teksthovedets kontrolsum matcher ikke.\n"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
-msgstr ""
+msgstr "%s: Ødelagt teksthoved for genskabfil.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
-msgstr ""
+msgstr "%s: Genskabblokkens størrelse er for stor.\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
-msgstr ""
+msgstr "%s: Genskabblokkens størrelse er for lille.\n"
 
-#: misc/e2undo.c:419
-#, fuzzy, c-format
+#: misc/e2undo.c:425
+#, c-format
 msgid "%s: Unknown undo file feature set.\n"
-msgstr ""
-"Journalsuperblok har et ukendt og ikke kompatibelt funktionsflag angivet.\n"
+msgstr "%s: Ukendt funktionssæt for genskabfilen.\n"
 
-#: misc/e2undo.c:427
-#, fuzzy, c-format
+#: misc/e2undo.c:433
+#, c-format
 msgid "Error while determining whether %s is mounted."
-msgstr "Der opstod en fejl under bestemmelse af hvorvidt %s er monteret.\n"
+msgstr "Der opstod en fejl under bestemmelse af om %s er monteret."
 
-#: misc/e2undo.c:433
-#, fuzzy
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
-msgstr "e2undo må ikke køres på et filsystem, der ikke er monteret\n"
+msgstr "e2undo skal kun køres på filsystemer, der ikke er monteret"
 
-#: misc/e2undo.c:449
-#, fuzzy, c-format
+#: misc/e2undo.c:455
+#, c-format
 msgid "while opening `%s'"
-msgstr "under åbning af %s"
+msgstr "under åbning af »%s«"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
-msgstr ""
+msgstr "angivet forskydning er for stor"
 
-#: misc/e2undo.c:501
-#, fuzzy
+#: misc/e2undo.c:507
 msgid "while reading keys"
-msgstr "under læsning af bitmaps"
+msgstr "under læsning af nøgler"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
-msgstr ""
+msgstr "%s: forkert nøglemagi ved %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
-msgstr ""
+msgstr "%s: kontrolsumfejl for nøgleblok ved %llu.\n"
 
-#: misc/e2undo.c:546
-#, fuzzy, c-format
+#: misc/e2undo.c:552
+#, c-format
 msgid "%s: block %llu is too long."
-msgstr "Fra blok %lu til %lu\n"
+msgstr "%s: blok %llu er for lang."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
-#, fuzzy, c-format
+#: misc/e2undo.c:564 misc/e2undo.c:600
+#, c-format
 msgid "while fetching block %llu."
-msgstr "Skriver blok %llu\n"
+msgstr "under indhentelse af blok %llu."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
-msgstr ""
+msgstr "kontrolsumfejl i filsystemblok %llu (genskab blk %llu)\n"
 
-#: misc/e2undo.c:609
-#, fuzzy, c-format
+#: misc/e2undo.c:615
+#, c-format
 msgid "while writing block %llu."
-msgstr "fejl ved skrivning af blok %llu"
+msgstr "under skrivning af blok %llu."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
-msgstr ""
+msgstr "Ødelæggelse i genskabfil; kør e2fsck NU!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
-msgstr ""
+msgstr "IO-fejl under genafspilning; kør e2fsck NU!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
-msgstr ""
+msgstr "Ufuldstændig genskabpost; kør e2fsck.\n"
 
 #: misc/findsuper.c:110
 #, c-format
 msgid "Usage:  findsuper device [skipbytes [startkb]]\n"
-msgstr ""
+msgstr "Brug: findsuper-enhed [skipbytes [startkb]]\n"
 
 #: misc/findsuper.c:155
 #, c-format
 msgid "skipbytes should be a number, not %s\n"
-msgstr ""
+msgstr "skipbytes bør være et nummer, ikke %s\n"
 
 #: misc/findsuper.c:162
 #, c-format
 msgid "skipbytes must be a multiple of the sector size\n"
-msgstr ""
+msgstr "skipbytes skal gå op i sektorstørrelsen\n"
 
 #: misc/findsuper.c:169
 #, c-format
 msgid "startkb should be a number, not %s\n"
-msgstr ""
+msgstr "startkb skal være et nummer, ikke %s\n"
 
 #: misc/findsuper.c:175
 #, c-format
 msgid "startkb should be positive, not %llu\n"
-msgstr ""
+msgstr "startkb skal være positiv, ikke %llu\n"
 
 #: misc/findsuper.c:186
 #, c-format
 msgid "starting at %llu, with %u byte increments\n"
-msgstr ""
+msgstr "startende ved %llu, med %u byte stigninger\n"
 
 #: misc/findsuper.c:188
 #, c-format
@@ -4811,6 +4906,8 @@ msgid ""
 "[*] probably superblock written in the ext3 journal superblock,\n"
 "\tso start/end/grp wrong\n"
 msgstr ""
+"[*] sandsynligvis superblok skrevet i ext3-journalsuperblokken,\n"
+"\tså start/end/grp er forkert\n"
 
 #: misc/findsuper.c:190
 #, c-format
@@ -4818,6 +4915,8 @@ msgid ""
 "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
 "mount_time           sb_uuid label\n"
 msgstr ""
+"byte_forsk.  byte_start     byte_slut fs_blokke blksz  grp  mkfs/"
+"mont_tid             sb_uuid etiket\n"
 
 #: misc/findsuper.c:264
 #, c-format
@@ -4825,6 +4924,8 @@ msgid ""
 "\n"
 "%11Lu: finished with errno %d\n"
 msgstr ""
+"\n"
+"%11Lu: afsluttedes med errno %d\n"
 
 #: misc/fsck.c:343
 #, c-format
@@ -4848,37 +4949,37 @@ msgstr ""
 "\tbør rette din /etc/fstab-fil så snart som muligt.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: ikke fundet\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: vent: Ikke flere underprocesser?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Advarsel ... %s for enhed %s afsluttedes med signal %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: status er %x, bør aldrig ske.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Færdig med %s (afslutningsstatus %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Fejl %d under kørsel af fsck.%s for %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -4886,11 +4987,11 @@ msgstr ""
 "Enten alle eller ingen af filsystemtyperne videresendt til -t må være\n"
 "foranstillet med »no« eller »!«.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Kunne ikke allokere hukommelse for filsystemstyper\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
@@ -4899,91 +5000,92 @@ msgstr ""
 "%s: udelader ugyldig linje i /etc/fstab: bind mount med fsck-"
 "gennemløbsnummer forskellig fra nul\n"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: kan ikke kontrollere %s: fsck.%s blev ikke fundet\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Kontrollerer alle filsystemer.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--waiting-- (gennemløb %d)\n"
 
-#: misc/fsck.c:1078
+#: misc/fsck.c:1085
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Brug: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-tilvalg] [filsyst ...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: for mange enheder\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: for mange argumenter\n"
 
-#: misc/fuse2fs.c:3745
-#, fuzzy
+#: misc/fuse2fs.c:3739
 msgid "Mounting read-only.\n"
-msgstr "Fil åbn er skrivebeskyttet"
+msgstr "Monterer skrivebeskyttet.\n"
 
-#: misc/fuse2fs.c:3769
+#: misc/fuse2fs.c:3763
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
-msgstr ""
+msgstr "%s: Tillader brugere at allokere alle blokke. Dette er farligt!\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3775 misc/fuse2fs.c:3789
 #, c-format
 msgid "%s: %s.\n"
-msgstr ""
+msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
-#, fuzzy, c-format
+#: misc/fuse2fs.c:3776 misc/fuse2fs.c:3791 misc/tune2fs.c:3049
+#, c-format
 msgid "Please run e2fsck -fy %s.\n"
-msgstr ""
-"kør venligst »e2fsck -f %s« først.\n"
-"\n"
+msgstr "Kør venligst e2fsck -f %s.\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3798
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr ""
+"Journal kræver gendannelse; kørsel af »e2fsck -E journal_only« er krævet.\n"
 
-#: misc/fuse2fs.c:3811
-#, fuzzy, c-format
+#: misc/fuse2fs.c:3806
+#, c-format
 msgid "%s: Writing to the journal is not supported.\n"
-msgstr "Formindskelse af iknudestørrelse er ikke understøttet\n"
+msgstr "%s: Skrivning til journalen er ikke understøttet.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3821
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr ""
+"Advarsel: Montering af ukontrolleret fs, det anbefales at køre e2fsck.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3825
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
+"Advarsel: Maksimalt antal monteringer er nået, det anbefales at køre "
+"e2fsck.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3830
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
-msgstr ""
+msgstr "Advarsel: Kontroltid er nået; det anbefales at køre e2fsck.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3834
 msgid "Orphans detected; running e2fsck is recommended.\n"
-msgstr ""
+msgstr "Forældreløse registreret; det anbefales at køre e2fsck.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3838
 msgid "Errors detected; running e2fsck is required.\n"
-msgstr ""
+msgstr "Fejl registreret; kørsel af e2fsck er krævet.\n"
 
 #: misc/lsattr.c:75
-#, fuzzy, c-format
+#, c-format
 msgid "Usage: %s [-RVadlpv] [files...]\n"
-msgstr "Brug: %s [-RVadlv] [filer ...]\n"
+msgstr "Brug: %s [-RVadlpv] [filer ...]\n"
 
 #: misc/lsattr.c:86
 #, c-format
@@ -4991,17 +5093,17 @@ msgid "While reading flags on %s"
 msgstr "Under læsning af flag på %s"
 
 #: misc/lsattr.c:93
-#, fuzzy, c-format
+#, c-format
 msgid "While reading project on %s"
-msgstr "Under læsning af version på %s"
+msgstr "Under læsning af projekt på %s"
 
 #: misc/lsattr.c:102
 #, c-format
 msgid "While reading version on %s"
 msgstr "Under læsning af version på %s"
 
-#: misc/mke2fs.c:124
-#, fuzzy, c-format
+#: misc/mke2fs.c:130
+#, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
@@ -5015,41 +5117,42 @@ msgid ""
 msgstr ""
 "Brug: %s [-c|-l filnavn] [-b blokstørrelse] [-C klyngestørrelse]\n"
 "\t[-i byte-per-iknude] [-I iknudestørrelse] [-J journaltilvalg]\n"
-"\t[-G flex-gruppestørrelse] [-N antal-iknuder]\n"
+"\t[-G flex-gruppestørrelse] [-N antal-iknuder] [-d rodmappe]\n"
 "\t[-m reserveret-blokprocent] [-o oprettet-os]\n"
 "\t[-g blokke-per-gruppe] [-L diskenhedsetiket] [-M sidst-monteret-mappe]\n"
 "\t[-O funktion[,...]] [-r fs-revision] [-E udvidet-tilvalg[,...]]\n"
-"\t[-t fs-type] [-T brug-type ] [-U UUID] [-jnqvDFKSV] emhed [blokke-antal]\n"
+"\t[-t fs-type] [-T brug-type ] [-U UUID] [-e fejlopførsel][-z genskabfil]\n"
+"\t[-jnqvDFSV] enhed [blokantal]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Kører kommando: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "under forsøg på at køre »%s«"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "under behandling af liste med ugyldige blokke fra program"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Blok %d i primær superblok/gruppebeskriver område ugyldig.\n"
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr "Blokkene %u til %u skal være i god stand for at bygge et filsystem.\n"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Afbryder ...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5060,15 +5163,19 @@ msgstr ""
 "\tindeholder ugyldige blokke.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "mens markerende ugyldige blokke som brugt"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "under skrivning af reserverede iknuder"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Skriver iknudetabeller: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5077,76 +5184,76 @@ msgstr ""
 "\n"
 "Kunne ikke skrive %d blokke i iknude-tabel startende ved %llu: %s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2726 misc/mke2fs.c:3131
 msgid "done                            \n"
 msgstr "færdig                          \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "under oprettelse af rodmappe"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "under læsning af rod-iknude"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "under opsætning af ejerskab for rod-iknude"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "under oprettelse af /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "under opslag af /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "under udvidelse af /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "under indstilling af ugyldig blok-iknude"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Ikke nok hukommelse under sletning af sektorerne %d-%d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Advarsel: Kunne ikke læse blok 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Advarsel: kunne ikke slette sektor %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "under initialisering af journal-superblok"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Nulstiller journalenhed: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "under nulstilling af journalenhed (blok %llu, antal %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "under skrivning af journal-superblok"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "Opretter filsystem med %llu %dk blokke og %u iknuder\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5155,154 +5262,159 @@ msgstr ""
 "advarsel: %llu ubrugte blokke.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Filsystemetiket=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "OS-type: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blokstørrelse=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Klyngestørrelse=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Fragmentstørrelse%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr ""
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u iknuder, %llu blokke\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu blokke (%2.2f%%) reserveret for superbrugeren\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Første datablok=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Rodmappeejer=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maksimum filsystemblokke=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u blokgrupper\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u blokgruppe\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u blokke per gruppe, %u klynger per gruppe\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blokke per gruppe, %u fragmenter per gruppe\n"
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u iknuder per gruppe\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "Filsystem UUID: %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr ""
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:820
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s kræver »-O 64bit«\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:826
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "»%s« skal komme før »resize=%u«\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:839
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Ugyldig beskrivelsesstørrelse: »%s«\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:853
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Ugyldig hash-seed: %s\n"
+
+#: misc/mke2fs.c:865
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "ugyldig forskydning: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:879 misc/tune2fs.c:2101
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Ugyldig mmp_update_interval: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:896
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Ugyldig # for sikkerhedskopisuperblokke: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:918
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:933
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:956
 #, c-format
 msgid "Invalid resize parameter: %s\n"
-msgstr ""
+msgstr "Ugyldig resize-parameter: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:963
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:987
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1013 misc/mke2fs.c:1022
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Ugyldig rod_ejer: »%s«\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1065
 #, c-format
 msgid ""
 "\n"
@@ -5329,7 +5441,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1090
 #, c-format
 msgid ""
 "\n"
@@ -5340,7 +5452,7 @@ msgstr ""
 "Advarsel: RAID stripe-bredde %u ikke et lige multiplum af stride %u.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1135
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5349,17 +5461,17 @@ msgstr ""
 "Syntaksfejl i mke2fs-konfigurationsfilen (%s, linje #%d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1148 misc/tune2fs.c:1120
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Ugyldig filsystemtilvalg angivet: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1160 misc/tune2fs.c:411
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ugyldig monteringstilvalg angivet: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1296
 #, c-format
 msgid ""
 "\n"
@@ -5368,7 +5480,7 @@ msgstr ""
 "\n"
 "Din mke2fs.conf-fil definerer ikke %s-filsystemtypen.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1300
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5376,11 +5488,11 @@ msgstr ""
 "Du skal sandsynligvis installere en opdateret mke2fs.conf-fil.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1304
 msgid "Aborting...\n"
 msgstr "Afbryder ...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1345
 #, c-format
 msgid ""
 "\n"
@@ -5391,71 +5503,71 @@ msgstr ""
 "Advarsel: fs_type %s er ikke defineret i mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1527
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Kunne ikke allokere hukommelse for ny STI (PATH).\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1564
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1597
 #, c-format
 msgid "invalid block size - %s"
 msgstr "ugyldig blokstørrelse - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1601
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Advarsel: blokstørrelse %d kan ikke bruges på de fleste systemer.\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1617
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "ugyldig klyngestørrelse - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1630
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "»-R« er forældet, brug »-E« i stedet for"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1644 misc/tune2fs.c:1830
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "ugyldig fejlopførsel - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1656
 msgid "Illegal number for blocks per group"
 msgstr "Ulovligt antal for blokke per gruppe"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1661
 msgid "blocks per group must be multiple of 8"
 msgstr "blokke per gruppe skal være multiplum af 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1669
 msgid "Illegal number for flex_bg size"
 msgstr "Ugyldigt nummer for flex_bg-størrelse"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1675
 msgid "flex_bg size must be a power of 2"
 msgstr "flex_bg-størrelsen skal være en potens af 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1680
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "flex_bg-størrelsen (%lu) skal være mindre end eller lig med 2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1690
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "ugyldig iknudeforhold %s (min %d/maks %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1700
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "ugyldig iknudestørrelse - %s"
 
-#: misc/mke2fs.c:1684
+#: misc/mke2fs.c:1713
 msgid ""
 "Warning: -K option is deprecated and should not be used anymore. Use '-E "
 "nodiscard' extended option instead!\n"
@@ -5463,80 +5575,81 @@ msgstr ""
 "Advarsel: Tilvalget -K er forældet og bør ikke bruges længere. Brug det "
 "udvidede tilvalg »-E nodiscard« i stedet!\n"
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1724
 msgid "in malloc for bad_blocks_filename"
 msgstr "i malloc for bad_blocks_filename"
 
-#: misc/mke2fs.c:1704
-#, fuzzy, c-format
+#: misc/mke2fs.c:1733
+#, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
-msgstr "Advarsel: etiket er for lang, afkorter.\n"
+msgstr ""
+"Advarsel: etiket er for lang, afkorter til »%s«.\n"
+"\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1742
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "ugyldig reserveret blokprocent - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1757
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "ugyldige num-iknuder - %s"
 
-#: misc/mke2fs.c:1741
-#, fuzzy
+#: misc/mke2fs.c:1770
 msgid "while allocating fs_feature string"
-msgstr "under allokering af mellemlagre"
+msgstr "under allokering af fs_feature-streng"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1787
 #, c-format
 msgid "bad revision level - %s"
 msgstr "ugyldig revisionsniveau - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1792
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "under forsøg på at oprette revision %d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1806
 msgid "The -t option may only be used once"
 msgstr "Tilvalget -t kan kun bruges en gang"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1814
 msgid "The -T option may only be used once"
 msgstr "Tilvalget -T kan kun bruges en gang"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1870 misc/mke2fs.c:3215
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "under forsøg på at åbne journalenheden %s\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1876
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 "Journal dev-blokstørrelsen (%d) er mindre end minimumblokstørrelsen %d\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1882
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Bruger journalenhedens blokstørrelse: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1893
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "ugyldige blokke »%s« på enheden »%s«"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1923
 msgid "filesystem"
 msgstr "filsystem"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1941 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "under forsøget på at bestemme filsystemstørrelsen"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1947
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5544,7 +5657,7 @@ msgstr ""
 "Kunne ikke bestemme enhedstørrelsen; du skan angive\n"
 "størrelsen på filsystemet\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1954
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5556,42 +5669,43 @@ msgstr ""
 "af at en ændret partition var optaget eller i brug. Du skal måske genstarte\n"
 "for at kunne genlæse din partitionstabel.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:1971
 msgid "Filesystem larger than apparent device size."
 msgstr "Filsystem er større end tilsyneladende enhedsstørrelse."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:1991
 msgid "Failed to parse fs types list\n"
 msgstr "Kunne ikke fortolke fs-typeliste\n"
 
-#: misc/mke2fs.c:1999
-#, fuzzy
+#: misc/mke2fs.c:2040
 msgid "The HURD does not support the filetype feature.\n"
-msgstr "Hurd'en understøtter ikke filtypefunktionen.\n"
+msgstr "HURD'en understøtter ikke filtypefunktionen.\n"
 
-#: misc/mke2fs.c:2004
-#, fuzzy
+#: misc/mke2fs.c:2045
 msgid "The HURD does not support the huge_file feature.\n"
-msgstr "Hurd'en understøtter ikke filtypefunktionen.\n"
+msgstr "HURD'en understøtter ikke huge_file-funktionen.\n"
 
-#: misc/mke2fs.c:2009
-#, fuzzy
+#: misc/mke2fs.c:2050
 msgid "The HURD does not support the metadata_csum feature.\n"
-msgstr "Hurd'en understøtter ikke filtypefunktionen.\n"
+msgstr "HURD'en understøtter ikke metadata_csum-funktionen.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2055
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "HURD'en understøtter ikke ea_inode-funktionen.\n"
+
+#: misc/mke2fs.c:2065
 msgid "while trying to determine hardware sector size"
 msgstr "under forsøg på at bestemme sektorstørrelse for udstyr"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2071
 msgid "while trying to determine physical sector size"
 msgstr "under forsøg på at bestemme fysisk sektorstørrelse"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2103
 msgid "while setting blocksize; too small for device\n"
 msgstr "under forsøg på at angive blokstørrelse; for lille for enhed\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
@@ -5599,7 +5713,7 @@ msgstr ""
 "Advarsel: specificeret blokstørrelse %d er mindre end enhedens fysiske "
 "sektorstørrelse %d\n"
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2132
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5608,73 +5722,73 @@ msgstr ""
 "%s: Størrelse for enhed (0x%llx blokke) %s for stor til at blive udtrykt\n"
 "\ti 32-bit via en blokstørrelse på %d.\n"
 
-#: misc/mke2fs.c:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2144
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
-"%s: Størrelse for enhed (0x%llx blokke) %s for stor til at blive udtrykt\n"
-"\ti 32-bit via en blokstørrelse på %d.\n"
+"%s: Størrelse for enhed (0x%llx blokke) %s for stor til at oprette\n"
+"\ta filsystem via en blokstørrelse på %d.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2166
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "fs_types for mke2fs.conf-opløsning: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2173
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr "Filsystemfunktioner er ikke understøttet med revision 0-filsystemer\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2181
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr "Tynde superblokke er ikke understøttet med revision 0-filsystemer\n"
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2191
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Journaler er ikke understøttet med revision 0-filsystemer\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2204
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "ugyldig reserveret blokkeprocent - %lf"
 
-#: misc/mke2fs.c:2175
+#: misc/mke2fs.c:2221
 msgid ""
 "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
 "rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2241
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "Klyngestørrelsen må ikke være mindre end blokstørrelsen.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2247
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "angivelse af en klyngestørrelse kræver bigalloc-funktionen"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2267
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "advarsel: Kan ikke indhente enhedsgeometri for %s\n"
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2270
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "%s-justering forskydes med %lu byte.\n"
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2272
 #, c-format
 msgid ""
 "This may result in very poor performance, (re)-partitioning suggested.\n"
 msgstr ""
 "Dette kan medføre meget dårlig ydelse, (ny) partitionering anbefales.\n"
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2293
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d-byteblokke er for store for systemet (maks %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2297
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
@@ -5682,14 +5796,16 @@ msgstr ""
 "Advarsel: %d-byteblokke er for store for systemet (maks %d), tvunget til at "
 "fortsætte\n"
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2305
 #, c-format
 msgid ""
 "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
 "and journal checksum features.\n"
 msgstr ""
+"Forslag: Brug Linuxkerner >= 3.18 for forbedret stabilitet af metadata og "
+"journalkontrolsummens funktioner.\n"
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2360
 #, c-format
 msgid ""
 "\n"
@@ -5698,12 +5814,22 @@ msgid ""
 "not be what you want.\n"
 "\n"
 msgstr ""
+"\n"
+"Advarsel: forskydning specificeret uden en eksplicit filsystemstørrelse.\n"
+"Oprettelse af et filsystem med %llu blokke er måske ikke\n"
+"det du ønsker.\n"
+"\n"
+
+#: misc/mke2fs.c:2375
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr ""
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2397
 msgid "Can't support bigalloc feature without extents feature"
 msgstr "Kan ikke understøtte bigalloc-funkton uden extents-funktion"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2404
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -5711,7 +5837,7 @@ msgstr ""
 "Funktionerne resize_inode og meta_bg er ikke kompatible.\n"
 "De kan ikke begge være aktiveret på samme tidspunkt.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2412
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5724,47 +5850,42 @@ msgstr ""
 "information\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2424
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "reserverede online ændringsblokke er ikke understøttet på ikke-tyndt "
 "filsystem"
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2433
 msgid "blocks per group count out of range"
 msgstr "bloks per gruppe-antal uden for interval"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2455
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 "Flex_bg-funktion er ikke aktiveret, så flex_bg-størrelse kan ikke angives"
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2467
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "ugyldig iknudestørrelse %d (min %d/maks %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2482
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr ""
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2497
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "for mange iknuder (%llu), hæv iknudeforhold?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2504
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "for mange iknuder (%llu), specificer < 2^32 iknuder"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2518
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5775,67 +5896,74 @@ msgstr ""
 "\tfilsystem med %llu blokke, specificer højere iknude_forhold (-i)\n"
 "\teller lavere iknudeantal (-N).\n"
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2705
 msgid "Discarding device blocks: "
 msgstr "Fjerner enhedsblokke: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2721
 msgid "failed - "
 msgstr "mislykkedes - "
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2780
 msgid "while initializing quota context"
 msgstr "under initialisering af kvotakontekst"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2787
 msgid "while writing quota inodes"
 msgstr "under skrivning af kvota-iknuder"
 
-#: misc/mke2fs.c:2759
-#, fuzzy, c-format
+#: misc/mke2fs.c:2812
+#, c-format
 msgid "bad error behavior in profile - %s"
-msgstr "ugyldig fejlopførsel - %s"
+msgstr "ugyldig fejlopførsel i profil - %s"
+
+#: misc/mke2fs.c:2888
+msgid "in malloc for android_sparse_params"
+msgstr "i malloc for android_sparse_params"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2902
 msgid "while setting up superblock"
 msgstr "under opsætning af superblok"
 
-#: misc/mke2fs.c:2849
+#: misc/mke2fs.c:2918
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Pass -O extents to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2856
+#: misc/mke2fs.c:2925
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
+"64-bit filsystemunderstøttelse er ikke aktiveret. De større felter ydet af "
+"denne funktion aktiverer fuld styrke i kontrolsummer. Send -O 64bit for at "
+"rette.\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr ""
+#: misc/mke2fs.c:2933
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "Funktionen metadata_csum_seed kræver funktionen metadata_csum.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:2957
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr ""
 "Fjernelse lykkedes og vil returnere 0s - udelader iknudetabelfjernelse\n"
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3056
 #, c-format
 msgid "unknown os - %s"
 msgstr "ukendt os - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3119
 msgid "Allocating group tables: "
 msgstr "Allokerer gruppetabeller: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3127
 msgid "while trying to allocate filesystem tables"
 msgstr "under forsøg på at allokere filsystemtabeller"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3136
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -5843,30 +5971,30 @@ msgstr ""
 "\n"
 "\tunder konvertering af underklynge-bitmap"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3142
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr ""
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3183
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "under nulstilling af blok %llu i slutningen af filsystemet"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3196
 msgid "while reserving blocks for online resize"
 msgstr "under reservering af blokke for online ændring af størrelse"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3208 misc/tune2fs.c:1538
 msgid "journal"
 msgstr "journal"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3220
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Tilføjer journal til enheden %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3227
 #, c-format
 msgid ""
 "\n"
@@ -5875,21 +6003,21 @@ msgstr ""
 "\n"
 "\tunder forsøg på at tilføje journal til enheden %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3232 misc/mke2fs.c:3261 misc/mke2fs.c:3299
+#: misc/mk_hugefiles.c:598 misc/tune2fs.c:1567 misc/tune2fs.c:1586
 msgid "done\n"
 msgstr "færdig\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3238
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Udelader journaloprettelse i super-only-tilstand\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3248
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Opretter journal (%u blokke): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3257
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -5897,7 +6025,7 @@ msgstr ""
 "\n"
 "\tunder forsøg på at oprette journal"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3269 misc/tune2fs.c:1185
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
@@ -5906,36 +6034,30 @@ msgstr ""
 "Der opstod en fejl under aktivering af funktionen for flere "
 "monteringsbeskyttelser."
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3274
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 "Flere monteringsbeskyttelser er aktiveret med opdateringsinterval %d "
 "sekunder.\n"
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3290
 msgid "Copying files into the device: "
-msgstr ""
+msgstr "Kopierer filer ned på enheden: "
 
-#: misc/mke2fs.c:3216
-#, fuzzy
+#: misc/mke2fs.c:3296
 msgid "while populating file system"
-msgstr "under allokering af l1-tabel"
+msgstr "under udfyldelse af filsystem"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3303
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Skriver superblokke og filsystemets registreringsinformation: "
 
-#: misc/mke2fs.c:3230
-#, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Advarsel, havde problemer med at skrive superblokke ud."
+#: misc/mke2fs.c:3310
+msgid "while writing out and closing file system"
+msgstr "under skrivning ud og lukning af filsystem"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3313
 msgid ""
 "done\n"
 "\n"
@@ -5943,32 +6065,37 @@ msgstr ""
 "færdig\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
+#, c-format
+msgid "while zeroing block %llu for hugefile"
+msgstr "under nulstilling af blok %llu for hugefile"
+
+#: misc/mk_hugefiles.c:514
 #, c-format
 msgid ""
 "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
 msgstr ""
+"Partitionforskyning på %llu (%uk) blokke er ikke kompatibel med "
+"klyngestørrelsen %u.\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:581
 msgid "Huge files will be zero'ed\n"
-msgstr ""
+msgstr "Store filer vil blive nulstillet\n"
 
-#: misc/mk_hugefiles.c:492
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:582
+#, c-format
 msgid "Creating %lu huge file(s) "
-msgstr "Opretter normal fil %s\n"
+msgstr "Opretter %lu store filer"
 
-#: misc/mk_hugefiles.c:494
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:584
+#, c-format
 msgid "with %llu blocks each"
-msgstr ""
-"advarsel: %llu ubrugte blokke.\n"
-"\n"
+msgstr "med %llu blokke hver"
 
-#: misc/mk_hugefiles.c:505
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:593
+#, c-format
 msgid "while creating huge file %lu"
-msgstr "under gennemløb over iknude %u"
+msgstr "under oprettelse af stor fil %lu"
 
 #: misc/mklost+found.c:50
 msgid "Usage: mklost+found\n"
@@ -6010,46 +6137,60 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   start=%8d str=%8lu slut=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "Kør venligst e2fsck på filsystemet.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+"\n"
+"Denne operation kræver et nyligt kontrolleret filsystem.\n"
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Kør venligst e2fsck -f på filsystemet.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "Kør venligst e2fsck på filsystemet.\n"
+msgstr "Kør venligst e2fsck -fD på filsystemet.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
 msgstr ""
+"Brug: %s [-c maks_monteringsantal] [-e fejl_opførsel] [-f] [-g gruppe]\n"
+"\t[-i interval[d|m|w]] [-j] [-J journal_tilvalg] [-l]\n"
+"\t[-m reserverede_blokke_procent] [-o [^]monteringstilvalg[,...]]\n"
+"\t[-r reserverede_blokke_antal] [-u bruger] [-C monteringsantal]\n"
+"\t[-L diskenhedsetiket] [-M sidst_monteret_mappe]\n"
+"\t[-O [^]feature[,...]] [-Q kvote_tilvalg]\n"
+"\t[-E udvidet-tilvalg[,...]] [-T sidste_kontroltidspunkt] [-U UUID]\n"
+"\t[-I ny_iknude_størrelse] [-z genskab_fil] enhed\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Journalsuperblok blev ikke fundet!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
-msgstr "under forsøg på at åben ekstern journal"
+msgstr "under forsøg på at åbne ekstern journal"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2845
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s er ikke en journalenhed.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:297 misc/tune2fs.c:2856
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "Filsystemets UUID blev ikke fundet på journalenhed.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:321
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6057,70 +6198,70 @@ msgstr ""
 "Kan ikke finde journalenhed. Den blev IKKE fjernet\n"
 "Brug tilvalget -f til at fjerne manglende journalenhed.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:330
 msgid "Journal removed\n"
 msgstr "Journal fjernet\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:374
 msgid "while reading bitmaps"
 msgstr "under læsning af bitmaps"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:382
 msgid "while clearing journal inode"
 msgstr "under rydning af journaliknude"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:393
 msgid "while writing journal inode"
 msgstr "under skrivning af journaliknude"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:429 misc/tune2fs.c:452 misc/tune2fs.c:465
 msgid "(and reboot afterwards!)\n"
 msgstr "(og genstart efterfølgende!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:480
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr ""
 
-#: misc/tune2fs.c:479
-#, fuzzy, c-format
+#: misc/tune2fs.c:483
+#, c-format
 msgid "Please run `resize2fs %s %s"
-msgstr ""
-"kør venligst »e2fsck -f %s« først.\n"
-"\n"
+msgstr "Kør venligst »resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:487
 #, c-format
 msgid " -z \"%s\""
-msgstr ""
+msgstr " -z »%s«"
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:489
 #, c-format
 msgid "' to enable 64-bit mode.\n"
-msgstr ""
+msgstr "' for at aktivere 64-bit tilstand.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:491
 #, c-format
 msgid "' to disable 64-bit mode.\n"
-msgstr ""
+msgstr "' for at deaktivere 64-bit tilstand.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1087
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
+"ADVARSEL: Kunne ikke bekræfte kerneunderstøttelse for metadata_csum_seed.\n"
+"  Dette kræver Linux >= v4.4.\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1123
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Funktionen for rydning af filsystem »%s« er ikke understøttet.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1129
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Funktionen for opsætning af filsystem »%s« er ikke understøttet.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1138
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6128,7 +6269,7 @@ msgstr ""
 "Funktionen has_journal kan kun ryddes, når filsystemet er umonteret\n"
 "eller monteret som skrivebeskyttet.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1146
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6136,7 +6277,7 @@ msgstr ""
 "Flaget needs_recovery er angivet. Kør venligst e2fsck før rydning\n"
 "af flaget has_journal.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1164
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
@@ -6144,7 +6285,7 @@ msgstr ""
 "Angivelse af filsystemfunktionen »sparse_super« er ikke understøttet\n"
 "for filsystemer med funktionen meta_bg aktiveret.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1177
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6154,31 +6295,31 @@ msgstr ""
 "ikke angives hvis filsystemet er monteret eller\n"
 "skrivebeskyttet.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1195
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1204
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1212
 msgid "Error while reading bitmaps\n"
 msgstr "Der opstod en fejl under læsning af bitmap\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1221
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr "Magisk nummer i MMP-blok matcher ikke. forventede: %x, faktisk %x\n"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1226
 msgid "while reading MMP block."
 msgstr "under læsning af MMP-blok."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1258
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
@@ -6186,85 +6327,87 @@ msgstr ""
 "Rydning af flaget flex_bg vil medføre at filsystemet bliver\n"
 "inkonsistent.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1269
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1280
 msgid "Enabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1282
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1175
+#: misc/tune2fs.c:1288
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Re-run with -O extent to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1182
+#: misc/tune2fs.c:1295
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Run resize2fs -b to "
 "rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1321
 msgid "Disabling checksums could take some time."
-msgstr ""
+msgstr "Deaktivering af kontrolsummer kan tage lidt tid."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1323
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
-msgstr ""
+msgstr "Kan ikke deaktivere metadata_csum på et monteret filsystem!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1386
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
-msgstr ""
+msgstr "Kan ikke aktivere 64-bit tilstand mens monteret!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1396
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
-msgstr ""
+msgstr "Kan ikke deaktivere 64-bit tilstand mens monteret!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1426
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1447
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1344
-#, fuzzy
+#: misc/tune2fs.c:1465
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
 msgstr ""
-"Angivelse af filsystemfunktionen »sparse_super« er ikke understøttet\n"
-"for filsystemer med funktionen meta_bg aktiveret.\n"
+"Angivelse af funktionen »metadata_csum_seed« er kun understøttet\n"
+"på filsystemer med funktionen metadata_csum aktiveret.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1483
 msgid ""
 "UUID has changed since enabling metadata_csum.  Filesystem must be "
 "unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1489
+msgid "Recalculating checksums could take some time."
+msgstr "Genberegning af kontrolsummer kan tage lidt tid."
+
+#: misc/tune2fs.c:1531
 msgid "The filesystem already has a journal.\n"
 msgstr "Filsystemet har allerede en journal.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1551
 #, c-format
 msgid ""
 "\n"
@@ -6273,21 +6416,21 @@ msgstr ""
 "\n"
 "\tunder forsøg på at åbne journal på %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1555
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Opretter journal på enhed %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1563
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "under tilføjelse af filsystem til journal på %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1569
 msgid "Creating journal inode: "
 msgstr "Opretter journaliknude: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1583
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6295,27 +6438,31 @@ msgstr ""
 "\n"
 "\tunder forsøg på at oprette journalfil"
 
-#: misc/tune2fs.c:1498
-#, fuzzy
+#: misc/tune2fs.c:1621
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1634
 msgid "while initializing quota context in support library"
-msgstr "under initialisering af journal-superblok"
+msgstr "under initialisering af kvotakontekst i understøttelsesbibliotek"
 
-#: misc/tune2fs.c:1518
-#, fuzzy, c-format
+#: misc/tune2fs.c:1649
+#, c-format
 msgid "while updating quota limits (%d)"
-msgstr "under opdatering af ødelagt blok-iknude"
+msgstr "under opdatering af kvotabegrænsninger (%d)"
 
-#: misc/tune2fs.c:1526
-#, fuzzy, c-format
+#: misc/tune2fs.c:1657
+#, c-format
 msgid "while writing quota file (%d)"
-msgstr "under skrivning af journaliknude"
+msgstr "under skrivning af kvotafil (%d)"
 
-#: misc/tune2fs.c:1534
-#, fuzzy, c-format
+#: misc/tune2fs.c:1675
+#, c-format
 msgid "while removing quota file (%d)"
-msgstr "under læsning af rod-iknude"
+msgstr "under fjernelse af kvotafil (%d)"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1718
 msgid ""
 "\n"
 "Bad quota options specified.\n"
@@ -6329,65 +6476,65 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1776
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Kunne ikke fortolke dato/tids-angiveren: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1801 misc/tune2fs.c:1814
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "ugyldigt monteringsantal - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1857
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "ugyldig gid/gruppenavn - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1890
 #, c-format
 msgid "bad interval - %s"
 msgstr "ugyldig interval - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1919
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "ugyldigt reserveret blokforhold - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1934
 msgid "-o may only be specified once"
 msgstr "-o kan kun angives en gang"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1943
 msgid "-O may only be specified once"
 msgstr "-O kan kun angives en gang"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "ugyldigt reserveret blokantal - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1989
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "ugyldig uid/brugernavn - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:2006
 #, c-format
 msgid "bad inode size - %s"
 msgstr "ugylding iknude-størrelse - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:2013
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Iknude-størrelse skal være en potens af to - %s"
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2110
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "mmp_update_interval er for stort: %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2115
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
 msgid_plural ""
@@ -6395,27 +6542,27 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2138
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Ugyldig RAID stride: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2153
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Ugyldig RAID stripe-bredde: %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2168
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Ugyldig hashalgoritme: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2174
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Angiver standardhashalgoritmen til %s (%d)\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2193
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6427,118 +6574,149 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2663
 msgid "Failed to read inode bitmap\n"
 msgstr "Kunne ikke læse iknude-bitmap\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2668
 msgid "Failed to read block bitmap\n"
 msgstr "Kunne ikke læse blok-bitmap\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2685 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "blokke der skal flyttes"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2688
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr "Kunne ikke allokere blok-bitmap da iknudestørrelsen blev øget\n"
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2694
 msgid "Not enough space to increase inode size \n"
 msgstr "Ikke nok plads til at øge iknudestørrelsen \n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2699
 msgid "Failed to relocate blocks during inode resize \n"
-msgstr ""
+msgstr "Kunne ikke relokere blokke under ændring af størrelsen for iknude \n"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2731
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
 msgstr ""
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2936
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+"Hvis du er sikker på, at filsystemet ikke er i brug på nogen knude, så kør:\n"
+"»tune2fs -f -E clear_mmp {device}«\n"
+
+#: misc/tune2fs.c:2943
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:2811
-#, fuzzy
+#: misc/tune2fs.c:2955
 msgid "Cannot modify a journal device.\n"
-msgstr "%s er ikke en journalenhed.\n"
+msgstr "Kan ikke ændre en journalenhed.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2968
 #, c-format
 msgid "The inode size is already %lu\n"
-msgstr ""
+msgstr "Iknudestørrelsen er allerede %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2975
 msgid "Shrinking inode size is not supported\n"
 msgstr "Formindskelse af iknudestørrelse er ikke understøttet\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2980
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "Ugyldig iknudestørrelse %lu (maks %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2986
 msgid "Resizing inodes could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3034
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+"Advarsel: Denne journal er beskidt. Du kan genafspille journalen således:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"kør så denne kommando igen. Ellers vil eventuelle ændringer blive "
+"overskrevet\n"
+"af journal-gendannelse.\n"
+
+#: misc/tune2fs.c:3045
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Genskaber journal.\n"
+
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "Setting current mount count to %d\n"
-msgstr ""
+msgstr "Sætter nuværende monteringsantal til %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3074
 #, c-format
 msgid "Setting error behavior to %d\n"
-msgstr ""
+msgstr "Sætter fejlopførsel til %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3079
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3084
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr ""
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3091
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr ""
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3098
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3104
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr ""
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3111
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3116
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6546,7 +6724,7 @@ msgstr ""
 "\n"
 "Filsystemet har allerede tynde superblokke.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3119
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6556,7 +6734,7 @@ msgstr ""
 "Angivelse af det tynde superblokflag er ikke understøttet\n"
 "for filsystemer med funktionen meta_bg aktiveret.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3129
 #, c-format
 msgid ""
 "\n"
@@ -6565,7 +6743,7 @@ msgstr ""
 "\n"
 "Tyndt superblokflag angivet. %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3134
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6573,127 +6751,115 @@ msgstr ""
 "\n"
 "Rydning af det tynde superblokflag er ikke understøttet.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3142
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Angiver tidspunkt for filsystemets sidste kontrol til %s\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3148
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Angiver reserveret blokke-uid til %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3180
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr "fejl i brugen af clear_mmp. Den skal bruges med -f\n"
 
-#: misc/tune2fs.c:3024
+#: misc/tune2fs.c:3198
 msgid ""
 "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr "Kvotafunktionen kan kun ændres når filsystemer er afmonteret.\n"
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3222
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr "UUID'en kan kun ændres når filsystemet er afmonteret.\n"
 
-#: misc/tune2fs.c:3051
+#: misc/tune2fs.c:3225
 msgid ""
 "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
 "and re-run this command.\n"
 msgstr ""
+"Hvis du kun bruger kerner nyere end version 4.4, så kør »tune2fs -O "
+"metadata_csum_seed« og kør denne kommando igen.\n"
 
-#: misc/tune2fs.c:3060
+#: misc/tune2fs.c:3234
 msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr ""
+msgstr "Angivelse af UUID på et filsystem med kontrolsummer kan tage lang tid."
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3259
 msgid "Invalid UUID format\n"
 msgstr "Ugyldigt UUID-format\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3275
 msgid "Need to update journal superblock.\n"
 msgstr "Skal opdatere journalsuperblok.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3301
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
-msgstr ""
+msgstr "Iknudens størrelse kan kun ændres når filsystemet er afmonteret.\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3308
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
+"Ændring af iknudens størrelse er ikke understøttet på filsystemer med\n"
+"funktionen flex_bg aktiveret.\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3326
 #, c-format
 msgid "Setting inode size %lu\n"
-msgstr ""
+msgstr "Sætter iknudestørrelse %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3330
 msgid "Failed to change inode size\n"
 msgstr "Kunne ikke ændre iknudestørrelse\n"
 
-#: misc/tune2fs.c:3169
+# eng. tastefejl = stride kontra stripe
+#: misc/tune2fs.c:3344
 #, c-format
 msgid "Setting stride size to %d\n"
-msgstr ""
+msgstr "Sætter stridestørrelse til %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3349
 #, c-format
 msgid "Setting stripe width to %d\n"
-msgstr ""
+msgstr "Sætter stripebredde til %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3356
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
-msgstr ""
-
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, fuzzy, c-format
-msgid "Recovering journal.\n"
-msgstr "%s: genskaber journal\n"
+msgstr "Sætter udvidede monteringsindstillinger til »%s«\n"
 
 #: misc/util.c:100
 msgid "<proceeding>\n"
-msgstr ""
+msgstr "<i_gang>\n"
 
 #: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Fortsæt alligevel? (j,n) "
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "Fortsæt alligevel (eller vent %d sekunder for at fortsætte) ? (j,N) "
 
 #: misc/util.c:108
-#, fuzzy
 msgid "Proceed anyway? (y,N) "
-msgstr "Fortsæt alligevel? (j,n) "
+msgstr "Fortsæt alligevel? (j,N) "
 
 #: misc/util.c:133
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
-msgstr ""
+msgstr "mke2fs tvunget alligevel. Håb at /etc/mtab er forkert.\n"
 
 #: misc/util.c:138
 #, c-format
 msgid "will not make a %s here!\n"
-msgstr ""
+msgstr "vil ikke lave en %s her!\n"
 
 #: misc/util.c:145
 msgid "mke2fs forced anyway.\n"
-msgstr ""
+msgstr "mke2fs tvunget alligevel.\n"
 
 #: misc/util.c:161
 msgid "Couldn't allocate memory to parse journal options!\n"
-msgstr ""
+msgstr "Kunne ikke allokere hukommelse til at fortolke journalindstillinger!\n"
 
 #: misc/util.c:186
 #, c-format
@@ -6701,6 +6867,8 @@ msgid ""
 "\n"
 "Could not find journal device matching %s\n"
 msgstr ""
+"\n"
+"Kunne ikke finde journal-enhed der matcher %s\n"
 
 #: misc/util.c:213
 msgid ""
@@ -6718,12 +6886,27 @@ msgid ""
 "The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
+"\n"
+"Ugyldige journaltilvalg er angivet.\n"
+"\n"
+"Journaltilvalg er adskilt af komma, og kan bruge et argument som sendes\n"
+"\tafsted med et lig med-tegn (»=«).\n"
+"\n"
+"Gyldige journaltilvalg er:\n"
+"\tsize=<journalstørrelse i megabyte>\n"
+"\tdevice=<journalenhed>\n"
+"\tlocation=<journalplacering>\n"
+"\n"
+"Journalstørrelsen skal være mellem 1024 og 10240000 filsystemblokke.\n"
+"\n"
 
 #: misc/util.c:244
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
 msgstr ""
+"\n"
+"Filsystem er for lille for en journal\n"
 
 #: misc/util.c:251
 #, c-format
@@ -6732,6 +6915,9 @@ msgid ""
 "The requested journal size is %d blocks; it must be\n"
 "between 1024 and 10240000 blocks.  Aborting.\n"
 msgstr ""
+"\n"
+"Den anmodt journalstørrelse er på %d blokke; størrelsen\n"
+"skal være mellem 1024 og 10240000 blokke. Afbryder.\n"
 
 #: misc/util.c:259
 msgid ""
@@ -6893,64 +7079,68 @@ msgid "#\tNum=%llu, Size=%llu, Cursor=%llu, Sorted=%llu\n"
 msgstr ""
 
 #: resize/main.c:49
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"[-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
-"Brug: %s [-d fejlsøgningsflag] [-f] [-F] [-M] [-P] [-p] enhed "
-"[ny_størrelse]\n"
+"Brug: %s [-d fejlsøgningsflag] [-f] [-F] [-M] [-P] [-p] enhed [-b|-s|"
+"ny_størrelse] [-S RAID-stride]  [-z genskabfil]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Udvider iknude-tabellen"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Omallokerer blokke"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Skanner iknude-tabel"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Opdaterer iknude-referencer"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Flytter iknude-tabel"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Ukendt gennemløb?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Begynd gennemløb %d (maks. = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
 "your own risk!  Use the force option if you want to go ahead anyway.\n"
 "\n"
 msgstr ""
+"\n"
+"Ændring af størrelsen på bigalloc-filsystemer er ikke testet fuldt ud.\n"
+"Fortsæt på egen risiko! Brug tilvalget force hvis du ønsker at fortsætte.\n"
+"\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "under åbning af %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "under indhentelse af stat-information for %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -6959,116 +7149,128 @@ msgstr ""
 "kør venligst »e2fsck -f %s« først.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Estimeret minimumsstørrelse for filsystemet: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Ugyldig ny størrelse: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "Ny størrelse for stor til at blive udtryk ti 32-bit\n"
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Ny størrelse er mindre end minimum (%llu)\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
-msgstr ""
+msgstr "Ugyldig stride-længde"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, 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 indeholdte partition (eller enhed) er kun på %llu (%dk) blokke.\n"
+"Du anmodte om en størrelse på %llu blokke.\n"
+"\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
-msgstr ""
+msgstr "Kan ikke sætte eller fjerne 64-bit funktion.\n"
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
 msgid ""
 "Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
 "blocks.\n"
 msgstr ""
+"Kan ikke ændre 64-bit funktionen på et filsystem som er større end 2^32 "
+"blokke.\n"
 
-#: resize/main.c:575
-#, fuzzy, c-format
+#: resize/main.c:581
+#, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
-msgstr "Kvotafunktionen kan kun ændres når filsystemer er afmonteret.\n"
+msgstr "Kan ikke ændre 64-bit funktionen mens filsystemet er monteret.\n"
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
 msgid ""
 "Please enable the extents feature with tune2fs before enabling the 64bit "
 "feature.\n"
 msgstr ""
+"Aktiver extents-funktionen med tune2fs før aktivering af 64-bit funktionen.\n"
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
-msgstr "Filsystemet er allerede %llu (%dk( blokke langt. Intet at gøre!\n"
+msgstr ""
+"Filsystemet er allerede %llu (%dk( blokke langt. Intet at gøre!\n"
+"\n"
 
-#: resize/main.c:594
-#, fuzzy, c-format
+#: resize/main.c:600
+#, c-format
 msgid "The filesystem is already 64-bit.\n"
-msgstr "Filsystemet har allerede en journal.\n"
+msgstr "Filsystemet er allerede 64-bit.\n"
 
-#: resize/main.c:599
-#, fuzzy, c-format
+#: resize/main.c:605
+#, c-format
 msgid "The filesystem is already 32-bit.\n"
-msgstr "Filsystemet har allerede en journal.\n"
+msgstr "Filsystemet er allerede 32-bit.\n"
 
-#: resize/main.c:608
-#, fuzzy, c-format
+#: resize/main.c:613
+#, c-format
 msgid "Converting the filesystem to 64-bit.\n"
-msgstr "Angiver tidspunkt for filsystemets sidste kontrol til %s\n"
+msgstr "Konverterer filsystemet til 64-bit.\n"
 
-#: resize/main.c:610
-#, fuzzy, c-format
+#: resize/main.c:615
+#, c-format
 msgid "Converting the filesystem to 32-bit.\n"
-msgstr "Angiver tidspunkt for filsystemets sidste kontrol til %s\n"
+msgstr "Konverterer filsystemet til 32-bit.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
-msgstr ""
+msgstr "Ændrer størrelse på filsystemet på %s til %llu (%dk) blokke.\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
-msgstr ""
+msgstr "under forsøg på at ændre størrelse på %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
 "after the aborted resize operation.\n"
 msgstr ""
+"Kør venligst »e2fsck -fy %s« for at rette filsystemet\n"
+"efter den afbrudte ændring af størrelse-operation.\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
 "\n"
-msgstr "Filsystemet på %s er nu %llu (%dk) blokke langt.\n"
+msgstr ""
+"Filsystemet på %s er nu %llu (%dk) blokke langt.\n"
+"\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
-msgstr ""
+msgstr "under forsøg på at forkorte %s"
 
 #: resize/online.c:81
 msgid "kernel does not support online resize with sparse_super2"
@@ -7129,12 +7331,12 @@ msgstr ""
 msgid "While trying to extend the last group"
 msgstr "Under forsøg på at udvide den sidste gruppe"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Under forsøg på at tilføje gruppe #%d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
 msgid ""
 "Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
@@ -7145,37 +7347,37 @@ msgstr ""
 
 #: resize/resize2fs.c:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "iknuder (%llu) skal være mindre end %u"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "iknuder (%llu) skal være mindre end %u\n"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "reserverede blokke"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "metadatablokke"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2475
 msgid "new meta blocks"
 msgstr "nye metablokke"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2698
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr "Bør aldrig ske! Ingen sb i sidste super_sparse bg?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2703
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr "Bør aldrig ske! Uventet old_desc i super_sparse bg?\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2776
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Bør aldrig ske: ændring af størrelse for iknude er ødelagt!\n"
 
 #: lib/ext2fs/ext2_err.c:11
 #, fuzzy
-msgid "EXT2FS Library version 1.43.4-WIP"
-msgstr "EXT2FS-biblioteksversion 1.42.12"
+msgid "EXT2FS Library version 1.44.4"
+msgstr "EXT2FS-biblioteksversion 1.44.3"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -7399,11 +7601,11 @@ msgstr ""
 
 #: lib/ext2fs/ext2_err.c:67
 msgid "Block bitmaps are not the same"
-msgstr ""
+msgstr "Blok-bitmap er ikke ens"
 
 #: lib/ext2fs/ext2_err.c:68
 msgid "Inode bitmaps are not the same"
-msgstr ""
+msgstr "Iknude-bitmap er ikke ens"
 
 #: lib/ext2fs/ext2_err.c:69
 msgid "Illegal or malformed device name"
@@ -7451,23 +7653,23 @@ msgstr "Filsystemet har skrivebeskyttede funktioner der ikke er understøttet"
 
 #: lib/ext2fs/ext2_err.c:80
 msgid "IO Channel failed to seek on read or write"
-msgstr ""
+msgstr "IO-kanal kunne ikke søge på læs eller skriv"
 
 #: lib/ext2fs/ext2_err.c:81
 msgid "Memory allocation failed"
-msgstr ""
+msgstr "Hukommelsesallokering mislykkedes"
 
 #: lib/ext2fs/ext2_err.c:82
 msgid "Invalid argument passed to ext2 library"
-msgstr ""
+msgstr "Ugyldigt argument sendt til ext2-bibliotek"
 
 #: lib/ext2fs/ext2_err.c:83
 msgid "Could not allocate block in ext2 filesystem"
-msgstr ""
+msgstr "Kunne ikke allokere blok i ext2-filsystem"
 
 #: lib/ext2fs/ext2_err.c:84
 msgid "Could not allocate inode in ext2 filesystem"
-msgstr ""
+msgstr "Kunne ikke allokere iknude i ext2-filsystem"
 
 #: lib/ext2fs/ext2_err.c:85
 msgid "Ext2 inode is not a directory"
@@ -7604,114 +7806,115 @@ msgstr "Ext2fs-mappeblokliste er tom"
 #: lib/ext2fs/ext2_err.c:118
 msgid "Attempt to modify a block mapping via a read-only block iterator"
 msgstr ""
+"Forsøg på at ændre en blokoversættelse via en skrivebeskyttet blokiterator"
 
 #: lib/ext2fs/ext2_err.c:119
 msgid "Wrong magic number for ext4 extent saved path"
-msgstr "Forkert magi-antal for ext4-udstrækningens gemte sti"
+msgstr "Forkert magi-nummer for ext4-udstrækningens gemte sti"
 
 #: lib/ext2fs/ext2_err.c:120
 msgid "Wrong magic number for 64-bit generic bitmap"
-msgstr "Forkert magi-antal for 64-bit generisk bitmap"
+msgstr "Forkert magi-nummer for 64-bit generisk bitmap"
 
 #: lib/ext2fs/ext2_err.c:121
 msgid "Wrong magic number for 64-bit block bitmap"
-msgstr ""
+msgstr "Forkert magi-nummer for 64-bit blok-bitmap"
 
 #: lib/ext2fs/ext2_err.c:122
 msgid "Wrong magic number for 64-bit inode bitmap"
-msgstr ""
+msgstr "Forkert magi-nummer for 64-bit iknude-bitmap"
 
 #: lib/ext2fs/ext2_err.c:123
 msgid "Wrong magic number --- RESERVED_13"
-msgstr ""
+msgstr "Forkert magi-nummer --- RESERVED_13"
 
 #: lib/ext2fs/ext2_err.c:124
 msgid "Wrong magic number --- RESERVED_14"
-msgstr ""
+msgstr "Forkert magi-nummer --- RESERVED_14"
 
 #: lib/ext2fs/ext2_err.c:125
 msgid "Wrong magic number --- RESERVED_15"
-msgstr ""
+msgstr "Forkert magi-nummer --- RESERVED_15"
 
 #: lib/ext2fs/ext2_err.c:126
 msgid "Wrong magic number --- RESERVED_16"
-msgstr ""
+msgstr "Forkert magi-nummer --- RESERVED_16"
 
 #: lib/ext2fs/ext2_err.c:127
 msgid "Wrong magic number --- RESERVED_17"
-msgstr ""
+msgstr "Forkert magi-nummer --- RESERVED_17"
 
 #: lib/ext2fs/ext2_err.c:128
 msgid "Wrong magic number --- RESERVED_18"
-msgstr ""
+msgstr "Forkert magi-nummer --- RESERVED_18"
 
 #: lib/ext2fs/ext2_err.c:129
 msgid "Wrong magic number --- RESERVED_19"
-msgstr ""
+msgstr "Forkert magi-nummer --- RESERVED_19"
 
 #: lib/ext2fs/ext2_err.c:130
 msgid "Corrupt extent header"
-msgstr ""
+msgstr "Ødelagt områdehoved"
 
 #: lib/ext2fs/ext2_err.c:131
 msgid "Corrupt extent index"
-msgstr ""
+msgstr "Ødelagt områdeindeks"
 
 #: lib/ext2fs/ext2_err.c:132
 msgid "Corrupt extent"
-msgstr ""
+msgstr "Ødelagt område"
 
 #: lib/ext2fs/ext2_err.c:133
 msgid "No free space in extent map"
-msgstr ""
+msgstr "Ingen ledig plads i områdekort"
 
 #: lib/ext2fs/ext2_err.c:134
 msgid "Inode does not use extents"
-msgstr ""
+msgstr "Iknude bruger ikke områder"
 
 #: lib/ext2fs/ext2_err.c:135
 msgid "No 'next' extent"
-msgstr ""
+msgstr "Intet »næste« område"
 
 #: lib/ext2fs/ext2_err.c:136
 msgid "No 'previous' extent"
-msgstr ""
+msgstr "Intet »forrige« område"
 
 #: lib/ext2fs/ext2_err.c:137
 msgid "No 'up' extent"
-msgstr ""
+msgstr "Intet »up« område"
 
 #: lib/ext2fs/ext2_err.c:138
 msgid "No 'down' extent"
-msgstr ""
+msgstr "Intet »down« område"
 
 #: lib/ext2fs/ext2_err.c:139
 msgid "No current node"
-msgstr ""
+msgstr "Ingen aktuel knude"
 
 #: lib/ext2fs/ext2_err.c:140
 msgid "Ext2fs operation not supported"
-msgstr ""
+msgstr "Ext2fs-operation er ikke understøttet"
 
 #: lib/ext2fs/ext2_err.c:141
 msgid "No room to insert extent in node"
-msgstr ""
+msgstr "Ingen plads til at indsætte område i knude"
 
 #: lib/ext2fs/ext2_err.c:142
 msgid "Splitting would result in empty node"
-msgstr ""
+msgstr "Opdeling vil medføre en tom knude"
 
 #: lib/ext2fs/ext2_err.c:143
 msgid "Extent not found"
-msgstr ""
+msgstr "Område blev ikke fundet"
 
 #: lib/ext2fs/ext2_err.c:144
 msgid "Operation not supported for inodes containing extents"
-msgstr ""
+msgstr "Operation er ikke understøttet for iknuder, der indeholder områder"
 
 #: lib/ext2fs/ext2_err.c:145
 msgid "Extent length is invalid"
-msgstr ""
+msgstr "Områdelænge er ugyldig"
 
 #: lib/ext2fs/ext2_err.c:146
 msgid "I/O Channel does not support 64-bit block numbers"
@@ -7736,12 +7939,12 @@ msgid "MMP: device currently active"
 msgstr "MMP: enhed aktiv i øjeblikket"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
-msgstr "MMP: fsck køres"
+msgid "MMP: e2fsck being run"
+msgstr "MMP: e2fsck køres"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
-msgstr ""
+msgstr "MMP: bloknummer er udover filsystemets interval"
 
 #: lib/ext2fs/ext2_err.c:153
 msgid "MMP: undergoing an unknown operation"
@@ -7749,11 +7952,11 @@ msgstr "MMP: undergår en ukendt operation"
 
 #: lib/ext2fs/ext2_err.c:154
 msgid "MMP: filesystem still in use"
-msgstr ""
+msgstr "MMP: filsystemet er stadig i brug"
 
 #: lib/ext2fs/ext2_err.c:155
 msgid "MMP: open with O_DIRECT failed"
-msgstr ""
+msgstr "MMP: åb nmed O_DIRECT mislykkedes"
 
 #: lib/ext2fs/ext2_err.c:156
 msgid "Block group descriptor size incorrect"
@@ -7792,43 +7995,40 @@ msgid "Unknown checksum algorithm"
 msgstr "Ukendt kontrolsumalgoritme"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr "MMP-blokkens kontrolsum matcher ikke MMP-blok"
+msgid "MMP block checksum does not match"
+msgstr "MMP-blokkens kontrolsum matcher ikke"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
 msgstr "Ext2-fil findes allerede"
 
 #: lib/ext2fs/ext2_err.c:167
-#, fuzzy
 msgid "Block bitmap checksum does not match bitmap"
-msgstr "Iknude-bitmapens kontrolsum matcher ikke bitmap"
+msgstr "Blok-bitmapens kontrolsum matcher ikke bitmap"
 
 #: lib/ext2fs/ext2_err.c:168
 msgid "Cannot iterate data blocks of an inode containing inline data"
-msgstr ""
+msgstr "Kan ikke gentage datablokke for en iknude indeholdende indlejrede data"
 
 #: lib/ext2fs/ext2_err.c:169
 msgid "Extended attribute has an invalid name length"
-msgstr ""
+msgstr "Udvidede attribut har en ugyldig navnelængde"
 
 #: lib/ext2fs/ext2_err.c:170
 msgid "Extended attribute has an invalid value length"
-msgstr ""
+msgstr "Udvidede attribut har en ugyldig værdilængde"
 
 #: lib/ext2fs/ext2_err.c:171
-#, fuzzy
 msgid "Extended attribute has an incorrect hash"
-msgstr "Den udvidede attributbloks kontrolsum matchter ikke blok"
+msgstr "Udvidede attribut har en forkert hash"
 
 #: lib/ext2fs/ext2_err.c:172
-#, fuzzy
 msgid "Extended attribute block has a bad header"
-msgstr "Illegal udvidet attributblokantal"
+msgstr "Udvidede attributblok har et ugyldigt teksthoved"
 
 #: lib/ext2fs/ext2_err.c:173
 msgid "Extended attribute key not found"
-msgstr "Udvidedet attributnøgle blev ikke fundet"
+msgstr "Udvidedede attributnøgle blev ikke fundet"
 
 #: lib/ext2fs/ext2_err.c:174
 msgid "Insufficient space to store extended attribute data"
@@ -7887,9 +8087,12 @@ msgid "The journal superblock is corrupt"
 msgstr "Journalsuperblokken er ødelagt"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "Ændring af størrelse for iknude er ødelagt"
+msgstr "Iknude er ødelagt"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8066,7 +8269,7 @@ msgstr ""
 #: lib/support/plausible.c:227
 #, c-format
 msgid "%s is not a block special device.\n"
-msgstr ""
+msgstr "%s er ikke en blokspeciel enhed.\n"
 
 #: lib/support/plausible.c:249
 #, c-format
@@ -8082,6 +8285,3 @@ msgstr "%s indeholder et %s-filsystem\n"
 #, c-format
 msgid "%s contains `%s' data\n"
 msgstr "%s indeholder »%s«-data\n"
-
-#~ msgid "Please run e2fsck on the filesystem.\n"
-#~ msgstr "Kør venligst e2fsck på filsystemet.\n"
index 1ae4595..75517ed 100644 (file)
Binary files a/po/de.gmo and b/po/de.gmo differ
index 8165bd1..734d927 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -2,10 +2,11 @@
 # Copyright (C) 1996 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
 #
+#
 # Olaf Klemke <olke@users.sourceforge.net>,2002.
 # Marc Langer <marc@marclanger.de>,2003.
-# Philipp Thomas <pth@suse.de>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015
-#
+# Philipp Thomas <pth@suse.de>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015.
+# Mario Blättermann <mario.blaettermann@gmail.com>, 2019.
 #. 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,
 #. there is an @-expansion, where strings like "@i" are expanded to
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -50,7 +58,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs-1.43.1\n"
+"Project-Id-Version: e2fsprogs-1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2017-01-30 14:14+0100\n"
-"Last-Translator: Philipp Thomas <pth@suse.de>\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2019-08-03 12:04+0200\n"
+"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
 "MIME-Version: 1.0\n"
@@ -82,8 +90,9 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 19.04.2\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "„Bad block“ %u außerhalb des gültigen Bereichs; ignoriert.\n"
@@ -96,11 +105,12 @@ msgstr "während der logischen Prüfung des „Bad Block“-Inodes"
 msgid "while reading the bad blocks inode"
 msgstr "während des Lesens des „Bad Block“-Inodes"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "beim Versuch, %s zu öffnen"
@@ -110,7 +120,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:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "beim Lesen der „Bad Block“-Liste aus der Datei"
 
@@ -121,9 +131,13 @@ msgstr "beim Updaten des „Bad Block“-Inodes"
 #: e2fsck/badblocks.c:133
 #, 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/dirinfo.c:331
+#, fuzzy
+#| msgid "while reading undo file"
+msgid "while freeing dir_info tdb file"
+msgstr "beim Lesen der Undo-Datei"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -200,12 +214,12 @@ msgstr "BLKFLSBUF ioctl nicht unterstützt! Puffer kann nicht geleert werden.\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:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "beim Öffnen von %s für die Puffer-Leerung"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "während des Rückschreibeversuches auf %s"
@@ -215,11 +229,11 @@ msgstr "während des Rückschreibeversuches auf %s"
 msgid "while trying to open '%s'"
 msgstr "beim Versuch, %s zu öffnen"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr "beim Start des Inode-Scans"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr "beim Laden des nächsten Inodes"
 
@@ -228,358 +242,379 @@ msgstr "beim Laden des nächsten Inodes"
 msgid "%u inodes scanned.\n"
 msgstr "%u Inodes untersucht.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "Journal-Superblock wird gelesen\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: keinen gültigen Journal-Superblock gefunden\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: Das Journal ist zu kurz\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: Journal wird wiederhergestellt\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: Das Journal ist nur lesbar - Keine Wiederherstellung\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "beim Versuch, %s erneut zu öffnen"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "aerweiterte Attribute"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "AFehler beim Reservieren von Platz für"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bBlock"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "BBitmap"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "ckomprimieren"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "CKonflikte mit einem anderen Dateisystemblock"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "dVerzeichnis"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Dgelöscht"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "eEintrag"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e „%Dn“ in %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "fDateisystem"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Ffür @i %i (%Q) ist"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "gGruppe"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "hHTREE @dinode"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "iInode"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Iillegal(er)"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jJournal"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "List eine Verknüpfung"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mmehrfach beansprucht"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "nungültig"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "overwaist"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pProblem in"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qQuota"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "rRoot @i"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "ssollte sein"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "SSuper@b"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "unicht verbunden"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vGerät"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xErweiterung"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "zmit Länge Null"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<Der NULL-Inode>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<Der „Bad Blocks“-Inode>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<Die Benutzerquota-Inode>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<Die Gruppenquota-Inode>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<Der „boot loader“-Inode>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<Der „undelete directory“-Inode>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<Des „group descriptor“-Inode>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<Der Journal-Inode>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Der reservierte Inode 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Der reservierte Inode 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "reguläre Datei"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "Verzeichnis"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "zeichenorientiertes Gerät"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "blockorientiertes Gerät"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "named pipe"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "symbolische Verknüpfung"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "Socket"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "unbekannter Dateityp mit Modus 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "indirekte Blöcke"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "doppelt indirekte Blöcke"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "dreifach indirekte Blöcke"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "Übersetzerblock"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "Block Nr."
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "Benutzer"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "Gruppe"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr ""
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "unbekannter Typ Quota"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "mehrfach beanspruchte Inode-Liste"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, 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"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "zurückgegeben von clone_file_block"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr "interner Fehler: EA-Blockliste für %llu wurde nicht gefunden"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "Interner Fehler: EA-Inodeliste für %u wurde nicht gefunden"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr ""
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 msgid "reading directory block"
 msgstr "Verzeichnisblock wird gelesen"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 msgid "in-use inode map"
 msgstr "„in-use inode“-Liste"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 msgid "directory inode map"
 msgstr "„directory inode“-Liste"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 msgid "regular file inode map"
 msgstr "„regular file inode“-Liste"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr "Liste der Blöcke, die verwehndet werden"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1263
 msgid "metadata block map"
 msgstr "Liste der Metadaten-Blöcke"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 msgid "opening inode scan"
 msgstr "Inode-Scan wird gestartet"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr "beim Lesen des nächsten Inodes"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 msgid "Pass 1"
 msgstr "Durchgang 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "indirekte Blöcke von Inode %u werden gelesen"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 msgid "bad inode map"
 msgstr "fehlerhafte Inode-Liste"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 msgid "inode in bad block map"
 msgstr "Inode in „Bad Blocks“-Liste"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 msgid "imagic inode map"
 msgstr "i„magic inode“-Liste"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr "mehrfach referenzierte Blockliste"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr "ext attr block map"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu(%c): erwartete %6lu erhielt phys %6lu (Blockanzahl %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 msgid "block bitmap"
 msgstr "Block-Bitmap"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 msgid "inode bitmap"
 msgstr "Inode-Bitmap"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 msgid "inode table"
 msgstr "Inode-Tabelle"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Durchgang 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 msgid "Can not continue."
 msgstr "Das Programm kann nicht fortfahren."
 
@@ -599,195 +634,203 @@ msgstr "Durchgang 3"
 msgid "inode loop detection bitmap"
 msgstr "„inode loop detection“-Bitmap"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Durchgang 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Durchgang 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
-msgstr ""
+msgstr "check_inode_bitmap_checksum: Fehler beim reservieren von Hauptspeicher"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
-msgstr ""
+msgstr "check_block_bitmap_checksum: Fehler beim reservieren von Hauptspeicher"
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 msgid "(no prompt)"
 msgstr "(nicht interaktiv)"
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 msgid "Fix"
 msgstr "Reparieren"
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:54
 msgid "Clear"
 msgstr "Bereinigen"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr "Zurücksetzen"
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
 msgid "Allocate"
 msgstr "Freigeben"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 msgid "Expand"
 msgstr "Erweitern"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 msgid "Connect to /lost+found"
 msgstr "Nach /lost+found verbinden"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 msgid "Create"
 msgstr "Erstellen"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr "Retten"
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
 msgid "Truncate"
 msgstr "Verkürzen"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 msgid "Clear inode"
 msgstr "Inode bereinigen"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 msgid "Abort"
 msgstr "Abbrechen"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 msgid "Split"
 msgstr "Aufteilen"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 msgid "Continue"
 msgstr "Fortsetzen"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr "Mehrfach referenzierte Blöcke werden geklont"
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 msgid "Delete file"
 msgstr "Datei löschen"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 msgid "Suppress messages"
 msgstr "Ausgaben unterdrücken"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
 msgid "Unlink"
 msgstr "Trennen"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 msgid "Clear HTree index"
 msgstr "Der HTree-Index wird bereinigt"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 msgid "Recreate"
 msgstr "Zurücksetzen"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr ""
+
+#: e2fsck/problem.c:81
 msgid "(NONE)"
 msgstr "(NICHTS)"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 msgid "FIXED"
 msgstr "REPARIERT"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 msgid "CLEARED"
 msgstr "BEREINIGT"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr "ZURÜCKGESETZT"
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 msgid "ALLOCATED"
 msgstr "FREIGEGEBEN"
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr "ERWEITERT"
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr "WIEDER VERBUNDEN"
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 msgid "CREATED"
 msgstr "ANGELEGT"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr "GERETTET"
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
 msgid "TRUNCATED"
 msgstr "ABGESCHNITTEN"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 msgid "INODE CLEARED"
 msgstr "INODE BEREINIGT"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 msgid "ABORTED"
 msgstr "ABGEBROCHEN"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 msgid "SPLIT"
 msgstr "ABGESPALTEN"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr "ES WIRD FORTGEFAHREN"
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr "MEHRFACH REFERENZIERTE BLÖCKE WURDEN GEKLONT"
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 msgid "FILE DELETED"
 msgstr "DATEI WURDE GELÖSCHT"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr "UNTERDRÜCKT"
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr "GETRENNT"
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 msgid "HTREE INDEX CLEARED"
 msgstr "HTREE-INDEX BEREINIGT"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 msgid "WILL RECREATE"
 msgstr "WIRD WIEDER AUFGEBAUT"
 
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr ""
+
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:115
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "Block-Bitmap für Gruppe %g ist nicht in der Gruppe. (Block %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:119
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "Inode-Bitmap für Gruppe %g ist nicht in der Gruppe. (Block %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -804,7 +847,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -830,7 +873,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -843,29 +886,28 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "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 Blockgrößen verschiedene "
-"Fragmentgrößen.\n"
+"Diese Version von e2fsck unterstützt keine von Blockgrößen verschiedene Fragmentgrößen.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\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:155
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "first_data_@b im @S = %b, sollte %c sein\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -873,8 +915,8 @@ msgstr ""
 "Das Dateisystem hat keine UUID; es wird eine generiert.\n"
 "\n"
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -892,49 +934,48 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Beschädigung gefunden im Superblock. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:186
+#, no-c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Fehler bei der Feststellung der Größe des physischen Gerät: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:191
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "@i-Anzahl in @S ist %i, sollte %j sein.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd unterstützt keine Dateitypen.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:201
+#, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "Der Superblock hat ein defektes Journal (Inode %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 msgid "External @j has multiple @f users (unsupported).\n"
-msgstr ""
-"Externes Journal hat mehrere Dateisystem-Benutzer (nicht unterstützt).\n"
+msgstr "Externes Journal hat mehrere Dateisystem-Benutzer (nicht unterstützt).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:211
 msgid "Can't find external @j\n"
 msgstr "Externes Journal kann nicht gefunden werden\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 msgid "External @j has bad @S\n"
 msgstr "Externes Journal hat einen ungültigen Superblock\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 msgid "External @j does not support this @f\n"
 msgstr "Externes Journal unterstützt dieses Dateisystem nicht\n"
 
@@ -942,107 +983,102 @@ msgstr "Externes Journal unterstützt dieses Dateisystem nicht\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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 ""
-"Der Superblock des Dateisystem-Journals hat den unbekannten Typ %N (nicht "
-"unterstützt).\n"
-"Es ist möglich, dass Ihr e2fsck älter ist und/oder dieses Journal-Format "
-"nicht unterstützt.\n"
+"Der Superblock des Dateisystem-Journals hat den unbekannten Typ %N (nicht unterstützt).\n"
+"Es ist möglich, dass Ihr e2fsck älter ist und/oder dieses Journal-Format nicht unterstützt.\n"
 "Es ist ebenso möglich, dass der Joornal-Superblock defekt ist.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:235
 msgid "@j @S is corrupt.\n"
 msgstr "Der Journal-Superblock ist defekt.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr ""
 "Der Bitschalter has_journal im Superblock ist nicht gesetzt, aber ein\n"
 "Journal %s ist vorhanden.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr ""
-"Im Superblock ist der Bitschalter „needs_recovery“ gesetzt, aber ein "
-"Journal\n"
+"Im Superblock ist der Bitschalter „needs_recovery“ gesetzt, aber ein Journal\n"
 "ist nicht vorhanden.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:250
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr ""
 "Der Bitschalter „needs_recovery“ im Superblock ist nicht gesetzt, aber das\n"
 "Journal enthält Daten.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:255
 msgid "Clear @j"
 msgstr "Journal bereinigen"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr ""
 "Das Dateisystem hat Eigenschafts-Bitschalter gesetzt, ist aber ein\n"
 "Revision-0-Dateisystem.   "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:265
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s verwaister Inode (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:270
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "Unzulässiges %B (%b) in verwaisten Inode %i gefunden.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:275
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Bereits bereinigter %B (%b) im verwaisten Inode %i gefunden.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:281
+#, no-c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "Unzulässiger verwaister Inode %i im Superblock.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:287
+#, no-c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "Unzulässiger Inode %i in der Liste der verwaisten Inodes.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:292
 msgid "@j @S has an unknown read-only feature flag set.\n"
-msgstr ""
-"Der Journal-Superblock hat einen unbekannten Nur-Lesen-Bitschalter gesetzt.\n"
+msgstr "Der Journal-Superblock hat einen unbekannten Nur-Lesen-Bitschalter gesetzt.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:297
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
 "Im Journal-Superblock ist ein unbekannter Bitschalter für eine\n"
 "inkompatible Eigenschaft gesetzt.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Diese Journal-Version wird von diesem e2fsck nicht unterstützt.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:308
+#, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1052,8 +1088,8 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:314
+#, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1064,7 +1100,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1075,12 +1111,12 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 msgid "Run @j anyway"
 msgstr "Journal trotzdem starten"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
 "Der Bitschalter für Wiederherstellung ist im Sicherungs-Superblock nicht\n"
@@ -1088,7 +1124,7 @@ msgstr ""
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1098,7 +1134,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1107,20 +1143,18 @@ msgstr ""
 "ist %N; @s Null.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
-msgstr ""
-"Resize_@i ist nicht aktiviert, aber der zu modifizierende Inode ist nicht-"
-"Null."
+msgstr "Resize_@i ist nicht aktiviert, aber der zu modifizierende Inode ist nicht-Null."
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:352
 msgid "Resize @i not valid.  "
 msgstr "Resize-Inode ist ungültig.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1130,7 +1164,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1139,14 +1173,14 @@ msgstr ""
 "\tjetzt = %T) liegt in der Zukunft.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:368
+#, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "Superblock-Hinweis für externen Superblock sollte %X sein.  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1155,288 +1189,292 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
-msgstr ""
-"Die Prüfsumme des Gruppendeskriptors %g ist %04x, sie sollte %04y sein.  "
+msgstr "Die Prüfsumme des Gruppendeskriptors %g ist %04x, sie sollte %04y sein.  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr ""
 "Gruppendeskriptor %g ist ohne eine gesetzte Eigenschaft.\n"
 "als nicht initialisiert gekennzeichnet.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:389
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
-msgstr ""
-"Gruppendeskriptor %g hat eine ungültige Anzahl ungenutzter Inodes von %b.  "
+msgstr "Gruppendeskriptor %g hat eine ungültige Anzahl ungenutzter Inodes von %b.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:394
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Die letzte Gruppen-Blockbitmap ist nicht initialisiert.  "
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
-msgstr ""
-"Journaltransaktion %i war beschädigt, die Wiederholung wurde abgebrochen.\n"
+msgstr "Journaltransaktion %i war beschädigt, die Wiederholung wurde abgebrochen.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:405
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "Die Kennung test_fs wurde gesetzt (und ext4 ist verfügbar).  "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "Der Zeitpunkt des letzten Einhängens des Superblocks liegt in der Zukunft.\n"
-"\t(weniger als ein Tag, wahrscheinlich aufgrund falsch gesetzter Hardware-"
-"Uhr)\n"
+"\t(weniger als ein Tag, wahrscheinlich aufgrund falsch gesetzter Hardware-Uhr)\n"
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "Der Zeitpunkt des letzten Schreibens des Superblocks liegt in der Zukunft.\n"
-"\t(weniger als ein Tag, wahrscheinlich aufgrund falsch gesetzter Hardware-"
-"Uhr)\n"
+"\t(weniger als ein Tag, wahrscheinlich aufgrund falsch gesetzter Hardware-Uhr)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr "Die Prüfsumme eines oder mehrerer Gruppendeskriptoren ist ungültig.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Die Anzahl der freien Inodes wird auf %j gesetzt (war %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Die Anzahl der freien Blöcke wird auf %c gesetzt (war %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr "Quota-Inode %i (%Q) wird versteckt.\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "%U-Quota-Inode %i (%Q) wird versteckt.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 msgid "@S has invalid MMP block.  "
 msgstr "Der Superblock hat einen ungültigen MMP-Block.  "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
 msgid "@S has invalid MMP magic.  "
 msgstr "Der Superblock besitzt eine falsche MMP-Kennung.  "
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:453
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2: %m\n"
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:459
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
-msgstr ""
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "Superblock metadata_csum überschreibt uninit_bg; bei Eigenschaftenschalter können nicht gleichzeitig gesetzt werden."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "Die Prüfsumme des MMP-Blocks passt nicht zum MMP-Block"
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+#, fuzzy
+#| msgid "@S MMP @b checksum does not match MMP @b.  "
+msgid "@S MMP @b checksum does not match.  "
+msgstr "Die MMP-Block-Prüfsumme im Superblock passt nicht zum MMP-Block."
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr ""
 "Superblock-64Bit-Dateisysteme brauchen Erweiterungen, um auf die gesamte\n"
-"Platte zugreifen zu können.   "
+"Platte zugreifen zu können.  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "First_meta_bg ist zu groß. (%N, max. Wert %g).  "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:486
 msgid "External @j @S checksum does not match @S.  "
-msgstr ""
-"Die Prüfsumme des Superblocks fes externen Journals passt nicht zum "
-"Superblock"
+msgstr "Die Prüfsumme des Superblocks fes externen Journals passt nicht zum Superblock"
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr "ohne metadata_csum ist metadata_csum_seed im Superblock nicht nötig."
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
-msgstr ""
-"Fehler beim Initialisieren des Quota-Kontextes in der "
-"Unterstützungsbibliothek: %m\n"
+msgstr "Fehler beim Initialisieren des Quota-Kontextes in der Unterstützungsbibliothek: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Die erforderliche extra isize im Superblock ist ungültig (%N).  "
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Ungültige gewünschte zusätzliche Isize im Superblock (%N).  "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "Ungültiger %U-Quota-Inode %i.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr ""
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Durchgang 1: Inodes, Blöcke und Größen werden geprüft\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 msgid "@r is not a @d.  "
 msgstr "Root-Inode ist kein Verzeichnis.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 msgid "@r has dtime set (probably due to old mke2fs).  "
-msgstr ""
-"Für Root-Inode ist dtime gesetzt (vielleicht durch ein zu altes mke2fs).  "
+msgstr "Für Root-Inode ist dtime gesetzt (vielleicht durch ein zu altes mke2fs).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:544
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Reservierter Inode %i (%Q) hat einen ungültigen Modus.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:550
+#, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "dtime für gelöschten Inode %i ist Null.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "Inode %i ist in Benutzung, aber hat dtime gesetzt.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:562
+#, no-c-format
 msgid "@i %i is a @z @d.  "
 msgstr "Inode %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:528
+#: e2fsck/problem.c:567
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr ""
 "Die Blockbitmap der Gruppe %g auf %b überschneidet sich mit\n"
 "einem anderen Dateisystemblock.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:572
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr ""
 "Die Inode-Bitmap der Gruppe %g bei %b überschneidet sich mit\n"
 "einem anderen Dateisystemblock.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:577
 msgid "@g %g's @i table at %b @C.\n"
 msgstr ""
 "Die Inode-Tabelle der Gruppe %g bei %b überschneidet sich mit\n"
 "einem anderen Dateisystemblock.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:582
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "die @b-@B (%b) von @g %g ist ungültig.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "Die Inode-Bitmap (%b) der Gruppe %g ist ungültig.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "Inode %i, i_size ist %Is, sollte %N sein.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "Inode %i, i_@bs ist %Ib, sollte %N sein.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in @i %i.  "
 msgstr "Unzulässiger %B (%b) in Inode %i.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B (%b) überlappt Dateisystem-Metadaten in @i %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:613
+#, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "Inode %i hat unzulässige(n) Block/Blöcke.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Zu viele unzulässige Blöcke in @i %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "Ungültiger %B (%b) in „bad block“-Inode.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "„Bad Block“-Inode hat unzulässige(n) Block/Blöcke.  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Doppelter oder unzulässiger Block in Gebrauch!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
-msgstr ""
-"Ungültiger Block %b wird benutzt als indirekter Block des „Bad Block“-"
-"Inodes.  "
+msgstr "Ungültiger Block %b wird benutzt als indirekter Block des „Bad Block“-Inodes.  "
 
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1450,19 +1488,18 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
 msgstr ""
 "\n"
-"Wenn der Block wirklich defekt ist, kann das Dateisystem nicht repariert "
-"werden.\n"
+"Wenn der Block wirklich defekt ist, kann das Dateisystem 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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1474,295 +1511,269 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Der primäre Superblock (%b) ist in 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:626
+#: e2fsck/problem.c:667
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
-msgstr ""
-"Block %b im primären Gruppendeskriptor ist in der Liste der defekten Blöcke\n"
+msgstr "Block %b im primären Gruppendeskriptor ist in der Liste der defekten Blöcke\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:673
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Warnung: der Superblock der 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:637
+#: e2fsck/problem.c:679
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
-msgstr ""
-"Warnung: die Kopie des Gruppendeskriptors von Gruppe %g hat einen defekten "
-"Block (%b).\n"
+msgstr "Warnung: die Kopie des Gruppendeskriptors 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:643
+#: e2fsck/problem.c:685
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr ""
-"Programmierfehler?  Block #%b wird ohne Grund in process_bad_@b verlangt.\n"
+msgstr "Programmierfehler?  Block #%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:649
+#: e2fsck/problem.c:691
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
-msgstr ""
-"Fehler beim Zuweisen von %N zusammenhängenende(m/n) Block/Blöcken in der @b-"
-"@g %g für %s: %m\n"
+msgstr "Fehler beim Zuweisen von %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:654
-#, c-format
+#: e2fsck/problem.c:697
+#, no-c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "Fehler beim Zuweisen eines Blockpuffers zum Verschieben von %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:702
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Gruppe %g's %s wird von %b nach %c verschoben ...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
-#, c-format
+#: e2fsck/problem.c:708
+#, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Gruppe %g's %s wird nach %c verschoben ...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Warnung: Block %b von %s konnte nicht gelesen werden: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:718
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Warnung: Block %b von %s konnte nicht geschrieben werden: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
 msgstr "Fehler beim Zuweisen der Inode-Bitmap (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
 msgstr "Fehler beim Zuweisen der Block-Bitmap (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:734
+#, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "Fehler beim Zuweisen der „icount link information“: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:740
+#, no-c-format
 msgid "@A @d @b array: %m\n"
 msgstr "Fehler beim Zuweisen des Verzeichnis-Block-Feldes: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:746
+#, no-c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Fehler während des Durchsuchens der Inodes (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Fehler beim Iterieren über die Blöcke in Inode %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:757
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
-msgstr ""
-"Fehler beim Speichern der Informationen zur Inode-Anzahl (Inode=%i, Anzahl="
-"%N): %m\n"
+msgstr "Fehler beim Speichern der Informationen zur Inode-Anzahl (Inode=%i, Anzahl=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:762
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr ""
-"Fehler beim Speichern der Verzeichnis-Block-Informationen (Inode=%i, Block="
-"%b, Anzahl=%N): %m\n"
+msgstr "Fehler beim Speichern der Verzeichnis-Block-Informationen (Inode=%i, Block=%b, Anzahl=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
-#, c-format
+#: e2fsck/problem.c:769
+#, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Fehler beim Lesen des Inodes %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "Inode %i hat den Imagic-Bitschalter gesetzt.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
 msgstr ""
-"Spezielle Geräte-/Socket-/Fifo-/Symlink-Datei (Inode %i) hat den Bitschalter "
-"für\n"
+"Spezielle Geräte-/Socket-/Fifo-/Symlink-Datei (Inode %i) hat den Bitschalter für\n"
 "unveränderbar oder Nur-Anhängen gesetzt.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Spezieller Geräte-/Socket-/Fifo-Inode %i hat die Größe Null. "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
 msgid "@j @i is not in use, but contains data.  "
 msgstr "Inode %i wird nicht verwendet, aber enthält Daten.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 msgid "@j is not regular file.  "
 msgstr "Journal ist keine reguläre Datei.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:812
+#, no-c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "Inode %i war Teil der Liste verwaister Inodes.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:818
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
 "Inodes wurden gefunden, die Teil einer defekten verketteten Liste von\n"
 "verwaisten Inodes waren.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:823
 msgid "@A refcount structure (%N): %m\n"
 msgstr "Fehler beim Zuweisen der refcount-Struktur (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:828
 msgid "Error reading @a @b %b for @i %i.  "
-msgstr ""
-"Fehler beim Lesen des Blocks für erweiterte Attribute %b für Inode %i.  "
+msgstr "Fehler beim Lesen des Blocks für erweiterte Attribute %b für Inode %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:833
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "Inode %i hat einen defekten Erweiterte-Attribute-Block %b.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 msgid "Error reading @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:790
+#: e2fsck/problem.c:843
 msgid "@a @b %b has reference count %r, @s %N.  "
-msgstr ""
-"Der Referenzzähler des Blocks für erweiterte Attribute %b ist %r, richtig "
-"wäre %N.  "
+msgstr "Der Referenzzähler des Blocks für erweiterte Attribute %b ist %r, richtig wäre %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:848
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Fehler beim Schreiben des Blocks für erweiterte Attribute %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:853
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "Der Block für erweiterte Attribute %b hat h_blocks > 1.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:858
 msgid "@A @a region allocation structure.  "
-msgstr ""
-"Fehler beim Anfordern von Speicher für die Struktur zur Verwaltung der "
-"Speicherreservierungen für die erweiterten Attribute.  "
+msgstr "Fehler beim Anfordern von Speicher für die Struktur zur Verwaltung der Speicherreservierungen für die erweiterten Attribute.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 msgid "@a @b %b is corrupt (allocation collision).  "
-msgstr ""
-"Der Block für erweiterte Attribute %b ist defekt (Kollision der "
-"Platzanforderungen).  "
+msgstr "Der Block für erweiterte Attribute %b ist defekt (Kollision der Platzanforderungen).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:868
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "Der Block für erweiterte Attribute %b ist defekt (ungültiger Name).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "Der Block für erweiterte Attribute %b ist defekt (ungültiger Wert).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:879
+#, no-c-format
 msgid "@i %i is too big.  "
 msgstr "Inode %i ist zu groß.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B (%b) macht das Verzeichnis zu groß.  "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr "Block #%B (%b) macht die Datei zu groß.  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "Block #%B (%b) macht den Symlink zu groß.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr ""
-"Inode %i hat INDEX_FL Flag auf einem Dateisystem ohne HTREE-Unterstützung "
-"gesetzt.\n"
+msgstr "Inode %i hat INDEX_FL Flag auf einem Dateisystem ohne HTREE-Unterstützung gesetzt.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
-msgstr ""
-"Inode %i hat den INDEX_FL-Bitschalter gesetzt, ist aber kein Verzeichnis.\n"
+msgstr "Inode %i hat den INDEX_FL-Bitschalter gesetzt, ist aber kein Verzeichnis.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:911
+#, no-c-format
 msgid "@h %i has an @n root node.\n"
-msgstr ""
-"HTREE-Verzeichnis-Inode %i hat einen unvollständigen Wurzelknoten („root "
-"node“).\n"
+msgstr "HTREE-Verzeichnis-Inode %i hat einen unvollständigen Wurzelknoten („root node“).\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:916
 msgid "@h %i has an unsupported hash version (%N)\n"
-msgstr ""
-"HTREE-Verzeichnis-Inode %i hat eine nicht unterstützte Hash-Version (%N)\n"
+msgstr "HTREE-Verzeichnis-Inode %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:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
-msgstr ""
-"@h %i benutzt einen nicht unterstützten Bitschalter für einen Htree-"
-"Wurzelknoten.\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:869
+#: e2fsck/problem.c:927
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1771,63 +1782,55 @@ msgstr ""
 "den Dateisystem-Metadaten in Konflikt steht.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Erzeugung des Vergrößerungs-Inodes scheiterte: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "Inode %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:890
+#: e2fsck/problem.c:950
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
-msgstr ""
-"Ein erweitertes Attribut in Inode %i hat eine ungültige „namelen“ von %N.\n"
+msgstr "Ein erweitertes Attribut in Inode %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:895
+#: e2fsck/problem.c:955
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
-msgstr ""
-"Ein erweitertes Attribut in Inode %i hat einen ungültigen Werteversatz von "
-"%N.\n"
+msgstr "Ein erweitertes Attribut in Inode %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:900
+#: e2fsck/problem.c:960
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
-msgstr ""
-"Ein erweitertes Attribut in Inode %i hat einen ungültigen Werteblock von %N "
-"(muss 0 sein).\n"
+msgstr "Ein erweitertes Attribut in Inode %i hat einen ungültigen Werteblock von %N (muss 0 sein).\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:965
 msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr ""
-"Ein erweitertes Attribut in Inode %i hat eine ungültige Wertegröße von %N.\n"
+msgstr "Ein erweitertes Attribut in Inode %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:910
+#: e2fsck/problem.c:970
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "Ein erweitertes Attribut in Inode %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:915
+#: e2fsck/problem.c:975
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
-msgstr ""
-"Inode %i ist ein %It, aber es sieht so aus, als ob es tatsächlich ein "
-"Verzeichnis ist.\n"
+msgstr "Inode %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:920
-#, c-format
+#: e2fsck/problem.c:981
+#, no-c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Fehler beim Iterieren über den Extent-Baum @x in Inode %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1837,7 +1840,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1847,7 +1850,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1856,36 +1859,33 @@ msgstr ""
 "\t(logischer Block %c, physischer Block %b, unzulässige Länge %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr ""
 "Inode %i hat den EXTENTS_FL-Bitschalter gesetzt, obwohl das Dateisystem\n"
 "Erweiterungen nicht unterstützt.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
-msgstr ""
-"Inode %i besitzt das Erweiterungsformat, aber dem Superblock fehlt die "
-"Eigenschaft EXTENTS\n"
+msgstr "Inode %i besitzt das Erweiterungsformat, aber dem Superblock fehlt die Eigenschaft EXTENTS\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
-msgstr ""
-"Dem Inode %i fehlt EXTENT_FL, er hat aber das Format einer Erweiterung\n"
+msgstr "Dem Inode %i fehlt EXTENT_FL, er hat aber das Format einer Erweiterung\n"
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 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
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1894,39 +1894,39 @@ msgstr ""
 "\t(ungültiger logischer Block %c, physischer Block %b, Länge %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1030
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "Inode %i hat einen ungültigen Erweiterungs-Knoten (blk %b, lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1036
+#, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Fehler beim Umwandeln der Subcluster-Blockbitmap: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not regular file.  "
 msgstr "Der Quota-Inode ist keine reguläre Datei.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
 msgid "@q @i is not in use, but contains data.  "
 msgstr "Quota-Inode wird nicht benutzt, enthält aber Daten.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 msgid "@q @i is visible to the user.  "
 msgstr "Der Quota-Inode ist sichtbar für den Benutzer.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 msgid "The bad @b @i looks @n.  "
 msgstr "Der 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
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1935,59 +1935,51 @@ msgstr ""
 "\t(ungültiger logischer Block %c, physischer Block %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, c-format
+#: e2fsck/problem.c:1067
+#, no-c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "Inode %i scheint Müll zu enthalten.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
-msgstr ""
-"Die Inode %i passiert die Prüfungen, aber die Prüfsumme passt nicht zur "
-"Inode."
+msgstr "Die Inode %i passiert die Prüfungen, aber die Prüfsumme passt nicht zur Inode."
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
-msgstr ""
-"Das erweiterte Attribut für Inode %i ist defekt (Kollision der "
-"Speicerplatzanforderungen).  "
+msgstr "Das erweiterte Attribut für Inode %i ist defekt (Kollision der Speicerplatzanforderungen).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"Der Erweiterungsblock von INode %i passiert die Prüfungen, allerdings passt "
-"die Prüfsumme nicht zur Erweiterung\n"
+"Der Erweiterungsblock von INode %i passiert die Prüfungen, allerdings passt die Prüfsumme nicht zur Erweiterung\n"
 "\t(logischer Block %c, physischer Block %b, Länge %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
-msgstr ""
-"Der Block für erweiterte Attribute von Inode %i passiert die Prüfungen, "
-"allerdings passt die Prüfsumme nicht zum Block.  "
+msgstr "Der Block für erweiterte Attribute von Inode %i passiert die Prüfungen, allerdings passt die Prüfsumme nicht zum Block.  "
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
 msgstr ""
 "Ebene %N des internen Erweiterungsknotens von Inode %i:\n"
-"Der logische Start %b passt nicht zum logischen Start %c auf der nächsten "
-"Ebene."
+"Der logische Start %b passt nicht zum logischen Start %c auf der nächsten Ebene."
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1996,37 +1988,31 @@ msgstr ""
 "\t(logischer Block %c, physischer Block %b, Länge %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
-msgstr ""
-"Inode %i besitzt das Erweiterungsformat, aber dem Superblock fehlt die "
-"Eigenschaft EXTENTS\n"
+msgstr "Inode %i besitzt das Erweiterungsformat, aber dem Superblock fehlt die Eigenschaft EXTENTS\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
-msgstr ""
-"Inode %i hat den Bitschalter INDEX_DATA_FL gesetzt obwohl das Dateisystem "
-"Inline-Daten nicht unterstützt.\n"
+msgstr "Inode %i hat den Bitschalter INDEX_DATA_FL gesetzt obwohl das Dateisystem Inline-Daten nicht unterstützt.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
-msgstr ""
-"Block %2$b von Inode %1$i steht in Konflikt mit kritischen Metadaten, "
-"Blockprüfungen werden übersprungen.\n"
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+msgstr "Block %b von Inode %i steht in Konflikt mit kritischen Metadaten, Blockprüfungen werden übersprungen.\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "Verzeichnisinode %i Block %b sollte in Block %c sein.  "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1138
+#, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr ""
 "Verzeichnis-Inode %i hat eine Erweiterung, die als nicht initialisiert\n"
@@ -2034,27 +2020,24 @@ msgstr ""
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
-"Die Inode %i, logischer Block %b (physischer Block %c) verletzt die Regeln "
-"zur\b  Anforderung von Cluster-Speicher.\n"
+"Die Inode %i, logischer Block %b (physischer Block %c) verletzt die Regeln zur\b  Anforderung von Cluster-Speicher.\n"
 "Dies wird in Durchgang 1B repariert.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
-msgstr ""
-"Inode %i hat den INDEX_DATA_FL-Bitschalter gesetzt, aber es wurde kein "
-"erweitertes Attribut gefunden.  "
+msgstr "Inode %i hat den INDEX_DATA_FL-Bitschalter gesetzt, aber es wurde kein erweitertes Attribut gefunden.  "
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
@@ -2063,52 +2046,42 @@ msgstr ""
 "oder Inlinedaten-Bitschalter gesetzt.  "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
-msgstr ""
-"Inode %i hat den Vorspann einer Erweeiterung aber der Inlinedaten-"
-"Bitschalter ist gesetzt.\n"
+msgstr "Inode %i hat den Vorspann einer Erweeiterung aber der Inlinedaten-Bitschalter ist gesetzt.\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
-msgstr ""
-"Inode %i scheint Inlinedaten zu besitzen, aber der Erweiterungs-Bitschalter "
-"ist gesetzt.\n"
+msgstr "Inode %i scheint Inlinedaten zu besitzen, aber der Erweiterungs-Bitschalter ist gesetzt.\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
-msgstr ""
-"Inode %i scheint eine Blockliste zu haben, aber die Bitschalter für "
-"Inlinedaten und Erweiterungen sind gesetzt.\n"
+msgstr "Inode %i scheint eine Blockliste zu haben, aber die Bitschalter für Inlinedaten und Erweiterungen sind gesetzt.\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
-msgstr ""
-"Die Bitschalter von Inode %i für Inlinedaten und Erweiterungen sind gesetzt "
-"aber i_block enthält Müll.\n"
+msgstr "Die Bitschalter von Inode %i für Inlinedaten und Erweiterungen sind gesetzt aber i_block enthält Müll.\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr "Die Liste defekter Blöcke sagt, daß die Inode der Liste defekt ist.  "
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1191
 msgid "@A @x region allocation structure.  "
-msgstr ""
-"Fehler beim Anfordern von Speicher für die Struktur für "
-"Speicheranforderungen für die Erweiterungsregion.  "
+msgstr "Fehler beim Anfordern von Speicher für die Struktur für Speicheranforderungen für die Erweiterungsregion.  "
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -2117,38 +2090,59 @@ msgstr ""
 "\t(logischer Block %c, ungültiger physischer Block %b, Länge %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
 msgid "@A memory for encrypted @d list\n"
-msgstr ""
+msgstr "Fehler beim resaervieren von Speicher für die Liste verschlüsselter Verzeichnisse\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
-msgstr ""
+msgstr "Der Erweiterungsbaum von Inode %i könnte flacher sein (%b; könnte <= %c sein)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
-msgstr ""
+msgstr "Inode %i auf dem Bigalloc-Dateisystem kann nicht auf Blockcache gemappt werden.  "
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, c-format
+#: e2fsck/problem.c:1218
+#, no-c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "Inode %i hat einen defekten Erweiterungs-Vorspann.  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
+msgstr "Zeitstempel in Inode %i bevor 2310-04-04 sind wahrscheinlich von vor 1970.\n"
+
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+#, fuzzy
+#| msgid "@i %i has a bad @a @b %b.  "
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "Inode %i hat einen defekten Erweiterte-Attribute-Block %b.  "
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+#, fuzzy
+#| msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "Inode %i besitzt das Erweiterungsformat, aber dem Superblock fehlt die Eigenschaft EXTENTS\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
 msgstr ""
-"Zeitstempel in Inode %i bevor 2310-04-04 sind wahrscheinlich von vor 1970.\n"
 
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2160,71 +2154,66 @@ msgstr ""
 "Durchgang 1B: Suche nach mehrfach beanspruchten Blöcken\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
-#, c-format
+#: e2fsck/problem.c:1255
+#, no-c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "Mehrfach beanspruchte(r) Block/Blöcke in Inode %i:"
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1271
+#, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Fehler beim Prüfen der Inodes (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "Fehler beim Zuweisen der Inode-Bitmap (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Fehler beim Iterieren über die Blöcke in Inode %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
-msgstr ""
-"Fehler bei der Anpassung des Referenzzählers des Blocks für erweiterte "
-"Attribute %b (Inode %i): %m\n"
+msgstr "Fehler bei der Anpassung des Referenzzählers des Blocks für erweiterte Attribute %b (Inode %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1298
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
-msgstr ""
-"Durchgang 1C: Verzeichnisse werden nach Inodes mit mehrfach belegten Blöcken "
-"durchsucht.\n"
+msgstr "Durchgang 1C: Verzeichnisse werden nach Inodes mit mehrfach belegten Blöcken durchsucht.\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Durchgang 1D: Mehrfach belegte Blöcke werden abgeglichen.\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
 msgstr ""
 "Datei %Q (Inode #%i, Änderungszeit %IM) \n"
-"  hat %r mehrfach belegte(n) Block/Blöcke, gemeinsam genutzt mit %N "
-"Datei(en):\n"
+"  hat %r mehrfach belegte(n) Block/Blöcke, gemeinsam genutzt mit %N Datei(en):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (Inode #%i, Änderungszeit %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
 msgid "\t<@f metadata>\n"
 msgstr "\t<@f-Metadaten>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2234,7 +2223,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2242,368 +2231,349 @@ msgstr ""
 "Mehrfach belegte Blöcke wurden bereits neu zugeordnet bzw. geklont.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1344
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Datei kann nicht geklont werden: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1350
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Durchgang 1E: Erweiterungsbäume werden optimiert\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, c-format
+#: e2fsck/problem.c:1356
+#, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Erweiterungsbaum %p (%i) konnte nicht optimiert werden: %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1361
 msgid "Optimizing @x trees: "
 msgstr "Erweiterungsbäume werden optimiert: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
-msgstr ""
-"Interner Fehler: die max. Tiefe des Erweiterungsbaums ist zu groß (%b; "
-"erwartet wurde %c).\n"
+msgstr "Interner Fehler: die max. Tiefe des Erweiterungsbaums ist zu groß (%b; erwartet wurde %c).\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
-msgstr ""
-"Der Erweiterungsbaum von Inode %1$i (auf Ebene %2$b) könnte kürzer sein.  "
+msgstr "Der Erweiterungsbaum von Inode %i (auf Ebene %b) könnte kürzer sein.  "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
-msgstr ""
-"Der Erweiterungsbaum von Inode %1$i (auf Ebene %2$b) könnte schmaler sein.  "
+msgstr "Der Erweiterungsbaum von Inode %i (auf Ebene %b) könnte schmaler sein.  "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Durchgang 2: Verzeichnisstruktur wird geprüft\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1399
+#, no-c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Falsche Inode-Nummer für „.“ in Verzeichnis-Inode %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1404
 msgid "@E has @n @i #: %Di.\n"
 msgstr "Eintrag hat falsche Inode-Nummer: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1409
 msgid "@E has @D/unused @i %Di.  "
 msgstr "Eintrag „%Dn“ in %p (%i) hat gelöschten/unbenutzten Inode %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1414
 msgid "@E @L to '.'  "
 msgstr "Eintrag „%Dn“ in %p (%i) ist ein Link auf „.“  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1419
 msgid "@E points to @i (%Di) located in a bad @b.\n"
-msgstr ""
-"Eintrag „%Dn“ in %p (%i) zeigt auf einen Inode (%Di) in einem defekten "
-"Block.\n"
+msgstr "Eintrag „%Dn“ in %p (%i) zeigt auf einen Inode (%Di) in einem defekten Block.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1424
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "Eintrag „%Dn“ in %p (%i) ist ein Link auf das Verzeichnis %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1429
 msgid "@E @L to the @r.\n"
 msgstr "Eintrag „%Dn“ in %p (%i) ist ein Link auf den Root-Inode.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
 msgstr "Eintrag „%Dn“ in %p (%i) hat ein unzulässiges Zeichen im Namen.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, c-format
+#: e2fsck/problem.c:1440
+#, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Fehlende „.“ im Verzeichnis-Inode %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1446
+#, no-c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Fehlender Eintrag „..“ im Verzeichnis-Inode %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1451
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
-msgstr ""
-"Der erste Eintrag „%Dn“ (Inode=%Di) im Verzeichnis-Inode %i (%p) sollte „.“ "
-"sein\n"
+msgstr "Der erste Eintrag „%Dn“ (Inode=%Di) im Verzeichnis-Inode %i (%p) sollte „.“ sein\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1456
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
-msgstr ""
-"Der zweite Eintrag „%Dn“ (Inode=%Di) im Verzeichnis-Inode %i sollte „..“ "
-"sein\n"
+msgstr "Der zweite Eintrag „%Dn“ (Inode=%Di) im Verzeichnis-Inode %i sollte „..“ sein\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr für Inode %i (%Q) ist %IF, sollte Null sein.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1466
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl für Inode %i (%Q) ist %If, sollte Null sein.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl für Inode %i (%Q) ist %Id, sollte Null sein.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+#, fuzzy
+#| msgid "i_fsize @F %N, @s zero.\n"
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_fsize für Inode %i (%Q) ist %N, @s null.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag für Inode %i (%Q) ist %N, sollte Null sein.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize für Inode %i (%Q) ist %N, @s null.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "Inode %i (%Q) hat einen ungültigen Modus (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1491
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "Verzeichnis-Inode %i, %B, Offset %N: Verzeichnis defekt\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "Verzeichnis-Inode %i, %B, Offset %N: Dateiname zu lang\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "Verzeichnis-Inode %i hat einen nicht zugewiesenen %B.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
-msgstr ""
-"Verzeichniseintrag „.“ im Verzeichnis-Inode %i ist nicht NULL-terminiert\n"
+msgstr "Verzeichniseintrag „.“ im Verzeichnis-Inode %i ist nicht NULL-terminiert\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
-msgstr ""
-"Verzeichniseintrag „..“ im Verzeichnis-Inode %i ist nicht NULL-terminiert\n"
+msgstr "Verzeichniseintrag „..“ im Verzeichnis-Inode %i ist nicht NULL-terminiert\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "Inode %i (%Q) ist ein ungültiges zeichenorientiertes Gerät.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "Inode %i (%Q) ist ein ungültiges blockorientiertes Gerät.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "Eintrag „%Dn“ in %p (%i) ist ein doppelter Eintrag für „.“.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "Eintrag „%Dn“ in %p (%i) ist ein doppelter Eintrag für „..“.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Interner Fehler: dir_info für %i kann nicht gefunden werden.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "Eintrag „%Dn“ in %p (%i) hat eine rec_len von %Dr, sollte %N sein.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, c-format
+#: e2fsck/problem.c:1550
+#, no-c-format
 msgid "@A icount structure: %m\n"
 msgstr "Fehler beim Zuweisen der icount-Struktur: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Fehler beim Durchlaufen der Verzeichnisblöcke: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Fehler beim Lesen des Verzeichnisblocks %b (Inode %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Fehler beim Schreiben des Verzeichnisblocks %b (Inode %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
-msgstr ""
-"Fehler beim Zuweisen eines neuen Verzeichnisblocks für Inode %i (%s): %m\n"
+msgstr "Fehler beim Zuweisen eines neuen Verzeichnisblocks für Inode %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Fehler bei der Freigabe von Inode %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1584
+#, no-c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "Verzeichniseintrag für „.“ in %p (%i) ist groß.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "Inode %i (%Q) ist eine ungültige FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "Inode %i (%Q) ist ein ungültiger Socket.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Dateitypü für Eintrag „%Dn“ in %p (%i) wird auf %N gesetzt.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1604
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
-msgstr ""
-"Eintrag „%Dn“ in %p (%i) hat einen falschen Dateityp (war %Dt, sollte %N "
-"sein).\n"
+msgstr "Eintrag „%Dn“ in %p (%i) hat einen falschen Dateityp (war %Dt, sollte %N sein).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 msgstr "Eintrag „%Dn“ in %p (%i) hat Dateityp gesetzt.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "Eintrag „%Dn“ in %p (%i) hat einen Namen der Länge Null.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Symlink %Q (Inode #%i) is invalid.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1624
 msgid "@a @b @F @n (%If).\n"
 msgstr "Erweiterte-Attribute-Block für Inode %i (%Q) ist ungültig (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1629
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 "Dateisystem enthält große Dateien, aber im Superblock ist\n"
 "der Bitschalter LARGE_FILE nicht gesetzt.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1634
 msgid "@p @h %d: %B not referenced\n"
 msgstr "Problem im HTREE-Verzeichnis-Inode %d: %B ist nicht referenziert\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "Problem im HTREE-Verzeichnis-Inode %d: %B doppelt referenziert\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1644
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "Problem im HTREE-Verzeichnis-Inode %d: %B hat ungültigen Minimumhash\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1649
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "Problem im HTREE-Verzeichnis-Inode %d: %B hat ungültigen Maximalhash\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
 msgstr "Ungültiger HTREE-Verzeichnis-Inode %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "Problem im HTREE-Verzeichnis-Inode %d (%q): falsche Blocknummer %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "Problem im HTREE-Verzeichnis-Inode %d: Wurzelknoten ist ungültig\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1674
 msgid "@p @h %d: %B has @n limit (%N)\n"
-msgstr ""
-"Problem im HTREE-Verzeichnis-Inode %d: %B hat eine ungültige Begrenzung "
-"(%N)\n"
+msgstr "Problem im HTREE-Verzeichnis-Inode %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:1564
+#: e2fsck/problem.c:1679
 msgid "@p @h %d: %B has @n count (%N)\n"
-msgstr ""
-"Problem im HTREE-Verzeichnis-Inode %d: %B hat einen ungültigen Zählerstand "
-"(%N)\n"
+msgstr "Problem im HTREE-Verzeichnis-Inode %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:1569
+#: e2fsck/problem.c:1684
 msgid "@p @h %d: %B has an unordered hash table\n"
-msgstr ""
-"Problem im HTREE-Verzeichnis-Inode %d: %B hat eine unsortierte Hashtabelle\n"
+msgstr "Problem im HTREE-Verzeichnis-Inode %d: %B hat eine unsortierte Hashtabelle\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1689
 msgid "@p @h %d: %B has @n depth (%N)\n"
-msgstr ""
-"Problem im HTREE-Verzeichnis-Inode %d: %B hat eine ungültige Tiefe (%N)\n"
+msgstr "Problem im HTREE-Verzeichnis-Inode %d: %B hat eine ungültige Tiefe (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
 msgstr "Doppelter Eintrag „%Dn“ in %p (%i) gefunden.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2615,7 +2585,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2626,175 +2596,158 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi für Inode %i (%Q) %N, sollte Null sein.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "Unerwarteter Block im HTREE-Verzeichnis-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:1603
+#: e2fsck/problem.c:1719
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
-msgstr ""
-"Eintrag „%Dn“ in %p (%i) verweist auf Inode %Di in Gruppe %g, für die "
-"_INODE_UNINIT gesetzt ist.\n"
+msgstr "Eintrag „%Dn“ in %p (%i) verweist auf Inode %Di in Gruppe %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:1608
+#: e2fsck/problem.c:1724
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr ""
-"Eintrag „%Dn“ in %p (%i) verweist auf Inode %Di, der im Bereich ungenutzter "
-"Inodes\n"
+"Eintrag „%Dn“ in %p (%i) verweist auf Inode %Di, der im Bereich ungenutzter Inodes\n"
 "von Gruppe %g zu finden ist.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1729
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "i_file_acl_hi für Inode %i (%Q) ist %N, sollte Null sein.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, c-format
+#: e2fsck/problem.c:1735
+#, no-c-format
 msgid "@p @h %d: root node fails checksum.\n"
-msgstr ""
-"Problem in HTREE-Verzeichnis-Inode %d: der Wurzelknoten ist ungültig.\n"
+msgstr "Problem in HTREE-Verzeichnis-Inode %d: der Wurzelknoten ist ungültig.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, c-format
+#: e2fsck/problem.c:1741
+#, no-c-format
 msgid "@p @h %d: internal node fails checksum.\n"
-msgstr ""
-"Problem im HTREE-Verzeichnis-Inode %d: der interne Knoten ist ungültig\n"
+msgstr "Problem im HTREE-Verzeichnis-Inode %d: der interne Knoten ist ungültig\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1746
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
-msgstr ""
-"Verzeichnis-Inode %i, %B, Offset %N: das Verzeichnis hat keine Prüfsumme.\n"
+msgstr "Verzeichnis-Inode %i, %B, Offset %N: das Verzeichnis hat keine Prüfsumme.\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
-msgstr ""
-"Verzeichnis-Inode %i, %B: das Verzeichnis besteht die Prüfungen aber die "
-"Püfsumme ist falsch.\n"
+msgstr "Verzeichnis-Inode %i, %B: das Verzeichnis besteht die Prüfungen aber die Püfsumme ist falsch.\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
-msgstr ""
+msgstr "Die Größe von Inode %i (%N) eines Inline-Verzeichnisses muss ein Mehrfaches von 4 sein.\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
-msgstr ""
+msgstr "Das Korrigieren der Größe von Inode %i eines Inline-Verzeichnisses ist fehl geschlagen.\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
 msgid "Encrypted @E is too short.\n"
-msgstr ""
+msgstr "Der verschlüsselte Eintrag „%Dn” in %p (%i) ist zu kurz.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Durchgang 3: Verzeichnisverknüpfungen werden geprüft\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
 msgstr "Root-Inode nicht zugeordnet. "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "Kein Platz im Verzeichnis „lost+found“.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1790
+#, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Nicht verbundener Verzeichnis-Inode %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
 msgstr "/lost+found nicht gefunden.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %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:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
-msgstr ""
-"Verzeichnis /lost+found ist falsch oder fehlt. Wiederverbinden nicht "
-"möglich.\n"
+msgstr "Verzeichnis /lost+found ist falsch oder fehlt. Wiederverbinden nicht möglich.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Erweitern von /lost+found nicht möglich: %m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %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:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Fehler während der Suche nach /lost+found: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
-msgstr ""
-"ext2fs_new_@b: %m während des Versuches, das Verzeichnis /lost+found zu "
-"erzeugen.\n"
+msgstr "ext2fs_new_@b: %m während des Versuches, das Verzeichnis /lost+found zu erzeugen.\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
-msgstr ""
-"ext2fs_new_@i: %m während des Versuches, das Verzeichnis /lost+found zu "
-"erzeugen.\n"
+msgstr "ext2fs_new_@i: %m während des Versuches, das Verzeichnis /lost+found zu erzeugen.\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
-msgstr ""
-"ext2fs_new_dir_@b: %m während des Versuches, das Verzeichnis /lost+found zu "
-"erzeugen.\n"
+msgstr "ext2fs_new_dir_@b: %m während des Versuches, das Verzeichnis /lost+found zu erzeugen.\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-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 des Verzeichnisblocks für /"
-"lost+found\n"
+msgstr "ext2fs_write_dir_@b: %m während des Schreibens des Verzeichnisblocks für /lost+found\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Fehler während des Anpassens der Inode-Anzahl auf Inode %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2804,8 +2757,8 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
@@ -2815,97 +2768,101 @@ msgstr ""
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating 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:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Fehler beim Erzeugen des Verzeichnisses /lost+found (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "Der Wurzel-Inode ist kein Verzeichnis; Abbruch.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "Ohne Wurzel-Inode ist weiteres Arbeiten nicht möglich.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/lost+found ist kein Verzeichnis (ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
 msgid "/@l has inline data\n"
-msgstr ""
+msgstr "/@l hat Inline-Daten\n"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
 msgstr ""
+"Es kann kein Platz für /@l reserviert werden.\n"
+"Verlorene Dateien werden daher in das Wurzelverzeichnis geschrieben"
 
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
 "\n"
 msgstr ""
+"Der vorhandene Platz reicht nicht zur Rettung verlorener Dateien!\n"
+"Verschieben sie Daten von dem Dateisystem auf ein anderes und lassen\n"
+"Sie dann e2fsck noch einmal laufen.\n"
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
-#, fuzzy
+#: e2fsck/problem.c:1924
 msgid "/@l is encrypted\n"
-msgstr "Das Abbild (%s) ist verschlüsselt\n"
+msgstr "/lost+found ist verschlüsselt\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Durchgang 3A: Verzeichnisse werden optimiert\n"
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "dirs_to_hash Iterator konnte nicht erzeugt werden: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Verzeichnis %q (%d) konnte nicht optimiert werden: %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
 msgstr "Verzeichnisse werden optimiert: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Durchgang 4: Referenzzähler werden überprüft\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
 msgstr "Nicht verbundener Inode der Länge Null %i.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
 msgstr "Nicht verbundener Inode %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "Der Referenzzähler von Inode %i ist %Il, sollte aber %N sein.  "
 
@@ -2914,7 +2871,7 @@ msgstr "Der Referenzzähler von Inode %i ist %Il, sollte aber %N sein.  "
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2922,157 +2879,159 @@ msgid ""
 msgstr ""
 "WARNUNG: PROGRAMMIERFEHLER IN E2FSCK!\n"
 "\tODER JEMAND 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: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+#, fuzzy
+#| msgid "@i %i ref count is %Il, @s %N.  "
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "Der Referenzzähler von Inode %i ist %Il, sollte aber %N sein.  "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Durchgang 5: Zusammengefasste Gruppeninformation wird geprüft\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
 msgstr "Auffüllbyte am Ende der Inode-Bitmap ist nicht gesetzt. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
 msgstr "Auffüllbyte am Ende der Inode-Bitmap ist nicht gesetzt. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "Unterschiede in der Block-Bitmap: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "Unterschiede in der Inode-Bitmap: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Die Anzahl freier Inodes für Gruppe #%g ist falsch (%i, gezählt=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:2068
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
-msgstr ""
-"Die Anzahl der Verzeichnisse für Gruppe #%g ist falsch (%i, gezählt=%j).\n"
+msgstr "Die Anzahl der Verzeichnisse für Gruppe #%g ist falsch (%i, gezählt=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Die Anzahl freier Inodes ist falsch (%i, gezählt=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2078
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Die Anzahl freier Blöcke in Gruppe #%g ist falsch (%b, gezählt=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 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:1938
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
+#: e2fsck/problem.c:2088
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
 msgstr ""
-"PROGRAMMIERFEHLER: Dateisystem (#%N) Bitmap-Endpunkte (%b, %c) stimmenen "
-"nicht\n"
+"PROGRAMMIERFEHLER: Dateisystem (#%N) Bitmap-Endpunkte (%b, %c) stimmenen nicht\n"
 "mit den berechneten Bitmap-Endpunkten (%i, %j) überein\n"
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: 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:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Fehler beim Hineinkopieren der Inode-Bitmap: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @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:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
-msgstr ""
-"Blöcke von Gruppe %g sind in Benutzung, obwohl die Gruppe als BLOCK_UNINIT "
-"markiert ist\n"
+msgstr "Blöcke von Gruppe %g sind in Benutzung, obwohl die Gruppe als BLOCK_UNINIT markiert ist\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
-msgstr ""
-"Die Inodes der Gruppe %g sind in Benutzung, obwohl die Gruppe als "
-"INODE_UNINIT markiert ist\n"
+msgstr "Die Inodes der Gruppe %g sind in Benutzung, obwohl die Gruppe als INODE_UNINIT markiert ist\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
-msgstr ""
+msgstr "Die Inode-Bitmap der Gruppe %g passt nicht zur Prüfsumme.\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
-msgstr ""
+msgstr "Die Block-Bitmap der Gruppe %g passt nicht zur Prüfsumme.\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 msgid "Recreate @j"
 msgstr "Journal wird wiederhergestellt"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr "Quota-Info für Typ %N wird aktualisiert"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2172
+#, no-c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "beim Setzen der Blockgruppen-Prüfsummeninfo: %m\n"
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2178
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Fehler beim Lesen de Der Dateisysteminfo: %m\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr "Fehler beim Schreiben der gepufferten Daten: %m\n"
 
-#: e2fsck/problem.c:2026
-#, fuzzy
+#: e2fsck/problem.c:2189
 msgid "Error writing quota info for quota type %N: %m\n"
-msgstr "Quota-Info für Typ %N wird aktualisiert"
+msgstr "Beim Schreiben der Quota-Info für Typ %N trat ein Fehler auf: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Unbenutzter Fehlercode (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "IGNORIERT"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
-msgstr ""
+msgstr "in move_quota_inode"
 
 #: e2fsck/scantest.c:79
 #, c-format
@@ -3092,58 +3051,57 @@ msgstr "beim Starten der Inode-Prüfung"
 msgid "while doing inode scan"
 msgstr "während der Inode-Prüfung"
 
-#: e2fsck/super.c:190
-#, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
+#: e2fsck/super.c:224
+#, fuzzy, c-format
+#| msgid "while calling ext2fs_block_iterate for inode %d"
+msgid "while calling ext2fs_block_iterate for inode %u"
 msgstr "während des Aufrufs von ext2fs_block_iterate für Inode %d"
 
-#: e2fsck/super.c:213
-#, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
+#: e2fsck/super.c:249
+#, fuzzy, c-format
+#| msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
 msgstr "während des Aufrufs von ext2fs_adjust_ea_refcount2 für Inode %d"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Wird gekürzt"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Wird bereinigt"
 
-#: e2fsck/unix.c:77
-#, fuzzy, c-format
+#: e2fsck/unix.c:78
+#, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] [-z undo_file] device\n"
 msgstr ""
-"Aufruf: %s [-panyrcdfvtDFV] [-b Superblock] [-B Blockgröße]\n"
-"\t\t[-I Inode_Puffer_Blöcke] [-P Prozess_Inodegröße]\n"
+"Aufruf: %s [-panyrcdfktvDFV] [-b Superblock] [-B Blockgröße]\n"
 "\t\t[-l|-L Bad_Blocks_Datei] [-C Dateideskriptor] [-j externes_Journal]\n"
-"\t\t[-E erweiterte_Optionen] Gerät\n"
+"\t\t[-E erweiterte_Optionen] [-z Undo_Datei] Gerät\n"
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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"
 "Notfallhilfe:\n"
 " -p        automatische Reparatur (keine Fragen)\n"
 " -n        keine Veränderungen am Dateisystem vornehmen\n"
-" -y        Alle Fragen mit „Ja” benatworten\n"
+" -y        Alle Fragen mit „Ja” beantworten\n"
 " -c        Nach defekten Blöcken suchen und diese zur\n"
 "             Liste der defekten Blöcke hinzufügen\n"
 " -f        Die Überprüfung erzwingen, auch wenn alles i.O. erscheint\n"
 
-#: e2fsck/unix.c:88
-#, fuzzy
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -3154,18 +3112,19 @@ msgid ""
 " -z undo_file         Create an undo file\n"
 msgstr ""
 " -v                   Ausführliche Ausgaben\n"
-" -b Superblock        Superblockkopie verwenden\n"
+" -b Superblock        Alternativen Superblock verwenden\n"
 " -B Blockgröße        Blockgröße beim Suchen des Superblocks erzwingen\n"
 " -j externes-Journal  Angabe des Speicherortes des externen Jounals\n"
 " -l bad_blocks_file   Zur Liste der defekten Blöcke hinzufügen\n"
 " -L bad_blocks_file   Liste der defekten Blöcke definieren\n"
+" -z undo_file         Eine Datei zum rückgängig machen der Änderungen erzeugen\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, 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:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3180,51 +3139,51 @@ msgstr[1] ""
 "\n"
 "%12u Inodes sind in Benutzung (%2.2f%% von %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 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:169
+#: e2fsck/unix.c:172
 #, c-format
 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:174
+#: e2fsck/unix.c:177
 #, c-format
 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:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr "             Histogramm der Tiefe von Erweiterungen: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 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:195
+#: e2fsck/unix.c:198
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%12u defekter Block\n"
 msgstr[1] "%12u defekte Blöcke\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:200
 #, c-format
 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:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -3239,96 +3198,96 @@ msgstr[1] ""
 "\n"
 "%12u reguläre Dateien\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u Verzeichnis\n"
 msgstr[1] "%12u Verzeichnisse\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 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:206
+#: e2fsck/unix.c:209
 #, c-format
 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:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u Fifo\n"
 msgstr[1] "%12u Fifos\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u Verknüpfung\n"
 msgstr[1] "%12u Verknüpfungen\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u symbolische Verknüpfung"
 msgstr[1] "%12u symbolische Verknüpfungen"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, 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:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u Socket\n"
 msgstr[1] "%12u Sockets\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u Datei\n"
 msgstr[1] "%12u Dateien\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "bei der Prüfung, ob %s eingehängt ist."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Warnung! %s ist eingehängt.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Warnung! %s wird verwendet.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s ist eingehängt.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s wird verwendet.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3336,7 +3295,7 @@ msgstr ""
 "Fortsetzung nicht möglich, wird abgebrochen.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3346,91 +3305,128 @@ 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:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "Wirklich fortfahren"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "Prüfung abgebrochen.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr " enthält ein fehlerhaftes Dateisystem"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " wurde nicht ordnungsgemäß ausgehängt"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 msgid " primary superblock features different from backup"
-msgstr ""
-"Eigenschaften des primären Superblocks unterscheiden sich von der "
-"Datensicherung"
+msgstr "Eigenschaften des primären Superblocks unterscheiden sich von der Datensicherung"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:383
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " wurde %u-mal ohne Überprüfung eingehängt"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:390
 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:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " wurde %u Tage ohne Überprüfung genutzt"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ", Prüfung erzwungen.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: sauber, %u/%u Dateien, %llu/%llu Blöcke"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
 msgstr " (Prüfung nach nächstem Einhängen)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr " (Prüfung nach nächstem Einhängen)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (Prüfung nach %ld Einhängevorgängen)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "Fehler: /dev/null (%s) kann nicht geöffnet werden\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "Ungültige EA-Version.\n"
 
-#: e2fsck/unix.c:692
-#, fuzzy
+#: e2fsck/unix.c:702
 msgid "Invalid readahead buffer size.\n"
-msgstr "Ungültiger „resize“-Parameter: %s\n"
+msgstr "Ungültige Größe für den Vorauslesen-Puffer.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Unbekannte erweiterte Option: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "Bad extended option(s) specified: %s\n"
+#| "\n"
+#| "Extended options are separated by commas, and may take an argument which\n"
+#| "\tis set off by an equals ('=') sign.\n"
+#| "\n"
+#| "Valid extended options are:\n"
+#| "\tsuperblock=<superblock number>\n"
+#| "\tblocksize=<blocksize>\n"
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Falsche erweiterte Optionen angegeben: %s\n"
+"\n"
+"Erweiterte Optionen werden durch Kommata getrennt. Manche erwarten ein\n"
+"\tArgument, welches mit Gleichheitszeichen („=“) zugewiesen wird.\n"
+"\n"
+"Gültige erweiterte Optionen sind:\n"
+"\tsuperblock=<Nummer des Spuperblocks>\n"
+"\tblocksize=<Blockgröße>\n"
+"\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr ""
+
+#: e2fsck/unix.c:778
+#, fuzzy
+#| msgid "Invalid readahead buffer size.\n"
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "Ungültige Größe für den Vorauslesen-Puffer.\n"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3439,65 +3435,62 @@ msgstr ""
 "Syntaxfehler in der Konfigurationsdatei von e2fsck (%s, Zeile %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Fehler bei Überprüfung des Datei-Deskriptors %d: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr "Ungültiger „completion information“-Datei-Deskriptor"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 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:865
+#: e2fsck/unix.c:903
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Die Option -t wird von dieser e2fsck-Version nicht unterstützt.\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Nicht möglich, „%s“ aufzulösen"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 msgid "The -n and -D options are incompatible."
 msgstr "Die Optionen -n und -D schließen sich gegenseitig aus."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 msgid "The -n and -c options are incompatible."
 msgstr "Die Optionen -n und -c schließen sich gegenseitig aus."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Die Optionen -n und -l/-L schließen sich gegenseitig aus."
 
-#: e2fsck/unix.c:986
-#, fuzzy
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only options are incompatible."
-msgstr "Die Optionen -n und -D schließen sich gegenseitig aus."
+msgstr "Die Optionen -D und -E fixes_only sind inkompatibel."
 
-#: e2fsck/unix.c:992
-#, fuzzy
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only options are incompatible."
-msgstr "Die Optionen -n und -D schließen sich gegenseitig aus."
+msgstr "Die Optionen -E bmap2extent and fixes_only sind inkompatibel."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
-msgstr ""
-"Die Optionen -c und -l/-L dürfen nicht gleichzeitig verwendet werden.\n"
+msgstr "Die Optionen -c und -l/-L dürfen nicht gleichzeitig verwendet werden.\n"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr "2FSCK_JBD_DEBUG „%s“ ist keine Ganzzahl\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3508,98 +3501,97 @@ msgstr ""
 "Ungültiges nicht-numerisches Argument für -%c („%s“)\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, 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 gesamte Wartezeit ist %u Sekunden.\n"
 "Bitte warten...\n"
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr "beim Prüfen des MMP-Blocks"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, fuzzy, c-format
+#| msgid ""
+#| "If you are sure the filesystem is not in use on any node, run:\n"
+#| "'tune2fs -f -E clear_mmp {device}'\n"
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 "Wenn Sie sicher sind, dass das Dateisystem auf keinem Knoten benutzt wird,\n"
 "führen Sie bitte Folgendes aus:\n"
 "„tune2fs -f -E clear_mmp {device}“\n"
 
-#: e2fsck/unix.c:1232
-#, fuzzy
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
 msgstr "beim Lesen des MMP-Blocks."
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
 "    e2undo %s %s\n"
 "\n"
 msgstr ""
-"Das bestehende Dateisystem wird überschrieben, dies kann mittels des "
-"Befehls\n"
+"Das bestehende Dateisystem wird überschrieben, dies kann mittels des Befehls\n"
 "„e2undo %s %s“ rückgängig gemacht werden.\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "beim Versuch, %s zu löschen"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 msgid "while trying to setup undo file\n"
-msgstr ""
-"beim Versuch, die Datei mit den Daten zur Rückgängigmachung anzulegen\n"
+msgstr "beim Versuch, die Datei mit den Daten zur Rückgängigmachung anzulegen\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Fehler: ext2fs-Bibliotheks-Version ist zu alt!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "bei der Programminitialisierung"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\t%s wird verwendet, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr "Ein Terminal wird für interaktive Reparaturen benötigt"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s Datensicherungs-Blöcke werden versucht ...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr "Superblock ungültig,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
 msgstr "Gruppen-Deskriptoren scheinen defekt zu sein..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s beim Benutzen der Datensicherungs-Blöcke"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1546
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: es wird zum originalen Superblock zurück gekehrt\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3609,31 +3601,30 @@ msgstr ""
 "von e2fsck (oder der Dateisystem-Superblock ist defekt).\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr "Könnte es eine Partion der Länge Null sein?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, 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:1526
+#: e2fsck/unix.c:1590
 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:1528
+#: e2fsck/unix.c:1592
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 "Ist das Dateisystem eingehängt oder exklusiv von einem anderen Programm\n"
 "geöffnet worden?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr "Ist das Gerät möglicherweise nicht vorhanden?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3641,99 +3632,119 @@ msgstr ""
 "Laufwerk ist schreibgeschützt, nutzen Sie die Option -n,\n"
 "um es im Nur-Lesen-Modus zu prüfen.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr "Neuere Version von e2fsck benötigt!"
 
-#: e2fsck/unix.c:1647
-#, fuzzy, c-format
+#: e2fsck/unix.c:1749
+#, c-format
 msgid "while checking journal for %s"
-msgstr "während der Prüfung des ext3-Journals für %s"
+msgstr "während der Prüfung des Journals auf %s"
 
-#: e2fsck/unix.c:1650
-#, fuzzy
+#: e2fsck/unix.c:1752
 msgid "Cannot proceed with file system check"
-msgstr "Ohne Wurzel-Inode ist weiteres Arbeiten nicht möglich.\n"
+msgstr "Weiteres Arbeiten auf dem Dateisystem ist nicht möglich"
 
-#: e2fsck/unix.c:1661
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+#: e2fsck/unix.c:1763
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr ""
-"Warnung: Journal-Wiederherstellung wird übersprungen, da sich das "
-"Dateisystem\n"
+"Warnung: Journal-Wiederherstellung wird übersprungen, da sich das Dateisystem\n"
 "im Nur-Lesen-Modus befindet.\n"
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1775
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "Superblock-Flags konnten auf %s nicht gesetzt werden\n"
 
-#: e2fsck/unix.c:1679
-#, fuzzy, c-format
+#: e2fsck/unix.c:1781
+#, c-format
 msgid "Journal checksum error found in %s\n"
-msgstr "Der Journal-Superblock wurde nicht gefunden!\n"
+msgstr "Ein Fehler in der Prüfsumme des Journals wurde in %s gefunden\n"
 
-#: e2fsck/unix.c:1683
-#, fuzzy, c-format
+#: e2fsck/unix.c:1785
+#, c-format
 msgid "Journal corrupted in %s\n"
-msgstr "Das Journal wurde entfernt\n"
+msgstr "Das Journal von %s ist defekt\n"
 
-#: e2fsck/unix.c:1687
-#, fuzzy, c-format
+#: e2fsck/unix.c:1789
+#, c-format
 msgid "while recovering journal of %s"
 msgstr "bei der Wiederherstellung des ext3-Journals von %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s besitzt nicht unterstützte Eigenschaft(en):"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1826
+#, fuzzy, c-format
+#| msgid "%s has unsupported feature(s):"
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "%s besitzt nicht unterstützte Eigenschaft(en):"
+
+#: e2fsck/unix.c:1876
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s beim Lesen des Bad-Block-Inodes\n"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1879
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Das verheißt nichts Gutes, aber es wird trotzdem versucht ...\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Journal wird erstellt (%d Blöcke): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr " Erledigt.\n"
 
-#: e2fsck/unix.c:1823
-#, fuzzy
+#: e2fsck/unix.c:1931
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
 msgstr ""
 "\n"
-"*** Journal wurde wiederhergestellt - Dateisystem ist nun wieder ext3 ***\n"
+"*** Journal wurde wieder hergestellt ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "abgebrochen"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck abgebrochen.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "e2fsck wird neu gestartet ...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "beim Rücksetzen des Kontexts"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** DATEISYSTEMFEHLER KORRIGIERT *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: Es wurden Änderungen am  Dateisystem vorgenommen.\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3742,12 +3753,12 @@ msgstr ""
 "\n"
 "%s: ***** DATEISYSTEM WURDE VERÄNDERT *****\n"
 
-#: e2fsck/unix.c:1910
-#, fuzzy, c-format
+#: e2fsck/unix.c:2040
+#, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** LINUX MUSS NEU GESTARTET WERDEN *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3758,51 +3769,51 @@ msgstr ""
 "%s: ********** WARNUNG: Noch Fehler im Dateisystem  **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
-msgstr "jJ"
+msgstr "jJyY"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
-msgstr ""
+msgstr "aA"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
-msgstr ""
+msgstr " („a” aktiert „ja” für alles) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
-msgstr "<j>"
+msgstr "<jy>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (j/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "abgebrochen!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
-msgstr ""
+msgstr "ja für alles\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "ja\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "nein\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3811,7 +3822,7 @@ msgstr ""
 "%s? nein\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3820,40 +3831,38 @@ msgstr ""
 "%s? ja\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "ja"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "nein"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: ungültiger Bitmpa-Block(-Blöcke) für %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "Inode und Block-Bitmaps werden gelesen"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "während des wiederholten Versuches, Bitmaps für %s einzulesen"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "Block- und Inode-Bitmaps werden geschrieben"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, 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:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3866,65 +3875,64 @@ msgstr ""
 "%s: UNERWARTETE INKONSISTENZ; fsck MANUELL AUSFÜHREN\n"
 "\t(d.h. ohne die Optionen -a oder -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Benutzter Speicher: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Benutzter Speicher: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "Zeit: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "abgelaufende Zeit: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "beim Lesen von Inode %lu in %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "beim Schreiben von Inode %lu in %s"
 
-#: e2fsck/util.c:765
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
-msgstr ""
-"UNERWARTETE INKONSISTENZ: das Dateisystem wird verändert, während fsck "
-"läuft.\n"
+#: e2fsck/util.c:792
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "UNERWARTETE INKONSISTENZ: das Dateisystem wird verändert, während fsck läuft.\n"
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "erledigt                                             \n"
 
-#: misc/badblocks.c:97
-#, 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"
+#: misc/badblocks.c:100
+#, fuzzy, 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"
+#| "       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+#| "       device [last_block [first_block]]\n"
+msgid ""
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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_defekte_Blöcke] [-p Anzahl_Durchgänge]\n"
 "        [-t Testmuster [-t Testmuster [...]]]\n"
 "        Gerät [letzter_Block [Startblock]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3933,84 +3941,80 @@ msgstr ""
 "%s: Die Optionen -n und -w schließen sich gegenseitig aus.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f%% erledigt, %s verstrichen. (%d/%d/%d Fehler)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Es wird mit zufälligen Mustern getestet: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Es wird getestet Mit Muster 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "beim Suchen"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Merkwürdiger Wert (%ld) in do_read\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "während ext2fs_sync_device"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "beim Beginn des „Bad Block“-Listendurchlaufs"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "beim Zuweisen von Puffern"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Es wird von Block %lu bis %lu geprüft\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Es wird nach defekten Blöcken im Nur-Lesen-Modus gesucht\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Es wird nach defekten Blöcken gesucht (Nur-Lesen-Modus):"
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Zu viele defekte Blöcke, Test wird abgebrochen\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Es wird nach defekten Blöcken gesucht (Lesen+Schreiben-Modus)\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Von Block %lu bis %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Lesen und Vergleichen:"
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
-msgstr ""
-"Es wird nach defekten Blöcken im zerstörungsfreien Lesen+Schreiben-Modus "
-"gesucht\n"
+msgstr "Es wird nach defekten Blöcken im zerstörungsfreien Lesen+Schreiben-Modus gesucht\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
-msgstr ""
-"Es wird nach defekten Blöcken gesucht (zerstörungsfreier Lesen+Schreiben-"
-"Modus)\n"
+msgstr "Es wird nach defekten Blöcken gesucht (zerstörungsfreier Lesen+Schreiben-Modus)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -4018,59 +4022,57 @@ msgstr ""
 "\n"
 "Unterbrechung empfangen, es wird aufgeräumt\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "beim Schreiben der Test-Daten; Block %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s ist eingehängt; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 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:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "es ist zu unsicher, Badblocks zu starten!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s wird offensichtlich vom System genutzt; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 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:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "ungültige %s - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
-msgstr ""
+msgstr "Die maximale Anzahl der defekten Blöcke von %u ist zu hoch - Das Maximum sind %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "Speicher für Testmuster kann nicht reserviert werden - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "Es darf im Nur-Lesen-Modus nur ein Testmuster angegeben werden"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Zufälliges Testmuster ist im Nur-Lesen-Modus nicht erlaubt"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -4078,275 +4080,271 @@ msgstr ""
 "Größe des Gerätes ist nicht feststellbar.\n"
 "Sie müssen sie manuell angeben.\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "beim Versuch, die Gerätegröße festzustellen"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "letzter Block"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "erster Block"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "Ungültiger Startblock (%llu): er muss kleiner als %llu sein"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "Ungültiger Endblock (%llu): er muss ein 32-Bit Wert sein"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "beim Erstellen der Bad-Block-Liste im Speicher"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "die Eingabedatei hat ein ungültiges Format"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "beim Hinzufügen zur Bad-Block-Liste im Speicher"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Durchgang beendet, %u defekte Blöcke gefunden. (%d/%d/%d Fehler)\n"
 
 #: misc/chattr.c:89
 #, fuzzy, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
-msgstr "Aufruf: %s [-RVf] [-+=AaCcDdeijsStTu] [-v Version] Dateien...\n"
+#| msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "Aufruf: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v Version] Dateien…\n"
 
-#: misc/chattr.c:159
-#, fuzzy, c-format
+#: misc/chattr.c:160
+#, c-format
 msgid "bad project - %s\n"
-msgstr "falsche Version - %s\n"
+msgstr "ungültiges Projekt - %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "falsche Version - %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "beim Auslesen des Status von %s"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "beim Lesens der Flags in %s"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Flags von %s wie folgt gesetzt: "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "beim Setzen der Flags in %s"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Version von %s gesetzt auf %lu\n"
 
-#: misc/chattr.c:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "beim Setzen der Version in %s"
 
-#: misc/chattr.c:271
-#, fuzzy, c-format
+#: misc/chattr.c:272
+#, c-format
 msgid "Project of %s set as %lu\n"
-msgstr "Version von %s gesetzt auf %lu\n"
+msgstr "Das Projekt von %s wurde auf %lu gesetzt\n"
 
-#: misc/chattr.c:275
-#, fuzzy, c-format
+#: misc/chattr.c:276
+#, c-format
 msgid "while setting project on %s"
-msgstr "beim Setzen der Version in %s"
+msgstr "beim Setzen des Projektes von %s"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Pfad-Variable in chattr_dir_proc konnte nicht reserviert werden"
 
-#: misc/chattr.c:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "= ist inkompatibel zu - und +\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "„-v“, =, - oder + verwenden\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
-#, fuzzy, c-format
+#: misc/create_inode.c:80 misc/create_inode.c:119
+#, c-format
 msgid "while reading inode %u"
-msgstr "beim Lesen von Inode %lu in %s"
+msgstr "beim Lesen von Inode %u"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
-#, fuzzy
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 msgid "while expanding directory"
-msgstr "beim Expandieren von /lost+found"
+msgstr "beim Expandieren des Verzeichnisses"
 
-#: misc/create_inode.c:87
-#, fuzzy, c-format
+#: misc/create_inode.c:97
+#, c-format
 msgid "while linking \"%s\""
-msgstr "beim Öffnen von %s"
+msgstr "beim Verknüpfen von „%s”"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
-#, fuzzy, c-format
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
+#, c-format
 msgid "while writing inode %u"
-msgstr "beim Schreiben von Inode %lu in %s"
+msgstr "beim Schreiben von Inode %u"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
-#, fuzzy, c-format
+#: misc/create_inode.c:152 misc/create_inode.c:176
+#, c-format
 msgid "while listing attributes of \"%s\""
-msgstr "beim Versuch, %s abzuschneiden"
+msgstr "beim Auflisten der Attribute von „%s”"
 
-#: misc/create_inode.c:150
-#, fuzzy, c-format
+#: misc/create_inode.c:163
+#, c-format
 msgid "while opening inode %u"
-msgstr "beim Start des Inode-Scans"
+msgstr "beim Öffnen von Inode %u"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
-#, fuzzy
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
-msgstr "beim Zuweisen von Puffern"
+msgstr "beim Anfordern von Speicher"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
-#, fuzzy, c-format
+#: misc/create_inode.c:189 misc/create_inode.c:205
+#, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
-msgstr "beim Lesens der Flags in %s"
+msgstr "beim Lesens des Attributs „%s” von „%s”"
 
-#: misc/create_inode.c:201
-#, fuzzy, c-format
+#: misc/create_inode.c:214
+#, c-format
 msgid "while writing attribute \"%s\" to inode %u"
-msgstr "beim Schreiben von Inode %lu in %s"
+msgstr "beim Schreiben von Attribut „%s” nach Inode „%u”"
 
-#: misc/create_inode.c:211
-#, fuzzy, c-format
+#: misc/create_inode.c:224
+#, c-format
 msgid "while closing inode %u"
-msgstr "während der Inode-Prüfung"
+msgstr "beim Schließen von Inode %u"
 
-#: misc/create_inode.c:259
-#, fuzzy, c-format
+#: misc/create_inode.c:275
+#, c-format
 msgid "while allocating inode \"%s\""
-msgstr "beim Zuweisen von Puffern"
+msgstr "beim Reservieren von Speicher für Inode „%s”"
 
-#: misc/create_inode.c:278
-#, fuzzy, c-format
+#: misc/create_inode.c:294
+#, c-format
 msgid "while creating inode \"%s\""
-msgstr "beim Lesen von Inode %lu in %s"
+msgstr "beim Anlegen von Inode „%s”"
 
-#: misc/create_inode.c:343
-#, fuzzy, c-format
+#: misc/create_inode.c:360
+#, c-format
 msgid "while creating symlink \"%s\""
-msgstr "beim Lesens der Flags in %s"
+msgstr "beim Anlegen der symbolischen Verknüpfung „%s”"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
-#, fuzzy, c-format
+#: misc/create_inode.c:378 misc/create_inode.c:963
+#, c-format
 msgid "while looking up \"%s\""
-msgstr "beim Suchen von /lost+found"
+msgstr "beim Suchen von „%s”"
 
-#: misc/create_inode.c:381
-#, fuzzy, c-format
+#: misc/create_inode.c:398
+#, c-format
 msgid "while creating directory \"%s\""
-msgstr "beim Erstellen des Wurzelverzeichnisses"
+msgstr "beim Erstellen des Verzeichnisses „%s”"
 
-#: misc/create_inode.c:609
-#, fuzzy, c-format
+#: misc/create_inode.c:627
+#, c-format
 msgid "while opening \"%s\" to copy"
-msgstr "beim Öffnen von %s"
+msgstr "beim Öffnen von „%s” zum Kopieren"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
-msgstr ""
+msgstr "beim Ändern des Arbeitsverzeichnisses zu „%s”"
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:815
 #, fuzzy, c-format
-msgid "while opening directory \"%s\""
-msgstr "beim Öffnen von %s"
+#| msgid "while creating directory \"%s\""
+msgid "while scanning directory \"%s\""
+msgstr "beim Erstellen des Verzeichnisses „%s”"
 
-#: misc/create_inode.c:719
-#, fuzzy, c-format
+#: misc/create_inode.c:825
+#, c-format
 msgid "while lstat \"%s\""
-msgstr "beim Auslesen des Status von %s"
+msgstr "beim Auslesen des Status von „%s”"
 
-#: misc/create_inode.c:752
-#, fuzzy, c-format
+#: misc/create_inode.c:875
+#, c-format
 msgid "while creating special file \"%s\""
-msgstr "beim Lesen von Inode %lu in %s"
+msgstr "beim Erzeugen der besonderen Datei „%s”"
 
-#: misc/create_inode.c:761
-#, fuzzy
+#: misc/create_inode.c:884
 msgid "malloc failed"
 msgstr "Die Reservierung von Speicher schlug fehl"
 
-#: misc/create_inode.c:769
-#, fuzzy, c-format
+#: misc/create_inode.c:892
+#, c-format
 msgid "while trying to read link \"%s\""
-msgstr "beim Versuch, die Größe von %s zu ändern"
+msgstr "beim Versuch, die Verknüpfung „%s” zu lesen"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
-msgstr ""
+msgstr "Die symbolischen Verknüpfung wurde zwischen lstat() und readlink() größer"
 
-#: misc/create_inode.c:787
-#, fuzzy, c-format
+#: misc/create_inode.c:910
+#, c-format
 msgid "while writing symlink\"%s\""
-msgstr "beim Schreiben von Inode %lu in %s"
+msgstr "beim Schreiben der symbolischen Verknüpfung „%s”"
 
-#: misc/create_inode.c:797
-#, fuzzy, c-format
+#: misc/create_inode.c:921
+#, c-format
 msgid "while writing file \"%s\""
-msgstr "beim Schreiben von Inode %lu in %s"
+msgstr "beim Schreiben von Datei „%s”"
 
-#: misc/create_inode.c:810
-#, fuzzy, c-format
+#: misc/create_inode.c:934
+#, c-format
 msgid "while making dir \"%s\""
-msgstr "beim Öffnen von %s"
+msgstr "beim erzeugen  von Verzeichnis „%s”"
 
-#: misc/create_inode.c:827
-#, fuzzy
+#: misc/create_inode.c:952
 msgid "while changing directory"
-msgstr "Verzeichnisblock wird gelesen"
+msgstr "beim Wechseln des Verzeichnisses"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:958
 #, c-format
 msgid "ignoring entry \"%s\""
-msgstr ""
+msgstr "Eintrag „%s” wird ignoriert"
 
-#: misc/create_inode.c:846
-#, fuzzy, c-format
+#: misc/create_inode.c:971
+#, c-format
 msgid "while setting inode for \"%s\""
-msgstr "beim Setzen der Version in %s"
+msgstr "beim Setzen der Inode für „%s”"
 
-#: misc/create_inode.c:853
-#, fuzzy, c-format
+#: misc/create_inode.c:978
+#, c-format
 msgid "while setting xattrs for \"%s\""
-msgstr "beim Setzen der Flags in %s"
+msgstr "beim Setzen der erweiterten Attribute für „%s”"
 
-#: misc/create_inode.c:871
-#, fuzzy
+#: misc/create_inode.c:1004
 msgid "while saving inode data"
-msgstr "beim Starten der Inode-Prüfung"
+msgstr "beim Sichern der Inode-Daten"
 
 #: misc/dumpe2fs.c:56
 #, fuzzy, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Aufruf: %s [-bfhixV] [-o superblock=<Nummer>] [-o blocksize=<Nummer>] Gerät\n"
+#| msgid "Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "Aufruf: %s [-bfghixV] [-o superblock=<Nummer>] [-o blocksize=<Nummer>] Gerät\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -4362,9 +4360,9 @@ msgid "Group %lu: (Blocks "
 msgstr "Gruppe %lu: (Blöcke "
 
 #: misc/dumpe2fs.c:226
-#, fuzzy, c-format
+#, c-format
 msgid " csum 0x%04x"
-msgstr "  Prüfsumme 0x%04x"
+msgstr " Prüfsumme 0x%04x"
 
 #: misc/dumpe2fs.c:228
 #, c-format
@@ -4405,24 +4403,25 @@ msgid "  Block bitmap at "
 msgstr "  Block-Bitmap in "
 
 #: misc/dumpe2fs.c:260 misc/dumpe2fs.c:271
-#, fuzzy, c-format
+#, c-format
 msgid ", csum 0x%08x"
-msgstr "  Prüfsumme 0x%04x"
+msgstr ", Prüfsumme 0x%04x"
 
 #: misc/dumpe2fs.c:263
 msgid ","
-msgstr ""
+msgstr ","
 
 #: misc/dumpe2fs.c:265
 msgid ""
 "\n"
 " "
 msgstr ""
+"\n"
+" "
 
 #: misc/dumpe2fs.c:266
-#, fuzzy
 msgid " Inode bitmap at "
-msgstr ", Inode-Bitmap in "
+msgstr " Inode-Bitmap in "
 
 #: misc/dumpe2fs.c:273
 msgid ""
@@ -4463,106 +4462,57 @@ msgstr "beim Ausgeben der „Bad Block“-Liste"
 msgid "Bad blocks: %u"
 msgstr "Bad Blocks: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "beim Lesen des Journal-Inodes"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "beim Lesen des Journal-Inodes"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "beim Lesen des Journal-Superblocks"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Die magische Zahl im Journal-Superblock ist ungültig!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Jounaleigenschaften:        "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Journalgröße:            "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Journal-Länge:            %u\n"
-"Journal-Sequenz:          0x%08x\n"
-"Journal-Start:            %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Jounal-Fehlernummer:      %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "beim Lesen des Journal-Superblocks"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
-msgstr ""
-"Die magische Nummer des Journal-Superblocks konnte nicht gefunden werden"
+msgstr "Die magische Nummer des Journal-Superblocks konnte nicht gefunden werden"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Journal-Blockgröße:       %u\n"
-"Journal-Länge:            %u\n"
-"Journal-Startblock:       %u\n"
-"Journal-Sequenz:          0x%08x\n"
-"Journal-Start:            %u\n"
-"Journal-Benutzeranzahl:   %u\n"
+#: misc/dumpe2fs.c:468
+#, fuzzy
+#| msgid "while allocating buffer"
+msgid "failed to alloc MMP buffer\n"
+msgstr "beim Zuweisen von Puffern"
 
-#: misc/dumpe2fs.c:514
-#, c-format
-msgid "Journal users:            %s\n"
-msgstr "Jounalbenutzer:            %s\n"
+#: misc/dumpe2fs.c:479
+#, fuzzy, c-format
+#| msgid "Checking blocks %lu to %lu\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "Es wird von Block %lu bis %lu geprüft\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 msgid "Couldn't allocate memory to parse options!\n"
-msgstr ""
-"Speicher zum Verarbeiten der Optionen konnte nicht reserviert werden!\n"
+msgstr "Speicher zum Verarbeiten der Optionen konnte nicht reserviert werden!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Ungültiger Superblock-Parameter: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Ungültiger Blockgrößen-Parameter: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4586,234 +4536,225 @@ msgstr ""
 "\tblocksize=<Blockgröße>\n"
 "\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\t%s wird benutzt\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Es kann kein gültiger Dateisystem-Superblock gefunden werden.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:730
-#, c-format
+#: misc/dumpe2fs.c:747
+#, fuzzy, c-format
+#| msgid "while retrying to read bitmaps for %s"
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "während des wiederholten Versuches, Bitmaps für %s einzulesen"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
-"\n"
-"%s: %s: Fehler beim Lesen von Bitmaps: %s\n"
 
-#: misc/e2image.c:106
-#, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
+#: misc/e2image.c:107
+#, fuzzy, c-format
+#| msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
 msgstr "Aufruf: %s [-r|Q ] [ -fr ] Gerätedatei Abbild-Datei\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "       %s [-I] Gerätedatei Abbild-Datei\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
-msgstr ""
-"       %s -ra  [  -cfnp  ] [ -o Quelloffset ] [ -O Zieloffset ] Quell_Fs "
-"[ Ziel_fs ]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+msgstr "       %s -ra  [  -cfnp  ] [ -o Quelloffset ] [ -O Zieloffset ] Quell_Fs [ Ziel_fs ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr "beim Zuweisen von Puffern"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "Block %llu wird geschrieben\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr "Schreibfehler - Block %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr "Fehler in generic_write()"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Fehler: Größe des Headers übersteigt wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr "Header-Puffer konnte nicht zugewiesen werden\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "beim Schreiben des Superblocks"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "beim Schreiben der Inode-Tabelle"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "beim Schreiben der Block-Bitmap"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "beim Schreiben der Inode-Bitmap"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Defekter Verzeichnisblock %llu: ungültige rec_len (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Defekter Verzeichnisblock %llu: ungültige name_len (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu Blöcke (%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
 msgstr "Kopieren "
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr ""
 "Jetzt anzuhalten würde das Dateisystem zerstören. Wenn Sie sicher sind,\n"
 "unterbrechen Sie noch einmal.\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " %s bleibt bei %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr "Fehler beim Lesen von Block %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "%llu / %llu Blöcke (%d%%) wurden in %s kopiert "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "bei %.2f MB/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
 msgstr "beim Anfordern von Speicher für die l1-Tabelle"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr "beim Anfordern von Speicher für den l2-Zwischenspeicher"
 
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
-msgstr ""
-"Warnung: Beim Schreiben des Zwischenspeichers befinden sich immer noch "
-"Tabellen in ihm. Damit gehen Daten verloren und das Abbild ist eventuell "
-"ungültig.\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
+msgstr "Warnung: Beim Schreiben des Zwischenspeichers befinden sich immer noch Tabellen in ihm. Damit gehen Daten verloren und das Abbild ist eventuell ungültig.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr "beim Reservieren von Speicher für ext2_qcow2_image"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr "beim Initialisieren des ext2_qcow2_image"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
-msgstr ""
-"Programmierfehler: mehrere sequenzielle Refcount-Blöcke wurden erzeugt!\n"
+msgstr "Programmierfehler: mehrere sequenzielle Refcount-Blöcke wurden erzeugt!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr "beim Reservieren von Speicher für die Block-Bitmap"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr "beim Reservieren von Speicher für die verwürfelte Block-Bitmap"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
 msgstr "Inodes werden eingelesen …\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr "Es konnte kein Blockpuffer reserviert werden"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "beim Iterieren über Inode %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "Rohe und Qcow2-Abbilder können nicht installiert werden"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr "Fehler beim Lesen der Bitmaps"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr "beim Öffnen der Gerätedatei"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr "beim Schreiben der Inode-Tabelle"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "Die Option „-a“ kann nur bei Roh- oder QCOW2-Abbildern benutzt werden."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+#, fuzzy
+#| msgid "-a option can only be used with raw or QCOW2 images."
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "Die Option „-a“ kann nur bei Roh- oder QCOW2-Abbildern benutzt werden."
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr "Offsets sind nur bei Roh-Abbildern erlaubt."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr "Verschieben ist nur bei Roh- Abbildern erlaubt."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr "Der Verschiebemodus erfordert den „Alle Daten“-Modus."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr "Prüfung, ob eingehängt"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4826,58 +4767,60 @@ msgstr ""
 "unbrauchbar für die Fehlersuche wäre. Verwenden Sie die Option -f, wenn\n"
 "Sie das wirklich machen wollen.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
-msgstr ""
-"Das QCOW2-Abbild kann nicht auf die Standardausgabe geschrieben werden!\n"
+msgstr "Das QCOW2-Abbild kann nicht auf die Standardausgabe geschrieben werden!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr "Der Status der Ausgabe lässt sich nicht feststellen\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "Das Abbild (%s) ist komprimiert\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "Das Abbild (%s) ist verschlüsselt\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, fuzzy, c-format
+#| msgid "Image (%s) is encrypted\n"
+msgid "Image (%s) is corrupted\n"
+msgstr "Das Abbild (%s) ist verschlüsselt\n"
+
+#: misc/e2image.c:1683
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
-msgstr ""
-"beim Versuch, das Qcow2-Abbild (%s) in ein Roh-Abbild (%s) zu konvertieren"
+msgstr "beim Versuch, das Qcow2-Abbild (%s) in ein Roh-Abbild (%s) zu konvertieren"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr "Die Option „-c“ wird nur im Roh-Modus unterstützt\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
-msgstr ""
-"Die Option „-c“ wird beim Schreiben auf die Standardausgabe nicht "
-"unterstützt\n"
+msgstr "Die Option „-c“ wird beim Schreiben auf die Standardausgabe nicht unterstützt\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr "beim Anfordern des Prüfpuffers"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr "Die Option „-p“ wird nur im Roh-Modus unterstützt\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d Blöcke enthielten bereits die zu kopierenden Daten.\n"
 
 #: misc/e2initrd_helper.c:68
-#, fuzzy, c-format
+#, c-format
 msgid "Usage: %s -r device\n"
-msgstr "Aufruf: %s Laufwerk\n"
+msgstr "Aufruf: %s -r Laufwerk\n"
 
 #: misc/e2label.c:58
 #, c-format
@@ -4899,7 +4842,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:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Warnung: Name zu lang, wird gekürzt.\n"
@@ -4914,203 +4857,195 @@ msgstr "e2label: Erneutes Springen zum Superblock nicht möglich\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: Fehler beim Schreiben des Superblocks\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Aufruf: e2label Gerät [neuer_Name]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, fuzzy, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
-msgstr "Aufruf: %s <Transaktionsdatei> <Dateisystem>\n"
+#| msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
+msgstr "Aufruf: %s [-f] [-h] [-n] [-v] <Transaktionsdatei> <Dateisystem>\n"
 
-#: misc/e2undo.c:143
-#, fuzzy
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
-msgstr "Die Zeit des letzten Einhängens des Dateisystems war nicht %u\n"
+msgstr "Der Superblock des Dateisystems passt nicht zur Undo-Datei.\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
-msgstr ""
+msgstr "die UUIDs stimmen nicht überein.\n"
 
-#: misc/e2undo.c:148
-#, fuzzy
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
-msgstr "Die Zeit des letzten Einhängens des Dateisystems war nicht %u\n"
+msgstr "Die Zeit des letzten Einhängens stimmt nicht überein.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
-msgstr ""
+msgstr "Die Zeit des letzten Schreibzugriffs stimmt nicht überein.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
-msgstr ""
+msgstr "Der lebenslange Schreibzugriffszähler stimmt nicht überein.\n"
 
-#: misc/e2undo.c:166
-#, fuzzy
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
-msgstr "beim Lesen des Journal-Superblocks"
+msgstr "beim Lesen des Dateisystem-Superblocks"
 
-#: misc/e2undo.c:182
-#, fuzzy
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
-msgstr "beim Schreiben des Superblocks"
+msgstr "beim Lesen des Superblocks"
 
-#: misc/e2undo.c:195
-#, fuzzy, c-format
+#: misc/e2undo.c:201
+#, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
-msgstr "Die Prüfsumme des Superblocks passt nicht dazu"
+msgstr "Die Prüfsumme des Superblocks in der Undo-Datei stimmt nicht überein.\n"
 
-#: misc/e2undo.c:334
-#, fuzzy, c-format
+#: misc/e2undo.c:340
+#, c-format
 msgid "illegal offset - %s"
-msgstr "Unzulässiger Offset: %s\n"
+msgstr "Unzulässiger Offset - %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
-msgstr ""
+msgstr "Während des Abarbeitens der Undo-Datei kann nicht in sie geschrieben werden.\n"
 
-#: misc/e2undo.c:367
-#, fuzzy, c-format
+#: misc/e2undo.c:373
+#, c-format
 msgid "while opening undo file `%s'\n"
-msgstr "beim Öffnen der Gerätedatei"
+msgstr "beim Öffnen der Undo-Datei „%s”\n"
 
-#: misc/e2undo.c:374
-#, fuzzy
+#: misc/e2undo.c:380
 msgid "while reading undo file"
-msgstr "beim Lesen des Root-Inodes"
+msgstr "beim Lesen der Undo-Datei"
 
-#: misc/e2undo.c:379
-#, fuzzy, c-format
+#: misc/e2undo.c:385
+#, c-format
 msgid "%s: Not an undo file.\n"
-msgstr "%s: zu viele Geräte\n"
+msgstr "%s: Keine Undo-Datei.\n"
 
-#: misc/e2undo.c:390
-#, fuzzy, c-format
+#: misc/e2undo.c:396
+#, c-format
 msgid "%s: Header checksum doesn't match.\n"
-msgstr "Die Prüfsumme des Inodes passt nicht dazu"
+msgstr "%s: Die Prüfsumme des Vorspanns passt nicht dazu.\n"
 
-#: misc/e2undo.c:397
-#, fuzzy, c-format
+#: misc/e2undo.c:403
+#, c-format
 msgid "%s: Corrupt undo file header.\n"
-msgstr "Defekter Kopf einer Erweiterung"
+msgstr "%s: Der Vorspann der Undo-Datei ist defekt.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
-msgstr ""
+msgstr "%s: Die rückgängig zu machende Blockgröße ist zu groß.\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
-msgstr ""
+msgstr "%s: Die rückgängig zu machende Blockgröße ist zu klein.\n"
 
-#: misc/e2undo.c:419
-#, fuzzy, c-format
+#: misc/e2undo.c:425
+#, c-format
 msgid "%s: Unknown undo file feature set.\n"
-msgstr ""
-"Im Journal-Superblock ist ein unbekannter Bitschalter für eine\n"
-"inkompatible Eigenschaft gesetzt.\n"
+msgstr "%s: Unbekannter Satz von Eigenschaften in der UNdo-Datei.\n"
 
-#: misc/e2undo.c:427
-#, fuzzy, c-format
+#: misc/e2undo.c:433
+#, c-format
 msgid "Error while determining whether %s is mounted."
-msgstr "Fehler beim Überprüfen, ob %s eingehängt ist.\n"
+msgstr "Fehler beim Überprüfen, ob %s eingehängt ist."
 
-#: misc/e2undo.c:433
-#, fuzzy
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
-msgstr "e2undo sollte nur auf nicht-eingehängten Dateisystemen laufen\n"
+msgstr "e2undo sollte nur auf nicht-eingehängten Dateisystemen laufen"
 
-#: misc/e2undo.c:449
-#, fuzzy, c-format
+#: misc/e2undo.c:455
+#, c-format
 msgid "while opening `%s'"
-msgstr "beim Öffnen von %s"
+msgstr "beim Öffnen von „%s”"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
-msgstr ""
+msgstr "der angegebene Offset ist zu groß"
 
-#: misc/e2undo.c:501
-#, fuzzy
+#: misc/e2undo.c:507
 msgid "while reading keys"
-msgstr "beim Lesen der Bitmaps"
+msgstr "beim Lesen der Schlüssel"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
-msgstr ""
+msgstr "%s: faslsche Schlüsselmagie bei %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
-msgstr ""
+msgstr "%s: Prüfsummenfehler des Schlüsselblocks bei %llu.\n"
 
-#: misc/e2undo.c:546
-#, fuzzy, c-format
+#: misc/e2undo.c:552
+#, c-format
 msgid "%s: block %llu is too long."
-msgstr "Von Block %lu bis %lu\n"
+msgstr "%s: Block %llu ist zu lng."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
-#, fuzzy, c-format
+#: misc/e2undo.c:564 misc/e2undo.c:600
+#, c-format
 msgid "while fetching block %llu."
-msgstr "Block %llu wird geschrieben\n"
+msgstr "beim Lesen von Block %llu."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
-msgstr ""
+msgstr "Prüfsummenfehler im Dateisystemblock %llu (Undo-Block %llu)\n"
 
-#: misc/e2undo.c:609
-#, fuzzy, c-format
+#: misc/e2undo.c:615
+#, c-format
 msgid "while writing block %llu."
-msgstr "Schreibfehler - Block %llu"
+msgstr "Schreibfehler - Block %llu."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
-msgstr ""
+msgstr "Undo-Datei ist defekt; starten Sie e2fsck JETZT!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
-msgstr ""
+msgstr "EA-Fehler beim abarbeiten der Undo-Datei; starten Sie e2fsck JETZT!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
-msgstr ""
+msgstr "Unvollständiger Undo-Datensatz; starten Sie e2fsck.\n"
 
 #: misc/findsuper.c:110
 #, c-format
 msgid "Usage:  findsuper device [skipbytes [startkb]]\n"
-msgstr ""
+msgstr "Aufruf:  findsuper Gerät [zu_überspringende_Bytes] [StartKB]\n"
 
 #: misc/findsuper.c:155
 #, c-format
 msgid "skipbytes should be a number, not %s\n"
-msgstr ""
+msgstr "zu_überspringende_Bytes sollte ein Zahl sein und nicht %s\n"
 
 #: misc/findsuper.c:162
 #, c-format
 msgid "skipbytes must be a multiple of the sector size\n"
-msgstr ""
+msgstr "zu_überspringende_Bytes muß ein Mehrfaches der Sektorgröße sein\n"
 
 #: misc/findsuper.c:169
 #, c-format
 msgid "startkb should be a number, not %s\n"
-msgstr ""
+msgstr "StartKB sollte eine Zahl sein und nicht %s\n"
 
 #: misc/findsuper.c:175
 #, c-format
 msgid "startkb should be positive, not %llu\n"
-msgstr ""
+msgstr "StartKB sollte positiv sein, nicht %llu\n"
 
 #: misc/findsuper.c:186
 #, c-format
 msgid "starting at %llu, with %u byte increments\n"
-msgstr ""
+msgstr "Start bei %llu mit %u Bytes Schrittweite\n"
 
 #: misc/findsuper.c:188
 #, c-format
@@ -5118,13 +5053,13 @@ msgid ""
 "[*] probably superblock written in the ext3 journal superblock,\n"
 "\tso start/end/grp wrong\n"
 msgstr ""
+"[*] wahrscheinlichj ein Superblock, der Im Ext3-Journal-Superblock geschrieben wurde,\n"
+"\tdaher stimmen  Start/Ende/Gruppe nicht\n"
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
-msgstr ""
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+msgstr "Byte_offset  Byte_start     Byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
 
 #: misc/findsuper.c:264
 #, c-format
@@ -5132,6 +5067,8 @@ msgid ""
 "\n"
 "%11Lu: finished with errno %d\n"
 msgstr ""
+"\n"
+"%11Lu: endete mit Errno %d\n"
 
 #: misc/fsck.c:343
 #, c-format
@@ -5156,37 +5093,37 @@ msgstr ""
 "\twie möglich korrigieren.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: nicht gefunden\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: kein Kindprozess mehr?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Warnung... %s für Gerät %s wurde mit Signal %d beendet.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: Status ist %x, sollte nie vorkommen.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Beendet mit %s (Exit-Status %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Fehler %d bei Ausführung von fsck.%s für %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5194,105 +5131,97 @@ msgstr ""
 "Bei -t müssen entweder allen oder keinem Dateisystem ein „no“ bzw. „!“\n"
 "vorangestellt werden.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Speicher für Dateisystemtypen kann nicht reserviert werden.\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, 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: Ungültige Zeile in /etc/fstab wird übersprungen: bind mount mit\n"
 " Durchgangsnummer für fsck, die nicht Null ist\n"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: %s kann nicht überprüft werden: fsck.%s nicht gefunden\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Alle Dateisysteme werden überprüft.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 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"
+#: misc/fsck.c:1085
+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
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: zu viele Geräte\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: zu viele Argumente\n"
 
 #: misc/fuse2fs.c:3745
-#, fuzzy
 msgid "Mounting read-only.\n"
-msgstr "Die Datei wurde nur-lesbar geöffnet"
+msgstr "Wird nur-lesbar eingehängt.\n"
 
 #: misc/fuse2fs.c:3769
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
-msgstr ""
+msgstr "%s: Anwendern wird erlaubt, alle Blöcke zu belegen. Das ist gefḧrlich!\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
-msgstr ""
+msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
-#, fuzzy, c-format
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
+#, c-format
 msgid "Please run e2fsck -fy %s.\n"
-msgstr ""
-"Bitte lassen Sie zuerst „e2fsck -f %s“ laufen.\n"
-"\n"
+msgstr "Bitte lassen Sie bitte „e2fsck -fy %s“ laufen.\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
-msgstr ""
+msgstr "Das Journal muss wiederherdestellt werden; Das starten von „e2fsck -E journal_only” ist zwingend nerforderlich.\n"
 
-#: misc/fuse2fs.c:3811
-#, fuzzy, c-format
+#: misc/fuse2fs.c:3812
+#, c-format
 msgid "%s: Writing to the journal is not supported.\n"
-msgstr "Das Verringern der Inode-Größe wird nicht unterstützt\n"
+msgstr "%s: In das Journal schreiben wird nicht unterstützt.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
-msgstr ""
+msgstr "Warnung: Ein ungeprüftes Dateisystem wird eingehängt. Sie sollten e2fsck laufen lassen.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
-msgstr ""
+msgstr "Warnung: Die maximale Anzahl von Einhängungen ist erreicht. Sie sollten e2fsck laufen lassen.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
-msgstr ""
+msgstr "Warnung: 'Überprüfungszeitpunkt wurde erreicht. Sie sollten e2fsck laufen lassen.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
-msgstr ""
+msgstr "Verweiste Blöcke gefunden. Sie sollten e2fsck laufen lassen.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
-msgstr ""
+msgstr "Es wurden Fehler entdeckt, Sie sollten e2fsck laufen lassen.\n"
 
 #: misc/lsattr.c:75
-#, fuzzy, c-format
+#, c-format
 msgid "Usage: %s [-RVadlpv] [files...]\n"
-msgstr "Aufruf: %s [-RVadlv] [Dateien...]\n"
+msgstr "Aufruf: %s [-RVadlpv] [Dateien…]\n"
 
 #: misc/lsattr.c:86
 #, c-format
@@ -5300,17 +5229,17 @@ msgid "While reading flags on %s"
 msgstr "Beim Lesen der Flags von %s"
 
 #: misc/lsattr.c:93
-#, fuzzy, c-format
+#, c-format
 msgid "While reading project on %s"
-msgstr "Beim Lesen der Version von %s"
+msgstr "Beim Lesen des Projektes von %s"
 
 #: misc/lsattr.c:102
 #, c-format
 msgid "While reading version on %s"
 msgstr "Beim Lesen der Version von %s"
 
-#: misc/mke2fs.c:124
-#, fuzzy, c-format
+#: misc/mke2fs.c:130
+#, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
@@ -5318,51 +5247,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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 "Aufruf: %s [-c|-l Dateiname] [-b Blockgröße] [-C Clustergröße]\n"
 "\t[-i Bytes-pro-Inode] [-I Inode-Größe] [-J Journal-Optionen]\n"
-"\t[-G Größe_der_Metagruppe] [-N Anzahl_der_Inodes]\n"
+"\t[-G Größe_der_Metagruppe] [-N Anzahl_der_Inodes] [-d Wurzelverzeichnis]\n"
 "\t[-m Reservierte-Blöcke-Prozentsatz] [-o Erzeuger-OS]\n"
 "\t[-g Blöcke-pro-Gruppe] [-L Volume-Label]\n"
 "\t[-M letztes-eingehängtes-Verzeichnis] [-O Eigenschaft[,...]]\n"
-"\t[-r fs-Revision] [-E erweiterte-Option[,...]]\n"
-"\t[-t Dateisystemtyp] [-T Verwendungs-Typ ] [-U UUID] [-jnqvDFKSV]\n"
-"\tGerät [Block-Anzahl]\n"
+"\t[-r Dateisystem-Revision] [-E erweiterte-Option[,...]]\n"
+"\t[-t Dateisystemtyp] [-T Verwendungs-Typ ] [-U UUID] [-e Fehlerverhalten]\n"
+"\t[-jnqvDFSV] Gerät [Block-Anzahl]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Befehl wird ausgeführt: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "während des Versuchs, „%s“ auszuführen"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "beim Auswerten der „Bad Block“-Liste vom Programm"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, 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:295
+#: misc/mke2fs.c:301
 #, 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 Ordnung sein, um ein\n"
 "\tDateisystem zu erstellen.\n"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Abbruch...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5373,94 +5301,99 @@ msgstr ""
 "\tenthält defekte Blöcke.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "beim Markieren von defekten Blöcken als „belegt“"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+#, fuzzy
+#| msgid "while writing quota inodes"
+msgid "while writing reserved inodes"
+msgstr "beim Schreiben der Quota-Inodes"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Inode-Tabellen werden geschrieben: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, 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:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "erledigt                        \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "beim Erstellen des Wurzelverzeichnisses"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "beim Lesen des Root-Inodes"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "beim Setzen des Root-Inode-Eigentümers"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "beim Erstellen von /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "beim Suchen von /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "beim Expandieren von /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "beim Setzen des „Bad Block“-Inodes"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, 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:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Warnung: Block %s konnte nicht gelesen werden\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Warnung: Sektor %d konnte nicht gelöscht werden: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "beim Initialisieren des Journal-Superblocks"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Journal-Gerät wird mit Nullen überschrieben: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "beim Überschreiben des Journal-Gerätes mit Nullen (Block %llu, Nr. %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "beim Schreiben des Journal-Superblocks"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
-msgstr "Ein Dateisystems mit %llu (%dk) Blöcken und %u Inodes wird erzeugt.\n"
+msgstr "Ein Dateisystem mit %llu (%dk) Blöcken und %u Inodes wird erzeugt.\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5469,159 +5402,192 @@ msgstr ""
 "Warnung: %llu Blöcke unbenutzt.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Dateisystembezeichnung=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "OS-Typ: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blockgröße=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Clustergröße=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Fragmentgröße=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Stride=%u Blöcke, Stripebreite=%u Blöcke\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u Inodes, %llu Blöcke\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, 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:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Erster Datenblock=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Eigentümer des Wurzelverzeichnisses=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximale Dateisystem-Blöcke=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u Blockgruppen\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u Blockgruppe\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, 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:702
+#: misc/mke2fs.c:714
 #, 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:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u Inodes pro Gruppe\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "UUID des Dateisystems: %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Superblock-Sicherungskopien gespeichert in den Blöcken: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:822
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s erfordert „-O 64Bit“\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "„%s“ muss vor „resize=%u“ kommen\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Unzulässige desc_size: „%s“\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, fuzzy, c-format
+#| msgid "Invalid new size: %s\n"
+msgid "Invalid hash seed: %s\n"
+msgstr "Unzulässige neue Größe: %s\n"
+
+#: misc/mke2fs.c:867
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Unzulässiger Offset: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Ungültiges mmp_update_interval: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Ungültige Anzahl von Ersatz-Superblöcken: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Ungültiger „stride“-Parameter: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Ungültiger Stripebreite-Parameter: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Ungültiger „resize“-Parameter: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:965
 msgid "The resize maximum must be greater than the filesystem size.\n"
-msgstr ""
-"Das Maximum der Vergrößerung muss oberhalb als der Dateisystem-Größe "
-"liegen.\n"
+msgstr "Das Maximum der Vergrößerung muss oberhalb als der Dateisystem-Größe liegen.\n"
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:989
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 "Online-Größenänderungen werden bei Revison-0-Dateisystemen nicht\n"
 "\tunterstützt\n"
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Ungültiger Eigentümer der Wurzel: „%s“\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1069
+#, fuzzy, c-format
+#| msgid "Invalid new size: %s\n"
+msgid "Invalid encoding: %s"
+msgstr "Unzulässige neue Größe: %s\n"
+
+#: misc/mke2fs.c:1087
 #, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Bad option(s) specified: %s\n"
+#| "\n"
+#| "Extended options are separated by commas, and may take an argument which\n"
+#| "\tis set off by an equals ('=') sign.\n"
+#| "\n"
+#| "Valid extended options are:\n"
+#| "\tmmp_update_interval=<interval>\n"
+#| "\tnum_backup_sb=<0|1|2>\n"
+#| "\tstride=<RAID per-disk data chunk in blocks>\n"
+#| "\tstripe-width=<RAID stride * data disks in blocks>\n"
+#| "\toffset=<offset to create the file system>\n"
+#| "\tresize=<resize maximum size in blocks>\n"
+#| "\tpacked_meta_blocks=<0 to disable, 1 to enable>\n"
+#| "\tlazy_itable_init=<0 to disable, 1 to enable>\n"
+#| "\tlazy_journal_init=<0 to disable, 1 to enable>\n"
+#| "\troot_owner=<uid of root dir>:<gid of root dir>\n"
+#| "\ttest_fs\n"
+#| "\tdiscard\n"
+#| "\tnodiscard\n"
+#| "\tquotatype=<quota type(s) to be enabled>\n"
+#| "\n"
 msgid ""
 "\n"
 "Bad option(s) specified: %s\n"
@@ -5643,6 +5609,8 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
@@ -5662,15 +5630,14 @@ msgstr ""
 "\tpacked_meta_blocks=<0 deaktiviert, 1 aktiviert>\n"
 "\tlazy_itable_init=<0 für deaktiviert, 1 für aktiviert>\n"
 "\tlazy_journal_init=<0 für deaktiviert, 1 für aktiviert>\n"
-"\troot_uid=<UID des Wurzelverzeichnisses>\n"
-"\troot_gid=<GID des Wurzelverzeichnisses>\n"
+"\troot_owner=<UID des Wurzelverzeichnisses>:<GID des Wurzelverzeichnisses>\n"
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
-"\tquotatype=<usr ODER grp>\n"
+"\tquotatype=<Zu aktivierende(r) Quota-Typ(en)>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5681,7 +5648,17 @@ msgstr ""
 "Warnung: Die Stripebreite %u des RAIDs ist kein Vielfaches des Strides %u.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr ""
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5690,17 +5667,17 @@ msgstr ""
 "Syntaxfehler in der Konfigurationsdatei von mke2fs (%s, Zeile #%d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Ungültige Dateisystem-Option angegeben: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ungültige Option für das Einhängen angegeben: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
@@ -5709,20 +5686,19 @@ msgstr ""
 "\n"
 "Ihre Datei mke2fs.conf definiert den Typ des Dateisystems %s nicht.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
 msgstr ""
-"Sie müssen wahrscheinlich eine aktualisierte Version der Datei "
-"installieren.\n"
+"Sie müssen wahrscheinlich eine aktualisierte Version der Datei installieren.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 msgid "Aborting...\n"
 msgstr "Abbruch…\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5733,154 +5709,146 @@ msgstr ""
 "Warnung: der Dateisystemtyp %s ist in mke2fs.conf nicht definiert\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Es konnte kein Speicher für den neuen PFAD reserviert werden.\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1608
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Das Profil konnte nicht erfolgreich initialisiert werden: %ld).\n"
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "ungültige Blockgröße - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
-msgstr ""
-"Warnung: Eine Blockgröße von %d ist auf den meisten System unbrauchbar.\n"
+msgstr "Warnung: Eine Blockgröße von %d ist auf den meisten System unbrauchbar.\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1661
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "ungültige Clustergröße - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "„-R“ ist veraltet, bitte verwenden Sie stattdessen „-E“"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "ungültiges Verhalten im Fehlerfall - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr "Die Zahl der Blöcke pro Gruppe ist unzulässig"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 msgid "blocks per group must be multiple of 8"
 msgstr "Die Anzahl der Blöcke pro Gruppe muss ein Vielfaches von 8 sein"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "Der Wert für die Größe von flex_bg ist unzulässig"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
 msgstr "Die Größe von flex_bg muss eine Potenz von 2 sein"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "Die Größe von flex_bg (%lu) muss gleich oder weniger als 2^31 sein"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "Unzulässige Inode-Rate %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1744
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "ungültige Inode-Größe - %s"
 
-#: misc/mke2fs.c:1684
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
-msgstr ""
-"Warnung: Die Option -K wird bald nicht mehr unterstüzt. Verwenden Sie "
-"stattdessen die Erweiterungsoption „-E nodiscard“!\n"
+#: misc/mke2fs.c:1757
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "Warnung: Die Option -K wird bald nicht mehr unterstüzt. Verwenden Sie stattdessen die Erweiterungsoption „-E nodiscard“!\n"
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1768
 msgid "in malloc for bad_blocks_filename"
 msgstr "in malloc für bad_blocks_filename"
 
-#: misc/mke2fs.c:1704
-#, fuzzy, c-format
+#: misc/mke2fs.c:1777
+#, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
-msgstr "Warnung: Name zu lang, wird gekürzt.\n"
+msgstr "Warnung: Name zu lang, wird auf „%s” gekürzt\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "Ungültiger Wert für die prozentuale Anzahl reservierter Blöcke - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "ungültige Anzahl von Inodes - %s"
 
-#: misc/mke2fs.c:1741
-#, fuzzy
+#: misc/mke2fs.c:1814
 msgid "while allocating fs_feature string"
-msgstr "beim Zuweisen von Puffern"
+msgstr "beim Zuweisen von der fs_feature-Zeichenkette"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1831
 #, c-format
 msgid "bad revision level - %s"
 msgstr "ungültige Version - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "beim Versuch, Revision %d zu erzeugen"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 msgid "The -t option may only be used once"
 msgstr "Die Option „-t“ darf nur einmal angegeben werden"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1858
 msgid "The -T option may only be used once"
 msgstr "Die Option „-T“ darf nur einmal angegeben werden"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "beim Versuch, das Journalgerät %s zu öffnen\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1920
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
-msgstr ""
-"Die Blockgröße des Journalgeräts (%d) ist kleiner als die minimale "
-"Blockgröße %d\n"
+msgstr "Die Blockgröße des Journalgeräts (%d) ist kleiner als die minimale Blockgröße %d\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1926
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Die Blockgröße des Journalgerätes wird verwendet: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1937
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "ungültiger Block „%s“ auf Gerät „%s“"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "Dateisystem"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "beim Versuch, die Größe des Dateisystems zu bestimmen"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5888,7 +5856,7 @@ msgstr ""
 "Die Größe des Gerätes ist nicht feststellbar. Sie müssen die Größe\n"
 "des Dateisystems manuell angeben.\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5901,152 +5869,153 @@ msgstr ""
 "\tPartition vewendet wurde. Sie müssen unter Umständen den Rechner neu\n"
 "\tstarten, damit die Partitionstabelle neu eingelesen wird.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:2015
 msgid "Filesystem larger than apparent device size."
 msgstr "Das Dateisystem ist größer als als die Partition."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:2035
 msgid "Failed to parse fs types list\n"
 msgstr "Die Liste der Dateisystemtypen konnte nicht verarbeitet werden\n"
 
-#: misc/mke2fs.c:1999
-#, fuzzy
+#: misc/mke2fs.c:2085
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "Hurd unterstützt keine Dateitypen.\n"
 
-#: misc/mke2fs.c:2004
-#, fuzzy
+#: misc/mke2fs.c:2090
 msgid "The HURD does not support the huge_file feature.\n"
-msgstr "Hurd unterstützt keine Dateitypen.\n"
+msgstr "Hurd unterstützt die Eigenschaft huge_file nicht.\n"
 
-#: misc/mke2fs.c:2009
-#, fuzzy
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
-msgstr "Hurd unterstützt keine Dateitypen.\n"
+msgstr "Hurd unterstützt die Eigenschaft metadata_csum nicht.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2100
+#, fuzzy
+#| msgid "The HURD does not support the huge_file feature.\n"
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "Hurd unterstützt die Eigenschaft huge_file nicht.\n"
+
+#: misc/mke2fs.c:2110
 msgid "while trying to determine hardware sector size"
 msgstr "beim Versuch, die Hardware-Sektorgröße festzustellen"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2116
 msgid "while trying to determine physical sector size"
 msgstr "beim Versuch, die physische Sektorgröße festzustellen"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2148
 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:2062
+#: misc/mke2fs.c:2153
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
-msgstr ""
-"Warnung: die angegebene 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 angegebene Blockgröße %d ist kleiner als die physische Sektorgröße %d\n"
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2177
 #, 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 ""
-"%1$s: Die Größe des Gerätes %3$s (0x%2$llx Blöcke) kann bei einer "
-"Blockgröße\n"
-"\tvon %4$d kann mit 32 Bits nicht dargestellt werden.\n"
+"%1$s: Die Größe des Gerätes %3$s (0x%2$llx Blöcke) kann bei einer Blockgröße\n"
+"\tvon %4$d nicht mit 32 Bits dargestellt werden.\n"
 
-#: misc/mke2fs.c:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2191
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
-"%1$s: Die Größe des Gerätes %3$s (0x%2$llx Blöcke) kann bei einer "
-"Blockgröße\n"
-"\tvon %4$d kann mit 32 Bits nicht dargestellt werden.\n"
+"%1$s: Das Gerät %3$s ist zu groß (0x%2$llx Blöcke), um ein Dateisystem\n"
+"\tmit einer Blockgröße von %4$d darauf anzulegen.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "Dateisystemtypen für das Aufschlüsseln von mke2fs.conf: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 "Eigenschaften von Dateisystemen werden bei Revison-0-Dateisystemen nicht\n"
 "\tunterstützt\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2228
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 "Sparse-Superblöcke werden bei Revison-0-Dateisystemen nicht\n"
 "\tunterstützt\n"
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2238
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 "Journale werden bei Revison-0-Dateisystemen nicht\n"
 "\tunterstützt\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2251
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "Ungültiger Werte für Prozent reservierter Blöcke - %lf"
 
-#: misc/mke2fs.c:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
 msgstr ""
 "Erweiterungen MÜSSEN für 64-Bit-Dateisysteme aktiviert werden.\n"
 "\tGeben Sie „-O extents“ an, um dies zu tun.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "Die Clustergröße darf nicht kleiner als die Blockgröße sein.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "Die Angabe einer Clustergröße erfordert die Eigenschaft „bigalloc“."
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "Warnung: Die Geometrie des Gerätes „%s“ kann nicht bestimmt werden\n"
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2317
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "Die Ausrichtung von %s ist um %lu Bytes versetzt.\n"
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2319
 #, 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 ""
-"Dies könnte in sehr schlechter Leistung resultieren. Eine "
-"Neupartitionierung\n"
+"Dies könnte in sehr schlechter Leistung resultieren. Eine Neupartitionierung\n"
 "ist angeraten.\n"
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2340
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "Blöcke mit %d Bytes sind zu groß für das Gerät (max %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2344
 #, 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 ""
 "Warnung: Blöcke mit %d Bytes sind zu groß für das Gerät (max %d)\n"
 "\t Weiterverarbeitung wurde erzwungen\n"
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "Vorschlag: Verwenden Sie einen Linux kernel >= 3.18 für verbesserte Stabilität der Metadaten und Journalprüfsummen.\n"
+
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
 msgstr ""
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr ""
+
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -6055,12 +6024,35 @@ msgid ""
 "not be what you want.\n"
 "\n"
 msgstr ""
+"\n"
+"Warnung: Der Offset wurde ohne explizite Größe des Dateisystems angegeben.\n"
+"Es wird ein Dateisystem mit %llu Blöcken erzeugt, aber das könnte nicht das\n"
+"sein, was Sie wollen.\n"
+"\n"
+
+#: misc/mke2fs.c:2449
+#, fuzzy, c-format
+#| msgid "%d byte inodes are too small for project quota; specify larger size"
+msgid "%d byte inodes are too small for project quota"
+msgstr "%d Bytes große Inodes sind zu klein für Projektquotas; Geben Sie bitte eine höhere Größe an"
+
+#: misc/mke2fs.c:2465
+#, fuzzy
+#| msgid ""
+#| "The resize_inode and meta_bg features are not compatible.\n"
+#| "They can not be both enabled simultaneously.\n"
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"resize_inode und meta_bg sind nicht kompatibel und können\n"
+"daher nicht gleichzeitig aktiviert werden.\n"
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2480
 msgid "Can't support bigalloc feature without extents feature"
 msgstr "„Bigalloc“ ist nur mit „Extents“ möglich"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -6068,7 +6060,7 @@ msgstr ""
 "resize_inode und meta_bg sind nicht kompatibel und können\n"
 "daher nicht gleichzeitig aktiviert werden.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -6081,48 +6073,41 @@ msgstr ""
 "Informationen.\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "Reservierte Blöcke für die Online-Größenänderung werden auf Nicht-Sparse-\n"
 "Dateisystemen nicht unterstützt."
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2516
 msgid "blocks per group count out of range"
 msgstr "Die Anzahl der Blöcke pro Gruppe ist außerhalb des gültigen Bereichs."
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2538
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
-msgstr ""
-"Flex_bg ist nicht aktiviert, daher darf dafür auch keine Größe angegeben "
-"werden."
+msgstr "Flex_bg ist nicht aktiviert, daher darf dafür auch keine Größe angegeben werden."
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2550
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "unzulässige Inode-Größe %d (min %d/max %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
+msgstr "%d Bytes große Inodes sind zu klein für Inline-daten; Geben Sie bitte eine höhere Größe an"
 
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "zu wenige Inodes (%llu), Anzahl erhöhen?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2587
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "zu viele Inodes (%llu), geben Sie weniger als 2^32 Inodes an"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2601
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -6133,70 +6118,71 @@ msgstr ""
 "\tDateisystem mit %llu Blöcken, geben Sie ein höheres inode_ratio (-i)\n"
 "\tan oder eine niedrigere Anzahl Inodes (-N) an.\n"
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2788
 msgid "Discarding device blocks: "
 msgstr "Geräteblöcke werden verworfen: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 msgid "failed - "
 msgstr "gescheitert - "
 
-#: misc/mke2fs.c:2727
-#, fuzzy
+#: misc/mke2fs.c:2863
 msgid "while initializing quota context"
-msgstr "beim Initialisieren des ext2_qcow2_image"
+msgstr "beim Initialisieren des Quota-Kontextes"
 
-#: misc/mke2fs.c:2734
-#, fuzzy
+#: misc/mke2fs.c:2870
 msgid "while writing quota inodes"
-msgstr "beim Schreiben der Journal-Inodes"
+msgstr "beim Schreiben der Quota-Inodes"
 
-#: misc/mke2fs.c:2759
-#, fuzzy, c-format
+#: misc/mke2fs.c:2895
+#, c-format
 msgid "bad error behavior in profile - %s"
-msgstr "ungültiges Verhalten im Fehlerfall - %s"
+msgstr "ungültiges Verhalten im Fehlerfall im Profil - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2971
+#, fuzzy
+#| msgid "in malloc for bad_blocks_filename"
+msgid "in malloc for android_sparse_params"
+msgstr "in malloc für bad_blocks_filename"
+
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "beim Erstellen des Superblocks"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
-msgstr ""
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
+msgstr "Erweiteruingen wurden nicht aktiviert. Die Prüfsumme des Baums mit den Erweiterungen der Datei kann ermittelt werden, nicht aber das Verzeichnis der Blöcke. Wenn Erweiterungen nicht aktiviert werden, reduziert den Umfang dessen, was das Überprüfen der Metadaten-Prüfsummen abdecken kann. Geben Sie „-O extents” an, um dies zu beheben.\n"
 
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
-msgstr ""
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+msgstr "Die Unterstützung für 64-bittige Dateisysteme wurde nicht aktiviert. Die längeren Felder, die diese Eigenschaft benötigt erlauben die Erstellung der Prüfsumme in voller Stärke. Geben Sie „-O 64bit” an, um dies zu korrigieren.\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr ""
+#: misc/mke2fs.c:3016
+#, fuzzy
+#| msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "Die Eigenschaft metadata_csum_seed erfoprdert die Eigenschaft metadata_csum.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr ""
 "Verwerfen war erfolgreich und wird Nullen zurück liefern - daher wird\n"
 "das Löschen der Inode-Tabelle übersprungen\n"
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "unbekanntes Betriebssystem - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 msgid "Allocating group tables: "
 msgstr "beim Anfordern von Speicher für die Gruppentabellen: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr "beim Anfordern von Speicher für die Dateisystemtabellen"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6204,30 +6190,30 @@ msgstr ""
 "\n"
 "\tbeim Konvertieren der Subclusterbitmap"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
-msgstr ""
+msgstr "%s könnte durch das erneute Schreiben des Superblocks noch mehr beschädigt werden\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "beim Nullen von Block %llu am Ende des Dateisystems"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3279
 msgid "while reserving blocks for online resize"
 msgstr "beim Reservieren von Blöcken für die Online-Größenänderung"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "Journal"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Ein Journal wird auf Gerät %s hinzugefügt: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
@@ -6236,21 +6222,21 @@ msgstr ""
 "\n"
 "\tbeim Versuch, ein Journal auf Gerät %s hinzuzufügen"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "erledigt\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Die Erzeugung eines Journals wird im Nur-Super-Modus übersprungen\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Das Journal (%u Blöcke) wird angelegt: "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6258,7 +6244,7 @@ msgstr ""
 "\n"
 "\tbeim Anlegen des Journals"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
@@ -6266,39 +6252,34 @@ msgstr ""
 "\n"
 "Fehler beim Aktivieren des Schutzes gegen mehrfaches Einhängen"
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3357
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 "Der Schutz gegen mehrfaches Einhängen wurde aktiviert mit einem\n"
 "Aktualisierungsintervall von %d Sekunden.\n"
 
-#: misc/mke2fs.c:3210
-#, fuzzy
+#: misc/mke2fs.c:3373
 msgid "Copying files into the device: "
-msgstr "Fehler beim Schreiben der gepufferten Daten: %m\n"
+msgstr "Fehler beim Kopieren der Dateien auf das Laufwerk: "
 
-#: misc/mke2fs.c:3216
-#, fuzzy
+#: misc/mke2fs.c:3379
 msgid "while populating file system"
-msgstr "beim Anfordern von Speicher für die l1-Tabelle"
+msgstr "beim Befüllen des Dateisystems"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 "Die Superblöcke und die Informationen über die Dateisystemnutzung werden\n"
 "geschrieben: "
 
-#: misc/mke2fs.c:3230
+#: misc/mke2fs.c:3393
 #, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Es gab Schwierigkeiten beim Schreiben der Superblöcke."
+#| msgid "while zeroing block %llu at end of filesystem"
+msgid "while writing out and closing file system"
+msgstr "beim Nullen von Block %llu am Ende des Dateisystems"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6306,32 +6287,34 @@ msgstr ""
 "erledigt\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
-msgstr ""
+msgid "while zeroing block %llu for hugefile"
+msgstr "beim Nullen von Block %llu für riesige Datei"
+
+#: misc/mk_hugefiles.c:515
+#, c-format
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgstr "Der Abstand vom Partitionsanfang von %llu (%uk) Blöckenm ist inkompatibel mit der Clustergröße %u.\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
-msgstr ""
+msgstr "Riesige Dateien werden mit Nullen überschrieben\n"
 
-#: misc/mk_hugefiles.c:492
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:584
+#, c-format
 msgid "Creating %lu huge file(s) "
-msgstr "Die reguläre Datei %s wird angelegt\n"
+msgstr "%lu riesige Datei(en) werden angelegt "
 
-#: misc/mk_hugefiles.c:494
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:586
+#, c-format
 msgid "with %llu blocks each"
-msgstr ""
-"Warnung: %llu Blöcke unbenutzt.\n"
-"\n"
+msgstr ", jede mit %llu Blöcken"
 
-#: misc/mk_hugefiles.c:505
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:595
+#, c-format
 msgid "while creating huge file %lu"
-msgstr "beim Iterieren über Inode %u"
+msgstr "beim Iterieren über riesige Datei %lu"
 
 #: misc/mklost+found.c:50
 msgid "Usage: mklost+found\n"
@@ -6373,56 +6356,75 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   Start=%8d Größe=%8lu Ende=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "Bitte lassen Sie e2fsck dieses Dateisystem überprüfen.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Bitte lassen Sie e2fsck -f dieses Dateisystem überprüfen.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "Bitte lassen Sie e2fsck dieses Dateisystem überprüfen.\n"
+msgstr "Bitte lassen Sie e2fsck -fD dieses Dateisystem überprüfen.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, fuzzy, c-format
+#| msgid ""
+#| "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
+#| "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
+#| "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
+#| "\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
+#| "\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+#| "\t[-O [^]feature[,...]] [-Q quota_options]\n"
+#| "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+#| "\t[-I new_inode_size] [-z undo_file] device\n"
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
 msgstr ""
-"Aufruf: %s [-c max_Anzahl_Einhängungen] [-e Fehlerverhalten] [-g Gruppe]\n"
+"Aufruf: %s [-c max_Anzahl_Einhängungen] [-e Fehlerverhalten] [-f] [-g Gruppe]\n"
 "\t[-i Intervall[d|m|w]] [-j] [-J Journal_Optionen] [-l]\n"
-"\t[-m reservierte_Blöcke_Prozent] [-o [^]Einhängeoptionen[,...]] [-p "
-"mmp_Aktualisierungsintervall]\n"
-"\t[-r Anzahl_reservierter_Blöcke] [-u Benutzer] [-C Anzahl_Einhängungen] [-L "
-"Volume_Kennung]\n"
+"\t[-m reservierte_Blöcke_Prozent] [-o [^]Einhängeoptionen[…]] [-p mmp_Aktualisierungsintervall]\n"
+"\t[-r Anzahl_reservierter_Blöcke] [-u Benutzer] [-C Anzahl_Einhängungen] [-L Volume_Kennung]\n"
 "\t[-M letztes_eingehängtes_Verzeichnis] [-O [^]Eigenschaft[,...]]\n"
 "\t[-Q Quota-Optionen]\n"
-"\t[-E erweiterte_Optionen[,...]] [-T Zeitpunkt_letzter_Prüfung] [-U UUID]\n"
-"\t[ -I neue_Inodegröße ] Gerät\n"
+"\t[-E erweiterte_Optionen[]] [-T Zeitpunkt_letzter_Prüfung] [-U UUID]\n"
+"\t[ -I neue_Inodegröße ] [-z Undo_Datei] Gerät\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Der Journal-Superblock wurde nicht gefunden!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "beim Versuch, das externe Journal zu öffnen"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s ist kein Journalgerät.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, fuzzy, c-format
+#| msgid "The journal superblock is corrupt"
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr "Der Journal-Superblock ist defekt"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "Die UUID des Dateisystems wurde auf dem Journalgerät nicht gefunden.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6430,70 +6432,70 @@ msgstr ""
 "Das Journalgerät wurde nicht gefunden. Es wurde NICHT entfernt\n"
 "Bitte benutzen Sie die Option „-f“, um das fehlende Gerät zu entfernen.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "Das Journal wurde entfernt\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "beim Lesen der Bitmaps"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
 msgstr "beim Zurücksetzen der Journal-Inodes"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "beim Schreiben der Journal-Inodes"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(und starten Sie danach das System neu)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
-msgstr ""
+msgstr "Nachdem Sie e2fsck haben laufen lassen, starten Sie bitte „resize2fs %s %s"
 
-#: misc/tune2fs.c:479
-#, fuzzy, c-format
+#: misc/tune2fs.c:489
+#, c-format
 msgid "Please run `resize2fs %s %s"
-msgstr ""
-"Bitte lassen Sie zuerst „e2fsck -f %s“ laufen.\n"
-"\n"
+msgstr "Bitte starten Sie „resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
-msgstr ""
+msgstr " -z „%s”"
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:495
 #, c-format
 msgid "' to enable 64-bit mode.\n"
-msgstr ""
+msgstr "“, um den 64-Bit-Modus zu aktivieren.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:497
 #, c-format
 msgid "' to disable 64-bit mode.\n"
-msgstr ""
+msgstr "“, um den 64-Bit-Modus zu deaktivieren.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
+"WARNUNG: Unterstützung des Kernels für metadata_csum_seed konnte nicht festgestellt werden.\n"
+"  Dies erfordert Linux >= v4.4.\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Das Deaktivieren von „%s“ wird nicht unterstützt.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Das Aktivieren von „%s“ wird nicht unterstützt.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6501,7 +6503,7 @@ msgstr ""
 "Has_journal kann nur zurückgesetzt werden, wenn das Dateisystem nicht\n"
 "oder nur-lesbar eingehängt ist.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6509,7 +6511,7 @@ msgstr ""
 "needs_recovery ist gesetzt. Bitte führen Sie e2fsck aus, bevor Sie\n"
 "has_journal zurück setzen.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
@@ -6517,7 +6519,7 @@ msgstr ""
 "Das Setzen von „sparse_super“ wird auf Dateisystemen mit aktiviertem\n"
 "„meta_bg“ nicht unterstützt.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6526,15 +6528,14 @@ msgstr ""
 "Der Schutz vor mehrfachem Einhängen kann nur aktiviert werden, wenn das\n"
 "Dateisystem nicht oder nur-lesbar eingehängt ist.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1143
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
-"Der Schutz vor mehrfachem Einhängen wurde mit einem "
-"Aktualisierungsintervall\n"
+"Der Schutz vor mehrfachem Einhängen wurde mit einem Aktualisierungsintervall\n"
 "von %d Sekunden aktiviert.\n"
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6543,28 +6544,26 @@ msgstr ""
 "deaktiviert werden, wenn das Dateisystem nur-lesbar\n"
 "eingehängt ist.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 msgid "Error while reading bitmaps\n"
 msgstr "Fehler beim Lesen der Bitmaps\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, 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, gefunden: %x\n"
+msgstr "Die magische Zahl im MMP-Block passt nicht. Erwartet: %x, gefunden: %x\n"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1174
 msgid "while reading MMP block."
 msgstr "beim Lesen des MMP-Blocks."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
-msgstr ""
-"Das Deaktivieren von flex_bg würde das Dateisystem inkonsistent machen.\n"
+msgstr "Das Deaktivieren von flex_bg würde das Dateisystem inkonsistent machen.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6572,53 +6571,46 @@ msgstr ""
 "huge_file kann nur aktiviert werden, wenn das Dateisystem nicht\n"
 "oder nur-lesbar eingehängt ist.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
-msgstr ""
+msgstr "Das aktivieren von Prüfsummen könnte etwas länger dauern."
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
-msgstr ""
+msgstr "metadata_csum kann auf einem eingehängten Dateisystem nicht aktiviert werden!\n"
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
-msgstr ""
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
+msgstr "Erweiterungen sind nicht aktiviert. Prüfsummen für den Baum der Dateierweiterungen können geprüft werden, nicht aber die für Blockmaps. Erweiterungen nicht zu aktivieren reduziert den Schutz von Metadaten-Prüfsummen. Starten Sie erneut mit „-O extent” um dies zu korrigieren.\n"
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
-msgstr ""
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
+msgstr "Unterstützung für 64-Bit-Dateisysteme ist nbicht aktiviert. Diese Eigenschaft ermöglicht größere Felder und damit maximal starke Prüfsummen. Starten Sie „resize2fs -b” aktivieren.\n"
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
-msgstr ""
+msgstr "Das deaktivieren von Prüfsummen könnte einige Zeit in Anspruch nehman."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
-msgstr ""
+msgstr "Metadata_csum kann auf einem eingehängten Dateisystem nicht aktiviert werden!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
-msgstr ""
+msgstr "Der 64-Bit-Modus kann auf einem eingehängten Dateisystem nicht aktiviert werden!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
-msgstr ""
+msgstr "Der 64-Bit-Modus kann auf einem eingehängten Dateisystem nicht deaktiviert werden!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6626,27 +6618,44 @@ msgstr ""
 "\n"
 "Warnung: die Option „^quota“ hat Vorrang vor „-Q“-Argumenten.\n"
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1405
 #, fuzzy
+#| msgid ""
+#| "Changing the inode size not supported for filesystems with the flex_bg\n"
+#| "feature enabled.\n"
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr ""
+"Das Ändern der Inode-Größe auf Dateisystemen mit aktiviertem flex_bg\n"
+"wird nicht unterstützt.\n"
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
 msgstr ""
-"Das Setzen von „sparse_super“ wird auf Dateisystemen mit aktiviertem\n"
-"„meta_bg“ nicht unterstützt.\n"
+"Das Setzen von „metadata_csum_seed“ wird nur auf Dateisystemen mit\n"
+"aktivierter Eigenschaft metadata_csum unterstützt.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
+"Die UUID hat sich seit dem aktivieren von metadata_csum geändert. Das Dateisystem\n"
+"muss ausgehängt werden, um alle Metadaten in sicherer Form neu so zu schreiben,\n"
+" dass sie zur neuen UUIDS passen.\n"
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1443
+#, fuzzy
+#| msgid "Enabling checksums could take some time."
+msgid "Recalculating checksums could take some time."
+msgstr "Das aktivieren von Prüfsummen könnte etwas länger dauern."
+
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "Das Dateisystem hat bereits ein Journal.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, c-format
 msgid ""
 "\n"
@@ -6655,21 +6664,21 @@ msgstr ""
 "\n"
 "\tbeim Versuch, das Journal auf %s zu öffnen\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Journal wird erzeugt auf Gerät %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "beim Hinzufügen des Dateisystems zum Journal auf %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "Journal-Inodes werden erzeugt: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6677,34 +6686,36 @@ msgstr ""
 "\n"
 "\tbeim Versuch, die Journaldatei zu erzeugen"
 
-#: misc/tune2fs.c:1498
-#, fuzzy
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1588
 msgid "while initializing quota context in support library"
-msgstr "beim Initialisieren des Journal-Superblocks"
+msgstr "beim Initialisieren des Quota=Kontextes in der unterstützenden Bibliothek"
 
-#: misc/tune2fs.c:1518
-#, fuzzy, c-format
+#: misc/tune2fs.c:1603
+#, c-format
 msgid "while updating quota limits (%d)"
-msgstr "beim Updaten des „Bad Block“-Inodes"
+msgstr "beim Aktualisieren der Quota-Beschränkungen (%d)"
 
-#: misc/tune2fs.c:1526
-#, fuzzy, c-format
+#: misc/tune2fs.c:1611
+#, c-format
 msgid "while writing quota file (%d)"
-msgstr "beim Schreiben der Inode-Tabelle"
+msgstr "beim Schreiben der Quota-Datei (%d)"
 
-#: misc/tune2fs.c:1534
-#, fuzzy, c-format
+#: misc/tune2fs.c:1629
+#, c-format
 msgid "while removing quota file (%d)"
-msgstr "beim Lesen des Root-Inodes"
+msgstr "beim Enfernen der Quota-Datei (%d)"
 
-#: misc/tune2fs.c:1575
-#, fuzzy
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6716,74 +6727,74 @@ msgstr ""
 "\n"
 "Die folgenden gültigen Quotaoptionen sind verfügbar (durch Kommata getrennt\n"
 "angeben):\n"
-"\t[^]usrquota\n"
-"\t[^]grpquota\n"
+"\t[^]usr[quota]\n"
+"\t[^]grp[quota]\n"
+"\t[^]prj[quota]\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Die Angabe von Zeit/Datum war unverständlich: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "ungültge Anzahl Einhängungen - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "ungültige Gruppen-ID/Gruppe - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "ungültiges Intervall - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "ungültiges Verhältnis reservierter Blöcke - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
 msgid "-o may only be specified once"
 msgstr "-o darf nur einmal angegeben werden"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
 msgid "-O may only be specified once"
 msgstr "-O darf nur einmal angegeben werden"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "ungültige Anzahl reservierter Blöcke - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "falsche Benutzer-ID/Benutzername - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "ungültige Inode-Größe - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Die Inode-Größe muss eine Zweierpotenz sein - %s"
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "mmp_update_interval ist zu groß: %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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] ""
 "Das Aktualisierungsintervall des Schutzes vor mehrfachem Einhängen\n"
 "wird auf %lu Sekunde gesetzt\n"
@@ -6791,27 +6802,49 @@ msgstr[1] ""
 "Das Aktualisierungsintervall des Schutzes vor mehrfachem Einhängen\n"
 "wird auf %lu Sekunden gesetzt\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2078
+#, fuzzy, c-format
+#| msgid "Setting filesystem feature '%s' not supported.\n"
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "Das Aktivieren von „%s“ wird nicht unterstützt.\n"
+
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Ungültiger RAID-Stride: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Ungültiger Stripebreite-Parameter: %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2126
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Ungültiger Hash-Algorithmus: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2132
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Der Standard-Hash-Algorithmus wird auf %s (%d) gesetzt\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2151
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "Bad options specified.\n"
+#| "\n"
+#| "Extended options are separated by commas, and may take an argument which\n"
+#| "\tis set off by an equals ('=') sign.\n"
+#| "\n"
+#| "Valid extended options are:\n"
+#| "\tclear_mmp\n"
+#| "\thash_alg=<hash algorithm>\n"
+#| "\tmount_opts=<extended default mount options>\n"
+#| "\tstride=<RAID per-disk chunk size in blocks>\n"
+#| "\tstripe_width=<RAID stride*data disks in blocks>\n"
+#| "\ttest_fs\n"
+#| "\t^test_fs\n"
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6823,8 +6856,10 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -6844,34 +6879,31 @@ msgstr ""
 "\t^test_fs\n"
 "\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 msgid "Failed to read inode bitmap\n"
 msgstr "Die Inode-Bitmap konnte nicht gelesen werden\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 msgid "Failed to read block bitmap\n"
 msgstr "Die Block-Bitmap konnte nicht gelesen werden\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "zu verschiebende Blöcke"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 msgid "Failed to allocate block bitmap when increasing inode size\n"
-msgstr ""
-"Beim Erhöhen der Inode-Größe konnte keine Blockbitmap reserviert werden\n"
+msgstr "Beim Erhöhen der Inode-Größe konnte keine Blockbitmap reserviert werden\n"
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2653
 msgid "Not enough space to increase inode size \n"
 msgstr "Der Platz reicht nicht aus für eine Erhöhung der Inode-Größe \n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2658
 msgid "Failed to relocate blocks during inode resize \n"
-msgstr ""
-"Das Verschieben von Blöcken während der Größenänderung der Inodes "
-"scheiterte \n"
+msgstr "Das Verschieben von Blöcken während der Größenänderung der Inodes scheiterte \n"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6879,7 +6911,16 @@ msgstr ""
 "Fehler beim Ändern der Inode-Größe.\n"
 "Starten Sie e2undo, um die Änderungen am Dateisystem rückgängig zu machen. \n"
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2900
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+"Wenn Sie sicher sind, dass das Dateisystem auf keinem Knoten benutzt wird,\n"
+"führen Sie bitte Folgendes aus:\n"
+"„tune2fs -f -E clear_mmp {device}“\n"
+
+#: misc/tune2fs.c:2907
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
@@ -6889,77 +6930,96 @@ msgstr ""
 "„e2fsck -f %s“\n"
 "zu beheben.\n"
 
-#: misc/tune2fs.c:2811
-#, fuzzy
+#: misc/tune2fs.c:2919
 msgid "Cannot modify a journal device.\n"
-msgstr "%s ist kein Journalgerät.\n"
+msgstr "Ein Journalgerät kann nicht modifiziert werden.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Die Inode-Größe ist bereits %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 msgid "Shrinking inode size is not supported\n"
 msgstr "Das Verringern der Inode-Größe wird nicht unterstützt\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "Unzulässige Inode-Größe: %lu (max %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
+msgstr "Die Änderung der Inodegröße kann einige Zeit dauern."
+
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
 msgstr ""
+"Warnung: Das Journal ist inkonsistent. Sie sollten das Journal noch einmal mittels:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"abarbeiten lassen und dann diesen Befehl noch einaml laufen lassen. Ansonsten\n"
+"werden alle Änderungen durch das wiederherstellen des Journals überschrieben.\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Das Journal wird wiederhergestellt.\n"
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3028
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Die maximale Anzahl von Einhängungen wird auf %d gesezt\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3034
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Die Anzahl der Einhängungen wird auf %d gesetzt\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Das Fehlerverhalten wird auf %d gesetzt\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Die Gruppen-ID reservierter Blöcke wird auf %lu gesetzt\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3049
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "Der Abstand zwischen zwei Prüfläufen ist zu groß (%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3056
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Der Abstand zwischen den Prüfläufen wird auf %lu Sekunden gesetzt\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
-msgstr ""
-"Der prozentuelle Anteil reservierter Blöcke wird auf %g%% (%llu Blöcke) "
-"gesetzt\n"
+msgstr "Der prozentuelle Anteil reservierter Blöcke wird auf %g%% (%llu Blöcke) gesetzt\n"
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "Die Anzahl reservierter Blöcke ist zu groß (%llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3076
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Die Anzahl reservierter Blöcke wird auf %llu gesetzt\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3081
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6967,18 +7027,17 @@ msgstr ""
 "\n"
 "Das Dateisystem hat bereits Sparse-Superblöcke.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 "\n"
-"Das Aktivieren von Sparse-Superblöcken wird auf Dateisystemen mit "
-"aktivierter\n"
+"Das Aktivieren von Sparse-Superblöcken wird auf Dateisystemen mit aktivierter\n"
 "Eigenschaft meta_bg nicht unterstützt.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
@@ -6987,7 +7046,7 @@ msgstr ""
 "\n"
 "Kennung „Sparse-Superblöcke“ ist gesetzt. %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6995,58 +7054,51 @@ msgstr ""
 "\n"
 "Das Zurücksetzen der Kennung „Sparse-Superblöcke“ wird nicht unterstützt.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
-msgstr ""
-"Der Zeitpunkt der letzten Prüfung des Dateisystems wird auf %s gesetzt\n"
+msgstr "Der Zeitpunkt der letzten Prüfung des Dateisystems wird auf %s gesetzt\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3113
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Die Benutzer-ID reservierter Blöcke wird auf %lu gesetzt\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3145
 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 benutzt "
-"werden\n"
+msgstr "Fehler bei der Verwendung von clear_mmp. Es muss zusammen mit -f benutzt werden\n"
 
-#: misc/tune2fs.c:3024
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"Quotas können nur bei nicht eingehängten Dateisystemen geändert werden.\n"
+#: misc/tune2fs.c:3163
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
+msgstr "Quotas können nur bei nicht eingehängten Dateisystemen geändert werden.\n"
 
-#: misc/tune2fs.c:3048
-msgid "The UUID may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"Die UUID kann nur bei nicht eingehängtem Dateisystem geändert werden.\n"
+#: misc/tune2fs.c:3181
+#, fuzzy
+#| msgid "Setting UUID on a checksummed filesystem could take some time."
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "Das Setzen einer UUID auf einem durch Prüfsummen geschtzten Dateisysten kann einige Zeit dauern."
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
-msgstr ""
+#: misc/tune2fs.c:3196
+msgid "The UUID may only be changed when the filesystem is unmounted.\n"
+msgstr "Die UUID kann nur bei nicht eingehängtem Dateisystem geändert werden.\n"
 
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr ""
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
+msgstr "We Sie nur Kernel verwenden, die neuer al v4.4 sind, starten Sie „tune2fs -O metadata_csum_seed” und danach diesen Befehl noch einmal.\n"
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "Ungültiges UUID-Format\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 msgid "Need to update journal superblock.\n"
 msgstr "Der Journal-Superblock muss aktualisiert werden.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"Die Inode-Größe kann nur bei ausgehängtem Dateisystem geändert werden.\n"
+msgstr "Die Inode-Größe kann nur bei ausgehängtem Dateisystem geändert werden.\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3274
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -7054,80 +7106,62 @@ msgstr ""
 "Das Ändern der Inode-Größe auf Dateisystemen mit aktiviertem flex_bg\n"
 "wird nicht unterstützt.\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Die Inode-Größe wird auf %lu gesetzt\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 msgid "Failed to change inode size\n"
 msgstr "Die Inode-Größe konnte nicht geändert werden\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Die Stride-Größe wird auf %d gesetzt\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Die Stripebreite wird auf %d gesetzt\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3322
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Die erweiterten Standard-Einhängeoptionen werden auf „%s“ gesetzt\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, fuzzy, c-format
-msgid "Recovering journal.\n"
-msgstr "%s: Journal wird wiederhergestellt\n"
-
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr "<Verarbeitung läuft\n"
 
-#: misc/util.c:104
+#: misc/util.c:105
 #, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
+#| msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
 msgstr "Trotzdem fortfahren (oder %d Sekunden warten) ? (j,n) "
 
-#: misc/util.c:108
-#, fuzzy
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
 msgstr "Trotzdem fortfahren? (j,n) "
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
-msgstr ""
-"mke2fs wird trotzdem erzwungen. Hoffentlich ist /etc/mtab nicht korrekt.\n"
+msgstr "mke2fs wird trotzdem erzwungen. Hoffentlich ist /etc/mtab nicht korrekt.\n"
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr "%s wird hier nicht angelegt!\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr "mke2fs wird trotzdem erzwungen.\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
-msgstr ""
-"Es konnte kein Speicher zum Einlesen der Journaloptionen reserviert werden!\n"
+msgstr "Es konnte kein Speicher zum Einlesen der Journaloptionen reserviert werden!\n"
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
@@ -7136,7 +7170,7 @@ msgstr ""
 "\n"
 "Ein zu %s passendes Journalgerät konnte nicht gefunden werden\n"
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -7167,7 +7201,7 @@ msgstr ""
 "\tliegen.\n"
 "\n"
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
@@ -7175,7 +7209,7 @@ msgstr ""
 "\n"
 "Das Dateisystem ist für ein Journal zu klein\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -7186,7 +7220,7 @@ msgstr ""
 "Die gewünschte Journalgröße ist %d Blöcke; sie muss\n"
 "zwischen 1024 und 10240000 Blöcken liegen. Abbruch.\n"
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
@@ -7194,7 +7228,7 @@ msgstr ""
 "\n"
 "Das Journal ist für dieses Dateisystem zu groß.\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
@@ -7324,8 +7358,7 @@ msgstr "Unerwartete Antwortlänge von Server %d\n"
 #: misc/uuidd.c:586
 #, c-format
 msgid "Couldn't kill uuidd running at pid %d: %s\n"
-msgstr ""
-"Der mit Prozess-ID %d laufende uuidd konnte nicht abgeschossen werden: %s\n"
+msgstr "Der mit Prozess-ID %d laufende uuidd konnte nicht abgeschossen werden: %s\n"
 
 #: misc/uuidd.c:592
 #, c-format
@@ -7348,44 +7381,46 @@ msgstr "#\tAnz=%llu, Größe=%llu, Cursor=%llu, Sortiert=%llu\n"
 
 #: resize/main.c:49
 #, fuzzy, c-format
+#| msgid ""
+#| "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-z undo_file]\n"
+#| "\n"
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
-"Aufruf: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] Gerät [neue_Größe]\n"
+"Aufruf: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] Gerät [-b|-s|neue_Größe] [-z Undo-Datei]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Die Inode-Tabelle wird erweitert"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Blöcke werden verschoben"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Die Inode-Tabelle wird gelesen"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Die Inode-Referenzen werden aktualisiert"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Die Inode-Tabelle wird verschoben"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Unbekannter Durchgang?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Start von Durchgang %d (max = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7393,22 +7428,21 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Die Größenveränderung von Bigalloc-Dateisystemen wurde noch nicht "
-"vollständig\n"
+"Die Größenveränderung von Bigalloc-Dateisystemen wurde noch nicht vollständig\n"
 "geprüft. Deswegen handeln Sie auf eigene Gefahr!. Verwenden Sie die Option\n"
 "„force“, wenn Sie trotzdem fortfahren wollen.\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "beim Öffnen von %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "beim Abfragen der Statusinformation für %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7417,30 +7451,30 @@ msgstr ""
 "Bitte lassen Sie zuerst „e2fsck -f %s“ laufen.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Geschätzte minimale Größe des Dateisystems: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Unzulässige neue Größe: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "Die neue Größe lässt sich nicht mehr mit 32 Bits ausdrücken\n"
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, 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:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Ungültige „Stride“-Länge"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7450,33 +7484,28 @@ msgstr ""
 "Die sie enthaltende Partition (oder Gerät) ist nur %llu (%dk) Blöcke groß.\n"
 "Sie wollen %llu Blöcke haben.\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
-msgstr ""
-
-#: resize/main.c:569
-#, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
-msgstr ""
+msgstr "Die 64Bit-Eigenschaft kann weder gesetzt noch zurückgesetzt werden.\n"
 
 #: resize/main.c:575
-#, fuzzy, c-format
-msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
-msgstr ""
-"Quotas können nur bei nicht eingehängten Dateisystemen geändert werden.\n"
+#, c-format
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
+msgstr "Die 64Bit-Eigenschaft kann auf einem Dateisystem, das größer als 2^32 Blöcke ist, nicht geändert werden.\n"
 
 #: resize/main.c:581
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
-msgstr ""
+msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
+msgstr "Die 64-Bit-Eigenschaft kann nur bei nicht eingehängten Dateisystemen geändert werden.\n"
 
 #: resize/main.c:587
 #, c-format
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
+msgstr "Bitte aktivieren sie Erweiterungen mit tune2fs, bevor sie 64-Bit aktivieren.\n"
+
+#: resize/main.c:593
+#, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
@@ -7484,40 +7513,37 @@ msgstr ""
 "Das Dateisystem ist bereits %llu (%dk) Blöcke lang. Nichts zu tun!\n"
 "\n"
 
-#: resize/main.c:594
-#, fuzzy, c-format
+#: resize/main.c:600
+#, c-format
 msgid "The filesystem is already 64-bit.\n"
-msgstr "Das Dateisystem hat bereits ein Journal.\n"
+msgstr "Das Dateisystem ist bereits 64-bittig.\n"
 
-#: resize/main.c:599
-#, fuzzy, c-format
+#: resize/main.c:605
+#, c-format
 msgid "The filesystem is already 32-bit.\n"
-msgstr "Das Dateisystem hat bereits ein Journal.\n"
+msgstr "Das Dateisystem ist bereits 32-bittig.\n"
 
-#: resize/main.c:608
-#, fuzzy, c-format
+#: resize/main.c:613
+#, c-format
 msgid "Converting the filesystem to 64-bit.\n"
-msgstr ""
-"Der Zeitpunkt der letzten Prüfung des Dateisystems wird auf %s gesetzt\n"
+msgstr "Das Dateisystem wird auf 64-bittig konvertiert.\n"
 
-#: resize/main.c:610
-#, fuzzy, c-format
+#: resize/main.c:615
+#, c-format
 msgid "Converting the filesystem to 32-bit.\n"
-msgstr ""
-"Der Zeitpunkt der letzten Prüfung des Dateisystems wird auf %s gesetzt\n"
+msgstr "Das Dateisystem wird auf 32-bittig konvertiert.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
-msgstr ""
-"Die Größe des Dateisystems auf %s wird auf %llu (%dk) Blöcke geändert.\n"
+msgstr "Die Größe des Dateisystems auf %s wird auf %llu (%dk) Blöcke geändert.\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "beim Versuch, die Größe von %s zu ändern"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7527,7 +7553,7 @@ msgstr ""
 "Dateisystem nach der abgebrochenen Größenänderung\n"
 "zu reparieren.\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7536,15 +7562,14 @@ msgstr ""
 "Das Dateisystem auf %s is nun %llu (%dk) Blöcke lang.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "beim Versuch, %s abzuschneiden"
 
 #: resize/online.c:81
 msgid "kernel does not support online resize with sparse_super2"
-msgstr ""
-"Der Kernel unterstützt die Online-Größenänderung mit sparse_super2 nicht"
+msgstr "Der Kernel unterstützt die Online-Größenänderung mit sparse_super2 nicht"
 
 #: resize/online.c:86
 #, c-format
@@ -7602,53 +7627,53 @@ msgstr "Die Größe von %s wird gerade online auf %llu (%dk) Blöcke geändert.\
 msgid "While trying to extend the last group"
 msgstr "beim Versuch, die letzte Gruppe zu erweitern"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "beim Versuch, die Gruppe #%d hinzuzufügen"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, 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 ""
 "Das Dateisystem bei %s ist auf %s eingehängt und die Änderung der Größe im\n"
 "laufenden System wird auf diesem System nicht unterstützt.\n"
 
 #: resize/resize2fs.c:759
-#, c-format
-msgid "inodes (%llu) must be less than %u"
+#, fuzzy, c-format
+#| msgid "inodes (%llu) must be less than %u"
+msgid "inodes (%llu) must be less than %u\n"
 msgstr "Die Inodes (%llu) müssen unter %u liegen"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "reservierte Blöcke"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "Metadaten-Blöcke"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr "neue Metadaten-Blöcke"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr "Dies sollte nie geschehen! Kein sb im letzten super_sparse bg?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr "Dies sollte nie geschehen! Unerwartete old_desc in super_sparse bg?\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Dies sollte nie geschehen: Der Größenänderungs-Inode ist defekt!\n"
 
 #: lib/ext2fs/ext2_err.c:11
 #, fuzzy
-msgid "EXT2FS Library version 1.43.4-WIP"
-msgstr "EXT2FS-Bibliothek, Version 1.42.12"
+#| msgid "EXT2FS Library version 1.43.5"
+msgid "EXT2FS Library version 1.45.3"
+msgstr "EXT2FS-Bibliothek, Version 1.43.5"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -7696,8 +7721,7 @@ msgstr "Falsche magische Zahl für eine test-io_channel-Struktur"
 
 #: lib/ext2fs/ext2_err.c:23
 msgid "Wrong magic number for directory block list structure"
-msgstr ""
-"Falsche magische Zahl für eine Struktur für die Liste der Verzeichnisblöcke"
+msgstr "Falsche magische Zahl für eine Struktur für die Liste der Verzeichnisblöcke"
 
 #: lib/ext2fs/ext2_err.c:24
 msgid "Wrong magic number for icount structure"
@@ -7733,8 +7757,7 @@ msgstr "Die Dateisystemversion ist zu hoch"
 
 #: lib/ext2fs/ext2_err.c:32
 msgid "Attempt to write to filesystem opened read-only"
-msgstr ""
-"Dies ist ein Versuch, auf ein nur-lesbar geöffnetes Dateisystem zu schreiben"
+msgstr "Dies ist ein Versuch, auf ein nur-lesbar geöffnetes Dateisystem zu schreiben"
 
 #: lib/ext2fs/ext2_err.c:33
 msgid "Can't read group descriptors"
@@ -7794,14 +7817,11 @@ msgstr "Das Ext2-Verzeichnis ist defekt"
 
 #: lib/ext2fs/ext2_err.c:47
 msgid "Attempt to read block from filesystem resulted in short read"
-msgstr ""
-"Der Versuch, einen Block vom Dateisystem zu lesen, endete in kurzem Lesen"
+msgstr "Der Versuch, einen Block vom Dateisystem zu lesen, endete in kurzem Lesen"
 
 #: lib/ext2fs/ext2_err.c:48
 msgid "Attempt to write block to filesystem resulted in short write"
-msgstr ""
-"Der Versuch, einen Block auf das Dateisystem zu schreiben, endete in kurzem "
-"Schreiben"
+msgstr "Der Versuch, einen Block auf das Dateisystem zu schreiben, endete in kurzem Schreiben"
 
 #: lib/ext2fs/ext2_err.c:49
 msgid "No free space in the directory"
@@ -7833,33 +7853,27 @@ msgstr "Nicht genug Platz, um das vorgeschlagene Dateisystem zu bauen"
 
 #: lib/ext2fs/ext2_err.c:56
 msgid "Illegal block number passed to ext2fs_mark_block_bitmap"
-msgstr ""
-"Es wurde eine ungültige Blocknummer an ext2fs_mark_block_bitmap übergeben"
+msgstr "Es wurde eine ungültige Blocknummer an ext2fs_mark_block_bitmap übergeben"
 
 #: lib/ext2fs/ext2_err.c:57
 msgid "Illegal block number passed to ext2fs_unmark_block_bitmap"
-msgstr ""
-"Es wurde eine ungültige Blocknummer an ext2fs_unmark_block_bitmap übergeben"
+msgstr "Es wurde eine ungültige Blocknummer an ext2fs_unmark_block_bitmap übergeben"
 
 #: lib/ext2fs/ext2_err.c:58
 msgid "Illegal block number passed to ext2fs_test_block_bitmap"
-msgstr ""
-"Es wurde eine ungültige Blocknummer an ext2fs_test_block_bitmap übergeben"
+msgstr "Es wurde eine ungültige Blocknummer an ext2fs_test_block_bitmap übergeben"
 
 #: lib/ext2fs/ext2_err.c:59
 msgid "Illegal inode number passed to ext2fs_mark_inode_bitmap"
-msgstr ""
-"Es wurde eine ungültige Inode-Nummer an ext2fs_mark_inode_bitmap übergeben"
+msgstr "Es wurde eine ungültige Inode-Nummer an ext2fs_mark_inode_bitmap übergeben"
 
 #: lib/ext2fs/ext2_err.c:60
 msgid "Illegal inode number passed to ext2fs_unmark_inode_bitmap"
-msgstr ""
-"Es wurde eine ungültige Inode-Nummer an ext2fs_unmark_inode_bitmap übergeben"
+msgstr "Es wurde eine ungültige Inode-Nummer an ext2fs_unmark_inode_bitmap übergeben"
 
 #: lib/ext2fs/ext2_err.c:61
 msgid "Illegal inode number passed to ext2fs_test_inode_bitmap"
-msgstr ""
-"Es wurde eine ungültige Inode-Nummer an ext2fs_test_inode_bitmap übergeben"
+msgstr "Es wurde eine ungültige Inode-Nummer an ext2fs_test_inode_bitmap übergeben"
 
 #: lib/ext2fs/ext2_err.c:62
 msgid "Attempt to fudge end of block bitmap past the real end"
@@ -7907,21 +7921,15 @@ msgstr "Der Ext2-Superblock ist defekt"
 
 #: lib/ext2fs/ext2_err.c:72
 msgid "Illegal generic bit number passed to ext2fs_mark_generic_bitmap"
-msgstr ""
-"Eine unzulässige generische Bitnummer wurde an ext2fs_mark_generic_bitmap "
-"übergeben"
+msgstr "Eine unzulässige generische Bitnummer wurde an ext2fs_mark_generic_bitmap übergeben"
 
 #: lib/ext2fs/ext2_err.c:73
 msgid "Illegal generic bit number passed to ext2fs_unmark_generic_bitmap"
-msgstr ""
-"Eine unzulässige generische Bitnummer wurde an ext2fs_unmark_generic_bitmap "
-"übergeben"
+msgstr "Eine unzulässige generische Bitnummer wurde an ext2fs_unmark_generic_bitmap übergeben"
 
 #: lib/ext2fs/ext2_err.c:74
 msgid "Illegal generic bit number passed to ext2fs_test_generic_bitmap"
-msgstr ""
-"Eine unzulässige generische Bitnummer wurde an ext2fs_test_generic_bitmap "
-"übergeben"
+msgstr "Eine unzulässige generische Bitnummer wurde an ext2fs_test_generic_bitmap übergeben"
 
 #: lib/ext2fs/ext2_err.c:75
 msgid "Too many symbolic links encountered."
@@ -8033,8 +8041,7 @@ msgstr "Die Nummer des Blocks für erweiterte Attribute ist unzulässig"
 
 #: lib/ext2fs/ext2_err.c:102
 msgid "Cannot create filesystem with requested number of inodes"
-msgstr ""
-"Ein Dateisystem mit der gewünschten Anzahl Inodes kann nicht erzeugt werden"
+msgstr "Ein Dateisystem mit der gewünschten Anzahl Inodes kann nicht erzeugt werden"
 
 #: lib/ext2fs/ext2_err.c:103
 msgid "E2image snapshot not in use"
@@ -8050,9 +8057,7 @@ msgstr "Der Größenänderungs-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-Bitmap mit fehlendem indirektem Block zu "
-"schreiben"
+msgstr "Es wurde versucht, eine Block-Bitmap mit fehlendem indirektem Block zu schreiben"
 
 #: lib/ext2fs/ext2_err.c:107
 msgid "TDB: Success"
@@ -8101,8 +8106,7 @@ msgstr "Die Liste der Ext2fs-Verzeichnisblöcke 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, eine Blockzuweisung über einen nur-lesbaren Blockiterator "
-"zu\n"
+"Es wird versucht, eine Blockzuweisung über einen nur-lesbaren Blockiterator zu\n"
 "ändern"
 
 #: lib/ext2fs/ext2_err.c:119
@@ -8220,8 +8224,7 @@ msgstr "Der EA-Kanal unterstützt keine 64-Bit-Blocknummern"
 #: lib/ext2fs/ext2_err.c:147
 msgid "Can't check if filesystem is mounted due to missing mtab file"
 msgstr ""
-"Wegen des Fehlens von /etc/mtab kann nicht geprüft werden, ob das "
-"Dateisystem\n"
+"Wegen des Fehlens von /etc/mtab kann nicht geprüft werden, ob das Dateisystem\n"
 "eingehängt ist"
 
 #: lib/ext2fs/ext2_err.c:148
@@ -8237,7 +8240,9 @@ msgid "MMP: device currently active"
 msgstr "MMP: das Gerät ist derzeit aktiv"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
+#, fuzzy
+#| msgid "MMP: fsck being run"
+msgid "MMP: e2fsck being run"
 msgstr "MMP: fsck läuft derzeit"
 
 #: lib/ext2fs/ext2_err.c:152
@@ -8293,7 +8298,9 @@ msgid "Unknown checksum algorithm"
 msgstr "Unbekannter Prüfsummenalgorithmus"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
+#, fuzzy
+#| msgid "MMP block checksum does not match MMP block"
+msgid "MMP block checksum does not match"
 msgstr "Die Prüfsumme des MMP-Blocks passt nicht dazu"
 
 #: lib/ext2fs/ext2_err.c:166
@@ -8301,104 +8308,96 @@ msgid "Ext2 file already exists"
 msgstr "Die Ext2-Datei existiert bereits"
 
 #: lib/ext2fs/ext2_err.c:167
-#, fuzzy
 msgid "Block bitmap checksum does not match bitmap"
-msgstr "Die Prüfsumme der Inode-Bitmap passt nicht zur Bitmap"
+msgstr "Die Prüfsumme der Block-Bitmap passt nicht zur Bitmap"
 
 #: lib/ext2fs/ext2_err.c:168
 msgid "Cannot iterate data blocks of an inode containing inline data"
-msgstr ""
+msgstr "Iterieren von Datenblöcken eines Inodes, das Inlinedaten enthält, ist nicht möglich"
 
 #: lib/ext2fs/ext2_err.c:169
 msgid "Extended attribute has an invalid name length"
-msgstr ""
+msgstr "Das erweiterte Attribut hat eine ungültige Namenslänge"
 
 #: lib/ext2fs/ext2_err.c:170
 msgid "Extended attribute has an invalid value length"
-msgstr ""
+msgstr "Das erweiterte Attribut hat eine ungültige Wertlänge"
 
 #: lib/ext2fs/ext2_err.c:171
-#, fuzzy
 msgid "Extended attribute has an incorrect hash"
-msgstr "Die Prüfsumme des Blocks für erweiterte Attribute passt nicht dazu"
+msgstr "Das erweiterte Attribut hat einen ungültigen Hashwert"
 
 #: lib/ext2fs/ext2_err.c:172
-#, fuzzy
 msgid "Extended attribute block has a bad header"
-msgstr "Die Nummer des Blocks für erweiterte Attribute ist unzulässig"
+msgstr "Das erweiterte Attribut hat einen ungültigen Vorspann"
 
 #: lib/ext2fs/ext2_err.c:173
-#, fuzzy
 msgid "Extended attribute key not found"
-msgstr "aerweiterte Attribute"
+msgstr "Der Schlüssel des erweiterten Attributs ist unauffindbar"
 
 #: lib/ext2fs/ext2_err.c:174
 msgid "Insufficient space to store extended attribute data"
-msgstr ""
+msgstr "Der zur Verfügung stehende Platz reicht nicht aus, um die Daten des erweiterten Attributes zu speichern"
 
 #: lib/ext2fs/ext2_err.c:175
 msgid "Filesystem is missing ext_attr or inline_data feature"
-msgstr ""
+msgstr "Dem Dateisystem fehlen die ext_attr oder das inline_data Eigenschaft"
 
 #: lib/ext2fs/ext2_err.c:176
-#, fuzzy
 msgid "Inode doesn't have inline data"
-msgstr "Der Inode verwendet keine Erweiterungen"
+msgstr "Der Inode verwendet keine Inline-Daten"
 
 #: lib/ext2fs/ext2_err.c:177
 msgid "No block for an inode with inline data"
-msgstr ""
+msgstr "Kein Block für eine Inode mit Inline-Daten"
 
 #: lib/ext2fs/ext2_err.c:178
-#, fuzzy
 msgid "No free space in inline data"
-msgstr "Es ist kein freier Platz in der Karte der Erweiterung"
+msgstr "Es ist kein freier Platz in den Inline-Daten"
 
 #: lib/ext2fs/ext2_err.c:179
-#, fuzzy
 msgid "Wrong magic number for extended attribute structure"
-msgstr "Falsche magische Zahl für eine Ext2-Datei-Struktur"
+msgstr "Falsche magische Zahl für eine Struktur für erweiterte Attribute"
 
 #: lib/ext2fs/ext2_err.c:180
 msgid "Inode seems to contain garbage"
-msgstr ""
+msgstr "Die Inode scheint Müll zu enthalten"
 
 #: lib/ext2fs/ext2_err.c:181
 msgid "Extended attribute has an invalid value offset"
-msgstr ""
+msgstr "Das erweiterte Attribut hat einen ungültigen Wertabstand"
 
 #: lib/ext2fs/ext2_err.c:182
 msgid "Journal flags inconsistent"
-msgstr ""
+msgstr "Die Journalkennungen sind inkonsistent"
 
 #: lib/ext2fs/ext2_err.c:183
-#, fuzzy
 msgid "Undo file corrupt"
-msgstr "Der Größenänderungs-Inode ist defekt"
+msgstr "Die Undo-Datei ist defekt"
 
 #: lib/ext2fs/ext2_err.c:184
-#, fuzzy
 msgid "Wrong undo file for this filesystem"
-msgstr "Die Erlaubnis zum Ändern der Dateisystemgröße wurde verweigert."
+msgstr "Falsche Undo-Datei für dieses Dateisystem"
 
 #: lib/ext2fs/ext2_err.c:185
-#, fuzzy
 msgid "File system is corrupted"
-msgstr "Der Größenänderungs-Inode ist defekt"
+msgstr "Das Dateisystem ist defekt"
 
 #: lib/ext2fs/ext2_err.c:186
 msgid "Bad CRC detected in file system"
-msgstr ""
+msgstr "Falscher CRC im Dateisystem gefunden"
 
 #: lib/ext2fs/ext2_err.c:187
-#, fuzzy
 msgid "The journal superblock is corrupt"
-msgstr "Der Ext2-Superblock ist defekt"
+msgstr "Der Journal-Superblock ist defekt"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "Der Größenänderungs-Inode ist defekt"
+msgstr "Der Inode ist defekt"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8590,9 +8589,85 @@ msgid "%s contains a %s file system\n"
 msgstr "%s hat ein %s-Dateisystem\n"
 
 #: lib/support/plausible.c:276
-#, fuzzy, c-format
+#, c-format
 msgid "%s contains `%s' data\n"
-msgstr "%s hat ein %s-Dateisystem\n"
+msgstr "%s enthält Daten von „%s”\n"
+
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "i_dir_acl für Inode %i (%Q) ist %Id, sollte Null sein.\n"
+
+#~ msgid "while opening directory \"%s\""
+#~ msgstr "beim Öffnen von Verzeichnis „%s”"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** Es wurden Prüfsummenfehler im Dateisystem gefunden! Starten Sie umgehend e2fsck!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** Prüfsummenfehler in den Bitmaps gefunden! Starten Sie umgehend e2fsck!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %s: Fehler beim Lesen von Bitmaps: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Warnung, es gab Schwierigkeiten beim Schreiben der Superblöcke.\n"
+
+#~ msgid "Journal features:        "
+#~ msgstr "Jounaleigenschaften:        "
+
+#~ msgid "Journal size:             "
+#~ msgstr "Journalgröße:            "
+
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "Journal-Länge:            %u\n"
+#~ "Journal-Sequenz:          0x%08x\n"
+#~ "Journal-Start:            %u\n"
+
+#~ msgid "Journal errno:            %d\n"
+#~ msgstr "Jounal-Fehlernummer:      %d\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Journal-Blockgröße:       %u\n"
+#~ "Journal-Länge:            %u\n"
+#~ "Journal-Startblock:       %u\n"
+#~ "Journal-Sequenz:          0x%08x\n"
+#~ "Journal-Start:            %u\n"
+#~ "Journal-Benutzeranzahl:   %u\n"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "Jounalbenutzer:            %s\n"
 
 #~ msgid "Please run e2fsck on the filesystem.\n"
 #~ msgstr "Bitte lassen Sie e2fsck dieses Dateisystem überprüfen.\n"
@@ -8646,8 +8721,7 @@ msgstr "%s hat ein %s-Dateisystem\n"
 #~ msgstr "Ungültiger Quotatyp-Parameter: %s\n"
 
 #~ msgid "Couldn't allocate memory to parse quota options!\n"
-#~ msgstr ""
-#~ "Speicher zum Einlesen der Quota-Optionen konnte nicht reserviert werden!\n"
+#~ msgstr "Speicher zum Einlesen der Quota-Optionen konnte nicht reserviert werden!\n"
 
 #~ msgid "Couldn't allocate memory for tdb filename\n"
 #~ msgstr "Es kann kein Speicher für den Tdb-Dateinamen reserviert werden\n"
@@ -8657,8 +8731,7 @@ msgstr "%s hat ein %s-Dateisystem\n"
 #~ "    e2undo %s %s\n"
 #~ "\n"
 #~ msgstr ""
-#~ "Um die durch Tune2fs gemachten Änderungen rückgängig zu machen, starten "
-#~ "Sie\n"
+#~ "Um die durch Tune2fs gemachten Änderungen rückgängig zu machen, starten Sie\n"
 #~ "bitte\n"
 #~ "    e2undo %s %s\n"
 #~ "\n"
@@ -8679,8 +8752,7 @@ msgstr "%s hat ein %s-Dateisystem\n"
 #~ "t!resize_inode wird von resize2fs nicht unterestützt.\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 af17549..bf7883e 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,
-#      2013, 2014, 2015, 2016, 2017 by Theodore Ts'o
+#      2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 by Theodore Ts'o
 # This file is distributed under the same license as the e2fsprogs package.
-# Theodore Ts'o <tytso@mit.edu>, 2017.
+# Theodore Ts'o <tytso@mit.edu>, 2021.
 #
 #. 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,
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -49,7 +56,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
@@ -70,9 +77,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.43.4\n"
+"Project-Id-Version: e2fsprogs v1.45.7\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
+"POT-Creation-Date: 2021-01-28 13:42-0500\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"
@@ -82,7 +89,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr ""
@@ -95,11 +102,12 @@ msgstr ""
 msgid "while reading the bad blocks inode"
 msgstr ""
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:692 misc/dumpe2fs.c:696 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2881 misc/tune2fs.c:2980 resize/main.c:416
 #, c-format
 msgid "while trying to open %s"
 msgstr ""
@@ -109,7 +117,7 @@ msgstr ""
 msgid "while trying popen '%s'"
 msgstr ""
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr ""
 
@@ -122,6 +130,10 @@ msgstr ""
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr ""
 
+#: e2fsck/dirinfo.c:332
+msgid "while freeing dir_info tdb file"
+msgstr ""
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -150,15 +162,15 @@ msgstr ""
 msgid "Error writing block %lu (%s).  "
 msgstr ""
 
-#: e2fsck/emptydir.c:57
+#: e2fsck/emptydir.c:56
 msgid "empty dirblocks"
 msgstr ""
 
-#: e2fsck/emptydir.c:62
+#: e2fsck/emptydir.c:61
 msgid "empty dir map"
 msgstr ""
 
-#: e2fsck/emptydir.c:98
+#: e2fsck/emptydir.c:97
 #, c-format
 msgid "Empty directory block %u (#%d) in inode %u\n"
 msgstr ""
@@ -168,12 +180,12 @@ msgstr ""
 msgid "%s: %s filename nblocks blocksize\n"
 msgstr ""
 
-#: e2fsck/extend.c:44
+#: e2fsck/extend.c:45
 #, c-format
 msgid "Illegal number of blocks!\n"
 msgstr ""
 
-#: e2fsck/extend.c:50
+#: e2fsck/extend.c:51
 #, c-format
 msgid "Couldn't allocate block buffer (size=%d)\n"
 msgstr ""
@@ -197,12 +209,12 @@ msgstr ""
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr ""
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, c-format
 msgid "while opening %s for flushing"
 msgstr ""
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:385
 #, c-format
 msgid "while trying to flush %s"
 msgstr ""
@@ -212,11 +224,11 @@ msgstr ""
 msgid "while trying to open '%s'"
 msgstr ""
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr ""
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr ""
 
@@ -225,358 +237,379 @@ msgstr ""
 msgid "%u inodes scanned.\n"
 msgstr ""
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr ""
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr ""
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr ""
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3787
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr ""
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr ""
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr ""
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr ""
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr ""
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr ""
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr ""
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr ""
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr ""
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr ""
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr ""
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr ""
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr ""
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr ""
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr ""
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr ""
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr ""
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr ""
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr ""
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr ""
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr ""
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr ""
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr ""
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr ""
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr ""
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr ""
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr ""
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr ""
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr ""
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr ""
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr ""
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr ""
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr ""
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr ""
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr ""
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr ""
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr ""
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr ""
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr ""
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr ""
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr ""
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr ""
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr ""
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr ""
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr ""
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr ""
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr ""
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr ""
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr ""
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr ""
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr ""
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr ""
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr ""
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr ""
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr ""
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr ""
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr ""
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr ""
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr ""
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr ""
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr ""
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr ""
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:830
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr ""
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:956
 msgid "returned from clone_file_block"
 msgstr ""
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:980
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr ""
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:992
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr ""
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:358
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr ""
+
+#: e2fsck/pass1.c:776 e2fsck/pass2.c:1018
 msgid "reading directory block"
 msgstr ""
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1175
+msgid "getting next inode from scan"
+msgstr ""
+
+#: e2fsck/pass1.c:1227
 msgid "in-use inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1238
 msgid "directory inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1248
 msgid "regular file inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1257 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr ""
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1266
 msgid "metadata block map"
 msgstr ""
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1328
 msgid "opening inode scan"
 msgstr ""
 
-#: e2fsck/pass1.c:1251
-msgid "getting next inode from scan"
-msgstr ""
-
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2083
 msgid "Pass 1"
 msgstr ""
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2144
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr ""
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2195
 msgid "bad inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2253
 msgid "inode in bad block map"
 msgstr ""
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2273
 msgid "imagic inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2304
 msgid "multiply claimed block map"
 msgstr ""
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2429
 msgid "ext attr block map"
 msgstr ""
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3685
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr ""
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4105
 msgid "block bitmap"
 msgstr ""
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4111
 msgid "inode bitmap"
 msgstr ""
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4117
 msgid "inode table"
 msgstr ""
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:312
 msgid "Pass 2"
 msgstr ""
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1091 e2fsck/pass2.c:1266
 msgid "Can not continue."
 msgstr ""
 
@@ -592,197 +625,213 @@ msgstr ""
 msgid "Pass 3"
 msgstr ""
 
-#: e2fsck/pass3.c:344
+#: e2fsck/pass3.c:350
 msgid "inode loop detection bitmap"
 msgstr ""
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:289
 msgid "Pass 4"
 msgstr ""
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr ""
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr ""
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr ""
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:53
 msgid "(no prompt)"
 msgstr ""
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:54
 msgid "Fix"
 msgstr ""
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:55
 msgid "Clear"
 msgstr ""
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:56
 msgid "Relocate"
 msgstr ""
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:57
 msgid "Allocate"
 msgstr ""
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:58
 msgid "Expand"
 msgstr ""
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:59
 msgid "Connect to /lost+found"
 msgstr ""
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:60
 msgid "Create"
 msgstr ""
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:61
 msgid "Salvage"
 msgstr ""
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:62
 msgid "Truncate"
 msgstr ""
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:63
 msgid "Clear inode"
 msgstr ""
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:64
 msgid "Abort"
 msgstr ""
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:65
 msgid "Split"
 msgstr ""
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:66
 msgid "Continue"
 msgstr ""
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:67
 msgid "Clone multiply-claimed blocks"
 msgstr ""
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:68
 msgid "Delete file"
 msgstr ""
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:69
 msgid "Suppress messages"
 msgstr ""
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:70
 msgid "Unlink"
 msgstr ""
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:71
 msgid "Clear HTree index"
 msgstr ""
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:72
 msgid "Recreate"
 msgstr ""
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:73
+msgid "Optimize"
+msgstr ""
+
+#: e2fsck/problem.c:74
+msgid "Clear flag"
+msgstr ""
+
+#: e2fsck/problem.c:83
 msgid "(NONE)"
 msgstr ""
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:84
 msgid "FIXED"
 msgstr ""
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:85
 msgid "CLEARED"
 msgstr ""
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:86
 msgid "RELOCATED"
 msgstr ""
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:87
 msgid "ALLOCATED"
 msgstr ""
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:88
 msgid "EXPANDED"
 msgstr ""
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:89
 msgid "RECONNECTED"
 msgstr ""
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:90
 msgid "CREATED"
 msgstr ""
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:91
 msgid "SALVAGED"
 msgstr ""
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:92
 msgid "TRUNCATED"
 msgstr ""
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:93
 msgid "INODE CLEARED"
 msgstr ""
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:94
 msgid "ABORTED"
 msgstr ""
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:95
 msgid "SPLIT"
 msgstr ""
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:96
 msgid "CONTINUING"
 msgstr ""
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:97
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr ""
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:98
 msgid "FILE DELETED"
 msgstr ""
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:99
 msgid "SUPPRESSED"
 msgstr ""
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:100
 msgid "UNLINKED"
 msgstr ""
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:101
 msgid "HTREE INDEX CLEARED"
 msgstr ""
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:102
 msgid "WILL RECREATE"
 msgstr ""
 
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:103
+msgid "WILL OPTIMIZE"
+msgstr ""
+
+#: e2fsck/problem.c:104
+msgid "FLAG CLEARED"
+msgstr ""
+
+#: e2fsck/problem.c:118
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr ""
 
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:122
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr ""
 
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:127
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
 msgid ""
@@ -790,7 +839,7 @@ msgid ""
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
 msgstr ""
 
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:133
 #. @-expanded: \n
 #. @-expanded: The superblock could not be read or does not describe a valid ext2/ext3/ext4\n
 #. @-expanded: filesystem.  If the device is valid and it really contains an ext2/ext3/ext4\n
@@ -812,7 +861,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:144
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
@@ -822,7 +871,7 @@ msgid ""
 "Either the @S or the partition table is likely to be corrupt!\n"
 msgstr ""
 
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:151
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
@@ -832,17 +881,17 @@ msgid ""
 "from the @b size.\n"
 msgstr ""
 
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:158
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr ""
 
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:163
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr ""
 
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:168
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
 msgid ""
@@ -850,8 +899,8 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:174
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -861,53 +910,53 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:183
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr ""
 
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:189
+#, no-c-format
 #. @-expanded: Error determining size of the physical device: %m\n
 msgid "Error determining size of the physical @v: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:194
 #. @-expanded: inode count in superblock is %i, should be %j.\n
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr ""
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:198
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr ""
 
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:204
+#, no-c-format
 #. @-expanded: superblock has an invalid journal (inode %i).\n
 msgid "@S has an @n @j (@i %i).\n"
 msgstr ""
 
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:209
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr ""
 
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:214
 #. @-expanded: Can't find external journal\n
 msgid "Can't find external @j\n"
 msgstr ""
 
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:219
 #. @-expanded: External journal has bad superblock\n
 msgid "External @j has bad @S\n"
 msgstr ""
 
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:224
 #. @-expanded: External journal does not support this filesystem\n
 msgid "External @j does not support this @f\n"
 msgstr ""
 
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:229
 #. @-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 
 #. @-expanded: format.\n
@@ -919,80 +968,80 @@ msgid ""
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
 
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:238
 #. @-expanded: journal superblock is corrupt.\n
 msgid "@j @S is corrupt.\n"
 msgstr ""
 
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:243
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr ""
 
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:248
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr ""
 
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:253
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr ""
 
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:258
 #. @-expanded: Clear journal
 msgid "Clear @j"
 msgstr ""
 
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:263 e2fsck/problem.c:799
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr ""
 
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:268
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr ""
 
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:273
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:278
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:284
+#, no-c-format
 #. @-expanded: illegal orphaned inode %i in superblock.\n
 msgid "@I @o @i %i in @S.\n"
 msgstr ""
 
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:290
+#, no-c-format
 #. @-expanded: illegal inode %i in orphaned inode list.\n
 msgid "@I @i %i in @o @i list.\n"
 msgstr ""
 
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:295
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
 
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:300
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
 
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:305
 #. @-expanded: journal version not supported by this e2fsck.\n
 msgid "@j version not supported by this e2fsck.\n"
 msgstr ""
 
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:311
+#, no-c-format
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
 msgid ""
@@ -1000,8 +1049,8 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:317
+#, no-c-format
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
 msgid ""
@@ -1009,7 +1058,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:322
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
@@ -1019,17 +1068,17 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:328
 #. @-expanded: Run journal anyway
 msgid "Run @j anyway"
 msgstr ""
 
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:333
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
 
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:338
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
 msgid ""
@@ -1037,7 +1086,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:344
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
 msgid ""
@@ -1045,17 +1094,17 @@ msgid ""
 "is %N; @s zero.  "
 msgstr ""
 
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:350
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr ""
 
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:355
 #. @-expanded: Resize inode not valid.  
 msgid "Resize @i not valid.  "
 msgstr ""
 
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:360
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
 msgid ""
@@ -1063,7 +1112,7 @@ msgid ""
 "\tnow = %T) is in the future.\n"
 msgstr ""
 
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:365
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
 msgid ""
@@ -1071,13 +1120,13 @@ msgid ""
 "\tnow = %T) is in the future.\n"
 msgstr ""
 
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:371
+#, no-c-format
 #. @-expanded: superblock hint for external superblock should be %X.  
 msgid "@S hint for external superblock @s %X.  "
 msgstr ""
 
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:376
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
 msgid ""
@@ -1085,37 +1134,37 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:381
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr ""
 
-#: e2fsck/problem.c:367
-#, c-format
+#: e2fsck/problem.c:387
+#, no-c-format
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr ""
 
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:392
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr ""
 
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:397
 #. @-expanded: Last group block bitmap uninitialized.  
 msgid "Last @g @b @B uninitialized.  "
 msgstr ""
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:403
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr ""
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:408
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr ""
 
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:413
 #. @-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 
 #. @-expanded: set)\n
@@ -1125,7 +1174,7 @@ msgid ""
 "set)\n"
 msgstr ""
 
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:419
 #. @-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 
 #. @-expanded: set)\n
@@ -1135,47 +1184,47 @@ msgid ""
 "set)\n"
 msgstr ""
 
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:425
 #. @-expanded: One or more block group descriptor checksums are invalid.  
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr ""
 
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:430
 #. @-expanded: Setting free inodes count to %j (was %i)\n
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr ""
 
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:435
 #. @-expanded: Setting free blocks count to %c (was %b)\n
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr ""
 
-#: e2fsck/problem.c:418
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-msgid "Making @q @i %i (%Q) hidden.\n"
+#: e2fsck/problem.c:440
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+msgid "Hiding %U @q @i %i (%Q).\n"
 msgstr ""
 
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:445
 #. @-expanded: superblock has invalid MMP block.  
 msgid "@S has invalid MMP block.  "
 msgstr ""
 
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:450
 #. @-expanded: superblock has invalid MMP magic.  
 msgid "@S has invalid MMP magic.  "
 msgstr ""
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:456
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:462
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:446
+#: e2fsck/problem.c:468
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
 msgid ""
@@ -1183,161 +1232,179 @@ msgid ""
 "simultaneously."
 msgstr ""
 
-#: e2fsck/problem.c:452
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-msgid "@S MMP block checksum does not match MMP block.  "
+#: e2fsck/problem.c:474
+#. @-expanded: superblock MMP block checksum does not match.  
+msgid "@S MMP @b checksum does not match.  "
 msgstr ""
 
-#: e2fsck/problem.c:457
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#: e2fsck/problem.c:479
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr ""
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:484
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr ""
 
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:489
 #. @-expanded: External journal superblock checksum does not match superblock.  
 msgid "External @j @S checksum does not match @S.  "
 msgstr ""
 
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:494
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr ""
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:500
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:505
 #. @-expanded: Bad required extra isize in superblock (%N).  
 msgid "Bad required extra isize in @S (%N).  "
 msgstr ""
 
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:510
 #. @-expanded: Bad desired extra isize in superblock (%N).  
 msgid "Bad desired extra isize in @S (%N).  "
 msgstr ""
 
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:515
+#. @-expanded: Invalid %U quota inode %i.  
+msgid "Invalid %U @q @i %i.  "
+msgstr ""
+
+#: e2fsck/problem.c:520
+#. @-expanded: superblock would have too many inodes (%N).\n
+msgid "@S would have too many inodes (%N).\n"
+msgstr ""
+
+#: e2fsck/problem.c:525
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
+msgstr ""
+
+#: e2fsck/problem.c:533
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr ""
 
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:537
 #. @-expanded: root inode is not a directory.  
 msgid "@r is not a @d.  "
 msgstr ""
 
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:542
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr ""
 
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:547
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr ""
 
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:553
+#, no-c-format
 #. @-expanded: deleted inode %i has zero dtime.  
 msgid "@D @i %i has zero dtime.  "
 msgstr ""
 
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:559
+#, no-c-format
 #. @-expanded: inode %i is in use, but has dtime set.  
 msgid "@i %i is in use, but has dtime set.  "
 msgstr ""
 
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:565
+#, no-c-format
 #. @-expanded: inode %i is a zero-length directory.  
 msgid "@i %i is a @z @d.  "
 msgstr ""
 
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:570
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr ""
 
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:575
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr ""
 
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:580
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
 msgid "@g %g's @i table at %b @C.\n"
 msgstr ""
 
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:585
 #. @-expanded: group %g's block bitmap (%b) is bad.  
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr ""
 
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:590
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr ""
 
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:595
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr ""
 
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:600
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr ""
 
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:605
 #. @-expanded: illegal %B (%b) in inode %i.  
 msgid "@I %B (%b) in @i %i.  "
 msgstr ""
 
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:610
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr ""
 
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:616
+#, no-c-format
 #. @-expanded: inode %i has illegal block(s).  
 msgid "@i %i has illegal @b(s).  "
 msgstr ""
 
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:622
+#, no-c-format
 #. @-expanded: Too many illegal blocks in inode %i.\n
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:627
 #. @-expanded: illegal %B (%b) in bad block inode.  
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr ""
 
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:632
 #. @-expanded: Bad block inode has illegal block(s).  
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr ""
 
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:637
 #. @-expanded: Duplicate or bad block in use!\n
 msgid "Duplicate or bad @b in use!\n"
 msgstr ""
 
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:642
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr ""
 
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:647
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
@@ -1349,7 +1416,7 @@ msgid ""
 "in the @f.\n"
 msgstr ""
 
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:654
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
 msgid ""
@@ -1357,7 +1424,7 @@ msgid ""
 "If the @b is really bad, the @f can not be fixed.\n"
 msgstr ""
 
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:659
 #. @-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
 #. @-expanded: \n
@@ -1367,121 +1434,121 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:665
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr ""
 
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:670
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:676
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr ""
 
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:682
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:688
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:694
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:654
-#, c-format
+#: e2fsck/problem.c:700
+#, no-c-format
 #. @-expanded: error allocating block buffer for relocating %s\n
 msgid "@A @b buffer for relocating %s\n"
 msgstr ""
 
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:705
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr ""
 
-#: e2fsck/problem.c:664
-#, c-format
+#: e2fsck/problem.c:711
+#, no-c-format
 #. @-expanded: Relocating group %g's %s to %c...\n
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr ""
 
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:716
 #. @-expanded: Warning: could not read block %b of %s: %m\n
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:721
 #. @-expanded: Warning: could not write block %b for %s: %m\n
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:726 e2fsck/problem.c:1898
 #. @-expanded: error allocating inode bitmap (%N): %m\n
 msgid "@A @i @B (%N): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:731
 #. @-expanded: error allocating block bitmap (%N): %m\n
 msgid "@A @b @B (%N): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:737
+#, no-c-format
 #. @-expanded: error allocating icount link information: %m\n
 msgid "@A icount link information: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:743
+#, no-c-format
 #. @-expanded: error allocating directory block array: %m\n
 msgid "@A @d @b array: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:749
+#, no-c-format
 #. @-expanded: Error while scanning inodes (%i): %m\n
 msgid "Error while scanning @is (%i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:755
+#, no-c-format
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:760
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:765
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:720
-#, c-format
+#: e2fsck/problem.c:772
+#, no-c-format
 #. @-expanded: Error reading inode %i: %m\n
 msgid "Error reading @i %i: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:781
+#, no-c-format
 #. @-expanded: inode %i has imagic flag set.  
 msgid "@i %i has imagic flag set.  "
 msgstr ""
 
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:787
+#, no-c-format
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
 msgid ""
@@ -1489,142 +1556,142 @@ msgid ""
 "or append-only flag set.  "
 msgstr ""
 
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:794
+#, no-c-format
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
 
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:804
 #. @-expanded: journal inode is not in use, but contains data.  
 msgid "@j @i is not in use, but contains data.  "
 msgstr ""
 
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:809
 #. @-expanded: journal is not regular file.  
 msgid "@j is not regular file.  "
 msgstr ""
 
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:815
+#, no-c-format
 #. @-expanded: inode %i was part of the orphaned inode list.  
 msgid "@i %i was part of the @o @i list.  "
 msgstr ""
 
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:821
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
 
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:826
 #. @-expanded: error allocating refcount structure (%N): %m\n
 msgid "@A refcount structure (%N): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:831
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr ""
 
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:836
 #. @-expanded: inode %i has a bad extended attribute block %b.  
 msgid "@i %i has a bad @a @b %b.  "
 msgstr ""
 
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:841
 #. @-expanded: Error reading extended attribute block %b (%m).  
 msgid "Error reading @a @b %b (%m).  "
 msgstr ""
 
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:846
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr ""
 
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:851
 #. @-expanded: Error writing extended attribute block %b (%m).  
 msgid "Error writing @a @b %b (%m).  "
 msgstr ""
 
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:856
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr ""
 
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:861
 #. @-expanded: error allocating extended attribute region allocation structure.  
 msgid "@A @a region allocation structure.  "
 msgstr ""
 
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:866
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr ""
 
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:871
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr ""
 
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:876
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr ""
 
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:882
+#, no-c-format
 #. @-expanded: inode %i is too big.  
 msgid "@i %i is too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:886
 #. @-expanded: %B (%b) causes directory to be too big.  
 msgid "%B (%b) causes @d to be too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:891
 msgid "%B (%b) causes file to be too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:896
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:902
+#, no-c-format
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
 
-#: e2fsck/problem.c:849
-#, c-format
+#: e2fsck/problem.c:908
+#, no-c-format
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr ""
 
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:914
+#, no-c-format
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
 msgid "@h %i has an @n root node.\n"
 msgstr ""
 
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:919
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:864
-#, c-format
+#: e2fsck/problem.c:925
+#, no-c-format
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr ""
 
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:930
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr ""
 
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:936
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
 msgid ""
@@ -1632,54 +1699,54 @@ msgid ""
 "@f metadata.  "
 msgstr ""
 
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:943
+#, no-c-format
 #. @-expanded: Resize inode (re)creation failed: %m.
 msgid "Resize @i (re)creation failed: %m."
 msgstr ""
 
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:948
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr ""
 
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:953
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr ""
 
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:958
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr ""
 
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:963
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr ""
 
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:968
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr ""
 
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:973
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr ""
 
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:978
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr ""
 
-#: e2fsck/problem.c:920
-#, c-format
+#: e2fsck/problem.c:984
+#, no-c-format
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:989
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
 msgid ""
@@ -1687,7 +1754,7 @@ msgid ""
 "\t(op %s, blk %b, lblk %c): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:995
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
 msgid ""
@@ -1695,7 +1762,7 @@ msgid ""
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:1000
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
 msgid ""
@@ -1703,30 +1770,30 @@ msgid ""
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1006
+#, no-c-format
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr ""
 
-#: e2fsck/problem.c:946
-#, c-format
+#: e2fsck/problem.c:1012
+#, no-c-format
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr ""
 
-#: e2fsck/problem.c:951
-#, c-format
+#: e2fsck/problem.c:1018
+#, no-c-format
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr ""
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1024
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr ""
 
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1029
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
 msgid ""
@@ -1734,38 +1801,38 @@ msgid ""
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1033
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr ""
 
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1039
+#, no-c-format
 #. @-expanded: Error converting subcluster block bitmap: %m\n
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:975
-#. @-expanded: quota inode is not regular file.  
-msgid "@q @i is not regular file.  "
+#: e2fsck/problem.c:1044
+#. @-expanded: quota inode is not regular file.  
+msgid "@q @i is not regular file.  "
 msgstr ""
 
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1049
 #. @-expanded: quota inode is not in use, but contains data.  
 msgid "@q @i is not in use, but contains data.  "
 msgstr ""
 
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1054
 #. @-expanded: quota inode is visible to the user.  
 msgid "@q @i is visible to the user.  "
 msgstr ""
 
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1059
 #. @-expanded: The bad block inode looks invalid.  
 msgid "The bad @b @i looks @n.  "
 msgstr ""
 
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1064
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
 msgid ""
@@ -1773,25 +1840,25 @@ msgid ""
 "\t(@n logical @b %c, physical @b %b)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1000
-#, c-format
+#: e2fsck/problem.c:1070
+#, no-c-format
 #. @-expanded: inode %i seems to contain garbage.  
 msgid "@i %i seems to contain garbage.  "
 msgstr ""
 
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1076
+#, no-c-format
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr ""
 
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1082
+#, no-c-format
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr ""
 
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1090
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
 msgid ""
@@ -1799,12 +1866,12 @@ msgid ""
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1099
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
 msgstr ""
 
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1104
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
 msgid ""
@@ -1812,7 +1879,7 @@ msgid ""
 "Logical start %b does not match logical start %c at next level.  "
 msgstr ""
 
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1110
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
 msgid ""
@@ -1820,36 +1887,37 @@ msgid ""
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1045
-#, c-format
+#: e2fsck/problem.c:1116
+#, no-c-format
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr ""
 
-#: e2fsck/problem.c:1050
-#, c-format
+#: e2fsck/problem.c:1122
+#, no-c-format
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1058
+#: e2fsck/problem.c:1130
+#, no-c-format
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
 msgid ""
 "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1135
 #. @-expanded: directory inode %i block %b should be at block %c.  
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr ""
 
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1141
+#, no-c-format
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr ""
 
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1146
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
 msgid ""
@@ -1857,14 +1925,14 @@ msgid ""
 "Will fix in pass 1B.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1078
-#, c-format
+#: e2fsck/problem.c:1152
+#, no-c-format
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
 msgstr ""
 
-#: e2fsck/problem.c:1083
-#, c-format
+#: e2fsck/problem.c:1159
+#, no-c-format
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
 msgid ""
@@ -1872,41 +1940,41 @@ msgid ""
 "or inline-data flag set.  "
 msgstr ""
 
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1166
+#, no-c-format
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1172
+#, no-c-format
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1178
+#, no-c-format
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1184
+#, no-c-format
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1189
 #. @-expanded: Bad block list says the bad block list inode is bad.  
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr ""
 
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1194
 #. @-expanded: error allocating extent region allocation structure.  
 msgid "@A @x region allocation structure.  "
 msgstr ""
 
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1199
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
 msgid ""
@@ -1914,35 +1982,79 @@ msgid ""
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1204
 #. @-expanded: error allocating memory for encrypted directory list\n
 msgid "@A memory for encrypted @d list\n"
 msgstr ""
 
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1209
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1215
+#, no-c-format
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr ""
 
-#: e2fsck/problem.c:1139
-#, c-format
+#: e2fsck/problem.c:1221
+#, no-c-format
 #. @-expanded: inode %i has corrupt extent header.  
 msgid "@i %i has corrupt @x header.  "
 msgstr ""
 
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1227
+#, no-c-format
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1232
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr ""
+
+#: e2fsck/problem.c:1238
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr ""
+
+#: e2fsck/problem.c:1243
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+
+#: e2fsck/problem.c:1248
+#, c-format
+#. @-expanded: inode %i has the casefold flag set but is not a directory.  
+msgid "@i %i has the casefold flag set but is not a directory.  "
+msgstr ""
+
+#: e2fsck/problem.c:1253
+#, c-format
+#. @-expanded: directory %p has the casefold flag, but the\n
+#. @-expanded: casefold feature is not enabled.  
+msgid ""
+"@d %p has the casefold flag, but the\n"
+"casefold feature is not enabled.  "
+msgstr ""
+
+#: e2fsck/problem.c:1258
+#. @-expanded: HTREE directory inode %i uses hash version (%N), but should use SipHash (6) \n
+msgid "@h %i uses hash version (%N), but should use SipHash (6) \n"
+msgstr ""
+
+#: e2fsck/problem.c:1263
+#, c-format
+#. @-expanded: HTREE directory inode %i uses SipHash, but should not.  
+msgid "@h %i uses SipHash, but should not.  "
+msgstr ""
+
+#: e2fsck/problem.c:1270
 #. @-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
@@ -1952,45 +2064,45 @@ msgid ""
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 
-#: e2fsck/problem.c:1157
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 #. @-expanded: multiply-claimed block(s) in inode %i:
 msgid "@m @b(s) in @i %i:"
 msgstr ""
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1293
+#, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1177
-#, c-format
+#: e2fsck/problem.c:1299
+#, no-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:1182
-#, c-format
+#: e2fsck/problem.c:1305
+#, no-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:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1310 e2fsck/problem.c:1685
 #. @-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:1197
+#: e2fsck/problem.c:1320
 #. @-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:1203
+#: e2fsck/problem.c:1326
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr ""
 
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1331
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
 msgid ""
@@ -1998,17 +2110,17 @@ msgid ""
 "  has %r @m @b(s), shared with %N file(s):\n"
 msgstr ""
 
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1337
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1342
 #. @-expanded: \t<filesystem metadata>\n
 msgid "\t<@f metadata>\n"
 msgstr ""
 
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1347
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
 msgid ""
@@ -2016,7 +2128,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1352
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
 msgid ""
@@ -2024,343 +2136,343 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1366
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1372
 #. @-expanded: Pass 1E: Optimizing extent trees\n
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr ""
 
-#: e2fsck/problem.c:1253
-#, c-format
+#: e2fsck/problem.c:1378
+#, no-c-format
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1383
 #. @-expanded: Optimizing extent trees: 
 msgid "Optimizing @x trees: "
 msgstr ""
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1398
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1403
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr ""
 
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1408
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr ""
 
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1415
 #. @-expanded: Pass 2: Checking directory structure\n
 msgid "Pass 2: Checking @d structure\n"
 msgstr ""
 
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1421
+#, no-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:1300
+#: e2fsck/problem.c:1426
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
 msgid "@E has @n @i #: %Di.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1431
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
 msgid "@E has @D/unused @i %Di.  "
 msgstr ""
 
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1436
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
 msgid "@E @L to '.'  "
 msgstr ""
 
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1441
 #. @-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:1320
+#: e2fsck/problem.c:1446
 #. @-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:1325
+#: e2fsck/problem.c:1451
 #. @-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:1330
+#: e2fsck/problem.c:1456
 #. @-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:1335
-#, c-format
+#: e2fsck/problem.c:1462
+#, no-c-format
 #. @-expanded: Missing '.' in directory inode %i.\n
 msgid "Missing '.' in @d @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1468
+#, no-c-format
 #. @-expanded: Missing '..' in directory inode %i.\n
 msgid "Missing '..' in @d @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1473
 #. @-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:1350
+#: e2fsck/problem.c:1478
 #. @-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:1355
+#: e2fsck/problem.c:1483
 #. @-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:1360
+#: e2fsck/problem.c:1488
 #. @-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:1365
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-msgid "i_dir_acl @F %Id, @s zero.\n"
+#: e2fsck/problem.c:1493
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+msgid "i_size_high @F %Id, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1498
 #. @-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:1375
+#: e2fsck/problem.c:1503
 #. @-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:1380
+#: e2fsck/problem.c:1508
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1513
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr ""
 
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1518
 #. @-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:1395
+#: e2fsck/problem.c:1523
 #. @-expanded: directory inode %i has an unallocated %B.  
 msgid "@d @i %i has an unallocated %B.  "
 msgstr ""
 
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1529
+#, no-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:1405
-#, c-format
+#: e2fsck/problem.c:1535
+#, no-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:1410
+#: e2fsck/problem.c:1540
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1545
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1550
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
 msgid "@E is duplicate '.' @e.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1555
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
 msgid "@E is duplicate '..' @e.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1561 e2fsck/problem.c:1925
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1566
 #. @-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:1440
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 #. @-expanded: error allocating icount structure: %m\n
 msgid "@A icount structure: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 #. @-expanded: Error iterating over directory blocks: %m\n
 msgid "Error iterating over @d @bs: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1583
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1588
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1594
+#, no-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:1465
-#, c-format
+#: e2fsck/problem.c:1600
+#, no-c-format
 #. @-expanded: Error deallocating inode %i: %m\n
 msgid "Error deallocating @i %i: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1606
+#, no-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:1475
+#: e2fsck/problem.c:1611
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1616
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1621
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
 msgid "Setting filetype for @E to %N.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1626
 #. @-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:1495
+#: e2fsck/problem.c:1631
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
 msgid "@E has filetype set.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1636
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
 msgid "@E has a @z name.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1641
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1646
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
 msgid "@a @b @F @n (%If).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1651
 #. @-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:1520
+#: e2fsck/problem.c:1656
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
 msgid "@p @h %d: %B not referenced\n"
 msgstr ""
 
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1661
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
 msgid "@p @h %d: %B referenced twice\n"
 msgstr ""
 
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1666
 #. @-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:1535
+#: e2fsck/problem.c:1671
 #. @-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:1540
+#: e2fsck/problem.c:1676
 #. @-expanded: invalid HTREE directory inode %d (%q).  
 msgid "@n @h %d (%q).  "
 msgstr ""
 
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1680
 #. @-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:1554
-#, c-format
+#: e2fsck/problem.c:1691
+#, no-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:1559
+#: e2fsck/problem.c:1696
 #. @-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:1564
+#: e2fsck/problem.c:1701
 #. @-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:1569
+#: e2fsck/problem.c:1706
 #. @-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:1574
+#: e2fsck/problem.c:1711
 #. @-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:1579
+#: e2fsck/problem.c:1716
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
 msgid "Duplicate @E found.  "
 msgstr ""
 
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1721
 #, no-c-format
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
@@ -2369,7 +2481,7 @@ msgid ""
 "Rename to %s"
 msgstr ""
 
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1726
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
@@ -2379,154 +2491,160 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1731
 #. @-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:1599
+#: e2fsck/problem.c:1736
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1741
 #. @-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:1608
+#: e2fsck/problem.c:1746
 #. @-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:1613
+#: e2fsck/problem.c:1751
 #. @-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:1618
-#, c-format
+#: e2fsck/problem.c:1757
+#, no-c-format
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1623
-#, c-format
+#: e2fsck/problem.c:1763
+#, no-c-format
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1768
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1773
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1778
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1784
+#, no-c-format
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1789
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
 msgid "Encrypted @E is too short.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1794
+#. @-expanded: Duplicate filename entry '%Dn' in %p (%i) found.  
+msgid "Duplicate filename @E found.  "
+msgstr ""
+
+#: e2fsck/problem.c:1801
 #. @-expanded: Pass 3: Checking directory connectivity\n
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr ""
 
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1806
 #. @-expanded: root inode not allocated.  
 msgid "@r not allocated.  "
 msgstr ""
 
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1811
 #. @-expanded: No room in lost+found directory.  
 msgid "No room in @l @d.  "
 msgstr ""
 
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1817
+#, no-c-format
 #. @-expanded: Unconnected directory inode %i (%p)\n
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1822
 #. @-expanded: /lost+found not found.  
 msgid "/@l not found.  "
 msgstr ""
 
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1827
 #. @-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:1685
+#: e2fsck/problem.c:1833
+#, no-c-format
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1839
+#, no-c-format
 #. @-expanded: Could not expand /lost+found: %m\n
 msgid "Could not expand /@l: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1845
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1851
+#, no-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:1705
-#, c-format
+#: e2fsck/problem.c:1857
+#, no-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:1710
-#, c-format
+#: e2fsck/problem.c:1863
+#, no-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:1715
-#, c-format
+#: e2fsck/problem.c:1869
+#, no-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:1720
-#, c-format
+#: e2fsck/problem.c:1875
+#, no-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:1725
-#, c-format
+#: e2fsck/problem.c:1881
+#, no-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:1730
-#, c-format
+#: e2fsck/problem.c:1887
+#, no-c-format
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
 msgid ""
@@ -2534,8 +2652,8 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1893
+#, no-c-format
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
 msgid ""
@@ -2543,40 +2661,40 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 #. @-expanded: Error creating root directory (%s): %m\n
 msgid "Error creating root @d (%s): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1910
+#, no-c-format
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1915
 #. @-expanded: root inode is not a directory; aborting.\n
 msgid "@r is not a @d; aborting.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1920
 #. @-expanded: Cannot proceed without a root inode.\n
 msgid "Cannot proceed without a @r.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1931
+#, no-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:1775
+#: e2fsck/problem.c:1936
 #. @-expanded: /lost+found has inline data\n
 msgid "/@l has inline data\n"
 msgstr ""
 
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1941
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
 msgid ""
@@ -2584,7 +2702,7 @@ msgid ""
 "Place lost files in root directory instead"
 msgstr ""
 
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1946
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
@@ -2594,50 +2712,50 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1951
 #. @-expanded: /lost+found is encrypted\n
 msgid "/@l is encrypted\n"
 msgstr ""
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1958
 msgid "Pass 3A: Optimizing directories\n"
 msgstr ""
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1964
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1969
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1974
 msgid "Optimizing directories: "
 msgstr ""
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1991
 msgid "Pass 4: Checking reference counts\n"
 msgstr ""
 
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1997
+#, no-c-format
 #. @-expanded: unattached zero-length inode %i.  
 msgid "@u @z @i %i.  "
 msgstr ""
 
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:2003
+#, no-c-format
 #. @-expanded: unattached inode %i\n
 msgid "@u @i %i\n"
 msgstr ""
 
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:2008
 #. @-expanded: inode %i ref count is %Il, should be %N.  
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr ""
 
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:2012
 #. @-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
@@ -2647,57 +2765,72 @@ msgid ""
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
 
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2019
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr ""
+
+#: e2fsck/problem.c:2024
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
+
+#: e2fsck/problem.c:2029
+#. @-expanded: directory inode %i ref count set to overflow but could be exact value %N.  
+msgid "@d @i %i ref count set to overflow but could be exact value %N.  "
+msgstr ""
+
+#: e2fsck/problem.c:2036
 #. @-expanded: Pass 5: Checking group summary information\n
 msgid "Pass 5: Checking @g summary information\n"
 msgstr ""
 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2041
 #. @-expanded: Padding at end of inode bitmap is not set. 
 msgid "Padding at end of @i @B is not set. "
 msgstr ""
 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2046
 #. @-expanded: Padding at end of block bitmap is not set. 
 msgid "Padding at end of @b @B is not set. "
 msgstr ""
 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2051
 #. @-expanded: block bitmap differences: 
 msgid "@b @B differences: "
 msgstr ""
 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2073
 #. @-expanded: inode bitmap differences: 
 msgid "@i @B differences: "
 msgstr ""
 
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2095
 #. @-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:1918
+#: e2fsck/problem.c:2100
 #. @-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:1923
+#: e2fsck/problem.c:2105
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2110
 #. @-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:1933
+#: e2fsck/problem.c:2115
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1938
+#: e2fsck/problem.c:2120
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
 msgid ""
@@ -2705,91 +2838,91 @@ msgid ""
 "endpoints (%i, %j)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:2126
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2132
+#, no-c-format
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2138
+#, no-c-format
 #. @-expanded: Error copying in replacement block bitmap: %m\n
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1979
-#, c-format
+#: e2fsck/problem.c:2168
+#, no-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:1984
-#, c-format
+#: e2fsck/problem.c:2174
+#, no-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:1989
-#, c-format
+#: e2fsck/problem.c:2180
+#, no-c-format
 #. @-expanded: group %g inode bitmap does not match checksum.\n
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2186
+#, no-c-format
 #. @-expanded: group %g block bitmap does not match checksum.\n
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr ""
 
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2193
 #. @-expanded: Recreate journal
 msgid "Recreate @j"
 msgstr ""
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2198
 msgid "Update quota info for quota type %N"
 msgstr ""
 
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2204
+#, no-c-format
 #. @-expanded: Error setting block group checksum info: %m\n
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2210
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2216
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2221
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2384
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr ""
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2514 e2fsck/problem.c:2518
 msgid "IGNORED"
 msgstr ""
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr ""
 
 #: e2fsck/scantest.c:79
 #, c-format
-msgid "Memory used: %d, elapsed time: %6.3f/%6.3f/%6.3f\n"
+msgid "Memory used: %lu, elapsed time: %6.3f/%6.3f/%6.3f\n"
 msgstr ""
 
 #: e2fsck/scantest.c:98
@@ -2805,25 +2938,25 @@ msgstr ""
 msgid "while doing inode scan"
 msgstr ""
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
+msgid "while calling ext2fs_block_iterate for inode %u"
 msgstr ""
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
 msgstr ""
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr ""
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr ""
 
-#: e2fsck/unix.c:77
+#: e2fsck/unix.c:78
 #, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
@@ -2831,7 +2964,7 @@ msgid ""
 "\t\t[-E extended-options] [-z undo_file] device\n"
 msgstr ""
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
@@ -2843,7 +2976,7 @@ msgid ""
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
 
-#: e2fsck/unix.c:88
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -2854,12 +2987,12 @@ msgid ""
 " -z undo_file         Create an undo file\n"
 msgstr ""
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr ""
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -2870,51 +3003,51 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:172
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:177
 #, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr ""
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr ""
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:198
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:200
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -2925,102 +3058,102 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:209
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:3072 misc/util.c:129
+#: resize/main.c:356
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr ""
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr ""
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr ""
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr ""
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr ""
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3029,143 +3162,163 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr ""
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr ""
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr ""
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr ""
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 msgid " primary superblock features different from backup"
 msgstr ""
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:383
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr ""
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:390
 msgid " has filesystem last checked time in the future"
 msgstr ""
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr ""
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ""
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr ""
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
 msgstr ""
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr ""
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr ""
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr ""
 
-#: e2fsck/unix.c:679
-msgid "Invalid EA version.\n"
+#: e2fsck/unix.c:689
+msgid "Invalid EA version.\n"
+msgstr ""
+
+#: e2fsck/unix.c:702
+msgid "Invalid readahead buffer size.\n"
+msgstr ""
+
+#: e2fsck/unix.c:757
+#, c-format
+msgid "Unknown extended option: %s\n"
+msgstr ""
+
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
 msgstr ""
 
-#: e2fsck/unix.c:692
-msgid "Invalid readahead buffer size.\n"
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
 msgstr ""
 
-#: e2fsck/unix.c:725
-#, c-format
-msgid "Unknown extended option: %s\n"
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
 msgstr ""
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr ""
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr ""
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:903
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr ""
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1721 misc/tune2fs.c:2016 misc/tune2fs.c:2034
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr ""
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 msgid "The -n and -D options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 msgid "The -n and -c options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 msgid "The -n and -l/-L options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3173,30 +3326,31 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, c-format
 msgid ""
 "MMP interval is %u seconds and total wait time is %u seconds. Please "
 "wait...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr ""
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
 msgstr ""
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2708 misc/mke2fs.c:2759 misc/tune2fs.c:2798
+#: misc/tune2fs.c:2843 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3204,188 +3358,210 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2748 misc/tune2fs.c:2832
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr ""
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2774 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr ""
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 msgid "Error: ext2fs library version out of date!\n"
 msgstr ""
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr ""
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr ""
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr ""
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
 msgstr ""
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr ""
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1546
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr ""
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 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:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr ""
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1590
 msgid "Possibly non-existent or swap device?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1592
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr ""
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1748
 #, c-format
 msgid "while checking journal for %s"
 msgstr ""
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1751
 msgid "Cannot proceed with file system check"
 msgstr ""
 
-#: e2fsck/unix.c:1661
+#: e2fsck/unix.c:1762
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1774
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1780
 #, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1784
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1788
 #, c-format
 msgid "while recovering journal of %s"
 msgstr ""
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1810
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr ""
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1825
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr ""
+
+#: e2fsck/unix.c:1875
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr ""
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1878
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1918
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr ""
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1928
 msgid " Done.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1930
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
 msgstr ""
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1936
 msgid "aborted"
 msgstr ""
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1938
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1965
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1969
 msgid "while resetting context"
 msgstr ""
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2028
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+
+#: e2fsck/unix.c:2030
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr ""
+
+#: e2fsck/unix.c:2034 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
 "%s: ***** FILE SYSTEM WAS MODIFIED *****\n"
 msgstr ""
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:2039
 #, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr ""
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2049 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3393,96 +3569,96 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:195 misc/util.c:93
 msgid "yY"
 msgstr ""
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:196 misc/util.c:112
 msgid "nN"
 msgstr ""
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:197
 msgid "aA"
 msgstr ""
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:201
 msgid " ('a' enables 'yes' to all) "
 msgstr ""
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:218
 msgid "<y>"
 msgstr ""
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:220
 msgid "<n>"
 msgstr ""
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:222
 msgid " (y/n)"
 msgstr ""
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:245
 msgid "cancelled!\n"
 msgstr ""
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:278
 msgid "yes to all\n"
 msgstr ""
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:280
 msgid "yes\n"
 msgstr ""
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:282
 msgid "no\n"
 msgstr ""
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:292
 #, c-format
 msgid ""
 "%s? no\n"
 "\n"
 msgstr ""
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:296
 #, c-format
 msgid ""
 "%s? yes\n"
 "\n"
 msgstr ""
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:300
 msgid "yes"
 msgstr ""
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:300
 msgid "no"
 msgstr ""
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:316
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr ""
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:321
 msgid "reading inode and block bitmaps"
 msgstr ""
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:333
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr ""
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:345
 msgid "writing block and inode bitmaps"
 msgstr ""
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:350
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr ""
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:362
 #, c-format
 msgid ""
 "\n"
@@ -3491,460 +3667,464 @@ msgid ""
 "\t(i.e., without -a or -p options)\n"
 msgstr ""
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:442
 #, c-format
-msgid "Memory used: %luk/%luk (%luk/%luk), "
+msgid "Memory used: %lluk/%lluk (%lluk/%lluk), "
 msgstr ""
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
-msgid "Memory used: %lu, "
+msgid "Memory used: %lluk, "
 msgstr ""
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:454
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr ""
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:459
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr ""
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:494 e2fsck/util.c:508
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr ""
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:522 e2fsck/util.c:535
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr ""
 
-#: e2fsck/util.c:765
+#: e2fsck/util.c:793
 msgid ""
 "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
 "running.\n"
 msgstr ""
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr ""
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
-"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 ""
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr ""
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr ""
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr ""
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr ""
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr ""
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr ""
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr ""
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr ""
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr ""
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr ""
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr ""
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr ""
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr ""
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr ""
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr ""
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr ""
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
 msgstr ""
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr ""
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr ""
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr ""
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr ""
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr ""
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr ""
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr ""
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr ""
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr ""
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr ""
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr ""
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr ""
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr ""
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr ""
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr ""
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr ""
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr ""
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr ""
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr ""
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr ""
 
 #: misc/chattr.c:89
 #, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuFx] [-v version] files...\n"
 msgstr ""
 
-#: misc/chattr.c:159
+#: misc/chattr.c:161
 #, c-format
 msgid "bad project - %s\n"
 msgstr ""
 
-#: misc/chattr.c:173
+#: misc/chattr.c:175
 #, c-format
 msgid "bad version - %s\n"
 msgstr ""
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:221 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr ""
 
-#: misc/chattr.c:226
+#: misc/chattr.c:228
 #, c-format
 msgid "while reading flags on %s"
 msgstr ""
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:233 misc/chattr.c:245
 #, c-format
 msgid "Flags of %s set as "
 msgstr ""
 
-#: misc/chattr.c:252
+#: misc/chattr.c:254
 #, c-format
 msgid "while setting flags on %s"
 msgstr ""
 
-#: misc/chattr.c:260
+#: misc/chattr.c:262
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr ""
 
-#: misc/chattr.c:264
+#: misc/chattr.c:266
 #, c-format
 msgid "while setting version on %s"
 msgstr ""
 
-#: misc/chattr.c:271
+#: misc/chattr.c:273
 #, c-format
 msgid "Project of %s set as %lu\n"
 msgstr ""
 
-#: misc/chattr.c:275
+#: misc/chattr.c:277
 #, c-format
 msgid "while setting project on %s"
 msgstr ""
 
-#: misc/chattr.c:297
+#: misc/chattr.c:299
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr ""
 
-#: misc/chattr.c:337
+#: misc/chattr.c:339
 msgid "= is incompatible with - and +\n"
 msgstr ""
 
-#: misc/chattr.c:345
+#: misc/chattr.c:347
 msgid "Must use '-v', =, - or +\n"
 msgstr ""
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:80 misc/create_inode.c:119
 #, c-format
 msgid "while reading inode %u"
 msgstr ""
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:90 misc/create_inode.c:290 misc/create_inode.c:355
+#: misc/create_inode.c:393
 msgid "while expanding directory"
 msgstr ""
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:97
 #, c-format
 msgid "while linking \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:105 misc/create_inode.c:134 misc/create_inode.c:324
 #, c-format
 msgid "while writing inode %u"
 msgstr ""
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:154 misc/create_inode.c:178
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:165
 #, c-format
 msgid "while opening inode %u"
 msgstr ""
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:171 misc/create_inode.c:198 misc/create_inode.c:1045
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr ""
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:191 misc/create_inode.c:207
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:216
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr ""
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:226
 #, c-format
 msgid "while closing inode %u"
 msgstr ""
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:277
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:296
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:362
 #, c-format
 msgid "while creating symlink \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:380 misc/create_inode.c:965
 #, c-format
 msgid "while looking up \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:400
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:629
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr ""
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:807
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:817
 #, c-format
-msgid "while opening directory \"%s\""
+msgid "while scanning directory \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:827
 #, c-format
 msgid "while lstat \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:877
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:886
 msgid "malloc failed"
 msgstr ""
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:894
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:901
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr ""
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:912
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr ""
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:923
 #, c-format
 msgid "while writing file \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:936
 #, c-format
 msgid "while making dir \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:954
 msgid "while changing directory"
 msgstr ""
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:960
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:973
 #, c-format
 msgid "while setting inode for \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:980
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:1006
 msgid "while saving inode data"
 msgstr ""
 
+#: misc/create_inode.c:1056
+msgid "while copying xattrs on root directory"
+msgstr ""
+
 #: misc/dumpe2fs.c:56
 #, c-format
 msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+"Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
 msgstr ""
 
 #: misc/dumpe2fs.c:159
@@ -4055,94 +4235,54 @@ msgstr ""
 msgid "Bad blocks: %u"
 msgstr ""
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:375
 msgid "while reading journal inode"
 msgstr ""
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr ""
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr ""
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr ""
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr ""
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:218
 msgid "while reading journal superblock"
 msgstr ""
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr ""
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
+#: misc/dumpe2fs.c:470
+msgid "failed to alloc MMP buffer\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:514
+#: misc/dumpe2fs.c:481
 #, c-format
-msgid "Journal users:            %s\n"
+msgid "reading MMP block %llu from '%s'\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:511 misc/mke2fs.c:798 misc/tune2fs.c:2056
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:537
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:552
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:563
 #, c-format
 msgid ""
 "\n"
@@ -4156,224 +4296,225 @@ msgid ""
 "\tblocksize=<blocksize>\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:653 misc/mke2fs.c:1892
 #, c-format
 msgid "\tUsing %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:698 misc/e2image.c:1629 misc/tune2fs.c:2998
+#: resize/main.c:418
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
+#: misc/dumpe2fs.c:720
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:751
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:760
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
+msgid ""
+"Usage: %s [ -r|-Q ] [ -f ] [ -b superblock ] [ -B blocksize ] device image-"
+"file\n"
 msgstr ""
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr ""
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
 msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
+"       %s -ra [ -cfnp ] [ -o src_offset ] [ -O dest_offset ] src_fs "
 "[ dest_fs ]\n"
 msgstr ""
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595 misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr ""
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr ""
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr ""
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr ""
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr ""
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr ""
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr ""
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr ""
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr ""
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr ""
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr ""
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr ""
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr ""
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
 msgstr ""
 
-#: misc/e2image.c:626
+#: misc/e2image.c:636
 msgid ""
 "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr ""
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr ""
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr ""
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr ""
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr ""
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
 msgstr ""
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr ""
 
-#: misc/e2image.c:826
+#: misc/e2image.c:836
 msgid ""
 "Warning: There are still tables in the cache while putting the cache, data "
 "will be lost so the image may not be valid.\n"
 msgstr ""
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr ""
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr ""
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr ""
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr ""
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr ""
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
 msgstr ""
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr ""
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr ""
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr ""
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr ""
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr ""
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr ""
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr ""
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr ""
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr ""
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr ""
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4381,46 +4522,51 @@ msgid ""
 "Use -f option if you really want to do that.\n"
 msgstr ""
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr ""
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr ""
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr ""
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr ""
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr ""
+
+#: misc/e2image.c:1683
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr ""
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr ""
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
 msgstr ""
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr ""
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr ""
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr ""
@@ -4450,7 +4596,7 @@ msgstr ""
 msgid "e2label: not an ext2 filesystem\n"
 msgstr ""
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3203
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr ""
@@ -4465,161 +4611,163 @@ msgstr ""
 msgid "e2label: error writing superblock\n"
 msgstr ""
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1713
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr ""
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+msgid ""
+"Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> "
+"<filesystem>\n"
 msgstr ""
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr ""
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr ""
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr ""
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr ""
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr ""
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr ""
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, c-format
 msgid "while opening undo file `%s'\n"
 msgstr ""
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 msgid "while reading undo file"
 msgstr ""
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, c-format
 msgid "%s: Not an undo file.\n"
 msgstr ""
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr ""
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr ""
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr ""
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr ""
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr ""
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr ""
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr ""
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, c-format
 msgid "while opening `%s'"
 msgstr ""
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr ""
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 msgid "while reading keys"
 msgstr ""
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr ""
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr ""
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, c-format
 msgid "%s: block %llu is too long."
 msgstr ""
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, c-format
 msgid "while fetching block %llu."
 msgstr ""
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr ""
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, c-format
 msgid "while writing block %llu."
 msgstr ""
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr ""
@@ -4668,7 +4816,7 @@ msgid ""
 "mount_time           sb_uuid label\n"
 msgstr ""
 
-#: misc/findsuper.c:264
+#: misc/findsuper.c:265
 #, c-format
 msgid ""
 "\n"
@@ -4693,127 +4841,127 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr ""
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr ""
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr ""
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr ""
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr ""
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr ""
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
 msgstr ""
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr ""
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
 "number\n"
 msgstr ""
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr ""
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr ""
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr ""
 
-#: misc/fsck.c:1078
+#: misc/fsck.c:1085
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr ""
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3745
+#: misc/fuse2fs.c:3740
 msgid "Mounting read-only.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3769
+#: misc/fuse2fs.c:3764
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3776 misc/fuse2fs.c:3790
 #, c-format
 msgid "%s: %s.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3777 misc/fuse2fs.c:3792 misc/tune2fs.c:3098
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3799
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3807
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3822
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3826
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3831
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3835
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3839
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr ""
 
@@ -4837,7 +4985,7 @@ msgstr ""
 msgid "While reading version on %s"
 msgstr ""
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -4851,35 +4999,35 @@ msgid ""
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr ""
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr ""
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr ""
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -4887,245 +5035,259 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr ""
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr ""
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr ""
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
 "Could not write %d blocks in inode table starting at %llu: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2821 misc/mke2fs.c:3226
 msgid "done                            \n"
 msgstr ""
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr ""
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr ""
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr ""
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr ""
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr ""
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr ""
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr ""
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr ""
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr ""
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr ""
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr ""
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr ""
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:664
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr ""
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:672
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:675
 #, c-format
-msgid "Filesystem label=%s\n"
+msgid "Filesystem label=%.*s\n"
 msgstr ""
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:679
 #, c-format
 msgid "OS type: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:681
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr ""
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:684
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr ""
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:688
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr ""
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr ""
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:692
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr ""
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr ""
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:697
 #, c-format
 msgid "First data block=%u\n"
 msgstr ""
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:699
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr ""
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr ""
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:705
 #, c-format
 msgid "%u block groups\n"
 msgstr ""
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block group\n"
 msgstr ""
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:712
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u inodes per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:723
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:724
 msgid "Superblock backups stored on blocks: "
 msgstr ""
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:820
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr ""
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:826
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr ""
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:839
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr ""
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:853
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:865
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:879 misc/tune2fs.c:2084
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:896
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:918
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:933
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:956
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:963
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:987
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1013 misc/mke2fs.c:1022
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr ""
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1067
+#, c-format
+msgid "Invalid encoding: %s"
+msgstr ""
+
+#: misc/mke2fs.c:1085
 #, c-format
 msgid ""
 "\n"
@@ -5148,11 +5310,13 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1112
 #, c-format
 msgid ""
 "\n"
@@ -5160,41 +5324,52 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1123 misc/tune2fs.c:2220
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:1129 misc/tune2fs.c:2229
+#, c-format
+msgid ""
+"error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr ""
+
+#: misc/mke2fs.c:1177
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1190 misc/tune2fs.c:1072
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1202 misc/tune2fs.c:419
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1338
 #, c-format
 msgid ""
 "\n"
 "Your mke2fs.conf file does not define the %s filesystem type.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1342
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1346
 msgid "Aborting...\n"
 msgstr ""
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1387
 #, c-format
 msgid ""
 "\n"
@@ -5202,154 +5377,154 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1574
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1611
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1644
 #, c-format
 msgid "invalid block size - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1648
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1664
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1677
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr ""
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1691 misc/tune2fs.c:1810
 #, c-format
 msgid "bad error behavior - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1703
 msgid "Illegal number for blocks per group"
 msgstr ""
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1708
 msgid "blocks per group must be multiple of 8"
 msgstr ""
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1716
 msgid "Illegal number for flex_bg size"
 msgstr ""
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1722
 msgid "flex_bg size must be a power of 2"
 msgstr ""
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1727
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr ""
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1737
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1747
 #, c-format
 msgid "invalid inode size - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1684
+#: misc/mke2fs.c:1760
 msgid ""
 "Warning: -K option is deprecated and should not be used anymore. Use '-E "
 "nodiscard' extended option instead!\n"
 msgstr ""
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1771
 msgid "in malloc for bad_blocks_filename"
 msgstr ""
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1780
 #, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1789
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1804
 #, c-format
 msgid "bad num inodes - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1817
 msgid "while allocating fs_feature string"
 msgstr ""
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1834
 #, c-format
 msgid "bad revision level - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1839
 #, c-format
 msgid "while trying to create revision %d"
 msgstr ""
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1853
 msgid "The -t option may only be used once"
 msgstr ""
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1861
 msgid "The -T option may only be used once"
 msgstr ""
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1917 misc/mke2fs.c:3310
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1923
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1929
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1940
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr ""
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1970
 msgid "filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1988 resize/main.c:499
 msgid "while trying to determine filesystem size"
 msgstr ""
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1994
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
 msgstr ""
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:2001
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5357,128 +5532,149 @@ msgid ""
 "\tto re-read your partition table.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:2018
 msgid "Filesystem larger than apparent device size."
 msgstr ""
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:2038
 msgid "Failed to parse fs types list\n"
 msgstr ""
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2088
 msgid "The HURD does not support the filetype feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2093
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2098
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2103
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr ""
+
+#: misc/mke2fs.c:2113
 msgid "while trying to determine hardware sector size"
 msgstr ""
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2119
 msgid "while trying to determine physical sector size"
 msgstr ""
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2151
 msgid "while setting blocksize; too small for device\n"
 msgstr ""
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2156
 #, c-format
 msgid ""
 "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2180
 #, 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:2098
+#: misc/mke2fs.c:2194
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2216
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr ""
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2223
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2231
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2241
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2254
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr ""
 
-#: misc/mke2fs.c:2175
+#: misc/mke2fs.c:2271
 msgid ""
 "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
 "rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2291
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2297
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr ""
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2317
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2329
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2331
 #, c-format
 msgid ""
 "This may result in very poor performance, (re)-partitioning suggested.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2337
+#, c-format
+msgid ""
+"%s is capable of DAX but current block size %u is different from system page "
+"size %u so filesystem will not support DAX.\n"
+msgstr ""
+
+#: misc/mke2fs.c:2361
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2365
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2373
 #, c-format
 msgid ""
 "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
 "and journal checksum features.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2419
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
+msgstr ""
+
+#: misc/mke2fs.c:2430
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr ""
+
+#: misc/mke2fs.c:2455
 #, c-format
 msgid ""
 "\n"
@@ -5488,17 +5684,22 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2470
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr ""
+
+#: misc/mke2fs.c:2492
 msgid "Can't support bigalloc feature without extents feature"
 msgstr ""
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2499
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2507
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5506,44 +5707,39 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2519
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2528
 msgid "blocks per group count out of range"
 msgstr ""
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2550
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2562
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2577
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr ""
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2592
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr ""
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2599
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr ""
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2613
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5551,177 +5747,184 @@ msgid ""
 "\tor lower inode count (-N).\n"
 msgstr ""
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2800
 msgid "Discarding device blocks: "
 msgstr ""
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2816
 msgid "failed - "
 msgstr ""
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2875
 msgid "while initializing quota context"
 msgstr ""
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2882
 msgid "while writing quota inodes"
 msgstr ""
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2907
 #, c-format
 msgid "bad error behavior in profile - %s"
 msgstr ""
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2983
+msgid "in malloc for android_sparse_params"
+msgstr ""
+
+#: misc/mke2fs.c:2997
 msgid "while setting up superblock"
 msgstr ""
 
-#: misc/mke2fs.c:2849
+#: misc/mke2fs.c:3013
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Pass -O extents to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2856
+#: misc/mke2fs.c:3020
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
+#: misc/mke2fs.c:3028
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3052
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr ""
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3151
 #, c-format
 msgid "unknown os - %s"
 msgstr ""
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3214
 msgid "Allocating group tables: "
 msgstr ""
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3222
 msgid "while trying to allocate filesystem tables"
 msgstr ""
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3231
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
 msgstr ""
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3237
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr ""
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3278
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3291
 msgid "while reserving blocks for online resize"
 msgstr ""
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3303 misc/tune2fs.c:1516
 msgid "journal"
 msgstr ""
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3315
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr ""
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3322
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to add journal to device %s"
 msgstr ""
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3327 misc/mke2fs.c:3356 misc/mke2fs.c:3394
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1545 misc/tune2fs.c:1564
 msgid "done\n"
 msgstr ""
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3333
 msgid "Skipping journal creation in super-only mode\n"
 msgstr ""
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3343
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr ""
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3352
 msgid ""
 "\n"
 "\twhile trying to create journal"
 msgstr ""
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3364 misc/tune2fs.c:1137
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3369
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3385
 msgid "Copying files into the device: "
 msgstr ""
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3391
 msgid "while populating file system"
 msgstr ""
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3398
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 
-#: misc/mke2fs.c:3230
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
+#: misc/mke2fs.c:3405
+msgid "while writing out and closing file system"
 msgstr ""
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3408
 msgid ""
 "done\n"
 "\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
+#, c-format
+msgid "while zeroing block %llu for hugefile"
+msgstr ""
+
+#: misc/mk_hugefiles.c:515
 #, c-format
 msgid ""
 "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:584
 #, c-format
 msgid "Creating %lu huge file(s) "
 msgstr ""
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:586
 #, c-format
 msgid "with %llu blocks each"
 msgstr ""
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:595
 #, c-format
 msgid "while creating huge file %lu"
 msgstr ""
@@ -5760,288 +5963,322 @@ msgstr ""
 msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr ""
 
-#: misc/tune2fs.c:119
+#: misc/tune2fs.c:120
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+
+#: misc/tune2fs.c:122
 msgid "Please run e2fsck -f on the filesystem.\n"
 msgstr ""
 
-#: misc/tune2fs.c:121
+#: misc/tune2fs.c:124
 msgid "Please run e2fsck -fD on the filesystem.\n"
 msgstr ""
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:137
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
 msgstr ""
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:225
 msgid "Journal superblock not found!\n"
 msgstr ""
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:283
 msgid "while trying to open external journal"
 msgstr ""
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:289 misc/tune2fs.c:2889
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:298 misc/tune2fs.c:2898
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr ""
+
+#: misc/tune2fs.c:305 misc/tune2fs.c:2905
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:329
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:338
 msgid "Journal removed\n"
 msgstr ""
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:382
 msgid "while reading bitmaps"
 msgstr ""
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:390
 msgid "while clearing journal inode"
 msgstr ""
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:401
 msgid "while writing journal inode"
 msgstr ""
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:437 misc/tune2fs.c:462 misc/tune2fs.c:475
 msgid "(and reboot afterwards!)\n"
 msgstr ""
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:490
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr ""
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:493
 #, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr ""
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:497
 #, c-format
 msgid " -z \"%s\""
 msgstr ""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:499
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:501
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1039
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1075
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1081
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1090
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1098
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1116
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1129
 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:1082
+#: misc/tune2fs.c:1147
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1156
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1164
 msgid "Error while reading bitmaps\n"
 msgstr ""
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1173
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr ""
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1178
 msgid "while reading MMP block."
 msgstr ""
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1210
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1221
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1232
 msgid "Enabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1235
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1175
+#: misc/tune2fs.c:1241
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Re-run with -O extent to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1182
+#: misc/tune2fs.c:1248
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Run resize2fs -b to "
 "rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1274
 msgid "Disabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1277
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1318
+msgid "Cannot enable uninit_bg on a mounted filesystem!\n"
+msgstr ""
+
+#: misc/tune2fs.c:1333
+msgid "Cannot disable uninit_bg on a mounted filesystem!\n"
+msgstr ""
+
+#: misc/tune2fs.c:1352
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1362
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1392
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1413
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1430 misc/tune2fs.c:2182
+msgid ""
+"The casefold feature may only be enabled when the filesystem is unmounted.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1442
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1460
 msgid ""
 "UUID has changed since enabling metadata_csum.  Filesystem must be "
 "unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1466
+msgid "Recalculating checksums could take some time."
+msgstr ""
+
+#: misc/tune2fs.c:1509
 msgid "The filesystem already has a journal.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1529
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to open journal on %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1533
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr ""
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1541
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr ""
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1547
 msgid "Creating journal inode: "
 msgstr ""
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1561
 msgid ""
 "\n"
 "\twhile trying to create journal file"
 msgstr ""
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1599
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1612
 msgid "while initializing quota context in support library"
 msgstr ""
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1627
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr ""
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1637
 #, c-format
 msgid "while writing quota file (%d)"
 msgstr ""
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1655
 #, c-format
 msgid "while removing quota file (%d)"
 msgstr ""
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1698
 msgid ""
 "\n"
 "Bad quota options specified.\n"
@@ -6055,65 +6292,65 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1756
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr ""
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1781 misc/tune2fs.c:1794
 #, c-format
 msgid "bad mounts count - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1837
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1870
 #, c-format
 msgid "bad interval - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1899
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1914
 msgid "-o may only be specified once"
 msgstr ""
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1923
 msgid "-O may only be specified once"
 msgstr ""
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1940
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1969
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1986
 #, c-format
 msgid "bad inode size - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1993
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr ""
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2093
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2098
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
 msgid_plural ""
@@ -6121,27 +6358,52 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2107
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr ""
+
+#: misc/tune2fs.c:2125
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2140
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2155
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2161
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2188
+#, c-format
+msgid "Cannot alter existing encoding\n"
+msgstr ""
+
+#: misc/tune2fs.c:2194
+#, c-format
+msgid "Invalid encoding: %s\n"
+msgstr ""
+
+#: misc/tune2fs.c:2200
+#, c-format
+msgid "Setting encoding to '%s'\n"
+msgstr ""
+
+#: misc/tune2fs.c:2224
+#, c-format
+msgid "Setting encoding_flags to '%s'\n"
+msgstr ""
+
+#: misc/tune2fs.c:2234
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6153,271 +6415,281 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 msgstr ""
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2707
 msgid "Failed to read inode bitmap\n"
 msgstr ""
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2712
 msgid "Failed to read block bitmap\n"
 msgstr ""
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2729 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr ""
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2732
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr ""
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2738
 msgid "Not enough space to increase inode size \n"
 msgstr ""
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2743
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr ""
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2775
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
 msgstr ""
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2985
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+
+#: misc/tune2fs.c:2992
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:3004
 msgid "Cannot modify a journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:3017
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:3024
 msgid "Shrinking inode size is not supported\n"
 msgstr ""
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:3029
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:3035
 msgid "Resizing inodes could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3084
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+
+#: misc/tune2fs.c:3093
+#, c-format
+msgid "Recovering journal.\n"
+msgstr ""
+
+#: misc/tune2fs.c:3114
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3120
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3125
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3130
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3135
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr ""
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3142
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr ""
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3149
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3155
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr ""
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3162
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3167
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3170
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3180
 #, c-format
 msgid ""
 "\n"
 "Sparse superblock flag set.  %s"
 msgstr ""
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3185
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3193
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3199
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3231
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr ""
 
-#: misc/tune2fs.c:3024
+#: misc/tune2fs.c:3249
 msgid ""
 "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3269
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr ""
+
+#: misc/tune2fs.c:3286
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3051
+#: misc/tune2fs.c:3289
 msgid ""
 "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
 "and re-run this command.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr ""
-
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3320
 msgid "Invalid UUID format\n"
 msgstr ""
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3336
 msgid "Need to update journal superblock.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3358
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3365
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3383
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3387
 msgid "Failed to change inode size\n"
 msgstr ""
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3401
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3406
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3413
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr ""
-
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr ""
 
-#: misc/util.c:104
+#: misc/util.c:105
 #, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
 msgstr ""
 
-#: misc/util.c:108
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
 msgstr ""
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr ""
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr ""
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr ""
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
 "Could not find journal device matching %s\n"
 msgstr ""
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -6434,13 +6706,13 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
 msgstr ""
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -6448,13 +6720,13 @@ msgid ""
 "between 1024 and 10240000 blocks.  Aborting.\n"
 msgstr ""
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
 msgstr ""
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
@@ -6607,40 +6879,40 @@ msgstr ""
 #, c-format
 msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"[-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr ""
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr ""
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr ""
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr ""
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr ""
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr ""
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr ""
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -6648,47 +6920,51 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:365
+#: resize/main.c:368
 #, c-format
 msgid "while opening %s"
 msgstr ""
 
-#: resize/main.c:373
+#: resize/main.c:376
 #, c-format
 msgid "while getting stat information for %s"
 msgstr ""
 
-#: resize/main.c:445
+#: resize/main.c:453
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:464
+#: resize/main.c:472
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr ""
 
-#: resize/main.c:501
+#: resize/main.c:509
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr ""
 
-#: resize/main.c:520
+#: resize/main.c:528
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr ""
 
-#: resize/main.c:528
+#: resize/main.c:541
+msgid "New size results in too many block group descriptors.\n"
+msgstr ""
+
+#: resize/main.c:548
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr ""
 
-#: resize/main.c:534
+#: resize/main.c:554
 msgid "Invalid stride length"
 msgstr ""
 
-#: resize/main.c:558
+#: resize/main.c:578
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -6696,82 +6972,82 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:565
+#: resize/main.c:585
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr ""
 
-#: resize/main.c:569
+#: resize/main.c:589
 #, c-format
 msgid ""
 "Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
 "blocks.\n"
 msgstr ""
 
-#: resize/main.c:575
+#: resize/main.c:595
 #, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr ""
 
-#: resize/main.c:581
+#: resize/main.c:601
 #, c-format
 msgid ""
 "Please enable the extents feature with tune2fs before enabling the 64bit "
 "feature.\n"
 msgstr ""
 
-#: resize/main.c:587
+#: resize/main.c:607
 #, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:594
+#: resize/main.c:614
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr ""
 
-#: resize/main.c:599
+#: resize/main.c:619
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr ""
 
-#: resize/main.c:608
+#: resize/main.c:627
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr ""
 
-#: resize/main.c:610
+#: resize/main.c:629
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr ""
 
-#: resize/main.c:612
+#: resize/main.c:631
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr ""
 
-#: resize/main.c:621
+#: resize/main.c:640
 #, c-format
 msgid "while trying to resize %s"
 msgstr ""
 
-#: resize/main.c:624
+#: resize/main.c:643
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
 "after the aborted resize operation.\n"
 msgstr ""
 
-#: resize/main.c:630
+#: resize/main.c:649
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:645
+#: resize/main.c:664
 #, c-format
 msgid "while trying to truncate %s"
 msgstr ""
@@ -6832,12 +7108,12 @@ msgstr ""
 msgid "While trying to extend the last group"
 msgstr ""
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr ""
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
 msgid ""
 "Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
@@ -6846,35 +7122,35 @@ msgstr ""
 
 #: resize/resize2fs.c:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
+msgid "inodes (%llu) must be less than %u\n"
 msgstr ""
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr ""
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr ""
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr ""
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:11
-msgid "EXT2FS Library version 1.43.4-WIP"
+msgid "EXT2FS Library version 1.45.6"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:12
@@ -7434,7 +7710,7 @@ msgid "MMP: device currently active"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
+msgid "MMP: e2fsck being run"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:152
@@ -7490,7 +7766,7 @@ msgid "Unknown checksum algorithm"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
+msgid "MMP block checksum does not match"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:166
@@ -7585,6 +7861,14 @@ msgstr ""
 msgid "Inode is corrupted"
 msgstr ""
 
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
+
+#: lib/ext2fs/ext2_err.c:190
+msgid "Group descriptors not loaded"
+msgstr ""
+
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
 msgstr ""
@@ -7709,68 +7993,68 @@ msgstr ""
 msgid "Bad magic value in profile_file_data_t"
 msgstr ""
 
-#: lib/support/plausible.c:118
+#: lib/support/plausible.c:114
 #, c-format
-msgid "\tlast mounted on %s on %s"
+msgid "\tlast mounted on %.*s on %s"
 msgstr ""
 
-#: lib/support/plausible.c:121
+#: lib/support/plausible.c:117
 #, c-format
 msgid "\tlast mounted on %s"
 msgstr ""
 
-#: lib/support/plausible.c:124
+#: lib/support/plausible.c:120
 #, c-format
 msgid "\tcreated on %s"
 msgstr ""
 
-#: lib/support/plausible.c:127
+#: lib/support/plausible.c:123
 #, c-format
 msgid "\tlast modified on %s"
 msgstr ""
 
-#: lib/support/plausible.c:161
+#: lib/support/plausible.c:157
 #, c-format
 msgid "Found a %s partition table in %s\n"
 msgstr ""
 
-#: lib/support/plausible.c:191
+#: lib/support/plausible.c:187
 #, c-format
 msgid "The file %s does not exist and no size was specified.\n"
 msgstr ""
 
-#: lib/support/plausible.c:199
+#: lib/support/plausible.c:195
 #, c-format
 msgid "Creating regular file %s\n"
 msgstr ""
 
-#: lib/support/plausible.c:202
+#: lib/support/plausible.c:198
 #, c-format
 msgid "Could not open %s: %s\n"
 msgstr ""
 
-#: lib/support/plausible.c:205
+#: lib/support/plausible.c:201
 msgid ""
 "\n"
 "The device apparently does not exist; did you specify it correctly?\n"
 msgstr ""
 
-#: lib/support/plausible.c:227
+#: lib/support/plausible.c:223
 #, c-format
 msgid "%s is not a block special device.\n"
 msgstr ""
 
-#: lib/support/plausible.c:249
+#: lib/support/plausible.c:245
 #, c-format
 msgid "%s contains a %s file system labelled '%s'\n"
 msgstr ""
 
-#: lib/support/plausible.c:252
+#: lib/support/plausible.c:248
 #, c-format
 msgid "%s contains a %s file system\n"
 msgstr ""
 
-#: lib/support/plausible.c:276
+#: lib/support/plausible.c:272
 #, c-format
 msgid "%s contains `%s' data\n"
 msgstr ""
index f109d9a..fce4bcd 100644 (file)
Binary files a/po/eo.gmo and b/po/eo.gmo differ
index 0271d90..08fbf62 100644 (file)
--- a/po/eo.po
+++ b/po/eo.po
@@ -51,7 +51,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
@@ -73,7 +73,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: e2fsprogs-1.42.12-pre2\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
+"POT-Creation-Date: 2018-08-18 21:03-0400\n"
 "PO-Revision-Date: 2014-08-31 18:44+0200\n"
 "Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
@@ -81,10 +81,11 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 "X-Generator: Lokalize 1.0\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Malbona bloko %u estas ekster gamo; ĝi ignoriĝas.\n"
@@ -97,11 +98,12 @@ msgstr "dum sankontrolo de malbonbloka i-nodo"
 msgid "while reading the bad blocks inode"
 msgstr "dum legado de malbonbloka i-nodo"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1550
+#: e2fsck/unix.c:1664 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1404
+#: misc/e2image.c:1588 misc/e2image.c:1609 misc/mke2fs.c:236
+#: misc/tune2fs.c:2837 misc/tune2fs.c:2931 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "dum provo de malfermi %s"
@@ -111,7 +113,7 @@ msgstr "dum provo de malfermi %s"
 msgid "while trying popen '%s'"
 msgstr "dum provo de malfermi dukton al '%s'"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "dum legado de listo de malbonaj blokoj el dosiero"
 
@@ -124,6 +126,11 @@ msgstr "dum ĝisdatigo de malbonbloka i-nodo"
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr "Averto: nevalida bloko %u troviĝis malbonbloka i-nodo.  Viŝiĝis.\n"
 
+#: e2fsck/dirinfo.c:331
+#, fuzzy
+msgid "while freeing dir_info tdb file"
+msgstr "dum legado de radika i-nodo"
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -201,12 +208,12 @@ msgstr ""
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Uzmaniero:  %s [-F] [-I BUFROBLOKNOMBRO] APARATO\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1075
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "dum malfermo de %s por elbufrigo"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1081 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "dum provo de elbufrigi %s"
@@ -216,11 +223,11 @@ msgstr "dum provo de elbufrigi %s"
 msgid "while trying to open '%s'"
 msgstr "dum provo de malfermi '%s'"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1297
 msgid "while opening inode scan"
 msgstr "dum malfermo de i-noda skano"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1316
 msgid "while getting next inode"
 msgstr "dum preno de sekva i-nodo"
 
@@ -229,31 +236,31 @@ msgstr "dum preno de sekva i-nodo"
 msgid "%u inodes scanned.\n"
 msgstr "Skaniĝis %u i-nodoj.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "dum legado de kaŝprotokola ĉefbloko\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: ne troviĝis valida kaŝprotokola ĉefbloko\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: kaŝprotokolo tro mallongas\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3786
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: restaŭriĝas kaŝprotokolo...\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: ne restaŭriĝos kaŝprotokolo en nurlega stato\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "dum provo de remalfermi %s"
@@ -261,331 +268,354 @@ msgstr "dum provo de remalfermi %s"
 # ****************************************************************
 # *** La sekvaj mallongigoj preskaŭ ĉiuj uziĝas en la traduko. ***
 # ****************************************************************
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "aetendita atributo"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Aeraro dum asigno"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bbloko"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bbitmapo"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "c<senuza>"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Ckonfliktas kun alia dosiersistema bloko"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "ddosierujo"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Dforigita"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "eero"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "Eero '%Dn' en %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "fdosiersistemo"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fpor @i %i (%Q) estas"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "ggrupo"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "h'HTREE'-a uja @i"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "ii-nodo"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Inevalida"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jkaŝprotokolo"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Lestas ligo"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mpluroble posedata"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "nmalvalida"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oorfa"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pproblemo en"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qkvoto"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "rradika @i"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "sdevus esti"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Sĉefbloko"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "unekonektita"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vaparato"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xamplekso"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "znullonga"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<La NULL-a i-nodo>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<La malbonbloka i-nodo>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<La uzantkvota i-nodo>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<La grupkvota i-nodo>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<La startiga i-nodo>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<La malforiguja i-nodo>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<La gruppriaĵa i-nodo>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<La kaŝprotokola i-nodo>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Rezervita i-nodo 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Rezervita i-nodo 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "normala dosiero"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "dosierujo"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "signo-aparato"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "blokaparato"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "nomita dukto"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "simbola ligo"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "konektilo"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "nekonata dosiertipo kun moduso 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "nerekta bloko"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "duoble nerekta bloko"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "trioble nerekta bloko"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "traduka bloko"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "bloko #"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr ""
+
+#: e2fsck/message.c:485
+#, fuzzy
+msgid "group"
+msgstr "ggrupo"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr ""
+
+#: e2fsck/message.c:491
+#, fuzzy
+msgid "unknown quota type"
+msgstr "nekonata mastrumsistemo: %s"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "mapo de pluroble posedataj i-nodoj"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr ""
 
 # FIXME -- is a debug message?
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr ""
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr ""
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr ""
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:356
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr ""
+
+#: e2fsck/pass1.c:774 e2fsck/pass2.c:1005
 msgid "reading directory block"
 msgstr "legante dosierujan blokon"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1223
 msgid "in-use inode map"
 msgstr "mapo de uzataj i-nodoj"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1234
 msgid "directory inode map"
 msgstr "mapo de dosierujaj i-nodoj"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1244
 msgid "regular file inode map"
 msgstr "mapo de normaldosieraj i-nodoj"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1253 misc/e2image.c:1272
 msgid "in-use block map"
 msgstr "mapo de uzataj blokoj"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1262
 #, fuzzy
 msgid "metadata block map"
 msgstr "mapo de blokoj kun etenditaj atributoj"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1324
 msgid "opening inode scan"
 msgstr "malfermante i-nodan skanon"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1362
 msgid "getting next inode from scan"
 msgstr "prenante sekvan i-nodon el skano"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2066
 msgid "Pass 1"
 msgstr "Paŝo 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2127
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "legante nerektajn blokojn de i-nodo %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2178
 msgid "bad inode map"
 msgstr "mapo de malbonaj i-nodoj"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2218
 msgid "inode in bad block map"
 msgstr "i-nodo en mapo de difektaj blokoj"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2238
 msgid "imagic inode map"
 msgstr "mapo de 'imagic'-i-nodoj"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2269
 msgid "multiply claimed block map"
 msgstr "mapo de pluroble posedataj i-nodoj"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2394
 msgid "ext attr block map"
 msgstr "mapo de blokoj kun etenditaj atributoj"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3637
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr ""
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4054
 msgid "block bitmap"
 msgstr "bloka bitmapo"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4060
 msgid "inode bitmap"
 msgstr "i-noda bitmapo"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4066
 msgid "inode table"
 msgstr "i-noda tabelo"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Paŝo 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1077 e2fsck/pass2.c:1244
 msgid "Can not continue."
 msgstr "Ne eblas daŭrigi."
 
@@ -605,19 +635,19 @@ msgstr "Paŝo 3"
 msgid "inode loop detection bitmap"
 msgstr "bitmapo por i-noda buklorekono"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Paŝo 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Paŝo 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr ""
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr ""
 
@@ -782,18 +812,18 @@ msgid "WILL RECREATE"
 msgstr "ESTOS REESTIGATA"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:112
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "bloka @B por @g %g ne estas en @g.  (@b %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:116
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "i-noda @B por @g %g ne estas en @g.  (@b %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:121
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -810,7 +840,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:127
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -826,7 +856,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:138
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -839,7 +869,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:145
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -850,18 +880,18 @@ msgstr ""
 "malsamas al blokgrando.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:152
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "En @S: blocks_per_group = %b, devus esti %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:157
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "En @S: first_data_block = %b, devus esti %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:162
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -869,7 +899,7 @@ msgstr ""
 "Dosiersistemo ne havas UUID-on; unu generiĝas.\n"
 "\n"
 
-#: e2fsck/problem.c:165
+#: e2fsck/problem.c:167
 #, c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
@@ -881,50 +911,50 @@ msgid ""
 msgstr ""
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:176
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Troviĝis difekto en @S; (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
+#: e2fsck/problem.c:181
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Eraro dum eltrovo de grando de fizika aparato: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:186
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "I-noda nombro en ĉefbloko estas %i, @s %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:190
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr ""
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
+#: e2fsck/problem.c:195
 #, c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "Ĉefbloko havas malvalidan kaŝprotokolon (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:200
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr ""
 "Ekstera kaŝprotokolo havas plurajn dosiersistemajn uzantojn (ne "
 "subtenatas).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:205
 msgid "Can't find external @j\n"
 msgstr "Ne eblas trovi eksteran kaŝprotokolon.\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:210
 msgid "External @j has bad @S\n"
 msgstr "Ekstera kaŝprotokolo havas malbonan ĉefblokon.\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:215
 msgid "External @j does not support this @f\n"
 msgstr "Ekstera kaŝprotokolo ne subtenas ĉi tiun dosiersistemon.\n"
 
@@ -932,7 +962,7 @@ msgstr "Ekstera kaŝprotokolo ne subtenas ĉi tiun dosiersistemon.\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:220
 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 "
@@ -941,80 +971,80 @@ msgid ""
 msgstr ""
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:228
 msgid "@j @S is corrupt.\n"
 msgstr "Kaŝprotokola ĉefbloko estas difekta.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:233
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "Maljesas ĉefbloka flago 'has_journal', sed ekzistas kaŝprotokolo.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:238
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr "Jesas ĉefbloka flago 'needs_recovery', sed ne ekzistas @j.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:243
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "Maljesas ĉefbloka flago 'needs_recovery', sed @j enhavas datumojn.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:248
 msgid "Clear @j"
 msgstr "Ĉu viŝi kaŝprotokolon"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:253 e2fsck/problem.c:764
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr "Dosiersistemo havas jesajn funkciajn flagojn, sed estas revizio 0.  "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:258
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s orfan i-nodon %i (uid=%Iu, gid=%Ig, moduso=%Im, grando=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:263
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "@I %B (%b) troviĝis en @o @i %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:268
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Jamviŝita %B (%b) troviĝis en @o @i %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
+#: e2fsck/problem.c:273
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@I @o @i %i en @S.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
+#: e2fsck/problem.c:278
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@I @i %i en listo de orfaj i-nodoj.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:283
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr "Kaŝprotokola @S havas nekonatan jesan nurlegan funkcian flagon.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:288
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr "Kaŝprotokola @S havas nekonatan jesan nekongruan funkcian flagon.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:293
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "La kaŝprotokola versio ne subtenatas por ĉi tiu 'e2fsck'.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
+#: e2fsck/problem.c:298
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -1025,7 +1055,7 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
+#: e2fsck/problem.c:303
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -1037,7 +1067,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:308
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1045,18 +1075,18 @@ msgid ""
 msgstr ""
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:314
 msgid "Run @j anyway"
 msgstr "Ĉu tamen ruli kaŝprotokolon"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:319
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr "Restaŭra flago maljesas en savkopia @S, tamen ruliĝas @j.\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:324
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1066,7 +1096,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:330
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1075,18 +1105,18 @@ msgstr ""
 "estas %N; @s nulo.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:336
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr "Maljesas 'resize_inode', sed la regrandiga @i estas nenula.  "
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:341
 msgid "Resize @i not valid.  "
 msgstr "La regrandiga @i malvalidas.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:346
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1096,7 +1126,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:351
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1105,14 +1135,14 @@ msgstr ""
 "    nun = %T) estas en la estonteco.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
+#: e2fsck/problem.c:356
 #, c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "Ĉefbloka indiko por ekstera @S @s %X.  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:361
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1121,39 +1151,39 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:366
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "kontrolsumo de gruppriaĵo %g estas %04x, @s %04y.  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:371
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr ""
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:376
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr ""
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:381
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Lasta grupa bloka bitmapo estas sen pravalorizo.  "
 
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:386
 #, c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "Kaŝprotokola transakcio %i estis difekta; refarado abortiĝis.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:391
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr ""
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:396
 #, fuzzy
 msgid ""
 "@S last mount time is in the future.\n"
@@ -1167,7 +1197,7 @@ msgstr ""
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:402
 #, fuzzy
 msgid ""
 "@S last write time is in the future.\n"
@@ -1179,209 +1209,230 @@ msgstr ""
 "horloĝo)  "
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:408
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr "Unu aŭ pluraj blokgrupaj priaĵoj havas nevalidan kontrolsumon.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:413
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Nombro de liberaj i-nodoj agordiĝas al %j (estis %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:418
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Nombro de liberaj blokoj agordiĝas al %c (estis %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:423
+#, fuzzy
+msgid "Hiding %U @q @i %i (%Q).\n"
 msgstr "La kvota @i %i (%Q) fariĝas kaŝita.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:428
 msgid "@S has invalid MMP block.  "
 msgstr "Ĉefbloko havas nevalidan MMP-blokon.  "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:433
 msgid "@S has invalid MMP magic.  "
 msgstr "Ĉefbloko havas nevalidan maginumeron por MMP.  "
 
-#: e2fsck/problem.c:433
+#: e2fsck/problem.c:438
 #, c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2(): %m\n"
 
-#: e2fsck/problem.c:438
+#: e2fsck/problem.c:443
 #, c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc(): %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
+#: e2fsck/problem.c:449
 msgid ""
 "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
 "simultaneously."
 msgstr ""
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:455
 #, fuzzy
-msgid "@S MMP block checksum does not match MMP block.  "
+msgid "@S MMP @b checksum does not match.  "
 msgstr "Kontrolsumo de MMP-bloko ne konkordas kun MMP-bloko"
 
 # FIXME -- missing "of"?
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:460
+#, fuzzy
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr ""
 "@S de 64-bitaj dosiersistemoj bezonas ampleksojn por atingi la tutan "
 "diskon.  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:465
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr ""
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:470
 #, fuzzy
 msgid "External @j @S checksum does not match @S.  "
 msgstr "Kontrolsumo de 'extent'-bloko ne konkordas kun bloko"
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:475
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr ""
 
-#: e2fsck/problem.c:477
+#: e2fsck/problem.c:480
 #, c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr ""
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:485
 msgid "Bad required extra isize in @S (%N).  "
 msgstr ""
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:490
 msgid "Bad desired extra isize in @S (%N).  "
 msgstr ""
 
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:495
+#, fuzzy
+msgid "Invalid %U @q @i %i.  "
+msgstr "@u @i %i kun nula longo.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:500
+msgid "@S would have too many inodes (%N).\n"
+msgstr ""
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:505
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
+msgstr ""
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:513
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Paŝo 1: Kontrolo de i-nodoj, blokoj kaj grandoj...\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:517
 msgid "@r is not a @d.  "
 msgstr "@r ne estas @d.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:522
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "@r havas 'dtime'-an valoron (probable kaŭze de olda 'mke2fs').  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:527
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Rezervita i-nodo %i (%Q) havas nevalidan moduson.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:532
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "@D @i %i havas nulan 'dtime'.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:537
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "@i %i uziĝas, sed havas 'dtime'-an valoron.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:542
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "@i %i estas @d kun nula longo.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:547
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "bloka @B (%b) de @g %g @C.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:552
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "i-noda @B (%b) de @g %g @C.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:557
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "i-noda tabelo (%b) de @g %g @C.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:562
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "bloka @B (%b) de @g %g malbonas.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:567
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "i-noda @B (%b) de @g %g malbonas.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:572
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, 'i_size' estas %Is, @s %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:577
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, 'i_blocks' estas %Ib, @s %N.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:582
 msgid "@I %B (%b) in @i %i.  "
 msgstr "@I %B (%b) en @i %i.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:587
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B (%b) parte kovras dosiersistemajn metadatumojn en @i %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "I-nodo %i havas nevalida(j)n bloko(j)n.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Tro multaj nevalidaj blokoj en i-nodo %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "@I %B (%b) en malbonbloka @i.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:607
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "Malbonbloka i-nodo havas nevalida(j)n bloko(j)n.  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:612
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Duobla aŭ malbona bloko uziĝas!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:617
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "Malbona bloko %b uziĝas kiel nerekta bloko de malbonbloka i-nodo.  "
 
@@ -1389,7 +1440,7 @@ msgstr "Malbona bloko %b uziĝas kiel nerekta bloko de malbonbloka i-nodo.  "
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:622
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1403,7 +1454,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:629
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1414,7 +1465,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:634
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1425,125 +1476,125 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:640
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "La unua ĉefbloko (%b) estas en la malbonbloka listo.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:645
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr "Bloko %b en la unuaj gruppriaĵoj estas en la malbonbloka listo.\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:651
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Averto: ĉefbloko %b de grupo %g malbonas.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:657
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 "Averto: en grupo %g la kopio de la gruppriaĵoj havas malbonan blokon (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:663
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 "**Programmiso?**  Bloko %b senrezone pretendiĝis en process_bad_block().\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:669
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A de %N koneksaj blokoj en @b @g %g por %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:674
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A de blokbufro por transloki %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:679
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "De @g %g translokiĝas %s de %b al %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:684
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "De @g %g translokiĝas %s al %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:689
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Averto: malsukcesis legi blokon %b de %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:694
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Averto: malsukcesis skribi blokon %b por %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:699 e2fsck/problem.c:1776
 msgid "@A @i @B (%N): %m\n"
 msgstr "@A de i-noda @B (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:704
 msgid "@A @b @B (%N): %m\n"
 msgstr "@A de bloka @B (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:709
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A de 'icount'-a liginformo: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:714
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A de uja blokaro: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
+#: e2fsck/problem.c:719
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Eraro dum skanado de i-nodoj (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
+#: e2fsck/problem.c:724
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Eraro dum iteracio je blokoj en @i %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:729
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 "Eraro dum skribado de informo pri i-noda nombro (@i=%i, nombro=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:734
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 "Eraro dum skribado de informo pri uja bloko (@i=%i, @b=%b, numero=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
+#: e2fsck/problem.c:740
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Eraro dum legado de @i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:748
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "@i %i havas jesan flagon 'imagic'.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:753
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1553,109 +1604,109 @@ msgstr ""
 "'immutable' aŭ 'append-only'.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
+#: e2fsck/problem.c:759
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Speciala @i %i (aparato/konektilo/vicmemoro) havas nenulan grandon.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:769
 msgid "@j @i is not in use, but contains data.  "
 msgstr "Kaŝprotokola i-nodo ne uziĝas, sed enhavas datumojn.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:774
 msgid "@j is not regular file.  "
 msgstr "Kaŝprotokolo ne estas normala dosiero.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:779
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "I-nodo %i estis en la listo de orfaj i-nodoj.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:785
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr "Troviĝis i-nodoj kiuj estis anoj en difekta listo de orfoj.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:790
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A de 'refcount'-a strukturo (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:795
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Eraro dum legado de @b %b de etenditaj atributoj por @i %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:800
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "@i %i havas malbonan blokon %b de etenditaj atributoj.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:805
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Eraro dum legado de @b %b de etenditaj atributoj (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:810
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "@b %b de etenditaj atributoj havas referencnombron %r, @s %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:815
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Eraro dum skribado de @b %b de etenditaj atributoj (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:820
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "@b %b de etenditaj atributoj havas 'h_blocks > 1'.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:825
 #, fuzzy
 msgid "@A @a region allocation structure.  "
 msgstr "@A de 'icount'-a strukturo: %m\n"
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:830
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "@b %b de etenditaj atributoj estas difekta (asigna kolizio).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:835
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "@b %b de etenditaj atributoj estas difekta (malvalida nomo).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:840
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "@b %b de etenditaj atributoj estas difekta (malvalida valoro).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
+#: e2fsck/problem.c:845
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "@i %i tro grandas.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:849
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B (%b) estigas dosierujon tro granda.  "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:854
 msgid "%B (%b) causes file to be too big.  "
 msgstr "%B (%b) estigas dosieron tro granda.  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:859
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "%B (%b) estigas simbolan ligon tro granda.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:864
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
@@ -1663,36 +1714,36 @@ msgstr ""
 "'HTREE'.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
+#: e2fsck/problem.c:869
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "@i %i havas jesan flagon 'INDEX_FL' sed ne estas @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
+#: e2fsck/problem.c:874
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "@h %i havas malvalidan radikan nodon.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:879
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "@h %i havas nesubtenatan haketan version (%N).\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
+#: e2fsck/problem.c:884
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "@h %i uzas nekongruan flagon por 'HTREE'-a radika nodo.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:889
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "@h %i havas arban profundon (%N) kiu tro grandas\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:895
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1701,56 +1752,56 @@ msgstr ""
 "kun dosiersistemaj metadatumoj.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
+#: e2fsck/problem.c:901
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Malsukcesis (re)kreado de regrandiga @i: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:906
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "@i %i havas kroman grandon (%IS) kiu malvalidas\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:911
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "@a en @i %i havas nomlongon (%N) kiu malvalidas\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:916
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "@a en @i i havas valoran pozicion (%N) kiu malvalidas\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:921
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "@a en @i i havas valoran blokon (%N) kiu malvalidas (devus esti 0)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:926
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "@a en @i i havas valoran grandon (%N) kiu malvalidas\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:931
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "@a en @i i havas haketon (%N) kiu malvalidas\n"
 
 # XXX  what is %It??
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:936
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "@i %i estas %It sed ŝajnas ke ĝi vere estas ujo.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
+#: e2fsck/problem.c:941
 #, c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Eraro dum legado tra arbo de ampleksoj en @i %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:946
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1760,7 +1811,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:952
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1770,7 +1821,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:957
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1779,7 +1830,7 @@ msgstr ""
 "    (logika @b %c, fizika @b %b, @n longo %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
+#: e2fsck/problem.c:962
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr ""
@@ -1787,25 +1838,25 @@ msgstr ""
 "ampleksoj.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
+#: e2fsck/problem.c:967
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr "@i %i estas en ampleksa aranĝo, sed @S ne havas funkcion 'EXTENTS'\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
+#: e2fsck/problem.c:972
 #, c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "@i %i estas en ampleksa aranĝo, sed ne havas 'EXTENT_FL'\n"
 
-#: e2fsck/problem.c:956
+#: e2fsck/problem.c:977
 #, c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "Rapida simbola ligo %i havas jesan flagon 'EXTENT_FL'.  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:982
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1814,39 +1865,40 @@ msgstr ""
 "   (@n logika @b %c, fizika @b %b, longo %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:986
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "@i %i havas malvalidan ampleksan nodon (blk %b, lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
+#: e2fsck/problem.c:991
 #, c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Eraro dum konverto de subfaska bloka @B: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
+#. @-expanded: quota inode is not a regular file.  
+#: e2fsck/problem.c:996
+#, fuzzy
+msgid "@q @i is not a regular file.  "
 msgstr "La kvota @i ne estas normala dosiero.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1001
 msgid "@q @i is not in use, but contains data.  "
 msgstr "La kvota @i ne uziĝas, sed enhavas datumojn.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1006
 msgid "@q @i is visible to the user.  "
 msgstr "La kvota @i estas videbla por uzanto.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1011
 msgid "The bad @b @i looks @n.  "
 msgstr "La malbonbloka @i ŝajnas @n.  "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1016
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1855,26 +1907,26 @@ msgstr ""
 "    (@n logika @b %c, fizika @b %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
+#: e2fsck/problem.c:1021
 #, fuzzy, c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "@i %i tro grandas.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
+#: e2fsck/problem.c:1026
 #, fuzzy, c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr "Kontrolsumo de i-noda bitmapo ne konkordas kun bitmapo"
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
+#: e2fsck/problem.c:1031
 #, fuzzy, c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "@b %b de etenditaj atributoj estas difekta (asigna kolizio).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1039
 #, fuzzy
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
@@ -1884,13 +1936,13 @@ msgstr ""
 "   (@n logika @b %c, fizika @b %b, longo %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1048
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
 msgstr ""
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1053
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1900,7 +1952,7 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1059
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1909,13 +1961,13 @@ msgstr ""
 "    (logika @b %c, fizika @b %b, longo %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
+#: e2fsck/problem.c:1064
 #, fuzzy, c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr "@i %i estas en ampleksa aranĝo, sed @S ne havas funkcion 'EXTENTS'\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
+#: e2fsck/problem.c:1069
 #, fuzzy, c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
 msgstr ""
@@ -1923,39 +1975,39 @@ msgstr ""
 "'HTREE'.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
+#: e2fsck/problem.c:1076
 msgid ""
 "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
 msgstr ""
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1081
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "bloko %b de uja @i %i devus esti je bloko %c.  "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
+#: e2fsck/problem.c:1086
 #, c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "uja @i %i havas amplekson markitan kiel sen pravalorizo je @b %c.  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1091
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
+#: e2fsck/problem.c:1096
 #, fuzzy, c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
 msgstr "@i %i havas jesan flagon 'INDEX_FL' sed ne estas @d.\n"
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
+#: e2fsck/problem.c:1102
 #, fuzzy, c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
@@ -1965,43 +2017,43 @@ msgstr ""
 "'immutable' aŭ 'append-only'.  "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1108
 #, c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1113
 #, c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
 msgstr ""
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1128
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr ""
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1133
 #, fuzzy
 msgid "@A @x region allocation structure.  "
 msgstr "@A de 'icount'-a strukturo: %m\n"
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1138
 #, fuzzy
 msgid ""
 "@i %i has a duplicate @x mapping\n"
@@ -2011,37 +2063,57 @@ msgstr ""
 "    (logika @b %c, @n fizika @b %b, longo %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1143
 msgid "@A memory for encrypted @d list\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1148
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr ""
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1153
 #, c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr ""
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
+#: e2fsck/problem.c:1158
 #, fuzzy, c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "@b %b de etenditaj atributoj estas difekta (malvalida nomo).  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
+#: e2fsck/problem.c:1163
 #, c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr ""
 
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1168
+#, fuzzy
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "@i %i havas malbonan blokon %b de etenditaj atributoj.  "
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1174
+#, fuzzy
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "@i %i estas en ampleksa aranĝo, sed @S ne havas funkcion 'EXTENTS'\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1179
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1187
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2052,49 +2124,49 @@ msgstr ""
 "Paŝo 1B: Reskanaado por pluroble posedataj blokoj...\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
+#: e2fsck/problem.c:1193
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "pluroble posedata(j) bloko(j) en i-nodo %i:"
 
-#: e2fsck/problem.c:1172
+#: e2fsck/problem.c:1208
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Eraro dum skanado de i-nodoj (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
+#: e2fsck/problem.c:1213
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A de i-noda @B ('inode_dup_map()'): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
+#: e2fsck/problem.c:1218
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Eraro dum iteracio je blokoj en @i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1223 e2fsck/problem.c:1585
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 "Eraro dum alĝustigo de referencnombro por @b %b de etenditaj atributoj (@i "
 "%i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1233
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
 "Paŝo 1C: Skanado de dosierujoj por i-nodoj kun pluroble posedataj blokoj...\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1239
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Paŝo 1D: Solvado de pluroble posedataj blokoj...\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1244
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2103,18 +2175,18 @@ msgstr ""
 "  havas %r pluroble posedata(j)n bloko(j)n, kunhave kun %N dosiero(j):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1250
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr ""
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1255
 msgid "\t<@f metadata>\n"
 msgstr "    <dosiersistemaj metadatumoj>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1260
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2124,7 +2196,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1265
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2132,348 +2204,349 @@ msgstr ""
 "pluroble posedataj blokoj jam reasigniĝis aŭ kloniĝis.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
+#: e2fsck/problem.c:1278
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Malsukcesis kloni dosieron: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1284
 #, fuzzy
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Paŝo 3A: Optimumigo de dosierujoj...\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
+#: e2fsck/problem.c:1289
 #, fuzzy, c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Fiaskis optimumigo de dosierujo %q (%d): %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1294
 #, fuzzy
 msgid "Optimizing @x trees: "
 msgstr "Optimumigo de dosierujoj: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1309
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1314
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1319
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr ""
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1326
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Paŝo 2: Kontrolo de dosieruja strukturo...\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1331
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "@n i-noda numero por '.' en uja @i %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1336
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E havas malvalidan i-nodan nombron: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1341
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E havas forigitan/neuzatan i-nodon %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1346
 msgid "@E @L to '.'  "
 msgstr "@E @L al '.'  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1351
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E referencas al @i (%Di) kiu estas en malbona bloko.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1356
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E @L al @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1361
 msgid "@E @L to the @r.\n"
 msgstr "@E @L al @r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1366
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E havas nevalidajn signojn en sia nomo.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
+#: e2fsck/problem.c:1371
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Mankas '.' en uja @i %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
+#: e2fsck/problem.c:1376
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Mankas '..' en uja @i %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1381
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Unua @e '%Dn' (@i=%Di) en uja @i %i (%p) @s '.'\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1386
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Dua @e '%Dn' (@i=%Di) en uja @i %i @s '..'\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1391
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "'i_faddr' @F %IF, @s nulo.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1396
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "'i_file_acl' @F %If, @s nulo.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "'i_dir_acl' @F %Id, @s nulo.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1401
+#, fuzzy
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "'i_fsize' @F %N, @s nulo.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1406
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "'i_frag' @F %N, @s nulo.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1411
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "'i_fsize' @F %N, @s nulo.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1416
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "@i %i (%Q) havas nevalidan moduson (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1421
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "uja @i %i, %B, pozicio %N: @d difektas\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1426
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "uja @i %i, %B, pozicio %N: dosiernomo tro longas\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1431
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "uja @i %i havas neasignatan %B.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
+#: e2fsck/problem.c:1436
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "uja @e '.' en uja @i %i ne finiĝas per NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
+#: e2fsck/problem.c:1441
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "uja @e '..' en uja @i %i ne finiĝas per NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1446
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "@i %i (%Q) estas @I signo-aparato.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1451
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "@i %i (%Q) estas @I blokaparato.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1456
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E estas duobla @e '.'.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1461
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E estas duobla @e '..'.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
+#: e2fsck/problem.c:1466 e2fsck/problem.c:1801
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1471
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E havas 'rec_len' %Dr, @s %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
+#: e2fsck/problem.c:1476
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A de 'icount'-a strukturo: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
+#: e2fsck/problem.c:1481
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Eraro dum iteracio je ujaj blokoj: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1486
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Eraro dum legado de uja bloko %b (i-nodo %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1491
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Eraro dum skribado de uja bloko %b (i-nodo %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
+#: e2fsck/problem.c:1496
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A de nova uja @b por @i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
+#: e2fsck/problem.c:1501
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr ""
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
+#: e2fsck/problem.c:1506
 #, c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "uja @e por '.' en %p (%i) estas granda.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1511
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "@i %i (%Q) estas @I vicmemoro.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1516
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "@i %i (%Q) estas @I konektilo.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1521
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Agordiĝas dosiertipo por @E al %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1526
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E havas malĝustan dosiertipon (estas %Dt, @s %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1531
 msgid "@E has filetype set.\n"
 msgstr "@E havas dosiertipon agordita.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1536
 msgid "@E has a @z name.\n"
 msgstr "@E havas nomon kun nula longo.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1541
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Simbola ligo %Q (@i %i) malvalidas.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1546
 msgid "@a @b @F @n (%If).\n"
 msgstr "@b de etenditaj atributoj @F malvalida (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1551
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 "@f enhavas grandajn dosierojn, sed maljesas flago 'LARGE_FILE' en @S.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1556
 msgid "@p @h %d: %B not referenced\n"
 msgstr "@p @h %d: %B ne referenciĝas\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1561
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "@p @h %d: %B referenciĝas duoble\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1566
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "@p @h %d: %B havas malvalidan minimuman haketon\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1571
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "@p @h %d: %B havas malvalidan maksimuman haketon\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1576
 msgid "@n @h %d (%q).  "
 msgstr "@n @h %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1580
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p @h %d (%q): malvalida bloknumero %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
+#: e2fsck/problem.c:1590
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p @h %d: radika nodo estas @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1595
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "@p @h %d: %B havas malvalidan limon (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1600
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "@p @h %d: %B havas malvalidan nombron (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1605
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "@p @h %d: %B havas neordigitan haketan tabelon\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1610
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "@p @h %d: %B havas malvalidan profundon (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1615
 msgid "Duplicate @E found.  "
 msgstr "Duobla @E troviĝis.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1620
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2485,7 +2558,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1625
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2496,155 +2569,155 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1630
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "'i_blocks_hi' @F %N, @s nulo.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1635
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1639
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr "@E referencas i-nodon %Di en @g %g kie jesas '_INODE_UNINIT'.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1644
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr "@E referencas i-nodon %Di kiu troviĝas je neuzataj i-nodoj de @g %g.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1649
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "'i_file_acl_hi' @F %N, @s nulo.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
+#: e2fsck/problem.c:1654
 #, fuzzy, c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr "@p @h %d: radika nodo estas @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
+#: e2fsck/problem.c:1659
 #, fuzzy, c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr "@p @h %d: radika nodo estas @n\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1664
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "uja @i %i, %B, pozicio %N: @d difektas\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1669
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr ""
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1674
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr ""
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
+#: e2fsck/problem.c:1679
 #, c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr ""
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1684
 msgid "Encrypted @E is too short.\n"
 msgstr ""
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1691
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Paŝo 3: Kontrolo de konektoj inter dosierujoj...\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1696
 msgid "@r not allocated.  "
 msgstr "@r ne asignatas.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1701
 msgid "No room in @l @d.  "
 msgstr "Ne estas plu da spaco en dosierujo '@l'.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
+#: e2fsck/problem.c:1706
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Nekonektita dosieruja @i %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1711
 msgid "/@l not found.  "
 msgstr "/@l ne troviĝis.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1716
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "'..' en %Q (%i) estas %P (%j), devus esti %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1721
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "Malbonas aŭ ne ekzistas /@l.  Ne eblas rekonekti.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
+#: e2fsck/problem.c:1726
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Malsukcesis etendi /@l: %m\n"
 
-#: e2fsck/problem.c:1695
+#: e2fsck/problem.c:1731
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Malsukcesis rekonekti %i: m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
+#: e2fsck/problem.c:1736
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Eraro dum serĉo de /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
+#: e2fsck/problem.c:1741
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block(): %m dum kreado de dosierujo /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
+#: e2fsck/problem.c:1746
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode(): %m dum kreado de dosierujo /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
+#: e2fsck/problem.c:1751
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block(): %m dum kreado de nova uja bloko\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
+#: e2fsck/problem.c:1756
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_block(): %m dum skribado de uja bloko por /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
+#: e2fsck/problem.c:1761
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Eraro dum alĝustigo de i-noda nombro je i-nodo %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
+#: e2fsck/problem.c:1766
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2653,7 +2726,7 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
+#: e2fsck/problem.c:1771
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2663,41 +2736,41 @@ msgstr ""
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
+#: e2fsck/problem.c:1781
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Eraro dum kreado de radika dosierujo (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
+#: e2fsck/problem.c:1786
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Eraro dum kreado de dosierujo /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1791
 msgid "@r is not a @d; aborting.\n"
 msgstr "@r ne estas dosierujo -- ĉesigo.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1796
 msgid "Cannot proceed without a @r.\n"
 msgstr "Ne eblas daŭrigi sen @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
+#: e2fsck/problem.c:1806
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l ne estas dosierujo (i-nodo=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1811
 msgid "/@l has inline data\n"
 msgstr ""
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1816
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2706,7 +2779,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1821
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2714,53 +2787,53 @@ msgid ""
 msgstr ""
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1826
 #, fuzzy
 msgid "/@l is encrypted\n"
 msgstr "Bildo (%s) estas ĉifrita\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1833
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Paŝo 3A: Optimumigo de dosierujoj...\n"
 
-#: e2fsck/problem.c:1802
+#: e2fsck/problem.c:1838
 #, c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1843
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Fiaskis optimumigo de dosierujo %q (%d): %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1848
 msgid "Optimizing directories: "
 msgstr "Optimumigo de dosierujoj: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1865
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Paŝo 4: Kontrolo de nombroj de referencoj...\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
+#: e2fsck/problem.c:1870
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "@u @i %i kun nula longo.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
+#: e2fsck/problem.c:1875
 #, c-format
 msgid "@u @i %i\n"
 msgstr "@u @i %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1880
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "referencnombro de @i %i estas %Il, @s %N.  "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1884
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2772,149 +2845,160 @@ msgstr ""
 "inode_link_info[%i] estas %N, inode.i_links_count estas %Il -- ili devus "
 "egali!\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1891
+#, fuzzy
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "referencnombro de @i %i estas %Il, @s %N.  "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1896
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:1903
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Paŝo 5: Kontrolo de grupa resuma informo...\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:1908
 msgid "Padding at end of @i @B is not set. "
 msgstr "Ŝtopado je fino de i-noda bitmapo ne agordiĝas. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:1913
 msgid "Padding at end of @b @B is not set. "
 msgstr "Ŝtopado je fino de bloka bitmapo ne agordiĝas. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:1918
 msgid "@b @B differences: "
 msgstr "Malsamoj en bloka bitmapo: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:1938
 msgid "@i @B differences: "
 msgstr "Malsamoj en i-noda bitmapo: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:1958
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 "Nombro de liberaj i-nodoj malĝustas por grupo %g (estas %i, nombriĝis %j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:1963
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 "Nombro de dosierujoj malĝustas por grupo %g (estas %i, nombriĝis %j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:1968
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Nombro de liberaj i-nodoj malĝustas (estas %i, nombriĝis %j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:1973
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr ""
 "Nombro de liberaj blokoj malĝustas por grupo %g (estas %b, nombriĝis %c)\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:1978
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Nombro de liberaj blokoj malĝustas (estas %b, nombriĝis %c)\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
+#: e2fsck/problem.c:1983
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:1989
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr ""
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
+#: e2fsck/problem.c:1994
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Eraro dum kopiado de anstataŭa i-noda @B: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
+#: e2fsck/problem.c:1999
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Eraro dum kopiado de anstataŭa bloka @B: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
+#: e2fsck/problem.c:2024
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
 "@g %g havas blokojn uzatajn, sed la @g estas markita kiel 'BLOCK_UNINIT'\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
+#: e2fsck/problem.c:2029
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr ""
 "@g %g havas i-nodojn uzatajn, sed la @g estas markita kiel 'INODE_UNINIT'\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
+#: e2fsck/problem.c:2034
 #, c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
+#: e2fsck/problem.c:2039
 #, c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2046
 msgid "Recreate @j"
 msgstr "Ĉu rekrei kaŝprotokolon"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2051
 msgid "Update quota info for quota type %N"
 msgstr "Ĉu ĝisdatigi kvotan informon por kvottipo %N"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
+#: e2fsck/problem.c:2056
 #, c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "Eraro dum agordo de blokgrupa kontrolsumo: %m\n"
 
-#: e2fsck/problem.c:2016
+#: e2fsck/problem.c:2061
 #, c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Eraro dum skribado de dosiersistema informo: %m\n"
 
-#: e2fsck/problem.c:2021
+#: e2fsck/problem.c:2066
 #, c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr "Eraro dum elbufrigo de skriboj al memoraparato: %m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2071
 #, fuzzy
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "Ĉu ĝisdatigi kvotan informon por kvottipo %N"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2194
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Netraktata erarkodo (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2320 e2fsck/problem.c:2324
 msgid "IGNORED"
 msgstr "IGNORIĜIS"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr ""
 
@@ -2936,21 +3020,21 @@ msgstr "dum komenco de skano de i-nodoj"
 msgid "while doing inode scan"
 msgstr "dum skanado de i-nodoj"
 
-#: e2fsck/super.c:190
-#, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
+#: e2fsck/super.c:224
+#, fuzzy, c-format
+msgid "while calling ext2fs_block_iterate for inode %u"
 msgstr "dum alvoko de 'ext2fs_block_iterate()' por i-nodo %d"
 
-#: e2fsck/super.c:213
-#, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
+#: e2fsck/super.c:249
+#, fuzzy, c-format
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
 msgstr "dum alvoko de 'ext2fs_adjust_ea_refcount2()' por i-nodo %d"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Trunkiĝas"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Viŝiĝas"
 
@@ -3003,12 +3087,12 @@ msgstr ""
 " -l <dosiernomo>    aldoni al malbonbloka listo\n"
 " -L <dosiernomo>    uzenda kiel malbonbloka listo\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:136
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %u/%u dosieroj (%0d.%d%% nekontinua), %llu/%llu blokoj\n"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:162
 #, c-format
 msgid ""
 "\n"
@@ -3023,53 +3107,53 @@ msgstr[1] ""
 "\n"
 "%12u i-nodoj uzitaj (%2.2f%%, el de %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:166
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
 msgstr[0] "%12u nekontinua dosiero (%0d.%d%%)\n"
 msgstr[1] "%12u nekontinuaj dosieroj (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:171
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
 msgstr[0] "%12u nekontinua dosierujo (%0d.%d%%)\n"
 msgstr[1] "%12u nekontinuaj dosierujoj (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:176
 #, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr ""
 "             nombro de i-nodoj kun nerektaj blokoj: %u simple, %u duoble, %u "
 "trioble\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:184
 msgid "             Extent depth histogram: "
 msgstr "             histogramo de ampleksa profundo: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:193
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
 msgstr[0] "%12llu bloko uzita (%2.2f%%, el de %llu)\n"
 msgstr[1] "%12llu blokoj uzitaj (%2.2f%%, el de %llu)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:197
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%12u difekta bloko\n"
 msgstr[1] "%12u difektaj blokoj\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:199
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] "%12u granda dosiero\n"
 msgstr[1] "%12u grandaj dosieroj\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:201
 #, c-format
 msgid ""
 "\n"
@@ -3084,96 +3168,96 @@ msgstr[1] ""
 "\n"
 "%12u normalaj dosieroj\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:203
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u dosierujo\n"
 msgstr[1] "%12u dosierujoj\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:205
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
 msgstr[0] "%12u signo-aparato\n"
 msgstr[1] "%12u signo-aparatoj\n"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:208
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
 msgstr[0] "%12u blokaparato\n"
 msgstr[1] "%12u blokaparatoj\n"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:210
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u vicmemoro\n"
 msgstr[1] "%12u vicmemoroj\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:212
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u ligo\n"
 msgstr[1] "%12u ligoj\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:214
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u simbola ligo"
 msgstr[1] "%12u simbolaj ligoj"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:216
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%u rapida simbola ligo)\n"
 msgstr[1] " (%u rapidaj simbolaj ligoj)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:220
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u konektilo\n"
 msgstr[1] "%12u konektiloj\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:224
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u dosiero\n"
 msgstr[1] "%12u dosieroj\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:237 misc/badblocks.c:1002 misc/tune2fs.c:3022 misc/util.c:126
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "dum eltrovo se %s estas surmetata."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:258
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Averto!  %s estas surmetata.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:261
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Averto!  %s uziĝas.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:267
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s estas surmetata.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:269
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s uziĝas.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:271
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3181,7 +3265,7 @@ msgstr ""
 "Ne eblas daŭrigi -- ĉesigo.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:273
 msgid ""
 "\n"
 "\n"
@@ -3195,145 +3279,165 @@ msgstr ""
 "    Se vi kontinuas, vi **KAŬZOS** **SEVERAJN** dosiersistemajn difektojn.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:278
 msgid "Do you really want to continue"
 msgstr "Ĉu vi vere volas kontinui"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:280
 msgid "check aborted.\n"
 msgstr "kontrolo ĉesigiĝis.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:374
 msgid " contains a file system with errors"
 msgstr " enhavas dosiersistemon kun eraroj"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:376
 msgid " was not cleanly unmounted"
 msgstr " ne demetiĝis tutkorekte"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:378
 msgid " primary superblock features different from backup"
 msgstr " unua ĉefbloko havas aliajn funkciojn ol savkopia"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:382
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " surmetiĝis %u fojojn sen esti kontrolata"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:389
 msgid " has filesystem last checked time in the future"
 msgstr " havas tempon de kontrolo en la estonteco"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:395
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " pasis %u tagojn sen kontrolo"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:403
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:409
 msgid ", check forced.\n"
 msgstr "; perforta kontrolo.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:442
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: pura, %u/%u dosieroj, %llu/%llu blokoj"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:462
 msgid " (check deferred; on battery)"
 msgstr " (kontrolo prokrastis; sur baterio)"
 
 # FIXME: maybe *upon* next mount?
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:465
 msgid " (check after next mount)"
 msgstr " (kontroliĝos je sekva surmeto)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:467
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (kontroliĝos en %ld surmetoj)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:617
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "Eraro: fiaskis malfermi /dev/null (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:688
 msgid "Invalid EA version.\n"
 msgstr "Malvalida versio de EA.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:701
 #, fuzzy
 msgid "Invalid readahead buffer size.\n"
 msgstr "Malvalida argumento por 'resize': %s\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:750
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Nekonata etendita opcio: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:758
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+
+#: e2fsck/unix.c:762
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr ""
+
+#: e2fsck/unix.c:771
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr ""
+
+#: e2fsck/unix.c:783
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:856
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:860
 msgid "Invalid completion information file descriptor"
 msgstr ""
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:875
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr ""
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:896
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr ""
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:927 e2fsck/unix.c:1005 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1741 misc/tune2fs.c:2036 misc/tune2fs.c:2054
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr ""
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:984
 msgid "The -n and -D options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:989
 msgid "The -n and -c options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:994
 msgid "The -n and -l/-L options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1018
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1024
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1088
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1135
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1144
 #, c-format
 msgid ""
 "\n"
@@ -3341,31 +3445,32 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1235
 #, c-format
 msgid ""
 "MMP interval is %u seconds and total wait time is %u seconds. Please "
 "wait...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1252 e2fsck/unix.c:1257
 msgid "while checking MMP block"
 msgstr ""
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1259
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1275
 #, fuzzy
 msgid "while reading MMP block"
 msgstr "dum legado de kaŝprotokola ĉefbloko"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1295 e2fsck/unix.c:1347 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2613 misc/mke2fs.c:2664 misc/tune2fs.c:2754
+#: misc/tune2fs.c:2799 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3373,105 +3478,110 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1336 misc/e2undo.c:270 misc/mke2fs.c:2653 misc/tune2fs.c:2788
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr ""
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1362 misc/mke2fs.c:2679 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr ""
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1405
 msgid "Error: ext2fs library version out of date!\n"
 msgstr ""
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1412
 msgid "while trying to initialize program"
 msgstr ""
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1435
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1447
 msgid "need terminal for interactive repairs"
 msgstr ""
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1508
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1510
 msgid "Superblock invalid,"
 msgstr "Ĉefbloko nevalidas,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1511
 msgid "Group descriptors look bad..."
 msgstr "Gruppriaĵoj aspektas malbonaj..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1521
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s dum uzado de savkopiaj blokoj"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1525
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: reiriĝas al originala ĉefbloko\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1554
 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:1518
+#: e2fsck/unix.c:1561
 msgid "Could this be a zero-length partition?\n"
 msgstr "Ĉu eble ĉi tiu estas nullonga subdisko?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1563
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Vi bezonas havi %s atingon al la dosiersistemo, aŭ esti ĉefuzanto\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1569
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Ĉu eble aparato ne ekzistas aŭ estas 'swap'?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1571
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1575
 msgid "Possibly non-existent device?\n"
 msgstr "Ĉu eble aparato ne ekzistas?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1578
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1592
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1667
 msgid "Get a newer version of e2fsck!"
 msgstr ""
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1711
 #, fuzzy, c-format
 msgid "while checking journal for %s"
 msgstr "dum kontrolado de Ext3-kaŝprotokolo por %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1714
 #, fuzzy
 msgid "Cannot proceed with file system check"
 msgstr "Ne eblas daŭrigi sen @r.\n"
 
-#: e2fsck/unix.c:1661
+#: e2fsck/unix.c:1725
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
@@ -3479,50 +3589,50 @@ msgstr ""
 "Averto: transsaltiĝas kaŝprotokola restaŭro, ĉar fariĝas nurlega kontrolo de "
 "dosiersistemo.\n"
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1737
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1743
 #, fuzzy, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Kaŝprotokola ĉefbloko ne troviĝis!\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1747
 #, fuzzy, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "Kaŝprotokolo forigiĝis\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1751
 #, fuzzy, c-format
 msgid "while recovering journal of %s"
 msgstr "dum restaŭrado de Ext3-kaŝprotokolo por %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1773
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr ""
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1832
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s dum legado de malbonbloka i-nodo\n"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1835
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1875
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Kreado de kaŝprotokolo (%d blokoj): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1885
 msgid " Done.\n"
 msgstr " Pretas.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1887
 #, fuzzy
 msgid ""
 "\n"
@@ -3531,24 +3641,38 @@ msgstr ""
 "\n"
 "*** kaŝprotokolo rekreiĝis -- dosiersistemo estas denove ext3 ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1893
 msgid "aborted"
 msgstr ""
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1895
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1922
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1926
 msgid "while resetting context"
 msgstr ""
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:1985
+#, fuzzy, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** DOSIERSISTEMO MODIFIĜIS *****\n"
+
+#: e2fsck/unix.c:1987
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr ""
+
+#: e2fsck/unix.c:1991 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3557,12 +3681,12 @@ msgstr ""
 "\n"
 "%s: ***** DOSIERSISTEMO MODIFIĜIS *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:1996
 #, fuzzy, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** RESTARTIGU LINUKSON *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2006 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3573,51 +3697,51 @@ msgstr ""
 "%s: ********** AVERTO: Dosiersistemo ankoraŭ enhavas erarojn **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "jJyY"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr ""
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr ""
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<j>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (j/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr ""
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr ""
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "jes\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "ne\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3626,7 +3750,7 @@ msgstr ""
 "%s? ne\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3635,38 +3759,38 @@ msgstr ""
 "%s? jes\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "jes"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "ne"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr ""
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr ""
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr ""
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr ""
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr ""
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3675,137 +3799,137 @@ msgid ""
 "\t(i.e., without -a or -p options)\n"
 msgstr ""
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr ""
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr ""
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr ""
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr ""
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr ""
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr ""
 
-#: e2fsck/util.c:765
+#: e2fsck/util.c:792
 msgid ""
 "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
 "running.\n"
 msgstr ""
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr ""
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
-"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 ""
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f%% fariĝis, %s pasis. (%d/%d/%d eraroj)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Testante kun hazarda aranĝo: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Testante kun aranĝo 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr ""
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Stranga valoro (%ld) en 'do_read()'\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "dum 'ext2fs_sync_device()'"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "dum komenco de iteracio je malbonbloka listo"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "dum asigno de bufroj"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Kontrolante blokojn %lu al %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Kontrolante por malbonaj blokoj en nurlega moduso\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Kontrolante por malbonaj blokoj (nurlega testo): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Tro multaj malbonaj blokoj -- ĉesigo de testo\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Kontrolante por malbonaj blokoj en lega-skriba moduso\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "De bloko %lu al %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Legante kaj komparante: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Kontrolante por malbonaj blokoj en nedetrua lega-skriba moduso\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Kontrolante por malbonaj blokoj (nedetrua lega-skriba testo)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3813,97 +3937,97 @@ msgstr ""
 "\n"
 "Interrompo alvenis -- ordigante\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "dum testa datuma skribo, bloko %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:131
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s estas surmetata; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "'badblocks' tamen perfortiĝas.  Esperu ke /etc/mtab ĝustas.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "ne estas sendanĝera ruli 'badblocks'!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:142
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s ŝajne uziĝas per la sistemo; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "'badblocks' tamen perfortiĝas.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr ""
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr ""
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr ""
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr ""
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr ""
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr ""
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr ""
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr ""
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr ""
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr ""
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr ""
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr ""
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr ""
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr ""
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr ""
@@ -3975,159 +4099,159 @@ msgstr ""
 msgid "Must use '-v', =, - or +\n"
 msgstr ""
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:79 misc/create_inode.c:118
 #, fuzzy, c-format
 msgid "while reading inode %u"
 msgstr "dum legado de radika i-nodo"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:89 misc/create_inode.c:287 misc/create_inode.c:352
+#: misc/create_inode.c:390
 #, fuzzy
 msgid "while expanding directory"
 msgstr "dum etendado de dosierujo '/lost+found'"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:96
 #, fuzzy, c-format
 msgid "while linking \"%s\""
 msgstr "dum skanado de i-nodoj"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:104 misc/create_inode.c:131 misc/create_inode.c:321
 #, fuzzy, c-format
 msgid "while writing inode %u"
 msgstr "dum skribado de i-noda tabelo"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:151 misc/create_inode.c:175
 #, fuzzy, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "dum provo de regrandigi %s"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:162
 #, fuzzy, c-format
 msgid "while opening inode %u"
 msgstr "dum malfermo de i-noda skano"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:168 misc/create_inode.c:195 misc/create_inode.c:975
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 #, fuzzy
 msgid "while allocating memory"
 msgstr "dum asigno de bufro"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:188 misc/create_inode.c:204
 #, fuzzy, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "dum legado de radika i-nodo"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:213
 #, fuzzy, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "dum iteracio je i-nodo %u"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:223
 #, fuzzy, c-format
 msgid "while closing inode %u"
 msgstr "dum skanado de i-nodoj"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:274
 #, fuzzy, c-format
 msgid "while allocating inode \"%s\""
 msgstr "dum asigno de bufroj"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:293
 #, fuzzy, c-format
 msgid "while creating inode \"%s\""
 msgstr "dum komenco de skano de i-nodoj"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:359
 #, fuzzy, c-format
 msgid "while creating symlink \"%s\""
 msgstr "dum kreado de dosierujo '/lost+found'"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:377 misc/create_inode.c:896
 #, fuzzy, c-format
 msgid "while looking up \"%s\""
 msgstr "dum serĉado de dosierujo '/lost+found'"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:397
 #, fuzzy, c-format
 msgid "while creating directory \"%s\""
 msgstr "dum kreado de radika dosierujo"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:625
 #, fuzzy, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "dum malfermo de %s por elbufrigo"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:739
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:747
 #, fuzzy, c-format
 msgid "while opening directory \"%s\""
 msgstr "dum malfermo de i-noda skano"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:757
 #, c-format
 msgid "while lstat \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:808
 #, fuzzy, c-format
 msgid "while creating special file \"%s\""
 msgstr "Kreiĝas normala dosiero %s\n"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:817
 #, fuzzy
 msgid "malloc failed"
 msgstr "Mankas sufiĉa memoro"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:825
 #, fuzzy, c-format
 msgid "while trying to read link \"%s\""
 msgstr "dum provo de regrandigi %s"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:832
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr ""
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:843
 #, fuzzy, c-format
 msgid "while writing symlink\"%s\""
 msgstr "dum skribado de ĉefbloko"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:854
 #, fuzzy, c-format
 msgid "while writing file \"%s\""
 msgstr "dum skribado de i-noda tabelo"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:867
 #, fuzzy, c-format
 msgid "while making dir \"%s\""
 msgstr "dum kreado de radika dosierujo"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:885
 #, fuzzy
 msgid "while changing directory"
 msgstr "legante dosierujan blokon"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:891
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:904
 #, fuzzy, c-format
 msgid "while setting inode for \"%s\""
 msgstr "dum komenco de skano de i-nodoj"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:911
 #, fuzzy, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "dum kontrolado de Ext3-kaŝprotokolo por %s"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:937
 #, fuzzy
 msgid "while saving inode data"
 msgstr "dum komenco de skano de i-nodoj"
@@ -4135,7 +4259,7 @@ msgstr "dum komenco de skano de i-nodoj"
 #: misc/dumpe2fs.c:56
 #, c-format
 msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+"Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
 msgstr ""
 
 #: misc/dumpe2fs.c:159
@@ -4251,104 +4375,55 @@ msgstr ""
 msgid "Bad blocks: %u"
 msgstr "Difektaj blokoj: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:367
 msgid "while reading journal inode"
 msgstr "dum legado de kaŝprotokola i-nodo"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "dum malfermo de kaŝprotokola i-nodo"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "dum legado de kaŝprotokola ĉefbloko"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Malvalidas maginumero de la kaŝprotokola ĉefbloko!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Kaŝprotokolaj kapabloj:    "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Kaŝprotokola grando:       "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Kaŝprotokola longo:        %u\n"
-"Kaŝprotokola sekvenco:     0x%08x\n"
-"Kaŝprotokola komenco:      %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Kaŝprotokola erarnumero:   %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "dum legado de kaŝprotokola ĉefbloko"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Ne eblas trovi kaŝprotokolajn maginumerojn"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Kaŝprotokola blokgrando:   %u\n"
-"Kaŝprotokola longo:        %u\n"
-"Kaŝprotokola unua bloko:   %u\n"
-"Kaŝprotokola sekvenco:     0x%08x\n"
-"Kaŝprotokola komenco:      %u\n"
-"Kaŝprotokola uzantnombro:  %u\n"
+#: misc/dumpe2fs.c:468
+#, fuzzy
+msgid "failed to alloc MMP buffer\n"
+msgstr "dum asigno de bufro"
 
-#: misc/dumpe2fs.c:514
-#, c-format
-msgid "Journal users:            %s\n"
-msgstr "Kaŝprotokolaj uzantoj:     %s\n"
+#: misc/dumpe2fs.c:479
+#, fuzzy, c-format
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "Kontrolante blokojn %lu al %lu\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:798 misc/tune2fs.c:2073
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Mankas sufiĉa memoro por analizi opciojn!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4362,48 +4437,43 @@ msgid ""
 "\tblocksize=<blocksize>\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1845
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "    Uziĝas %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1590 misc/tune2fs.c:2949
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Malsukcesis trovi validan dosiersisteman ĉefblokon.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:730
-#, c-format
+#: misc/dumpe2fs.c:747
+#, fuzzy, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "dum provo de ruli '%s'"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
 
-#: misc/e2image.c:106
-#, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
+#: misc/e2image.c:107
+#, fuzzy, c-format
+msgid "Usage: %s [ -r|Q ] [ -f ] device image-file\n"
 msgstr "Uzmaniero:  %s [-r|Q] [-fr] APARATO BILDODOSIERO\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:109
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "            %s -I APARATO BILDODOSIERO\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:110
 #, c-format
 msgid ""
 "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
@@ -4412,101 +4482,101 @@ msgstr ""
 "            %s -ra  [-cfnp] [-o fontpozicio] [-O celpozicio] font-ds [cel-"
 "ds]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:175 misc/e2image.c:580 misc/e2image.c:586 misc/e2image.c:1185
 msgid "while allocating buffer"
 msgstr "dum asigno de bufro"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:180
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "Skribado de bloko %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:194
 #, c-format
 msgid "error writing block %llu"
 msgstr "eraro dum skribado de bloko %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:197
 msgid "error in generic_write()"
 msgstr "eraro en 'generic_write()'"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:214
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Eraro: ĉapa grando pli grandas o 'wrt_size'\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:219
 msgid "Couldn't allocate header buffer\n"
 msgstr "Mankas sufiĉa memoro por asigni bufron por ĉapo\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:247
 msgid "while writing superblock"
 msgstr "dum skribado de ĉefbloko"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:256
 msgid "while writing inode table"
 msgstr "dum skribado de i-noda tabelo"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:264
 msgid "while writing block bitmap"
 msgstr "dum skribado de bloka bitmapo"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:272
 msgid "while writing inode bitmap"
 msgstr "dum skribado de i-noda bitmapo"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:506
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Difekta uja bloko %llu: malbona 'rec_len' (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:518
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Difekta uja bloko %llu: malbona 'name_len' (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:559
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu blokoj (de %d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:590 misc/e2image.c:630
 msgid "Copying "
 msgstr "Kopiado "
 
-#: misc/e2image.c:626
+#: misc/e2image.c:627
 msgid ""
 "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr "Halti nun detruos la dosiersistemon; interrompu denove se vi certas.\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:653
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " restas %s je %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:665 misc/e2image.c:1195
 #, c-format
 msgid "error reading block %llu"
 msgstr "eraro dum legado de bloko %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:719
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "Kopiiĝis %llu / %llu blokoj (de %d%%) en %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:723
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "je %.2f MB/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:759
 msgid "while allocating l1 table"
 msgstr "dum asigno de l1-tabelo"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:804
 msgid "while allocating l2 cache"
 msgstr "dum asigno de l2-kaŝmemoro"
 
-#: misc/e2image.c:826
+#: misc/e2image.c:827
 msgid ""
 "Warning: There are still tables in the cache while putting the cache, data "
 "will be lost so the image may not be valid.\n"
@@ -4514,77 +4584,77 @@ msgstr ""
 "Averto: ankoraŭ ekzistas tabeloj en la kaŝmemoro dum sia konservado, tial "
 "datumoj perdiĝos kaj la bildo eble malvalidas.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1152
 msgid "while allocating ext2_qcow2_image"
 msgstr "dum asigno de 'ext2_qcow2_image'"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1159
 msgid "while initializing ext2_qcow2_image"
 msgstr "dum pravalorizo de 'ext2_qcow2_image'"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1218 misc/e2image.c:1236
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr ""
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1276
 msgid "while allocating block bitmap"
 msgstr "dum asigno de bloka bitmapo"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1285
 #, fuzzy
 msgid "while allocating scramble block bitmap"
 msgstr "dum asigno de kirlita bloka bitmapo"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1292
 msgid "Scanning inodes...\n"
 msgstr "Skanado de i-nodoj...\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1304
 msgid "Can't allocate block buffer"
 msgstr "Mankas sufiĉa memoro por asigni bufron por bloko"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1343 misc/e2image.c:1357
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "dum iteracio je i-nodo %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1389
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "Krudajn kaj QCOW2-bildojn ne eblas instali"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1411
 msgid "error reading bitmaps"
 msgstr "eraro dum legado de bitmapoj"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1423
 msgid "while opening device file"
 msgstr "dum malfermo de aparatdosiero"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1434
 msgid "while restoring the image table"
 msgstr "dum restaŭro de bilda tabelo"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1531
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "Opcio '-a' uzeblas nur kun krudaj aŭ QCOW2-bildoj."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1537
 msgid "Offsets are only allowed with raw images."
 msgstr "Pozicioj uzeblas nur kun krudaj bildoj."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1542
 msgid "Move mode is only allowed with raw images."
 msgstr "Movmoduso uzeblas nur kun krudaj bildoj."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1547
 msgid "Move mode requires all data mode."
 msgstr "Movmoduso postulas 'all-data' moduson"
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1557
 msgid "checking if mounted"
 msgstr "kontrolo je surmeto"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1564
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4596,46 +4666,51 @@ msgstr ""
 "en malkohera bildo kiu ne utilos por serĉo de programmisoj.\n"
 "Uzu opcio '-f' se vi vere volas fari tion.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1618
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "Ne eblas skribi QCOW2-bildon al ĉefeligujo!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1624
 msgid "Can not stat output\n"
 msgstr "Malsukcesis eltrovi statinformon pri eligujo\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1634
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "Bildo (%s) estas densigita\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1637
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "Bildo (%s) estas ĉifrita\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1640
+#, fuzzy, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Bildo (%s) estas ĉifrita\n"
+
+#: misc/e2image.c:1644
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr "dum konverto de QCOW2-bildo (%s) al kruda bildo (%s)"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1654
 msgid "The -c option only supported in raw mode\n"
 msgstr "Opcio '-c' uzeblas nur en kruda moduso\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1659
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "Opcio '-c' ne uzeblas dum skribado al ĉefeligujo\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1666
 msgid "while allocating check_buf"
 msgstr "dum asigno de 'check_buf'"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1672
 msgid "The -p option only supported in raw mode\n"
 msgstr "Opcio '-p' uzeblas nur en kruda moduso\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1682
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "Estis %d blokoj kiuj jam enhavis la kopiendajn datumojn\n"
@@ -4665,7 +4740,7 @@ msgstr "e2label: eraro dum legado de ĉefbloko\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: ne estas Ext2-dosiersistemo\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3152
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Averto: etikedo tro longas, ĝi trunkiĝas.\n"
@@ -4680,165 +4755,167 @@ msgstr "e2label: ne eblas resalti al ĉefbloko\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: eraro dum skribado de ĉefbloko\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1733
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Uzmaniero:  e2label APARATO [NOVETIKEDO]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+msgid ""
+"Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> "
+"<filesystem>\n"
 msgstr ""
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr ""
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 #, fuzzy
 msgid "while reading filesystem superblock."
 msgstr "dum legado de kaŝprotokola ĉefbloko"
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 #, fuzzy
 msgid "while fetching superblock"
 msgstr "dum skribado de ĉefbloko"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, fuzzy, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "Kontrolsumo de ĉefbloko ne konkordas kun ĉefbloko"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, fuzzy, c-format
 msgid "illegal offset - %s"
 msgstr "Nevalida pozicio: %s\n"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr ""
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, fuzzy, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "dum malfermo de aparatdosiero"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 #, fuzzy
 msgid "while reading undo file"
 msgstr "dum legado de radika i-nodo"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, fuzzy, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: tro da aparatoj\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, fuzzy, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "Kontrolsumo de i-nodo ne konkordas kun i-nodo"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, fuzzy, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "Difekta ampleksa ĉapo"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr ""
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr ""
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, fuzzy, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr "Kaŝprotokola @S havas nekonatan jesan nekongruan funkcian flagon.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, fuzzy, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "dum eltrovo se %s estas surmetata."
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr ""
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, fuzzy, c-format
 msgid "while opening `%s'"
 msgstr "dum malfermo de i-noda skano"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr ""
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 #, fuzzy
 msgid "while reading keys"
 msgstr "dum legado de bitmapoj"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr ""
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr ""
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, fuzzy, c-format
 msgid "%s: block %llu is too long."
 msgstr "De bloko %lu al %lu\n"
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, fuzzy, c-format
 msgid "while fetching block %llu."
 msgstr "Skribado de bloko %llu\n"
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr ""
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, fuzzy, c-format
 msgid "while writing block %llu."
 msgstr "eraro dum skribado de bloko %llu"
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr ""
@@ -4916,37 +4993,37 @@ msgstr ""
 "    korekti vian dosieron /etc/fstab la plej frue ke vi povas.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s ne troviĝis\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: Ne plu ekzistas ida procezo!!\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Averto... %s por aparato %s finis kun signalo %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: elirstato estas %x -- tio devus neniam okazi.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Finkontrolis aparaton %s (elirstato estas %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Eraro %d dum rulado de 'fsck.%s' por %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -4954,11 +5031,11 @@ msgstr ""
 "Aŭ ĉiuj aŭ neniuj de la dosiersistemaj tipoj je opcio '-t'\n"
 "devus esti prefiksitaj kun 'no' aŭ '!'.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Mankas sufiĉa memoro por dosiersistemaj tipoj\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
@@ -4967,83 +5044,83 @@ msgstr ""
 "%s: transsaltiĝas malbona linio en /etc/fstab: 'bind'-surmeto havas nenulan "
 "sesan kampon (vicnumeron por 'fsck')\n"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: ne eblas kontroli %s: 'fsck.%s' ne troviĝas\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Kontrolo de ĉiuj dosiersistemoj.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--atendado-- (paŝo %d)\n"
 
-#: misc/fsck.c:1078
+#: misc/fsck.c:1085
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Uzmaniero:  fsck [-AMNPRTV] [-C [dosierpriaĵo]] [-t dosiersistemtipo]\n"
 "                 [dosiersistemopcioj] [dosiersistemo...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: tro da aparatoj\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: tro da argumentoj\n"
 
-#: misc/fuse2fs.c:3745
+#: misc/fuse2fs.c:3739
 #, fuzzy
 msgid "Mounting read-only.\n"
 msgstr "Dosiero estas malferma nurlege"
 
-#: misc/fuse2fs.c:3769
+#: misc/fuse2fs.c:3763
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3775 misc/fuse2fs.c:3789
 #, c-format
 msgid "%s: %s.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3776 misc/fuse2fs.c:3791 misc/tune2fs.c:3049
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3798
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3806
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3821
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3825
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3830
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3834
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3838
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr ""
 
@@ -5067,7 +5144,7 @@ msgstr "dum legado de radika i-nodo"
 msgid "While reading version on %s"
 msgstr ""
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5081,35 +5158,35 @@ msgid ""
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Ruliĝas komando: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "dum provo de ruli '%s'"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "dum traktado de listo de malbonaj blokoj el programo"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Abortiĝas...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5117,15 +5194,20 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "dum markado de malbonaj blokoj kiel uzataj"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+#, fuzzy
+msgid "while writing reserved inodes"
+msgstr "dum skribado de kaŝprotokola i-nodo"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Skribiĝas i-nodaj tabeloj: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5134,76 +5216,76 @@ msgstr ""
 "\n"
 "Malsukcesis skribi %d blokojn en i-noda tabelo ekde %llu: %s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2726 misc/mke2fs.c:3131
 msgid "done                            \n"
 msgstr "farita                          \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "dum kreado de radika dosierujo"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "dum legado de radika i-nodo"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "dum agordo de posedeco de radika i-nodo"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "dum kreado de dosierujo '/lost+found'"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "dum serĉado de dosierujo '/lost+found'"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "dum etendado de dosierujo '/lost+found'"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "dum agordo de malbonbloka i-nodo"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Mankas sufiĉa memoro dum viŝado de sektoroj %d-%d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Averto: malsukcesis legi blokon 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Averto: malsukcesis viŝi sektoron %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "dum pravalorizo de kaŝprotokola ĉefbloko"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Nulpleniĝas kaŝprotokola aparato: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "dum nulplenigo de kaŝprotokola aparato (bloko %llu, numero %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "dum skribado de kaŝprotokola ĉefbloko"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "Kreado de dosiersistemo kun %llu blokoj (de %dK) kaj %u i-nodoj\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5212,154 +5294,159 @@ msgstr ""
 "Averto: %llu blokoj ne uziĝas.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Dosiersistema etikedo=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Mastrumsistema tipo: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blokgrando=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Faska grando=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Fragmenta grando=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "'Stride'-paŝo=%u blokoj, 'stripe'-larĝo=%u blokoj\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u i-nodoj, %llu blokoj\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu blokoj (%2.2f%%) rezerviĝas por la ĉefuzanto\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Unua datumbloko=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Posedanto de radika dosierujo=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maksimuma nombro de dosiersistemaj blokoj=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u blokgrupoj\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u blokgrupo\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u blokoj po grupo, %u faskoj po grupo\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blokoj po grupo, %u fragmentoj po grupo\n"
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u i-nodoj po grupo\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "Dosiersistema UUID=%s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Ĉefblokaj savkopioj gardiĝas en blokoj: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:820
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s bezonas '-O 64bit'\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:826
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "'%s' devas esti antaŭ 'resize=%u'\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:839
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Nevalida 'desc_size': '%s'\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:853
+#, fuzzy, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Nevalida pozicio: %s\n"
+
+#: misc/mke2fs.c:865
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Nevalida pozicio: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:879 misc/tune2fs.c:2101
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Nevalida 'mmp_update_interval': %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:896
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Malvalida nombro de savkopiaj ĉefblokoj: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:918
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Malvalida argumento por 'stride': %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:933
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Malvalida argumento por 'stripe'-larĝo: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:956
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Malvalida argumento por 'resize': %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:963
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:987
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1013 misc/mke2fs.c:1022
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Nevalida radikposedanto: '%s'\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1065
 #, c-format
 msgid ""
 "\n"
@@ -5386,7 +5473,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1090
 #, c-format
 msgid ""
 "\n"
@@ -5394,41 +5481,41 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1135
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1148 misc/tune2fs.c:1120
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Nevalida dosiersistema opcio agordiĝas: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1160 misc/tune2fs.c:411
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Nevalida surmeta opcio agordiĝas: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1296
 #, c-format
 msgid ""
 "\n"
 "Your mke2fs.conf file does not define the %s filesystem type.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1300
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1304
 msgid "Aborting...\n"
 msgstr "Abortiĝas...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1345
 #, c-format
 msgid ""
 "\n"
@@ -5436,151 +5523,151 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1527
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Mankas sufiĉa memoro por nova 'PATH'.\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1564
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1597
 #, c-format
 msgid "invalid block size - %s"
 msgstr "nevalida blokgrando: %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1601
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Averto: blokgrando %d ne uzeblas en plejmulto de sistemoj.\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1617
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "nevalida faskgrando: %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1630
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "opcio '-R' arkaikas; uzu '-E' anstataŭe"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1644 misc/tune2fs.c:1830
 #, c-format
 msgid "bad error behavior - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1656
 msgid "Illegal number for blocks per group"
 msgstr "Nevalida nombro de blokoj po grupo"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1661
 msgid "blocks per group must be multiple of 8"
 msgstr "blokoj po grupo devas esti oblo de 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1669
 msgid "Illegal number for flex_bg size"
 msgstr "Malvalida nombro por grando de 'flex_bg'"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1675
 msgid "flex_bg size must be a power of 2"
 msgstr "Grando de 'flex_bg' devas esti potenco de 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1680
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "Grando de 'flex_bg' (%lu) devas esti malpli ol (aŭ egale al) 2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1690
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "nevalida i-noda rilato %s (min %d/maks %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1700
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "nevalida i-noda grando: %s"
 
-#: misc/mke2fs.c:1684
+#: misc/mke2fs.c:1713
 msgid ""
 "Warning: -K option is deprecated and should not be used anymore. Use '-E "
 "nodiscard' extended option instead!\n"
 msgstr ""
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1724
 msgid "in malloc for bad_blocks_filename"
 msgstr "mankas sufiĉa memoro en 'bad_blocks_filename()'"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1733
 #, fuzzy, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr "Averto: etikedo tro longas, ĝi trunkiĝas.\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1742
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "nevalida elcento de rezervitaj blokoj: %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1757
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "nevalida nombro de i-nodoj: %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1770
 #, fuzzy
 msgid "while allocating fs_feature string"
 msgstr "dum asigno de bufroj"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1787
 #, c-format
 msgid "bad revision level - %s"
 msgstr "nevalida revizia nivelo: %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1792
 #, c-format
 msgid "while trying to create revision %d"
 msgstr ""
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1806
 msgid "The -t option may only be used once"
 msgstr "Opcio '-t' uzeblas nur unu fojon"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1814
 msgid "The -T option may only be used once"
 msgstr "Opcio '-T' uzeblas nur unu fojon"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1870 misc/mke2fs.c:3215
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "dum provo de malfermi kaŝprotokolan aparaton %s\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1876
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 "Blokgrando %d de kaŝprotokola aparato estas pli malgranda ol minimuma "
 "blokgrando %d\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1882
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Blokgrando de kaŝprotokola aparato uziĝas: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1893
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "nevalidaj blokoj '%s' en aparato '%s'"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1923
 msgid "filesystem"
 msgstr "dosiersistemo"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1941 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "dum eltrovo de dosiersistema grando"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1947
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5588,7 +5675,7 @@ msgstr ""
 "Malsukcesis eltrovi aparatan grandon;\n"
 "necesas indiki la grandon de la dosiersistemo\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1954
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5596,130 +5683,135 @@ msgid ""
 "\tto re-read your partition table.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:1971
 msgid "Filesystem larger than apparent device size."
 msgstr "Dosiersistemo pli grandas ol ŝajna aparata grando."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:1991
 msgid "Failed to parse fs types list\n"
 msgstr "Malsukcesis analizi liston de dosiersistemaj tipoj\n"
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2040
 #, fuzzy
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "Ekstera kaŝprotokolo ne subtenas ĉi tiun dosiersistemon.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2045
 #, fuzzy
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "Ekstera kaŝprotokolo ne subtenas ĉi tiun dosiersistemon.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2050
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2055
+#, fuzzy
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "Ekstera kaŝprotokolo ne subtenas ĉi tiun dosiersistemon.\n"
+
+#: misc/mke2fs.c:2065
 msgid "while trying to determine hardware sector size"
 msgstr ""
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2071
 msgid "while trying to determine physical sector size"
 msgstr ""
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2103
 msgid "while setting blocksize; too small for device\n"
 msgstr "dum agordo de blokgrando; ĝi tro malgrandas por aparato\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2132
 #, 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:2098
+#: misc/mke2fs.c:2144
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2166
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr ""
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2173
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2181
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2191
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Kaŝprotokoloj ne subtenatas en dosiersistemoj de revizio 0\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2204
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "nevalida elcento de rezervitaj blokoj: %lf"
 
-#: misc/mke2fs.c:2175
+#: misc/mke2fs.c:2221
 msgid ""
 "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
 "rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2241
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "Faskgrando ne povas esti pli malgranda ol blokgrando.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2247
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "indiki faskgrandon bezonas la 'bigalloc'-kapablon"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2267
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2270
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2272
 #, c-format
 msgid ""
 "This may result in very poor performance, (re)-partitioning suggested.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2293
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2297
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2305
 #, c-format
 msgid ""
 "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
 "and journal checksum features.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2360
 #, c-format
 msgid ""
 "\n"
@@ -5729,17 +5821,22 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2375
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr ""
+
+#: misc/mke2fs.c:2397
 msgid "Can't support bigalloc feature without extents feature"
 msgstr ""
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2404
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2412
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5747,44 +5844,39 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2424
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2433
 msgid "blocks per group count out of range"
 msgstr "nombro de blokoj po grupo estas ekster gamo"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2455
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2467
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "nevalida i-nodgrando %d (min %d/maks %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2482
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr ""
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2497
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "tro multaj i-nodoj (%llu); ĉu altigi la i-nodan rilaton?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2504
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "tro multaj i-nodoj (%llu); indiku malpli ol 2^32 i-nodoj"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2518
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5792,68 +5884,73 @@ msgid ""
 "\tor lower inode count (-N).\n"
 msgstr ""
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2705
 msgid "Discarding device blocks: "
 msgstr ""
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2721
 msgid "failed - "
 msgstr ""
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2780
 #, fuzzy
 msgid "while initializing quota context"
 msgstr "dum pravalorizo de 'ext2_qcow2_image'"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2787
 #, fuzzy
 msgid "while writing quota inodes"
 msgstr "dum skribado de kaŝprotokola i-nodo"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2812
 #, fuzzy, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "nevalida revizia nivelo: %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2888
+#, fuzzy
+msgid "in malloc for android_sparse_params"
+msgstr "mankas sufiĉa memoro en 'bad_blocks_filename()'"
+
+#: misc/mke2fs.c:2902
 msgid "while setting up superblock"
 msgstr ""
 
-#: misc/mke2fs.c:2849
+#: misc/mke2fs.c:2918
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Pass -O extents to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2856
+#: misc/mke2fs.c:2925
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
+#: misc/mke2fs.c:2933
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:2957
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr ""
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3056
 #, c-format
 msgid "unknown os - %s"
 msgstr "nekonata mastrumsistemo: %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3119
 msgid "Allocating group tables: "
 msgstr "Asigno de grupaj tabeloj: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3127
 msgid "while trying to allocate filesystem tables"
 msgstr "dum asigno de dosiersistemaj tabeloj"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3136
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -5861,30 +5958,30 @@ msgstr ""
 "\n"
 "    dum konverto de subfaska bloka bitmapo"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3142
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr ""
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3183
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "dum nulplenigo de bloko %llu je fino de dosiersistemo"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3196
 msgid "while reserving blocks for online resize"
 msgstr ""
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3208 misc/tune2fs.c:1538
 msgid "journal"
 msgstr "kaŝprotokolo"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3220
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Aldoniĝas kaŝprotokolo al aparato %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3227
 #, c-format
 msgid ""
 "\n"
@@ -5893,21 +5990,21 @@ msgstr ""
 "\n"
 "    dum provo de aldoni kaŝprotokolon al aparato %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3232 misc/mke2fs.c:3261 misc/mke2fs.c:3299
+#: misc/mk_hugefiles.c:598 misc/tune2fs.c:1567 misc/tune2fs.c:1586
 msgid "done\n"
 msgstr "pretas\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3238
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Transsaltiĝas kreado de kaŝprotokolo en nurĉefa moduso\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3248
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Kreado de kaŝprotokolo (%u blokoj): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3257
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -5915,39 +6012,37 @@ msgstr ""
 "\n"
 "    dum provo de krei kaŝprotokolon"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3269 misc/tune2fs.c:1185
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3274
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3290
 #, fuzzy
 msgid "Copying files into the device: "
 msgstr "Eraro dum elbufrigo de skriboj al memoraparato: %m\n"
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3296
 #, fuzzy
 msgid "while populating file system"
 msgstr "dum asigno de l1-tabelo"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3303
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 
-#: misc/mke2fs.c:3230
+#: misc/mke2fs.c:3310
 #, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr "dum skribado de kaŝprotokola ĉefbloko"
+msgid "while writing out and closing file system"
+msgstr "dum nulplenigo de bloko %llu je fino de dosiersistemo"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3313
 msgid ""
 "done\n"
 "\n"
@@ -5955,29 +6050,34 @@ msgstr ""
 "pretas\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
+#, fuzzy, c-format
+msgid "while zeroing block %llu for hugefile"
+msgstr "dum nulplenigo de bloko %llu je fino de dosiersistemo"
+
+#: misc/mk_hugefiles.c:514
 #, c-format
 msgid ""
 "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:581
 msgid "Huge files will be zero'ed\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:582
 #, fuzzy, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "Kreiĝas normala dosiero %s\n"
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:584
 #, fuzzy, c-format
 msgid "with %llu blocks each"
 msgstr ""
 "Averto: %llu blokoj ne uziĝas.\n"
 "\n"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:593
 #, fuzzy, c-format
 msgid "while creating huge file %lu"
 msgstr "dum iteracio je i-nodo %u"
@@ -6017,241 +6117,250 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr ""
 
 #: misc/tune2fs.c:119
-msgid "Please run e2fsck -f on the filesystem.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
 msgstr ""
 
 #: misc/tune2fs.c:121
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr ""
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
 msgstr ""
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
 msgstr ""
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Kaŝprotokola ĉefbloko ne troviĝis!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "dum provo de malfermi eksteran kaŝprotokolon"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2845
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s ne estas kaŝprotokola aparato.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:297 misc/tune2fs.c:2856
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "Dosiersistema UUID ne troviĝis en kaŝprotokola aparato.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:321
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:330
 msgid "Journal removed\n"
 msgstr "Kaŝprotokolo forigiĝis\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:374
 msgid "while reading bitmaps"
 msgstr "dum legado de bitmapoj"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:382
 msgid "while clearing journal inode"
 msgstr "dum viŝado de kaŝprotokola i-nodo"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:393
 msgid "while writing journal inode"
 msgstr "dum skribado de kaŝprotokola i-nodo"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:429 misc/tune2fs.c:452 misc/tune2fs.c:465
 msgid "(and reboot afterwards!)\n"
 msgstr "(kaj poste restartigu la komputilon!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:480
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr ""
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:483
 #, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr ""
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:487
 #, c-format
 msgid " -z \"%s\""
 msgstr ""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:489
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:491
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1087
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1123
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1129
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1138
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1146
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1164
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1177
 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:1082
+#: misc/tune2fs.c:1195
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1204
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1212
 msgid "Error while reading bitmaps\n"
 msgstr ""
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1221
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr ""
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1226
 msgid "while reading MMP block."
 msgstr ""
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1258
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1269
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1280
 msgid "Enabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1282
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1175
+#: misc/tune2fs.c:1288
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Re-run with -O extent to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1182
+#: misc/tune2fs.c:1295
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Run resize2fs -b to "
 "rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1321
 msgid "Disabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1323
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1386
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1396
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1426
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1447
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1465
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1483
 msgid ""
 "UUID has changed since enabling metadata_csum.  Filesystem must be "
 "unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1489
+msgid "Recalculating checksums could take some time."
+msgstr ""
+
+#: misc/tune2fs.c:1531
 msgid "The filesystem already has a journal.\n"
 msgstr "Dosiersistemo jam havas kaŝprotokolon.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1551
 #, c-format
 msgid ""
 "\n"
@@ -6260,21 +6369,21 @@ msgstr ""
 "\n"
 "    dum provo de malfermi kaŝprotokolon en %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1555
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Kreado de kaŝprotokolo en aparato %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1563
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "dum aldoniĝo de dosiersistemo al kaŝprotokolo en %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1569
 msgid "Creating journal inode: "
 msgstr "Kreado de kaŝprotokola i-nodo: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1583
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6282,27 +6391,32 @@ msgstr ""
 "\n"
 "    dum provo de krei kaŝprotokola dosiero"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1621
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1634
 #, fuzzy
 msgid "while initializing quota context in support library"
 msgstr "dum pravalorizo de kaŝprotokola ĉefbloko"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1649
 #, fuzzy, c-format
 msgid "while updating quota limits (%d)"
 msgstr "dum ĝisdatigo de malbonbloka i-nodo"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1657
 #, fuzzy, c-format
 msgid "while writing quota file (%d)"
 msgstr "dum skribado de i-noda tabelo"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1675
 #, fuzzy, c-format
 msgid "while removing quota file (%d)"
 msgstr "dum legado de radika i-nodo"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1718
 msgid ""
 "\n"
 "Bad quota options specified.\n"
@@ -6316,65 +6430,65 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1776
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr ""
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1801 misc/tune2fs.c:1814
 #, c-format
 msgid "bad mounts count - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1857
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1890
 #, c-format
 msgid "bad interval - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1919
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1934
 msgid "-o may only be specified once"
 msgstr ""
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1943
 msgid "-O may only be specified once"
 msgstr ""
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1989
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:2006
 #, c-format
 msgid "bad inode size - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:2013
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr ""
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2110
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2115
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
 msgid_plural ""
@@ -6382,27 +6496,27 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2138
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2153
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2168
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2174
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2193
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6414,242 +6528,249 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2663
 msgid "Failed to read inode bitmap\n"
 msgstr ""
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2668
 msgid "Failed to read block bitmap\n"
 msgstr ""
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2685 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr ""
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2688
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr ""
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2694
 msgid "Not enough space to increase inode size \n"
 msgstr ""
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2699
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr ""
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2731
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
 msgstr ""
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2936
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+
+#: misc/tune2fs.c:2943
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2955
 #, fuzzy
 msgid "Cannot modify a journal device.\n"
 msgstr "%s ne estas kaŝprotokola aparato.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2968
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2975
 msgid "Shrinking inode size is not supported\n"
 msgstr ""
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2980
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2986
 msgid "Resizing inodes could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3034
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+
+#: misc/tune2fs.c:3045
+#, fuzzy, c-format
+msgid "Recovering journal.\n"
+msgstr "%s: restaŭriĝas kaŝprotokolo...\n"
+
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3074
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3079
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3084
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr ""
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3091
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr ""
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3098
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3104
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr ""
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3111
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3116
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3119
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3129
 #, c-format
 msgid ""
 "\n"
 "Sparse superblock flag set.  %s"
 msgstr ""
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3134
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3142
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3148
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3180
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr ""
 
-#: misc/tune2fs.c:3024
+#: misc/tune2fs.c:3198
 msgid ""
 "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3222
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3051
+#: misc/tune2fs.c:3225
 msgid ""
 "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
 "and re-run this command.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3060
+#: misc/tune2fs.c:3234
 msgid "Setting UUID on a checksummed filesystem could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3259
 msgid "Invalid UUID format\n"
 msgstr ""
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3275
 msgid "Need to update journal superblock.\n"
 msgstr "Necesas ĝisdatigi kaŝprotokolan ĉefblokon.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3301
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "Nur eblas ŝanĝi i-nodan grandon kiam dosiersistemo ne estas surmetata.\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3308
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3326
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Argordiĝas i-noda grando al %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3330
 msgid "Failed to change inode size\n"
 msgstr "Fiaskis ŝanĝo de i-noda grando\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3344
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3349
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3356
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, fuzzy, c-format
-msgid "Recovering journal.\n"
-msgstr "%s: restaŭriĝas kaŝprotokolo...\n"
-
 #: misc/util.c:100
 msgid "<proceeding>\n"
 msgstr ""
 
 #: misc/util.c:104
 #, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
 msgstr ""
 
 #: misc/util.c:108
@@ -6874,40 +6995,40 @@ msgstr ""
 #, c-format
 msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"[-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr ""
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr ""
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr ""
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr ""
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr ""
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr ""
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr ""
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -6915,47 +7036,47 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr ""
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr ""
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr ""
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr ""
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr ""
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr ""
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr ""
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -6963,32 +7084,32 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr ""
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
 msgid ""
 "Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
 "blocks.\n"
 msgstr ""
 
-#: resize/main.c:575
+#: resize/main.c:581
 #, fuzzy, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr ""
 "Nur eblas ŝanĝi i-nodan grandon kiam dosiersistemo ne estas surmetata.\n"
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
 msgid ""
 "Please enable the extents feature with tune2fs before enabling the 64bit "
 "feature.\n"
 msgstr ""
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
@@ -6997,44 +7118,44 @@ msgstr ""
 "La dosiersistemo jam havas %llu blokojn (de %dK).  Nenio farendas.\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, fuzzy, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "Dosiersistemo jam havas kaŝprotokolon.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, fuzzy, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "Dosiersistemo jam havas kaŝprotokolon.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr ""
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr ""
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr "Dosiersistemo sur %s regrandigiĝas al %llu blokoj (de %dK).\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "dum provo de regrandigi %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
 "after the aborted resize operation.\n"
 msgstr ""
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7043,7 +7164,7 @@ msgstr ""
 "Dosiersistemo sur %s nun havas %llu blokojn (de %dK).\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr ""
@@ -7104,12 +7225,12 @@ msgstr ""
 msgid "While trying to extend the last group"
 msgstr ""
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr ""
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
 msgid ""
 "Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
@@ -7117,36 +7238,36 @@ msgid ""
 msgstr ""
 
 #: resize/resize2fs.c:759
-#, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr ""
+#, fuzzy, c-format
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "Grando de 'flex_bg' (%lu) devas esti malpli ol (aŭ egale al) 2^31"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr ""
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr ""
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2475
 msgid "new meta blocks"
 msgstr "novaj metablokoj"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2698
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2703
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2776
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:11
-msgid "EXT2FS Library version 1.43.4-WIP"
+msgid "EXT2FS Library version 1.44.4"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:12
@@ -7707,7 +7828,8 @@ msgid "MMP: device currently active"
 msgstr "MMP: aparato nune aktivas"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
+#, fuzzy
+msgid "MMP: e2fsck being run"
 msgstr "MMP: 'fsck' rulas"
 
 #: lib/ext2fs/ext2_err.c:152
@@ -7763,7 +7885,8 @@ msgid "Unknown checksum algorithm"
 msgstr "Nekonata kontrolsuma algoritmo"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
+#, fuzzy
+msgid "MMP block checksum does not match"
 msgstr "Kontrolsumo de MMP-bloko ne konkordas kun MMP-bloko"
 
 #: lib/ext2fs/ext2_err.c:166
@@ -7872,6 +7995,10 @@ msgstr "La Ext2-ĉefbloko estas difekta"
 msgid "Inode is corrupted"
 msgstr "Regrandiga i-nodo estas difekta"
 
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
+
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
 msgstr ""
@@ -8062,8 +8189,14 @@ msgstr "%s enhavas %s-dosiersistemon\n"
 msgid "%s contains `%s' data\n"
 msgstr "%s enhavas %s-dosiersistemon\n"
 
-#~ msgid "Invalid quotatype parameter: %s\n"
-#~ msgstr "Malvalida argumento por 'quotatype': %s\n"
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr "dum skribado de kaŝprotokola ĉefbloko"
+
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "'i_dir_acl' @F %Id, @s nulo.\n"
 
 #~ msgid "@i %i has @cion flag set on @f without @cion support.  "
 #~ msgstr ""
@@ -8076,5 +8209,46 @@ msgstr "%s enhavas %s-dosiersistemon\n"
 #~ msgid ", unused inodes %u\n"
 #~ msgstr ", neuzitaj i-nodoj %u\n"
 
+#~ msgid "Journal features:        "
+#~ msgstr "Kaŝprotokolaj kapabloj:    "
+
+#~ msgid "Journal size:             "
+#~ msgstr "Kaŝprotokola grando:       "
+
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "Kaŝprotokola longo:        %u\n"
+#~ "Kaŝprotokola sekvenco:     0x%08x\n"
+#~ "Kaŝprotokola komenco:      %u\n"
+
+#~ msgid "Journal errno:            %d\n"
+#~ msgstr "Kaŝprotokola erarnumero:   %d\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Kaŝprotokola blokgrando:   %u\n"
+#~ "Kaŝprotokola longo:        %u\n"
+#~ "Kaŝprotokola unua bloko:   %u\n"
+#~ "Kaŝprotokola sekvenco:     0x%08x\n"
+#~ "Kaŝprotokola komenco:      %u\n"
+#~ "Kaŝprotokola uzantnombro:  %u\n"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "Kaŝprotokolaj uzantoj:     %s\n"
+
 #~ msgid "Failed to open %s\n"
 #~ msgstr "Malsukcesis malfermi %s\n"
+
+#~ msgid "Invalid quotatype parameter: %s\n"
+#~ msgstr "Malvalida argumento por 'quotatype': %s\n"
index 20e347e..a3f46fb 100644 (file)
Binary files a/po/es.gmo and b/po/es.gmo differ
index c97d338..3504566 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -1,11 +1,10 @@
 # Mensajes en español para e2fsprogs.
-# TODO por o para
 # Copyright (C) 2014 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
 #
 # Max de Mendizábal <max@upn.mx>, 2003, 2005.
 # Benno Schulenberg <benno@vertaalt.nl>, 2008, 2014.
-# Antonio Ceballos <aceballos@gmail.com>, 2014, 2015, 2016.
+# Antonio Ceballos <aceballos@gmail.com>, 2014, 2015, 2016, 2017, 2018, 2019.
 #
 # Comienzo de un vocabulario (lista de palabras usadas aquí):
 # block --> bloque
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -69,7 +75,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs-1.43.1\n"
+"Project-Id-Version: e2fsprogs-1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2016-09-27 08:31+0200\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2019-07-23 19:08+0200\n"
 "Last-Translator: Antonio Ceballos <aceballos@gmail.com>\n"
 "Language-Team: Spanish <es@tp.org.es>\n"
 "Language: es\n"
@@ -109,7 +115,7 @@ msgstr ""
 # ¿Qué tal "se descarta"? Me gustaría saber si hay algún glosario de
 # frases para traducir programas GNU, son cosas que deberían ser
 # estándar. mm
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "El bloque dañado %u está fuera del intervalo; se descarta.\n"
@@ -129,11 +135,12 @@ msgstr "mientras se revisaba la salud del nodo-i de bloques dañados"
 msgid "while reading the bad blocks inode"
 msgstr "mientras se leía el nodo-i de bloques dañados"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "mientras se intentaba abrir %s"
@@ -141,9 +148,9 @@ msgstr "mientras se intentaba abrir %s"
 #: e2fsck/badblocks.c:83
 #, c-format
 msgid "while trying popen '%s'"
-msgstr "mientras se intentaba abrir una tubería a '%s'"
+msgstr "mientras se intentaba abrir la tubería '%s'"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "mientras se leía una lista de bloques dañados desde un fichero"
 
@@ -156,9 +163,11 @@ msgstr "mientras se actualizaba el nodo-i de bloques dañados"
 #: e2fsck/badblocks.c:133
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
-msgstr ""
-"Atención: se encontró un bloque no válido %u en el nodo-i de bloques "
-"dañados. Limpiado.\n"
+msgstr "Atención: se encontró un bloque no válido %u en el nodo-i de bloques dañados. Limpiado.\n"
+
+#: e2fsck/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "mientras se liberaba el fichero tdb dir_info"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -228,22 +237,19 @@ msgstr "Modo de empleo: %s disco\n"
 #: e2fsck/flushb.c:64
 #, c-format
 msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
-msgstr ""
-"¡No está implementado el control de entrada/salida del BLKFLSBUF! No se "
-"pueden vaciar los búfers.\n"
+msgstr "¡No está implementado el control de entrada/salida BLKFLSBUF! No se pueden vaciar los búfers.\n"
 
 #: e2fsck/iscan.c:44
 #, c-format
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
-msgstr ""
-"Modo de empleo: %s [-F] [-I bloques_del_búfer_del_nodo_i] dispositivo\n"
+msgstr "Modo de empleo: %s [-F] [-I bloques_del_búfer_del_nodo_i] dispositivo\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "mientras se abría %s para su vaciado"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "mientras se intentaba vaciar %s"
@@ -253,11 +259,11 @@ msgstr "mientras se intentaba vaciar %s"
 msgid "while trying to open '%s'"
 msgstr "mientras se intentaba abrir '%s'"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr "mientras se iniciaba la exploración de los nodos-i"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr "mientras se obtenía el nodo-i siguiente"
 
@@ -266,7 +272,7 @@ msgstr "mientras se obtenía el nodo-i siguiente"
 msgid "%u inodes scanned.\n"
 msgstr "%u nodos-i explorados.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "leyendo el superbloque del fichero de transacciones\n"
 
@@ -275,361 +281,375 @@ msgstr "leyendo el superbloque del fichero de transacciones\n"
 # que es distinto (a lo mejor no se ha encontrado ningún superbloque
 # en absoluto). Creo que la traducción debería cambiarse. sv
 # En efecto, tienes toda la razón. Corregido. mm
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
-msgstr ""
-"%s: no se ha encontrado un superbloque válido en el fichero de "
-"transacciones\n"
+msgstr "%s: no se ha encontrado un superbloque válido en el fichero de transacciones\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: el fichero de transacciones es demasiado corto\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: recuperando el fichero de transacciones\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
-msgstr ""
-"%s: no se puede hacer la recuperación del fichero de transacciones en modo "
-"de sólo lectura\n"
+msgstr "%s: no se puede hacer la recuperación del fichero de transacciones en modo de sólo lectura\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "mientras se intentaba reabrir %s"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "aatributo extendido"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Aerror en la reserva"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bbloque"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bmapa de bits"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "ccompresión"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Centra en conflicto con algún otro @b del sistema de ficheros"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "ddirectorio"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Dborrado"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "eentrada"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "ELa @e '%Dn' que está en %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "fsistema de ficheros"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fpara el @i %i (%Q) es"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "ggrupo"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "hEl ÁRBOL-H del @i del @d"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "inodo-i"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Ino válido"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jfichero de transacciones"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Les un enlace"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mreclamado en múltiples ocasiones"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "ninválido"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "ohuérfano"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pproblema en"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qcuota"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "r@i raíz"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "sdebería ser"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssuper@b"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "udesacoplado"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vdispositivo"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xextent"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "zlongitud cero"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<El nodo-i NULO>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<El nodo-i de bloques dañados>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<El nodo-i de la cuota de usuario>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<El nodo-i de la cuota de grupo>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<El nodo-i del cargador de arranque>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<El nodo-i del directorio de desborrado>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
-msgstr "<El nodo-i descriptor del grupo>"
+msgstr "<El nodo-i del descriptor de grupo>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<El nodo-i del fichero de transacciones>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Se ha reservado el nodo-i 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Se ha reservado el nodo-i 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "fichero normal"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "directorio"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "dispositivo de caracteres"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "dispositivo de bloque"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
-msgstr "tubería designada"
+msgstr "tubería con nombre"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "enlace simbólico"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "«socket»"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "tipo de fichero desconocido con modo 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "bloque indirecto"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "bloque doblemente indirecto"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "bloque triplemente indirecto"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "bloque de traducción"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "bloque #"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "usuario"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "grupo"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr "proyecto"
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "tipo de cuota desconocido"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "mapa de nodos-i reclamados en múltiples ocasiones"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "error interno: no se ha encontrado el dup_blk para %llu\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "regresado del clone_file_block"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
-msgstr ""
-"Error interno: no se puede encontrar el registro de bloque EA para %llu"
+msgstr "Error interno: no se puede encontrar el registro de bloque EA para %llu"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "Error interno: no se puede encontrar el registro de bloque EA %u"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr "mientras se hace «hash» de la entrada con e_value_inum = %u"
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 msgid "reading directory block"
 msgstr "leyendo bloque de directorio"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 msgid "in-use inode map"
 msgstr "mapa de nodos-i usados"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 msgid "directory inode map"
 msgstr "mapa de nodos-i de directorio"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 msgid "regular file inode map"
 msgstr "mapa de nodos-i de ficheros normales"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr "mapa de bloques usados"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1263
 msgid "metadata block map"
 msgstr "mapa de bloques de metadatos"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 msgid "opening inode scan"
 msgstr "iniciando la exploración de los nodos-i"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr "obteniendo el siguiente nodo-i para examinar"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 msgid "Pass 1"
 msgstr "Paso 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "leyendo bloques indirectos del nodo-i %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 msgid "bad inode map"
 msgstr "mapa de nodos-i dañados"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 msgid "inode in bad block map"
 msgstr "el nodo-i está en el mapa de bloques dañados"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 msgid "imagic inode map"
 msgstr "mapa de nodos-i con 'imagic'"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr "mapa de bloques reclamados en múltiples ocasiones"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr "mapa de bloques de atributos extendidos"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
-msgstr ""
-"%6lu(%c): se esperaba %6lu, pero se han obtenido bloques físicos %6lu "
-"(número de bloques %lld)\n"
+msgstr "%6lu(%c): se esperaba %6lu, pero se han obtenido bloques físicos %6lu (número de bloques %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 msgid "block bitmap"
 msgstr "mapa de bits de bloques"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 msgid "inode bitmap"
 msgstr "mapa de bits de nodos-i"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 msgid "inode table"
 msgstr "tabla de nodos-i"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Paso 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 msgid "Can not continue."
 msgstr "No se puede continuar."
 
@@ -639,7 +659,7 @@ msgstr "mapa de bits de nodos-i pasados"
 
 #: e2fsck/pass3.c:86
 msgid "Peak memory"
-msgstr "Memoria pico"
+msgstr "Pico de memoria"
 
 #: e2fsck/pass3.c:149
 msgid "Pass 3"
@@ -649,23 +669,23 @@ msgstr "Paso 3"
 msgid "inode loop detection bitmap"
 msgstr "mapa de bits de detección de bucles de nodos-i"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Paso 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Paso 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr "check_inode_bitmap_checksum: Error de asignación de memoria"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr "check_block_bitmap_checksum: Error de asignación de memoria"
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 msgid "(no prompt)"
 msgstr "(sin cursor)"
 
@@ -673,179 +693,183 @@ msgstr "(sin cursor)"
 # mejor en forma impersonal. Fíjate que todos los demás verbos que siguen
 # están en infinitivo.
 # Cierto. mm
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 msgid "Fix"
 msgstr "Arreglar"
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:54
 msgid "Clear"
 msgstr "Borrar"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr "Reubicar"
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
 msgid "Allocate"
 msgstr "Reservar"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 msgid "Expand"
 msgstr "Expandir"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 msgid "Connect to /lost+found"
 msgstr "Conectar a /lost+found"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 msgid "Create"
 msgstr "Crear"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr "Recuperar"
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
 msgid "Truncate"
 msgstr "Truncar"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 msgid "Clear inode"
 msgstr "Borrar nodo-i"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 msgid "Abort"
 msgstr "Interrumpir"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 msgid "Split"
 msgstr "Dividir"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 msgid "Continue"
 msgstr "Continuar"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr "Clonar los bloques reclamados en múltiples ocasiones"
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 msgid "Delete file"
 msgstr "Borrar fichero"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 msgid "Suppress messages"
 msgstr "Eliminar mensajes"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
 msgid "Unlink"
 msgstr "Desvincular"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 msgid "Clear HTree index"
 msgstr "Borrar el índice del árbol-H"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 msgid "Recreate"
 msgstr "Recrear"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr "Optimizar"
+
+#: e2fsck/problem.c:81
 msgid "(NONE)"
 msgstr "(NINGUNO)"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 msgid "FIXED"
 msgstr "ARREGLADO"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 msgid "CLEARED"
 msgstr "BORRADO"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr "REUBICADO"
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 msgid "ALLOCATED"
 msgstr "RESERVADO"
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr "EXPANDIDO"
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr "RECONECTADO"
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 msgid "CREATED"
 msgstr "CREADO"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr "RECUPERADO"
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
 msgid "TRUNCATED"
 msgstr "TRUNCADO"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 msgid "INODE CLEARED"
 msgstr "NODO-I BORRADO"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 msgid "ABORTED"
 msgstr "INTERRUMPIDO"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 msgid "SPLIT"
 msgstr "DIVIDIDO"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr "CONTINUANDO"
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr "SE CLONARON LOS BLOQUES RECLAMADOS EN MÚLTIPLES OCASIONES"
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 msgid "FILE DELETED"
 msgstr "FICHERO BORRADO"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr "SUPRIMIDO"
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr "DESVINCULADO"
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 msgid "HTREE INDEX CLEARED"
 msgstr "SE HA LIMPIADO EL ÍNDICE DEL ÁRBOL-H"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 msgid "WILL RECREATE"
-msgstr "SE RECREARÁ"
+msgstr "SE CREARÁ DE NUEVO"
+
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr "SE OPTIMIZARÁ"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:115
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
-msgstr ""
-"El mapa de bits de bloques para el grupo %g no está en el grupo.  (bloque "
-"%b)\n"
+msgstr "El mapa de bits de bloques para el grupo %g no está en el grupo.  (bloque %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:119
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
-msgstr ""
-"El mapa de bits de nodos-i para el grupo %g no está en el grupo.  (bloque "
-"%b)\n"
+msgstr "El mapa de bits de nodos-i para el grupo %g no está en el grupo.  (bloque %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -862,7 +886,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -887,7 +911,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -901,7 +925,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -912,25 +936,25 @@ msgstr ""
 "tamaños de fragmento distintos al del @b.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "El «blocks_per_group» del @S es %b y debería haber sido %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "El «first_data_block» del @S es %b y debería haber sido %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
 msgstr "El @f no tiene un UUID; se generará uno.\n"
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -941,55 +965,55 @@ msgid ""
 msgstr ""
 "Nota: si varios bloques de mapas de bits (de nodos-i o de bloques)\n"
 "o parte de la tabla de nodos-i necesitan reubicación,\n"
-"es posible que primero se quiera intentar ejecutar e2fsck con\n"
-"la opción '-b %S'. El problema podría estar únicamente en el\n"
-"descriptor primario del grupo de bloques y el\n"
-"descriptor del grupo de bloques de respaldo podría estar bien.\n"
+"es posible que primero quiera intentar ejecutar e2fsck con\n"
+"la opción '-b %S'. El problema podría estar únicamente en los\n"
+"descriptores del grupo de bloques primario, y los\n"
+"descriptores del grupo de bloques de respaldo podrían estar bien.\n"
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "El @S está corrupto.  (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:186
+#, no-c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Error al determinar el tamaño del @v físico: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:191
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "La cuenta @i en el @S es %i, @s %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "El Hurd no tiene implementada la opción de tipos de fichero.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:201
+#, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "@S tiene un @j @n (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr "El @j externo tiene varios usuarios del @f (no implementado).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:211
 msgid "Can't find external @j\n"
 msgstr "No se ha encontrado un @j externo\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 msgid "External @j has bad @S\n"
 msgstr "El @j externo tiene un @S dañado\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 msgid "External @j does not support this @f\n"
 msgstr "El @j externo no tiene implementado este @f\n"
 
@@ -997,99 +1021,95 @@ msgstr "El @j externo no tiene implementado este @f\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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 ""
 "El @S del @j del @f es de un tipo desconocido %N (no implementado).\n"
-"Es probable que su copia de e2fsck sea muy antigua y/o no tenga "
-"implementado\n"
+"Es probable que su copia de e2fsck sea muy antigua y/o no tenga implementado\n"
 "este formato de @j.\n"
 "También es posible que el @S del @j esté corrupto.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:235
 msgid "@j @S is corrupt.\n"
 msgstr "El @S del @j está corrupto.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "La bandera has_journal del @S está quitada, pero hay un @j.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
-msgstr ""
-"La bandera de recuperación del superbloque está puesta, pero no hay @j.\n"
+msgstr "La bandera de recuperación del superbloque está puesta, pero no hay @j.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:250
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr ""
 "La bandera de recuperación del superbloque está limpia, pero el @j\n"
 "contiene información.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:255
 msgid "Clear @j"
 msgstr "Borrar el @j"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr ""
-"El @f tiene una(s) bandera(s) especial(es), pero es una revisión 0 del @f.  "
+msgstr "El @f tiene una(s) bandera(s) especial(es), pero es una revisión 0 del @f.  "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:265
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s @i @o %i (uid=%Iu, gid=%Ig, modo=%Im, tamaño=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:270
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "@I %B (%b) encontrado en un @i @o %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:275
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Ya se borró el %B (%b) encontrado en el @i @o %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:281
+#, no-c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@i @o @I %i en el @S.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:287
+#, no-c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@i @I %i en la lista de nodos-i huérfanos.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:292
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr "El @S del @j tiene puesta una bandera desconocida de sólo lectura.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:297
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr "El @S del @j tiene puesta una bandera desconocida incompatible.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "La versión del @j no está implementada en este e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:308
+#, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1099,8 +1119,8 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:314
+#, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1111,7 +1131,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1123,12 +1143,12 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 msgid "Run @j anyway"
 msgstr "Ejecutar el @j de todas formas"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
 "La bandera de recuperación no está puesta en el @S de respaldo,\n"
@@ -1136,7 +1156,7 @@ msgstr ""
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1146,7 +1166,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1155,20 +1175,18 @@ msgstr ""
 "es %N; debería ser cero.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
-msgstr ""
-"El 'resize_inode' no está habilitado, pero el nodo-i de cambio del tamaño no "
-"es cero.  "
+msgstr "El 'resize_inode' no está habilitado, pero el nodo-i de cambio del tamaño no es cero.  "
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:352
 msgid "Resize @i not valid.  "
-msgstr "El nodo-i de cambio del tamaño no es válido.  "
+msgstr "Cambio de tamaño de nodo-i no válido.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1178,7 +1196,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1187,14 +1205,14 @@ msgstr ""
 "se escribió en el superbloque es en el futuro.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:368
+#, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "La pista de superbloque para un superbloque externo debería ser %X.  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1203,287 +1221,286 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "El «checksum» del descriptor de @g %g es %04x; debería ser %04y.  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
-msgstr ""
-"El descriptor de @g %g etiquetado como no inicializado no tiene activada esa "
-"funcionalidad.\n"
+msgstr "El descriptor de @g %g etiquetado como no inicializado no tiene activada esa funcionalidad.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:389
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
-msgstr ""
-"La cuenta de nodos-i no utilizados %b del descriptor de @g %g no es válida.  "
+msgstr "La cuenta de nodos-i no utilizados %b del descriptor de @g %g no es válida.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:394
 msgid "Last @g @b @B uninitialized.  "
 msgstr "El mapa de bits de bloque del último grupo no está inicializado.  "
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
-msgstr ""
-"La transacción %i del fichero de transacciones estaba corrupta; se ha "
-"interrumpido la repetición.\n"
+msgstr "La transacción %i del fichero de transacciones estaba corrupta; se ha interrumpido la repetición.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:405
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "La bandera test_fs está puesta (y ext4 está disponible).  "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "La última hora de montaje del @S está en el futuro.\n"
-"\t(por menos de un día, probablemente debido a que el reloj del hardware "
-"está mal puesto)\n"
+"\t(por menos de un día, probablemente debido a que el reloj del hardware está mal puesto)\n"
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "La última hora de escritura del @S está en el futuro.\n"
-"\t(por menos de un día, probablemente debido a que el reloj del hardware "
-"está mal puesto)\n"
+"\t(por menos de un día, probablemente debido a que el reloj del hardware está mal puesto)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 msgid "One or more @b @g descriptor checksums are invalid.  "
-msgstr ""
-"Los «checksums» de uno o más descriptores de @gs de @bs son inválidos.  "
+msgstr "Los «checksums» de uno o más descriptores de @gs de @bs son inválidos.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Se pone la cantidad de nodos-i libres a %j (era %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Se pone la cantidad de bloques libres a %c (era %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr "Ocultando el @i de @q %i (%Q).\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "Ocultando el %U @i de @q %i (%Q).\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 msgid "@S has invalid MMP block.  "
 msgstr "El superbloque tiene un bloque MMP inválido.  "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
 msgid "@S has invalid MMP magic.  "
 msgstr "El superbloque tiene un número mágico de MMP inválido.  "
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:453
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2(): %m\n"
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:459
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc(): %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
-msgstr ""
-"El superbloque metadata_csum reemplaza uninint_bg; no pueden ponerse los dos "
-"bits a la vez."
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "El metadata_csum de superbloque reemplaza a uninit_bg; no pueden ponerse los dos bits a la vez."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr ""
-"El superbloque «checksum» del bloque MMP no cuadra con el bloque MMP.  "
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+msgid "@S MMP @b checksum does not match.  "
+msgstr "El «checksum» del @b MMP del @S no cuadra.  "
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
-msgstr ""
-"@S de sistemas de ficheros de 64 bits necesita «extents» para acceder al "
-"disco entero.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
+msgstr "@S de un @f de 64 bits necesita «extents» para acceder al disco entero.  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "First_meta_bg es demasiado grande. (%N, valor máx. %g).  "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:486
 msgid "External @j @S checksum does not match @S.  "
 msgstr "El «checksum» del @S externo @j no cuadra con el @S.  "
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
-msgstr "El @S metadata_csum_seed no es necesario sin metadata_csum."
+msgstr "El metadata_csum_seed de @S no es necesario sin metadata_csum."
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
-msgstr ""
-"Error al inicializar el contexto de cuota en la biblioteca de soporte: %m\n"
+msgstr "Error al inicializar el contexto de cuota en la biblioteca de soporte: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Tamaño-i extra requerido en @S incorrecto (%N).  "
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Tamaño-i extra deseado en @S incorrecto (%N).  "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "%U @i de @q %i no válido.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr "El @S tendría demasiados nodos-i (%N).\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
+"Las características resize_inode y meta_bg están activadas, pero no son\n"
+"compatibles. Resize_inode debería desactivarse.  "
 
 # Prefiero el infinitivo, pero hay ocasiones en que el gerundio es
 # indispensable, como por ejemplo "verificando", "revisando", en donde
 # da la impresión de que en ese momento se están haciendo las cosas.
 # En este caso en particular, creo que es conveniente el gerundio. mm
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Paso 1: Verificando nodos-i, @bs y tamaños\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 msgid "@r is not a @d.  "
 msgstr "El @r no es un @d.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 msgid "@r has dtime set (probably due to old mke2fs).  "
-msgstr ""
-"El @r tiene puesto el dtime (probablemente debido a una versión antigua del "
-"mke2fs).  "
+msgstr "El @r tiene puesto el dtime (probablemente debido a una versión antigua del mke2fs).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:544
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "El @i reservado %i %Q tiene un modo incorrecto.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:550
+#, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "El @i %i @, tiene un dtime cero.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "El @i %i está en uso, pero tiene puesto dtime.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:562
+#, no-c-format
 msgid "@i %i is a @z @d.  "
 msgstr "El @i %i es un @d con @z.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:567
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "El @B de bloques del @g %g en el lugar %b @C.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:572
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "El @B de nodos-i del @g %g en el lugar %b @C.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:577
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "La tabla de nodos-i del @g %g en el lugar %b @C.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:582
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "El @B (%b) de bloques del @g %g está dañado.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "El @B (%b) de nodos-i del @g %g está dañado.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size es %Is, @s %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_@bs es %Ib, @s %N.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in @i %i.  "
 msgstr "@I %B (%b) en @i %i.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B (%b) se solapa con los metadatos del @f en el @i %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:613
+#, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "@i %i tiene @b(s) inválido(s).  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Demasiados @bs inválidos en el @i %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 msgid "@I %B (%b) in bad @b @i.  "
-msgstr "@I %B (%b) en el nodo-i de bloques dañados.  "
+msgstr "Número de bloque inválido (%b) en el nodo-i de bloques dañados.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "El nodo-i de bloques dañados tiene @b(s) inválido(s).  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr "¡@b duplicado o dañado está en uso!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
-msgstr ""
-"El @b dañado %b se usa como bloque indirecto en el nodo-i de bloques dañados"
+msgstr "El @b dañado %b se usa como bloque indirecto en el nodo-i de bloques dañados"
 
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1499,7 +1516,7 @@ msgstr ""
 # cuando se traducen.
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1510,7 +1527,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1521,130 +1538,123 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "El @S primario (%b) está en la lista de @bs dañados.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:667
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
-msgstr ""
-"El bloque %b en los descriptores primarios de grupos está en la lista de @bs "
-"dañados\n"
+msgstr "El bloque %b en los descriptores primarios de grupos está en la lista de @bs dañados\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:673
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Atención: el @S (%b) del grupo %g está dañado.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:679
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
-msgstr ""
-"Atención: la copia de los descriptores del @g %g tiene un @b (%b) dañado.\n"
+msgstr "Atención: la copia de los descriptores del @g %g tiene un @b (%b) dañado.\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:685
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr ""
-"¿Será un error de programación?  El @b #%b se reclama sin razón en el "
-"process_bad_block.\n"
+msgstr "¿Será un error de programación?  El @b #%b se reclama sin razón en el process_bad_block.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:691
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A %N, es contigua a los @bs en el @b del @g %g para %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
-#, c-format
+#: e2fsck/problem.c:697
+#, no-c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A del búfer del @b para reubicar %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:702
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Reubicando %s del @g %g de %b a %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
-#, c-format
+#: e2fsck/problem.c:708
+#, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Reubicando el @g %g de %s hacia %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Atención: no se puede leer el @b %b de %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:718
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Atención: no se puede escribir el @b %b para %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
 msgstr "Hay un @A del @B del @i (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
 msgstr "Hay un @A del @b del @B (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:734
+#, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A en la cuenta-i de la información del enlace: %m\n"
 
 # array -> matriz
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:740
+#, no-c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A del arreglo del @b de @ds: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:746
+#, no-c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Error mientras se exploraba el @i (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Error mientras se iteraba sobre los @bs en el @i %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:757
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
-msgstr ""
-"Error al guardar la información de la cuenta del @i (@i=%i, cuenta=%N): %m\n"
+msgstr "Error al guardar la información de la cuenta del @i (@i=%i, cuenta=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:762
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr ""
-"Error al guardar la información del @b de @ds (@i=%i, @b=%b, núm=%N): %m\n"
+msgstr "Error al guardar la información del @b de @ds (@i=%i, @b=%b, núm=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
-#, c-format
+#: e2fsck/problem.c:769
+#, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Error al leer el @i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "@i %i tiene puesta la bandera imagic.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
@@ -1653,150 +1663,145 @@ msgstr ""
 "no es modificable o tiene la bandera 'append-only' (sólo añadir).  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
 "El fichero especial (dispositivo/«socket»/fifo) (@i %i)\n"
 "tiene un tamaño distinto de cero.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
 msgid "@j @i is not in use, but contains data.  "
 msgstr "El @i del @j no está en uso, pero contiene información.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 msgid "@j is not regular file.  "
 msgstr "el @j no es un fichero normal.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:812
+#, no-c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "el @i %i era parte de la lista de nodos-i @os.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:818
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr ""
-"Los nodos-i fueron parte de una lista enlazada que estaba huérfana y "
-"dañada.  "
+msgstr "Los nodos-i fueron parte de una lista enlazada que estaba huérfana y dañada.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:823
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A de la estructura refcount (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:828
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Error al leer el @b del @a %b para el @i %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:833
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "@i %i tiene un @b del @a %b dañado.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Error al leer el @b del @a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:843
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "El @b del @a %b tiene una cuenta de referencia %r y @s %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:848
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Error al escribir el @b de @a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:853
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "El @b del @a %b tiene h_@bs > 1.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:858
 msgid "@A @a region allocation structure.  "
 msgstr "@A de la estructura de reserva de región de @a.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "el @b del @a %b está dañado (hubo una colisión en la reserva).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:868
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "el @b del @a %b está dañado (nombre no válido).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "el @b del @a %b está dañado (valor no válido).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:879
+#, no-c-format
 msgid "@i %i is too big.  "
 msgstr "el @i %i es demasiado grande.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B (%b) provoca que el @d sea demasiado grande.  "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr "%B (%b) provoca que el fichero sea demasiado grande.  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "%B (%b) provoca que el enlace simbólico sea demasiado grande.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr ""
-"el @i %i tiene la bandera INDEX_FL puesta en el @f sin el árbol-h "
-"implementado.\n"
+msgstr "el @i %i tiene la bandera INDEX_FL puesta en el @f sin el árbol-h implementado.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "@i %i tiene puesta la bandera INDEX_FL pero no es un @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:911
+#, no-c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "El @h %i tiene un nodo raíz no válido.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:916
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "El @h %i tiene una versión de hash no implementada (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
-msgstr ""
-"El @h %i utiliza una bandera incompatible para el nodo raíz del árbol-h.\n"
+msgstr "El @h %i utiliza una bandera incompatible para el nodo raíz del árbol-h.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:927
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "El @h %i tiene una profundidad (%N) muy grande\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1805,55 +1810,55 @@ msgstr ""
 "entra en conflicto con la metainformación del @f.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Falló la (re)creación del nodo-i de cambio de tamaño: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "El @i %i tiene un tamaño adicional (%IS) que es @n\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:950
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "El @a en el @i %i tiene una longitud de nombre (%N) que es @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:955
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "El @a en @i %i tiene un valor de desplazamiento (%N) que es @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:960
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "El @a en el @i %i tiene un valor de @b (%N) que es @n (debe ser 0)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:965
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "El @a en el @i %i tiene un valor de tamaño (%N) que es @n\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:970
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "El @a en el @i %i tiene un hash (%N) que es @n\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:975
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "El nodo-i %i está marcado como un %It pero parece ser un directorio.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
-#, c-format
+#: e2fsck/problem.c:981
+#, no-c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Error mientras se leía el árbol de «@xs» en el @i %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1863,7 +1868,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1873,7 +1878,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1882,35 +1887,31 @@ msgstr ""
 "\t(@b lógico %c, @b físico %b, longitud @n %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
-msgstr ""
-"El @i %i tiene la bandera EXTENTS_FL puesta en el @f sin «extents» "
-"implementado.\n"
+msgstr "El @i %i tiene la bandera EXTENTS_FL puesta en el @f sin «extents» implementado.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
-msgstr ""
-"el @i %i está en formato «extent», pero el @S no tiene la característica "
-"EXTENTS\n"
+msgstr "el @i %i está en formato «extent», pero el @S no tiene la característica EXTENTS\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "el @i %i no tiene EXTENT_FL, pero está en formato «extents»\n"
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "El enlace simbólico rápido %i tiene puesto EXTENT_FL.  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1919,39 +1920,39 @@ msgstr ""
 "\t(@b lógico @n %c, @b físico %b, longitud %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1030
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "el @i %i tiene un modo de «extent» no válido (blk %b, lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1036
+#, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Error al convertir el @B de @bs del «subcluster»: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not regular file.  "
 msgstr "El @i de la @q no es un fichero normal.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
 msgid "@q @i is not in use, but contains data.  "
 msgstr "El @i de la @q no está en uso, pero contiene datos.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 msgid "@q @i is visible to the user.  "
 msgstr "El @i de la @q es visible para el usuario.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 msgid "The bad @b @i looks @n.  "
 msgstr "El nodo-i de bloques dañados parece inválido.  "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1960,56 +1961,51 @@ msgstr ""
 "\t(@b lógico @n %c, @b físico %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, c-format
+#: e2fsck/problem.c:1067
+#, no-c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "el @i %i parece que contiene basura.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
-msgstr ""
-"el @i %i pasa las comprobaciones, pero el «checksum» no cuadra con el @i.  "
+msgstr "el @i %i pasa las comprobaciones, pero el «checksum» no cuadra con el @i.  "
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "el @a del @i %i está dañado (hubo una colisión en la reserva).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"el bloque «extent» del @i %i pasa las comprobaciones, pero el «checksum» no "
-"concuerda con el «extent»\n"
+"el bloque «extent» del @i %i pasa las comprobaciones, pero el «checksum» no concuerda con el «extent»\n"
 "\t(@b lógico %c, @b físico %b, longitud %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
-msgstr ""
-"el @b de @a %b del @i %i pasa las comprobaciones, pero el «checksum» no "
-"concuerda con el @b.  "
+msgstr "el @b de @a %b del @i %i pasa las comprobaciones, pero el «checksum» no concuerda con el @b.  "
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
 msgstr ""
 "Nivel %N de nodo @x interior del @i %i:\n"
-"El comienzo lógico %b no casa con el comienzo lógico %c del siguiente "
-"nivel.  "
+"El comienzo lógico %b no casa con el comienzo lógico %c del siguiente nivel.  "
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -2018,64 +2014,54 @@ msgstr ""
 "\t(@b lógico %c, @b físico %b, longitud %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
-msgstr ""
-"el @i %i tiene datos en línea, pero el @S no tiene la característica "
-"INLINE_DATA\n"
+msgstr "el @i %i tiene datos en línea, pero el @S no tiene la característica INLINE_DATA\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
-msgstr ""
-"el @i %i tiene la bandera INLINE_DATA_FL puesta en el @f pero no tiene "
-"capacidad de datos en línea.\n"
+msgstr "el @i %i tiene la bandera INLINE_DATA_FL puesta en el @f pero no tiene capacidad de datos en línea.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
-msgstr ""
-"El bloque %b del @i %i está en conflicto con metadatos críticos; saltar "
-"comprobaciones de bloque.\n"
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+msgstr "El bloque %b del @i %i está en conflicto con metadatos críticos; saltar comprobaciones de bloque.\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "El @b %b del @i %i de @d debería estar en el @b %c.  "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1138
+#, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
-msgstr ""
-"El @i %i del @d tiene un @x marcado como no inicializado en el @b %c.  "
+msgstr "El @i %i del @d tiene un @x marcado como no inicializado en el @b %c.  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
-"El @b lógico %b del @i %i (@b físico %c) viola las reglas de asignación de "
-"«cluster».\n"
+"El @b lógico %b del @i %i (@b físico %c) viola las reglas de asignación de «cluster».\n"
 "Se corregirá en el paso 1B.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
-msgstr ""
-"El @i %i tiene puesta la bandera INLINE_DATA_FL pero no se ha encontrado "
-"@a.  "
+msgstr "El @i %i tiene puesta la bandera INLINE_DATA_FL pero no se ha encontrado @a.  "
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
@@ -2084,50 +2070,42 @@ msgstr ""
 "o tiene la bandera 'inline-data' (datos en línea).  "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
-msgstr ""
-"El @i %i tiene cabecera de @x pero la bandera de datos en línea está "
-"puesta.\n"
+msgstr "El @i %i tiene cabecera de @x pero la bandera de datos en línea está puesta.\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr "El @i %i parece tener datos en línea pero la bandera @x está puesta.\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
-msgstr ""
-"El @i %i parece tener mapa de @b pero datos en línea y la bandera @x está "
-"puesta.\n"
+msgstr "El @i %i parece tener mapa de @b pero datos en línea y la bandera @x está puesta.\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
-msgstr ""
-"El @i %i tiene datos en línea y las banderas @x están puestas pero el "
-"i_block contiene basura.\n"
+msgstr "El @i %i tiene datos en línea y las banderas @x están puestas pero el i_block contiene basura.\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
-msgstr ""
-"La lista de bloques defectuosos dice que que el @i de dicha lista es "
-"defectuoso.  "
+msgstr "La lista de bloques defectuosos dice que el @i de dicha lista es defectuoso.  "
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1191
 msgid "@A @x region allocation structure.  "
-msgstr "Estructura de reserva de la región de @x de @A.  "
+msgstr "Error asignando estructura de reserva de la región de @x.  "
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -2136,116 +2114,127 @@ msgstr ""
 "\t(@b lógico %c, @b físico @n %b, longitud %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
 msgid "@A memory for encrypted @d list\n"
 msgstr "@A memoria para la lista de @d cifrados\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
-msgstr ""
-"el árbol de @x del @i %i podía ser más superficial (%b; podía ser <= %c)\n"
+msgstr "el árbol de @x del @i %i podía ser más superficial (%b; podía ser <= %c)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr "El @i %i del @f de «bigalloc» no puede asociarse a bloque.  "
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, c-format
+#: e2fsck/problem.c:1218
+#, no-c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "el @i %i tiene dañada la cabecera de @x.  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
+msgstr "La(s) fecha(s) del @i %i posteriores a 2310-04-04 probablemente son anteriores a 1970.\n"
+
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "@i %i tiene un valor de @I @a @i %N.\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "el @i %i tiene @n, @a, EA @i %N no tiene el indicador EA_INODE.\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
 msgstr ""
-"La(s) fecha(s) del @i %i posteriores a 2310-04-04 probablemente son "
-"anteriores a 1970.\n"
+"EA @i %N para el padre @i %i no tiene el indicador EA_INODE.\n"
+" "
 
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 "\n"
-"Se ejecutan pasos adicionales para resolver los @bs reclamados por más de un "
-"@i...\n"
-"Paso 1B: Se vuelven a explorar para los @bs reclamados en múltiples "
-"ocasiones\n"
+"Se ejecutan pasos adicionales para resolver los @bs reclamados por más de un @i...\n"
+"Paso 1B: Se vuelven a explorar para los @bs reclamados en múltiples ocasiones\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
-#, c-format
+#: e2fsck/problem.c:1255
+#, no-c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "Bloque(s) reclamado(s) en múltiples ocasiones en @i %i:"
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1271
+#, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Error mientras se exploraban los nodos-i (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A del @B del @i (@i_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Error mientras se iteraba sobre los @bs en el @i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
-msgstr ""
-"Error al ajustar la cuenta de referencia para el @b del @a %b (@i %i): %m\n"
+msgstr "Error al ajustar la cuenta de referencia para el @b del @a %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1298
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
-msgstr ""
-"Paso 1C: Explorando los directorios para buscar nodos-i con @bs reclamados "
-"en múltiples ocasiones\n"
+msgstr "Paso 1C: Explorando los directorios para buscar nodos-i con @bs reclamados en múltiples ocasiones\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Paso 1D: Reconciliando los @bs reclamados en múltiples ocasiones\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
 msgstr ""
 "El fichero %Q (@i #%i, fecha de modificación %IM)\n"
-"tiene %r @b(s) reclamado(s) en múltiples ocasiones, compartido(s) con %N "
-"fichero(s):\n"
+"  tiene %r @b(s) reclamado(s) en múltiples ocasiones, compartido(s) con %N fichero(s):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i #%i, fecha de modificación %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
 msgid "\t<@f metadata>\n"
 msgstr "\t<metadatos del @f>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2255,369 +2244,369 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
-msgstr ""
-"Los @bs reclamados en múltiples ocasiones ya se reasignaron o se clonaron.\n"
+msgstr "Los @bs reclamados en múltiples ocasiones ya se reasignaron o se clonaron.\n"
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1344
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "No se puede clonar el fichero: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1350
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Paso 1E: Optimizando los árboles @x\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, c-format
+#: e2fsck/problem.c:1356
+#, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Fallo al optimizar el árbol @x %p (%i): %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1361
 msgid "Optimizing @x trees: "
 msgstr "Optimizando los árboles @x: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
-msgstr ""
-"Error interno: máxima profundidad de árbol «extent» demasiado grande (%b; "
-"esperada=%c).\n"
+msgstr "Error interno: máxima profundidad de árbol «extent» demasiado grande (%b; esperada=%c).\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr "El árbol @x del @i %i (nivel %b) podría ser más corto.  "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr "El árbol @x del @i %i (nivel %b) podría ser más estrecho.  "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Paso 2: Verificando la estructura de @ds\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1399
+#, no-c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Número @n del @i para '.' en el @i del @d %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1404
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E tiene un @i @n #: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1409
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E tiene un @i %Di @D/no utilizado.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1414
 msgid "@E @L to '.'  "
 msgstr "@E @L a '.'  "
 
+# '@E' o 'La @e', no 'La @E'. Ver: e2fsck/message.c:125
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1419
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E apunta al @i (%Di) ubicado en un @b dañado.\n"
 
+# '@E' o 'La @e', no 'La @E'. Ver: e2fsck/message.c:125
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1424
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E @L al @d %P (%Di).\n"
 
+# '@E' o 'La @e', no 'La @E'. Ver: e2fsck/message.c:125
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1429
 msgid "@E @L to the @r.\n"
 msgstr "@E @L al @r.\n"
 
+# '@E' o 'La @e', no 'La @E'. Ver: e2fsck/message.c:125
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
-msgstr "La @E contiene caracteres no válidos en el nombre.\n"
+msgstr "@E contiene caracteres no válidos en el nombre.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, c-format
+#: e2fsck/problem.c:1440
+#, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Falta '.' en el @d @i %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1446
+#, no-c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Falta '..' en el @i del @d %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1451
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "La primera @e '%Dn' (@i=%Di) en el @i del @d %i (%p) @s '.'\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1456
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "La segunda @e '%Dn' (@i=%Di) en el @i del @d %i @s '..'\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "El i_faddr @F %IF, @s cero.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1466
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "El i_file_acl @F %If, @s cero.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "El i_dir_acl @F %Id, @s cero.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "El i_size @F %Id, @s cero.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "El i_frag @F %N, @s cero.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "El i_fsize @F %N, @s cero.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "El @i %i (%Q) tiene un modo @n (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1491
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "El @i del @d %i, %B, desplazamiento %N: el @d está dañado\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 msgid "@d @i %i, %B, offset %N: filename too long\n"
-msgstr ""
-"El @i del @d %i, %B, desplazamiento %N: el nombre del fichero es muy largo\n"
+msgstr "El @i del @d %i, %B, desplazamiento %N: el nombre del fichero es muy largo\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "El @i %i del @d tiene un %B que no está reservado.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "La @e en el @d '.' en el @i del @d %i no está terminada con NULL\n"
+msgstr "La @e del @d '.' en el @i del @d %i no termina con NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "La @e al @d '..' en el @i %i del @d no está terminada con NULL\n"
+msgstr "La @e del @d '..' en el @i %i del @d no termina con NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "El @i %i (%Q) es un @v de carácter @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "El @i %i (%Q) es un @v de @b @I.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "La @E está duplicada en la @e '.'.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "La @E está duplicada en la @e '..'.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Error interno: no se puede encontrar el dir_info para %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "La @E tiene un rec_len de %Dr y @s %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, c-format
+#: e2fsck/problem.c:1550
+#, no-c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A de la estructura icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Error al iterar sobre los @bs del @d: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Error al leer el @b %b del @d (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Error al escribir el @b %b del @d (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A del @b del @d para el @i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Error al liberar el @i %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1584
+#, no-c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "La @e del @d para '.' en %p (%i) es grande.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "El @i %i (%Q) es un FIFO @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I socket.\n"
-msgstr "El @i %i (%Q) es un sócket @I.\n"
+msgstr "El @i %i (%Q) es un «socket» @I.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Se pone el tipo de fichero para la @E a %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1604
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "La @E tiene un tipo de fichero incorrecto (era %Dt y @s %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 msgstr "La @E tiene puesto el tipo de fichero.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "La @E tiene un nombre de @z.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "El enlace simbólico %Q (@i #%i) es @n.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1624
 msgid "@a @b @F @n (%If).\n"
 msgstr "El @b del @a @F es @n (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1629
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
-msgstr ""
-"El @f contiene ficheros muy grandes, pero no tiene la bandera LARGE_FILE en "
-"el @S.\n"
+msgstr "El @f contiene ficheros grandes, pero no tiene la bandera LARGE_FILE en el @S.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1634
 msgid "@p @h %d: %B not referenced\n"
 msgstr "Hay un @p el @h %d: %B no ha sido referenciado\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "Hay un @p el @h %d: %B ha sido referenciado dos veces\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1644
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "Hay un @en el @h %d: %B tiene un hash mínimo incorrecto\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1649
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "Hay un @p el @h %d: %B tiene un hash máximo incorrecto\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
 msgstr "El @h %d es @n (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "Hay un @p el @h %d (%q): el número del @b %b es incorrecto.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "Hay un @p el @h %d: el nodo raíz es @n.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1674
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "Hay un @p el @h %d: %B tiene un límite @n (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1679
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "Hay un @p el @h %d: %B tiene una cuenta @n (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1684
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "Hay un @p el @h %d: %B tiene una tabla de hash no ordenada\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1689
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "Hay un @p el @h %d: %B tiene una profundidad que no es válida (%N)\n"
 
+# '@E' o 'La @e', no 'La @E'. Ver: e2fsck/message.c:125
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
 msgstr "@E está duplicada.  "
 
+# '@E' o 'La @e', no 'La @E'. Ver: e2fsck/message.c:125
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
 "Rename to %s"
 msgstr ""
-"La @E tiene un nombre de fichero no único.\n"
+"@E tiene un nombre de fichero no único.\n"
 "Se cambia el nombre a %s"
 
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2628,159 +2617,159 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "El i_blocks_hi @F %N, @s cero.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "@b inesperado en el @h %d (%q).\n"
 
+# '@E' o 'La @e', no 'La @E'. Ver: e2fsck/message.c:125
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1719
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
-msgstr ""
-"@E hace referencia al @i %Di del @g %g en el que _INODE_UNINIT está puesto.\n"
+msgstr "@E hace referencia al @i %Di del @g %g en el que _INODE_UNINIT está puesto.\n"
 
+# '@E' o 'La @e', no 'La @E'. Ver: e2fsck/message.c:125
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1724
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
-msgstr ""
-"@E hace referencia al @i %Di encontrado en la zona de nodos-i no utilizados "
-"del @g %g.\n"
+msgstr "@E hace referencia al @i %Di encontrado en la zona de nodos-i no utilizados del @g %g.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1729
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "El i_file_acl @F %N, @s cero.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, c-format
+#: e2fsck/problem.c:1735
+#, no-c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr "Hay un @p el @h %d: falla la suma de comprobación del nodo raíz.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, c-format
+#: e2fsck/problem.c:1741
+#, no-c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr "Hay un @p el @h %d: falla el «checksum» del nodo interno.\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1746
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "El @i de @d %i, %B, desplazamiento %N: el @d no tiene «checksum».\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
-msgstr ""
-"el @i de @d %i, %B: el @d pasa las comprobaciones pero falla el «checksum».\n"
+msgstr "el @i de @d %i, %B: el @d pasa las comprobaciones pero falla el «checksum».\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr "El tamaño (%N) del @i de @d en línea %i debe ser múltiplo de 4.\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr "Fallo al reparar el tamaño del @i de @d en línea %i.\n"
 
+# '@E' o 'La @e', no 'La @E'. Ver: e2fsck/message.c:125
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
 msgid "Encrypted @E is too short.\n"
-msgstr "El @E cifrado es demasiado corto.\n"
+msgstr "@E cifrada es demasiado corta.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Paso 3: Revisando la conectividad de directorios\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
 msgstr "El @r no ha sido reservado.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "No hay espacio en el @d @l.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1790
+#, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "El @d del @i %i (%p) está desconectado\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
 msgstr "No se encontró /@l.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
-msgstr "'..' en %Q (i) es %P (%j) y debería ser %q (%d).\n"
+msgstr "'..' en %Q (%i) es %P (%j) y debería ser %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "El /@l no existe o está dañado.  No se puede reconectar.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "No se puede expandir /@l: %m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "No se puede reconectar %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Error mientras se intentaba encontrar /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block: %m mientras se intentaba crear el @d /@l.\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode: %m cuando se intentaba crear el @d /@l.\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block: %m mientras se creaba un nuevo @b de @d.\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_block: %m mientras se escribía el @b de @d para /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Error mientras se ajustaba la cuenta del @i en el @i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2793,278 +2782,272 @@ msgstr ""
 # Hay alguna regla que se me escape? mm
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
 msgstr ""
-"No se puede arreglar al padre del @i %i: no se puede encontrar la @e al @d "
-"padre\n"
+"No se puede arreglar al padre del @i %i: no se puede encontrar la @e al @d padre\n"
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Error al crear el @d raíz (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Error al crear el @d /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "El @r no es un @d; se finaliza la operación.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "No se puede proceder sin un @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
-msgstr "El /@l no es un @d (ino=%i)\n"
+msgstr "/@l no es un @d (ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
 msgid "/@l has inline data\n"
 msgstr "/@l tiene datos en línea\n"
 
+# Parece que habría que redactarlo como una orden: Coloque los ficheros perdidos en el directorio raíz
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
 msgstr ""
 "No se puede reservar espacio para /@l.\n"
-"Colocar los ficheros perdidos en el directorio raíz"
+"Coloque ficheros perdidos en el directorio raíz"
 
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
 "\n"
 msgstr ""
 "¡Espacio insuficiente para recuperar los ficheros perdidos!\n"
-"Sacar datos fuera del @f y ejecutar otra vez e2fsck.\n"
+"Saque datos fuera del @f y ejecute otra vez e2fsck.\n"
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1924
 msgid "/@l is encrypted\n"
 msgstr "/@l está cifrado\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Paso 3A: Optimizando directorios\n"
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Fallo al crear el iterador dirs_to_hash: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Fallo al optimizar el directorio %q (%d): %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
 msgstr "Optimizando directorios: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Paso 4: Revisando las cuentas de referencia\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
 msgstr "@i %i que tiene @z está @u.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
 msgstr "el @i %i está @u\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "La cuenta de referencia del @i %i es %Il, y @s %N.  "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
 "¡ATENCIÓN: ERROR DE PROGRAMACIÓN EN E2FSCK!\n"
-"\tO ALGÚN TARADO (USTED) ESTÁ REVISANDO UN SISTEMA DE FICHEROS MONTADO "
-"(VIVO).\n"
-"inode_link_info[%i] es %N, inode.i_links_count es %Il.  ¡Y deberían ser el "
-"mismo!\n"
+"\tO ALGÚN TARADO (USTED) ESTÁ REVISANDO UN SISTEMA DE FICHEROS MONTADO (VIVO).\n"
+"inode_link_info[%i] es %N, inode.i_links_count es %Il.  ¡Y deberían ser el mismo!\n"
+
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "La cuenta de referencia del @a @i %i es %N, y @s %n. "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr "El @d excede el número máximo de enlaces, pero no hay característica DIR_NLINK en el @S.\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Paso 5: Revisando el resumen de información de grupos\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
 msgstr "No está puesto el relleno al final del @B del @i. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
 msgstr "No está puesto el relleno al final del @B del @b. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "Diferencias del @B del @b: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "Diferencias del @B del @i: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
-msgstr ""
-"La cuenta de nodos-i libres es incorrecta para el @g #%g (%i, contados=%j).\n"
+msgstr "La cuenta de nodos-i libres es incorrecta para el @g #%g (%i, contados=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:2068
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
-msgstr ""
-"La cuenta de directorios es incorrecta para @g #%g (%i, contados=%j).\n"
+msgstr "La cuenta de directorios es incorrecta para @g #%g (%i, contados=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "La cuenta de nodos-i libres es incorrecta (%i, contados=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2078
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
-msgstr ""
-"La cuenta de @bs libres es incorrecta para el @g #%g (%b, contados=%c).\n"
+msgstr "La cuenta de @bs libres es incorrecta para el @g #%g (%b, contados=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "La cuenta de @bs libres es incorrecta (%b, contados=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
-msgstr ""
-"ERROR DE PROGRAMACIÓN: el @f (#%N) los puntos finales del %B (%b, %c) no "
-"coinciden con los puntos finales del @B calculados (%i, %j)\n"
+#: e2fsck/problem.c:2088
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "ERROR DE PROGRAMACIÓN: los puntos finales del %B (%b, %c) del @f (#%N) no coinciden con los puntos finales del @B calculados (%i, %j)\n"
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: fudging end of bitmap (%N)\n"
-msgstr "Error interno: el final del bitmap no tiene sentido (%N)\n"
+msgstr "Error interno: el final del bitmap (%N) no tiene sentido\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Error al copiar el reemplazo del @i @B: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Error al copiar el reemplazo del @b @B: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
-msgstr ""
-"El(los) @b(s) del @g %g está(n) en uso, pero el grupo está etiquetado como "
-"BLOCK_UNINIT\n"
+msgstr "El(los) @b(s) del @g %g está(n) en uso, pero el grupo está etiquetado como BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
-msgstr ""
-"El(los) nodo(s)-i del @g %g está(n) en uso, pero el grupo está etiquetado "
-"como INODE_UNINIT\n"
+msgstr "El(los) nodo(s)-i del @g %g está(n) en uso, pero el grupo está etiquetado como INODE_UNINIT\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr "El @B del @i del @g %g no concuerda con el «checksum».\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr "El @B del @b del @g %g no concuerda con el «checksum».\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 msgid "Recreate @j"
-msgstr "Recrear el @j"
+msgstr "Vuelva a crear el @j"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr "Actualizar la información de cuota para el tipo de cuota %N"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2172
+#, no-c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "Error al poner la información de «checksum» del grupo de bloques: %m\n"
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2178
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Error al escribir la información del sistema de ficheros: %m\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
-msgstr ""
-"Error al hacer efectivas las escrituras en el dispositivo de almacenamiento: "
-"%m\n"
+msgstr "Error al hacer efectivas las escrituras en el dispositivo de almacenamiento: %m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2189
 msgid "Error writing quota info for quota type %N: %m\n"
-msgstr ""
-"Error al escribir la información de cuota para el tipo de cuota %N: %m\n"
+msgstr "Error al escribir la información de cuota para el tipo de cuota %N: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "¡Código de error no previsto (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "SE IGNORA"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr "en move_quota_inode"
 
@@ -3086,58 +3069,60 @@ msgstr "mientras se comenzaban a explorar los nodos-i"
 msgid "while doing inode scan"
 msgstr "mientras se exploraban los nodos-i"
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "mientras se llamaba a ext2fs_block_iterate para el nodo-i %d"
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "mientras se llamaba a ext2fs_block_iterate para el nodo-i %u"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "mientras se llamaba a ext2fs_adjust_ea_refcount2 para el nodo-i %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "mientras se llamaba a ext2fs_adjust_ea_refcount2 para el nodo-i %u"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Truncando"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Borrando"
 
-#: e2fsck/unix.c:77
+#: e2fsck/unix.c:78
 #, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] [-z undo_file] device\n"
 msgstr ""
-"Modo de empleo: %s [-panyrcdfktvDFV] [-b superbloque] [-B tamañodelbloque]\n"
-"\t\t[-l|-L fichero_de_bloques_dañados] [-C fd] [-j fichero-de-transacciones-"
-"externo]\n"
-"\t\t[-E opciones-extendidas] [-z fichero-de-deshacer] dispositivo\n"
+"Modo de empleo: %s [-panyrcdfktvDFV] [-b superbloque] [-B tamaño_del_bloque]\n"
+"\t\t[-l|-L fichero_de_bloques_dañados] [-C fd] [-j fichero_de_transacciones_externo]\n"
+"\t\t[-E opciones_extendidas] [-z fichero_de_deshacer] dispositivo\n"
 
-#: e2fsck/unix.c:82
+# La coma tras 'fuerza la revisión' me parece que es peor
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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"
 "Ayuda de emergencia:\n"
 " -p                   Reparación automática (sin hacer preguntas)\n"
 " -n                   No se hacen cambios al sistema de ficheros\n"
-" -y                   Contestar \"si\" a todas las preguntas\n"
+" -y                   Contesta \"sí\" a todas las preguntas\n"
 " -c                   Busca los bloques dañados y los agrega a la\n"
 "                      lista de bloques dañados\n"
-" -f                   Fuerza la revisión aún si el sistema de ficheros\n"
+" -f                   Fuerza la revisión aun si el sistema de ficheros\n"
 "                      está etiquetado como limpio\n"
 
-#: e2fsck/unix.c:88
+# Por coherencia con el mensaje del modo de empleo:
+# fichero-de-transacciones-externo -> fichero_de_transacciones_externo
+# tamañodelbloque -> tamaño_del_bloque
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -3149,8 +3134,8 @@ msgid ""
 msgstr ""
 " -v                   Genera más mensajes de diagnóstico\n"
 " -b superbloque       Utiliza el superbloque alternativo\n"
-" -B tamañodelbloque   Fuerza el tamañodelbloque cuando busca el superbloque\n"
-" -j fichero-de-transacciones-externo\n"
+" -B tamañodelbloque   Fuerza el tamaño del bloque cuando busca el superbloque\n"
+" -j fichero_de_transacciones_externo\n"
 "                      Indica el lugar en donde está el fichero\n"
 "                      de transacciones externo\n"
 " -l fichero_de_bloques_dañados\n"
@@ -3160,12 +3145,12 @@ msgstr ""
 " -z fichero_de_deshacer\n"
 "                      Crea un fichero de deshacer\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %u/%u ficheros (%0d.%d%% no contiguos), %llu/%llu bloques\n"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3175,56 +3160,56 @@ msgid_plural ""
 "%12u inodes used (%2.2f%%, out of %u)\n"
 msgstr[0] ""
 "\n"
-"%12u nodo-i utilizado (%2.2f%%, el %u)\n"
+"%12u nodo-i utilizado (el %2.2f%% de %u)\n"
 msgstr[1] ""
 "\n"
-"%12u nodos-i utilizados (%2.2f%%, el %u)\n"
+"%12u nodos-i utilizados (el %2.2f%% de %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
 msgstr[0] "%12u fichero no contiguo (%0d.%d%%)\n"
 msgstr[1] "%12u ficheros no contiguos (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:172
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
 msgstr[0] "%12u directorio no contiguo (%0d.%d%%)\n"
 msgstr[1] "%12u directorios no contiguos (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:177
 #, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "             número de nodos-i con bloques ind/dind/tind: %u/%u/%u\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr "             Histograma de las profundidades de «extents»: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
-msgstr[0] "%12llu bloque usado (%2.2f%%, el %llu)\n"
-msgstr[1] "%12llu bloques usados (%2.2f%%, el %llu)\n"
+msgstr[0] "%12llu bloque usado (el %2.2f%% de %llu)\n"
+msgstr[1] "%12llu bloques usados (el %2.2f%% de %llu)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:198
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%12u bloque dañado\n"
 msgstr[1] "%12u bloques dañados\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:200
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] "%12u fichero grande\n"
 msgstr[1] "%12u ficheros grandes\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -3239,96 +3224,96 @@ msgstr[1] ""
 "\n"
 "%12u ficheros regulares\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u directorio\n"
 msgstr[1] "%12u directorios\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
 msgstr[0] "%12u dispositivo de caracteres\n"
 msgstr[1] "%12u dispositivos de caracteres\n"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:209
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
 msgstr[0] "%12u dispositivo de bloque\n"
 msgstr[1] "%12u dispositivos de bloque\n"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u fifo\n"
 msgstr[1] "%12u fifos\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u vínculo\n"
 msgstr[1] "%12u vínculos\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u enlace simbólico"
 msgstr[1] "%12u enlaces simbólicos"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%u vínculo simbólico rápido)\n"
 msgstr[1] " (%u vínculos simbólicos rápidos)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u zócalo\n"
 msgstr[1] "%12u zócalos\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u fichero\n"
 msgstr[1] "%12u ficheros\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "mientras se determinaba si %s está montado."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "¡Atención!  %s está montado.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "¡Atención!  %s está en uso.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s está montado.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s está en uso.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3336,7 +3321,7 @@ msgstr ""
 "No se puede continuar; se finaliza.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3346,90 +3331,109 @@ msgid ""
 msgstr ""
 "\n"
 "\n"
-"¡¡ATENCIÓN!!  El sistema de ficheros está montado. Si se continúa se "
-"PROVOCARÁN\n"
+"¡¡ATENCIÓN!!  El sistema de ficheros está montado. Si se continúa se PROVOCARÁN\n"
 "GRAVES daños al sistema de ficheros.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "¿De verdad quiere continuar?"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "revisión interrumpida.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr " contiene un sistema de ficheros con errores"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " no fue desmontado limpiamente"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 msgid " primary superblock features different from backup"
-msgstr ""
-" las características del superbloque primario difieren de las de la copia de "
-"seguridad"
+msgstr " las características del superbloque primario difieren de las de la copia de seguridad"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:383
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " ha sido montado %u veces sin ser revisado"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:390
 msgid " has filesystem last checked time in the future"
-msgstr ""
-" tiene la hora de la última revisión al sistema de ficheros en el futuro"
+msgstr " tiene la hora de la última revisión al sistema de ficheros en el futuro"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " ya lleva %u días sin ser revisado"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr "se ignora el intervalo de comprobación, se pone broken_system_clock\n"
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ", se fuerza la revisión.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: limpio, %u/%u ficheros, %llu/%llu bloques"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
-msgstr " (comprobación aplazada; con baterías)"
+msgstr " (comprobación aplazada: está funcionando con baterías)"
 
 # O "revisión después del siguiente montaje".
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr " (comprobación en el siguiente montaje)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (comprobación después de %ld montajes)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ERROR: no se puede abrir /dev/null (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "Versión de EA no válida.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:702
 msgid "Invalid readahead buffer size.\n"
 msgstr "Tamaño incorrecto del «buffer» de lectura anticipada.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Opción extendida desconocida: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Las opciones extendidas deben estar separadas por comas, y pueden tomar un argumento\n"
+"que se ajusta con un signo de igual ('=').  Las opciones extendidas válidas son:\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr "\tea_ver=<ea_version (1 o 2)>\n"
+
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "\treadahead_kb=<tamaño de búfer>\n"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3438,55 +3442,55 @@ msgstr ""
 "Error de sintaxis en el fichero de configuración de e2fsck (%s, línea #%d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Error al validar el descriptor de ficheros %d: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr "Información de consistencia no válida en el descriptor de ficheros"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Sólo se puede especificar una de las opciones -p/-a, -n o -y."
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:903
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "La opción -t no está implementada en esta versión de e2fsck.\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "No es posible resolver '%s'"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 msgid "The -n and -D options are incompatible."
 msgstr "Las opciones -n y -D se excluyen mutuamente."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 msgid "The -n and -c options are incompatible."
 msgstr "Las opciones -n y -c se excluyen mutuamente."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Las opciones -n y -l/-L se excluyen mutuamente."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Las opciones -D y -E fixes_only se excluyen mutuamente."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Las opciones -E bmap2extent y -D fixes_only se excluyen mutuamente."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Las opciones -c y -l/-L no pueden ser utilizadas simultáneamente.\n"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3495,7 +3499,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG \"%s\" no es un entero\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3506,87 +3510,82 @@ msgstr ""
 "Argumento no numérico inválido para -%c (\"%s\")\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, c-format
-msgid ""
-"MMP interval is %u seconds and total wait time is %u seconds. Please "
-"wait...\n"
-msgstr ""
-"El intervalo de la protección contra montaje múltiple (MMP) es de %u "
-"segundos y el tiempo total de espera es de %u segundos. Por favor, "
-"espere...\n"
+msgid "MMP interval is %u seconds and total wait time is %u seconds. Please wait...\n"
+msgstr "El intervalo de la protección contra montaje múltiple (MMP) es de %u segundos y el tiempo total de espera es de %u segundos. Por favor, espere...\n"
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr "mientras se revisaba el bloque MMP"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
-"Si se sabe con certeza que el sistema de ficheros no está en uso en ningún\n"
-"modo, ejecute 'tune2fs -f -E clear_mmp {device}'\n"
+"Si sabe con certeza que el sistema de ficheros no está en uso en ningún\n"
+"modo, ejecute 'tune2fs -f -E clear_mmp %s'\n"
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
 msgstr "mientras se leía el bloque MMP"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
 "    e2undo %s %s\n"
 "\n"
 msgstr ""
-"Sobreescribiendo el sistema de ficheros existente; puede deshacerse mediante "
-"el comando:\n"
+"Sobrescribiendo el sistema de ficheros existente; puede deshacerse mediante el comando:\n"
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "mientras se intentaba borrar %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "mientras se intentaba configurar el fichero de anulación\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "¡Error: la versión de la biblioteca ext2fs está caduca!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "mientras se intentaba inicializar el programa"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tAl emplear %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr "se necesita una terminal para hacer las reparaciones interactivas"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s intentando los bloques de respaldo...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
-msgstr "Superbloque es inválido,"
+msgstr "El superbloque es inválido,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
-msgstr "Los descriptores de los grupos parecen dañados..."
+msgstr "Los descriptores del grupo parecen dañados..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s mientras se utilizaban los bloques de respaldo"
@@ -3596,45 +3595,43 @@ msgstr "%s: %s mientras se utilizaban los bloques de respaldo"
 # que es distinto (a lo mejor no se ha encontrado ningún superbloque
 # en absoluto). Creo que la traducción debería cambiarse. sv
 # En efecto, tienes toda la razón. Corregido. mm
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1546
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: volviendo al superbloque original\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
 "\n"
 msgstr ""
-"La versión del sistema de ficheros es, en apariencia, muy superior para "
-"esta\n"
+"La versión del sistema de ficheros es, en apariencia, muy superior para esta\n"
 "versión de e2fsck. (O el superbloque del sistema de ficheros está dañado)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr "¿Esta podría ser una partición de longitud cero?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Se debe tener acceso %s al sistema de ficheros o ser root\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1590
 msgid "Possibly non-existent or swap device?\n"
 msgstr "¿Es posible que no exista o que sea un dispositivo de intercambio?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1592
 msgid "Filesystem mounted or opened exclusively by another program?\n"
-msgstr ""
-"¿Sistema de ficheros montado o abierto en exclusiva por otro programa?\n"
+msgstr "¿Sistema de ficheros montado o abierto en exclusiva por otro programa?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr "¿Es posible que no exista el dispositivo?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3642,71 +3639,77 @@ msgstr ""
 "El disco está protegido contra escritura; utilice la opción -n para\n"
 "hacer una revisión de sólo lectura al dispositivo.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr "%s: Se intenta cargar el superbloque a pesar de los errores...\n"
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr "¡Consiga una versión más moderna de e2fsck!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1749
 #, c-format
 msgid "while checking journal for %s"
 msgstr "mientras se revisaba el fichero de transacciones para %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1752
 msgid "Cannot proceed with file system check"
 msgstr "No se puede proceder con la comprobación del sistema de ficheros"
 
-#: e2fsck/unix.c:1661
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
-msgstr ""
-"Atención: se omitirá la recuperación del fichero de transacciones debido a "
-"que se está haciendo una revisión de sólo lectura del sistema de ficheros.\n"
+#: e2fsck/unix.c:1763
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
+msgstr "Atención: se omitirá la recuperación del fichero de transacciones debido a que se está haciendo una revisión de sólo lectura del sistema de ficheros.\n"
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1775
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "no es posible poner las banderas de superbloque en %s\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1781
 #, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Se ha encontrado un error en el fichero de transacciones en %s\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1785
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "Fichero de transacciones corrupto en %s\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1789
 #, c-format
 msgid "while recovering journal of %s"
 msgstr "mientras se recuperaba el fichero de transacciones de %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, c-format
 msgid "%s has unsupported feature(s):"
-msgstr "%s tiene características no soportadas:"
+msgstr "%s tiene características no implementadas:"
+
+#: e2fsck/unix.c:1826
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "%s tiene una codificación no implementada: %0x\n"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1876
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s mientras se leía el nodo-i de los bloques dañados\n"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1879
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Esto no se ve muy bien, pero se intentará continuar...\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Creando el fichero de transacciones (%d bloques): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr " Hecho.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1931
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
@@ -3714,24 +3717,38 @@ msgstr ""
 "\n"
 "*** el fichero de transacciones se ha regenerado ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "finalizado"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: se cancela e2fsck.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Se reinicia e2fsck desde el principio...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "mientras se reajusta el contexto"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** ERRORES CORREGIDOS DEL SISTEMA DE FICHEROS *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: El sistema de ficheros se ha modificado.\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3740,12 +3757,12 @@ msgstr ""
 "\n"
 "%s: ***** EL SISTEMA DE FICHEROS FUE MODIFICADO *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:2040
 #, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** REINICIE EL SISTEMA *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3753,55 +3770,54 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"%s: ********** ATENCIÓN: El sistema de ficheros todavía tiene errores "
-"***********\n"
+"%s: ********** ATENCIÓN: El sistema de ficheros todavía tiene errores ***********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "sS"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr "tT"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr " ('t' aplica 'sí' a todo) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<s>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (s/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "¡cancelado!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr "sí a todo\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
-msgstr "si\n"
+msgstr "sí\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "no\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3810,48 +3826,47 @@ msgstr ""
 "¿%s? no\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
 "\n"
 msgstr ""
-"¿%s? si\n"
+"¿%s? sí\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
-msgstr "si"
+msgstr "sí"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "no"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: bloque(s) no válido(s) de mapas de bits para %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "leyendo los mapas de bits del nodo-i y del bloque"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "mientras se intentaban leer los mapas de bits para %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "escribiendo los mapas de bits del bloque y del nodo-i"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
-msgstr ""
-"mientras se reescribían los mapas de bits de bloques y de nodos-i para %s"
+msgstr "mientras se reescribían los mapas de bits de bloques y de nodos-i para %s"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3864,65 +3879,58 @@ msgstr ""
 "%s: INCONSISTENCIA INESPERADA; EJECUTE fsck MANUALMENTE.\n"
 "(i.e., sin las opciones -a o -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Memoria utilizada: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Memoria utilizada: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "fecha: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "tiempo transcurrido: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "mientras se leía el nodo-i %lu en %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "mientras se escribía el nodo-i %lu en %s"
 
-#: e2fsck/util.c:765
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
-msgstr ""
-"INCONSISTENCIA INESPERADA: se está modificando el sistema de ficheros "
-"mientras fsck está corriendo.\n"
+#: e2fsck/util.c:792
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "INCONSISTENCIA INESPERADA: se está modificando el sistema de ficheros mientras fsck está corriendo.\n"
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "hecho                                                \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, 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"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 ""
-"Modo de empleo: %s [-b tamaño_del_bloque] [-i fichero_de_entrada] [-svwnf]\n"
-"                [-c bloques_a_la_vez] [-d "
-"factor_de_retardo_entre_lecturas] [-e max_bloques_dañados]\n"
-"                [-p núm_pasos] [-t patrón_de_prueba [-t patrón_de_prueba "
-"[...]]]\n"
+"Modo de empleo: %s [-b tamaño_del_bloque] [-i fichero_de_entrada] [-svwnfBX]\n"
+"                [-c bloques_a_la_vez] [-d factor_de_retardo_entre_lecturas] [-e max_bloques_dañados]\n"
+"                [-p núm_pasos] [-t patrón_de_prueba [-t patrón_de_prueba [...]]]\n"
 "                dispositivo [bloque_final [bloque_inicial]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3931,82 +3939,80 @@ msgstr ""
 "%s: Las opciones -n y -w se excluyen mutuamente.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f%% hecho, %s transcurrido. (%d/%d/%d errores)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Probando con un patrón aleatorio: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Probando con el patrón 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "durante la búsqueda"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Valor extraño (%ld) en do_read\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "durante el ext2fs_sync_device"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "mientras se comenzaba la iteración en la lista de bloques dañados"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "mientras se reservaban los búferes"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Revisando los bloques del %lu al %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Revisando los bloques dañados en modo de sólo lectura\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Se están revisando los bloques dañados (prueba de sólo lectura): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Demasiados bloques dañados, se interrumpe la prueba\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Se están revisando los bloques dañados en modo de lectura-escritura\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Del bloque %lu al %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Leyendo y comparando: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
-msgstr ""
-"Revisando los bloques dañados en modo lectura-escritura no destructivo\n"
+msgstr "Revisando los bloques dañados en modo lectura-escritura no destructivo\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
-msgstr ""
-"Revisando los bloques dañados (prueba de lectura-escritura no destructiva)\n"
+msgstr "Revisando los bloques dañados (prueba de lectura-escritura no destructiva)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -4014,62 +4020,57 @@ msgstr ""
 "\n"
 "Se interceptó una interrupción, se limpia todo\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "durante la prueba de escritura de datos del bloque %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s está montado; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
-msgstr ""
-"los bloques dañados se fuerzan de todas formas.  Se cree que /etc/mtab esté "
-"incorrecto.\n"
+msgstr "los bloques dañados se fuerzan de todas formas.  Se cree que /etc/mtab esté incorrecto.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "¡No es seguro ejecutar los bloques dañados!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s está aparentemente en uso por el sistema; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "los bloques dañados se fuerzan de todas formas.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "%s inválido - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
-msgstr ""
-"El número máximo de bloques dañados es demasiado grande %u - el máximo es %u"
+msgstr "El número máximo de bloques dañados es demasiado grande %u - el máximo es %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "no se puede reservar memoria para el patrón_de_prueba - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
-msgstr ""
-"Sólo un máximo de un patrón_de_prueba puede ser especificado en modo sólo "
-"lectura"
+msgstr "Sólo un máximo de un patrón_de_prueba puede ser especificado en modo sólo lectura"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "El patrón_de_prueba aleatorio no está permitido en modo sólo lectura"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -4077,273 +4078,268 @@ msgstr ""
 "No se puede determinar el tamaño del dispositivo; se debe especificar\n"
 "de forma manual\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "mientras se intentaba determinar el tamaño del dispositivo"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "último bloque"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "primer bloque"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "bloque inicial no válido (%llu): debe ser menos que %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "bloque final no válido (%llu): debe ser un valor de 32 bits"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "cuando se creaba la lista de bloques dañados en memoria"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "fichero de entrada - formato incorrecto"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "cuando se añadía a la lista de bloques dañados en memoria"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
-msgstr ""
-"Paso terminado, se encontraron %u bloques dañados. (%d/%d/%d errores)\n"
+msgstr "Paso terminado, se encontraron %u bloques dañados. (%d/%d/%d errores)\n"
 
 #: misc/chattr.c:89
 #, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
-msgstr ""
-"Modo de empleo: %s [-pRVf] [-+=aAcCdDeijsStTu] [-v versión] ficheros...\n"
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "Modo de empleo: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v versión] ficheros...\n"
 
-#: misc/chattr.c:159
+#: misc/chattr.c:160
 #, c-format
 msgid "bad project - %s\n"
 msgstr "proyecto incorrecto - %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "versión incorrecta - %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "mientras se intentaba ver el estado del fichero %s"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "mientras se estaban leyendo las banderas en %s"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Las banderas de %s están puestas como "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "mientras se ponían las banderas en %s"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "La versión de %s está puesta como %lu\n"
 
-#: misc/chattr.c:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "mientras se estaba poniendo la versión en %s"
 
-#: misc/chattr.c:271
+#: misc/chattr.c:272
 #, c-format
 msgid "Project of %s set as %lu\n"
-msgstr "El proyecto de %s está puesta como %lu\n"
+msgstr "El proyecto de %s está puesto como %lu\n"
 
-#: misc/chattr.c:275
+#: misc/chattr.c:276
 #, c-format
 msgid "while setting project on %s"
 msgstr "mientras se estaba poniendo el proyecto en %s"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "No se puede reservar la variable de ruta en chattr_dir_proc"
 
-#: misc/chattr.c:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "= es incompatible con - y +\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "Se debe usar '-v', =, - o +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:80 misc/create_inode.c:119
 #, c-format
 msgid "while reading inode %u"
 msgstr "mientras se leía el nodo-i %u"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 msgid "while expanding directory"
 msgstr "mientras se expandía el directorio"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:97
 #, c-format
 msgid "while linking \"%s\""
 msgstr "mientras se enlazaba \"%s\""
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
 #, c-format
 msgid "while writing inode %u"
 msgstr "mientras se escribía el nodo-i %u"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:152 misc/create_inode.c:176
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "mientras se listaban los atributos de \"%s\""
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:163
 #, c-format
 msgid "while opening inode %u"
 msgstr "mientras se abría el nodo-i %u"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr "mientras se reservaba memoria"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:189 misc/create_inode.c:205
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "mientras se estaban leyendo los atributos \"%s\" de \"%s\""
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:214
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "mientras se escribía el atributo \"%s\" del nodo-i %u"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:224
 #, c-format
 msgid "while closing inode %u"
 msgstr "mientras se cerraba el nodo-i %u"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:275
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr "mientras se reservaba al nodo-i \"%s\""
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:294
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr "mientras se creaba el nodo-i \"%s\""
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:360
 #, c-format
 msgid "while creating symlink \"%s\""
-msgstr "mientras se enlace simbólico \"%s\""
+msgstr "mientras se creaba el enlace simbólico \"%s\""
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:378 misc/create_inode.c:963
 #, c-format
 msgid "while looking up \"%s\""
 msgstr "mientras se buscaba \"%s\""
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:398
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr "mientras se creaba el directorio \"%s\""
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:627
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "mientras se abría \"%s\" para copiar"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr "mientras se cambiaba el directorio de trabajo a \"%s\""
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:815
 #, c-format
-msgid "while opening directory \"%s\""
-msgstr "mientras se abría el directorio \"%s\""
+msgid "while scanning directory \"%s\""
+msgstr "mientras se exploraba el directorio \"%s\""
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:825
 #, c-format
 msgid "while lstat \"%s\""
-msgstr "mientras istat de \"%s\""
+msgstr "mientras se intentaba lstat con \"%s\""
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:875
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr "mientras se creaba el fichero especial \"%s\""
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:884
 msgid "malloc failed"
 msgstr "fallo de malloc"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:892
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr "mientras se intentaba leer el enlace \"%s\""
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr "el tamaño del enlace simbólico ha aumentado entre lstat() y readlink()"
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:910
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr "mientras se escribía el enlace simbólico \"%s\""
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:921
 #, c-format
 msgid "while writing file \"%s\""
 msgstr "mientras se escribía el fichero \"%s\""
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:934
 #, c-format
 msgid "while making dir \"%s\""
 msgstr "mientras se creaba el directorio \"%s\""
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:952
 msgid "while changing directory"
 msgstr "mientras se cambiaba de directorio"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:958
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr "ignorar la entrada \"%s\""
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:971
 #, c-format
 msgid "while setting inode for \"%s\""
-msgstr "mientras se estaba poniendo el modo-i para \"%s\""
+msgstr "mientras se estaba poniendo el nodo-i para \"%s\""
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:978
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "mientras se ponían los xattrs para \"%s\""
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:1004
 msgid "while saving inode data"
 msgstr "mientras se guardaban los datos de nodo-i"
 
 #: misc/dumpe2fs.c:56
 #, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Modo de empleo: %s [-bfghixV] [-o superblock=<número>] [-o "
-"blocksize=<número>] dispositivo\n"
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "Modo de empleo: %s [-bfghimxV] [-o superblock=<número>] [-o blocksize=<número>] dispositivo\n"
 
 # Usado quince mensajes más allá.
 #: misc/dumpe2fs.c:159
@@ -4465,110 +4461,54 @@ msgstr "mientras se imprimía la lista de bloques dañados"
 msgid "Bad blocks: %u"
 msgstr "Bloques dañados: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "mientras se leía el nodo-i del fichero de transacciones"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "mientras se abría el nodo-i del fichero de transacciones"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "mientras se leía el superbloque del fichero de transacciones"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
-msgstr ""
-"¡El número mágico del superbloque del fichero de transacciones es inválido!\n"
-
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Características del fichero de transacciones:  "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Tamaño del fichero de transacciones:  "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Longitud del fichero de transacciones:           %u\n"
-"Secuencia del fichero de transacciones:          0x%08x\n"
-"Inicio del fichero de transacciones:             %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr "Tipo de «checksum» del fichero de transacciones:    crc32\n"
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-"Tipo de «checksum» del fichero de transacciones:    %s\n"
-"«Checksum» del fichero de transacciones:            0x%08x\n"
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Número de error del fichero de transacciones:    %d\n"
+msgstr "¡El número mágico del superbloque del fichero de transacciones es inválido!\n"
 
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "mientras se leía el superbloque del fichero de transacciones"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
-msgstr ""
-"No se pueden encontrar los números mágicos del superbloque del fichero de "
-"transacciones"
+msgstr "No se pueden encontrar los números mágicos del superbloque del fichero de transacciones"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Tamaño del bloque del fichero de transacciones:  %u\n"
-"Longitud del fichero de transacciones:           %u\n"
-"Primer bloque del fichero de transacciones:      %u\n"
-"Secuencia del fichero de transacciones:          0x%08x\n"
-"Inicio del fichero de transacciones:             %u\n"
-"Número de usuarios del fichero de transacciones: %u\n"
+#: misc/dumpe2fs.c:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "no se ha podido reservar un búfer MMP\n"
 
-#: misc/dumpe2fs.c:514
+#: misc/dumpe2fs.c:479
 #, c-format
-msgid "Journal users:            %s\n"
-msgstr "Usuarios del fichero de transacciones:           %s\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "leyendo el bloque MMP %llu desde '%s'\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 msgid "Couldn't allocate memory to parse options!\n"
-msgstr ""
-"¡No se puede reservar memoria para analizar sintácticamente las opciones!\n"
+msgstr "¡No se puede reservar memoria para analizar sintácticamente las opciones!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Parámetro de superbloque no válido: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Parámetro de tamaño del bloque no válido: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4584,250 +4524,228 @@ msgstr ""
 "\n"
 "Las opciones especificadas son incorrectas: %s\n"
 "\n"
-"Opciones extendidas deben estar separadas por comas, y pueden tomar un\n"
+"Las opciones extendidas deben estar separadas por comas y pueden tomar un\n"
 "\targumento que se ajusta con un signo de igual ('=').\n"
 "\n"
 "Las opciones extendidas válidas son:\n"
 "\tsuperblock=<número_del_superbloque>\n"
 "\tblocksize=<tamaño_del_bloque>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tSe emplea %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** ¡Errores de «checksum» detectados en el sistema de ficheros!  ¡Ejecute "
-"e2fsck ahora!\n"
-"\n"
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
-msgstr ""
-"No se pudo encontrar un superbloque válido para el sistema de ficheros.\n"
+msgstr "No se pudo encontrar un superbloque válido para el sistema de ficheros.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** ¡Errores de «checksum» detectados en mapas de bits!  ¡Ejecute e2fsck "
-"ahora!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s: característica MMP no habilitada.\n"
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:747
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "mientras se intentaban leer los mapas de bits '%s'\n"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"*** ¡Ejecute e2fsck ahora!\n"
 "\n"
-"%s: %s: error al leer los mapas de bits: %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
-msgstr "Modo de empleo: %s [-r|Q] [-fr] dispositivo fichero_de_imagen\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
+msgstr "Modo de empleo: %s [ -r|Q ] [ -f ] [ -b superbloque ] [ -B tamaño_de_bloque][ -fr ] dispositivo fichero_de_imagen\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "                %s -I dispositivo fichero_de_imagen\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
-msgstr ""
-"             %s -ra  [  -cfnp  ] [ -o desplz_orig ] [ -O desplz_dest ] "
-"fs_orig [ fs_dest ]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+msgstr "             %s -ra  [  -cfnp  ] [ -o desplz_orig ] [ -O desplz_dest ] fs_orig [ fs_dest ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr "mientras se reservaba un búfer"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "Escribiendo el bloque %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr "error al escribir el bloque %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr "error en generic_write()"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Error: el tamaño de la cabecera es mayor que wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr "No se puede reservar el búfer del encabezado\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "mientras se escribía el superbloque"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "mientras se escribía la tabla de nodos-i"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "mientras se escribía el mapa de bits de bloques"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "mientras se escribía el mapa de bits de nodos-i"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Bloque de directorio corrupto %llu: rec_len incorrecto (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Bloque de directorio corrupto %llu: name_len incorrecto (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu bloques (%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
 msgstr "Copiando "
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
-msgstr ""
-"Parar ahora destruirá el sistema de ficheros; interrumpa otra vez si está "
-"seguro\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+msgstr "Parar ahora destruirá el sistema de ficheros; interrumpa otra vez si está seguro\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " %s restante a %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr "error al leer el bloque %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "Copiados %llu / %llu bloques (%d%%) in %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "a %.2f MB/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
-msgstr "mientras se reservaba una table l1"
+msgstr "mientras se reservaba una tabla l1"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr "mientras se reservaba una caché l2"
 
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
-msgstr ""
-"Atención: Todavía hay tablas en la caché mientras se está poniendo la caché; "
-"se perderán datos, por lo que la imagen podría no ser válida.\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
+msgstr "Atención: Todavía hay tablas en la caché mientras esta se está poniendo:  se perderán datos, por lo que la imagen podría no ser válida.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr "mientras se reservaba ext2_qcow2_image"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr "mientras se inicializaba ext2_qcow2_image"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
-msgstr ""
-"Error de programación: ¡se han creado múltiples bloques con cuenta de "
-"referencia secuencial!\n"
+msgstr "Error de programación: ¡se han creado múltiples bloques con cuenta de referencia secuencial!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr "mientras se reservaba el mapa de bits de bloques"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr "mientras se reservaba el mapa de bits de bloques de «scramble»"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
 msgstr "Explorando nodos-i...\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr "No se puede reservar el búfer de bloque"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "mientras se iteraba sobre el nodo-i %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
-msgstr "No se pueden instalar las imágenes en bruto y qcow2"
+msgstr "No se pueden instalar imágenes en bruto ni qcow2"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr "error mientras se leían los mapas de bits"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr "mientras se abría el fichero de dispositivo"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr "mientras se restauraba la tabla de la imagen"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "la opción -a solo puede utilizarse con imágenes en bruto o QCOW2."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "la opción -b solo puede utilizarse con imágenes en bruto o QCOW2."
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr "Solo se permiten desplazamientos con imágenes en bruto."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr "Solo se permite el modo de movimiento con imágenes en bruto."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr "El modo de movimiento requiere el modo de todos los datos."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr "comprobando si está montado"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4835,52 +4753,55 @@ msgid ""
 "Use -f option if you really want to do that.\n"
 msgstr ""
 "\n"
-"Ejecutar e2image en un sistema de ficheros montado para lectura y escritura "
-"puede dar\n"
+"Ejecutar e2image en un sistema de ficheros montado para lectura y escritura puede dar\n"
 "como resultado una imagen inconsistente que no servirá para depurar.\n"
 "Utilice la opción -f si realmente desea hacer eso.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "¡La imagen QCOW2 no puede escribirse en la salida estándar!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr "No puede examinarse la salida\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "La imagen (%s) está comprimida\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "La imagen (%s) está cifrada\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "La imagen (%s) está corrupta\n"
+
+#: misc/e2image.c:1683
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
-msgstr ""
-"mientras se intentaba convertir la imagen qcow2 (%s) a imagen en bruto (%s)"
+msgstr "mientras se intentaba convertir la imagen qcow2 (%s) a imagen en bruto (%s)"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr "La opción -c solo está implementada en el modo en bruto\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "La opción -c no funciona cuando se escribe en la salida estándar\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr "mientras se reservaba check_buf"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr "La opción -p solo está implementada en el modo en bruto\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d bloques ya contenían los datos que había que copiar\n"
@@ -4910,7 +4831,7 @@ msgstr "e2label: error leyendo el superbloque\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: no es un sistema de ficheros ext2\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Atención: la etiqueta es muy larga, se trunca.\n"
@@ -4925,169 +4846,161 @@ msgstr "e2label: de nuevo, no se puede encontrar al superbloque\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: error al escribir el superbloque\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Modo de empleo: e2label dispositivo [nuevabandera]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
-msgstr ""
-"Modo de empleo: %s [-f] [-h] [-n] [-v] <fichero de transacciones> <sistema "
-"de ficheros>\n"
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
+msgstr "Modo de empleo: %s [-f] [-h] [-n] [-o desplazamiento] [-v] [-z fich_deshacer] <fichero de transacciones> <sistema de ficheros>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
-msgstr ""
-"El superbloque del sistema de ficheros no concuerda con el fichero de "
-"deshacer.\n"
+msgstr "El superbloque del sistema de ficheros no concuerda con el fichero de deshacer.\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr "El UUID no concuerda.\n"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr "La hora del último montaje no concuerda.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr "La hora de la última escritura no concuerda.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr "El contador de escritura del tiempo de vida no concuerda.\n"
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr "mientras se leía el superbloque del sistema de ficheros."
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr "mientras se obtenía el superbloque"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "El «checksum» del superbloque del fichero de deshacer no concuerda.\n"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr "desplazamiento no válido - %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
-msgstr ""
-"No se escribirá en un fichero de deshacer mientras se esté reproduciendo.\n"
+msgstr "No se escribirá en un fichero de deshacer mientras se esté reproduciendo.\n"
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "mientras se abría el fichero de deshacer `%s'\n"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 msgid "while reading undo file"
 msgstr "mientras se leía el fichero de deshacer"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: No es un fichero de deshacer.\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "%s: El «checksum» de la cabecera no concuerda.\n"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "%s: Cabecera del fichero de deshacer corrupta.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr "%s: Tamaño del bloque de deshacer demasiado grande.\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "%s: Tamaño del bloque de deshacer demasiado pequeño.\n"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
-msgstr ""
-"%s: El fichero de deshacer tiene puesta una característica desconocida.\n"
+msgstr "%s: El fichero de deshacer tiene puesta una característica desconocida.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "Error mientras se determinaba si %s está montado."
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr "e2undo solo debería ejecutarse sobre un sistema de ficheros no montado"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, c-format
 msgid "while opening `%s'"
 msgstr "mientras se abría `%s'"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr "el desplazamiento especificado es demasiado grande"
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 msgid "while reading keys"
 msgstr "mientras se leían las claves"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr "%s: número mágico de clave incorrecto en %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr "%s: error de «checksum» en bloque de clave en %llu.\n"
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, c-format
 msgid "%s: block %llu is too long."
 msgstr "%s: el bloque %llu es demasiado largo."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, c-format
 msgid "while fetching block %llu."
 msgstr "mientras se obtenía el bloque %llu."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
-msgstr ""
-"error de «checksum» en el bloque del sistema de ficheros %llu (deshacer "
-"bloque %llu)\n"
+msgstr "error de «checksum» en el bloque %llu del sistema de ficheros (deshacer bloque %llu)\n"
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, c-format
 msgid "while writing block %llu."
 msgstr "mientras se escribía el bloque %llu."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
-msgstr "Deshacer la corrupción de fichero; ¡ejecute e2fsck AHORA!\n"
+msgstr "Fichero de deshacer corrupto; ¡ejecute e2fsck AHORA!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr "Error de ES durante la repetición; ¡ejecute e2fsck AHORA!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr "Registro de deshacer incompleto; ejecute e2fsck.\n"
@@ -5095,8 +5008,7 @@ msgstr "Registro de deshacer incompleto; ejecute e2fsck.\n"
 #: misc/findsuper.c:110
 #, c-format
 msgid "Usage:  findsuper device [skipbytes [startkb]]\n"
-msgstr ""
-"Modo de empleo: findsuper dispositivo [bytesporsaltar [principio (en kb)]]\n"
+msgstr "Modo de empleo: findsuper dispositivo [bytesporsaltar [principio (en kb)]]\n"
 
 #: misc/findsuper.c:155
 #, c-format
@@ -5134,12 +5046,8 @@ msgstr ""
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
-msgstr ""
-"depsplaz_oct comienzo_oct   fin_oct   bloqs_sf  blqtam grp  mkfs/"
-"hora_mount           sb_uuid etiq\n"
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+msgstr "depsplaz_oct comienzo_oct   fin_oct   bloqs_sf  blqtam grp  mkfs/hora_mount           sb_uuid etiq\n"
 
 #: misc/findsuper.c:264
 #, c-format
@@ -5172,84 +5080,79 @@ msgstr ""
 "\tfichero /etc/fstab tan pronto como sea posible.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: no se encontró\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: espera: ¿¡¿No hay más procesos hijos?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Atención... %s para el dispositivo %s que finalizó con la señal %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: el estatus es %x, y nunca debió haber sucedido.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Se finaliza con %s (estado de salida %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Error %d mientras se ejecutaba fsck. %s para %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
 msgstr ""
-"Puede ser que todos o ninguno de los tipos de sistemas de ficheros que se \n"
-"pasaron con -t deban estar con el prefijo 'no' o '!0.\n"
+"Los tipos de sistemas de ficheros pasados con -t deben llevar el prefijo\n"
+"'no' o '!' o todos o ninguno.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "No se puede reservar memoria para los tipos de sistema de ficheros\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
-msgstr ""
-"%s: se ignora línea incorrecta en /etc/fstab: montaje «bind» con número de "
-"rango fcsk distinto de cero\n"
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgstr "%s: se ignora línea incorrecta en /etc/fstab: montaje «bind» con número de rango fcsk distinto de cero\n"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: no se puede verificar %s: fsck.%s no se encuentra\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Revisando todos los sistemas de ficheros.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--esperando-- (paso %d)\n"
 
-#: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+#: misc/fsck.c:1085
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Modo de empleo:  fsck [-AMNPRTV] [ -C [ fd ] ] [-t tipo_de_sf]\n"
 "                      [opciones_de_sf] [sistema_de_ficheros ...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: demasiados dispositivos\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: demasiados argumentos\n"
@@ -5261,53 +5164,44 @@ msgstr "Montando solo para lectura.\n"
 #: misc/fuse2fs.c:3769
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
-msgstr ""
-"%s: Se permite a los usuarios reservar todos los bloques. ¡Es peligroso!\n"
+msgstr "%s: Se permite a los usuarios reservar todos los bloques. ¡Es peligroso!\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
 msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr "Por favor, ejecute 'e2fsck -fy %s'.\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
-msgstr ""
-"Hay que recuperar el fichero de transacciones; hace falta ejecutar `e2fsck -"
-"E journal_only'.\n"
+msgstr "Hay que recuperar el fichero de transacciones; hace falta ejecutar `e2fsck -E journal_only'.\n"
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3812
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "%s: No está contemplado escribir en el fichero de transacciones.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
-msgstr ""
-"Atención: se está montando un sistema de ficheros sin comprobar; se "
-"recomienda ejecutar e2fsck.\n"
+msgstr "Atención: se está montando un sistema de ficheros sin comprobar; se recomienda ejecutar e2fsck.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
-msgstr ""
-"Atención: se ha llegado al número máximo de montajes; se recomienda ejecutar "
-"e2fsck.\n"
+msgstr "Atención: se ha llegado al número máximo de montajes; se recomienda ejecutar e2fsck.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
-msgstr ""
-"Atención: se ha llegado al tiempo límite de una comprobación; se recomienda "
-"ejecutar e2fsck.\n"
+msgstr "Atención: se ha llegado al tiempo límite de una comprobación; se recomienda ejecutar e2fsck.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr "Se han detectado huérfanos; se recomienda ejecutar e2fsck.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr "Se han detectado errores; es preciso ejecutar e2fsck.\n"
 
@@ -5331,7 +5225,7 @@ msgstr "Mientras se leía el proyecto en %s"
 msgid "While reading version on %s"
 msgstr "Mientras se leía la versión en %s"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5340,159 +5234,148 @@ 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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
-"Modo de empleo: %s [-c|-l nombre-del-fichero] [-b tamaño-del-bloque] [-C "
-"tamaño-del-«cluster»]\n"
-"\t[-i bytes-por-nodo-i] [-I tamaño-del-nodo-i] -J opciones-de-fichero-de-"
-"transacciones]\n"
+"Modo de empleo: %s [-c|-l nombre-del-fichero] [-b tamaño-del-bloque] [-C tamaño-del-«cluster»]\n"
+"\t[-i bytes-por-nodo-i] [-I tamaño-del-nodo-i] -J opciones-de-fichero-de-transacciones]\n"
 "\t[-G tamaño-del_grupo_flex] [-N número-de-nodos-i] [-d directorio-raíz]\n"
 "\t[-m porcentaje-de-bloques-reservados] [-o SO-creador]\n"
-"\t[-g bloques-por-grupo] [-L etiqueta-de-volumen] [-M último-directorio-"
-"montado]\n"
-"\t[-O característica[,...]] [-r revisión-del-sf] [-E opción-"
-"extendida{,...]]\n"
-"\t[-t tipo-del-sf] [-T tipo-de-uso ] [-U UUID] [-e "
-"comportamiento_con_errores][-z fichero_deshacer]\n"
+"\t[-g bloques-por-grupo] [-L etiqueta-de-volumen] [-M último-directorio-montado]\n"
+"\t[-O característica[,...]] [-r revisión-del-sf] [-E opción-extendida{,...]]\n"
+"\t[-t tipo-del-sf] [-T tipo-de-uso ] [-U UUID] [-e comportamiento_con_errores][-z fichero_deshacer]\n"
 "\t[-jnqvDFSV] dispositivo [número-de-bloques]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Ejecutando orden: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "mientras se intentaba ejecutar '%s'"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "mientras se procesaba la lista de bloques dañados del programa"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
-msgstr ""
-"El bloque %d en el área del descriptor primario del superbloque/grupo está "
-"dañado.\n"
+msgstr "El bloque %d en el área del descriptor primario del superbloque/grupo está dañado.\n"
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
-msgstr ""
-"Los bloques del %u al %u deben estar correctos para poder construir un "
-"sistema de ficheros.\n"
+msgstr "Los bloques del %u al %u deben estar correctos para poder construir un sistema de ficheros.\n"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Finalizando...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
 "\tbad blocks.\n"
 "\n"
 msgstr ""
-"Atención: los descriptores de respaldo del superbloque/grupo en el bloque "
-"%u\n"
+"Atención: los descriptores de respaldo del superbloque/grupo en el bloque %u\n"
 "\tcontienen bloques dañados.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "mientras se marcaban los bloques dañados como utilizados"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "mientras se escribían los nodos-i reservados"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Escribiendo las tablas de nodos-i: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
 "Could not write %d blocks in inode table starting at %llu: %s\n"
 msgstr ""
 "\n"
-"No se pueden escribir %d bloques en la tabla de nodos-i comenzando en %llu: "
-"%s\n"
+"No se pueden escribir %d bloques en la tabla de nodos-i comenzando en %llu: %s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "hecho                           \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "mientras se creaba el directorio raíz"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "mientras se leía el nodo-i raíz"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
-msgstr "mientras se ponían los permisos del dueño del nodo-i raíz"
+msgstr "mientras se establecía el dueño del nodo-i raíz"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "mientras se creaba /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "mientras se revisaba /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "mientras se expandía /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "mientras se ponía el nodo-i de bloques dañados"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Se agotó la memoria cuando se borraban los sectores %d-%d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Atención: no se puede leer el bloque 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Atención: no se puede borrar el sector %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "mientras se inicializaba el superbloque del fichero de transacciones"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Se rellena con ceros el dispositivo del fichero de transacciones: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
-msgstr ""
-"mientras se inicializaba con ceros el dispositivo del fichero de "
-"transacciones (bloque %llu, cuenta %d)"
+msgstr "mientras se inicializaba con ceros el dispositivo del fichero de transacciones (bloque %llu, cuenta %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "mientras se escribía el superbloque del fichero de transacciones"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
-msgstr ""
-"Se está creando un sistema de ficheros con %llu bloques de %dk y %u nodos-i\n"
+msgstr "Se está creando un sistema de ficheros con %llu bloques de %dk y %u nodos-i\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5501,158 +5384,164 @@ msgstr ""
 "Atención: hay %llu bloques sin usar.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Etiqueta del sistema de ficheros=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Tipo de SO: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Tamaño del bloque=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Tamaño del «cluster»=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Tamaño del fragmento=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Stride=%u bloques, anchura de stripe=%u bloques\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u nodos-i, %llu bloques\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu bloques (%2.2f%%) reservados para el superusuario\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Primer bloque de datos=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Propietario del directorio raíz=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Número máximo de bloques del sistema de ficheros=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
-msgstr "%u bloque de grupos\n"
+msgstr "%u grupos de bloques\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
-msgstr "%u bloque de grupo\n"
+msgstr "%u grupo de bloques\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u bloques por grupo, %u «clusters» por grupo\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u bloques por grupo, %u fragmentos por grupo\n"
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u nodos-i por grupo\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "UUID del sistema de ficheros: %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
-msgstr "Respaldo del superbloque guardado en los bloques: "
+msgstr "Respaldos del superbloque guardados en los bloques: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:822
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s requiere '-O 64bit'\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "'%s' debe estar antes de 'resize=%u'\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "desc_size no válido: '%s'\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "La semilla «hash» no es válida: %s\n"
+
+#: misc/mke2fs.c:867
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Desplazamiento no válido: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "mmp_update_interval no válido: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Número de superbloques de respaldo no válido: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
-msgstr "Tamaño de «stride» no válido: %s\n"
+msgstr "Parámetro de «stride» no válido: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Parámetro stripe-width no válido: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Parámetro de variación de tamaño no válido: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:965
 msgid "The resize maximum must be greater than the filesystem size.\n"
-msgstr ""
-"El máximo de la variación de tamaño debe ser mayor que el tamaño del sistema "
-"de ficheros.\n"
+msgstr "El máximo de la variación de tamaño debe ser mayor que el tamaño del sistema de ficheros.\n"
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:989
 msgid "On-line resizing not supported with revision 0 filesystems\n"
-msgstr ""
-"El cambio de tamaño en línea no está soportado con sistemas de archivos de "
-"revisión 0\n"
+msgstr "El cambio de tamaño en línea no es posible en sistemas de archivos de revisión 0\n"
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "root_owner no válido: '%s'\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1069
+#, c-format
+msgid "Invalid encoding: %s"
+msgstr "La codificación no es válida: %s"
+
+#: misc/mke2fs.c:1087
 #, c-format
 msgid ""
 "\n"
@@ -5675,6 +5564,8 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
@@ -5698,10 +5589,12 @@ msgstr ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<codificación>\n"
+"\tencoding_flags=<banderas>\n"
 "\tquotatype=<tipo(s) de cuota para activar>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5709,11 +5602,20 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Atención: El parámetro «stripe-width» de RAID %u no es un múltiplo par del "
-"parámetro «stride» %u.\n"
+"Atención: El parámetro «stripe-width» de RAID %u no es un múltiplo par del parámetro «stride» %u.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr "error: Indicador de codificación no válido: %s\n"
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr "error: Debe especificarse explícitamente una codifiación cuando se pasan las banderas de codificación\n"
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5722,17 +5624,17 @@ msgstr ""
 "Error de sintaxis en el fichero de configuración de mke2fs (%s, línea #%d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Se puso una opción no válida para el sistema de ficheros: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Se puso una opción de montaje no válida: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
@@ -5741,7 +5643,7 @@ msgstr ""
 "\n"
 "El fichero mke2fs.conf no define el tipo de sistema de ficheros %s.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5749,11 +5651,11 @@ msgstr ""
 "Probablemente sea necesario instalar un fichero mke2fs.conf actualizado.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 msgid "Aborting...\n"
 msgstr "Interrumpiendo...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5764,157 +5666,149 @@ msgstr ""
 "Atención: el fs_type %s no está definido en mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "No se puede reservar memoria para la nueva RUTA.\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1608
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "No se puede inicializar correctamente el perfil (error: %ld).\n"
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "tamaño del bloque inválido - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
-msgstr ""
-"Atención: el tamaño del bloque %d no se puede utilizar en muchos sistemas.\n"
+msgstr "Atención: el tamaño del bloque %d no se puede utilizar en muchos sistemas.\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1661
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "tamaño del «cluster» no válido - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "'-R' está en desuso; utilice '-E' en su lugar"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "comportamiento de errores incorrecto - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr "Número no válido de bloques por grupo"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 msgid "blocks per group must be multiple of 8"
 msgstr "los bloques por grupo deben ser un múltiplo de 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "Número no válido para el tamaño de flex_bg"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
 msgstr "el tamaño de flex_bg debe ser una potencia de 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "el tamaño de flex_bg (%lu) debe ser menor o igual que 2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "proporción de nodos-i inválida %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1744
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "tamaño de los nodos-i inválido - %s"
 
-#: misc/mke2fs.c:1684
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
-msgstr ""
-"¡Atención: la opción -K está en desuso y no debería utilizarse nunca más. "
-"Utilice la opción extendida '-E nodiscard' en su lugar!\n"
+#: misc/mke2fs.c:1757
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "¡Atención: la opción -K está en desuso y no debería utilizarse nunca más. Utilice la opción extendida '-E nodiscard' en su lugar!\n"
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1768
 msgid "in malloc for bad_blocks_filename"
 msgstr "en malloc para fichero_de_bloques_dañados"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1777
 #, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr "Atención: la etiqueta es demasiado larga; se trunca a '%s'\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "el porcentaje de bloques reservados es inválido - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "número de los nodos-i inválido - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1814
 msgid "while allocating fs_feature string"
 msgstr "mientras se reservaba la cadena de fs_feature"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1831
 #, c-format
 msgid "bad revision level - %s"
 msgstr "nivel de revisión incorrecto - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "mientras se intentaba crear la revisión %d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 msgid "The -t option may only be used once"
 msgstr "La opción -t solo puede utilizarse una vez"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1858
 msgid "The -T option may only be used once"
 msgstr "La opción -T solo puede utilizarse una vez"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, c-format
 msgid "while trying to open journal device %s\n"
-msgstr ""
-"mientras se intentaba abrir el dispositivo del fichero de transacciones %s\n"
+msgstr "mientras se intentaba abrir el dispositivo del fichero de transacciones %s\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1920
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 "El tamaño del bloque del dispositivo del fichero de transacciones (%d) es\n"
 "menor que el tamaño del bloque mínimo %d\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1926
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
-msgstr ""
-"Utilizando el tamaño de bloque del dispositivo del fichero de transacciones: "
-"%d\n"
+msgstr "Utilizando el tamaño de bloque del dispositivo del fichero de transacciones: %d\n"
 
 # The specified number of blocks is invalid.
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1937
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "bloques no válidos '%s' en el dispositivo '%s'"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "sistema de ficheros"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "mientras se intentaba determinar el tamaño del sistema de ficheros"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5922,170 +5816,155 @@ msgstr ""
 "No se puede determinar el tamaño del dispositivo; se deberá especificar\n"
 "explícitamente el tamaño del sistema de ficheros\n"
 
-#: misc/mke2fs.c:1914
+# Se informó que -> Se informó de que
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
 "\ta modified partition being busy and in use.  You may need to reboot\n"
 "\tto re-read your partition table.\n"
 msgstr ""
-"Se informó que el tamaño del disposivo es cero.  Es posible que se haya\n"
+"Se informó de que el tamaño del dispositivo es cero.  Es posible que se haya\n"
 "\tespecificado una partición no válida o que la tabla de particiones\n"
 "\tno haya sido releída después de ejecutar fdisk debido a que una \n"
 "\tpartición modificada está ocupada o en uso.  Es necesario reiniciar\n"
 "\tpara poder releer la tabla de particiones.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:2015
 msgid "Filesystem larger than apparent device size."
-msgstr ""
-"El sistema de ficheros es más grande que el tamaño aparente del dispositivo."
+msgstr "El sistema de ficheros es más grande que el tamaño aparente del dispositivo."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:2035
 msgid "Failed to parse fs types list\n"
 msgstr "Fallo al analizar sintácticamente la lista de tipos de sf\n"
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2085
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "El HURD no tiene implementada la opción de tipos de fichero.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2090
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "El HURD no tiene implementada la opción huge_file.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "El HURD no tiene implementada la opción metadata_csum.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2100
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "El HURD no tiene implementada la opción ea_inode.\n"
+
+#: misc/mke2fs.c:2110
 msgid "while trying to determine hardware sector size"
-msgstr "mientras se intentaba determinar el tamaño del sector por hardware"
+msgstr "mientras se intentaba determinar el tamaño del sector del hardware"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2116
 msgid "while trying to determine physical sector size"
 msgstr "mientras se intentaba determinar el tamaño del sector físico"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2148
 msgid "while setting blocksize; too small for device\n"
-msgstr ""
-"mientras se establecía el tamaño de bloque; demasiado pequeño para el "
-"dispositivo\n"
+msgstr "mientras se establecía el tamaño de bloque; demasiado pequeño para el dispositivo\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2153
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
-msgstr ""
-"Atención: el tamaño de bloque especificado %d es menor que el tamaño de "
-"sector físico del dispositivo %d\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgstr "Atención: el tamaño de bloque especificado %d es menor que el tamaño de sector físico del dispositivo %d\n"
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2177
 #, 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: Tamaño del dispositivo (0x%llx bloques) %s demasiado grande para "
-"expresarse\n"
+"%s: Tamaño del dispositivo (0x%llx bloques) %s demasiado grande para expresarse\n"
 "\ten 32 bits utilizando un tamaño de bloque de %d.\n"
 
-#: misc/mke2fs.c:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2191
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
-"%s: Tamaño del dispositivo (0x%llx bloques) %s demasiado grande para "
-"expresarse\n"
-"\ten 32 bits utilizando un tamaño de bloque de %d.\n"
+"%s: Tamaño del dispositivo (0x%llx bloques) %s demasiado grande para crear\n"
+"\tun sistema de ficheros utilizando un tamaño de bloque de %d.\n"
 
-# TODO fs_types
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "resolución de fs_types para mke2fs.conf: "
 
-# TODO revision 0
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 msgid "Filesystem features not supported with revision 0 filesystems\n"
-msgstr ""
-"Características del sistema de ficheros no disponibles con la revisión 0 de "
-"los sistemas de ficheros\n"
+msgstr "Características del sistema de ficheros no disponibles con la revisión 0 de los sistemas de ficheros\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2228
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
-msgstr ""
-"Superbloques dispersos no disponibles con la revisión 0 de los sistemas de "
-"ficheros\n"
+msgstr "Superbloques dispersos no disponibles con la revisión 0 de los sistemas de ficheros\n"
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2238
 msgid "Journals not supported with revision 0 filesystems\n"
-msgstr ""
-"Fichero de transacciones no implementado para la revisión 0 de los sistemas "
-"de ficheros\n"
+msgstr "Fichero de transacciones no implementado para la revisión 0 de los sistemas de ficheros\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2251
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "el porcentaje de bloques reservados es inválido - %lf"
 
-#: misc/mke2fs.c:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
-msgstr ""
-"Los «extents» DEBEN estar activados para un sistema de ficheros de 64 bits.  "
-"Pasar -O extents para rectificar.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
+msgstr "Los «extents» DEBEN estar activados para un sistema de ficheros de 64 bits.  Pase -O extents para rectificar.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "El tamaño de «cluster» no puede ser menor que el tamaño de bloque.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
-msgstr ""
-"para especificar un tamaño de «cluster» hace falta la característica "
-"«bigalloc»"
+msgstr "para especificar un tamaño de «cluster» hace falta la característica «bigalloc»"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "atención: no se puede obtener la geometría del dispositivo para %s\n"
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2317
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "el alineamiento de %s está desplazado en %lu bytes.\n"
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2319
 #, c-format
-msgid ""
-"This may result in very poor performance, (re)-partitioning suggested.\n"
-msgstr ""
-"Esto puede provocar un rendimiento muy bajo; se sugiere (re)particionar.\n"
+msgid "This may result in very poor performance, (re)-partitioning suggested.\n"
+msgstr "Esto puede provocar un rendimiento muy bajo; se sugiere (re)particionar.\n"
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2340
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "los bloques de %d bytes son muy grandes para el sistema (máx %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2344
 #, 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 ""
-"Atención: los bloques de %d bytes son muy grandes para el sistema \n"
-"(máx %d), se hace un esfuerzo para continuar\n"
+"Atención: los bloques de %d bytes son muy grandes para el sistema\n"
+"(máx %d): continuación forzada\n"
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
-msgstr ""
-"Sugerencia: utilice un núcleo de Linux >= 3.18 para disponer de una mejor "
-"estabilidad de los metadatos y de suma de comprobación del fichero de "
-"transacciones.\n"
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "Sugerencia: utilice un núcleo de Linux >= 3.18 para disponer de una mejor estabilidad de los metadatos y de suma de comprobación del fichero de transacciones.\n"
+
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
+msgstr "Codificación de nombre de fichero desconocida en el perfil: %s"
+
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr "Banderas de codificación desconocidas en el perfil: %s"
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -6095,19 +5974,29 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Atención: desplazamiento especificado sin un tamaño explícito del sistema de "
-"ficheros.\n"
+"Atención: desplazamiento especificado sin un tamaño explícito del sistema de ficheros.\n"
 "Se está creando un sistema de ficheros con %llu bloques,\n"
 "pero esto podría no ser lo que usted desea.\n"
 "\n"
 
-#: misc/mke2fs.c:2331
-msgid "Can't support bigalloc feature without extents feature"
+#: misc/mke2fs.c:2449
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr "los nodos-i de %d octetos son demasiado pequeños para cuota de proyecto"
+
+#: misc/mke2fs.c:2465
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
 msgstr ""
-"No se puede disponer de la característica «bigalloc» sin la característica "
-"«extents»"
+"Las características de cifrado y «casefold» no son compatibles.\n"
+"No pueden estar activadas las dos a la vez.\n"
+
+#: misc/mke2fs.c:2480
+msgid "Can't support bigalloc feature without extents feature"
+msgstr "No se puede disponer de la característica «bigalloc» sin la característica «extents»"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -6115,7 +6004,7 @@ msgstr ""
 "Las características resize_inode y meta_bg no son compatibles.\n"
 "No pueden estar activadas las dos a la vez.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -6127,133 +6016,108 @@ msgstr ""
 "Véase https://ext4.wiki.kernel.org/index.php/Bigalloc para más información\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
-msgstr ""
-"el cambio de tamaño en línea de los bloques reservados no está implementado "
-"para los sistemas de ficheros que no están esparcidos"
+msgstr "el cambio de tamaño en línea de los bloques reservados no está implementado para los sistemas de ficheros que no están esparcidos"
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2516
 msgid "blocks per group count out of range"
 msgstr "la cuenta de bloques por grupo está fuera del intervalo"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2538
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
-msgstr ""
-"La característica flex_bg no está activada, por lo que no puede "
-"especificarse el tamaño de flex_bg"
+msgstr "La característica flex_bg no está activada, por lo que no puede especificarse el tamaño de flex_bg"
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2550
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "tamaño incorrecto del nodo-i %d (mín %d/máx %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
-msgstr ""
-"los nodos-i de %d octetos son demasiado pequeños para datos en línea; "
-"especifique un tamaño mayor"
-
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-"los nodos-i de %d octetos son demasiado pequeños para cuota de proyecto; "
-"especifique un tamaño mayor"
+msgstr "los nodos-i de %d octetos son demasiado pequeños para datos en línea; especifique un tamaño mayor"
 
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "demasiados nodos-i (%llu), ¿aumentar el ratio de los nodos-i?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2587
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "demasiados nodos-i (%llu), especifique menos que 2^32 nodos-i"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2601
 #, 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 ""
-"tamaño_de_nodos_i (%u) * número_de_nodos_i (%u) es demasiado\n"
+"el tamaño_de_nodos_i (%u) * número_de_nodos_i (%u) es demasiado\n"
 "\tgrande para un sistema de ficheros con %llu bloques; especifique\n"
 "\tun ratio mayor de nodos-i (-i) o un menor número de nodos-i (-N).\n"
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2788
 msgid "Discarding device blocks: "
 msgstr "Descartando los bloques del dispositivo: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 msgid "failed - "
 msgstr "fallo - "
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2863
 msgid "while initializing quota context"
 msgstr "mientras se inicializaba el contexto de cuota"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2870
 msgid "while writing quota inodes"
 msgstr "mientras se escribían los nodos-i de la cuota"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2895
 #, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "comportamiento de errores incorrecto en el perfil - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2971
+msgid "in malloc for android_sparse_params"
+msgstr "en malloc para parámetros_dispersos_de_android"
+
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "mientras se ajustaba el superbloque"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
-msgstr ""
-"Los «extents» no están activados.  Es posible calcular la suma de "
-"comprobación de los árboles «extent» de ficheros, no de los mapas de "
-"bloques.  No activar los «extents» reduce la cobertura de las sumas de "
-"comprobación de metadatos.  Pase -O «extents» para rectificar.\n"
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
+msgstr "Los «extents» no están activados.  Es posible calcular la suma de comprobación de los árboles «extent» de ficheros, no de los mapas de bloques.  No activar los «extents» reduce la cobertura de las sumas de comprobación de metadatos.  Pase -O «extents» para rectificar.\n"
 
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
-msgstr ""
-"No está activado que se admitan sistemas de ficheros de 64 bits.  Los campos "
-"más grandes que permite esta característica permiten la suma de comprobación "
-"más potente.  Pase -O 64bit para rectificar.\n"
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+msgstr "No está activado que se admitan sistemas de ficheros de 64 bits.  Los campos más grandes ofrecidos por esta característica permiten la suma de comprobación más potente.  Pase -O 64bit para rectificar.\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr ""
-"La característica metadata_csum_seed requiere la característica "
-"metadata_csum.\n"
+#: misc/mke2fs.c:3016
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "La característica metadata_csum_seed requiere la característica metadata_csum.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
-msgstr ""
-"El descarte ha sido correcto y devolverá 0s - se salta el borrado de la "
-"tabla de nodos-i\n"
+msgstr "El descarte ha sido correcto y devolverá 0s - se salta el borrado de la tabla de nodos-i\n"
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "sistema operativo desconocido - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 msgid "Allocating group tables: "
 msgstr "Reservando las tablas de grupo: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr "mientras se intentaba reservar las tablas del sistema de ficheros"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6261,32 +6125,30 @@ msgstr ""
 "\n"
 "\tmientras se convertía el mapa de bits de «subcluster»"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
-msgstr "%s puede corromperse más adelante por reescritura de superbloque\n"
+msgstr "%s puede corromperse aún más por reescritura de superbloque\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
-msgstr ""
-"mientras se inicializaba a cero el bloque %llu al final del sistema de "
-"ficheros"
+msgstr "mientras se inicializaba a cero el bloque %llu al final del sistema de ficheros"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3279
 msgid "while reserving blocks for online resize"
 msgstr "mientras se reservaban los bloques para el cambio de tamaño en línea"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "fichero de transacciones"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Añadiendo el fichero de transacciones al dispositivo %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
@@ -6295,21 +6157,21 @@ msgstr ""
 "\n"
 "\tmientras se intentaba añadir el fichero de transacciones al dispositivo %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "hecho\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Se omite la creación del fichero de transacciones en modo solo-super\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Creando el fichero de transacciones (%u bloques): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6317,45 +6179,36 @@ msgstr ""
 "\n"
 "\tmientras se intentaba crear el fichero de transacciones"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 "\n"
-"Error mientras se activaba la característica de protección de montaje "
-"múltiple."
+"Error mientras se activaba la característica de protección de montaje múltiple."
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3357
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
-msgstr ""
-"La protección de montaje múltiple está activada con un intervalo de "
-"actualización de %d segundos.\n"
+msgstr "La protección de montaje múltiple está activada con un intervalo de actualización de %d segundos.\n"
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3373
 msgid "Copying files into the device: "
 msgstr "Copiando ficheros al dispositivo: "
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3379
 msgid "while populating file system"
 msgstr "mientras se poblaba el sistema de ficheros"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 msgid "Writing superblocks and filesystem accounting information: "
-msgstr ""
-"Escribiendo superbloques y la información contable del sistema de ficheros: "
+msgstr "Escribiendo superbloques y la información contable del sistema de ficheros: "
 
-#: misc/mke2fs.c:3230
-#, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Atención, se tuvo un problema al escribir los superbloques."
+#: misc/mke2fs.c:3393
+msgid "while writing out and closing file system"
+msgstr "mientras se escribía y se cerraba el sistema de ficheros"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6363,29 +6216,31 @@ msgstr ""
 "hecho\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
-msgstr ""
-"El desplazamiento de la partición de %llu (%uk) bloques no es compatible con "
-"el tamaño %u del «cluster».\n"
+msgid "while zeroing block %llu for hugefile"
+msgstr "mientras se inicializaba a cero el bloque %llu para fichero gigante"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:515
+#, c-format
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgstr "El desplazamiento de la partición de %llu (%uk) bloques no es compatible con el tamaño %u del «cluster».\n"
+
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
 msgstr "Los ficheros gigantes se rellenarán con ceros.\n"
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:584
 #, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "Creando %lu fichero(s) gigante(s) "
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:586
 #, c-format
 msgid "with %llu blocks each"
 msgstr "con %llu bloques cada uno"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:595
 #, c-format
 msgid "while creating huge file %lu"
 msgstr "mientras se creaba el fichero gigante %lu"
@@ -6430,137 +6285,142 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   inicio=%8d tamaño=%8lu fin=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "Por favor, ejecute e2fsck -D sobre el sistema de ficheros.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+"\n"
+"Esta operación requiere un systema de ficheros recién comprobado.\n"
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Por favor, ejecute e2fsck -f sobre el sistema de ficheros.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "Por favor, ejecute e2fsck -D sobre el sistema de ficheros.\n"
+msgstr "Por favor, ejecute e2fsck -fD sobre el sistema de ficheros.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
 msgstr ""
-"Modo de empleo: %s [-c cuenta-máxima-de-montajes] [-e comportamiento-de-"
-"errores] [-f] [-g grupo]\n"
-"\t[-i intervalo[d|m|w]] [-j] [-J opciones-del-fichero-de-transacciones] [-"
-"l]\n"
+"Modo de empleo: %s [-c cuenta-máxima-de-montajes] [-e comportamiento-de-errores] [-f] [-g grupo]\n"
+"\t[-i intervalo[d|m|w]] [-j] [-J opciones-del-fichero-de-transacciones] [-l]\n"
 "\t[-m porcentaje-de-bloques-reservados] [-o [^]opciones-de-montaje[,...]]\n"
-"\t[-p intervalo-de-actualización-mmp] [-r cuenta-de-bloques-reservados] [-u "
-"usuario]\n"
-"\t[-C cuenta-de-montajes] [-L etiqueta-de-volumen] [-M último-directorio-"
-"montado]\n"
+"\t[-r número-de-bloques-reservados] [-u usuario] [-C número-de-montajes]\n"
+"\t[-L etiqueta-de-volumen] [-M último-directorio-montado]\n"
 "\t[-O [^]característica[,...]] [-Q opcions_de-cuota]\n"
 "\t[-E opción-extendida[,...]] [-T última-fecha-de-revisón] [-U UUID]\n"
 "\t[-I nuevo-tamaño-de-nodo-i] [-z fichero-deshacer] dispositivo\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "¡No se encontró el superbloque del fichero de transacciones!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "mientras se intentaba abrir el fichero de transacciones externo"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s no es un dispositivo con fichero de transacciones.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr ""
+"El superbloque del fichero de transacciones está corrupto;\n"
+"nr_users es demasiado grande (%d).\n"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
 "No se encontró el UUID del sistema de ficheros en el fichero de\n"
 "transacciones del dispositivo.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
 msgstr ""
-"No se puede localizar el dispositivo del fichero de transacciones. NO se "
-"eliminó\n"
-"Utilice la opción -f para eliminar el dispositivo del fichero de "
-"transacciones perdido.\n"
+"No se puede localizar el dispositivo del fichero de transacciones. NO se eliminó\n"
+"Utilice la opción -f para eliminar el dispositivo del fichero de transacciones perdido.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "Fichero de transacciones eliminado\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "mientras se leían los mapas de bits"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
 msgstr "mientras se borraba el nodo-i del fichero de transacciones"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "mientras se escribía el nodo-i del fichero de transacciones"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(¡y reinicie después!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
-msgstr "Después de ejecutar e2fsck; por favor, ejecute `resize2fs %s %s"
+msgstr "Después de ejecutar e2fsck, por favor, ejecute `resize2fs %s %s"
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:489
 #, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr "Por favor, ejecute `resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
 msgstr " -z \"%s\""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:495
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr "' para activar el modo de 64 bits.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:497
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr "' para desactivar el modo de 64 bits.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
-"ATENCIÓN: no se ha podido confirmar la capacidad del núcleo para "
-"metadata_csum_seed.\n"
+"ATENCIÓN: no se ha podido confirmar la capacidad del núcleo para metadata_csum_seed.\n"
 "  Se requiere Linux >= v4.4.\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
-msgstr ""
-"No se soporta desactivar la característica '%s' del sistema de ficheros.\n"
+msgstr "No se puede desactivar la característica '%s' del sistema de ficheros.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
-msgstr ""
-"El ajuste de la característica '%s' del sistema de ficheros no está "
-"implementado.\n"
+msgstr "El ajuste de la característica '%s' del sistema de ficheros no está implementado.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6568,7 +6428,7 @@ msgstr ""
 "La bandera 'has_journal' sólo puede ser borrada cuando el sistema de\n"
 "ficheros no está montado o está montado en modo de sólo lectura.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6576,7 +6436,7 @@ msgstr ""
 "La bandera 'needs_recovery' está puesta.  Por favor ejecute e2fsck antes\n"
 "de deactivar la bandera 'has_journal'.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
@@ -6584,7 +6444,7 @@ msgstr ""
 "La característica 'sparse_super' no se puede activar\n"
 "en sistemas de ficheros que tengan la característica meta_bg activada.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6594,14 +6454,12 @@ msgstr ""
 "ponerse si el sistema de ficheros está montado o es\n"
 "de solo lectura.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1143
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
-msgstr ""
-"Se ha activado la protección de montaje múltiple con un intervalo de "
-"actualización de %ds.\n"
+msgstr "Se ha activado la protección de montaje múltiple con un intervalo de actualización de %ds.\n"
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6609,20 +6467,20 @@ msgstr ""
 "La característica de montaje múltiple no se puede\n"
 "desactivar si el sistema de ficheros es de solo lectura.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 msgid "Error while reading bitmaps\n"
 msgstr "Error mientras se leían los mapas de bits\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr "El número mágico en el bloque MMP no cuadra. esperado: %x, real: %x\n"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1174
 msgid "while reading MMP block."
 msgstr "mientras se leía el bloque MMP."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
@@ -6630,7 +6488,7 @@ msgstr ""
 "Borrar la bandera flex_bg provocaría que el sistema de ficheros se\n"
 "volviera inconsistente.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6638,63 +6496,46 @@ msgstr ""
 "La característica 'huge_file' sólo puede ser borrada cuando el sistema de\n"
 "ficheros no está montado o está en modo de sólo lectura.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
 msgstr "Podría tardarse un poco en activar la suma de comprobación."
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr "¡No puede activarse metadata_csum en un sistema de ficheros montado!\n"
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
-msgstr ""
-"Los «extents» no están activados.  Puede calcularse la suma de comprobación "
-"del árbol «extent» de ficheros, no de mapas de bloques.  No activar los "
-"«extents« reduce la cobertura de la suma de comprobación de metadatos.  "
-"Ejecute otra vez con -O «extent» para rectificar.\n"
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
+msgstr "Los «extents» no están activados.  Puede calcularse la suma de comprobación del árbol «extent» de ficheros, no de mapas de bloques.  No activar los «extents» reduce la cobertura de la suma de comprobación de metadatos.  Ejecute otra vez con -O «extent» para rectificar.\n"
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
-msgstr ""
-"No está activado que se admitan sistemas de ficheros de 64 bits.  Los campos "
-"más grandes que permite esta característica permiten la suma de comprobación "
-"más potente.  Ejecute resize2fs -b para rectificar.\n"
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
+msgstr "No está activado que se admitan sistemas de ficheros de 64 bits.  Los campos más grandes ofrecidos por esta característica permiten la suma de comprobación más potente.  Ejecute resize2fs -b para rectificar.\n"
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
 msgstr "Podría tardarse un rato en desactivar la suma de comprobación."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
-msgstr ""
-"¡No se puede desactivar metadata_csum en un sistema de ficheros montado!\n"
+msgstr "¡No se puede desactivar metadata_csum en un sistema de ficheros montado!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr "¡No se puede activar el modo de 64 bits cuando está montado!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr "¡No se puede desactivar el modo de 64 bits cuando está montado!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
-msgstr ""
-"\n"
-"Atención: proyecto activado sin cuota al mismo tiempo\n"
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
+msgstr "No se puede activar la característica del proyecto; el tamaño del nodo-i es demasiado pequeño.\n"
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6702,7 +6543,13 @@ msgstr ""
 "\n"
 "Atención: la opción '^quota' deja sin efecto los argumentos '-Q'.\n"
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr ""
+"No es posible activar la característica de cifrado en sistemas de ficheros que tengan\n"
+"la característica de codificación activada.\n"
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
@@ -6710,23 +6557,24 @@ msgstr ""
 "La característica 'metadata_csum_seed' solo se puede activar\n"
 "en sistemas de ficheros que tengan activada la característica meta_csum.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
-"El UUID ha cambiado desde la activación de metadata_csum.  Debe desmontarse "
-"el \n"
-"sistema de ficheros para que puedan reescribirse sin peligro todos los "
-"metadatos \n"
+"El UUID ha cambiado desde la activación de metadata_csum.  Debe desmontarse el \n"
+"sistema de ficheros para que puedan reescribirse sin peligro todos los metadatos \n"
 "y casen con el nuevo UUID.\n"
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr "Podría tardarse un poco en recalcular las sumas de comprobación."
+
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "El sistema de ficheros ya tiene un fichero de transacciones.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, c-format
 msgid ""
 "\n"
@@ -6735,22 +6583,21 @@ msgstr ""
 "\n"
 "\tmientras se intentaba abrir el fichero de transacciones en %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Creando un fichero de transacciones en el dispositivo %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, c-format
 msgid "while adding filesystem to journal on %s"
-msgstr ""
-"mientras se agregaba un sistema de ficheros al fichero de transacciones en %s"
+msgstr "mientras se agregaba un sistema de ficheros al fichero de transacciones en %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "Creando el nodo-i del fichero de transacciones: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6758,33 +6605,36 @@ msgstr ""
 "\n"
 "\tmientras intentaba crear el fichero de transacciones"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr "No se puede activar la cuota del proyecto; el tamaño del nodo-i es demasiado pequeño.\n"
+
+#: misc/tune2fs.c:1588
 msgid "while initializing quota context in support library"
-msgstr ""
-"mientras se inicializaba el contexto de cuota en la biblioteca de soporte"
+msgstr "mientras se inicializaba el contexto de cuota en la biblioteca de soporte"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1603
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr "mientras se actualizaban los límites de cuota (%d)"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1611
 #, c-format
 msgid "while writing quota file (%d)"
 msgstr "mientras se escribía el fichero de cuota (%d)"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "while removing quota file (%d)"
 msgstr "mientras se borraba el fichero de cuota (%d)"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6794,106 +6644,104 @@ msgstr ""
 "\n"
 "Las opciones de cuota especificadas no son correctas.\n"
 "\n"
-"Las siguientes opciones de cuota válidas están disponibles (deben separarse "
-"por comas):\n"
+"Las siguientes opciones de cuota válidas están disponibles (deben separarse por comas):\n"
 "\t[^]usr[cuota]\n"
 "\t[^]grp[cuota]\n"
 "\t[^]prj[cuota]\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
-msgstr ""
-"No se puede analizar sintácticamente el especificador de fecha/hora: %s"
+msgstr "No se puede analizar sintácticamente el especificador de fecha/hora: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "cuenta de montajes incorrectos - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "nombre del gid/grupo incorrecto - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "intervalo incorrecto - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "proporción de bloques reservados incorrecta - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
 msgid "-o may only be specified once"
-msgstr "-o solo podría ser especificado una vez"
+msgstr "-o solo puede especificarse una vez"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
 msgid "-O may only be specified once"
 msgstr "-O sólo se puede especificar una vez"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "cuenta de bloques reservados incorrecta - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "nombre de uid/usuario incorrecto - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "tamaño de nodo-i no válido - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "El tamaño de nodo-i debe ser potencia de dos - %s"
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "mmp_update_interval demasiado grande: %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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] ""
-"Se pone el intervalo de actualización de protección de montaje múltiple a "
-"%lu segundo\n"
-msgstr[1] ""
-"Se pone el intervalo de actualización de protección de montaje múltiple a "
-"%lu segundos\n"
+msgid_plural "Setting multiple mount protection update interval to %lu seconds\n"
+msgstr[0] "Se pone el intervalo de actualización de protección de montaje múltiple a %lu segundo\n"
+msgstr[1] "Se pone el intervalo de actualización de protección de montaje múltiple a %lu segundos\n"
+
+#: misc/tune2fs.c:2078
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "Se pone el indicador de error del sistema de ficheros para forzar fsck.\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "«Stride» de RAID no válido: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "«stripe-width» de RAID no válido: %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2126
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Algoritmo «hash» no válido: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2132
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
-msgstr "Poniendo el algoritmo «hash»predeterminado a %s (%d)\n"
+msgstr "Poniendo el algoritmo «hash» predeterminado a %s (%d)\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2151
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6905,55 +6753,55 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
 "\n"
 "Las opciones especificadas son incorrectas.\n"
 "\n"
-"Las opciones extendidas deben estar separadas por comas, y pueden tomar un\n"
+"Las opciones extendidas deben estar separadas por comas y pueden tomar un\n"
 "\targumento que se ajusta con un signo de igual ('=').\n"
 "\n"
 "Las opciones extendidas válidas son:\n"
 "\tclear_mmp\n"
 "\thash_alg=<algoritmo «hash»>\n"
 "\tmount_opts=<opciones de montaje extendidas predeterminadas>\n"
+"\tmmp_update_interval=<intervalo de actualización mmp en segundos>\n"
 "\tstride=<tamaño de fragmento por disco RAID, en bloques>\n"
 "\tstripe_width=<«stride» de RAID * discos de datos, en bloques>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 msgid "Failed to read inode bitmap\n"
 msgstr "Fallo mientras se leía el mapa de bits del nodo-i\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 msgid "Failed to read block bitmap\n"
 msgstr "Fallo leyendo el mapa de bits del bloque\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "bloques por ser movidos"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 msgid "Failed to allocate block bitmap when increasing inode size\n"
-msgstr ""
-"Fallo reservando el mapa de bits del bloque al incrementar el tamaño de nodo-"
-"i\n"
+msgstr "Fallo reservando el mapa de bits del bloque al incrementar el tamaño de nodo-i\n"
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2653
 msgid "Not enough space to increase inode size \n"
 msgstr "No hay espacio suficiente para aumentar el tamaño de nodo-i \n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2658
 msgid "Failed to relocate blocks during inode resize \n"
-msgstr ""
-"Fallo mientras se reservaban los bloques para el cambio de tamaño de nodo-"
-"i \n"
+msgstr "Fallo mientras se reservaban los bloques para el cambio de tamaño de nodo-i \n"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6961,84 +6809,113 @@ msgstr ""
 "Error al cambiar el tamaño del nodo-i.\n"
 "Ejecute e2undo para deshacer los cambios del sistema de ficheros. \n"
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2900
+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 se sabe con certeza que el sistema de ficheros no está en uso en ningún\n"
+"modo, ejecute 'tune2fs -f -E clear_mmp {device}'\n"
+
+#: misc/tune2fs.c:2907
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
-"El número mágico del bloque MMP es incorrecto. Trate de arreglarlo "
-"ejecutando:\n"
+"El número mágico del bloque MMP es incorrecto. Trate de arreglarlo ejecutando:\n"
 "'e2fsck -f %s'\n"
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2919
 msgid "Cannot modify a journal device.\n"
 msgstr "No se puede modificar el dispositivo de un fichero de transacciones.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "El tamaño del nodo-i ya es %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 msgid "Shrinking inode size is not supported\n"
 msgstr "No es posible reducir el tamaño del nodo-i\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "Tamaño incorrecto del nodo-i %lu (máx %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
 msgstr "Podría tardarse un rato en cambiar el tamaño de los nodos-i."
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+"Atención: el fichero de transacciones está sucio. Quizá quiera reproducirlo así:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"después ejecute otra vez esta orden.  De lo contrario, podrían perderse los cambios\n"
+"al recuperar el fichero de transacciones.\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Recuperando el fichero de transacciones.\n"
+
+#: misc/tune2fs.c:3028
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Se pone la cuenta de montajes máxima a %d\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3034
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Se pone la cuenta de montajes actual a %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Se pone el comportamiento de errores a %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
-msgstr "Se pone el gid de los bloques reservados %lu\n"
+msgstr "Se pone el gid de los bloques reservados %lu\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3049
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "el intervalo entre revisiones es demasiado grande (%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3056
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Se pone el intervalo entre revisiones en %lu segundos\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "Se pone el porcentaje de bloques reservados a %g%% (%llu bloques)\n"
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "la cantidad de bloques reservados es demasiado grande (%llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3076
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Se pone la cantidad de bloques reservados a %llu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3081
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -7046,7 +6923,7 @@ msgstr ""
 "\n"
 "El sistema de ficheros ya tiene superbloques dispersos.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -7056,7 +6933,7 @@ msgstr ""
 "La característica de superbloques dispersos no se puede activar\n"
 "en sistemas de ficheros que tengan la característica meta_bg activada.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
@@ -7065,7 +6942,7 @@ msgstr ""
 "\n"
 "La bandera de superbloques dispersos está puesta.  %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -7073,162 +6950,120 @@ msgstr ""
 "\n"
 "No es posible quitar la bandera de superbloques dispersos.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Se pone la hora de la última revisión al sistema de ficheros a %s\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3113
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Se pone el uid de los bloques reservados a %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3145
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr "Error al utilizar clear_mmp. Debe utilizarse con -f\n"
 
-#: misc/tune2fs.c:3024
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"La característica de cuota sólo puede cambiarse cuando el sistema de "
-"ficheros no está montado.\n"
+#: misc/tune2fs.c:3163
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
+msgstr "La característica de cuota sólo puede cambiarse cuando el sistema de ficheros no está montado.\n"
 
-#: misc/tune2fs.c:3048
-msgid "The UUID may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"El UUID solo puede cambiarse cuando el sistema de ficheros no está montado.\n"
+#: misc/tune2fs.c:3181
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "Podría tardarse un rato en establecer el UUID en este sistema de ficheros."
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
-msgstr ""
-"Si solo utiliza núcleos más recientes que v4.4, ejecute 'tune2fs -O "
-"metadata_csum_seed' y ejecute otra vez esta orden.\n"
+#: misc/tune2fs.c:3196
+msgid "The UUID may only be changed when the filesystem is unmounted.\n"
+msgstr "El UUID solo puede cambiarse cuando el sistema de ficheros no está montado.\n"
 
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr ""
-"Podría tardarse un rato en establecer el UUID en un sistema de ficheros con "
-"suma de comprobación."
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
+msgstr "Si solo utiliza núcleos más recientes que v4.4, ejecute 'tune2fs -O metadata_csum_seed' y ejecute otra vez esta orden.\n"
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "Formato del UUID no válido\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 msgid "Need to update journal superblock.\n"
 msgstr "Hace falta actualizar el superbloque del fichero de transacciones.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"El tamaño de nodo-i solo puede cambiarse cuando el sistema de ficheros no "
-"está montado.\n"
+msgstr "El tamaño de nodo-i solo puede cambiarse cuando el sistema de ficheros no está montado.\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3274
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
-"No es posible cambiar el tamaño de nodo-i en sistemas de ficheros que "
-"tengan\n"
+"No es posible cambiar el tamaño de nodo-i en sistemas de ficheros que tengan\n"
 "la característica flex_bg activada.\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Se pone el tamaño de nodo-i %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 msgid "Failed to change inode size\n"
 msgstr "Fallo mientras se cambiaba el tamaño de nodo-i\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Configurando el tamaño de «stride» a %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Configurando la anchura de «stripe» a %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3322
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Se ponen las opciones de montaje extendidas predeterminadas a '%s'\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-"Atención: el fichero de transacciones está sucio. Quizá quiera reproducirlo "
-"así:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"después ejecute otra vez esta orden.  De lo contrario, podrían perderse los "
-"cambios\n"
-"al recuperar el fichero de transacciones.\n"
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr "Recuperando el fichero de transacciones.\n"
-
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr "<procediendo>\n"
 
-#: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "¿Continuar de todas formas (o espera %d segundos)? (s,n) "
+#: misc/util.c:105
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "¿Continuar de todas formas (o esperar %d segundos antes de proceder)? (s,N) "
 
-#: misc/util.c:108
-#, fuzzy
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
-msgstr "¿Continuar de todas formas? (s,n) "
+msgstr "¿Continuar de todas formas? (s,N) "
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
-msgstr ""
-"Se fuerza de todas formas mke2fs.  Esperemos que /etc/mtab sea incorrecto.\n"
+msgstr "Se fuerza de todas formas mke2fs.  Esperemos que /etc/mtab sea incorrecto.\n"
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr "¡No se hará un %s aquí!\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr "Se fuerza de todas formas mke2fs.\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
-msgstr ""
-"¡No se puede reservar memoria para la revisión sintáctica de las opciones "
-"del fichero de transacciones!\n"
+msgstr "¡No se puede reservar memoria para la revisión sintáctica de las opciones del fichero de transacciones!\n"
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
 "Could not find journal device matching %s\n"
 msgstr ""
 "\n"
-"No se puede encontrar el dispositivo del fichero de transacciones "
-"correspondiente a %s\n"
+"No se puede encontrar el dispositivo del fichero de transacciones correspondiente a %s\n"
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -7255,20 +7090,18 @@ msgstr ""
 "\tdevice=<dispositivo del fichero de transacciones>\n"
 "\tlocation=<localización del fichero de transacciones>\n"
 "\n"
-"El tamaño del fichero de transacciones debe estar entre 1024 y 10240000 "
-"bloques del sistema de ficheros.\n"
+"El tamaño del fichero de transacciones debe estar entre 1024 y 10240000 bloques del sistema de ficheros.\n"
 "\n"
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
 msgstr ""
 "\n"
-"El sistema de ficheros es demasiado pequeño para un fichero de "
-"transacciones\n"
+"El sistema de ficheros es demasiado pequeño para un fichero de transacciones\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -7279,16 +7112,15 @@ msgstr ""
 "El tamaño del fichero de transacciones solicitado es de %d bloques;\n"
 "debería estar entre 1024 y 10240000 bloques.  Se finaliza.\n"
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
 msgstr ""
 "\n"
-"El tamaño del fichero de transacciones es muy grande para el sistema de "
-"ficheros.\n"
+"El tamaño del fichero de transacciones es muy grande para el sistema de ficheros.\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
@@ -7300,8 +7132,7 @@ msgstr ""
 #: misc/uuidd.c:49
 #, c-format
 msgid "Usage: %s [-d] [-p pidfile] [-s socketpath] [-T timeout]\n"
-msgstr ""
-"Modo de empleo: %s [-d] [-p fichero-pid] [-s ruta-socket] [-T retardo]\n"
+msgstr "Modo de empleo: %s [-d] [-p fichero-pid] [-s ruta-socket] [-T retardo]\n"
 
 #: misc/uuidd.c:51
 #, c-format
@@ -7433,7 +7264,7 @@ msgstr "Modo de empleo: %s [-r] [-t]\n"
 
 #: resize/extent.c:202
 msgid "# Extent dump:\n"
-msgstr "# Vaciado extenso:\n"
+msgstr "# Volcado de «extent»:\n"
 
 #: resize/extent.c:203
 #, c-format
@@ -7443,44 +7274,42 @@ msgstr "#\tNúm=%llu, Tamaño=%llu, Cursor=%llu, Ordenado=%llu\n"
 #: resize/main.c:49
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
-"Modo de empleo: %s [-d banderas_de_depuración] [-f] [-F] [-M] [-P] [-p] "
-"dispositivo [-b|-s|[nuevo-tamaño] [-z fichero-deshacer]\n"
+"Modo de empleo: %s [-d banderas_de_depuración] [-f] [-F] [-M] [-P] [-p] dispositivo [-b|-s|[nuevo-tamaño] [-S RAID-«stride»] [-z fichero-deshacer]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Extendiendo la tabla de nodos-i"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Reubicando bloques"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Revisando la tabla de nodos-i"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Actualizando las referencias a los nodos-i"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Moviendo la tabla de nodos-i"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "¿¡¿Paso desconocido?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
-msgstr "Se comienza el paso %d (máx = %lu)\n"
+msgstr "Comienza el paso %d (máx = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7488,23 +7317,21 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"No está totalmente probada la función de cambio de tamaño de los sistemas de "
-"ficheros «bigalloc». ¡Prosiga\n"
-"bajo su cuenta y riesgo!  Utilice la opción «force» si desea seguir adelante "
-"de todos modos.\n"
+"No está totalmente probada la función de cambio de tamaño de los sistemas de ficheros «bigalloc».  ¡Prosiga\n"
+"bajo su cuenta y riesgo!  Utilice la opción «force» si desea seguir adelante de todos modos.\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "mientras se abría %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "mientras se estaba obteniendo información del estado de %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7513,112 +7340,100 @@ msgstr ""
 "Por favor ejecute antes 'e2fsck -f %s'.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Tamaño mínimo estimado del sistema de ficheros: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "El nuevo tamaño no es válido: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "El nuevo tamaño es demasiado grande para poder expresarse en 32 bits\n"
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "El nuevo tamaño es menor que el mínimo (%llu)\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Longitud de «stride» no válida"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, 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 ""
-"La partición contenida (o el dispositivo) sólo tiene %llu (%dk) bloques.\n"
+"La partición continente (o el dispositivo) sólo tiene %llu (%dk) bloques.\n"
 "Y se ha solicitado un nuevo tamaño de %llu bloques.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr "No se puede poner y quitar la característica 64bit.\n"
 
-#: resize/main.c:569
-#, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
-msgstr ""
-"No se puede cambiar la característica 64bit en un sistema de ficheros mayor "
-"de 2^32 bloques.\n"
-
 #: resize/main.c:575
 #, c-format
-msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
-msgstr ""
-"No se puede cambiar la característica 64bit cuando el sistema de ficheros "
-"está montado.\n"
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
+msgstr "No se puede cambiar la característica 64bit en un sistema de ficheros mayor de 2^32 bloques.\n"
 
 #: resize/main.c:581
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
-msgstr ""
-"Por favor, active la característica «extents» con tune2fs antes de activar "
-"la característica 64bit.\n"
+msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
+msgstr "No se puede cambiar la característica 64bit cuando el sistema de ficheros está montado.\n"
 
 #: resize/main.c:587
 #, c-format
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
+msgstr "Por favor, active la característica «extents» con tune2fs antes de activar la característica 64bit.\n"
+
+#: resize/main.c:593
+#, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
 msgstr ""
-"El sistema de ficheros ya tiene %llu bloques (%dk) de longitud. ¡No hay que "
-"hacer nada!\n"
+"El sistema de ficheros ya tiene %llu bloques (%dk) de longitud. ¡No hay que hacer nada!\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "El sistema de ficheros ya es de 64 bits.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "El sistema de ficheros ya es de 32 bits.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "Se convierte el sistema de ficheros a 64 bits.\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "Se convierte el sistema de ficheros a 32 bits.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
-msgstr ""
-"Cambiando el tamaño del sistema de ficheros en %s a %llu (%dk) bloques.\n"
+msgstr "Cambiando el tamaño del sistema de ficheros en %s a %llu (%dk) bloques.\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "mientras se intentaba modificar el tamaño %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7627,7 +7442,7 @@ msgstr ""
 "Por favor, ejecute 'e2fsck -fy %s' para arreglar el sistema de ficheros\n"
 "después de la operación de cambio de tamaño interrumpida.\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7636,7 +7451,7 @@ msgstr ""
 "El sistema de ficheros en %s tiene ahora %llu bloques (de %dk).\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "mientras se intentaba truncar %s"
@@ -7648,9 +7463,7 @@ msgstr "el núcleo no permite cambiar el tamaño en línea con sparse_super2"
 #: resize/online.c:86
 #, c-format
 msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
-msgstr ""
-"El sistema de ficheros de %s está montado en %s; hace falta cambiar el "
-"tamaño en línea\n"
+msgstr "El sistema de ficheros de %s está montado en %s; hace falta cambiar el tamaño en línea\n"
 
 #: resize/online.c:90
 msgid "On-line shrinking not supported"
@@ -7666,8 +7479,7 @@ msgstr "No se han reservado suficientes bloques gdt para cambiar el tamaño"
 
 #: resize/online.c:129
 msgid "Kernel does not support resizing a file system this large"
-msgstr ""
-"El núcleo no permite cambiar el tamaño de un sistema de ficheros tan grande"
+msgstr "El núcleo no permite cambiar el tamaño de un sistema de ficheros tan grande"
 
 #: resize/online.c:137
 #, c-format
@@ -7685,7 +7497,7 @@ msgstr "Permiso para cambiar el tamaño del sistema de ficheros denegado"
 
 #: resize/online.c:164 resize/online.c:184
 msgid "While checking for on-line resizing support"
-msgstr "Mientras se comprobaba el soporte de cambio de tamaño en línea"
+msgstr "Mientras se comprobaba si se puede cambiar de tamaño en línea"
 
 #: resize/online.c:181
 msgid "Kernel does not support online resizing"
@@ -7700,55 +7512,49 @@ msgstr "Realizando cambio de tamaño en línea de %s a %llu (%dk) bloques.\n"
 msgid "While trying to extend the last group"
 msgstr "mientras se intentaba extender el último grupo"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "mientras se intentaba añadir el grupo #%d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
-msgid ""
-"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
-"this system.\n"
-msgstr ""
-"El sistema de ficheros de %s está montado en %s, pero el cambio de tamaño en "
-"línea no está implementado en este sistema.\n"
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "El sistema de ficheros de %s está montado en %s, pero el cambio de tamaño en línea no está implementado en este sistema.\n"
 
 #: resize/resize2fs.c:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "los nodos-i (%llu) deben ser menos de %u"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "los nodos-i (%llu) deben ser menos de %u\n"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "bloques reservados"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "bloques de metadatos"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr "nuevos bloques de metadatos"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
-msgstr ""
-"¡Nunca debería suceder!  ¿No hay ningún sb en el último bg super_sparse?\n"
+msgstr "¡Nunca debería suceder!  ¿No hay ningún sb en el último bg super_sparse?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr "¡Nunca debería suceder!  ¿old_desc inesperada en el bg super_sparse?\n"
 
-#: resize/resize2fs.c:2618
+# No estoy seguro
+#: resize/resize2fs.c:2722
 msgid "Should never happen: resize inode corrupt!\n"
-msgstr ""
-"Esto nunca debería suceder: ¡Se cambia el tamaño del nodo-i corrupto!\n"
+msgstr "Esto nunca debería suceder: ¡El nodo-i de cambio de tamaño está corrupto!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.43.4-WIP"
-msgstr "Biblioteca EXT2FS versión 1.43"
+msgid "EXT2FS Library version 1.45.3"
+msgstr "Biblioteca EXT2FS versión 1.45.3"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -7796,8 +7602,7 @@ msgstr "Número mágico incorrecto para la estructura io_channel de test"
 
 #: lib/ext2fs/ext2_err.c:23
 msgid "Wrong magic number for directory block list structure"
-msgstr ""
-"Número mágico incorrecto para la estructura de lista de bloque de directorio"
+msgstr "Número mágico incorrecto para la estructura de lista de bloque de directorio"
 
 #: lib/ext2fs/ext2_err.c:24
 msgid "Wrong magic number for icount structure"
@@ -7845,20 +7650,15 @@ msgstr "No se pueden escribir los descriptores de grupo"
 
 #: lib/ext2fs/ext2_err.c:35
 msgid "Corrupt group descriptor: bad block for block bitmap"
-msgstr ""
-"Descriptor de grupo corrupto: bloque incorrecto para el mapa de bits de "
-"bloques"
+msgstr "Descriptor de grupo corrupto: bloque incorrecto para el mapa de bits de bloques"
 
 #: lib/ext2fs/ext2_err.c:36
 msgid "Corrupt group descriptor: bad block for inode bitmap"
-msgstr ""
-"Descriptor de grupo corrupto: bloque incorrecto para el mapa de bits de "
-"nodos-i"
+msgstr "Descriptor de grupo corrupto: bloque incorrecto para el mapa de bits de nodos-i"
 
 #: lib/ext2fs/ext2_err.c:37
 msgid "Corrupt group descriptor: bad block for inode table"
-msgstr ""
-"Descriptor de grupo corrupto: bloque incorrecto para la tabla de nodos-i"
+msgstr "Descriptor de grupo corrupto: bloque incorrecto para la tabla de nodos-i"
 
 #: lib/ext2fs/ext2_err.c:38
 msgid "Can't write an inode bitmap"
@@ -7898,15 +7698,11 @@ msgstr "Directorio EXT2 corrupto"
 
 #: lib/ext2fs/ext2_err.c:47
 msgid "Attempt to read block from filesystem resulted in short read"
-msgstr ""
-"El intento de leer un bloque del sistema de ficheros resultó en una lectura "
-"corta"
+msgstr "El intento de leer un bloque del sistema de ficheros resultó en una lectura corta"
 
 #: lib/ext2fs/ext2_err.c:48
 msgid "Attempt to write block to filesystem resulted in short write"
-msgstr ""
-"El intento de escribir un bloque en el sistema de ficheros resultó en una "
-"escritura corta"
+msgstr "El intento de escribir un bloque en el sistema de ficheros resultó en una escritura corta"
 
 #: lib/ext2fs/ext2_err.c:49
 msgid "No free space in the directory"
@@ -7934,8 +7730,7 @@ msgstr "Error interno en ext2fs_expand_dir"
 
 #: lib/ext2fs/ext2_err.c:55
 msgid "Not enough space to build proposed filesystem"
-msgstr ""
-"No hay suficiente espacio para construir el sistema de ficheros propuesto"
+msgstr "No hay suficiente espacio para construir el sistema de ficheros propuesto"
 
 #: lib/ext2fs/ext2_err.c:56
 msgid "Illegal block number passed to ext2fs_mark_block_bitmap"
@@ -7943,8 +7738,7 @@ msgstr "Se ha pasado un número de bloque no válido a ext2fs_mark_block_bitmap"
 
 #: lib/ext2fs/ext2_err.c:57
 msgid "Illegal block number passed to ext2fs_unmark_block_bitmap"
-msgstr ""
-"Se ha pasado un número de bloque no válido a ext2fs_unmark_block_bitmap"
+msgstr "Se ha pasado un número de bloque no válido a ext2fs_unmark_block_bitmap"
 
 #: lib/ext2fs/ext2_err.c:58
 msgid "Illegal block number passed to ext2fs_test_block_bitmap"
@@ -7956,8 +7750,7 @@ msgstr "Se ha pasado un número de nodo-i no válido a ext2fs_mark_inode_bitmap"
 
 #: lib/ext2fs/ext2_err.c:60
 msgid "Illegal inode number passed to ext2fs_unmark_inode_bitmap"
-msgstr ""
-"Se ha pasado un número de nodo-i no válido a ext2fs_unmark_inode_bitmap"
+msgstr "Se ha pasado un número de nodo-i no válido a ext2fs_unmark_inode_bitmap"
 
 #: lib/ext2fs/ext2_err.c:61
 msgid "Illegal inode number passed to ext2fs_test_inode_bitmap"
@@ -7965,15 +7758,11 @@ msgstr "Se ha pasado un número de nodo-i no válido a ext2fs_test_inode_bitmap"
 
 #: lib/ext2fs/ext2_err.c:62
 msgid "Attempt to fudge end of block bitmap past the real end"
-msgstr ""
-"Se ha intentado empujar el final del mapa de bits de bloques más allá del "
-"final real"
+msgstr "Se ha intentado empujar el final del mapa de bits de bloques más allá del final real"
 
 #: lib/ext2fs/ext2_err.c:63
 msgid "Attempt to fudge end of inode bitmap past the real end"
-msgstr ""
-"Se ha intentado empujar el final del mapa de bits de nodos-i más allá del "
-"final real"
+msgstr "Se ha intentado empujar el final del mapa de bits de nodos-i más allá del final real"
 
 #: lib/ext2fs/ext2_err.c:64
 msgid "Illegal indirect block found"
@@ -8009,18 +7798,15 @@ msgstr "El superbloque ext2 está corrupto"
 
 #: lib/ext2fs/ext2_err.c:72
 msgid "Illegal generic bit number passed to ext2fs_mark_generic_bitmap"
-msgstr ""
-"El número de bit genérico pasado a ext2fs_mark_generic_bitmap no es válido"
+msgstr "El número de bit genérico pasado a ext2fs_mark_generic_bitmap no es válido"
 
 #: lib/ext2fs/ext2_err.c:73
 msgid "Illegal generic bit number passed to ext2fs_unmark_generic_bitmap"
-msgstr ""
-"El número de bit genérico pasado a ext2fs_unmark_generic_bitmap no es válido"
+msgstr "El número de bit genérico pasado a ext2fs_unmark_generic_bitmap no es válido"
 
 #: lib/ext2fs/ext2_err.c:74
 msgid "Illegal generic bit number passed to ext2fs_test_generic_bitmap"
-msgstr ""
-"El número de bit genérico pasado a ext2fs_test_generic_bitmap no es válido"
+msgstr "El número de bit genérico pasado a ext2fs_test_generic_bitmap no es válido"
 
 #: lib/ext2fs/ext2_err.c:75
 msgid "Too many symbolic links encountered."
@@ -8036,13 +7822,11 @@ msgstr "El nodo-i procede de un bloque incorrecto en la tabla de nodos-i"
 
 #: lib/ext2fs/ext2_err.c:78
 msgid "Filesystem has unsupported feature(s)"
-msgstr "El sistema de ficheros tiene característica(s) no soportada(s)"
+msgstr "El sistema de ficheros tiene característica(s) no implementada(s)"
 
 #: lib/ext2fs/ext2_err.c:79
 msgid "Filesystem has unsupported read-only feature(s)"
-msgstr ""
-"El sistema de ficheros tiene característica(s) no soportada(s) de solo "
-"lectura"
+msgstr "El sistema de ficheros tiene característica(s) no implementada(s) de solo lectura"
 
 #: lib/ext2fs/ext2_err.c:80
 msgid "IO Channel failed to seek on read or write"
@@ -8102,9 +7886,7 @@ msgstr "Fichero demasiado grande"
 
 #: lib/ext2fs/ext2_err.c:94
 msgid "Supplied journal device not a block device"
-msgstr ""
-"El dispositivo de fichero de transacciones suministrado no es un dispositivo "
-"de bloques"
+msgstr "El dispositivo de fichero de transacciones suministrado no es un dispositivo de bloques"
 
 #: lib/ext2fs/ext2_err.c:95
 msgid "Journal superblock not found"
@@ -8116,7 +7898,7 @@ msgstr "El fichero de transacciones debe tener al menos 1024 bloques"
 
 #: lib/ext2fs/ext2_err.c:97
 msgid "Unsupported journal version"
-msgstr "Versión del fichero de transacciones no soportada"
+msgstr "Versión del fichero de transacciones no compatible"
 
 #: lib/ext2fs/ext2_err.c:98
 msgid "Error loading external journal"
@@ -8128,7 +7910,7 @@ msgstr "No se encontró el fichero de transacciones"
 
 #: lib/ext2fs/ext2_err.c:100
 msgid "Directory hash unsupported"
-msgstr "«Hash» de directorio no soportado"
+msgstr "«Hash» de directorio no compatible"
 
 #: lib/ext2fs/ext2_err.c:101
 msgid "Illegal extended attribute block number"
@@ -8136,9 +7918,7 @@ msgstr "El número de bloque de atributo extendido no es válido"
 
 #: lib/ext2fs/ext2_err.c:102
 msgid "Cannot create filesystem with requested number of inodes"
-msgstr ""
-"No se ha podido crear el sistema de ficheros con el número de nodos-i "
-"solicitado"
+msgstr "No se ha podido crear el sistema de ficheros con el número de nodos-i solicitado"
 
 #: lib/ext2fs/ext2_err.c:103
 msgid "E2image snapshot not in use"
@@ -8202,9 +7982,7 @@ msgstr "La lista de bloques del directorio ext2fs está vacía"
 
 #: lib/ext2fs/ext2_err.c:118
 msgid "Attempt to modify a block mapping via a read-only block iterator"
-msgstr ""
-"Intento de modificar una asociación de bloques mediante un iterador de "
-"bloques de solo lectura"
+msgstr "Intento de modificar una asociación de bloques mediante un iterador de bloques de solo lectura"
 
 #: lib/ext2fs/ext2_err.c:119
 msgid "Wrong magic number for ext4 extent saved path"
@@ -8320,15 +8098,11 @@ msgstr "El canal de E/S no admite números de bloque de 64 bits"
 
 #: lib/ext2fs/ext2_err.c:147
 msgid "Can't check if filesystem is mounted due to missing mtab file"
-msgstr ""
-"No se ha podido comprobar si el sistema de ficheros está montado, porque "
-"falta el fichero mtab"
+msgstr "No se ha podido comprobar si el sistema de ficheros está montado, porque falta el fichero mtab"
 
 #: lib/ext2fs/ext2_err.c:148
 msgid "Filesystem too large to use legacy bitmaps"
-msgstr ""
-"El sistema de ficheros es demasiado grande para utilizar mapas de bits "
-"antiguos"
+msgstr "El sistema de ficheros es demasiado grande para utilizar mapas de bits antiguos"
 
 #: lib/ext2fs/ext2_err.c:149
 msgid "MMP: invalid magic number"
@@ -8339,8 +8113,8 @@ msgid "MMP: device currently active"
 msgstr "MMP: dispositivo actualmente activo"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
-msgstr "MMP: fsck ejecutándose"
+msgid "MMP: e2fsck being run"
+msgstr "MMP: e2fsck ejecutándose"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
@@ -8368,8 +8142,7 @@ msgstr "El «checksum» del nodo-i no cuadra con el nodo-i"
 
 #: lib/ext2fs/ext2_err.c:158
 msgid "Inode bitmap checksum does not match bitmap"
-msgstr ""
-"El «checksum» del mapa de bits del nodo-i no cuadra con el mapa de bits"
+msgstr "El «checksum» del mapa de bits del nodo-i no cuadra con el mapa de bits"
 
 #: lib/ext2fs/ext2_err.c:159
 msgid "Extent block checksum does not match extent block"
@@ -8381,8 +8154,7 @@ msgstr "El bloque de directorio no tiene espacio para el «checksum»"
 
 #: lib/ext2fs/ext2_err.c:161
 msgid "Directory block checksum does not match directory block"
-msgstr ""
-"El «checksum» del bloque de directorio no cuadra con el bloque de directorio"
+msgstr "El «checksum» del bloque de directorio no cuadra con el bloque de directorio"
 
 #: lib/ext2fs/ext2_err.c:162
 msgid "Extended attribute block checksum does not match block"
@@ -8397,8 +8169,8 @@ msgid "Unknown checksum algorithm"
 msgstr "Algoritmo de «checksum» desconocido"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr "El «checksum» del bloque MMP no cuadra con el bloque MMP"
+msgid "MMP block checksum does not match"
+msgstr "El «checksum» del bloque MMP no cuadra"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
@@ -8406,14 +8178,11 @@ msgstr "El fichero ya existe"
 
 #: lib/ext2fs/ext2_err.c:167
 msgid "Block bitmap checksum does not match bitmap"
-msgstr ""
-"El «checksum» del mapa de bits del bloque no cuadra con el mapa de bits"
+msgstr "El «checksum» del mapa de bits del bloque no cuadra con el mapa de bits"
 
 #: lib/ext2fs/ext2_err.c:168
 msgid "Cannot iterate data blocks of an inode containing inline data"
-msgstr ""
-"No se puede iterar por los bloques de datos de un nodo-i que contiene datos "
-"en línea"
+msgstr "No se puede iterar por los bloques de datos de un nodo-i que contiene datos en línea"
 
 #: lib/ext2fs/ext2_err.c:169
 msgid "Extended attribute has an invalid name length"
@@ -8441,8 +8210,7 @@ msgstr "Espacio insuficiente para almacenar los datos de atributos extendidos"
 
 #: lib/ext2fs/ext2_err.c:175
 msgid "Filesystem is missing ext_attr or inline_data feature"
-msgstr ""
-"El sistema de ficheros carece de la característica ext_attr o inline_data"
+msgstr "El sistema de ficheros carece de la característica ext_attr o inline_data"
 
 #: lib/ext2fs/ext2_err.c:176
 msgid "Inode doesn't have inline data"
@@ -8466,8 +8234,7 @@ msgstr "Parece que el nodo-i contiene basura"
 
 #: lib/ext2fs/ext2_err.c:181
 msgid "Extended attribute has an invalid value offset"
-msgstr ""
-"El atributo extendido tiene un desplazamiento del valor que no es válido"
+msgstr "El atributo extendido tiene un desplazamiento del valor que no es válido"
 
 #: lib/ext2fs/ext2_err.c:182
 msgid "Journal flags inconsistent"
@@ -8494,9 +8261,12 @@ msgid "The journal superblock is corrupt"
 msgstr "El superbloque del fichero de transacciones está corrupto"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "El nodo-i de cambio de tamaño está corrupto"
+msgstr "El nodo-i está corrupto"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr "El nodo-i que contiene el valor de un atributo extendido está corrupto"
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8690,13 +8460,104 @@ msgstr "%s contiene un sistema de ficheros %s\n"
 msgid "%s contains `%s' data\n"
 msgstr "%s contiene datos `%s'\n"
 
+#~ msgid "while opening directory \"%s\""
+#~ msgstr "mientras se abría el directorio \"%s\""
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** ¡Errores de «checksum» detectados en el sistema de ficheros!  ¡Ejecute e2fsck ahora!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** ¡Errores de «checksum» detectados en mapas de bits!  ¡Ejecute e2fsck ahora!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %s: error al leer los mapas de bits: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Atención, se tuvo un problema al escribir los superbloques.\n"
+
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "El i_dir_acl @F %Id, @s cero.\n"
+
+#~ msgid "Journal features:        "
+#~ msgstr "Características del fichero de transacciones:  "
+
+#~ msgid "Journal size:             "
+#~ msgstr "Tamaño del fichero de transacciones:  "
+
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "Longitud del fichero de transacciones:           %u\n"
+#~ "Secuencia del fichero de transacciones:          0x%08x\n"
+#~ "Inicio del fichero de transacciones:             %u\n"
+
+#~ msgid "Journal checksum type:    crc32\n"
+#~ msgstr "Tipo de «checksum» del fichero de transacciones:    crc32\n"
+
+#~ msgid ""
+#~ "Journal checksum type:    %s\n"
+#~ "Journal checksum:         0x%08x\n"
+#~ msgstr ""
+#~ "Tipo de «checksum» del fichero de transacciones:    %s\n"
+#~ "«Checksum» del fichero de transacciones:            0x%08x\n"
+
+#~ msgid "Journal errno:            %d\n"
+#~ msgstr "Número de error del fichero de transacciones:    %d\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Tamaño del bloque del fichero de transacciones:  %u\n"
+#~ "Longitud del fichero de transacciones:           %u\n"
+#~ "Primer bloque del fichero de transacciones:      %u\n"
+#~ "Secuencia del fichero de transacciones:          0x%08x\n"
+#~ "Inicio del fichero de transacciones:             %u\n"
+#~ "Número de usuarios del fichero de transacciones: %u\n"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "Usuarios del fichero de transacciones:           %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning: enabled project without quota together\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Atención: proyecto activado sin cuota al mismo tiempo\n"
+
 #~ msgid "Please run e2fsck on the filesystem.\n"
 #~ msgstr "Por favor ejecute e2fsck sobre el sistema de ficheros.\n"
 
 #~ msgid "@i %i has @cion flag set on @f without @cion support.  "
-#~ msgstr ""
-#~ "el @i %i tiene la bandera de @c puesta en el @f sin que la @c esté "
-#~ "implementada.  "
+#~ msgstr "el @i %i tiene la bandera de @c puesta en el @f sin que la @c esté implementada.  "
 
 #~ msgid "@A @a @b %b.  "
 #~ msgstr "@A de @a @b %b.  "
@@ -8719,8 +8580,7 @@ msgstr "%s contiene datos `%s'\n"
 #~ msgstr ", %u nodos-i sin usar\n"
 
 #~ msgid "Failed to read the file system data \n"
-#~ msgstr ""
-#~ "Fallo mientras se intentaban leer los datos del sistema de ficheros \n"
+#~ msgstr "Fallo mientras se intentaban leer los datos del sistema de ficheros \n"
 
 #~ msgid "Failed tdb_fetch %s\n"
 #~ msgstr "Fallo en tdb_fetch %s\n"
@@ -8735,8 +8595,7 @@ msgstr "%s contiene datos `%s'\n"
 #~ msgstr "Fallo mientras se intentaba abrir %s\n"
 
 #~ msgid "Replayed transaction of size %zd at location %llu\n"
-#~ msgstr ""
-#~ "Se ejecutó de nuevo un transacción de tamaño %zd en la posición %llu\n"
+#~ msgstr "Se ejecutó de nuevo un transacción de tamaño %zd en la posición %llu\n"
 
 #~ msgid "Failed write %s\n"
 #~ msgstr "Fallo de escritura %s\n"
@@ -8745,9 +8604,7 @@ msgstr "%s contiene datos `%s'\n"
 #~ msgstr "Parámetro de tipo de cuota no válido: %s\n"
 
 #~ msgid "Couldn't allocate memory to parse quota options!\n"
-#~ msgstr ""
-#~ "¡No se puede reservar memoria para analizar sintácticamente las opciones "
-#~ "de cuota!\n"
+#~ msgstr "¡No se puede reservar memoria para analizar sintácticamente las opciones de cuota!\n"
 
 #~ msgid "Couldn't allocate memory for tdb filename\n"
 #~ msgstr "No se puede reservar memoria para el nombre del fichero tdb\n"
@@ -8774,9 +8631,7 @@ msgstr "%s contiene datos `%s'\n"
 #~ msgstr "El @S no tiene la bandera has_journal, pero tiene un @j ext3 %s.\n"
 
 #~ msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-#~ msgstr ""
-#~ "El @a en el @i %i tiene un arreglo asociativo (%N) que es @n (debe ser "
-#~ "0)\n"
+#~ msgstr "El @a en el @i %i tiene un arreglo asociativo (%N) que es @n (debe ser 0)\n"
 
 #~ msgid "Recreate journal to make the filesystem ext3 again?\n"
 #~ msgstr "¿Recrear el @j para hacer el sistema de ficheros ext3 de nuevo?\n"
@@ -8792,32 +8647,25 @@ msgstr "%s contiene datos `%s'\n"
 #~ "and not mounted before trying to byte-swap it.\n"
 #~ msgstr ""
 #~ "%s: el sistema de ficheros debe ser revisado desde cero utilizando\n"
-#~ "fsck y no debe estar montado cuando se intente hacer una trasposición de "
-#~ "bytes en él.\n"
+#~ "fsck y no debe estar montado cuando se intente hacer una trasposición de bytes en él.\n"
 
 #~ msgid "Byte swap"
 #~ msgstr "Trasposición de bytes"
 
 #~ msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-#~ msgstr ""
-#~ "Los sistemas con trasposición de bytes no están compilados en esta "
-#~ "versión de e2fsck\n"
+#~ msgstr "Los sistemas con trasposición de bytes no están compilados en esta versión de e2fsck\n"
 
 #~ msgid "Incompatible options not allowed when byte-swapping.\n"
-#~ msgstr ""
-#~ "Las opciones incompatibles no están permitidas cuando se hace "
-#~ "trasposición de bytes.\n"
+#~ msgstr "Las opciones incompatibles no están permitidas cuando se hace trasposición de bytes.\n"
 
 #~ msgid "%s: Filesystem byte order already normalized.\n"
-#~ msgstr ""
-#~ "%s: el orden de los bytes del sistema de ficheros ya se normalizó.\n"
+#~ msgstr "%s: el orden de los bytes del sistema de ficheros ya se normalizó.\n"
 
 #~ msgid "Couldn't determine journal size"
 #~ msgstr "No se puede determinar el tamaño del fichero de transacciones"
 
 #~ msgid "while retrying to write block bitmaps for %s"
-#~ msgstr ""
-#~ "mientras se reintentaba escribir los mapas de bits del bloque para %s"
+#~ msgstr "mientras se reintentaba escribir los mapas de bits del bloque para %s"
 
 #~ msgid "invalid starting block - %s"
 #~ msgstr "bloque inicial no válido - %s"
@@ -8826,16 +8674,13 @@ msgstr "%s contiene datos `%s'\n"
 #~ msgstr "Nota: este es un sistema de ficheros con trasposición de bytes\n"
 
 #~ msgid "short write (only %d bytes) for writing image header"
-#~ msgstr ""
-#~ "se escribió muy poco (sólo %d bytes) para el encabezado de la imagen"
+#~ msgstr "se escribió muy poco (sólo %d bytes) para el encabezado de la imagen"
 
 #~ msgid "invalid fragment size - %s"
 #~ msgstr "Tamaño del fragmento inválido - %s"
 
 #~ msgid "Warning: fragments not supported.  Ignoring -f option\n"
-#~ msgstr ""
-#~ "Atención: no están implementados los fragmentos. Se descarta la opción -"
-#~ "f\n"
+#~ msgstr "Atención: no están implementados los fragmentos. Se descarta la opción -f\n"
 
 #~ msgid ""
 #~ "Filesystem too large.  No more than 2**31-1 blocks\n"
@@ -8856,9 +8701,7 @@ msgstr "%s contiene datos `%s'\n"
 #~ "\n"
 
 #~ msgid "Warning: %d-byte inodes not usable on older systems\n"
-#~ msgstr ""
-#~ "Atención: los nodos-i de %d bytes no se pueden utilizar en muchos "
-#~ "sistemas\n"
+#~ msgstr "Atención: los nodos-i de %d bytes no se pueden utilizar en muchos sistemas\n"
 
 #~ msgid "Journal NOT removed\n"
 #~ msgstr "NO se ha eliminado el fichero de transacciones\n"
@@ -8874,8 +8717,7 @@ msgstr "%s contiene datos `%s'\n"
 #~ "The filesystem already has sparse superblocks disabled.\n"
 #~ msgstr ""
 #~ "\n"
-#~ "El sistema de ficheros ya tiene los superbloques dispersos "
-#~ "deshabilitados.\n"
+#~ "El sistema de ficheros ya tiene los superbloques dispersos deshabilitados.\n"
 
 #~ msgid ""
 #~ "\n"
@@ -8894,17 +8736,14 @@ msgstr "%s contiene datos `%s'\n"
 #~ "Duplicate @bs found... invoking duplicate @b passes.\n"
 #~ "Pass 1B: Rescan for duplicate/bad @bs\n"
 #~ msgstr ""
-#~ "Se encontraron @bs duplicados... se invocan los pasos para @bs "
-#~ "duplicados.\n"
+#~ "Se encontraron @bs duplicados... se invocan los pasos para @bs duplicados.\n"
 #~ "Paso 1B: Re-exploración para buscar @bs duplicados/dañados\n"
 
 #~ msgid "Duplicate/bad @b(s) in @i %i:"
 #~ msgstr "Hay @b(s) duplicados/dañados en el @i %i:"
 
 #~ msgid "Forcibly clearing HTREE flag on @i %d (%q).  (Beta test code)\n"
-#~ msgstr ""
-#~ "Se intenta borrar a la fuerza la bandera HTREE en el @i %d (%q).  (Código "
-#~ "de prueba en etapa beta)\n"
+#~ msgstr "Se intenta borrar a la fuerza la bandera HTREE en el @i %d (%q).  (Código de prueba en etapa beta)\n"
 
 #~ msgid "       thisoff     block fs_blk_sz  blksz grp last_mount\n"
 #~ msgstr "      este        bloque  fs_blk_sz  blksz grp ultimo_montado\n"
index 79060bd..9a71c00 100644 (file)
Binary files a/po/fi.gmo and b/po/fi.gmo differ
index 1fc6554..7593094 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -47,7 +47,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
@@ -69,7 +69,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: e2fsprogs 1.42.12-pre2\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
+"POT-Creation-Date: 2018-08-18 21:03-0400\n"
 "PO-Revision-Date: 2016-05-26 21:46+0300\n"
 "Last-Translator: Lauri Nurmi <lanurmi@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -81,7 +81,7 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 1.8.7\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Viallinen lohko %u sallitun välin ulkopuolella; jätetään huomiotta.\n"
@@ -94,11 +94,12 @@ msgstr ""
 msgid "while reading the bad blocks inode"
 msgstr ""
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1550
+#: e2fsck/unix.c:1664 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1404
+#: misc/e2image.c:1588 misc/e2image.c:1609 misc/mke2fs.c:236
+#: misc/tune2fs.c:2837 misc/tune2fs.c:2931 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr ""
@@ -108,7 +109,7 @@ msgstr ""
 msgid "while trying popen '%s'"
 msgstr ""
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr ""
 
@@ -121,6 +122,11 @@ msgstr ""
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr ""
 
+#: e2fsck/dirinfo.c:331
+#, fuzzy
+msgid "while freeing dir_info tdb file"
+msgstr "luettaessa juuren i-solmua"
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -197,12 +203,12 @@ msgstr ""
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Käyttö: %s [-F] [-I i-solmupuskurilohkot] laite\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1075
 #, c-format
 msgid "while opening %s for flushing"
 msgstr ""
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1081 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr ""
@@ -212,11 +218,11 @@ msgstr ""
 msgid "while trying to open '%s'"
 msgstr ""
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1297
 msgid "while opening inode scan"
 msgstr ""
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1316
 msgid "while getting next inode"
 msgstr ""
 
@@ -225,360 +231,382 @@ msgstr ""
 msgid "%u inodes scanned.\n"
 msgstr "%u i-solmua tutkittu.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr ""
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr ""
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr ""
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3786
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr ""
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr ""
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr ""
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr ""
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr ""
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr ""
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr ""
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr ""
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr ""
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr ""
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr ""
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr ""
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr ""
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr ""
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr ""
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr ""
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr ""
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr ""
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr ""
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr ""
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr ""
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr ""
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr ""
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr ""
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr ""
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr ""
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr ""
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr ""
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr ""
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr ""
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr ""
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr ""
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr ""
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr ""
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr ""
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr ""
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr ""
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr ""
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr ""
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr ""
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr ""
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr ""
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr ""
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr ""
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "tavallinen tiedosto"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "hakemisto"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "merkkilaite"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "lohkolaite"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "nimetty putki"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "symbolinen linkki"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "pistoke"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr ""
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "epäsuora lohko"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr ""
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr ""
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr ""
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr ""
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr ""
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr ""
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr ""
+
+#: e2fsck/message.c:491
+#, fuzzy
+msgid "unknown quota type"
+msgstr "tuntematon käyttöjärjestelmä - %s"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr ""
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr ""
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr ""
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr ""
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr ""
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:356
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr ""
+
+#: e2fsck/pass1.c:774 e2fsck/pass2.c:1005
 msgid "reading directory block"
 msgstr ""
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1223
 msgid "in-use inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1234
 msgid "directory inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1244
 msgid "regular file inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1253 misc/e2image.c:1272
 msgid "in-use block map"
 msgstr ""
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1262
 #, fuzzy
 msgid "metadata block map"
 msgstr "Lohkobittikartan luku ei onnistu"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1324
 #, fuzzy
 msgid "opening inode scan"
 msgstr "Laajennetaan i-solmutaulua"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1362
 msgid "getting next inode from scan"
 msgstr ""
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2066
 msgid "Pass 1"
 msgstr "Vaihe 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2127
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr ""
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2178
 msgid "bad inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2218
 msgid "inode in bad block map"
 msgstr ""
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2238
 msgid "imagic inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2269
 msgid "multiply claimed block map"
 msgstr ""
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2394
 msgid "ext attr block map"
 msgstr ""
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3637
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr ""
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4054
 msgid "block bitmap"
 msgstr ""
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4060
 msgid "inode bitmap"
 msgstr ""
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4066
 msgid "inode table"
 msgstr ""
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Vaihe 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1077 e2fsck/pass2.c:1244
 msgid "Can not continue."
 msgstr "Ei voida jatkaa."
 
@@ -598,19 +626,19 @@ msgstr "Vaihe 3"
 msgid "inode loop detection bitmap"
 msgstr ""
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Vaihe 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Vaihe 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr ""
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr ""
 
@@ -775,18 +803,18 @@ msgid "WILL RECREATE"
 msgstr ""
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:112
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr ""
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:116
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr ""
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:121
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -801,7 +829,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:127
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -817,7 +845,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:138
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -827,7 +855,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:145
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -835,24 +863,24 @@ msgid ""
 msgstr ""
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:152
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr ""
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:157
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr ""
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:162
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:165
+#: e2fsck/problem.c:167
 #, c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
@@ -864,48 +892,48 @@ msgid ""
 msgstr ""
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:176
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr ""
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
+#: e2fsck/problem.c:181
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr ""
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:186
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr ""
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:190
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr ""
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
+#: e2fsck/problem.c:195
 #, c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr ""
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:200
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr ""
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:205
 msgid "Can't find external @j\n"
 msgstr ""
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:210
 msgid "External @j has bad @S\n"
 msgstr ""
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:215
 msgid "External @j does not support this @f\n"
 msgstr ""
 
@@ -913,7 +941,7 @@ msgstr ""
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:220
 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 "
@@ -922,80 +950,80 @@ msgid ""
 msgstr ""
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:228
 msgid "@j @S is corrupt.\n"
 msgstr ""
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:233
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr ""
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:238
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr ""
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:243
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr ""
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:248
 msgid "Clear @j"
 msgstr ""
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:253 e2fsck/problem.c:764
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr ""
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:258
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr ""
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:263
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr ""
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:268
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr ""
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
+#: e2fsck/problem.c:273
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr ""
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
+#: e2fsck/problem.c:278
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr ""
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:283
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:288
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:293
 msgid "@j version not supported by this e2fsck.\n"
 msgstr ""
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
+#: e2fsck/problem.c:298
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -1004,7 +1032,7 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
+#: e2fsck/problem.c:303
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -1014,7 +1042,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:308
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1022,18 +1050,18 @@ msgid ""
 msgstr ""
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:314
 msgid "Run @j anyway"
 msgstr ""
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:319
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:324
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1041,25 +1069,25 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:330
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
 msgstr ""
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:336
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr ""
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:341
 msgid "Resize @i not valid.  "
 msgstr ""
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:346
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1067,60 +1095,60 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:351
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
 msgstr ""
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
+#: e2fsck/problem.c:356
 #, c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr ""
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:361
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
 msgstr ""
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:366
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr ""
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:371
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr ""
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:376
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr ""
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:381
 msgid "Last @g @b @B uninitialized.  "
 msgstr ""
 
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:386
 #, c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr ""
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:391
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr ""
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:396
 msgid ""
 "@S last mount time is in the future.\n"
 "\t(by less than a day, probably due to the hardware clock being incorrectly "
@@ -1130,7 +1158,7 @@ msgstr ""
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:402
 msgid ""
 "@S last write time is in the future.\n"
 "\t(by less than a day, probably due to the hardware clock being incorrectly "
@@ -1138,204 +1166,222 @@ msgid ""
 msgstr ""
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:408
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr ""
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:413
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr ""
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:418
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr ""
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:423
+msgid "Hiding %U @q @i %i (%Q).\n"
 msgstr ""
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:428
 msgid "@S has invalid MMP block.  "
 msgstr ""
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:433
 msgid "@S has invalid MMP magic.  "
 msgstr ""
 
-#: e2fsck/problem.c:433
+#: e2fsck/problem.c:438
 #, c-format
 msgid "ext2fs_open2: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:438
+#: e2fsck/problem.c:443
 #, c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr ""
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
+#: e2fsck/problem.c:449
 msgid ""
 "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
 "simultaneously."
 msgstr ""
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:455
+msgid "@S MMP @b checksum does not match.  "
 msgstr ""
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:460
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr ""
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:465
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr ""
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:470
 msgid "External @j @S checksum does not match @S.  "
 msgstr ""
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:475
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr ""
 
-#: e2fsck/problem.c:477
+#: e2fsck/problem.c:480
 #, c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr ""
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:485
 msgid "Bad required extra isize in @S (%N).  "
 msgstr ""
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:490
 msgid "Bad desired extra isize in @S (%N).  "
 msgstr ""
 
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:495
+msgid "Invalid %U @q @i %i.  "
+msgstr ""
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:500
+msgid "@S would have too many inodes (%N).\n"
+msgstr ""
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:505
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
+msgstr ""
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:513
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr ""
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:517
 msgid "@r is not a @d.  "
 msgstr ""
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:522
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr ""
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:527
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr ""
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:532
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr ""
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:537
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr ""
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:542
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr ""
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:547
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr ""
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:552
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr ""
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:557
 msgid "@g %g's @i table at %b @C.\n"
 msgstr ""
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:562
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr ""
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:567
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr ""
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:572
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr ""
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:577
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr ""
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:582
 msgid "@I %B (%b) in @i %i.  "
 msgstr ""
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:587
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr ""
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr ""
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Liikaa viallisia @bja @issa %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr ""
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:607
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr ""
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:612
 msgid "Duplicate or bad @b in use!\n"
 msgstr ""
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:617
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr ""
 
@@ -1343,7 +1389,7 @@ msgstr ""
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:622
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1353,7 +1399,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:629
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1362,7 +1408,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:634
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1370,121 +1416,121 @@ msgid ""
 msgstr ""
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:640
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr ""
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:645
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:651
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr ""
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:657
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:663
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:669
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr ""
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:674
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr ""
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:679
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr ""
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:684
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr ""
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:689
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr ""
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:694
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr ""
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:699 e2fsck/problem.c:1776
 msgid "@A @i @B (%N): %m\n"
 msgstr ""
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:704
 msgid "@A @b @B (%N): %m\n"
 msgstr ""
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:709
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr ""
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:714
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr ""
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
+#: e2fsck/problem.c:719
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr ""
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
+#: e2fsck/problem.c:724
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr ""
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:729
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:734
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
+#: e2fsck/problem.c:740
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr ""
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:748
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr ""
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:753
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1492,198 +1538,198 @@ msgid ""
 msgstr ""
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
+#: e2fsck/problem.c:759
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:769
 msgid "@j @i is not in use, but contains data.  "
 msgstr ""
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:774
 msgid "@j is not regular file.  "
 msgstr ""
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:779
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr ""
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:785
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:790
 msgid "@A refcount structure (%N): %m\n"
 msgstr ""
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:795
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr ""
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:800
 msgid "@i %i has a bad @a @b %b.  "
 msgstr ""
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:805
 msgid "Error reading @a @b %b (%m).  "
 msgstr ""
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:810
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr ""
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:815
 msgid "Error writing @a @b %b (%m).  "
 msgstr ""
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:820
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr ""
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:825
 msgid "@A @a region allocation structure.  "
 msgstr ""
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:830
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr ""
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:835
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr ""
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:840
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr ""
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
+#: e2fsck/problem.c:845
 #, c-format
 msgid "@i %i is too big.  "
 msgstr ""
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:849
 msgid "%B (%b) causes @d to be too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:854
 msgid "%B (%b) causes file to be too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:859
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr ""
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:864
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
+#: e2fsck/problem.c:869
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr ""
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
+#: e2fsck/problem.c:874
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr ""
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:879
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr ""
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
+#: e2fsck/problem.c:884
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr ""
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:889
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr ""
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:895
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
 msgstr ""
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
+#: e2fsck/problem.c:901
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr ""
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:906
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr ""
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:911
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr ""
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:916
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr ""
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:921
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr ""
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:926
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr ""
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:931
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr ""
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:936
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr ""
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
+#: e2fsck/problem.c:941
 #, c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr ""
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:946
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1691,7 +1737,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:952
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1699,116 +1745,116 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:957
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
+#: e2fsck/problem.c:962
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr ""
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
+#: e2fsck/problem.c:967
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr ""
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
+#: e2fsck/problem.c:972
 #, c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr ""
 
-#: e2fsck/problem.c:956
+#: e2fsck/problem.c:977
 #, c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr ""
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:982
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:986
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr ""
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
+#: e2fsck/problem.c:991
 #, c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr ""
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:996
+msgid "@q @i is not regular file.  "
 msgstr ""
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1001
 msgid "@q @i is not in use, but contains data.  "
 msgstr ""
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1006
 msgid "@q @i is visible to the user.  "
 msgstr ""
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1011
 msgid "The bad @b @i looks @n.  "
 msgstr ""
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1016
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
+#: e2fsck/problem.c:1021
 #, c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr ""
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
+#: e2fsck/problem.c:1026
 #, c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr ""
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
+#: e2fsck/problem.c:1031
 #, c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr ""
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1039
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1048
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
 msgstr ""
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1053
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1816,58 +1862,58 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1059
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
+#: e2fsck/problem.c:1064
 #, c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
+#: e2fsck/problem.c:1069
 #, c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
 msgstr ""
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
+#: e2fsck/problem.c:1076
 msgid ""
 "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
 msgstr ""
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1081
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr ""
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
+#: e2fsck/problem.c:1086
 #, c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr ""
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1091
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
+#: e2fsck/problem.c:1096
 #, c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
 msgstr ""
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
+#: e2fsck/problem.c:1102
 #, c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
@@ -1875,79 +1921,97 @@ msgid ""
 msgstr ""
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1108
 #, c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1113
 #, c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
 msgstr ""
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1128
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr ""
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1133
 msgid "@A @x region allocation structure.  "
 msgstr ""
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1138
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1143
 msgid "@A memory for encrypted @d list\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1148
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr ""
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1153
 #, c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr ""
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
+#: e2fsck/problem.c:1158
 #, c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr ""
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
+#: e2fsck/problem.c:1163
 #, c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr ""
 
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1168
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr ""
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1174
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr ""
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1179
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1187
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -1955,64 +2019,64 @@ msgid ""
 msgstr ""
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
+#: e2fsck/problem.c:1193
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr ""
 
-#: e2fsck/problem.c:1172
+#: e2fsck/problem.c:1208
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr ""
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
+#: e2fsck/problem.c:1213
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr ""
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
+#: e2fsck/problem.c:1218
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr ""
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1223 e2fsck/problem.c:1585
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1233
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1239
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr ""
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1244
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
 msgstr ""
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1250
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr ""
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1255
 msgid "\t<@f metadata>\n"
 msgstr ""
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1260
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2020,353 +2084,353 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1265
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1242
+#: e2fsck/problem.c:1278
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr ""
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1284
 #, fuzzy
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Vaihe 3A: Optimoidaan hakemistoja\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
+#: e2fsck/problem.c:1289
 #, c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr ""
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1294
 #, fuzzy
 msgid "Optimizing @x trees: "
 msgstr "Optimoidaan hakemistoja: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1309
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1314
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1319
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr ""
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1326
 msgid "Pass 2: Checking @d structure\n"
 msgstr ""
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1331
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1336
 msgid "@E has @n @i #: %Di.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1341
 msgid "@E has @D/unused @i %Di.  "
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1346
 msgid "@E @L to '.'  "
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1351
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1356
 msgid "@E @L to @d %P (%Di).\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1361
 msgid "@E @L to the @r.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1366
 msgid "@E has illegal characters in its name.\n"
 msgstr ""
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
+#: e2fsck/problem.c:1371
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr ""
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
+#: e2fsck/problem.c:1376
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr ""
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1381
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr ""
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1386
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr ""
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1391
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr ""
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1396
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr ""
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1401
+msgid "i_size_high @F %Id, @s zero.\n"
 msgstr ""
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1406
 msgid "i_frag @F %N, @s zero.\n"
 msgstr ""
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1411
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr ""
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1416
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr ""
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1421
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr ""
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1426
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr ""
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1431
 msgid "@d @i %i has an unallocated %B.  "
 msgstr ""
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
+#: e2fsck/problem.c:1436
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr ""
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
+#: e2fsck/problem.c:1441
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr ""
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1446
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr ""
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1451
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1456
 msgid "@E is duplicate '.' @e.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1461
 msgid "@E is duplicate '..' @e.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
+#: e2fsck/problem.c:1466 e2fsck/problem.c:1801
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1471
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr ""
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
+#: e2fsck/problem.c:1476
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr ""
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
+#: e2fsck/problem.c:1481
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr ""
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1486
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr ""
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1491
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr ""
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
+#: e2fsck/problem.c:1496
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr ""
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
+#: e2fsck/problem.c:1501
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr ""
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
+#: e2fsck/problem.c:1506
 #, c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr ""
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1511
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr ""
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1516
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr ""
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1521
 msgid "Setting filetype for @E to %N.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1526
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1531
 msgid "@E has filetype set.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1536
 msgid "@E has a @z name.\n"
 msgstr ""
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1541
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr ""
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1546
 msgid "@a @b @F @n (%If).\n"
 msgstr ""
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1551
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1556
 msgid "@p @h %d: %B not referenced\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1561
 msgid "@p @h %d: %B referenced twice\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1566
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1571
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr ""
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1576
 msgid "@n @h %d (%q).  "
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1580
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
+#: e2fsck/problem.c:1590
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1595
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1600
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1605
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1610
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr ""
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1615
 msgid "Duplicate @E found.  "
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1620
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2376,7 +2440,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1625
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2384,154 +2448,154 @@ msgid ""
 msgstr ""
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1630
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr ""
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1635
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1639
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1644
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr ""
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1649
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
+#: e2fsck/problem.c:1654
 #, c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
+#: e2fsck/problem.c:1659
 #, c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr ""
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1664
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr ""
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1669
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr ""
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1674
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr ""
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
+#: e2fsck/problem.c:1679
 #, c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr ""
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1684
 msgid "Encrypted @E is too short.\n"
 msgstr ""
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1691
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr ""
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1696
 msgid "@r not allocated.  "
 msgstr ""
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1701
 msgid "No room in @l @d.  "
 msgstr ""
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
+#: e2fsck/problem.c:1706
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr ""
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1711
 msgid "/@l not found.  "
 msgstr ""
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1716
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr ""
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1721
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr ""
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
+#: e2fsck/problem.c:1726
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1695
+#: e2fsck/problem.c:1731
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr ""
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
+#: e2fsck/problem.c:1736
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr ""
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
+#: e2fsck/problem.c:1741
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr ""
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
+#: e2fsck/problem.c:1746
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr ""
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
+#: e2fsck/problem.c:1751
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr ""
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
+#: e2fsck/problem.c:1756
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr ""
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
+#: e2fsck/problem.c:1761
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
+#: e2fsck/problem.c:1766
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2540,7 +2604,7 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
+#: e2fsck/problem.c:1771
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2548,41 +2612,41 @@ msgid ""
 msgstr ""
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
+#: e2fsck/problem.c:1781
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr ""
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
+#: e2fsck/problem.c:1786
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr ""
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1791
 msgid "@r is not a @d; aborting.\n"
 msgstr ""
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1796
 msgid "Cannot proceed without a @r.\n"
 msgstr ""
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
+#: e2fsck/problem.c:1806
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr ""
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1811
 msgid "/@l has inline data\n"
 msgstr ""
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1816
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2591,7 +2655,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1821
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2599,196 +2663,206 @@ msgid ""
 msgstr ""
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1826
 #, fuzzy
 msgid "/@l is encrypted\n"
 msgstr "Vedos (%s) on salattu\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1833
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Vaihe 3A: Optimoidaan hakemistoja\n"
 
-#: e2fsck/problem.c:1802
+#: e2fsck/problem.c:1838
 #, c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1843
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1848
 msgid "Optimizing directories: "
 msgstr "Optimoidaan hakemistoja: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1865
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Vaihe 4: Tarkastetaan viittausmääriä\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
+#: e2fsck/problem.c:1870
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr ""
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
+#: e2fsck/problem.c:1875
 #, c-format
 msgid "@u @i %i\n"
 msgstr ""
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1880
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr ""
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1884
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1891
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr ""
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1896
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:1903
 msgid "Pass 5: Checking @g summary information\n"
 msgstr ""
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:1908
 msgid "Padding at end of @i @B is not set. "
 msgstr ""
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:1913
 msgid "Padding at end of @b @B is not set. "
 msgstr ""
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:1918
 msgid "@b @B differences: "
 msgstr ""
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:1938
 msgid "@i @B differences: "
 msgstr ""
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:1958
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:1963
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:1968
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr ""
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:1973
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr ""
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:1978
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr ""
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
+#: e2fsck/problem.c:1983
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:1989
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr ""
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
+#: e2fsck/problem.c:1994
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr ""
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
+#: e2fsck/problem.c:1999
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr ""
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
+#: e2fsck/problem.c:2024
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
+#: e2fsck/problem.c:2029
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr ""
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
+#: e2fsck/problem.c:2034
 #, c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
+#: e2fsck/problem.c:2039
 #, c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2046
 msgid "Recreate @j"
 msgstr ""
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2051
 msgid "Update quota info for quota type %N"
 msgstr ""
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
+#: e2fsck/problem.c:2056
 #, c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2016
+#: e2fsck/problem.c:2061
 #, c-format
 msgid "Error writing file system info: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2021
+#: e2fsck/problem.c:2066
 #, c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2071
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2194
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr ""
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2320 e2fsck/problem.c:2324
 msgid "IGNORED"
 msgstr ""
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr ""
 
@@ -2810,21 +2884,21 @@ msgstr ""
 msgid "while doing inode scan"
 msgstr ""
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
+msgid "while calling ext2fs_block_iterate for inode %u"
 msgstr ""
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
 msgstr ""
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr ""
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr ""
 
@@ -2863,12 +2937,12 @@ msgid ""
 " -z undo_file         Create an undo file\n"
 msgstr ""
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:136
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %u/%u tiedostoa (%0d.%d %% epäjatkuvia), %llu/%llu lohkoa\n"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:162
 #, c-format
 msgid ""
 "\n"
@@ -2883,7 +2957,7 @@ msgstr[1] ""
 "\n"
 "%12u i-solmua käytetty (%2.2f %%, kokonaismäärä %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:166
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
@@ -2892,7 +2966,7 @@ msgstr[1] ""
 "%12u epäjatkuvaa tiedostoa (%0d.%d %%)\n"
 "\n"
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:171
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
@@ -2901,16 +2975,16 @@ msgstr[1] ""
 "%12u epäjatkuvaa hakemistoa (%0d.%d %%)\n"
 "\n"
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:176
 #, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr ""
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:184
 msgid "             Extent depth histogram: "
 msgstr ""
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:193
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
@@ -2919,21 +2993,21 @@ msgstr[1] ""
 "%12llu lohkoa käytetty (%2.2f %%, kokonaismäärä %llu)\n"
 "\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:197
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%12u viallinen lohko\n"
 msgstr[1] "%12u viallista lohkoa\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:199
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] "%12u suuri tiedosto\n"
 msgstr[1] "%12u suurta tiedostoa\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:201
 #, c-format
 msgid ""
 "\n"
@@ -2948,96 +3022,96 @@ msgstr[1] ""
 "\n"
 "%12u tavallista tiedostoa\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:203
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u hakemisto\n"
 msgstr[1] "%12u hakemistoa\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:205
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
 msgstr[0] "%12u merkkilaitetiedosto\n"
 msgstr[1] "%12u merkkilaitetiedostoa\n"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:208
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
 msgstr[0] "%12u lohkolaitetiedosto\n"
 msgstr[1] "%12u lohkolaitetiedostoa\n"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:210
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u fifo\n"
 msgstr[1] "%12u fifoa\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:212
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u linkki\n"
 msgstr[1] "%12u linkkiä\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:214
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u symbolinen linkki"
 msgstr[1] "%12u symbolista linkkiä"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:216
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%u nopea symbolinen linkki)\n"
 msgstr[1] " (%u nopeata symbolista linkkiä)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:220
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u pistoke\n"
 msgstr[1] "%12u pistoketta\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:224
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u tiedosto\n"
 msgstr[1] "%12u tiedostoa\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:237 misc/badblocks.c:1002 misc/tune2fs.c:3022 misc/util.c:126
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr ""
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:258
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Varoitus! %s on liitettynä.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:261
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Varoitus!  %s on käytössä.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:267
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s on liitettynä.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:269
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s on käytössä.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:271
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3045,7 +3119,7 @@ msgstr ""
 "Ei voida jatkaa, keskeytetään.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:273
 msgid ""
 "\n"
 "\n"
@@ -3059,145 +3133,165 @@ msgstr ""
 "***VAKAVIA*** vaurioita tiedostojärjestelmälle.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:278
 msgid "Do you really want to continue"
 msgstr "Haluatko varmasti jatkaa"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:280
 msgid "check aborted.\n"
 msgstr "tarkistus keskeytetty.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:374
 msgid " contains a file system with errors"
 msgstr ""
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:376
 msgid " was not cleanly unmounted"
 msgstr ""
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:378
 msgid " primary superblock features different from backup"
 msgstr ""
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:382
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr ""
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:389
 msgid " has filesystem last checked time in the future"
 msgstr ""
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:395
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr ""
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:403
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:409
 msgid ", check forced.\n"
 msgstr ""
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:442
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr ""
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:462
 msgid " (check deferred; on battery)"
 msgstr " (tarkistus lykätty; toimitaan akkuvirralla)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:465
 msgid " (check after next mount)"
 msgstr " (tarkistus seuraavan liittämiskerran jälkeen)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:467
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (tarkistus %ld liittämiskerran jälkeen)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:617
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr ""
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:688
 msgid "Invalid EA version.\n"
 msgstr ""
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:701
 msgid "Invalid readahead buffer size.\n"
 msgstr ""
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:750
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:758
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+
+#: e2fsck/unix.c:762
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr ""
+
+#: e2fsck/unix.c:771
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr ""
+
+#: e2fsck/unix.c:783
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:856
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:860
 msgid "Invalid completion information file descriptor"
 msgstr ""
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:875
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr ""
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:896
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr ""
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:927 e2fsck/unix.c:1005 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1741 misc/tune2fs.c:2036 misc/tune2fs.c:2054
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr ""
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:984
 msgid "The -n and -D options are incompatible."
 msgstr "Valitsimet -n ja -D ovat epäyhteensopivia."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:989
 msgid "The -n and -c options are incompatible."
 msgstr "Valitsimet -n ja -c ovat epäyhteensopivia."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:994
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Valitsimet -n ja -l/-L ovat epäyhteensopivia."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1018
 #, fuzzy
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Valitsimet -n ja -D ovat epäyhteensopivia."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1024
 #, fuzzy
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Valitsimet -n ja -D ovat epäyhteensopivia."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1088
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1135
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1144
 #, c-format
 msgid ""
 "\n"
@@ -3205,31 +3299,32 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1235
 #, c-format
 msgid ""
 "MMP interval is %u seconds and total wait time is %u seconds. Please "
 "wait...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1252 e2fsck/unix.c:1257
 msgid "while checking MMP block"
 msgstr ""
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1259
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1275
 #, fuzzy
 msgid "while reading MMP block"
 msgstr "luettaessa kirjanpidon superlohkoa"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1295 e2fsck/unix.c:1347 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2613 misc/mke2fs.c:2664 misc/tune2fs.c:2754
+#: misc/tune2fs.c:2799 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3240,154 +3335,159 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1336 misc/e2undo.c:270 misc/mke2fs.c:2653 misc/tune2fs.c:2788
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr ""
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1362 misc/mke2fs.c:2679 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr ""
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1405
 msgid "Error: ext2fs library version out of date!\n"
 msgstr ""
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1412
 msgid "while trying to initialize program"
 msgstr "ohjelman alustusta yritettäessä"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1435
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1447
 msgid "need terminal for interactive repairs"
 msgstr "vuorovaikutteisia korjauksia varten tarvitaan pääte"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1508
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1510
 msgid "Superblock invalid,"
 msgstr ""
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1511
 msgid "Group descriptors look bad..."
 msgstr ""
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1521
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr ""
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1525
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr ""
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1554
 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:1518
+#: e2fsck/unix.c:1561
 msgid "Could this be a zero-length partition?\n"
 msgstr "Voisiko tämä olla nollan pituinen osio?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1563
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr ""
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1569
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Mahdollisesti puuttuva laite tai sivutuslaite?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1571
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 "Tiedostojärjestelmä liitettynä tai toisen ohjelman poissulkevasti avaamana?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1575
 msgid "Possibly non-existent device?\n"
 msgstr "Mahdollisesti puuttuva laite?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1578
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1592
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1667
 msgid "Get a newer version of e2fsck!"
 msgstr "Hanki e2fsck:n uudempi versio!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1711
 #, fuzzy, c-format
 msgid "while checking journal for %s"
 msgstr "luettaessa kirjanpidon superlohkoa"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1714
 msgid "Cannot proceed with file system check"
 msgstr ""
 
-#: e2fsck/unix.c:1661
+#: e2fsck/unix.c:1725
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1737
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1743
 #, fuzzy, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Kirjanpidon superlohkoa ei löydy"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1747
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1751
 #, fuzzy, c-format
 msgid "while recovering journal of %s"
 msgstr "luettaessa kirjanpidon superlohkoa"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1773
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr ""
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1832
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr ""
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1835
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Tämä ei lupaa hyvää, mutta me yritämme jatkaa...\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1875
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Luodaan kirjanpito (%d lohkoa): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1885
 msgid " Done.\n"
 msgstr " Valmis.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1887
 #, fuzzy
 msgid ""
 "\n"
@@ -3396,24 +3496,38 @@ msgstr ""
 "\n"
 "*** kirjanpito luotiin uudelleen - tiedostojärjestelmä on jälleen ext3 ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1893
 msgid "aborted"
 msgstr "keskeytetty"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1895
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck peruutettu.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1922
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Aloitetaan e2fsck alusta...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1926
 msgid "while resetting context"
 msgstr ""
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:1985
+#, fuzzy, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** TIEDOSTOJÄRJESTELMÄÄ MUUTETTIIN *****\n"
+
+#: e2fsck/unix.c:1987
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr ""
+
+#: e2fsck/unix.c:1991 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3422,12 +3536,12 @@ msgstr ""
 "\n"
 "%s: ***** TIEDOSTOJÄRJESTELMÄÄ MUUTETTIIN *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:1996
 #, fuzzy, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** KÄYNNISTÄ LINUX UUDELLEEN *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2006 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3437,51 +3551,51 @@ msgstr ""
 "\n"
 "%s: ***** VAROITUS: Tiedostojärjestelmässä on edelleen virheitä *****\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "yYkK"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197
 msgid "nN"
 msgstr "nNeE"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr ""
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr ""
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<k>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<e>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (k/e)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "peruutettu!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr ""
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "kyllä\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "ei\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3490,7 +3604,7 @@ msgstr ""
 "%s? ei\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3499,39 +3613,39 @@ msgstr ""
 "%s? kyllä\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "kyllä"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "ei"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr ""
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr ""
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr ""
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 #, fuzzy
 msgid "writing block and inode bitmaps"
 msgstr "Kirjoitetaan i-solmutauluja: "
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr ""
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3544,233 +3658,233 @@ msgstr ""
 "%s: ODOTTAMATTOMIA RISTIRIITOJA - AJA fsck KÄSIN.\n"
 "\t(ilman valitsinta -a ja -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Muistia käytetty: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Muistia käytetty: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "aika: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "kulunut aika: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr ""
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr ""
 
-#: e2fsck/util.c:765
+#: e2fsck/util.c:792
 msgid ""
 "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
 "running.\n"
 msgstr ""
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "valmis                                               \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
-"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 ""
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr ""
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr ""
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr ""
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr ""
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Outo arvo (%ld) do_read-funktiossa\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr ""
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr ""
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr ""
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr ""
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr ""
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr ""
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr ""
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr ""
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr ""
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Luetaan ja verrataan: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr ""
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
 msgstr ""
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr ""
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:131
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s on liitetty - "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "badblocksin ajaminen ei ole turvallista!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:142
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr ""
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr ""
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr ""
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr ""
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr ""
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr ""
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr ""
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr ""
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr ""
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "viimeinen lohko"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "ensimmäinen lohko"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "virheellinen aloituslohko (%llu): oltava pienempi kuin %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "virheellinen lopetuslohko (%llu): oltava 32-bittinen arvo"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr ""
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr ""
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr ""
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr ""
@@ -3842,161 +3956,161 @@ msgstr ""
 msgid "Must use '-v', =, - or +\n"
 msgstr ""
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:79 misc/create_inode.c:118
 #, fuzzy, c-format
 msgid "while reading inode %u"
 msgstr "luettaessa juuren i-solmua"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:89 misc/create_inode.c:287 misc/create_inode.c:352
+#: misc/create_inode.c:390
 #, fuzzy
 msgid "while expanding directory"
 msgstr "/lost+foundia laajennettaessa"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:96
 #, fuzzy, c-format
 msgid "while linking \"%s\""
 msgstr "avattaessa tiedostoa %s"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:104 misc/create_inode.c:131 misc/create_inode.c:321
 #, fuzzy, c-format
 msgid "while writing inode %u"
 msgstr "luettaessa juuren i-solmua"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:151 misc/create_inode.c:175
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:162
 #, fuzzy, c-format
 msgid "while opening inode %u"
 msgstr "avattaessa tiedostoa %s"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:168 misc/create_inode.c:195 misc/create_inode.c:975
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 #, fuzzy
 msgid "while allocating memory"
 msgstr "puskuria varattaessa"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:188 misc/create_inode.c:204
 #, fuzzy, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "luettaessa juuren i-solmua"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:213
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr ""
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:223
 #, fuzzy, c-format
 msgid "while closing inode %u"
 msgstr "luettaessa juuren i-solmua"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:274
 #, fuzzy, c-format
 msgid "while allocating inode \"%s\""
 msgstr "puskuria varattaessa"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:293
 #, fuzzy, c-format
 msgid "while creating inode \"%s\""
 msgstr "luettaessa juuren i-solmua"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:359
 #, fuzzy, c-format
 msgid "while creating symlink \"%s\""
 msgstr "/lost+foundia luodessa"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:377 misc/create_inode.c:896
 #, fuzzy, c-format
 msgid "while looking up \"%s\""
 msgstr "/lost+foundia haettaessa"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:397
 #, fuzzy, c-format
 msgid "while creating directory \"%s\""
 msgstr "juurihakemistoa luodessa"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:625
 #, fuzzy, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "avattaessa tiedostoa %s"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:739
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:747
 #, fuzzy, c-format
 msgid "while opening directory \"%s\""
 msgstr "avattaessa tiedostoa %s"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:757
 #, c-format
 msgid "while lstat \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:808
 #, fuzzy, c-format
 msgid "while creating special file \"%s\""
 msgstr "Luodaan tavallinen tiedosto %s\n"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:817
 #, fuzzy
 msgid "malloc failed"
 msgstr "Muistinvaraus epäonnistui"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:825
 #, fuzzy, c-format
 msgid "while trying to read link \"%s\""
 msgstr ""
 "\n"
 "\tyritettäessä luoda kirjanpitotiedostoa"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:832
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr ""
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:843
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr ""
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:854
 #, fuzzy, c-format
 msgid "while writing file \"%s\""
 msgstr "avattaessa tiedostoa %s"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:867
 #, fuzzy, c-format
 msgid "while making dir \"%s\""
 msgstr "avattaessa tiedostoa %s"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:885
 #, fuzzy
 msgid "while changing directory"
 msgstr "juurihakemistoa luodessa"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:891
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:904
 #, fuzzy, c-format
 msgid "while setting inode for \"%s\""
 msgstr "juuri-i-solmun omistajuutta asetettaessa"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:911
 #, fuzzy, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "juuri-i-solmun omistajuutta asetettaessa"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:937
 #, fuzzy
 msgid "while saving inode data"
 msgstr "luettaessa juuren i-solmua"
@@ -4004,7 +4118,7 @@ msgstr "luettaessa juuren i-solmua"
 #: misc/dumpe2fs.c:56
 #, fuzzy, c-format
 msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+"Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
 msgstr "Käyttö: %s [-bfhixV] [-ob superlohko] [-oB lohkokoko] laite\n"
 
 #: misc/dumpe2fs.c:159
@@ -4115,94 +4229,55 @@ msgstr ""
 msgid "Bad blocks: %u"
 msgstr ""
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:367
 msgid "while reading journal inode"
 msgstr ""
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr ""
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "luettaessa kirjanpidon superlohkoa"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Kirjanpidon ominaisuudet:       "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Kirjanpidon koko:      "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr ""
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr ""
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
+#: misc/dumpe2fs.c:468
+#, fuzzy
+msgid "failed to alloc MMP buffer\n"
+msgstr "puskuria varattaessa"
 
-#: misc/dumpe2fs.c:514
-#, c-format
-msgid "Journal users:            %s\n"
-msgstr ""
+#: misc/dumpe2fs.c:479
+#, fuzzy, c-format
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "virhe luettaessa lohkoa %llu"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:798 misc/tune2fs.c:2073
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4216,48 +4291,45 @@ msgid ""
 "\tblocksize=<blocksize>\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1845
 #, c-format
 msgid "\tUsing %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
+#: misc/dumpe2fs.c:694 misc/e2image.c:1590 misc/tune2fs.c:2949
+#: resize/main.c:416
+msgid "Couldn't find valid filesystem superblock.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
-msgid "Couldn't find valid filesystem superblock.\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
+#: misc/dumpe2fs.c:747
+#, fuzzy, c-format
+msgid "while trying to read '%s' bitmaps\n"
 msgstr ""
+"\n"
+"\tyritettäessä luoda kirjanpitotiedostoa"
 
-#: misc/dumpe2fs.c:730
-#, c-format
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, fuzzy, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] device image-file\n"
 msgstr "Käyttö: %s [-RVadlv] [tiedostot...]\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:109
 #, fuzzy, c-format
 msgid "       %s -I device image-file\n"
 msgstr "Käyttö: %s [-RVadlv] [tiedostot...]\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:110
 #, c-format
 msgid ""
 "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
@@ -4266,177 +4338,177 @@ msgstr ""
 "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
 "[ dest_fs ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:175 misc/e2image.c:580 misc/e2image.c:586 misc/e2image.c:1185
 msgid "while allocating buffer"
 msgstr "puskuria varattaessa"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:180
 #, c-format
 msgid "Writing block %llu\n"
 msgstr ""
 
-#: misc/e2image.c:193
+#: misc/e2image.c:194
 #, c-format
 msgid "error writing block %llu"
 msgstr "virhe kirjoitettaessa lohkoa %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:197
 msgid "error in generic_write()"
 msgstr ""
 
-#: misc/e2image.c:213
+#: misc/e2image.c:214
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr ""
 
-#: misc/e2image.c:218
+#: misc/e2image.c:219
 msgid "Couldn't allocate header buffer\n"
 msgstr ""
 
-#: misc/e2image.c:246
+#: misc/e2image.c:247
 msgid "while writing superblock"
 msgstr ""
 
-#: misc/e2image.c:255
+#: misc/e2image.c:256
 msgid "while writing inode table"
 msgstr ""
 
-#: misc/e2image.c:263
+#: misc/e2image.c:264
 msgid "while writing block bitmap"
 msgstr ""
 
-#: misc/e2image.c:271
+#: misc/e2image.c:272
 msgid "while writing inode bitmap"
 msgstr ""
 
-#: misc/e2image.c:505
+#: misc/e2image.c:506
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr ""
 
-#: misc/e2image.c:517
+#: misc/e2image.c:518
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr ""
 
-#: misc/e2image.c:558
+#: misc/e2image.c:559
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu lohkoa (%d %%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:590 misc/e2image.c:630
 msgid "Copying "
 msgstr ""
 
-#: misc/e2image.c:626
+#: misc/e2image.c:627
 msgid ""
 "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr ""
 
-#: misc/e2image.c:652
+#: misc/e2image.c:653
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " %s jäljellä nopeudella %.2f Mt/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:665 misc/e2image.c:1195
 #, c-format
 msgid "error reading block %llu"
 msgstr "virhe luettaessa lohkoa %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:719
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "Kopioitu %llu / %llu lohkoa (%d %%) ajassa %s"
 
-#: misc/e2image.c:722
+#: misc/e2image.c:723
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "nopeudella %.2f Mt/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:759
 msgid "while allocating l1 table"
 msgstr ""
 
-#: misc/e2image.c:803
+#: misc/e2image.c:804
 msgid "while allocating l2 cache"
 msgstr ""
 
-#: misc/e2image.c:826
+#: misc/e2image.c:827
 msgid ""
 "Warning: There are still tables in the cache while putting the cache, data "
 "will be lost so the image may not be valid.\n"
 msgstr ""
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1152
 msgid "while allocating ext2_qcow2_image"
 msgstr ""
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1159
 msgid "while initializing ext2_qcow2_image"
 msgstr ""
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1218 misc/e2image.c:1236
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr ""
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1276
 msgid "while allocating block bitmap"
 msgstr ""
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1285
 msgid "while allocating scramble block bitmap"
 msgstr ""
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1292
 msgid "Scanning inodes...\n"
 msgstr "Tutkitaan i-solmuja...\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1304
 msgid "Can't allocate block buffer"
 msgstr ""
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1343 misc/e2image.c:1357
 #, c-format
 msgid "while iterating over inode %u"
 msgstr ""
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1389
 msgid "Raw and qcow2 images cannot be installed"
 msgstr ""
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1411
 msgid "error reading bitmaps"
 msgstr ""
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1423
 msgid "while opening device file"
 msgstr "avattaessa laitetiedostoa"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1434
 #, fuzzy
 msgid "while restoring the image table"
 msgstr "Laajennetaan i-solmutaulua"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1531
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr ""
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1537
 msgid "Offsets are only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1542
 msgid "Move mode is only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1547
 msgid "Move mode requires all data mode."
 msgstr ""
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1557
 msgid "checking if mounted"
 msgstr "tarkastetaan onko liitettynä"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1564
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4444,46 +4516,51 @@ msgid ""
 "Use -f option if you really want to do that.\n"
 msgstr ""
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1618
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr ""
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1624
 msgid "Can not stat output\n"
 msgstr ""
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1634
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "Vedos (%s) on tiivistetty\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1637
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "Vedos (%s) on salattu\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1640
+#, fuzzy, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Vedos (%s) on salattu\n"
+
+#: misc/e2image.c:1644
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr "yritettäessä muuntaa qcow2-vedosta (%s) raw-vedokseksi (%s)"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1654
 msgid "The -c option only supported in raw mode\n"
 msgstr ""
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1659
 msgid "The -c option not supported when writing to stdout\n"
 msgstr ""
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1666
 msgid "while allocating check_buf"
 msgstr ""
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1672
 msgid "The -p option only supported in raw mode\n"
 msgstr ""
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1682
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr ""
@@ -4513,7 +4590,7 @@ msgstr "e2label: virhe luettaessa superlohkoa\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: ei ole ext2-tiedostojärjestelmä\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3152
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Varoitus: nimiö on liian pitkä, katkaistaan.\n"
@@ -4528,166 +4605,168 @@ msgstr ""
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: virhe kirjoitettaessa superlohkoa\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1733
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Käyttö: e2label laite [uusi_nimiö]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, fuzzy, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+msgid ""
+"Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> "
+"<filesystem>\n"
 msgstr "Käyttö: %s <transaktiotiedosto> <tiedostojärjestelmä>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr ""
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 #, fuzzy
 msgid "while reading filesystem superblock."
 msgstr "luettaessa kirjanpidon superlohkoa"
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 #, fuzzy
 msgid "while fetching superblock"
 msgstr "luettaessa kirjanpidon superlohkoa"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr ""
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, fuzzy, c-format
 msgid "illegal offset - %s"
 msgstr "Virheellinen offset: %s\n"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr ""
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, fuzzy, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "avattaessa laitetiedostoa"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 #, fuzzy
 msgid "while reading undo file"
 msgstr "luettaessa juuren i-solmua"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, fuzzy, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: liian monta laitetta\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr ""
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr ""
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr ""
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr ""
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr ""
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, fuzzy, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "Varoitus! %s on liitettynä.\n"
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 #, fuzzy
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr "e2undoa tulee käyttää vain liittämättömälle tiedostojärjestelmälle\n"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, fuzzy, c-format
 msgid "while opening `%s'"
 msgstr "avattaessa tiedostoa %s"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr ""
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 #, fuzzy
 msgid "while reading keys"
 msgstr "luettaessa bittikarttoja"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr ""
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr ""
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, c-format
 msgid "%s: block %llu is too long."
 msgstr ""
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, fuzzy, c-format
 msgid "while fetching block %llu."
 msgstr "virhe kirjoitettaessa lohkoa %llu"
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr ""
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, fuzzy, c-format
 msgid "while writing block %llu."
 msgstr "virhe kirjoitettaessa lohkoa %llu"
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr ""
@@ -4761,131 +4840,131 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: ei löytynyt\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr ""
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr ""
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr ""
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr ""
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr ""
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
 msgstr ""
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr ""
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
 "number\n"
 msgstr ""
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr ""
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Tarkistetaan kaikki tiedostojärjestelmät.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr ""
 
-#: misc/fsck.c:1078
+#: misc/fsck.c:1085
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Käyttö: fsck [-AMNPRTV] [ -C [ fd ] ] [-t tiedjärjtyyppi] "
 "[tiedjärjvalitsimet] [tiedjärj ...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: liian monta laitetta\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: liian monta argumenttia\n"
 
-#: misc/fuse2fs.c:3745
+#: misc/fuse2fs.c:3739
 msgid "Mounting read-only.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3769
+#: misc/fuse2fs.c:3763
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3775 misc/fuse2fs.c:3789
 #, c-format
 msgid "%s: %s.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3776 misc/fuse2fs.c:3791 misc/tune2fs.c:3049
 #, fuzzy, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr ""
 "Aja ensin ”e2fsck -f %s”.\n"
 "\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3798
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3806
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3821
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3825
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3830
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3834
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3838
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr ""
 
@@ -4909,7 +4988,7 @@ msgstr "luettaessa juuren i-solmua"
 msgid "While reading version on %s"
 msgstr ""
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -4923,35 +5002,35 @@ msgid ""
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Ajetaan komento: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr ""
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr ""
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Keskeytetään...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -4959,92 +5038,97 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr ""
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+#, fuzzy
+msgid "while writing reserved inodes"
+msgstr "luettaessa juuren i-solmua"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Kirjoitetaan i-solmutauluja: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
 "Could not write %d blocks in inode table starting at %llu: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2726 misc/mke2fs.c:3131
 msgid "done                            \n"
 msgstr "valmis                          \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "juurihakemistoa luodessa"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "luettaessa juuren i-solmua"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "juuri-i-solmun omistajuutta asetettaessa"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "/lost+foundia luodessa"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "/lost+foundia haettaessa"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "/lost+foundia laajennettaessa"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr ""
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Muisti loppui tyhjennettäessä sektoreita %d-%d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Varoitus: ei voitu lukea lohkoa 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Varoitus: ei voitu tyhjentää sektoria %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr ""
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Nollataan kirjanpitolaite: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr ""
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr ""
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr ""
 "Luodaan %llu-lohkoinen tiedostojärjestelmä %dk lohkokoolla ja %u i-solmulla\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5054,154 +5138,159 @@ msgstr ""
 "\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Tiedostojärjestelmän nimiö=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Käyttöjärjestelmän tyyppi: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr ""
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr ""
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr ""
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr ""
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr ""
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu lohkoa (%2.2f %%) varattu pääkäyttäjälle\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr ""
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr ""
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr ""
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u lohkoryhmää\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u lohkoryhmä\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "Tiedostojärjestelmän UUID: %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Superlohkon varmuuskopiot tallennettu lohkoihin: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:820
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr ""
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:826
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr ""
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:839
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Virheellinen desc_size: ”%s”\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:853
+#, fuzzy, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Virheellinen uusi koko: %s\n"
+
+#: misc/mke2fs.c:865
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Virheellinen offset: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:879 misc/tune2fs.c:2101
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Virheellinen mmp_update_interval: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:896
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:918
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:933
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:956
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:963
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:987
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1013 misc/mke2fs.c:1022
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr ""
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1065
 #, c-format
 msgid ""
 "\n"
@@ -5228,7 +5317,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1090
 #, c-format
 msgid ""
 "\n"
@@ -5236,41 +5325,41 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1135
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1148 misc/tune2fs.c:1120
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1160 misc/tune2fs.c:411
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1296
 #, c-format
 msgid ""
 "\n"
 "Your mke2fs.conf file does not define the %s filesystem type.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1300
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1304
 msgid "Aborting...\n"
 msgstr "Keskeytetään...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1345
 #, c-format
 msgid ""
 "\n"
@@ -5278,155 +5367,155 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1527
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1564
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1597
 #, c-format
 msgid "invalid block size - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1601
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1617
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1630
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr ""
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1644 misc/tune2fs.c:1830
 #, c-format
 msgid "bad error behavior - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1656
 msgid "Illegal number for blocks per group"
 msgstr ""
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1661
 msgid "blocks per group must be multiple of 8"
 msgstr ""
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1669
 msgid "Illegal number for flex_bg size"
 msgstr ""
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1675
 msgid "flex_bg size must be a power of 2"
 msgstr ""
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1680
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr ""
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1690
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1700
 #, c-format
 msgid "invalid inode size - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1684
+#: misc/mke2fs.c:1713
 msgid ""
 "Warning: -K option is deprecated and should not be used anymore. Use '-E "
 "nodiscard' extended option instead!\n"
 msgstr ""
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1724
 msgid "in malloc for bad_blocks_filename"
 msgstr ""
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1733
 #, fuzzy, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr "Varoitus: nimiö on liian pitkä, katkaistaan.\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1742
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1757
 #, c-format
 msgid "bad num inodes - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1770
 #, fuzzy
 msgid "while allocating fs_feature string"
 msgstr "puskuria varattaessa"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1787
 #, c-format
 msgid "bad revision level - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1792
 #, c-format
 msgid "while trying to create revision %d"
 msgstr ""
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1806
 msgid "The -t option may only be used once"
 msgstr "Valitsinta -t voi käyttää vain kerran"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1814
 msgid "The -T option may only be used once"
 msgstr "Valitsinta -T voi käyttää vain kerran"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1870 misc/mke2fs.c:3215
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1876
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1882
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1893
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr ""
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1923
 msgid "filesystem"
 msgstr "tiedostojärjestelmä"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1941 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr ""
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1947
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
 msgstr ""
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1954
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5434,104 +5523,108 @@ msgid ""
 "\tto re-read your partition table.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:1971
 msgid "Filesystem larger than apparent device size."
 msgstr ""
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:1991
 msgid "Failed to parse fs types list\n"
 msgstr ""
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2040
 msgid "The HURD does not support the filetype feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2045
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2050
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2055
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr ""
+
+#: misc/mke2fs.c:2065
 msgid "while trying to determine hardware sector size"
 msgstr "yritettäessä määrittää laitteiston sektorikokoa"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2071
 msgid "while trying to determine physical sector size"
 msgstr "yritettäessä määrittää fyysistä sektorin kokoa"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2103
 msgid "while setting blocksize; too small for device\n"
 msgstr ""
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2132
 #, 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:2098
+#: misc/mke2fs.c:2144
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2166
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr ""
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2173
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2181
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2191
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2204
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr ""
 
-#: misc/mke2fs.c:2175
+#: misc/mke2fs.c:2221
 msgid ""
 "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
 "rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2241
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2247
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr ""
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2267
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "varoitus: Geometrian noutaminen laitteelle %s ei onnistu\n"
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2270
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2272
 #, c-format
 msgid ""
 "This may result in very poor performance, (re)-partitioning suggested.\n"
@@ -5539,25 +5632,25 @@ msgstr ""
 "Tämä voi johtaa hyvin huonoon suorituskykyyn, (uudelleen)osiointi on "
 "suositeltavaa.\n"
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2293
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2297
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2305
 #, c-format
 msgid ""
 "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
 "and journal checksum features.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2360
 #, c-format
 msgid ""
 "\n"
@@ -5567,17 +5660,22 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2375
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr ""
+
+#: misc/mke2fs.c:2397
 msgid "Can't support bigalloc feature without extents feature"
 msgstr ""
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2404
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2412
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5585,44 +5683,39 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2424
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2433
 msgid "blocks per group count out of range"
 msgstr ""
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2455
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2467
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "virheellinen i-solmun koko %d (väh. %d/enint. %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2482
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr ""
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2497
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr ""
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2504
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr ""
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2518
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5630,153 +5723,156 @@ msgid ""
 "\tor lower inode count (-N).\n"
 msgstr ""
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2705
 msgid "Discarding device blocks: "
 msgstr ""
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2721
 msgid "failed - "
 msgstr ""
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2780
 msgid "while initializing quota context"
 msgstr ""
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2787
 #, fuzzy
 msgid "while writing quota inodes"
 msgstr "luettaessa juuren i-solmua"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2812
 #, c-format
 msgid "bad error behavior in profile - %s"
 msgstr ""
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2888
+msgid "in malloc for android_sparse_params"
+msgstr ""
+
+#: misc/mke2fs.c:2902
 msgid "while setting up superblock"
 msgstr ""
 
-#: misc/mke2fs.c:2849
+#: misc/mke2fs.c:2918
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Pass -O extents to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2856
+#: misc/mke2fs.c:2925
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
+#: misc/mke2fs.c:2933
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:2957
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr ""
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3056
 #, c-format
 msgid "unknown os - %s"
 msgstr "tuntematon käyttöjärjestelmä - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3119
 msgid "Allocating group tables: "
 msgstr "Varataan ryhmätauluja: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3127
 msgid "while trying to allocate filesystem tables"
 msgstr ""
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3136
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
 msgstr ""
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3142
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr ""
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3183
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3196
 msgid "while reserving blocks for online resize"
 msgstr ""
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3208 misc/tune2fs.c:1538
 msgid "journal"
 msgstr ""
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3220
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr ""
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3227
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to add journal to device %s"
 msgstr ""
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3232 misc/mke2fs.c:3261 misc/mke2fs.c:3299
+#: misc/mk_hugefiles.c:598 misc/tune2fs.c:1567 misc/tune2fs.c:1586
 msgid "done\n"
 msgstr "valmis\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3238
 msgid "Skipping journal creation in super-only mode\n"
 msgstr ""
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3248
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr ""
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3257
 msgid ""
 "\n"
 "\twhile trying to create journal"
 msgstr ""
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3269 misc/tune2fs.c:1185
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3274
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3290
 msgid "Copying files into the device: "
 msgstr ""
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3296
 #, fuzzy
 msgid "while populating file system"
 msgstr "Tarkistetaan kaikki tiedostojärjestelmät.\n"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3303
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 
-#: misc/mke2fs.c:3230
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
+#: misc/mke2fs.c:3310
+#, fuzzy
+msgid "while writing out and closing file system"
+msgstr "Tarkistetaan kaikki tiedostojärjestelmät.\n"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3313
 msgid ""
 "done\n"
 "\n"
@@ -5784,22 +5880,27 @@ msgstr ""
 "valmis\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
+#, c-format
+msgid "while zeroing block %llu for hugefile"
+msgstr ""
+
+#: misc/mk_hugefiles.c:514
 #, c-format
 msgid ""
 "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:581
 msgid "Huge files will be zero'ed\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:582
 #, fuzzy, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "Luodaan tavallinen tiedosto %s\n"
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:584
 #, fuzzy, c-format
 msgid "with %llu blocks each"
 msgstr ""
@@ -5807,7 +5908,7 @@ msgstr ""
 "\n"
 "\n"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:593
 #, fuzzy, c-format
 msgid "while creating huge file %lu"
 msgstr "Laajennetaan i-solmutaulua"
@@ -5847,266 +5948,275 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr ""
 
 #: misc/tune2fs.c:119
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+
+#: misc/tune2fs.c:121
 #, fuzzy
 msgid "Please run e2fsck -f on the filesystem.\n"
 msgstr "Suorita e2fsck tiedostojärjestelmälle.\n"
 
-#: misc/tune2fs.c:121
+#: misc/tune2fs.c:123
 #, fuzzy
 msgid "Please run e2fsck -fD on the filesystem.\n"
 msgstr "Suorita e2fsck tiedostojärjestelmälle.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
 msgstr ""
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr ""
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr ""
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2845
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:297 misc/tune2fs.c:2856
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:321
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:330
 msgid "Journal removed\n"
 msgstr ""
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:374
 msgid "while reading bitmaps"
 msgstr "luettaessa bittikarttoja"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:382
 msgid "while clearing journal inode"
 msgstr ""
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:393
 msgid "while writing journal inode"
 msgstr ""
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:429 misc/tune2fs.c:452 misc/tune2fs.c:465
 msgid "(and reboot afterwards!)\n"
 msgstr "(ja uudelleenkäynnistys sen jälkeen!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:480
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr ""
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:483
 #, fuzzy, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr ""
 "Aja ensin ”e2fsck -f %s”.\n"
 "\n"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:487
 #, c-format
 msgid " -z \"%s\""
 msgstr ""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:489
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:491
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1087
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1123
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1129
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1138
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1146
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1164
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1177
 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:1082
+#: misc/tune2fs.c:1195
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1204
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1212
 msgid "Error while reading bitmaps\n"
 msgstr ""
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1221
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr ""
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1226
 msgid "while reading MMP block."
 msgstr ""
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1258
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1269
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1280
 msgid "Enabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1282
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1175
+#: misc/tune2fs.c:1288
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Re-run with -O extent to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1182
+#: misc/tune2fs.c:1295
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Run resize2fs -b to "
 "rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1321
 msgid "Disabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1323
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1386
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1396
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1426
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1447
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1465
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1483
 msgid ""
 "UUID has changed since enabling metadata_csum.  Filesystem must be "
 "unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1489
+msgid "Recalculating checksums could take some time."
+msgstr ""
+
+#: misc/tune2fs.c:1531
 msgid "The filesystem already has a journal.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1551
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to open journal on %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1555
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Luodaan kirjanpitoa laitteelle %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1563
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr ""
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1569
 msgid "Creating journal inode: "
 msgstr "Luodaan kirjanpito-i-solmu: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1583
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6114,26 +6224,31 @@ msgstr ""
 "\n"
 "\tyritettäessä luoda kirjanpitotiedostoa"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1621
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1634
 msgid "while initializing quota context in support library"
 msgstr ""
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1649
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr ""
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1657
 #, fuzzy, c-format
 msgid "while writing quota file (%d)"
 msgstr "juurihakemistoa luodessa"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1675
 #, fuzzy, c-format
 msgid "while removing quota file (%d)"
 msgstr "luettaessa juuren i-solmua"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1718
 msgid ""
 "\n"
 "Bad quota options specified.\n"
@@ -6147,65 +6262,65 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1776
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr ""
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1801 misc/tune2fs.c:1814
 #, c-format
 msgid "bad mounts count - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1857
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1890
 #, c-format
 msgid "bad interval - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1919
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1934
 msgid "-o may only be specified once"
 msgstr ""
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1943
 msgid "-O may only be specified once"
 msgstr ""
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1989
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:2006
 #, c-format
 msgid "bad inode size - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:2013
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr ""
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2110
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2115
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
 msgid_plural ""
@@ -6213,27 +6328,27 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2138
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2153
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2168
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2174
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2193
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6245,241 +6360,248 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2663
 msgid "Failed to read inode bitmap\n"
 msgstr ""
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2668
 msgid "Failed to read block bitmap\n"
 msgstr ""
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2685 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr ""
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2688
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr ""
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2694
 msgid "Not enough space to increase inode size \n"
 msgstr ""
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2699
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr ""
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2731
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
 msgstr ""
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2936
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+
+#: misc/tune2fs.c:2943
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2955
 #, fuzzy
 msgid "Cannot modify a journal device.\n"
 msgstr "Nollataan kirjanpitolaite: "
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2968
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2975
 msgid "Shrinking inode size is not supported\n"
 msgstr ""
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2980
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2986
 msgid "Resizing inodes could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3034
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+
+#: misc/tune2fs.c:3045
+#, c-format
+msgid "Recovering journal.\n"
+msgstr ""
+
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3074
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3079
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3084
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr ""
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3091
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr ""
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3098
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3104
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "varattujen lhkojen määrä on liian suuri (%llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3111
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3116
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3119
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3129
 #, c-format
 msgid ""
 "\n"
 "Sparse superblock flag set.  %s"
 msgstr ""
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3134
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3142
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3148
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3180
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr ""
 
-#: misc/tune2fs.c:3024
+#: misc/tune2fs.c:3198
 msgid ""
 "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3222
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3051
+#: misc/tune2fs.c:3225
 msgid ""
 "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
 "and re-run this command.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3060
+#: misc/tune2fs.c:3234
 msgid "Setting UUID on a checksummed filesystem could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3259
 msgid "Invalid UUID format\n"
 msgstr ""
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3275
 msgid "Need to update journal superblock.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3301
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3308
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3326
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3330
 msgid "Failed to change inode size\n"
 msgstr ""
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3344
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3349
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3356
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr ""
-
 #: misc/util.c:100
 msgid "<proceeding>\n"
 msgstr "<jatketaan>\n"
 
 #: misc/util.c:104
 #, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
 msgstr "Jatketaanko silti (vai odotetaanko %d sekuntia)? (k,e)"
 
 #: misc/util.c:108
@@ -6702,40 +6824,40 @@ msgstr ""
 #, c-format
 msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"[-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Laajennetaan i-solmutaulua"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr ""
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Tutkitaan i-solmutaulua"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Päivitetään i-solmuviittauksia"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Siirretään i-solmutaulua"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr ""
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr ""
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -6743,17 +6865,17 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "avattaessa tiedostoa %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr ""
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -6762,30 +6884,30 @@ msgstr ""
 "Aja ensin ”e2fsck -f %s”.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Tiedostojärjestelmän arvioitu vähimmäiskoko: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Virheellinen uusi koko: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "Uusi koko liian suuri ilmaistavaksi 32 bitillä\n"
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Uusi koko alle vähimmäiskoon (%llu)\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr ""
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -6793,82 +6915,82 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr ""
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
 msgid ""
 "Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
 "blocks.\n"
 msgstr ""
 
-#: resize/main.c:575
+#: resize/main.c:581
 #, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr ""
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
 msgid ""
 "Please enable the extents feature with tune2fs before enabling the 64bit "
 "feature.\n"
 msgstr ""
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr ""
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr ""
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr ""
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr ""
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr ""
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr ""
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
 "after the aborted resize operation.\n"
 msgstr ""
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr ""
@@ -6929,12 +7051,12 @@ msgstr ""
 msgid "While trying to extend the last group"
 msgstr ""
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr ""
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
 msgid ""
 "Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
@@ -6942,37 +7064,37 @@ msgid ""
 msgstr ""
 
 #: resize/resize2fs.c:759
-#, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr ""
+#, fuzzy, c-format
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "virheellinen aloituslohko (%llu): oltava pienempi kuin %llu"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "varatut lohkot"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr ""
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2475
 msgid "new meta blocks"
 msgstr ""
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2698
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2703
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2776
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:11
 #, fuzzy
-msgid "EXT2FS Library version 1.43.4-WIP"
+msgid "EXT2FS Library version 1.44.4"
 msgstr "EXT2FS-kirjaston versio 1.42.12"
 
 #: lib/ext2fs/ext2_err.c:12
@@ -7537,7 +7659,7 @@ msgid "MMP: device currently active"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
+msgid "MMP: e2fsck being run"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:152
@@ -7593,7 +7715,7 @@ msgid "Unknown checksum algorithm"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
+msgid "MMP block checksum does not match"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:166
@@ -7693,6 +7815,10 @@ msgstr "Ext2-superlohko on vioittunut"
 msgid "Inode is corrupted"
 msgstr ""
 
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
+
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
 msgstr ""
@@ -7892,6 +8018,12 @@ msgstr "Tarkistetaan kaikki tiedostojärjestelmät.\n"
 #~ "%s: e2fsck on käännetty ilman HTREE-tukea, mutta\n"
 #~ "\ttiedostojärjestelmä %s sisältää HTREE-hakemistoja.\n"
 
+#~ msgid "Journal features:        "
+#~ msgstr "Kirjanpidon ominaisuudet:       "
+
+#~ msgid "Journal size:             "
+#~ msgstr "Kirjanpidon koko:      "
+
 #~ msgid "%s is entire device, not just one partition!\n"
 #~ msgstr "%s on koko laite, ei vain yksi osio!\n"
 
index 623d29a..23db035 100644 (file)
Binary files a/po/fr.gmo and b/po/fr.gmo differ
index 5b8c98e..01fa8de 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -3,7 +3,7 @@
 # This file is distributed under the same license as the e2fsprogs package.
 # Copyright © 1996 Free Software Foundation, Inc.
 # Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
-# Samuel Thibault <samuel.thibault@ens-lyon.org>, 2006-2016.
+# Samuel Thibault <samuel.thibault@ens-lyon.org>, 2006-2018.
 #
 #. 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,
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -49,7 +56,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU e2fsprogs 1.43.1\n"
+"Project-Id-Version: GNU e2fsprogs 1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2016-06-13 22:49+0200\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2019-07-21 23:21+0200\n"
 "Last-Translator: Samuel Thibault <samuel.thibault@ens-lyon.org>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Bloc défectueux %u hors limite ; ignoré.\n"
@@ -94,11 +102,12 @@ msgstr "lors du contr
 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/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "lors de la tentative d'ouverture de %s"
@@ -108,10 +117,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:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 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"
@@ -124,6 +132,10 @@ msgstr ""
 "Avertissement : bloc illégal %u repéré dans l'i-noeud des blocs\n"
 "défectueux.  Effacé.\n"
 
+#: e2fsck/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "lors de la libération du fichier tdb dir_info"
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -192,21 +204,19 @@ msgstr "Utilisation
 #: 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 ""
-"Utilisation : %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:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, 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:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "lors de la tentative de vidange de %s"
@@ -216,11 +226,11 @@ msgstr "lors de la tentative de vidange de %s"
 msgid "while trying to open '%s'"
 msgstr "lors de la tentative d'ouverture de '%s'"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr "lors de l'ouverture de l'examen d'i-noeuds"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr "lors de l'obtention de l'i-noeud suivant"
 
@@ -229,362 +239,381 @@ msgstr "lors de l'obtention de l'i-noeud suivant"
 msgid "%u inodes scanned.\n"
 msgstr "%u i-noeuds examinés.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "lecture en cours du superbloc du journal\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s : aucun superbloc de journal valide n'a été trouvé\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s : journal trop court\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s : récupération du journal\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr ""
 "%s : aucune récupération du journal n'est possible tant qu'il est en\n"
 "lecture seule\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "lors de la tentative de ré-ouverture de %s"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "aattribut étendu"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Aerreur lors de l'allocation"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bbloc"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bbitmap"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "ccompress"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Cest en conflit avec des @bs d'autres systèmes de fichiers"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "drépertoire"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Deffacé"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "eentrée"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e « %Dn » dans %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "fsystème de fichiers"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fpour l'@i %i (%Q) est"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "ggroupe"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "h@i de @d d'HTREE"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "ii-noeud"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Iillégal"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jjournal"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Lest un lien"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mréclamé(s) plusieurs fois"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "ninvalide"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oorphelin"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pproblème avec"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qquota"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "r@i racine"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "sdevrait être"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssuper@b"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "unon attaché"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vpériphérique"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xextent"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "zde longueur zéro"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<L'i-noeud NUL>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<L'i-noeud des blocs défectueux>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<L'i-noeud de quota utilisateur>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<L'i-noeud de quota de groupe>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<L'i-noeud du chargeur d'amorce>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<L'i-noeud du répertoire de récupération de fichiers effacés>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<L'i-noeud descripteur de groupe>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<L'i-noeud de journal>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<L'i-noeud réservé 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<L'i-noeud réservé 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "fichier normal"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "répertoire"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "fichier de périphérique en mode caractère"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "fichier de périphérique en mode bloc"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "tube nommé"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "lien symbolique"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "socket"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "type de fichier inconnu avec un mode 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "bloc indirect"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "bloc doublement indirect"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "bloc triplement indirect"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "bloc de traduction"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "bloc n°"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "utilisateur"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "groupe"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr "projet"
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "type de quota inconnu"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "carte des i-noeuds réclamés plusieurs fois"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "erreur interne : ne peut trouver dup_blk pour %llu\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "retourné de clone_file_block"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, 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:939
+#: e2fsck/pass1b.c:988
 #, 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:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr "lors du hachage de l'entrée avec e_value_inum = %u"
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 msgid "reading directory block"
 msgstr "lecture des blocs de répertoire"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 msgid "in-use inode map"
 msgstr "carte des i-noeuds utilisés"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 msgid "directory inode map"
 msgstr "carte des i-noeuds de répertoires"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 msgid "regular file inode map"
 msgstr "carte des i-noeuds de fichiers normaux"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr "carte des blocs utilisés"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1263
 msgid "metadata block map"
 msgstr "carte des blocs de métadonnées"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 msgid "opening inode scan"
 msgstr "l'ouverture de l'examen des i-noeuds"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr "l'obtention de l'i-noeud suivant depuis l'examen"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 msgid "Pass 1"
 msgstr "Passe 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "lecture des blocs indirects de l'i-noeud %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 msgid "bad inode map"
 msgstr "carte des i-noeuds défectueux"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 msgid "inode in bad block map"
 msgstr "i-noeud dans la carte des blocs défectueux"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 msgid "imagic inode map"
 msgstr "carte d'i-noeuds magiques"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr "carte des blocs réclamés plusieurs fois"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr "carte des blocs d'attributs étendus"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu(%c) : %6lu attendu, obtenu phys %6lu (blkcnt %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 msgid "block bitmap"
 msgstr "bitmap de blocs"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 msgid "inode bitmap"
 msgstr "bitmap d'i-noeuds"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 msgid "inode table"
 msgstr "table d'i-noeuds"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Passe 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 msgid "Can not continue."
 msgstr "Ne peut continuer."
 
@@ -604,195 +633,203 @@ msgstr "Passe
 msgid "inode loop detection bitmap"
 msgstr "bitmap de détection des boucles d'i-noeuds"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Passe 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Passe 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr "check_inode_bitmap_checksum: Erreur d'allocation mémoire"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr "check_block_bitmap_checksum: Erreur d'allocation mémoire"
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 msgid "(no prompt)"
 msgstr "(pas d'invite)"
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 msgid "Fix"
 msgstr "Corriger"
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:54
 msgid "Clear"
 msgstr "Effacer"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr "Relocaliser"
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
 msgid "Allocate"
 msgstr "Allouer"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 msgid "Expand"
 msgstr "Étendre"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 msgid "Connect to /lost+found"
 msgstr "Connecter à /lost+found"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 msgid "Create"
 msgstr "Créer"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr "Récupérer"
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
 msgid "Truncate"
 msgstr "Tronquer"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 msgid "Clear inode"
 msgstr "Effacer l'i-noeud"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 msgid "Abort"
 msgstr "Arrêter"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 msgid "Split"
 msgstr "Scinder"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 msgid "Continue"
 msgstr "Continuer"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr "Cloner les blocs réclamés plusieurs fois"
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 msgid "Delete file"
 msgstr "Détruire le fichier"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 msgid "Suppress messages"
 msgstr "Supprimer les messages"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
 msgid "Unlink"
 msgstr "Délier"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 msgid "Clear HTree index"
 msgstr "Effacer l'index HTree"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 msgid "Recreate"
 msgstr "Recréer"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr "Optimiser"
+
+#: e2fsck/problem.c:81
 msgid "(NONE)"
 msgstr "(AUCUN)"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 msgid "FIXED"
 msgstr "CORRIGÉ"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 msgid "CLEARED"
 msgstr "EFFACÉ"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr "RELOCALISÉ"
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 msgid "ALLOCATED"
 msgstr "ALLOUÉ"
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr "ÉTENDU"
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr "RECONNECTÉ"
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 msgid "CREATED"
 msgstr "CRÉÉ"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr "RÉCUPÉRÉ"
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
 msgid "TRUNCATED"
 msgstr "TRONQUÉ"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 msgid "INODE CLEARED"
 msgstr "INODE EFFACÉ"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 msgid "ABORTED"
 msgstr "ARRÊTÉ"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 msgid "SPLIT"
 msgstr "SCINDÉ"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr "POURSUITE"
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr "BLOCS RÉCLAMÉS PLUSIEURS FOIS CLONÉS"
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 msgid "FILE DELETED"
 msgstr "FICHIER DÉTRUIT"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr "SUPPRIMÉ"
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr "DÉLIÉ"
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 msgid "HTREE INDEX CLEARED"
 msgstr "INDEX HTREE EFFACÉ"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 msgid "WILL RECREATE"
 msgstr "RECRÉERA"
 
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr "OPTIMISERA"
+
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:115
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "le @B de @bs pour le @g %g n'est pas dans le @g. (@b %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:119
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "le @B d'@is pour le @g %g n'est pas dans le @g. (@b %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -809,7 +846,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -835,7 +872,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -848,7 +885,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -859,18 +896,18 @@ msgstr ""
 "de la taille des @b.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "@S @bs_per_group = %b, aurait dû être %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "@S first_data_@b = %b, aurait dû être %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -878,8 +915,8 @@ msgstr ""
 "Le @f n'a pas d'UUID; on en génère un.\n"
 "\n"
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -898,48 +935,48 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Corruption repérée dans le @S. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:186
+#, no-c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Erreur lors de la détermination de la taille du @v physique : %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:191
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "le compteur d'@i dans le @S est %i, @s %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Le Hurd ne supporte pas la fonctionnalité filetype.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:201
+#, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "le @S a un @j @n (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr "Le @j externe a plusieurs utilisateurs de @f (non supporté).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:211
 msgid "Can't find external @j\n"
 msgstr "Ne peut trouver le @j externe\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 msgid "External @j has bad @S\n"
 msgstr "Le @j externe a un @S corrompu\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 msgid "External @j does not support this @f\n"
 msgstr "Le @j externe ne supporte pas ce @f\n"
 
@@ -947,11 +984,10 @@ msgstr "Le @j externe ne supporte pas ce @f\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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"
@@ -960,88 +996,81 @@ msgstr ""
 "Il est aussi possible que le @S du @j soit corrompu.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:235
 msgid "@j @S is corrupt.\n"
 msgstr "Le @S du @j est corrompu.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "Le drapeau has_@j du @S n'est pas activé, mais un @j est présent.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr "Le @S a le drapeau needs_recovery activé, mais n'a pas de de @j.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:250
 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:246
+#: e2fsck/problem.c:255
 msgid "Clear @j"
 msgstr "Effacer le @j"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 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:256
+#: e2fsck/problem.c:265
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s l'@i @o %i (uid=%Iu, gid=%Ig, mode=%Im, taille=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:270
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "%B (%b) @I repéré dans l'@i @o %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:275
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Déjà effaçé le %B (%b) repéré dans l'@i @o %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:281
+#, no-c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@i @o %i @I dans le @S.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:287
+#, no-c-format
 msgid "@I @i %i in @o @i list.\n"
 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:281
+#: e2fsck/problem.c:292
 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:286
+#: e2fsck/problem.c:297
 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:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "cette version de @j n'est pas supportée par cet e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:308
+#, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1051,8 +1080,8 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:314
+#, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1063,7 +1092,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1074,20 +1103,18 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 msgid "Run @j anyway"
 msgstr "Exécuter quand même le @j"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 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
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1097,7 +1124,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1106,20 +1133,18 @@ msgstr ""
 "est %N ; @s zéro. "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 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:338
+#: e2fsck/problem.c:352
 msgid "Resize @i not valid.  "
 msgstr "L'@i de changement de taille n'est pas valide. "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1129,7 +1154,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1138,14 +1163,14 @@ msgstr ""
 "\tmaintenant = %T) est dans le futur.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:368
+#, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "L'indication du @S pour le @S externe @s %X. "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1154,280 +1179,284 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "Le checksum du descripteur de @g %g est %04x, devrait être %04y. "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr ""
 "Le descripteur de @g %g est marqué comme non initialisé alors que la\n"
 "fonctionnalité n'est pas activée.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:389
 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:377
+#: e2fsck/problem.c:394
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Le @B de @b du dernier @g n'est pas initialisé. "
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-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:386
+#: e2fsck/problem.c:405
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "Le drapeau test_fs est positionné (et ext4 est disponible). "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 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)\n"
+"\t(de moins d'un jour, probablement à cause d'une horloge matérielle mal configurée)\n"
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 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)\n"
+"\t(de moins d'un jour, probablement à cause d'une horloge matérielle mal configurée)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 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:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Définition du compteur d'@is libres à %j (était %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Définition du compteur des @bs libres à %c (était %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr "Dissimulation de l'@i de @q %i (%Q).\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "Dissimulation de %U @i de @q %i (%Q).\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 msgid "@S has invalid MMP block.  "
 msgstr "Le @S a un @b MMP invalide. "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
 msgid "@S has invalid MMP magic.  "
 msgstr "@S a un numéro magique MMP invalide. "
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:453
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2: %m\n"
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:459
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "exet2fs_check_desc: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
-msgstr ""
-"Le metadata_csum du @S annule uninit_bg ; les deux bits de fonctionalités ne "
-"peuvent être positionnés simultanément."
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "Le metadata_csum du @S annule uninit_bg ; les deux bits de fonctionalités ne peuvent être positionnés simultanément."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "La somme de contrôle du bloc MMP du @S ne correspond pas au bloc MMP. "
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+msgid "@S MMP @b checksum does not match.  "
+msgstr "La somme de contrôle du @b MMP du @S ne correspond. "
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
-msgstr ""
-"Le superbloc d'un système de fichier 64bit a besoin des extents pour accéder "
-"à l'ensemble du disque. "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
+msgstr "Le superbloc d'un @f 64bit a besoin des extents pour accéder à l'ensemble du disque. "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "First_meta_bg est trop grand. (%N, valeur maximum %g). "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:486
 msgid "External @j @S checksum does not match @S.  "
 msgstr "La somme de contrôle du @S du @j externe ne correspond pas au @S"
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr "Le metadata_csum_seed du @S n'est pas nécessaire sans metadata_csum."
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
-msgstr ""
-"Erreur lors de l'initialisation du contexte de quota dans la bibliothèque "
-"support: %m\n"
+msgstr "Erreur lors de l'initialisation du contexte de quota dans la bibliothèque support: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Extra isize requis invalide dans le @S (%N). "
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Extra isize désiré invalide dans le @S (%N). "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "%U @i de @q %i invalide. "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr "Le @S aurait trop d'i-noeuds (%N).\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
+"Les fonctionnalités resize_inode et meta_bg sont activées. Ces fonctionnalités\n"
+"ne sont pas compatibles. resize_inode devrait être désactivée. "
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Passe 1 : vérification des @is, des @bs et des tailles\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 msgid "@r is not a @d.  "
 msgstr "l'@r n'est pas un @d. "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "l'@r a un dtime (probablement en raison d'un vieux mke2fs). "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:544
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "l'@i réservé %i (%Q) a un mode @n. "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:550
+#, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "l'@i @D %i a un dtime nul. "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "l'@i %i est utilisé, mais a un dtime. "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:562
+#, no-c-format
 msgid "@i %i is a @z @d.  "
 msgstr "l'@i %i est un @d @z. "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:567
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "le @B de @bs du @g %g à %b @C.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:572
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "le @B d'@is du @g %g à %b @C.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:577
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "la table d'@is du @g %g à %b @C.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:582
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "le @B (%b) de @bs du @g %g's est corrompu. "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "le @B (%b) d'@is du @g %g's est corrompu. "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size est %Is, @s %N. "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_@bs est %Ib, @s %N. "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in @i %i.  "
 msgstr "%B (%b) @I dans l'@i %i. "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "le %B (%b) chevauche les métadonnées de @f dans l'@i %i. "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:613
+#, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "l'@i %i a un(des) @b(s) illégal(aux). "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Trop de @bs illégaux dans l'@i %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "%B (%b) @I dans l'@i des @b défectueux. "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "L'@i des @bs défectueux a un(des) @b(s) illégal(aux). "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr "@b dupliqué ou défectueux actuellement utilisé !\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 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
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1441,7 +1470,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1452,7 +1481,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1463,132 +1492,122 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Le @S primaire (%b) est sur la liste des @bs défectueux.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:667
 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:632
+#: e2fsck/problem.c:673
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Avertissement : le @S (%b) du @g %g est corrompu.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:679
 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:643
+#: e2fsck/problem.c:685
 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:649
+#: e2fsck/problem.c:691
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A de %N @b(s) contigus dans le @g de @b %g pour %s : %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
-#, c-format
+#: e2fsck/problem.c:697
+#, no-c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A d'un tampon de @b pour la relocalisation de %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:702
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Relocalisation du %s du @g %g de %b vers %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
-#, c-format
+#: e2fsck/problem.c:708
+#, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Relocalisation pour le @g %g du %s vers %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Avertissement : impossible de lire le @b %b de %s : %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:718
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Avertissement : impossible d'écrire le @b %b pour %s : %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
 msgstr "@A du @B d'@is (%N) : %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
 msgstr "@A du @B de @bs (%N) : %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:734
+#, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A de l'information du compteur de liens : %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:740
+#, no-c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A du tableau des @bs de @ds : %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:746
+#, no-c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Erreur lors de l'examen des @is (%i) : %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Erreur lors de la boucle d'itération sur les @bs dans l'@i %i : %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:757
 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:714
+#: e2fsck/problem.c:762
 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:720
-#, c-format
+#: e2fsck/problem.c:769
+#, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Erreur lors de la lecture de l'@i %i : %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "l'@i %i a un drapeau imagic activé. "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
@@ -1597,203 +1616,198 @@ msgstr ""
 "immutable ou append-only activé. "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "L'@i spécial (@v/socket/fifo) %i a une taille non nulle. "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
 msgid "@j @i is not in use, but contains data.  "
 msgstr "l'@i de @j n'est pas utilisé mais contient des données. "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 msgid "@j is not regular file.  "
 msgstr "le @j n'est pas un fichier normal. "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:812
+#, no-c-format
 msgid "@i %i was part of the @o @i list.  "
 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:765
+#: e2fsck/problem.c:818
 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:770
+#: e2fsck/problem.c:823
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A d'une structure de comptage de références (%N) : %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:828
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Erreur lors de la lecture du @b %b d'@a pour l'@i %i. "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:833
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "l'@i %i a un mauvais @b %b d'@a. "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Erreur de lecture du @b %b d'@a (%m). "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:843
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "le @b %b d'@a a un compteur de référence %r, @s %N. "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:848
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Erreur d'écriture du @b %b d'@a (%m). "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:853
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "le @b %b d'@a a h_blocks > 1. "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:858
 msgid "@A @a region allocation structure.  "
 msgstr "@A d'une structure d'allocation de région d'@a. "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "le @b %b d'@a est corrompu (collision d'allocation). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:868
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "le @b %b d'@a est corrompu (nom @n). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "le @b %b d'@a est corrompu (valeur @n). "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:879
+#, no-c-format
 msgid "@i %i is too big.  "
 msgstr "l'@i %i est trop grand. "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "le %B (%b) rend le @d trop grand. "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr "le %B (%b) rend le fichier trop grand. "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "le %B (%b) rend le lien symbolique trop grand. "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-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:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "l'@i %i a le drapeau INDEX_FL activé mais n'est pas un @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:911
+#, no-c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "l'@h %i a un noeud root @n.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:916
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "l'@h %i dispose d'une version de hachage non supportée (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "l'@h %i utilise un drapeau de noeud root incompatible.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:927
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "l'@h %i a une hauteur d'arbre (%N) qui est trop grande\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 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:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "La (re-)création de l'@i de changement de taille a échoué : %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "l'@i %i a une taille extra (%IS) qui est @n\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:950
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "l'@a dans l'@i %i a une longueur de nom (%N) qui est @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:955
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "l'@a dans l'@i %i a une valeur de décalage (%N) qui est @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:960
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "l'@a dans l'@i %i a un @b de valeur (%N) qui est @n (doit être 0)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:965
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "l'@a dans l'@i %i a une valeur de taille (%N) qui est @n\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:970
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "l'@a dans l'@i %i a un hachage (%N) qui est @n\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:975
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "l'@i %i est un %It mais il semble qu'il soit en fait un répertoire.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
-#, c-format
+#: e2fsck/problem.c:981
+#, no-c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Erreur lors de l'itération sur l'arbre d'@xs dans l'@i %i : %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1803,7 +1817,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1813,7 +1827,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1822,33 +1836,31 @@ msgstr ""
 "\t(@b logique %c, @b physique %b, longueur @n %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-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:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-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:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "L'@i %i n'a pas le drapeau EXTENT_FL, mais a un format d'extent\n"
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "Le fast symlink %i a le drapeau EXTENT_FL activé. "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1857,39 +1869,39 @@ msgstr ""
 "\t(@b logique @n %c, @b physique %b, longueur %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1030
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "L'@i %i a un noeud d'extent invalide (blk %b, lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1036
+#, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Erreur lors de la conversion du @B de @b de sous-cluster : %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not regular file.  "
 msgstr "L'@i de @q n'est pas un fichier normal. "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
 msgid "@q @i is not in use, but contains data.  "
 msgstr "L'@i de @q n'est pas utilisé mais contient des données. "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 msgid "@q @i is visible to the user.  "
 msgstr "L'@i de @q est visible par l'utilisateur. "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 msgid "The bad @b @i looks @n.  "
 msgstr "L'@i des @bs défectueux a l'air @n. "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1898,57 +1910,51 @@ msgstr ""
 "\t(@b logique @n %c, @b physique %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, c-format
+#: e2fsck/problem.c:1067
+#, no-c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "l'@i %i semble contenir des données incorrectes. "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
-msgstr ""
-"L'@i %i passe les vérifications, mais la somme de contrôle ne correspond pas "
-"à l'@i. "
+msgstr "L'@i %i passe les vérifications, mais la somme de contrôle ne correspond pas à l'@i. "
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "L'@ de l'@i %i est corrompu (collision d'allocation). "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"Le bloc d'extent de l'@i %i passe les vérifications, mais la somme de "
-"contrôle ne correspond pas à l'extent\n"
+"Le bloc d'extent de l'@i %i passe les vérifications, mais la somme de contrôle ne correspond pas à l'extent\n"
 "\t(@b logique %c, @b physique %b, longueur %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
-msgstr ""
-"Le @b d'@a de l'@i %i passe les vérifications, mais la somme de contrôle ne "
-"correspond pas au @b. "
+msgstr "Le @b d'@a de l'@i %i passe les vérifications, mais la somme de contrôle ne correspond pas au @b. "
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
 msgstr ""
 "Extent intérieur de niveau de noeud %N de l'i-noeud %i:\n"
-"Le début logique %b ne correspond pas au début logique %c du niveau "
-"suivant.  "
+"Le début logique %b ne correspond pas au début logique %c du niveau suivant.  "
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1957,62 +1963,54 @@ msgstr ""
 "\t(@b logique %c, @b physique %b, longueur %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
-msgstr ""
-"L'@i %i a des données en ligne, mais le @S n'a pas la fonctionnalité "
-"INLINE_DATA\n"
+msgstr "L'@i %i a des données en ligne, mais le @S n'a pas la fonctionnalité INLINE_DATA\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
-msgstr ""
-"L'@i %i a le drapeau INLINE_DATA_FL activé sur le @f sans support des "
-"données en ligne.\n"
+msgstr "L'@i %i a le drapeau INLINE_DATA_FL activé sur le @f sans support des données en ligne.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
-msgstr ""
-"Le bloc %b de l'@i %i conflicte avec des meta-données critiques, saute les "
-"vérifications du bloc.\n"
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+msgstr "Le bloc %b de l'@i %i conflicte avec des meta-données critiques, saute les vérifications du bloc.\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "@i de @d %i a un mauvais @b %b d'@a. "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1138
+#, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "L'@i de @d %i a un @x marqué non initialisé au @b %c. "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
-"L'@i %i @b logique %b (@b physique %c) viole les règles d'allocation de "
-"cluster.\n"
+"L'@i %i @b logique %b (@b physique %c) viole les règles d'allocation de cluster.\n"
 "Sera corrigé pendant la passe 1B.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
-msgstr ""
-"L'@i %i a le drapeau INLINE_DATA_FL activé mais l'@a n'a pas été trouvé. "
+msgstr "L'@i %i a le drapeau INLINE_DATA_FL activé mais l'@a n'a pas été trouvé. "
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
@@ -2021,52 +2019,42 @@ msgstr ""
 "extents ou inline-data. "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
-msgstr ""
-"L'@i %i a un en-tête d'@x mais le drapeau de données en ligne est "
-"positionné.\n"
+msgstr "L'@i %i a un en-tête d'@x mais le drapeau de données en ligne est positionné.\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
-msgstr ""
-"L'@i %i semble avec des données en ligne mais le drapeau d'@x est "
-"positionné.\n"
+msgstr "L'@i %i semble avec des données en ligne mais le drapeau d'@x est positionné.\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
-msgstr ""
-"L'@i %i semble avoir une carte de @b mais les drapeaux de données en ligne "
-"et d'@x sont positionnés.\n"
+msgstr "L'@i %i semble avoir une carte de @b mais les drapeaux de données en ligne et d'@x sont positionnés.\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
-msgstr ""
-"L'@i %i a des données en ligne et le drapeau d'@x positionné mais l'i_block "
-"contient des déchets.\n"
+msgstr "L'@i %i a des données en ligne et le drapeau d'@x positionné mais l'i_block contient des déchets.\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
-msgstr ""
-"La liste des blocs défectueux indique que la liste de blocs défectueux %i "
-"est défectueuse. "
+msgstr "La liste des blocs défectueux indique que la liste de blocs défectueux %i est défectueuse. "
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1191
 msgid "@A @x region allocation structure.  "
 msgstr "@A d'une structure d'allocation de région d'@x. "
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -2075,92 +2063,107 @@ msgstr ""
 "\t(@b logique %c, @b physique @n %b, longueur %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
 msgid "@A memory for encrypted @d list\n"
 msgstr "@A de mémoire pour la liste des @d chiffrés\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
-msgstr ""
-"L'arbre d'@x de l'i-noeud @i pourrait être moins profond (%b ; pourrait être "
-"<= %c)\n"
+msgstr "L'arbre d'@x de l'i-noeud @i pourrait être moins profond (%b ; pourrait être <= %c)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr "L'@i %i sur le @f bigalloc ne peut pas être projeté sur un @b. "
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, c-format
+#: e2fsck/problem.c:1218
+#, no-c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "L'@i %i a un en-tête d'@x corrompu. "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
+msgstr "Les horodatages sur l'@i %i au-delà du 04/04/2310 sont probablement pré-1970.\n"
+
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "l'@i %i a une valeur d'@a @i %N @I.\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "l'@i %i un @a @n. L'@i EA %N n'a pas le drapeau EA_INODE.\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
 msgstr ""
-"Les horodatages sur l'@i %i au-delà du 04/04/2310 sont probablement "
-"pré-1970.\n"
+"il manque à l'@i EA %N pour l'l@i parent %i le drapeau EA_INODE.\n"
+" "
 
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
 "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:
-#: e2fsck/problem.c:1157
-#, c-format
+#: e2fsck/problem.c:1255
+#, no-c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "@b(s) @m dans l'@i %i :"
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1271
+#, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Erreur lors de l'examen des i-noeuds (%i) : %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A du @B d'@is (i_node_dup_map) : %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Erreur lors des itérations sur les @bs dans l'@i %i (%s) : %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr "Erreur d'ajustement de refcount pour le @b %b d'@a (@i %i) : %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1298
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Passe 1C : examen des répertoires pour les @is avec des @bs @m\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Passe 1D : ajustement des @bs @m\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2169,18 +2172,18 @@ msgstr ""
 "  a %r @b(s) @m, partagés avec %N fichier(s) :\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i n°%i, date de modification %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
 msgid "\t<@f metadata>\n"
 msgstr "\t<métadonnée du @f>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2190,7 +2193,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2198,349 +2201,345 @@ msgstr ""
 "@bs @m déjà été réassignés ou clonés.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1344
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "N'a pu cloner le fichier : %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1350
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Passe 1E : Optimisation des arbres d'@x\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, c-format
+#: e2fsck/problem.c:1356
+#, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Échec d'optimisation de l'arbre d'@x %p (%i) : %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1361
 msgid "Optimizing @x trees: "
 msgstr "Optimisation des arbres d'@x : "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
-msgstr ""
-"Erreur interne: la largeur maximale de l'arbre d'extents est trop grande "
-"(%b ; attendu=%c).\n"
+msgstr "Erreur interne: la largeur maximale de l'arbre d'extents est trop grande (%b ; attendu=%c).\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr "L'arbre d'@x de l'@i %i (au niveau %b) pourrait être plus court. "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr "L'arbre d'@x de l'@i %i (au niveau %b) pourrait être plus étroit. "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Passe 2 : vérification de la structure des @ds\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1399
+#, no-c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Numéro d'@i @n pour « . » dans l'@i de @d %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1404
 msgid "@E has @n @i #: %Di.\n"
 msgstr "L'@E a un n° d'@i @n : %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1409
 msgid "@E has @D/unused @i %Di.  "
 msgstr "L'@E a un @i @D/non utilisé %Di. "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1414
 msgid "@E @L to '.'  "
 msgstr "L'@E @L vers « . » "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1419
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "L'@E pointe vers l'@i (%Di) localisé dans un @b défectueux.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1424
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "L'@E @L vers le @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1429
 msgid "@E @L to the @r.\n"
 msgstr "L'@E @L vers l'@r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
 msgstr "L'@E a un caractère illégal dans son nom.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, c-format
+#: e2fsck/problem.c:1440
+#, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "« . » manquant dans l'@i de @d %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1446
+#, no-c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "« .. » manquant dans l'@i de @d %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1451
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "La première @e « %Dn » (@i=%Di) dans l'@i de @d %i (%p) @s « . »\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1456
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "La seconde @e « %Dn » (@i=%Di) dans l'@i de @d %i @s « .. »\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr @F %IF, @s zéro.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1466
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl @F %If, @s zéro.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl @F %Id, @s zéro.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_size_high @F %Id, @s zéro.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N, @s zéro.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N, @s zéro.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "L'@i %i (%Q) a un mode @n (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1491
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "@i de @d %i, %B, déplacement %N : @d corrompu\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "@i de @d %i, %B, déplacement %N : nom de fichier trop long\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "L'@i de @d %i a un %B non alloué. "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "L'@e de @d « . » dans l'@i de @d %i n'est pas terminée pas un NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "L'@e de @d « .. » dans l'@i de @d %i n'est pas terminée pas un NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "L'@i %i (%Q) est un @v de caractère @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "L'@i %i (%Q) est un @v de @b @I.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "L'@E est un doublon de l'@e « . ».\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "L'@E est un doublon de l'@e « .. ».\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Erreur interne : impossible de trouver dir_info pour %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "L'@E a un rec_len de %Dr, @s %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, c-format
+#: e2fsck/problem.c:1550
+#, no-c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A d'une structure icount : %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Erreur d'itération sur les @bs de @d : %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Erreur de lecture du @b %b de @d (@i %i) : %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Erreur d'écriture du @b %b de @d (@i %i) : %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A d'un nouveau @b de @d pour l'@i %i (%s) : %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Erreur lors de la désallocation de l'@i %i : %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1584
+#, no-c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "L'@e de @d pour « . » dans %p (%i) est grande.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "L'@i %i (%Q) est un FIFO @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "L'@i %i (%Q) est une socket @I.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Définition du type de fichier pour l'@E à %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1604
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "L'@E a un type de fichier incorrect (était %Dt, @s %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 msgstr "L'@E a un type de fichier initialisé.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "L'@E a un nom @z.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Le lien symbolique %Q (@i n°%i) est @n.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1624
 msgid "@a @b @F @n (%If).\n"
 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:1515
+#: e2fsck/problem.c:1629
 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:1520
+#: e2fsck/problem.c:1634
 msgid "@p @h %d: %B not referenced\n"
 msgstr "@p l'@h %d : %B n'est pas référencé\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "@p l'@h %d : %B est référencé deux fois\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1644
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "@p l'@h %d : %B a un hachage mininal erroné\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1649
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "@p l'@h %d : %B a un hachage maximal erroné\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
 msgstr "@h %d @n (%q). "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p l'@h %d (%q) : numéro de @b %b erroné.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p l'@h %d : le noeud root est @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1674
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "@p l'@h %d : %B a une limite @n (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1679
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "@p l'@h %d : %B a un compteur @n (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1684
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "@p l'@h %d : %B a une table de hachage non ordonnée\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1689
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "@p l'@h %d : %B a une profondeur @n (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
 msgstr "@E doublon repérée. "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2552,7 +2551,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2563,163 +2562,156 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi @F %N, @s zéro.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "@b dans l'@h %d (%q) inattendu.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1719
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr "@E référence l'@i %Di dans le @g %g où _INODE_UNINIT est positionné.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1724
 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:1613
+#: e2fsck/problem.c:1729
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "i_file_acl_hi @F %N, @s zéro.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, c-format
+#: e2fsck/problem.c:1735
+#, no-c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr "@p l'@h %d : le noeud root a une somme de contrôle incorrecte.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, c-format
+#: e2fsck/problem.c:1741
+#, no-c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr "@p l'@h %d : le noeud interne a une somme de contrôle incorrecte.\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1746
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
-msgstr ""
-"@i de @d %i, %B, déplacement %N : le @d n'a pas de somme de contrôle.\n"
+msgstr "@i de @d %i, %B, déplacement %N : le @d n'a pas de somme de contrôle.\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
-msgstr ""
-"@i de @d %i, %B: le @d passe les vérifications, mais a une somme de contrôle "
-"incorrecte.\n"
+msgstr "@i de @d %i, %B: le @d passe les vérifications, mais a une somme de contrôle incorrecte.\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr "La taille de l'@i de @d en ligne (%N) doit être un multiple de 4.\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr "La correction de la taille de l'@i %i de @d en ligne a échoué.\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
 msgid "Encrypted @E is too short.\n"
 msgstr "L'@E chiffrée est trop courte.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Passe 3 : vérification de la connectivité des @ds\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
 msgstr "L'@r n'est pas alloué. "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "Pas d'espace dans le @d @l. "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1790
+#, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "@i %i (%p) de @d non connecté\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
 msgstr "/@l n'a pas été trouvé. "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "« .. » dans %Q (%i) est %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "/@l erroné ou inexistent. Ne peut reconnecter.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Ne peut étendre /@l : %m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Ne peut reconnecter %i : %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Erreur lors de la tentative de repérage de /@l : %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@b : %m lors de la tentative de création du @d /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@i : %m lors de la tentative de création du @d /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-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:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-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:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Erreur lors de l'ajustement du compteur d'@i sur l'@i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2729,8 +2721,8 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
@@ -2739,41 +2731,41 @@ msgstr ""
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Erreur de création du @d racine (%s) : %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Erreur de création du @d /@l (%s) : %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "L'@r n'est pas un @d ; arrêt immédiat.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "Ne peut procéder sans un @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l n'est pas un @d (ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
 msgid "/@l has inline data\n"
 msgstr "/@l a des données en ligne\n"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2784,7 +2776,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2794,52 +2786,52 @@ msgstr ""
 "Libérez des données du @f et relancez e2fsck.\n"
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1924
 msgid "/@l is encrypted\n"
 msgstr "/@l est chiffré\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Passe 3A : optimisation des répertoires\n"
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Échec de création de l'itérateur dirs_to_hash : %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Échec d'optimisation du répertoire %q (%d) : %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
 msgstr "Optimisation des répertoires : "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Passe 4 : vérification des compteurs de référence\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
 msgstr "@i %i @z @u. "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
 msgstr "@i %i @u\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "le compteur de référence de l'@i %i est %Il, @s %N. "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2850,158 +2842,151 @@ msgstr ""
 "\tFICHIER MONTÉ (ACTIF). inode_link_info[%i] est %N,\n"
 "\ti-node.i_links_count est %Il. Ils devraient être les mêmes !\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "le compteur de référence de l'@i %i d'@a est %N, @s %n. "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr "le @d dépasse ne nombre de liens maximum, mais la fonctionalité DIR_NLINK n'est pas activée dans le @S.\n"
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Passe 5 : vérification de l'information du sommaire de @g\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
 msgstr "Le remplissage à la fin du @B d'@i n'est pas initialisé. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
 msgstr "Le remplissage à la fin du @B de @bs n'est pas initialisé. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "différences de @B de @bs : "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "différences de @B d'@is : "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 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:1918
+#: e2fsck/problem.c:2068
 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:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Le décompte des @is libres est erroné (%i, décompté=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2078
 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:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Le décompte des @bs libres est erroné (%b, décompté=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
-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:2088
+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:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Erreur interne : ajustement approximatif de la fin du bitmap (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Erreur lors de la copie du @B d'@is de remplacement : %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Erreur lors de la copie du @B des @bs de remplacement : %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-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:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-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: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr "Le @B d'@i du @g %g ne correspond pas à la somme de contrôle.\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr "Le @B de @b du @g %g ne correspond pas à la somme de contrôle.\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 msgid "Recreate @j"
 msgstr "Recréer le @j"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr "Mise à jour de l'information de quota pour le type de quota %N"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2172
+#, no-c-format
 msgid "Error setting @b @g checksum info: %m\n"
-msgstr ""
-"Erreur lors de l'initialisation de l'information de checksum du @g de @b\n"
+msgstr "Erreur lors de l'initialisation de l'information de checksum du @g de @b\n"
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2178
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Erreur lors de l'écriture de l'information de système de fichier: %m\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
-msgstr ""
-"Erreur lors de la vidange des tampons d'écriture vers le périphérique de "
-"stockage: %m\n"
+msgstr "Erreur lors de la vidange des tampons d'écriture vers le périphérique de stockage: %m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2189
 msgid "Error writing quota info for quota type %N: %m\n"
-msgstr ""
-"Erreur lors de l'écriture de l'information de quota pour le type de quota "
-"%N: %m\n"
+msgstr "Erreur lors de l'écriture de l'information de quota pour le type de quota %N: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Code d'erreur non traité (0x%x) !\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "IGNORÉ"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr "dans move_quota_inode"
 
@@ -3023,25 +3008,25 @@ msgstr "lors du d
 msgid "while doing inode scan"
 msgstr "lors de l'examen des i-noeuds"
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "lors de l'appel de ext2fs_block_iterate pour l'i-noeud %d"
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "lors de l'appel de ext2fs_block_iterate pour l'i-noeud %u"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "lors de l'appel à ext2fs_adjust_ea_refcount2 pour l'i-noeud %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "lors de l'appel à ext2fs_adjust_ea_refcount2 pour l'i-noeud %u"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Lors de la troncature de"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Lors de l'effacement de"
 
-#: e2fsck/unix.c:77
+#: e2fsck/unix.c:78
 #, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
@@ -3052,15 +3037,14 @@ msgstr ""
 "\t\t[-l|-L fichiers-des-blocs-défectueux] [-C fd] [-j journal-externe]\n"
 "\t\t[-E options-étendues] périphérique\n"
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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"
@@ -3073,7 +3057,7 @@ msgstr ""
 " -f                   Forcer la vérification même si le système de fichiers\n"
 "                      est marqué propre\n"
 
-#: e2fsck/unix.c:88
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -3095,12 +3079,12 @@ msgstr ""
 " -z fichier-d-annulation\n"
 "                      Créer un fichier d'annulation\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s : %u/%u fichiers (%0d.%d%% non contigus), %llu/%llu blocs\n"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3115,52 +3099,51 @@ msgstr[1] ""
 "\n"
 "%12u i-noeuds utilisés (%2.2f%%, sur %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 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:169
+#: e2fsck/unix.c:172
 #, c-format
 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:174
+#: e2fsck/unix.c:177
 #, 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"
+msgstr "             nombre d'i-noeuds avec des blocs ind/dind/tind : %u/%u/%u\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr "             Histogramme des profondeurs d'extents : "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 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:195
+#: e2fsck/unix.c:198
 #, c-format
 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:197
+#: e2fsck/unix.c:200
 #, c-format
 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:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -3175,96 +3158,96 @@ msgstr[1] ""
 "\n"
 "%12u fichiers normaux\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u répertoire\n"
 msgstr[1] "%12u répertoires\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 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:206
+#: e2fsck/unix.c:209
 #, c-format
 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:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u fifo\n"
 msgstr[1] "%12u fifos\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u lien\n"
 msgstr[1] "%12u liens\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u lien symbolique"
 msgstr[1] "%12u liens symboliques"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, 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:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u socket\n"
 msgstr[1] "%12u sockets\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u fichier\n"
 msgstr[1] "%12u fichiers\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "lors de la détermination à savoir si %s est monté."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Attention ! %s est monté.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Attention ! %s est en cours d'utilisation.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s est monté.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s est en cours d'utilisation.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3272,7 +3255,7 @@ msgstr ""
 "Ne peut continuer, arrêt immédiat.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3286,84 +3269,106 @@ msgstr ""
 "vous ***CAUSEREZ*** des dommages ***SÉVÈRES*** au système de fichiers.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "Souhaitez-vous réellement continuer"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "vérification stoppée.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr " contient un système de fichiers comportant des erreurs"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " n'a pas été démonté proprement"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 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:379
+#: e2fsck/unix.c:383
 #, 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:386
+#: e2fsck/unix.c:390
 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:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " a passé %u jours sans avoir été vérifié"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr "ignorons l'intervale de vérification, broken_system_clock est activé\n"
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ", vérification forcée.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s : propre, %u/%u fichiers, %llu/%llu blocs"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
 msgstr " (vérification remise à plus tard : sur batterie)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr " (vérification lors du prochain montage)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (vérification dans %ld montages)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ERREUR : ne peut ouvrir /dev/null (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "Version EA invalide.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:702
 msgid "Invalid readahead buffer size.\n"
 msgstr "Taille de tampon de lecture anticipée invalide.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Option étendue inconnue : %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Les options étendues sont séparées par des virgules et peuvent prendre un\n"
+"argument qui est défini à l'aide d'un signe d'égalité (« = »). Les options\n"
+"valides sont:\n"
+"\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr "\tea_ver=<version_ea (1 ou 2)>\n"
+
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "\treadahead_kb=<taille buffer>\n"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3373,55 +3378,55 @@ msgstr ""
 "\tligne n°%d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, 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:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr "Descripteur de fichier d'information de complétion invalide"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 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:865
+#: e2fsck/unix.c:903
 #, 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:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Impossible de résoudre « %s »"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 msgid "The -n and -D options are incompatible."
 msgstr "Les options -n et -D sont incompatibles."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 msgid "The -n and -c options are incompatible."
 msgstr "Les options -n et -c sont incompatibles."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Les options -n et -l/-L sont incompatibles."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Les options -D et -E fixes_only sont incompatibles."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Les options -E bmap2extent et fixes_only sont incompatibles."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 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:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3430,7 +3435,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG « %s » n'est pas un entier\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3441,97 +3446,92 @@ msgstr ""
 "Argument non numérique invalide pour -%c (« %s »)\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, 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:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr "lors de la vérification du block MMP"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\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"
-"'tune2fs -f -E clear_mmp {device}'\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 %s'\n"
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
 msgstr "lors de la lecture du bloc MMP"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, 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"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "lors de la tentative d'effacement de %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "lors de la tentative de mise en place du fichier d'annulation\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 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:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "lors de la tentative d'initialisation du programme"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tUtilisation de %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr "a besoin d'un terminal pour des réparations en mode interactif"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s : %s tentons d'utiliser les blocs de sauvetage...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr "Superbloc invalide,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
 msgstr "Les descripteurs de groupe semblent en mauvais état..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s : %s lors de l'utilisation des blocs de sauvetage"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1546
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s : retour au superblock originel\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3542,30 +3542,30 @@ msgstr ""
 "corrompu)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr "Peut-être cette partition est-elle de taille zéro ?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, 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:1526
+#: e2fsck/unix.c:1590
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Périphérique peut-être inexistent ou pour le swap ?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1592
 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:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr "Périphérique peut-être inexistant ?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3573,71 +3573,79 @@ 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:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr "%s: Essai de chargement du superblock malgré les erreurs...\n"
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr "Veuillez obtenir une version plus récente d'e2fsck !"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1749
 #, c-format
 msgid "while checking journal for %s"
 msgstr "lors de la vérification du journal pour %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1752
 msgid "Cannot proceed with file system check"
 msgstr "Ne peut procéder à une vérification du système de fichier."
 
-#: e2fsck/unix.c:1661
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+#: e2fsck/unix.c:1763
+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:1673
+#: e2fsck/unix.c:1775
 #, 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:1679
+#: e2fsck/unix.c:1781
 #, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Erreur de somme de contrôle de journal trouvée dans %s\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1785
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "Journal corrompu dans %s\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1789
 #, c-format
 msgid "while recovering journal of %s"
 msgstr "lors de la récupération du journal de %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s a une(des) fonctionnalité(s) non supportée(s) :"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1826
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "%s a un encodage non supporté : %0x\n"
+
+#: e2fsck/unix.c:1876
 #, 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:1771
+#: e2fsck/unix.c:1879
 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:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Création du journal (%d blocs) : "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr "Complété.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1931
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
@@ -3645,24 +3653,38 @@ msgstr ""
 "\n"
 "*** le journal a été regénéré ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "arrêté"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s : e2fsck a été annulé.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Re-démarrons e2fsck depuis le début...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "lors de la réinitialisation du contexte"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** LES ERREURS DU SYSTÈME DE FICHIERS ONT ÉTÉ CORRIGÉES *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: Le système de fichier a été modifié.\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3671,12 +3693,12 @@ msgstr ""
 "\n"
 "%s: ***** LE SYSTÈME DE FICHIERS A ÉTÉ MODIFIÉ *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:2040
 #, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s : ***** RÉ-AMORCER LE SYSTÈME *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3687,51 +3709,51 @@ msgstr ""
 "%s : **ATTENTION : le système de fichiers contient encore des erreurs**\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "oO"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr "tT"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr " ('t' active 'oui' pour tout) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<o>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (o/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "annulé !\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr "oui pour tout\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "oui\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "non\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3740,7 +3762,7 @@ msgstr ""
 "%s ? non\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3749,40 +3771,38 @@ msgstr ""
 "%s ? oui\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "oui"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "non"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps : bloc(s) de bitmap illégal(aux) pour %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "la lecture des bitmaps d'i-noeuds et de blocs"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "lors de la tentative de re-lecture des bitmaps pour %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "l'écriture des bitmaps de blocs et d'i-noeuds"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, 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:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3795,65 +3815,60 @@ msgstr ""
 "%s: INCONSISTENCE INATTENDUE ; EXÉCUTEZ fsck MANUELLEMENT.\n"
 "\t(i.e., sans options -a ou -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Mémoire utilisée : %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Mémoire utilisée : %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "temps : %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "temps écoulé : %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "lors de la lecture de l'i-noeud %lu dans %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "lors de l'écriture de l'i-noeud %lu dans %s"
 
-#: e2fsck/util.c:765
-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"
+#: e2fsck/util.c:792
+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:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "complété                                             \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, 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"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 ""
-"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"
+"Utilisation : %s [-b taille_de_bloc] [-i fichier_d_entrée]\n"
+"       [-o fichier_de_sortie] [-svwnfBX] [-c blocs_à_la_fois]\n"
+"       [-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"
 "       périphérique [dernier_bloc [premier_bloc]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3862,83 +3877,82 @@ msgstr ""
 "%s: Les options -n et -w sont mutuellement exclusive.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f%% effectué, %s écoulé. (%d/%d/%d erreurs)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Test en cours avec un motif aléatoire : "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Test en cours avec le motif 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "lors de la recherche"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Valeur bizarre (%ld) dans do_read\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "lors de l'exécution d'ext2fs_sync_device"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "lors du début de l'itération de la liste des blocs défectueux"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "lors de l'allocation des tampons"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Vérification des blocs %lu à %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Vérification des blocs défectueux en mode lecture seule\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Vérification des blocs défectueux (test en mode lecture seule) : "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Trop de blocs défectueux, test abandonné\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Vérification des blocs défectueux en mode lecture-écriture\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Du bloc %lu au bloc %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Lecture et comparaison : "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
 "Vérification des blocs défectueux dans un mode non destructif de lecture-\n"
 "écriture\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 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:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3946,59 +3960,59 @@ msgstr ""
 "\n"
 "Interruption, nettoyage en cours\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "lors du test d'écriture de données, bloc %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s est monté ; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 "l'exécution de badblocks est tout de même forcée.\n"
 "Espérons que /etc/mtab est incorrect.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "il n'est pas prudent d'exécuter badblocks !\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s est apparemment utilisé par le système ; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "blocs erronés forcés de toutes manières.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "%s invalide - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr "Nombre maximum de blocs défectueux %u trop grand - le maximum est %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "ne peut allouer de la mémoire pour motif_de_test - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "Au plus un seul motif_de_test peut être spécifé en mode lecture seule"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Un motif_de_test aléatoire n'est pas permis en mode lecture seule"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -4006,272 +4020,268 @@ msgstr ""
 "Ne peut déterminer la taille du périphérique ; vous devez spécifier\n"
 "la taille manuellement\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "lors de la tentative de détermination de la taille du périphérique"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "dernier bloc"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "premier bloc"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "bloc de départ invalide (%llu) : doit être moins de %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "bloc de départ invalide (%llu) : doit être une valeur sur 32 bit"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "lors de la création en mémoire d'une liste des blocs défectueux"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "fichier d'entrée - mauvais format"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "lors de l'ajout en mémoire à la liste des blocs défectueux"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Passe complétée, %u blocs défectueux repérés. (%d/%d/%d erreurs)\n"
 
 #: misc/chattr.c:89
 #, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
-msgstr ""
-"Utilisation : %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] fichiers...\n"
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "Utilisation : %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] fichiers...\n"
 
-#: misc/chattr.c:159
+#: misc/chattr.c:160
 #, c-format
 msgid "bad project - %s\n"
 msgstr "projet erroné - %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "version erronée - %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "lors de l'évaluation par stat() de %s"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "lors de la lecture des drapeaux sur %s"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Drapeaux de %s initialisés comme "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "lors de l'initialisation des drapeaux sur %s"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Version de %s initialisée à %lu\n"
 
-#: misc/chattr.c:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "lors de l'initialisation de la version sur %s"
 
-#: misc/chattr.c:271
+#: misc/chattr.c:272
 #, c-format
 msgid "Project of %s set as %lu\n"
 msgstr "Projet de %s initialisé à %lu\n"
 
-#: misc/chattr.c:275
+#: misc/chattr.c:276
 #, c-format
 msgid "while setting project on %s"
 msgstr "lors de l'initialisation du projet sur %s"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 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:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "= est incompatible avec - et +\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "Vous devez utiliser « -v », = - ou +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:80 misc/create_inode.c:119
 #, c-format
 msgid "while reading inode %u"
 msgstr "lors de la lecture de l'i-noeud %u"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 msgid "while expanding directory"
 msgstr "lors de l'extension du répertoire"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:97
 #, c-format
 msgid "while linking \"%s\""
 msgstr "lors de la liaison de « %s »"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
 #, c-format
 msgid "while writing inode %u"
 msgstr "lors de l'écriture de l'i-noeud %u"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:152 misc/create_inode.c:176
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "lors du listage des attributs de « %s »"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:163
 #, c-format
 msgid "while opening inode %u"
 msgstr "lors de l'ouverture de l'i-noeud %u"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr "lors d'une allocation mémoire"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:189 misc/create_inode.c:205
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "lors de la lecture de l'attribut « %s » de « %s »"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:214
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "lors de l'écriture de l'attribut « %s » dans l'i-noeud « %u »"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:224
 #, c-format
 msgid "while closing inode %u"
 msgstr "lors de la fermeture de l'i-noeud %u"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:275
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr "lors de l'allocation de l'i-noeud « %s »"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:294
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr "lors de la création de l'i-noeud « %s »"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:360
 #, c-format
 msgid "while creating symlink \"%s\""
 msgstr "lors de la création du lien symbolique « %s »"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:378 misc/create_inode.c:963
 #, c-format
 msgid "while looking up \"%s\""
 msgstr "lors de la recherche de « %s »"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:398
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr "lors de la création du répertoire « %s »"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:627
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "lors de l'ouverture de « %s » pour copie"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr "lors du changement de répertoire courant vers « %s »"
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:815
 #, c-format
-msgid "while opening directory \"%s\""
-msgstr "lors de l'ouverture du répertoire « %s »"
+msgid "while scanning directory \"%s\""
+msgstr "lors du parcours du répertoire « %s »"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:825
 #, c-format
 msgid "while lstat \"%s\""
 msgstr "lors d'un lstat sur « %s »"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:875
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr "lors de la création du fichier spécial « %s »"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:884
 msgid "malloc failed"
 msgstr "échec de malloc"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:892
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr "lors de la tentative de lecture du lien « %s »"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr "la taille du lien symbolique a augmenté entre lstat() et readlink()"
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:910
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr "lors de l'écriture du lien symbolique « %s »"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:921
 #, c-format
 msgid "while writing file \"%s\""
 msgstr "lors de l'écriture du fichier « %s »"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:934
 #, c-format
 msgid "while making dir \"%s\""
 msgstr "lors de la fabrication du répertoire « %s »"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:952
 msgid "while changing directory"
 msgstr "lors du changement de répertoire"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:958
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr "ignorons l'entrée « %s »"
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:971
 #, c-format
 msgid "while setting inode for \"%s\""
 msgstr "lors de l'initialisation de l'i-noeud pour « %s »"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:978
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "lors de l'initialisation des xattrs pour « %s »"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:1004
 msgid "while saving inode data"
 msgstr "lors de la sauvegarde des données de l'i-noeud"
 
 #: misc/dumpe2fs.c:56
 #, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Utilisation : %s [-bfghixV] [-o superblock=<nombre>] [-o blocksize=<nombre>] "
-"périphérique\n"
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "Utilisation : %s [-bfghimxV] [-o superblock=<nombre>] [-o blocksize=<nombre>] périphérique\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -4389,106 +4399,54 @@ msgstr "lors de l'affichage de la liste des blocs d
 msgid "Bad blocks: %u"
 msgstr "Blocs défectueux : %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "lors de la lecture de l'i-noeud du journal"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "lors de l'ouverture de l'i-noeud du journal"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "lors de la lecture du journal du superbloc"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Le numéro magique du superbloc de journal est invalide !\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Fonctionalités du journal : "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Taille du journal :         "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Longueur du journal :      %u\n"
-"Séquence du journal :      0x%08x\n"
-"Début du journal :         %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr "Type de csum du journal:   crc32\n"
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-"Type de csum du journal:   %s\n"
-"Csum du journal:          0x%08x\n"
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Numéro erreur du journal: %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "lors de la lecture du journal du superbloc"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Ne peut trouver les numéros magiques du superbloc du journal"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Taille de bloc du journal :        %u\n"
-"Longueur du journal :              %u\n"
-"Premier bloc du journal :          %u\n"
-"Séquence du journal :              0x%08x\n"
-"Début du journal :                 %u\n"
-"Nombre d'utilisateurs du journal : %u\n"
+#: misc/dumpe2fs.c:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "n'a pus allouer de tampon MMP\n"
 
-#: misc/dumpe2fs.c:514
+#: misc/dumpe2fs.c:479
 #, c-format
-msgid "Journal users:            %s\n"
-msgstr "Usagers du journal :      %s\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "lecture du bloc MMP %llu depuis '%s'\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Impossible d'allouer de la mémoire pour analyser les options !\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Paramètre de superbloc invalide : %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Paramètre de taille de bloc invalide : %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4512,243 +4470,221 @@ msgstr ""
 "\tblocksize=<taille de bloc>\n"
 "\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tUtilisation de %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** Erreurs de somme de contrôle détectées dans le système de fichier !  "
-"Lancez e2fsck maintenant !\n"
-"\n"
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Impossible de trouver un superbloc de système de fichiers valide.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** Erreurs de somme de contrôle détectées dans les bitmaps !  Lancez e2fsck "
-"maintenant !\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s: la fonctionalité MMP n'est pas activée.\n"
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:747
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "lors de la tentative de lecture des bitmaps '%s'\n"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"*** Lancez e2fsck maintenant !\n"
 "\n"
-"%s : %s : erreur lors de la lecture des bitmaps : %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
-msgstr "Utilisation : %s [ -r|Q ] [ -fr ] périphérique fichier_image\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
+msgstr "Utilisation : %s [ -r|Q ] [ -fr ] [ -b superbloc ] [ -B taille_bloc ] périphérique fichier_image\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "              %s -I périphérique fichier_image\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
-msgstr ""
-"              %s -ra  [  -cfnp  ] [ -o décalage-src ] [ -O décalage-dst ] "
-"src_fs [ dest_fs ]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+msgstr "              %s -ra  [  -cfnp  ] [ -o décalage-src ] [ -O décalage-dst ] src_fs [ dest_fs ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr "lors de l'allocation d'un tampon"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "Écriture du bloc %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr "Erreur lors de d'écriture du bloc %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr "erreur dans generic_write()"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Erreur : la taille d'en-tête est plus grande que wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr "Ne peut allouer un tampon d'en-tête\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "lors de l'écriture du superbloc"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "lors de l'écriture de la table d'i-noeuds"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "lors de l'écriture du bitmap de blocs"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "lors de l'écriture du bitmap d'i-noeuds"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Bloc des répertoires %llu corrompu: mauvais rec_len (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Bloc des répertoires %llu corrompu: mauvais name_len (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu blocs (%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
 msgstr "Copie "
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
-msgstr ""
-"Arrêter maintenant va détruire le système de fichier, interrompez de nouveau "
-"si vous êtes sûr\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+msgstr "Arrêter maintenant va détruire le système de fichier, interrompez de nouveau si vous êtes sûr\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " reste %s à %.2f Mo/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr "erreur de lecture du bloc %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "Copié %llu / %llu blocs (%d%%) dans %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "à %.2f Mo/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
 msgstr "lors de l'allocation d'une table l1"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr "lors de l'allocation d'un cache l2"
 
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
-msgstr ""
-"Attention : Il reste des tables dans le cache lors de la libération du "
-"cache, les données seront perdue, et donc l'image pourrait ne pas être "
-"valide.\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
+msgstr "Attention : Il reste des tables dans le cache lors de la libération du cache, les données seront perdue, et donc l'image pourrait ne pas être valide.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr "lors de l'allocation de ext2fs_qcow2_image"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr "lors de l'initialization de ext2fs_qcow2_image"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
-msgstr ""
-"Erreur de programmation : plusieurs blocs séquentiels refcount ont été "
-"créés !\n"
+msgstr "Erreur de programmation : plusieurs blocs séquentiels refcount ont été créés !\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr "lors de l'allocation d'un bitmap de blocs"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr "lors de l'allocation d'un bitmap de bloc scamble"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
 msgstr "Examen des i-noeuds...\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr "Ne peut allouer le tampon de bloc"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "lors de l'iteration sur l'i-noeud %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "Les images brutes et qcow2 ne peuvent pas être installée"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr "erreur lors de la lecture des bitmaps"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr "lors de l'ouverture du fichier de périphérique"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr "lors de la restauration de de la table de l'image"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "L'option -a ne peut être utilisée qu'avec les images brutes ou QCOW2."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "L'option -b ne peut être utilisée qu'avec les images brutes ou QCOW2."
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr "Les décalages ne sont autorisés qu'avec les images brutes."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr "Le mode de déplacement n'est autorisé qu'avec les images brutes."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr "Le mode de déplacement nécessite tous les mode de données."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr "vérification de montage existant"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4761,47 +4697,51 @@ msgstr ""
 "de débuggage. Utilisez l'option -f si vous voulez réellement faire\n"
 "cela.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "Une image QCOW2 ne peut pas être écrite sur stdout !\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr "Ne peut pas examiner la sortie\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "L'image (%s) est compressée\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "L'image (%s) est chiffrée\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "L'image (%s) est corrompue\n"
+
+#: misc/e2image.c:1683
 #, 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/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr "L'option -c n'est supportée qu'en mode brut\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "L'option -c n'est pas supportée avec écriture sur stdout\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr "lors de l'allocation de check_buf"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr "L'option -p n'est supportée qu'en mode brut\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d blocs contenaient déjà les données devant être copiées\n"
@@ -4831,7 +4771,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:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Avertissement : étiquette trop longue, sera tronquée.\n"
@@ -4846,171 +4786,161 @@ 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:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Utilisation : e2label périphérique [nouvelle_étiquette]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
-msgstr ""
-"Utilisation : %s [-f] [-h] [-n] [-v] <fichier transaction> <système de "
-"fichiers>\n"
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
+msgstr "Utilisation : %s [-f] [-h] [-n] [-o décalage] [-v] [-z fichier_annulation] <fichier transaction> <système de fichiers>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
-msgstr ""
-"Le superbloc du système de fichier ne correspond pas au fichier "
-"d'annulation\n"
+msgstr "Le superbloc du système de fichier ne correspond pas au fichier d'annulation\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr "L'UUID ne correspond pas.\n"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr "La date de dernier montage ne correspond pas.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr "La date de dernière écriture ne correspond pas.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr "Le compteur de durée de vie d'écriture ne correspond pas.\n"
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr "lors de la lecture superbloc du système de fichiers."
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr "lors de la récupération du superbloc"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
-msgstr ""
-"La somme de contrôle du superbloc du fichier d'annulation ne correspond "
-"pas.\n"
+msgstr "La somme de contrôle du superbloc du fichier d'annulation ne correspond pas.\n"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr "décalage illégal - %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
-msgstr ""
-"On ne peut pas écrire dans un fichier d'annulation pendant son rejeu.\n"
+msgstr "On ne peut pas écrire dans un fichier d'annulation pendant son rejeu.\n"
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "lors de l'ouverture du fichier d'annulation « %s »\n"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 msgid "while reading undo file"
 msgstr "lors de la lecture du fichier d'annulation"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s : N'est pas un fichier d'annulation\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "%s: La somme de contrôle de l'en-tête ne correspond pas.\n"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "%s: En-tête de fichier d'annulation corrompu.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr "%s: La taille de bloc d'annulation est trop grande.\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "%s: Taille de bloc d'annulation trop petite.\n"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr "%s: Fonctionnalité de fichier d'annulation inconnue positionnée.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "Erreur lors la détermination à savoir si %s est monté."
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
-msgstr ""
-"e2undo ne devrait être lancé que sur des systèmes de fichiers non montés"
+msgstr "e2undo ne devrait être lancé que sur des systèmes de fichiers non montés"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, c-format
 msgid "while opening `%s'"
 msgstr "lors de l'ouverture de « %s »"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr "le décalage spécifié est trop grand"
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 msgid "while reading keys"
 msgstr "lors de la lecture des clés"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr "%s: nombre magique de clé incorrect à %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr "%s: erreur de somme de contrôle du bloc de clé à %llu.\n"
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, c-format
 msgid "%s: block %llu is too long."
 msgstr "%s: le bloc %llu est trop long."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, c-format
 msgid "while fetching block %llu."
 msgstr "lors de la récupération du bloc %llu."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
-msgstr ""
-"erreur de somme de contrôle dans le bloc de système de fichier %llu (bloc "
-"d'annulation %llu)\n"
+msgstr "erreur de somme de contrôle dans le bloc de système de fichier %llu (bloc d'annulation %llu)\n"
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, c-format
 msgid "while writing block %llu."
 msgstr "lors de d'écriture du bloc %llu."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr "Fichier d'annulation corrompu ; lancez e2fsck MAINTENANT !\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr "Erreur d'E/S pendant le rejeu ; lancez e2fsck MAINTENANT !\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr "Enregistrement d'annulation incomplet ; lancez e2fsck.\n"
@@ -5056,12 +4986,8 @@ msgstr ""
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
-msgstr ""
-"décalage_o   début_o        find_o    blocs_sf  blksz  grp  mkfs/"
-"date_montage         sb_uuid étiquette\n"
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+msgstr "décalage_o   début_o        find_o    blocs_sf  blksz  grp  mkfs/date_montage         sb_uuid étiquette\n"
 
 #: misc/findsuper.c:264
 #, c-format
@@ -5095,39 +5021,37 @@ msgstr ""
 "\tpossible.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck : %s : non trouvé\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s : wait : plus de processus fils ?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, 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
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s : l'état est %x, ne devrait jamais se produire.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Terminé avec %s (état de fin d'exécution %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s : Erreur %d lors de l'exécution de fsck.%s pour %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5135,47 +5059,39 @@ msgstr ""
 "Soit tous ou aucun des types de systèmes de fichiers passés à -t doivent\n"
 "être préfixés par « no » ou « ! ».\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 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
+#: misc/fsck.c:891
 #, 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
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck : ne peut pas vérifier %s : fsck.%s non trouvé\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Vérification de tous les systèmes de fichiers.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 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 ""
-"Utilisation : fsck [-AMNPRTV] [ -C [ fd ] ] [-t type_sys_fichiers] "
-"[options_sys_fichiers] [sys_fichiers...]\n"
+#: misc/fsck.c:1085
+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
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s : trop de périphériques\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s : trop d'arguments\n"
@@ -5187,53 +5103,44 @@ msgstr "Montage en lecture seule.\n"
 #: misc/fuse2fs.c:3769
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
-msgstr ""
-"%s: Utilisateurs autorisés à allouer tous les blocs. Ceci est dangereux !\n"
+msgstr "%s: Utilisateurs autorisés à allouer tous les blocs. Ceci est dangereux !\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
 msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr "SVP exécutez e2fsck -fy %s.\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
-msgstr ""
-"Le journal a besoin d'une récupération ; lancer « e2fsck -E journal_only » "
-"est nécessaire.\n"
+msgstr "Le journal a besoin d'une récupération ; lancer « e2fsck -E journal_only » est nécessaire.\n"
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3812
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "%s: Écrire dans le journal n'est pas supporté.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
-msgstr ""
-"Avertissement: Montage d'un système de fichier non vérifié, lancer e2fsck "
-"est recommandé.\n"
+msgstr "Avertissement: Montage d'un système de fichier non vérifié, lancer e2fsck est recommandé.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
-msgstr ""
-"Avertissement: Nombre maximum de montage atteint, lancer e2fsck est "
-"recommandé.\n"
+msgstr "Avertissement: Nombre maximum de montage atteint, lancer e2fsck est recommandé.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
-msgstr ""
-"Avertissement: Date de vérification atteinte ; lancer e2fsck est "
-"recommandé.\n"
+msgstr "Avertissement: Date de vérification atteinte ; lancer e2fsck est recommandé.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr "Orphelins détectés ; lancer e2fsck est recommandé.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr "Erreurs détectées ; lancer e2fsck est requis.\n"
 
@@ -5257,7 +5164,7 @@ msgstr "Lors de la lecture du projet sur %s"
 msgid "While reading version on %s"
 msgstr "Lors de la lecture de la version sur %s"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5266,57 +5173,49 @@ 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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
-"Utilisation : %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[-d répertoire-racine] [-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] [-e comportement_erreur] [-z fichier_annulation]\n"
 "\t[-jnqvDFSV] périphérique [nombre-de-blocs]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Exécution de la commande : %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "durant la tentative d'exécution de « %s »"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 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:293
+#: misc/mke2fs.c:299
 #, 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:295
+#: misc/mke2fs.c:301
 #, 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:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Arrêt immédiat...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5327,15 +5226,19 @@ msgstr ""
 "\tbloc %u contiennent des blocs défectueux.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "lors du marquage des blocs défectueux en tant qu'utilisés"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "lors de l'écriture des i-noeuds réservés"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Écriture des tables d'i-noeuds : "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5344,79 +5247,76 @@ msgstr ""
 "\n"
 "Impossible d'écrire %d blocs dans la table d'i-noeuds débutant à %llu : %s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "complété                        \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "lors de la création du répertoire racine"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "lors de la lecture de l'i-noeud racine"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "lors de l'initialisation de la propriété de l'i-noeud racine"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "lors de la création de /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "lors de la recherche de /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "lors de l'extension de /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "lors de l'initialisation de l'i-noeud des blocs défectueux"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, 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:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Avertissement : impossible de lire le bloc 0 : %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Avertissement : impossible d'effacer le secteur %d : %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "lors de l'initialisation du journal du superbloc"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Mise à zéro du périphérique de journal : "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, 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:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "lors de l'écriture du superbloc de journal"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
-msgstr ""
-"En train de créer un système de fichiers avec %llu %dk blocs et %u i-"
-"noeuds.\n"
+msgstr "En train de créer un système de fichiers avec %llu %dk blocs et %u i-noeuds.\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5425,158 +5325,168 @@ msgstr ""
 "Avertissement : %llu blocs inutilisés.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Étiquette de système de fichiers=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Type de système d'exploitation : %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Taille de bloc=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Taille de cluster=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Taille de fragment=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "« Stride » = %u blocs, « Stripe width » = %u blocs\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u i-noeuds, %llu blocs\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, 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:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Premier bloc de données=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Propriétaire du répertoire racine=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Nombre maximum de blocs du système de fichiers=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u groupes de blocs\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u groupe de bloc\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, 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:702
+#: misc/mke2fs.c:714
 #, 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:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u i-noeuds par groupe\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "UUID de système de fichiers=%s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Superblocs de secours stockés sur les blocs : "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:822
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s nécessite '-O 64bit'\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "'%s' doit être avant 'resize=%u'\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "desc_size invalide: '%s'\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Graine de hachage invalide: %s\n"
+
+#: misc/mke2fs.c:867
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Décalage invalide : %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "mmp_update_interval invalide : %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Nombre de superbloc de secours invalide : %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Paramètre « stride » invalide : %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Paramètre « stripe-width » invalide : %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Paramètre de changement de taille invalide : %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:965
 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:959
+#: misc/mke2fs.c:989
 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:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "root_owner invalide : « %s »\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1069
+#, c-format
+msgid "Invalid encoding: %s"
+msgstr "Encodage invalide : %s"
+
+#: misc/mke2fs.c:1087
 #, c-format
 msgid ""
 "\n"
@@ -5599,6 +5509,8 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
@@ -5622,10 +5534,12 @@ msgstr ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encodage>\n"
+"\tencoding_flags=<drapeaux>\n"
 "\tquotatype=<type(s) de quota(s) à activer>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5633,11 +5547,20 @@ 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:1102
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr "erreur : drapeau d'encodage invalide: %s\n"
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr "erreur : Un encodage doit être explicitement spécifié lorsque encoding-flags est passé\n"
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5647,17 +5570,17 @@ msgstr ""
 "\t(%s, ligne n°%d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Jeu d'options de système de fichiers invalide : %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Jeu d'options pour le montage invalide : %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
@@ -5667,7 +5590,7 @@ msgstr ""
 "Votre mke2fs.conf ne précise pas le type de système de fichiers de\n"
 "%s.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5675,11 +5598,11 @@ msgstr ""
 "Il vous faut sans doute installer un fichier mke2fs.conf mis à jour.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 msgid "Aborting...\n"
 msgstr "Arrêt immédiat...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5690,85 +5613,81 @@ msgstr ""
 "Avertissement : le fs_type %s n'est pas défini dans mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 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:1535
+#: misc/mke2fs.c:1608
 #, 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:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "taille invalide des blocs - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, 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:1588
+#: misc/mke2fs.c:1661
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "taille de cluster invalide - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "« -R » est déprécié, utiliser plutôt « -E »"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "mauvais comportement en cas d'erreur - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr "Nombre de blocs par groupe illégal"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 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:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "Nombre illégal pour la taille flex_bg"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
 msgstr "La taille flex_bg doit être une puissance de 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "La taille flex_bg (%lu) doit être inférieur ou égal à 2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, 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:1671
+#: misc/mke2fs.c:1744
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "taille d'i-noeud invalide - %s"
 
-#: misc/mke2fs.c:1684
-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:1757
+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:1695
+#: misc/mke2fs.c:1768
 msgid "in malloc for bad_blocks_filename"
 msgstr "dans malloc pour bad_blocks_filename"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1777
 #, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
@@ -5777,70 +5696,69 @@ msgstr ""
 "Avertissement : étiquette trop longue ; sera tronquée à « %s »\n"
 "\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "pourcentage de blocs réservés invalide - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "mauvais nombre d'i-noeuds - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1814
 msgid "while allocating fs_feature string"
 msgstr "lors de l'allocation de la chaîne fs_feature"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1831
 #, c-format
 msgid "bad revision level - %s"
 msgstr "mauvais numéro de version - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "lors de la tentative de création de la révision %d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 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:1785
+#: misc/mke2fs.c:1858
 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:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, 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:1847
+#: misc/mke2fs.c:1920
 #, 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:1853
+#: misc/mke2fs.c:1926
 #, 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:1864
+#: misc/mke2fs.c:1937
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "blocs '%s' invalides sur le périphérique %s"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "système de fichiers"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 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:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5848,7 +5766,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:1914
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5861,50 +5779,48 @@ msgstr ""
 "\toccupée et utilisée. Vous devez ré-amorcer pour forcer une\n"
 "\trelecture de la table de partitions.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:2015
 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:1951
+#: misc/mke2fs.c:2035
 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:1999
+#: misc/mke2fs.c:2085
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "Le HURD ne supporte pas la fonctionnalité filetype.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2090
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "Le HURD ne supporte pas la fonctionnalité huge_file.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "Le HURD ne supporte pas la fonctionnalité metadata_csum.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2100
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "Le HURD ne supporte pas la fonctionnalité ea_inode.\n"
+
+#: misc/mke2fs.c:2110
 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:2025
+#: misc/mke2fs.c:2116
 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:2057
+#: misc/mke2fs.c:2148
 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:2062
+#: misc/mke2fs.c:2153
 #, 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:2086
+#: misc/mke2fs.c:2177
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5913,101 +5829,97 @@ 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:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2191
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 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"
+"\tcréer un système de fichier utilisant une taille de block de %d.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "résolution de fs_types pour mke2fs.conf : "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 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:2135
+#: misc/mke2fs.c:2228
 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:2145
+#: misc/mke2fs.c:2238
 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:2158
+#: misc/mke2fs.c:2251
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "pourcentage de blocs réservés invalide - %lf"
 
-#: misc/mke2fs.c:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
-msgstr ""
-"Les extents DOIVENT être activées pour un système de fichiers 64 bit.  "
-"Passez -O extents pour corriger.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
+msgstr "Les extents DOIVENT être activées pour un système de fichiers 64 bit.  Passez -O extents pour corriger.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
-msgstr ""
-"La taille d'un cluster ne peut pas être plus petite que la taille d'un "
-"bloc.\n"
+msgstr "La taille d'un cluster ne peut pas être plus petite que la taille d'un bloc.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "Spécifier une taille de cluster nécessite la fonctionalité bigalloc"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, 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:2224
+#: misc/mke2fs.c:2317
 #, 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:2226
+#: misc/mke2fs.c:2319
 #, 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:2247
+#: misc/mke2fs.c:2340
 #, 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:2251
+#: misc/mke2fs.c:2344
 #, 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:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
-msgstr ""
-"Suggestion : Utilisez un noyau Linux >= 3.18 pour améliorer la stabilité des "
-"fonctionalités de méta-données et somme de contrôle de journal.\n"
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "Suggestion : Utilisez un noyau Linux >= 3.18 pour améliorer la stabilité des fonctionalités de méta-données et somme de contrôle de journal.\n"
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
+msgstr "Encodage de nom de fichier inconnu du profil : %s"
+
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr "Drapeau d'encodage inconnu du profil : %s"
+
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -6023,13 +5935,24 @@ msgstr ""
 "peut-être pas ce que vous vouliez.\n"
 "\n"
 
-#: misc/mke2fs.c:2331
-msgid "Can't support bigalloc feature without extents feature"
+#: misc/mke2fs.c:2449
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr "des i-noeuds de %d octets sont trop petits pour des quota de projet"
+
+#: misc/mke2fs.c:2465
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
 msgstr ""
-"La fonctionalité bigalloc ne peut pas être supportée sans la fonctionalité "
-"extent"
+"Les fonctionnalités de chiffrement et d'insensibilité à la casse ne sont pas compatibles.\n"
+"Elles ne peuvent pas être activées simultanément.\n"
+
+#: misc/mke2fs.c:2480
+msgid "Can't support bigalloc feature without extents feature"
+msgstr "La fonctionalité bigalloc ne peut pas être supportée sans la fonctionalité extent"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -6037,7 +5960,7 @@ 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:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -6045,58 +5968,45 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Avertissement : la fonctionalité bigalloc est encore en cours de "
-"développement\n"
-"Voir https://ext4.wiki.kernel.org/index.php/Bigalloc pour plus "
-"d'informations\n"
+"Avertissement : la fonctionalité bigalloc est encore en cours de développement\n"
+"Voir https://ext4.wiki.kernel.org/index.php/Bigalloc pour plus d'informations\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 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:2367
+#: misc/mke2fs.c:2516
 msgid "blocks per group count out of range"
 msgstr "compteur de blocs par groupe hors limite"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2538
 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:2401
+#: misc/mke2fs.c:2550
 #, 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:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
-msgstr ""
-"des i-noeuds de %d octets sont trop petits pour des données en ligne ; "
-"spécifiez une taille plus grande"
-
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-"des i-noeuds de %d octets sont trop petits pour des quota de projet ; "
-"spécifiez une taille plus grande"
+msgstr "des i-noeuds de %d octets sont trop petits pour des données en ligne ; spécifiez une taille plus grande"
 
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, 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:2451
+#: misc/mke2fs.c:2587
 #, 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:2465
+#: misc/mke2fs.c:2601
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -6107,77 +6017,65 @@ 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:2652
+#: misc/mke2fs.c:2788
 msgid "Discarding device blocks: "
 msgstr "Rejet des blocs de périphérique : "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 msgid "failed - "
 msgstr "échoué - "
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2863
 msgid "while initializing quota context"
 msgstr "lors de l'initialization du contexte de quota"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2870
 msgid "while writing quota inodes"
 msgstr "lors de l'écriture des i-noeuds de quota"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2895
 #, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "mauvais comportement en cas d'erreur dans le profile - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2971
+msgid "in malloc for android_sparse_params"
+msgstr "dans malloc pour android_sparse_params"
+
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "lors de l'initialisation du superbloc"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
-msgstr ""
-"Les extents ne sont pas activés. L'arbre des extents de fichier peut avoir "
-"une somme de contrôle, mais les cartes de blocs ne le peuvent pas. Ne pas "
-"activer les extents réduit la couverture des sommes de contrôle des méta-"
-"données. Passez -O extents pour corriger.\n"
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
+msgstr "Les extents ne sont pas activés. L'arbre des extents de fichier peut avoir une somme de contrôle, mais les cartes de blocs ne le peuvent pas. Ne pas activer les extents réduit la couverture des sommes de contrôle des méta-données. Passez -O extents pour corriger.\n"
 
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
-msgstr ""
-"Le support de système 64-bits n'est pas activé. La taille de champs plus "
-"grande apportée par cette fonctionalité permet des sommes de contrôle "
-"fortes. Passez -O 64bit pour corriger.\n"
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+msgstr "Le support de système 64-bits n'est pas activé. La taille de champs plus grande apportée par cette fonctionalité permet des sommes de contrôle fortes. Passez -O 64bit pour corriger.\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr ""
-"La fonctionalité metadata_csum_seed requière la fonctionalité "
-"metadata_csum.\n"
+#: misc/mke2fs.c:3016
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "La fonctionalité metadata_csum_seed requière la fonctionalité metadata_csum.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
-msgstr ""
-"La libération a réussi et retournera des 0s - inutile d'effacer la table des "
-"i-noeuds\n"
+msgstr "La libération a réussi et retournera des 0s - inutile d'effacer la table des i-noeuds\n"
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "système d'exploitation inconnu - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 msgid "Allocating group tables: "
 msgstr "Allocation des tables de groupe : "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr "lors de la tentative d'allocation des tables de systèmes de fichiers"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6185,30 +6083,30 @@ msgstr ""
 "\n"
 "\tlors de la conversion du bitmap de sous-cluster"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr "%s peut être encore plus corrompu par une réécriture du superbloc\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, 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:3114
+#: misc/mke2fs.c:3279
 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:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "journal"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Ajout du journal au périphérique %s : "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
@@ -6217,21 +6115,21 @@ msgstr ""
 "\n"
 "\tlors de la tentative d'ajout d'un journal au périphérique %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "complété\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Pas de création de journal en mode super-seul\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Création du journal (%u blocs) : "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6239,46 +6137,38 @@ msgstr ""
 "\n"
 "\tlors de la tentative de création du journal"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 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:3192
+#: misc/mke2fs.c:3357
 #, 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:3210
+#: misc/mke2fs.c:3373
 msgid "Copying files into the device: "
 msgstr "Copie des fichiers dans le périphérique : "
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3379
 msgid "while populating file system"
 msgstr "lors du peuplement du système de fichier"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 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:3230
-#, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Attention, des problèmes sont survenus lors de l'écriture des superblocs."
+#: misc/mke2fs.c:3393
+msgid "while writing out and closing file system"
+msgstr "lors de l'écriture et la fermeture du système de fichiers"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6286,29 +6176,31 @@ msgstr ""
 "complété\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
-msgstr ""
-"Le décalage de partition de %llu (%uk) blocs n'est pas compatible avec la "
-"taille de cluster %u.\n"
+msgid "while zeroing block %llu for hugefile"
+msgstr "lors de la mise à zéro du bloc %llu pour le fichier géant"
+
+#: misc/mk_hugefiles.c:515
+#, c-format
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgstr "Le décalage de partition de %llu (%uk) blocs n'est pas compatible avec la taille de cluster %u.\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
 msgstr "Les fichiers géants vont être remplis de zéros\n"
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:584
 #, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "Création de %lu fichier(s) géant(s) "
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:586
 #, c-format
 msgid "with %llu blocks each"
 msgstr "avec %llu blocs chacun"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:595
 #, c-format
 msgid "while creating huge file %lu"
 msgstr "lors de la création du fichier géant %lu"
@@ -6352,23 +6244,29 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s : h=%3d s=%3d c=%4d   début=%8d taille=%8lu fin=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "SVP exécutez e2fsck -D sur le système de fichiers.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+"\n"
+"Cette opération nécessite un système de fichier fraîchement vérifié.\n"
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "SVP exécutez e2fsck -f sur le système de fichiers.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "SVP exécutez e2fsck -D sur le système de fichiers.\n"
+msgstr "SVP exécutez e2fsck -fD sur le système de fichiers.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
@@ -6377,34 +6275,42 @@ msgstr ""
 "\t[-e comportement-en-cas-d-erreur] [-f] [-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"
-"\t[-p intervale-mise-à-jour-mmp] [-r nombre-de-blocs-réservés]\n"
-"\t[-u utilisateur] [-C nombre-de-montage] [-L étiquette-du-volume]\n"
-"\t[-M dernier-répertoire-monté] [-O [^]fonctionnalité[,...]]\n"
-"\t[-Q options-de-quota]\n"
+"\t[-r nombre-de-blocs-réservés] [-u utilisateur] [-C nombre-de-montage]\n"
+"\t[-L étiquette-du-volume] [-M dernier-répertoire-monté]\n"
+"\t[-O [^]fonctionnalité[,...]] [-Q options-de-quota]\n"
 "\t[-E option-étendue[,...]] [-T date-de-dernière-vérification]\n"
 "\t[-U UUID] [-I nouvelle-taille-i-noeuds] [-z fichier_annulation]\n"
 "\tpériphérique\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Le superbloc de journal n'a pas été trouvé !\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "lors de la tentative d'ouverture du journal externe"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s n'est pas un périphérique de journal.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr ""
+"Le superbloc du journal est corrompu, nr_users\n"
+"est trop grand (%d).\n"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
 "L'UUID du système de fichiers n'a pas été trouvé sur le périphérique de\n"
 "journal.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6412,75 +6318,74 @@ msgstr ""
 "Ne peut repérer le périphérique de journal. Il n'a PAS été supprimé\n"
 "Utiliser l'option -f pour supprimer le périphérique de journal manquant.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "Journal enlevé\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "lors de la lecture des bitmaps"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
 msgstr "lors de l'effacement de l'i-noeud du journal"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "lors de l'écriture de l'i-noeud du journal"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(et rebootez après !)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr "Après avoir lancé e2fsck, veuillez lancer « resize2fs %s %s »"
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:489
 #, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr "Veuillez exécuter « resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
 msgstr " -z \"%s\""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:495
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr " » pour activer le mode 64-bits.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:497
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr " » pour désactiver le mode 64-bits.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
-"AVERTISSEMENT: N'a pas pu confirmer le support noyau pour "
-"metadata_csum_seed.\n"
+"AVERTISSEMENT: N'a pas pu confirmer le support noyau pour metadata_csum_seed.\n"
 "  Cela nécessite Linux >= v4.4.\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
 "La suppression de la fonctionnalité de système de fichiers '%s' n'est pas\n"
 "supportée.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 "L'ajout de la fonctionnalité de système de fichiers '%s' n'est pas\n"
 "supporté.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6488,7 +6393,7 @@ msgstr ""
 "La fonctionnalitié has_journal peut être désactivée uniquement lorsque le\n"
 "système de fichiers est démonté ou monté en lecture seule.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6496,16 +6401,15 @@ msgstr ""
 "Le drapeau needs_recovery est activé. SVP exécutez e2fsck avant\n"
 "de désactiver le drapeau has_journal.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 "Définir la fonctionalité de système de fichier 'sparse_super' n'est pas\n"
-"supporté pour les systèmes de fichiers avec la fonctionalité flex_bg "
-"activée.\n"
+"supporté pour les systèmes de fichiers avec la fonctionalité flex_bg activée.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6515,14 +6419,12 @@ msgstr ""
 "montages multiples ne peut être activée lorsque\n"
 "le système de fichier est monté ou en lecture seule.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1143
 #, 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:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6530,29 +6432,26 @@ msgstr ""
 "La fonctionnalité de protection contre le montage multiple ne peut\n"
 "être désactivée si le système de fichiers est en lecture seule.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 msgid "Error while reading bitmaps\n"
 msgstr "Erreur lors de la lecture des bitmaps\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, 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:1113
+#: misc/tune2fs.c:1174
 msgid "while reading MMP block."
 msgstr "lors de la lecture du bloc MMP."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 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:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6560,67 +6459,46 @@ msgstr ""
 "La fonctionnalité huge_file peut être désactivée uniquement lorsque le\n"
 "système de fichiers est démonté ou monté en lecture seule.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
 msgstr "Activer les sommes de contrôle pourrait prendre du temps. "
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr "Ne peut pas activer metadata_csum sur un système de fichiers monté !\n"
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
-msgstr ""
-"Les extents ne sont pas activés. L'arbre des extents de fichiers peut avoir "
-"une somme de contrôle, mais les cartes de blocs ne le peuvent pas. Ne pas "
-"activer les extents réduit la couverture des sommes de contrôle des méta-"
-"données. Relancez avec -O extent pour corriger.\n"
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
+msgstr "Les extents ne sont pas activés. L'arbre des extents de fichiers peut avoir une somme de contrôle, mais les cartes de blocs ne le peuvent pas. Ne pas activer les extents réduit la couverture des sommes de contrôle des méta-données. Relancez avec -O extent pour corriger.\n"
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
-msgstr ""
-"Le support de système de fichier 64-bits n'est pas activé. La taille de "
-"champs plus grande apportée par cette fonctionalité permet des sommes de "
-"contrôle fortes. Lancez resize2fs -b pour corriger.\n"
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
+msgstr "Le support de système de fichier 64-bits n'est pas activé. La taille de champs plus grande apportée par cette fonctionalité permet des sommes de contrôle fortes. Lancez resize2fs -b pour corriger.\n"
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
 msgstr "Désactiver lse sommes de contrôle pourrait prendre du temps."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
-msgstr ""
-"Ne peut pas désactiver metadata_sum sur un système de fichiers monté !\n"
+msgstr "Ne peut pas désactiver metadata_sum sur un système de fichiers monté !\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
-msgstr ""
-"Ne peut pas activer le mode 64-bits alors que le système de fichiers est "
-"monté !\n"
+msgstr "Ne peut pas activer le mode 64-bits alors que le système de fichiers est monté !\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
-msgstr ""
-"Ne peut pas désactiver le mode 64-bits alors que le système de fichiers est "
-"monté !\n"
+msgstr "Ne peut pas désactiver le mode 64-bits alors que le système de fichiers est monté !\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
-msgstr ""
-"\n"
-"Avertissement : projet activé sans quota en même temps\n"
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
+msgstr "Ne peut pas activer la fonctionalité projet; la taille d'i-noeud est trop petite.\n"
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6628,7 +6506,11 @@ msgstr ""
 "\n"
 "Avertissement : l'option « ^quota » supplante les arguments « -Q ».\n"
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr "Impossible d'activer la fonctionnalité de chiffrement alors que celle d'insensibilité à la casse est activée.\n"
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
@@ -6636,22 +6518,24 @@ msgstr ""
 "Définir la fonctionalité 'metadata_csum_seed' n'est supporté que sur\n"
 "les systèmes de fichiers avec la fonctionalité metadata_csum activée.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
-"L'UUID a changé depuis l'activation de metadata_csum. Le système de "
-"fichier \n"
+"L'UUID a changé depuis l'activation de metadata_csum. Le système de fichier \n"
 "doit être démonté pour réécrire sans risque toutes les données pour \n"
 "correspondre au nouvel UUID.\n"
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr "Recalculer les sommes de contrôle pourrait prendre du temps."
+
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "Le système de fichiers a déjà un journal.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, c-format
 msgid ""
 "\n"
@@ -6660,21 +6544,21 @@ msgstr ""
 "\n"
 "\tlors de la tentative d'ouverture du journal sur %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Création du journal sur le périphérique %s : "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "lors de l'ajout du système de fichiers au journal sur %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "Création de l'i-noeud du journal : "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6682,33 +6566,36 @@ msgstr ""
 "\n"
 "\tlors de la tentative de création du fichier journal"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr "Ne peut pas activer les quotas de projet; la tailles des i-noeud est trop petite.\n"
+
+#: misc/tune2fs.c:1588
 msgid "while initializing quota context in support library"
-msgstr ""
-"lors de l'initialisation du contexte de quota dans la bibliothèque support"
+msgstr "lors de l'initialisation du contexte de quota dans la bibliothèque support"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1603
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr "lors de la mise à jour des limites de quota (%d)"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1611
 #, c-format
 msgid "while writing quota file (%d)"
 msgstr "lors de l'écriture du fichier de quota (%d)"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "while removing quota file (%d)"
 msgstr "lors de la suppression du fichier de quota (%d)"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6718,105 +6605,104 @@ 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Ne peut analyser la spécification de date/heure : %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "compteur de montages erroné - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "nom gid/groupe erroné - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "intervalle erroné - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "taux de blocs réservés erroné - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
 msgid "-o may only be specified once"
 msgstr "-o ne peut être spécifié qu'une fois"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
 msgid "-O may only be specified once"
 msgstr "-O ne peut être spécifié qu'une fois"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "compteur de blocs réservés erroné - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "nom utilisateur/uid erroné - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "taille d'i-noeud invalide - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, 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:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "mmp_update_interval trop grand : %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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:2078
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "Activation du drapeau d'erreur de système de fichier pour forcer une passe fsck.\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Paramètre « stride RAID » invalide : %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Paramètre « stripe-width RAID » invalide : %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2126
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Algorithme de hachage invalide : %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2132
 #, 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:2050
+#: misc/tune2fs.c:2151
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6828,8 +6714,10 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -6843,38 +6731,38 @@ msgstr ""
 "\tclear_mmp\n"
 "\thash_alg=<algorithme de hachage>\n"
 "\tmount_opts=<options de montages étendues par défaut>\n"
+"\tmmp_update_interval=<intervale de mise à jour en secondes>\n"
 "\tstride=<taille en blocs des morceaux par disque RAID>\n"
 "\tstripe-width=<stride RAID * nombre de disques en blocs>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 msgid "Failed to read inode bitmap\n"
 msgstr "Échec de lecture du bitmap d'i-noeuds\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 msgid "Failed to read block bitmap\n"
 msgstr "Échec de lecture du bitmap de bloc\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "blocs à déplacer"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 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:2550
+#: misc/tune2fs.c:2653
 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:2555
+#: misc/tune2fs.c:2658
 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:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6882,84 +6770,114 @@ 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:2799
+#: misc/tune2fs.c:2900
+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"
+"'tune2fs -f -E clear_mmp {device}'\n"
+
+#: misc/tune2fs.c:2907
 #, 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:2811
+#: misc/tune2fs.c:2919
 msgid "Cannot modify a journal device.\n"
 msgstr "Ne peut pas modifier un périphérique de journal.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "La taille des i-noeuds est déjà %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 msgid "Shrinking inode size is not supported\n"
 msgstr "La réduction de la taille d'un i-noeud n'est pas supportée\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "Taille d'i-noeud invalide %lu (max %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
 msgstr "Retailles les i-noeuds pourrait prendre du temps."
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+"Avertissement: Le journal est sale. Vous voulez peut-être rejouer le journal\n"
+"ainsi:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"et ensuite relancer cette commande. Sinon, tout changement effectué pourrait\n"
+"être écrasé par la récupération du journal.\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Récupération du journal.\n"
+
+#: misc/tune2fs.c:3028
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Définition du nombre maximal de montages à %d\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3034
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Définition du nombre courant de montages à %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Définition du comportement en cas d'erreur à %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, 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:2910
+#: misc/tune2fs.c:3049
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "l'intervalle entre les vérifications est trop grand (%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3056
 #, 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:2924
+#: misc/tune2fs.c:3063
 #, 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:2930
+#: misc/tune2fs.c:3069
 #, 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:2937
+#: misc/tune2fs.c:3076
 #, 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:2942
+#: misc/tune2fs.c:3081
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6967,7 +6885,7 @@ msgstr ""
 "\n"
 "Le système de fichiers a déjà des superblocs creux.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6977,7 +6895,7 @@ msgstr ""
 "Définir le drapeau creux du superbloc n'est pas supporté pour les systèmes\n"
 "de fichiers avec la fonctionalité flex_bg activée.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
@@ -6986,7 +6904,7 @@ msgstr ""
 "\n"
 "Drapeau de superbloc creux activé. %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6994,65 +6912,55 @@ msgstr ""
 "\n"
 "La suppression du drapeau creux du superbloc n'est pas supportée.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, 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:2974
+#: misc/tune2fs.c:3113
 #, 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:3006
+#: misc/tune2fs.c:3145
 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:3024
-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:3163
+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:3181
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "Définir l'UUID sur ce système de fichier pourrait prendre du temps."
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3196
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "L'UUID ne peut être changé que lorsque le système\n"
 "de fichiers et démonté.\n"
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
-msgstr ""
-"Si vous utiliser seulement des noyaux plus récents que v4.4, lancez "
-"« tune2fs -O metadata_csum_seed » et relancez cette commande.\n"
-
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr ""
-"Définir l'UUID sur un système de fichier avec somme de contrôle pourrait "
-"prendre du temps."
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
+msgstr "Si vous utiliser seulement des noyaux plus récents que v4.4, lancez « tune2fs -O metadata_csum_seed » et relancez cette commande.\n"
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "Format UUID invalide\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 msgid "Need to update journal superblock.\n"
 msgstr "Doit mettre à jour le superbloc du journal\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 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:3133
+#: misc/tune2fs.c:3274
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -7060,89 +6968,63 @@ 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:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Définition de la taille des i-noeuds à %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 msgid "Failed to change inode size\n"
 msgstr "N'a pu changer la taille d'i-noeud \n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Définition de la taille de « stride » à %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Définition de la taille du « stripe width » à %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3322
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Définition des options de montage étendues par défaut à « %s »\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-"Avertissement: Le journal est sale. Vous voulez peut-être rejouer le "
-"journal\n"
-"ainsi:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"et ensuite relancer cette commande. Sinon, tout changement effectué "
-"pourrait\n"
-"être écrasé par la récupération du journal.\n"
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr "Récupération du journal.\n"
-
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr "<on procède>\n"
 
-#: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Procéder malgré tout (ou attendre %d secondes) ? (o,n) "
+#: misc/util.c:105
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "Procéder malgré tout (ou attendre %d secondes pour procéder) ? (o,N) "
 
-#: misc/util.c:108
-#, fuzzy
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
-msgstr "Procéder malgré tout ? (o,n) "
+msgstr "Procéder malgré tout ? (o,N) "
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 "l'exécution de mke2fs est tout de même forcée.\n"
 "Espérons que /etc/mtab est incorrect.\n"
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr "ne fera pas un %s ici !\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr "l'exécution de mke2fs est tout de même forcée.\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr "N'a pu allouer de la mémoire pour analyser les options du journal !\n"
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
@@ -7151,7 +7033,7 @@ msgstr ""
 "\n"
 "N'a pu trouver le périphérique de journal correspondant à %s\n"
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -7182,7 +7064,7 @@ msgstr ""
 "système de fichiers.\n"
 "\n"
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
@@ -7190,7 +7072,7 @@ msgstr ""
 "\n"
 "Le système de fichiers est trop petit pour un journal\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -7201,7 +7083,7 @@ msgstr ""
 "La taille demandée du journal est de %d blocs ; elle doit être\n"
 "entre 1024 et 10240000 blocs. Arrêt immédiat.\n"
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
@@ -7209,7 +7091,7 @@ msgstr ""
 "\n"
 "La taille du journal est trop grande pour le système de fichiers.\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
@@ -7364,44 +7246,42 @@ msgstr "#\tNb=%llu, Taille=%llu, Curseur=%llu, Tri
 #: resize/main.c:49
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
-"Utilisation : %s [-d drapeaux_de_debug] [-f] [-F] [-M] [ -P] [-p] "
-"périphérique [-b|-s|nouvelle_taille] [-z fichier_annulation]\n"
+"Utilisation : %s [-d drapeaux_de_debug] [-f] [-F] [-M] [ -P] [-p] périphérique [-b|-s|nouvelle_taille] [-S RAID-stride] [-z fichier_annulation]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Extension de la table d'i-noeuds"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Relocalisation de blocs"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Examen de la table d'i-noeuds"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Mise à jour des références d'i-noeuds"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Déplacement de la table d'i-noeuds"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Passe inconnue ?!?!"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Début de la passe %d (max = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7414,17 +7294,17 @@ msgstr ""
 "voulez continuer malgré tout.\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "lors de l'ouverture de %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "lors de la récupérartion de l'état de %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7433,30 +7313,30 @@ msgstr ""
 "SVP exécutez « e2fsck -f %s » d'abord.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, 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:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "taille d'i-noeud invalide - %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 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:528
+#: resize/main.c:534
 #, 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:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Longueur « stride » invalide"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7467,38 +7347,28 @@ msgstr ""
 "Vous avez demandé une nouvelle taille de %llu blocs.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr "Ne peut pas positionner et dépositionner la fonctionnalité 64-bits.\n"
 
-#: resize/main.c:569
-#, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
-msgstr ""
-"Ne peut pas changer la fonctionnalité sur un système de fichiers qui est "
-"plus grand que 2^32 blocs.\n"
-
 #: resize/main.c:575
 #, c-format
-msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
-msgstr ""
-"La fonctionalité de 64 bits ne peut être changée lorsque le système de "
-"fichiers est monté.\n"
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
+msgstr "Ne peut pas changer la fonctionnalité sur un système de fichiers qui est plus grand que 2^32 blocs.\n"
 
 #: resize/main.c:581
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
-msgstr ""
-"Veuillez activer la fonctionnalité des extents avec tune2fs avant d'activer "
-"la fonctionalité 64-bits.\n"
+msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
+msgstr "La fonctionalité de 64 bits ne peut être changée lorsque le système de fichiers est monté.\n"
 
 #: resize/main.c:587
 #, c-format
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
+msgstr "Veuillez activer la fonctionnalité des extents avec tune2fs avant d'activer la fonctionalité 64-bits.\n"
+
+#: resize/main.c:593
+#, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
@@ -7506,39 +7376,37 @@ msgstr ""
 "Le système de fichiers a déjà %llu blocs (%dk). Rien à faire !\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "Le système de fichiers est déjà 64 bits.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "Le système de fichiers est déjà 32 bits.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "Conversion du système de fichiers en 64 bits.\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "Conversion du système de fichiers en 32 bits.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, 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"
+msgstr "En train de redimensionner le système de fichiers sur %s à %llu (%dk) blocs.\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "lors de la tentative de changement de taille de %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7547,7 +7415,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:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7556,22 +7424,19 @@ msgstr ""
 "Le système de fichiers sur %s a maintenant une taille de %llu blocs (%dk).\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "lors de la troncature de %s"
 
 #: resize/online.c:81
 msgid "kernel does not support online resize with sparse_super2"
-msgstr ""
-"Le noyau ne supporte pas le changement de taille en ligne avec sparse_super2"
+msgstr "Le noyau ne supporte pas le changement de taille en ligne avec sparse_super2"
 
 #: resize/online.c:86
 #, 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:90
 msgid "On-line shrinking not supported"
@@ -7579,8 +7444,7 @@ msgstr "La r
 
 #: resize/online.c:114
 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:122
 msgid "Not enough reserved gdt blocks for resizing"
@@ -7588,8 +7452,7 @@ msgstr "Pas assez de blocs gdt r
 
 #: resize/online.c:129
 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"
+msgstr "Le noyau ne sait pas retailler un système de fichiers d'une telle taille"
 
 #: resize/online.c:137
 #, c-format
@@ -7616,64 +7479,54 @@ msgstr "Le noyau ne supporte pas le changement de taille en ligne"
 #: resize/online.c:220
 #, 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:230
 msgid "While trying to extend the last group"
 msgstr "Lors de la tentative d'étendre le dernier groupe"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Lors de la tentative d'ajout du groupe numéro %d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, 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:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "le nombre d'i-noeuds (%llu) doit être plus petit que %u"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "le nombre d'i-noeuds (%llu) doit être plus petit que %u\n"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "blocs réservés"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "blocs de métadonnées"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr "nouveaux blocs de métadonnées"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
-msgstr ""
-"Ne devrait jamais arriver ! Pas de sb dans le dernier super_sparse bg ?\n"
+msgstr "Ne devrait jamais arriver ! Pas de sb dans le dernier super_sparse bg ?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
-msgstr ""
-"Ne devrait jamais arriver ! old_desc inattendu dans super_sparse bg ?\n"
+msgstr "Ne devrait jamais arriver ! old_desc inattendu dans super_sparse bg ?\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 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.43.4-WIP"
-msgstr "Bibliothèque EXT2FS version 1.43"
+msgid "EXT2FS Library version 1.45.3"
+msgstr "Bibliothèque EXT2FS version 1.45.3"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -7721,8 +7574,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"
@@ -7758,8 +7610,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"
@@ -7775,13 +7626,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"
@@ -7821,15 +7670,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"
@@ -7885,13 +7730,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"
@@ -7955,9 +7798,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"
@@ -8113,9 +7954,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"
@@ -8231,14 +8070,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"
@@ -8249,8 +8085,8 @@ msgid "MMP: device currently active"
 msgstr "MMP : périphérique actuellement actif"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
-msgstr "MMP : fsck en cours d'exécution"
+msgid "MMP: e2fsck being run"
+msgstr "MMP : e2fsck en cours d'exécution"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
@@ -8282,8 +8118,7 @@ msgstr "La somme de contr
 
 #: lib/ext2fs/ext2_err.c:159
 msgid "Extent block checksum does not match extent block"
-msgstr ""
-"La somme de contrôle du block d'extent ne correspond pas au bloc d'extent"
+msgstr "La somme de contrôle du block d'extent ne correspond pas au bloc d'extent"
 
 #: lib/ext2fs/ext2_err.c:160
 msgid "Directory block does not have space for checksum"
@@ -8291,14 +8126,11 @@ msgstr "Le bloc de r
 
 #: lib/ext2fs/ext2_err.c:161
 msgid "Directory block checksum does not match directory block"
-msgstr ""
-"La somme de contrôle du bloc de répertoire ne correspond pas au bloc de "
-"répertoire"
+msgstr "La somme de contrôle du bloc de répertoire ne correspond pas au bloc de répertoire"
 
 #: lib/ext2fs/ext2_err.c:162
 msgid "Extended attribute block checksum does not match block"
-msgstr ""
-"La somme de contrôle du bloc d'attribut étendu ne correspond pas au bloc"
+msgstr "La somme de contrôle du bloc d'attribut étendu ne correspond pas au bloc"
 
 #: lib/ext2fs/ext2_err.c:163
 msgid "Superblock checksum does not match superblock"
@@ -8309,8 +8141,8 @@ msgid "Unknown checksum algorithm"
 msgstr "Algorithme de somme de contrôle inconnu"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr "La somme de contrôle du bloc MMP ne correspond pas au bloc MMP"
+msgid "MMP block checksum does not match"
+msgstr "La somme de contrôle du bloc MMP ne correspond pas"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
@@ -8322,9 +8154,7 @@ msgstr "La somme de contr
 
 #: lib/ext2fs/ext2_err.c:168
 msgid "Cannot iterate data blocks of an inode containing inline data"
-msgstr ""
-"Ne peut pas itérer sur les blocs de données d'un i-noeud contenant des "
-"données en ligne"
+msgstr "Ne peut pas itérer sur les blocs de données d'un i-noeud contenant des données en ligne"
 
 #: lib/ext2fs/ext2_err.c:169
 msgid "Extended attribute has an invalid name length"
@@ -8352,8 +8182,7 @@ msgstr "Espace insuffisant pour stocker les donn
 
 #: lib/ext2fs/ext2_err.c:175
 msgid "Filesystem is missing ext_attr or inline_data feature"
-msgstr ""
-"Il manque au système de fichier la fonctionnalité ext_attr ou inline_data"
+msgstr "Il manque au système de fichier la fonctionnalité ext_attr ou inline_data"
 
 #: lib/ext2fs/ext2_err.c:176
 msgid "Inode doesn't have inline data"
@@ -8404,9 +8233,12 @@ msgid "The journal superblock is corrupt"
 msgstr "Le superbloc du journal est corrompu"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "L'i-noeud de changement de taille est corrompu"
+msgstr "L'i-noeud est corrompu"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr "L'i-noeud contenant la valeur d'attribut étendu est corrompu"
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8601,5 +8433,30 @@ msgstr "%s contient un syst
 msgid "%s contains `%s' data\n"
 msgstr "%s contient une donnée « %s »\n"
 
-#~ msgid "Please run e2fsck on the filesystem.\n"
-#~ msgstr "SVP exécutez e2fsck sur le système de fichiers.\n"
+#~ msgid "while opening directory \"%s\""
+#~ msgstr "lors de l'ouverture du répertoire « %s »"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** Erreurs de somme de contrôle détectées dans le système de fichier !  Lancez e2fsck maintenant !\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** Erreurs de somme de contrôle détectées dans les bitmaps !  Lancez e2fsck maintenant !\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s : %s : erreur lors de la lecture des bitmaps : %s\n"
index 124a72f..0705511 100644 (file)
Binary files a/po/hu.gmo and b/po/hu.gmo differ
index 93b5b9f..50a20e9 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -4,6 +4,7 @@
 #     2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by Theodore Ts'o.
 # Theodore Ts'o <tytso@mit.edu>, 2010.
 # Gabor Kelemen <kelemeng at gnome dot hu>, 2016.
+# Balázs Úr <urbalazs@gmail.com>, 2017, 2018.
 #. 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,
 #. there is an @-expansion, where strings like "@i" are expanded to
@@ -48,7 +49,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.43.1\n"
+"Project-Id-Version: e2fsprogs 1.43.5\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2016-06-12 14:56+0200\n"
-"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
+"POT-Creation-Date: 2018-08-18 21:03-0400\n"
+"PO-Revision-Date: 2018-01-21 15:55+0100\n"
+"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
 "Language: hu\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.5\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Lokalize 1.2\n"
 "Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "A(z) %u. hibás blokk kívül esik a tartományon; mellőzve.\n"
@@ -94,11 +96,12 @@ msgstr "a hibás blokk inode épségének ellenőrzése közben"
 msgid "while reading the bad blocks inode"
 msgstr "a hibás blokk inode olvasása közben"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1550
+#: e2fsck/unix.c:1664 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1404
+#: misc/e2image.c:1588 misc/e2image.c:1609 misc/mke2fs.c:236
+#: misc/tune2fs.c:2837 misc/tune2fs.c:2931 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "a(z) %s megnyitására tett kísérlet közben"
@@ -108,7 +111,7 @@ msgstr "a(z) %s megnyitására tett kísérlet közben"
 msgid "while trying popen '%s'"
 msgstr "a(z) „%s” megnyitására tett kísérlet közben"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "a hibás blokkok listájának olvasásakor fájlból"
 
@@ -122,6 +125,11 @@ msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr ""
 "Figyelem: a(z) %u. blokk illegális a hibás blokkok inode-jában. Törölve.\n"
 
+#: e2fsck/dirinfo.c:331
+#, fuzzy
+msgid "while freeing dir_info tdb file"
+msgstr "a visszavonási fájl olvasásakor"
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -197,12 +205,12 @@ msgstr "A BLKFLSBUF ioctl nem támogatott! A pufferek nem üríthetők.\n"
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Használat: %s [-F] [-I inode_puffer_blokkok] eszköz\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1075
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "%s megnyitásakor ürítésre"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1081 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "%s ürítésére tett kísérlet közben"
@@ -212,11 +220,11 @@ msgstr "%s ürítésére tett kísérlet közben"
 msgid "while trying to open '%s'"
 msgstr "„%s” megnyitására tett kísérlet közben"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1297
 msgid "while opening inode scan"
 msgstr "inode vizsgálat megnyitása közben"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1316
 msgid "while getting next inode"
 msgstr "következő inode lekérése közben"
 
@@ -225,359 +233,380 @@ msgstr "következő inode lekérése közben"
 msgid "%u inodes scanned.\n"
 msgstr "%u inode vizsgálva.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "napló szuperblokkjának olvasása\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: nem található érvényes napló-szuperblokk\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: a napló túl rövid\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3786
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: napló helyreállítása\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: nem próbálom helyreállítani a naplót írásvédett módban\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "%s újranyitására tett kísérlet közben"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "aextended attribute"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Aerror allocating"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bblock"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bbitmap"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "ccompress"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Cconflicts with some other fs @b"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "ddirectory"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Ddeleted"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "eentry"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e '%Dn' in %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "ffilesystem"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Ffor @i %i (%Q) is"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "ggroup"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "hHTREE @d @i"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "iinode"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Iillegal"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jjournal"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Lis a link"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mmultiply-claimed"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "ninvalid"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oorphaned"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pproblem in"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qquota"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "rroot @i"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "sshould be"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssuper@b"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "uunattached"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vdevice"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xextent"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "zzero-length"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<A NULL inode>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<A hibás blokkok inode>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<A felhasználói kvóta inode>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<A csoportkvóta inode>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<A rendszertöltő inode>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<A könyvtár visszaállítása inode>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<A csoportleíró inode>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<A napló inode>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<9. fenntartott inode>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<10. fenntartott inode>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "szabályos fájl"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "könyvtár"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "karakteres eszköz"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "blokkos eszköz"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "elnevezett adatcsatorna"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "szimbolikus link"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "foglalat"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "ismeretlen fájltípus 0%o móddal"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "indirekt blokk"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "dupla indirekt blokk"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "tripla indirekt blokk"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "fordító blokk"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "blokk #"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "felhasználó"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "csoport"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr ""
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "ismeretlen kvótatípus"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "többszörösen lefoglalt inode térkép"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "belső hiba: nem található a dup_blk ehhez: %llu\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "visszaadva a clone_file_block-ból"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr "belső hiba: nem kereshető ki az EA blokkrekord ehhez: %llu"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "belső hiba: nem kereshető ki az EA inode rekord ehhez: %u"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:356
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr ""
+
+#: e2fsck/pass1.c:774 e2fsck/pass2.c:1005
 msgid "reading directory block"
 msgstr "könyvtárblokk olvasása"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1223
 msgid "in-use inode map"
 msgstr "használatban lévő inode-térkép"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1234
 msgid "directory inode map"
 msgstr "könyvtár inode-térkép"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1244
 msgid "regular file inode map"
 msgstr "szabályos fájl inode-térkép"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1253 misc/e2image.c:1272
 msgid "in-use block map"
 msgstr "használatban lévő blokktérkép"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1262
 msgid "metadata block map"
 msgstr "metaadat-blokktérkép"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1324
 msgid "opening inode scan"
 msgstr "inode-vizsgálat megkezdése"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1362
 msgid "getting next inode from scan"
 msgstr "következő inode lekérése a vizsgálattól"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2066
 msgid "Pass 1"
 msgstr "1. lépés"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2127
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "%u. inode indirekt blokkjainak olvasása"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2178
 msgid "bad inode map"
 msgstr "hibás inode-térkép"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2218
 msgid "inode in bad block map"
 msgstr "inode a hibás blokktérképben"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2238
 msgid "imagic inode map"
 msgstr "imagic inode-térkép"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2269
 msgid "multiply claimed block map"
 msgstr "többszörösen lefoglalt blokktérkép"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2394
 msgid "ext attr block map"
 msgstr "ext attr blokktérkép"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3637
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr ""
 "%6lu(%c): a várt %6lu helyett %6lu fizikai érkezett (blokkszám: %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4054
 msgid "block bitmap"
 msgstr "blokkbittérkép"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4060
 msgid "inode bitmap"
 msgstr "inode bittérkép"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4066
 msgid "inode table"
 msgstr "inode tábla"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "2. lépés"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1077 e2fsck/pass2.c:1244
 msgid "Can not continue."
 msgstr "Nem folytatható."
 
@@ -597,19 +626,19 @@ msgstr "3. lépés"
 msgid "inode loop detection bitmap"
 msgstr "inode-ciklust felismerő bittérkép"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "4. lépés"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "5. lépés"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr "check_inode_bitmap_checksum: Memóriafoglalási hiba"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr "check_block_bitmap_checksum: Memóriafoglalási hiba"
 
@@ -774,18 +803,18 @@ msgid "WILL RECREATE"
 msgstr "ÚJRA LÉTRE LESZ HOZVA"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:112
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "%g csoport blokkbittérképe nincs a csoportban (%b blokk)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:116
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "%g csoport inode bittérképe nincs a csoportban (%b blokk)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:121
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -802,7 +831,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:127
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -829,7 +858,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:138
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -842,7 +871,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:145
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -852,18 +881,18 @@ msgstr ""
 "Az e2fsck ezen verziója nem támogatja a blokkmérettől eltérő darabméretet.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:152
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "A szuperblokk blocks_per_group értéke %b, %c helyett\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:157
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "A szuperblokk first_data_block %b, %c helyett\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:162
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -871,7 +900,7 @@ msgstr ""
 "A fájlrendszernek nincs UUID-je; létrehozok egyet.\n"
 "\n"
 
-#: e2fsck/problem.c:165
+#: e2fsck/problem.c:167
 #, c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
@@ -889,50 +918,50 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:176
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Sérülés a szuperblokkban. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
+#: e2fsck/problem.c:181
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Hiba a fizikai eszköz méretének meghatározásakor: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:186
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "az inode-szám a szuperblokkban %i, %j helyett.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:190
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "A Hurd nem támogatja a fájltípus-jellemzőt.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
+#: e2fsck/problem.c:195
 #, c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "A szuperblokk naplója érvénytelen (%i. inode).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:200
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr ""
 "A külső napló több fájlrendszer-felhasználóval rendelkezik (nem "
 "támogatott).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:205
 msgid "Can't find external @j\n"
 msgstr "Nem található külső napló\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:210
 msgid "External @j has bad @S\n"
 msgstr "A külső napló szuperblokkja hibás\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:215
 msgid "External @j does not support this @f\n"
 msgstr "A külső napló nem támogatja ezt a fájlrendszert\n"
 
@@ -940,7 +969,7 @@ msgstr "A külső napló nem támogatja ezt a fájlrendszert\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:220
 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 "
@@ -953,88 +982,88 @@ msgstr ""
 "Az is lehet, hogy a napló szuperblokkja sérült.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:228
 msgid "@j @S is corrupt.\n"
 msgstr "A napló szuperblokkja sérült.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:233
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "A szuperblokk has_journal jelzője tiszta, de jelen van napló.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:238
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr ""
 "A szuperblokk needs_recovery jelzője be van állítva, de nincs jelen napló.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:243
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr ""
 "A szuperblokk needs_recovery jelzője tiszta, de a napló adatokat tartalmaz.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:248
 msgid "Clear @j"
 msgstr "Napló tisztítása"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:253 e2fsck/problem.c:764
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr ""
 "A fájlrendszer jellemzőjelzői be vannak állítva, de 0 revíziójú "
 "fájlrendszer. "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:258
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s árva inode: %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:263
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "Illegális %B (%b) található az árva %i. inode-ban.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:268
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Már megtisztított %B (%b) található az árva %i. inode-ban.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
+#: e2fsck/problem.c:273
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "Illegális árva inode (%i.) a szuperblokkban.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
+#: e2fsck/problem.c:278
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "Illegális árva inode (%i.) az árva inode-ok listájában.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:283
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
 "A napló szuperblokkján ismeretlen, csak olvasható jellemzőjelző van "
 "beállítva.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:288
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
 "A napló szuperblokkján ismeretlen, inkompatibilis jellemzőjelző van "
 "beállítva.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:293
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "A naplóverziót ez az e2fsck nem támogatja.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
+#: e2fsck/problem.c:298
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -1045,7 +1074,7 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
+#: e2fsck/problem.c:303
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -1057,7 +1086,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:308
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1068,12 +1097,12 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:314
 msgid "Run @j anyway"
 msgstr "Napló futtatása mindenképp"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:319
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
 "A helyreállítási jelző nincs beállítva a tartalék szuperblokkban, emiatt a\n"
@@ -1081,7 +1110,7 @@ msgstr ""
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:324
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1091,7 +1120,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:330
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1101,18 +1130,18 @@ msgstr ""
 "értéke %N; ám nulla kellene legyen. "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:336
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr "Resize_inode nincs engedélyezve, de az átméretezési inode nem nulla. "
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:341
 msgid "Resize @i not valid.  "
 msgstr "Az átméretezési inode nem érvényes. "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:346
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1122,7 +1151,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:351
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1131,14 +1160,14 @@ msgstr ""
 "(%t, most = %T) a jövőben van.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
+#: e2fsck/problem.c:356
 #, c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "A szuperblokktipp a külső szuperblokkhoz %X kellene legyen. "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:361
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1147,12 +1176,12 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:366
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "%g csoportleíró ellenőrzőösszege %04x a várt %04y helyett. "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:371
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr ""
@@ -1160,28 +1189,28 @@ msgstr ""
 "nélkül.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:376
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr "%g csoportleíró használaton kívüli inode száma érvénytelen: %b. "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:381
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Az utolsó csoportblokk-bittérkép inicializálatlan. "
 
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:386
 #, c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "A(z) %i. naplótranzakció sérült, az újrajátszás megszakítva.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:391
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "A test_fs jelző beállítva (és az ext4 elérhető). "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:396
 msgid ""
 "@S last mount time is in the future.\n"
 "\t(by less than a day, probably due to the hardware clock being incorrectly "
@@ -1193,7 +1222,7 @@ msgstr ""
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:402
 msgid ""
 "@S last write time is in the future.\n"
 "\t(by less than a day, probably due to the hardware clock being incorrectly "
@@ -1203,50 +1232,48 @@ msgstr ""
 "\t(egy napnál kevesebbel, valószínűleg a hardveróra hibás beállítása miatt)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:408
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr "Legalább egy blokkcsoportleíró ellenőrzőösszege érvénytelen. "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:413
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "A szabad inode-ok számának beállítása erre: %j (volt: %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:418
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "A szabad blokkok számának beállítása erre: %c (volt: %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr ""
-"A kvóta inode: %i (%Q) megjelölése rejtettként.\n"
-"\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:423
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "%U kvóta i-node %i (%Q) elrejtése.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:428
 msgid "@S has invalid MMP block.  "
 msgstr "A szuperblokk érvénytelen MMP-blokkal rendelkezik. "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:433
 msgid "@S has invalid MMP magic.  "
 msgstr "A szuperblokk érvénytelen MMP-magic bájtokkal rendelkezik. "
 
-#: e2fsck/problem.c:433
+#: e2fsck/problem.c:438
 #, c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2: %m\n"
 
-#: e2fsck/problem.c:438
+#: e2fsck/problem.c:443
 #, c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
+#: e2fsck/problem.c:449
 msgid ""
 "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
 "simultaneously."
@@ -1254,166 +1281,185 @@ msgstr ""
 "A szuperblokk metadata_csum jellemzője elavulttá teszi az uninit_bg-t. "
 "Mindkét jellemző nem lehet egyszerre beállítva."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:455
+#, fuzzy
+msgid "@S MMP @b checksum does not match.  "
 msgstr ""
-"A szuperblokk MMP blokk ellenőrzőösszege nem felel meg az MMP blokknak. "
+"A szuperblokk MMP blokk ellenőrzőösszege nem felel meg az MMP blokknak.  "
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:460
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr ""
 "A 64 bites szuperblokkú fájlrendszereknek extentekre van szükségük a teljes "
-"lemez eléréséhez. "
+"lemez eléréséhez.  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:465
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "A First_meta_bg túl nagy. (%N, a maximum érték: %g). "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:470
 msgid "External @j @S checksum does not match @S.  "
 msgstr ""
 "A külső napló szuperblokk ellenőrzőösszege nem felel meg a szuperblokknak. "
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:475
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr ""
 "a szuperblokk metadata_csum_seed jellemzője nem szükséges a metadata_csum "
 "nélkül."
 
-#: e2fsck/problem.c:477
+#: e2fsck/problem.c:480
 #, c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr ""
 "Hiba a kvóta kontextus előkészítésekor a támogató programkönyvtárban: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:485
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Hibás szükséges további isize ebben: @S (%N).  "
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:490
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Hibás kívánt további isize ebben: @S (%N).  "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:495
+msgid "Invalid %U @q @i %i.  "
+msgstr "Érvénytelen %U kvóta inode: %i.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:500
+msgid "@S would have too many inodes (%N).\n"
+msgstr ""
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:505
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:513
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "1. lépés: inode-ok, blokkok és méretek ellenőrzése\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:517
 msgid "@r is not a @d.  "
 msgstr "a gyökér inode nem könyvtár. "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:522
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr ""
 "a gyökér inode dtime értéke be van állítva (valószínűleg a régi mke2fs "
 "miatt). "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:527
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "A(z) %i. fenntartott inode (%Q) érvénytelen móddal rendelkezik. "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:532
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "a(z) %i. törölt inode dtime-ja nulla. "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:537
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "a(z) %i. inode használatban van, de a dtime be van állítva. "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:542
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "a(z) %i. inode nulla hosszúságú könyvtár. "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:547
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "%g csoport blokkbittérképe itt: %b más fájlrendszerblokkal ütközik.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:552
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "%g csoport inode bittérképe itt: %b más fájlrendszerblokkal ütközik.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:557
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "%g csoport inode táblája itt: %b más fájlrendszerblokkal ütközik.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:562
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "%g csoport blokkbittérképe (%b) hibás. "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:567
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "%g csoport inode bittérképe (%b) hibás. "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:572
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "%i. inode: i_size=%Is, de %N kellene legyen. "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:577
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "%i. inode: i_blocks=%Ib, de %N kellene legyen. "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:582
 msgid "@I %B (%b) in @i %i.  "
 msgstr "illegális %B (%b) a(z) %i. inode-ban. "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:587
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "A %B (%b) átfedi a fájlrendszer metaadatait a(z) %i. inode-ban. "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "%i. inode illegális "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Túl sok illegális blokk a(z) %i. inode-ban.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "illegális %B (%b) a hibás blokk inode-ban. "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:607
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "A hibás blokk inode illegális blokkokal rendelkezik. "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:612
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Többször szereplő vagy hibás blokk van használatban!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:617
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "A hibás %b blokk hibásblokk-inode indirekt blokként van használatban. "
 
@@ -1421,7 +1467,7 @@ msgstr "A hibás %b blokk hibásblokk-inode indirekt blokként van használatban
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:622
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1435,7 +1481,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:629
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1446,7 +1492,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:634
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1457,130 +1503,130 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:640
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Az elsődleges szuperblokk (%b) a hibás blokkok listáján van.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:645
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 "Az elsődleges csoportleírókban lévő blokk (%b) a hibás blokkok listáján van\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:651
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Figyelmeztetés: A(z) %g csoport szuperblokkja (%b) hibás.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:657
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 "Figyelmeztetés: A(z) %g csoport csoportleíróinak másolata hibás blokkot (%b) "
 "tartalmaz.\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:663
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 "Programozási hiba? A(z) %b. blokk ok nélkül lefoglalva a process_bad_block-"
 "ban.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:669
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr ""
 "hiba %N folytonos blokk lefoglalásakor a(z) %g. blokkcsoportban %s számára: "
 "%m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:674
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "hiba a blokkpuffer lefoglalásakor %s áthelyezéséhez\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:679
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "%g csoportból %s áthelyezése innen: %b ide: %c…\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:684
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "%g csoportból %s áthelyezése ide: %c…\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:689
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Figyelmeztetés: nem olvasható %b blokk ebből: %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:694
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Figyelmeztetés: nem írható %b blokk ehhez: %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:699 e2fsck/problem.c:1776
 msgid "@A @i @B (%N): %m\n"
 msgstr "hiba az inode bittérkép lefoglalásakor (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:704
 msgid "@A @b @B (%N): %m\n"
 msgstr "hiba a blokkbittérkép lefoglalásakor (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:709
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "hiba az icount linkinformációk lefoglalásakor: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:714
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "hiba a könyvtárblokktömb lefoglalásakor: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
+#: e2fsck/problem.c:719
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Hiba az inode-ok vizsgálatakor (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
+#: e2fsck/problem.c:724
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Hiba a(z) %i. inode blokkjainak bejárásakor: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:729
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr "Hiba az inode száminformációinak tárolásakor (inode=%i, szám=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:734
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 "Hiba a könyvtárblokk-információk tárolásakor (inode=%i, blokk=%b, szám=%N): "
 "%m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
+#: e2fsck/problem.c:740
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Hiba a(z) %i. inode olvasásakor: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:748
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "a(z) %i. inode imagic jelzője beállítva. "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:753
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1590,7 +1636,7 @@ msgstr ""
 "megváltoztathatatlan vagy csak hozzáfűzés jelzője be van állítva. "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
+#: e2fsck/problem.c:759
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
@@ -1598,103 +1644,103 @@ msgstr ""
 "méretű. "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:769
 msgid "@j @i is not in use, but contains data.  "
 msgstr "a napló inode nincs használatban, de adatokat tartalmaz. "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:774
 msgid "@j is not regular file.  "
 msgstr "a napló nem normál fájl. "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:779
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "a(z) %i. inode része az elárvult inode-ok listájának. "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:785
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr "egy sérült, árva láncolt lista részét alkotó inode-ok megtalálva. "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:790
 msgid "@A refcount structure (%N): %m\n"
 msgstr "hiba a refcount struktúra lefoglalásakor (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:795
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Hiba a bővített attribútumblokk (%b) olvasásakor a(z) %i. inode-hoz."
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:800
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "a(z) %i. inode bővített attribútumblokkja (%b) hibás ."
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:805
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Hiba a bővített %b attribútumblokk olvasásakor (%m)."
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:810
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "a(z) %b bővített attribútumblokk referenciaszáma %r a várt %N helyett."
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:815
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Hiba a bővített attribútumblokk (%b) írásakor (%m)."
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:820
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "a bővített attribútumblokk (%b) h_blocks értéke > 1."
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:825
 msgid "@A @a region allocation structure.  "
 msgstr ""
 "hiba a bővített attribútumrégió foglalási struktúrájának lefoglalásakor. "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:830
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "a bővített attribútumblokk (%b) sérült (foglalásütközés)."
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:835
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "a bővített attribútumblokk (%b) sérült (érvénytelen név)-"
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:840
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "a bővített attribútumblokk (%b) sérült (érvénytelen érték)."
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
+#: e2fsck/problem.c:845
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "a(z) %i. inode túl nagy. "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:849
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "A %B (%b) miatt a könyvtár túl nagy. "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:854
 msgid "%B (%b) causes file to be too big.  "
 msgstr "A %B (%b) miatt a fájl túl nagy. "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:859
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "A %B (%b) miatt a szimlink túl nagy. "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:864
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
@@ -1702,24 +1748,24 @@ msgstr ""
 "fájlrendszeren.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
+#: e2fsck/problem.c:869
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "a(z) %i inode INDEX_FL jelzője be van állítva, de nem könyvtár.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
+#: e2fsck/problem.c:874
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "a(z) %i. HTREE könyvtár inode gyökér csomópontja érvénytelen.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:879
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "a(z) %i. HTREE könyvtár hash verziója nem támogatott (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
+#: e2fsck/problem.c:884
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr ""
@@ -1727,13 +1773,13 @@ msgstr ""
 "használ.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:889
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "a(z) %i. HTREE könyvtár inode famélysége (%N) túl nagy\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:895
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1742,58 +1788,58 @@ msgstr ""
 "fájlrendszer metaadataival."
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
+#: e2fsck/problem.c:901
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Az átméretezési inode (újra)létrehozása sikertelen: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:906
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "a(z) %i. inode extra mérete (%IS) érvénytelen\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:911
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "a(z) %i. inode bővített attribútumának névhossza (%N) érvénytelen\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:916
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr ""
 "a(z) %i. inode bővített attribútumának értékeltolása (%N) érvénytelen\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:921
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr ""
 "a(z) %i. inode bővített attribútumának értékblokkja (%N) érvénytelen (0 kell "
 "legyen)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:926
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "a(z) %i. inode bővített attribútumának értékmérete (%N) érvénytelen\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:931
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "a(z) %i. inode bővített attribútumának hashe (%N) érvénytelen\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:936
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "a(z) %i. inode egy %It, de úgy tűnik, valójában egy könyvtár.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
+#: e2fsck/problem.c:941
 #, c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Hiba az extent fa olvasásakor a(z) %i. inode-ban: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:946
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1803,7 +1849,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:952
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1813,7 +1859,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:957
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1822,7 +1868,7 @@ msgstr ""
 "\t(logikai blokk: %c, fizikai blokk: %b, érvénytelen hossz: %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
+#: e2fsck/problem.c:962
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr ""
@@ -1830,26 +1876,26 @@ msgstr ""
 "fájlrendszeren.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
+#: e2fsck/problem.c:967
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr ""
 "a(z) %i. inode extent formátumú, de a szuperblokkban nincs EXTENTS jellemző\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
+#: e2fsck/problem.c:972
 #, c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "a(z) %i. inode-ból hiányzik az EXTENT_FL, de extent formátumú\n"
 
-#: e2fsck/problem.c:956
+#: e2fsck/problem.c:977
 #, c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "a(z) %i. gyors szimlinkhez be van állítva az EXTENT_FL."
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:982
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1858,42 +1904,42 @@ msgstr ""
 "\t(érvénytelen logikai blokk: %c, fizikai blokk: %b, hossz: %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:986
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr ""
 "a(z) %i. inode érvénytelen extent csomópontot tartalmaz (%b. blk, %c. lblk)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
+#: e2fsck/problem.c:991
 #, c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr ""
 "Hiba a részfürt blokkbittérképének átalakításakor: %m\n"
 "\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
-msgstr "a kvóta inode nem normál fájl. "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:996
+msgid "@q @i is not regular file.  "
+msgstr "a kvóta inode nem normál fájl.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1001
 msgid "@q @i is not in use, but contains data.  "
 msgstr "a kvóta inode nincs használatban, de adatokat tartalmaz. "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1006
 msgid "@q @i is visible to the user.  "
 msgstr "a kvóta inode látható a felhasználó számára. "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1011
 msgid "The bad @b @i looks @n.  "
 msgstr "A hibás blokkok inode érvénytelennek tűnik. "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1016
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1902,13 +1948,13 @@ msgstr ""
 "\t(érvénytelen logikai blokk: %c, fizikai blokk: %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
+#: e2fsck/problem.c:1021
 #, c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "a(z) %i. inode látszólag szemetet tartalmaz. "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
+#: e2fsck/problem.c:1026
 #, c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr ""
@@ -1916,14 +1962,14 @@ msgstr ""
 "meg egy inode-nak. "
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
+#: e2fsck/problem.c:1031
 #, c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "a(z) %i. inode bővített attribútuma sérült (foglalásütközés). "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1039
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1933,7 +1979,7 @@ msgstr ""
 "\t(logikai blokk: %c, fizikai blokk: %b, hossz: %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1048
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
 msgstr ""
 "a(z) %i. inode bővített attribútumblokkja (%b) átmegy az ellenőrzéseken, de "
@@ -1941,7 +1987,7 @@ msgstr ""
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1053
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1951,7 +1997,7 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1059
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1960,7 +2006,7 @@ msgstr ""
 "\t(logikai blokk: %c, fizikai blokk: %b, hossz: %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
+#: e2fsck/problem.c:1064
 #, c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr ""
@@ -1968,7 +2014,7 @@ msgstr ""
 "INLINE_DATA jellemző\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
+#: e2fsck/problem.c:1069
 #, c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
 msgstr ""
@@ -1976,7 +2022,7 @@ msgstr ""
 "nem támogató fájlrendszeren.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
+#: e2fsck/problem.c:1076
 msgid ""
 "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
 msgstr ""
@@ -1984,13 +2030,13 @@ msgstr ""
 "kihagyása.\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1081
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr ""
 "a(z) %i. könyvtár inode %b blokkjának a(z) %c. blokknál kellene lennie. "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
+#: e2fsck/problem.c:1086
 #, c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr ""
@@ -1999,7 +2045,7 @@ msgstr ""
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1091
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
@@ -2009,7 +2055,7 @@ msgstr ""
 "Az 1B lépésben javításra kerül.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
+#: e2fsck/problem.c:1096
 #, c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
 msgstr ""
@@ -2018,7 +2064,7 @@ msgstr ""
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
+#: e2fsck/problem.c:1102
 #, c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
@@ -2028,7 +2074,7 @@ msgstr ""
 "extents vagy beágyazott adatok jelzője be van állítva. "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1108
 #, c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr ""
@@ -2036,7 +2082,7 @@ msgstr ""
 "van állítva.\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1113
 #, c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr ""
@@ -2044,7 +2090,7 @@ msgstr ""
 "jelző be van állítva.\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
 msgstr ""
@@ -2052,7 +2098,7 @@ msgstr ""
 "és az extent jelző be van állítva.\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
 msgstr ""
@@ -2060,19 +2106,19 @@ msgstr ""
 "i_block szemetet tartalmaz.\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1128
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr ""
 "A hibás blokkok listája szerint a hibás blokkok listájának inode-ja hibás. "
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1133
 msgid "@A @x region allocation structure.  "
 msgstr "hiba az extentrégió foglalási struktúrájának lefoglalásakor. "
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1138
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -2081,39 +2127,61 @@ msgstr ""
 "\t(logikai blokk: %c, érvénytelen fizikai blokk: %b, hossz: %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1143
 msgid "@A memory for encrypted @d list\n"
 msgstr "hiba memória foglalásakor a titkosított könyvtárlista számára\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1148
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr "a(z) %i. inode extentfája sekélyebb lehetne (%b; lehetne <= %c)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1153
 #, c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr ""
 "a(z) %i. inode a bigalloc fájlrendszeren nem lehet blokkleképezés alanya. "
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
+#: e2fsck/problem.c:1158
 #, c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "a(z) %i. inode sérült extentfejlécet tartalmaz. "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
+#: e2fsck/problem.c:1163
 #, c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr ""
 "A(z) %i. inode 2310-04-04 utáni időbélyegei valószínűleg 1970 előttiek.\n"
 
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1168
+#, fuzzy
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "a(z) %i. inode bővített attribútumblokkja (%b) hibás ."
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1174
+#, fuzzy
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr ""
+"a(z) %i. inode beágyazott adatokat tartalmaz, de a szuperblokkban nincs "
+"INLINE_DATA jellemző\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1179
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1187
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2125,49 +2193,49 @@ msgstr ""
 "1B lépés: többszörösen birtokolt blokkok ismételt keresése\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
+#: e2fsck/problem.c:1193
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "többszörösen birtokolt blokkok a(z) %i. inode-ban:"
 
-#: e2fsck/problem.c:1172
+#: e2fsck/problem.c:1208
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Hiba az inode-ok vizsgálatakor (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
+#: e2fsck/problem.c:1213
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "hiba az inode bittérkép lefoglalásakor (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
+#: e2fsck/problem.c:1218
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Hiba a(z) %i. (%s) inode blokkjainak bejárásakor: %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1223 e2fsck/problem.c:1585
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 "Hiba a bővített attribútumblokk (%b) referenciaszámának módosításakor "
 "(inode: %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1233
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
 "1C lépés: többszörösen lefoglalt blokkokat tartalmazó könyvtárak keresése\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1239
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "1D lépés: többszörösen lefoglalt blokkok egyeztetése\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1244
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2176,18 +2244,18 @@ msgstr ""
 "  %r többszörösen lefoglalt blokkal rendelkezik, %N fájllal közösen:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1250
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q fájl (i. inode, módosítási idő: %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1255
 msgid "\t<@f metadata>\n"
 msgstr "\t<fájlrendszer-metaadatok>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1260
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2197,7 +2265,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1265
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2206,373 +2274,374 @@ msgstr ""
 "vannak.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
+#: e2fsck/problem.c:1278
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "A fájl nem klónozható: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1284
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "1E lépés: Extentfák optimalizálása\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
+#: e2fsck/problem.c:1289
 #, c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "A(z) %p (%i) extentfa optimalizálása sikertelen: %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1294
 msgid "Optimizing @x trees: "
 msgstr "Extentfák optimalizálása: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1309
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr "Belső hiba: a maximális extentfamélység túl nagy (%b, várt: %c).\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1314
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr "a(z) %i. inode extentfája (a(z) %b. szinten) lehetne rövidebb. "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1319
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr "a(z) %i. inode extentfája (a(z) %b. szinten) lehetne szűkebb. "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1326
 msgid "Pass 2: Checking @d structure\n"
 msgstr "2. lépés: könyvtárszerkezet ellenőrzése\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1331
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "érvénytelen inode szám a „.”-hoz a(z) %i. könyvtár inode-ban.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1336
 msgid "@E has @n @i #: %Di.\n"
 msgstr ""
 "a(z) „%Dn” bejegyzés itt: %p (%i) érvénytelen inode számot tartalmaz: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1341
 msgid "@E has @D/unused @i %Di.  "
 msgstr ""
 "a(z) „%Dn” bejegyzés itt: %p (%i) törölt/nem használt inode-ot tartalmaz: "
 "%Di. "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1346
 msgid "@E @L to '.'  "
 msgstr "a(z) „%Dn” bejegyzés itt: %p (%i) egy hivatkozás a „.”-ra "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1351
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr ""
 "a(z) „%Dn” bejegyzés itt: %p (%i) a hibás blokkban található %Di inode-ra "
 "mutat.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1356
 msgid "@E @L to @d %P (%Di).\n"
 msgstr ""
 "a(z) „%Dn” bejegyzés itt: %p (%i) egy hivatkozás a(z) %P (%Di) könyvtárra.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1361
 msgid "@E @L to the @r.\n"
 msgstr "a(z) „%Dn” bejegyzés itt: %p (%i) egy hivatkozás a gyökér inode-ra.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1366
 msgid "@E has illegal characters in its name.\n"
 msgstr ""
 "a(z) „%Dn” bejegyzés itt: %p (%i) neve illegális karaktereket tartalmaz.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
+#: e2fsck/problem.c:1371
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Hiányzó „.” a(z) %i könyvtár inode-ban.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
+#: e2fsck/problem.c:1376
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Hiányzó „..” a(z) %i könyvtár inode-ban.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1381
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr ""
 "A(z) %i. (%p) könyvtár inode-ban az első „%Dn.” bejegyzés (inode=%Di) „.” "
 "kellene legyen.\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1386
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr ""
 "A(z) %i. könyvtár inode-ban a második „%Dn.” bejegyzés (inode=%Di) „..” "
 "kellene legyen.\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1391
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr a(z) %i. (%Q) inode-hoz %IF, nulla kellene legyen.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1396
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl a(z) %i. (%Q) inode-hoz %If, nulla kellene legyen.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl a(z) %i. (%Q) inode-hoz %Id, nulla kellene legyen.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1401
+#, fuzzy
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_fsize a(z) %i. (%Q) inode-hoz %N, nulla kellene legyen.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1406
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag a(z) %i. (%Q) inode-hoz %N, nulla kellene legyen.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1411
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize a(z) %i. (%Q) inode-hoz %N, nulla kellene legyen.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1416
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "A(z) %i. inode (%Q) érvénytelen móddal (%Im) rendelkezik.\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1421
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "%i. könyvtár inode, %B, eltolás: %N: a könyvtár sérült\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1426
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "%i. könyvtár inode, %B, eltolás: %N: a fájlnév túl hosszú\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1431
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "a(z) %i könyvtár inode-ban egy lefoglalatlan %B van. "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
+#: e2fsck/problem.c:1436
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr ""
 "A „.” könyvtárbejegyzés a(z) %i. könyvtár inode-ban nem NULL végződésű\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
+#: e2fsck/problem.c:1441
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr ""
 "A „..” könyvtárbejegyzés a(z) %i. könyvtár inode-ban nem NULL végződésű\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1446
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "a(z) %i. (%Q) inode egy illegális karakteres eszköz.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1451
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "a(z) %i. (%Q) inode egy illegális blokkos eszköz.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1456
 msgid "@E is duplicate '.' @e.\n"
 msgstr "a(z) „%Dn” bejegyzés itt: %p (%i) egy duplikált „.” bejegyzés.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1461
 msgid "@E is duplicate '..' @e.\n"
 msgstr "a(z) „%Dn” bejegyzés itt: %p (%i) egy duplikált „..” bejegyzés.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
+#: e2fsck/problem.c:1466 e2fsck/problem.c:1801
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "belső hiba: nem található a dir_info ehhez: %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1471
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr ""
 "a(z) „%Dn” bejegyzés itt: %p (%i) rec_len értéke %Dr, de %N kellene legyen.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
+#: e2fsck/problem.c:1476
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "hiba az icount struktúra lefoglalásakor: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
+#: e2fsck/problem.c:1481
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Hiba a könyvtárblokkok bejárásakor: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1486
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Hiba a(z) %b. könyvtárblokk (%i. inode) olvasásakor: %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1491
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Hiba a(z) %b könyvtárblokk (%i. inode) írásakor: %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
+#: e2fsck/problem.c:1496
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "hiba új könyvtárblokk lefoglalásakor a(z) %i. inode (%s) számára: %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
+#: e2fsck/problem.c:1501
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Hiba a(z) %i. inode felszabadításakor: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
+#: e2fsck/problem.c:1506
 #, c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "A „.” könyvtárbejegyzése itt: %p (%i) túl nagy.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1511
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "a(z) %i. inode (%Q) egy illegális FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1516
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "a(z) %i. inode (%Q) egy illegális foglalat.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1521
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Fájltípus beállítása a(z) „%Dn” bejegyzéshez itt: %p (%i), erre: %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1526
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr ""
 "a(z) „%Dn” bejegyzés itt: %p (%i) helytelen fájltípusú (volt: %Dt, de %N "
 "kellene legyen).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1531
 msgid "@E has filetype set.\n"
 msgstr "a(z) „%Dn” bejegyzés itt: %p (%i) fájltípusa be van állítva.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1536
 msgid "@E has a @z name.\n"
 msgstr "a(z) „%Dn” bejegyzés itt: %p (%i) nulla hosszú névvel rendelkezik.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1541
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "A(z) %Q szimbolikus link (%i. inode) érvénytelen.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1546
 msgid "@a @b @F @n (%If).\n"
 msgstr "a(z) %i. (%Q) inode bővített attribútumblokkja érvénytelen (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1551
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 "a fájlrendszer nagy fájlokat tartalmaz, de a szuperblokkban nincs LARGE_FILE "
 "jelző.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1556
 msgid "@p @h %d: %B not referenced\n"
 msgstr "probléma a(z) %d. HTREE könyvtár inode-ban: a %B nincs hivatkozva\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1561
 msgid "@p @h %d: %B referenced twice\n"
 msgstr ""
 "probléma a(z) %d. HTREE könyvtár inode-ban: a %B kétszer van hivatkozva\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1566
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr ""
 "probléma a(z) %d. HTREE könyvtár inode-ban: a %B hibás min hash-t tartalmaz\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1571
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr ""
 "probléma a(z) %d. HTREE könyvtár inode-ban: a %B hibás max hash-t tartalmaz\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1576
 msgid "@n @h %d (%q).  "
 msgstr "érvénytelen HTREE könyvtár inode: %d (%q). "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1580
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr ""
 "probléma a(z) %d. (%p) HTREE könyvtár inode-ban: hibás blokkszám: %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
+#: e2fsck/problem.c:1590
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr ""
 "probléma a(z) %d. HTREE könyvtár inode-ban: a gyökér csomópont érvénytelen\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1595
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr ""
 "probléma a(z) %d. HTREE könyvtár inode-ban: a %B korlátja érvénytelen (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1600
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr ""
 "probléma a(z) %d. HTREE könyvtár inode-ban: a %B száma érvénytelen (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1605
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr ""
 "probléma a(z) %d. HTREE könyvtár inode-ban: a %B rendezetlen hash táblát "
 "tartalmaz\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1610
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr ""
 "probléma a(z) %d. HTREE könyvtár inode-ban: a %B mélysége érvénytelen (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1615
 msgid "Duplicate @E found.  "
 msgstr "a(z) „%Dn” bejegyzés itt: %p (%i) duplikált. "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1620
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2584,7 +2653,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1625
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2595,36 +2664,36 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1630
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi a(z) %i. (%Q) inode-hoz %N, nulla kellene legyen.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1635
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "Váratlan blokk a(z) %d. (%q) HTREE könyvtár inode-ban.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1639
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr ""
 "a(z) „%Dn” bejegyzés itt: %p (%i) a beállított _INODE_UNINIT értékű %g "
 "csoport %Di inode-jára hivatkozik\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1644
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr ""
 "a(z) „%Dn” bejegyzés itt: %p (%i) a(z) %g csoport nem használt inode-jainak "
 "területén található %Di inode-ra hivatkozik.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1649
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "i_file_acl_hi a(z) %i. (%Q) inode-hoz %N, nulla kellene legyen.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
+#: e2fsck/problem.c:1654
 #, c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr ""
@@ -2632,7 +2701,7 @@ msgstr ""
 "ellenőrzőösszege hibás.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
+#: e2fsck/problem.c:1659
 #, c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr ""
@@ -2640,90 +2709,90 @@ msgstr ""
 "ellenőrzőösszege hibás.\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1664
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr ""
 "%i. könyvtár inode, %B, eltolás: %N: a könyvtárnak nincs ellenőrzőösszege.\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1669
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr ""
 "%i. könyvtár inode, %B: a könyvtár átmegy az ellenőrzéseken, de az "
 "ellenőrzőösszege hibás.\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1674
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr ""
 "A(z) %i. beágyazott könyvtár inode mérete (%N) 4 többszöröse kell legyen.\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
+#: e2fsck/problem.c:1679
 #, c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr "A beágyazott könyvtár inode (%i) méretének javítása sikertelen.\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1684
 msgid "Encrypted @E is too short.\n"
 msgstr "A titkosított „%Dn” bejegyzés itt: %p (%i) túl rövid\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1691
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "3. lépés: könyvtárkapcsolatok ellenőrzése\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1696
 msgid "@r not allocated.  "
 msgstr "a gyökér inode nincs lefoglalva. "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1701
 msgid "No room in @l @d.  "
 msgstr "Nincs hely a lost+found könyvtárban. "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
+#: e2fsck/problem.c:1706
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Nem csatlakoztatott könyvtár inode: %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1711
 msgid "/@l not found.  "
 msgstr "a /lost+found nem található. "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1716
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "A „..” a %Q (%i) esetén %P (%j), de %q (%d) kellene legyen.\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1721
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "Hibás vagy nem létező /lost+found. Nem csatlakoztatható újra.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
+#: e2fsck/problem.c:1726
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Nem bontható ki a /lost+found: %m\n"
 
-#: e2fsck/problem.c:1695
+#: e2fsck/problem.c:1731
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Nem lehet újracsatlakoztatni ezt: %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
+#: e2fsck/problem.c:1736
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Hiba a /lost+found megtalálására tett kísérlet közben: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
+#: e2fsck/problem.c:1741
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr ""
@@ -2731,7 +2800,7 @@ msgstr ""
 "közben\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
+#: e2fsck/problem.c:1746
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr ""
@@ -2739,27 +2808,27 @@ msgstr ""
 "közben\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
+#: e2fsck/problem.c:1751
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block: %m az új könyvtárblokk létrehozása közben\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
+#: e2fsck/problem.c:1756
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr ""
 "ext2fs_write_dir_block: %m a /lost+found könyvtárblokkjának írása közben\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
+#: e2fsck/problem.c:1761
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Hiba a(z) %i. inode inode számának módosításakor\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
+#: e2fsck/problem.c:1766
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2770,7 +2839,7 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
+#: e2fsck/problem.c:1771
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2781,41 +2850,41 @@ msgstr ""
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
+#: e2fsck/problem.c:1781
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Hiba a gyökérkönyvtár (%s) létrehozásakor: %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
+#: e2fsck/problem.c:1786
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Hiba a /lost+found könyvtár (%s) létrehozásakor: %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1791
 msgid "@r is not a @d; aborting.\n"
 msgstr "a gyökér inode nem könyvtár, megszakítás.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1796
 msgid "Cannot proceed without a @r.\n"
 msgstr "Gyökér inode nélkül nem lehet folytatni.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
+#: e2fsck/problem.c:1806
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "A /lost+found nem könyvtár (inode=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1811
 msgid "/@l has inline data\n"
 msgstr "a /lost+found beágyazott adatokat tartalmaz\n"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1816
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2826,7 +2895,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1821
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2837,52 +2906,52 @@ msgstr ""
 "\n"
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1826
 msgid "/@l is encrypted\n"
 msgstr "A /lost+found titkosított\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1833
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "3A lépés: könyvtárak optimalizálása\n"
 
-#: e2fsck/problem.c:1802
+#: e2fsck/problem.c:1838
 #, c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "A dirs_to_hash iterátor létrehozása sikertelen: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1843
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "A(z) %q (%d) könyvtár optimalizálása sikertelen: %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1848
 msgid "Optimizing directories: "
 msgstr "Könyvtárak optimalizálása: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1865
 msgid "Pass 4: Checking reference counts\n"
 msgstr "4. lépés: referenciaszámok ellenőrzése\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
+#: e2fsck/problem.c:1870
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "nem csatlakoztatott, nulla hosszúságú inode: %i. "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
+#: e2fsck/problem.c:1875
 #, c-format
 msgid "@u @i %i\n"
 msgstr "nem csatlakoztatott inode: %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1880
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "A(z) %i. inode hivatkozásszáma %Il, de %N kellene legyen. "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1884
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2893,59 +2962,70 @@ msgstr ""
 "inode_link_info[%i] = %N, inode.i_links_count = %Il.\n"
 "Egyezniük kellene!\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1891
+#, fuzzy
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "A(z) %i. inode hivatkozásszáma %Il, de %N kellene legyen. "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1896
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:1903
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "5. lépés: csoport összefoglaló információinak ellenőrzése\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:1908
 msgid "Padding at end of @i @B is not set. "
 msgstr "A kitöltés az inode bittérkép végén nincs beállítva. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:1913
 msgid "Padding at end of @b @B is not set. "
 msgstr "A kitöltés a blokkbittérkép végén nincs beállítva. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:1918
 msgid "@b @B differences: "
 msgstr "blokkbittérkép eltérései: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:1938
 msgid "@i @B differences: "
 msgstr "inode bittérkép eltérései: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:1958
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "A szabad inode-ok száma hibás a(z) %g. csoporthoz (%i, számolt=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:1963
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "A könyvtárak száma hibás a(z) %g. csoporthoz (%i, számolt=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:1968
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "A szabad inode-ok száma hibás (%i, számolt=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:1973
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "A szabad blokkok száma hibás a(z) %g. csoporthoz (%b, számolt=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:1978
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "A szabad blokkok száma hibás (%b, számolt=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
+#: e2fsck/problem.c:1983
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
@@ -2953,24 +3033,24 @@ msgstr ""
 "PROGRAMOZÁSI HIBA: a fájlrendszer (%N.) bittérképének végpontjai (%b, %c) "
 "nem egyeznek a számított bittérkép-végpontokkal (%i, %j)\n"
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:1989
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Belső hiba: a bittérkép végének megtippelése (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
+#: e2fsck/problem.c:1994
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Hiba a helyettesítő inode bittérkép másolásakor: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
+#: e2fsck/problem.c:1999
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Hiba a helyettesítő blokkbittérkép másolásakor: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
+#: e2fsck/problem.c:2024
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
@@ -2978,7 +3058,7 @@ msgstr ""
 "megjelölve\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
+#: e2fsck/problem.c:2029
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr ""
@@ -2986,56 +3066,56 @@ msgstr ""
 "megjelölve\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
+#: e2fsck/problem.c:2034
 #, c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr "%g csoport inode bittérképe nem felel meg az ellenőrzőösszegnek.\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
+#: e2fsck/problem.c:2039
 #, c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr "%g csoport blokkbittérképe nem felel meg az ellenőrzőösszegnek.\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2046
 msgid "Recreate @j"
 msgstr "Napló újralétrehozása"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2051
 msgid "Update quota info for quota type %N"
 msgstr "Kvótainformációk frissítése %N kvótatípushoz"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
+#: e2fsck/problem.c:2056
 #, c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "Hiba a blokkcsoport ellenőrzőösszeg-információinak beállításakor: %m\n"
 
-#: e2fsck/problem.c:2016
+#: e2fsck/problem.c:2061
 #, c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Hiba a fájlrendszer-információk írásakor: %m\n"
 
-#: e2fsck/problem.c:2021
+#: e2fsck/problem.c:2066
 #, c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr "Hiba az írások tárolóeszközre ürítésekor: %m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2071
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "Hiba a kvótainformációk írásakor %N kvótatípushoz: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2194
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Nem kezelt hibakód (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2320 e2fsck/problem.c:2324
 msgid "IGNORED"
 msgstr "MELLŐZVE"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr "a move_quota_inode hívásban"
 
@@ -3057,21 +3137,21 @@ msgstr "az inode vizsgálat megkezdésekor"
 msgid "while doing inode scan"
 msgstr "inode vizsgálat végrehajtása közben"
 
-#: e2fsck/super.c:190
-#, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
+#: e2fsck/super.c:224
+#, fuzzy, c-format
+msgid "while calling ext2fs_block_iterate for inode %u"
 msgstr "az ext2fs_block_iterate meghívásakor a(z) %d. inode-ra"
 
-#: e2fsck/super.c:213
-#, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
+#: e2fsck/super.c:249
+#, fuzzy, c-format
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
 msgstr "az ext2fs_adjust_ea_refcount2 meghívásakor a(z) %d. inode-ra"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Csonkítás"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Törlés"
 
@@ -3126,12 +3206,12 @@ msgstr ""
 " -L hibás_blokkok_fájlja  Hibás blokkok listájának beállítása\n"
 " -z visszavonási_fájl     Visszavonási fájl létrehozása\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:136
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %u/%u fájl (%0d.%d%% nem összefüggő), %llu/%llu blokk\n"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:162
 #, c-format
 msgid ""
 "\n"
@@ -3146,52 +3226,52 @@ msgstr[1] ""
 "\n"
 "%12u inode használatban (%2.2f%%, összesen %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:166
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
 msgstr[0] "%12u nem folytonos fájl (%0d.%d%%)\n"
 msgstr[1] "%12u nem folytonos fájl (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:171
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
 msgstr[0] "%12u nem folytonos könyvtár (%0d.%d%%)\n"
 msgstr[1] "%12u nem folytonos könyvtár (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:176
 #, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr ""
 "             ind/dind/tind blokkokat tartalmazó inode-ok száma: %u/%u/%u\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:184
 msgid "             Extent depth histogram: "
 msgstr "             Extentmélység-hisztogram: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:193
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
 msgstr[0] "%12llu blokk használatban (%2.2f%%, összesen %llu)\n"
 msgstr[1] "%12llu blokk használatban (%2.2f%%, összesen %llu)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:197
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%12u hibás blokk\n"
 msgstr[1] "%12u hibás blokk\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:199
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] "%12u nagy fájl\n"
 msgstr[1] "%12u nagy fájl\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:201
 #, c-format
 msgid ""
 "\n"
@@ -3206,96 +3286,96 @@ msgstr[1] ""
 "\n"
 "%12u normál fájl\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:203
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u könyvtár\n"
 msgstr[1] "%12u könyvtár\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:205
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
 msgstr[0] "%12u karakteres eszköz fájl\n"
 msgstr[1] "%12u karakteres eszköz fájl\n"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:208
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
 msgstr[0] "%12u blokkos eszköz fájl\n"
 msgstr[1] "%12u blokkos eszköz fájl\n"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:210
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u fifo\n"
 msgstr[1] "%12u fifo\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:212
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u link\n"
 msgstr[1] "%12u link\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:214
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u szimbolikus link"
 msgstr[1] "%12u szimbolikus link"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:216
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] "(%u gyors szimbolikus link)\n"
 msgstr[1] "(%u gyors szimbolikus link)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:220
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u foglalat\n"
 msgstr[1] "%12u foglalat\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:224
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u fájl\n"
 msgstr[1] "%12u fájl\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:237 misc/badblocks.c:1002 misc/tune2fs.c:3022 misc/util.c:126
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "%s csatolt állapotának meghatározása közben."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:258
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Figyelmeztetés! %s csatolva van.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:261
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Figyelmeztetés! %s használatban van.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:267
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s csatolva van.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:269
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s használatban van.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:271
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3303,7 +3383,7 @@ msgstr ""
 "Nem folytatható, megszakítás.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:273
 msgid ""
 "\n"
 "\n"
@@ -3317,81 +3397,113 @@ msgstr ""
 "***SÚLYOS*** fájlrendszer-károsodást ***FOG*** okozni!\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:278
 msgid "Do you really want to continue"
 msgstr "Biztosan folytatni akarja"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:280
 msgid "check aborted.\n"
 msgstr "ellenőrzés megszakítva.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:374
 msgid " contains a file system with errors"
 msgstr " hibás fájlrendszert tartalmaz"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:376
 msgid " was not cleanly unmounted"
 msgstr " nem lett tisztán leválasztva"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:378
 msgid " primary superblock features different from backup"
 msgstr " elsődleges szuperblokkjának jellemzői eltérnek a tartalékéitól"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:382
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " %u alkalommal lett ellenőrzés nélkül csatolva"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:389
 msgid " has filesystem last checked time in the future"
 msgstr " fájlrendszerének utolsó ellenőrzési ideje a jövőben van"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:395
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " %u napja nem került ellenőrzésre"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:403
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:409
 msgid ", check forced.\n"
 msgstr ", ellenőrzés kikényszerítve.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:442
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: tiszta, %u/%u fájl, %llu/%llu blokk"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:462
 msgid " (check deferred; on battery)"
 msgstr " (ellenőrzés elhalasztva, akkumulátoron)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:465
 msgid " (check after next mount)"
 msgstr " (ellenőrzés a következő csatolás után)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:467
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (ellenőrzés %ld csatoláson belül)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:617
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "HIBA: Nem nyitható meg a /dev/null (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:688
 msgid "Invalid EA version.\n"
 msgstr "Érvénytelen bővített attribútum verzió.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:701
 msgid "Invalid readahead buffer size.\n"
 msgstr "Érvénytelen előreolvasási pufferméret.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:750
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Ismeretlen bővített beállítás: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:758
+#, fuzzy
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"A megadott bővített beállítások hibásak: %s\n"
+"\n"
+"A bővített beállításokat vessző választja el, és egy argumentumot "
+"várhatnak,\n"
+"\tamit egy egyenlőségjel ('=') kezd.\n"
+"\n"
+"Érvényes bővített beállítások:\n"
+"\tsuperblock=<szuperblokk száma>\n"
+"\tblocksize=<blokkméret>\n"
+
+#: e2fsck/unix.c:762
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr ""
+
+#: e2fsck/unix.c:771
+#, fuzzy
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "Érvénytelen előreolvasási pufferméret.\n"
+
+#: e2fsck/unix.c:783
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3400,55 +3512,55 @@ msgstr ""
 "Szintaktikai hiba az e2fsck beállítófájljában (%s, a(z) %d. sorban)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:856
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Hiba a(z) %d. fájlleíró érvényesítésekor: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:860
 msgid "Invalid completion information file descriptor"
 msgstr "Érvénytelen kiegészítésinformációs fájlleíró"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:875
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "A -p/-a, -n vagy -y kapcsolók közül csak egy adható meg."
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:896
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Az e2fsck ezen verziója nem támogatja a -t kapcsolót.\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:927 e2fsck/unix.c:1005 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1741 misc/tune2fs.c:2036 misc/tune2fs.c:2054
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Nem oldható fel „%s”"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:984
 msgid "The -n and -D options are incompatible."
 msgstr "A -n és -D kapcsolók inkompatibilisek."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:989
 msgid "The -n and -c options are incompatible."
 msgstr "A -n és -c kapcsolók inkompatibilisek."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:994
 msgid "The -n and -l/-L options are incompatible."
 msgstr "A -n és -l/-L kapcsolók inkompatibilisek."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1018
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "A -D és -E fixes_only kapcsolók inkompatibilisek."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1024
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "A -E bmap2extent és fixes_only kapcsolók inkompatibilisek."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1088
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "A -c és -l/-L kapcsolók nem használhatók egyszerre.\n"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1135
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3457,7 +3569,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG „%s” nem egész szám\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1144
 #, c-format
 msgid ""
 "\n"
@@ -3468,7 +3580,7 @@ msgstr ""
 "Érvénytelen, nem szám argumentum a -%c kapcsolóhoz („%s”)\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1235
 #, c-format
 msgid ""
 "MMP interval is %u seconds and total wait time is %u seconds. Please "
@@ -3477,27 +3589,28 @@ msgstr ""
 "Az MMP időköz %u másodperc, a teljes várakozási idő %u másodperc. Kis "
 "türelmet...\n"
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1252 e2fsck/unix.c:1257
 msgid "while checking MMP block"
 msgstr "az MMP blokk ellenőrzése közben"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1259
+#, fuzzy, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 "Ha biztos benne, hogy a fájlrendszer nincs használatban egyetlen "
 "csomóponton\n"
 "sem, akkor futtassa a következőt:\n"
 "„tune2fs -f -E clear_mmp {eszköz}”\n"
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1275
 msgid "while reading MMP block"
 msgstr "az MMP blokk olvasása közben"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1295 e2fsck/unix.c:1347 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2613 misc/mke2fs.c:2664 misc/tune2fs.c:2754
+#: misc/tune2fs.c:2799 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3508,57 +3621,57 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1336 misc/e2undo.c:270 misc/mke2fs.c:2653 misc/tune2fs.c:2788
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "%s törlésére tett kísérlet közben"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1362 misc/mke2fs.c:2679 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "a visszavonási fájl elkészítésére tett kísérlet közben\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1405
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Hiba: az ext2fs programkönyvtár verziója elavult!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1412
 msgid "while trying to initialize program"
 msgstr "a program előkészítésére tett kíséret közben"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1435
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\t%s, %s használatával\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1447
 msgid "need terminal for interactive repairs"
 msgstr "az interaktív helyreállításhoz terminál szükséges"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1508
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s tartalék blokkok kipróbálása…\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1510
 msgid "Superblock invalid,"
 msgstr "A szuperblokk érvénytelen,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1511
 msgid "Group descriptors look bad..."
 msgstr "A csoportleírók rosszul néznek ki…"
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1521
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s a tartalék blokkok használata közben"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1525
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: visszatérés az eredeti szuperblokkhoz\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1554
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3568,31 +3681,31 @@ msgstr ""
 "(vagy a fájlrendszer szuperblokkja sérült)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1561
 msgid "Could this be a zero-length partition?\n"
 msgstr "Lehet, hogy ez egy nulla hosszú partíció?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1563
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr ""
 "%s hozzáféréssel kell rendelkeznie a fájlrendszerhez, vagy root jogokkal\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1569
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Lehet, hogy ez egy nem létező, vagy swap eszköz?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1571
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 "A fájlrendszer csatolva van, vagy egy másik program kizárólagos módban "
 "nyitotta meg?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1575
 msgid "Possibly non-existent device?\n"
 msgstr "Lehet, hogy ez egy nem létező eszköz?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1578
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3600,20 +3713,25 @@ msgstr ""
 "A lemez írásvédett, használja a -n kapcsolót az eszköz csak\n"
 "olvasási módú ellenőrzéséhez.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1592
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1667
 msgid "Get a newer version of e2fsck!"
 msgstr "Szerezze be az e2fsck újabb verzióját!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1711
 #, c-format
 msgid "while checking journal for %s"
 msgstr "a napló ellenőrzésekor ezen: %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1714
 msgid "Cannot proceed with file system check"
 msgstr "A fájlrendszer ellenőrzését nem lehet folytatni"
 
-#: e2fsck/unix.c:1661
+#: e2fsck/unix.c:1725
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
@@ -3621,50 +3739,50 @@ msgstr ""
 "Figyelmeztetés: a napló helyreállításának kihagyása, mert csak olvasási módú "
 "fájlrendszer-ellenőrzést végez.\n"
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1737
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "nem állíthatók be a szuperblokk jelzői ezen: %s\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1743
 #, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "A napló ellenőrzőösszege hibás itt: %s\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1747
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "A napló sérült itt: %s\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1751
 #, c-format
 msgid "while recovering journal of %s"
 msgstr "a napló helyreállításakor ezen: %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1773
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s nem támogatott jellemzőkkel rendelkezik:"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1832
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s a hibás blokkok inode olvasása közben\n"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1835
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Ez nem néz ki jónak, de megpróbáljuk folytatni…\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1875
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Napló létrehozása (%d blokk): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1885
 msgid " Done.\n"
 msgstr " Kész.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1887
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
@@ -3672,24 +3790,38 @@ msgstr ""
 "\n"
 "*** a napló újra létrehozva ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1893
 msgid "aborted"
 msgstr "megszakítva"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1895
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck megszakítva.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1922
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Az e2fsck újraindítása az elejétől…\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1926
 msgid "while resetting context"
 msgstr "a kontextus alaphelyzetbe állításakor"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:1985
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** FÁJLRENDSZERHIBÁK JAVÍTVA *****\n"
+
+#: e2fsck/unix.c:1987
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: A fájlrendszer módosítva lett.\n"
+
+#: e2fsck/unix.c:1991 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3698,12 +3830,12 @@ msgstr ""
 "\n"
 "%s: ***** A FÁJLRENDSZER MÓDOSÍTVA LETT *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:1996
 #, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** INDÍTSA ÚJRA A RENDSZERT *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2006 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3714,52 +3846,52 @@ msgstr ""
 "%s: ******* FIGYELEM: A fájlrendszeren még mindig vannak hibák *******\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "iI"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197
 msgid "nN"
 msgstr "nN"
 
 # az a fordítása lehetne m is, mint "Minden", de túl közel van az n (nem)-hez a billentyűzeten.
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr "aA"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr " (az „a” jelentése: „igen” mindenre) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<i>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (i/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "megszakítva!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr "igen mindenre\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "igen\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "nem\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3768,7 +3900,7 @@ msgstr ""
 "%s? nem\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3777,38 +3909,38 @@ msgstr ""
 "%s? igen\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "igen"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "nem"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: illegális bittérképblokkok ehhez: %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "inode- és blokkbittérképek olvasása"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "%s bittérképei olvasásának újrapróbálásakor"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "blokk- és inode bittérképek írása"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "%s blokk- és inode bittérképeinek újraírásakor"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3821,51 +3953,51 @@ msgstr ""
 "%s: VÁRATLAN INKONZISZTENCIA; FUTTASSA KÉZZEL AZ fsck PARANCSOT.\n"
 "\t(azaz a -a vagy -p kapcsolók nélkül)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Használt memória: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Használt memória: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "idő: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "eltelt idő: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "%lu inode olvasásakor itt: %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "%lu inode írásakor itt: %s"
 
-#: e2fsck/util.c:765
+#: e2fsck/util.c:792
 msgid ""
 "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
 "running.\n"
 msgstr ""
 "VÁRATLAN INKONZISZTENCIA: a fájlrendszert módosítják az fsck futása közben.\n"
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "kész                                                 \n"
 
-#: misc/badblocks.c:97
-#, c-format
+#: misc/badblocks.c:100
+#, fuzzy, c-format
 msgid ""
-"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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"
@@ -3876,7 +4008,7 @@ msgstr ""
 "           [-e max_rossz_blokkok] [-p lépések_száma] [-t tesztminta\n"
 "           [-t tesztminta [...]]] eszköz [utolsó_blokk [első_blokk]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3885,80 +4017,80 @@ msgstr ""
 "%s: a -n és -w kapcsolók kölcsönösen kizárják egymást.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f%% kész, %s telt el. (%d/%d/%d hiba)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Tesztelés véletlen mintával:"
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Tesztelés 0x mintával"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "pozicionálás közben"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Fura érték (%ld) a do_read-ben\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "az ext2fs_sync_device hívás közben"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "a hibásblokk-lista bejárásának megkezdése közben"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "pufferek foglalásakor"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Blokkok ellenőrzése %lu és %lu között\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Hibás blokkok keresése csak olvasható módban\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Hibás blokkok keresése (csak olvasható teszt): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Túl sok hibás blokk, teszt megszakítása\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Hibás blokkok keresése írható-olvasható módban\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "%lu és %lu közti blokkok\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Olvasás és összehasonlítás: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Hibás blokkok keresése nem destruktív írható-olvasható módban\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Hibás blokkok keresése (nem destruktív írható-olvasható teszt\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3966,97 +4098,97 @@ msgstr ""
 "\n"
 "Megszakítás érkezett, takarítás\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "tesztadatok írásakor, %lu. blokk"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:131
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s csatolva van; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "badblocks kényszerítve mindenképp. Reméljük, a /etc/mtab helytelen.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "a badblocks futtatása nem biztonságos!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:142
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s nyilvánvalóan használatban van a rendszer által; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "badblocks kényszerítve mindenképp.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "érvénytelen %s - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr "A hibás blokkok maximális száma (%u) túl nagy, a maximum: %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "nem foglalható memória a test_pattern számára - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "Csak olvasható módban legfeljebb egy test_pattern adható meg"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "A véletlen test_pattern nem engedélyezett csak olvasható módban"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr "Nem határozható meg az eszközméret, adja meg saját kezűleg\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "az eszközméret meghatározására tett kísérlet közben"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "utolsó blokk"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "első blokk"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "érvénytelen kezdő blokk (%llu): kisebb kell legyen, mint %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "érvénytelen befejező blokk (%llu): 32 bites érték kell legyen"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "a hibás blokkok memóriában lévő listájának létrehozása közben"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "bemeneti fájl - hibás formátum"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "a hibás blokkok memóriában lévő listájához adás közben"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Lépés kész, %u hibás blokk megtalálva. (%d/%d/%d hiba)\n"
@@ -4128,162 +4260,162 @@ msgstr "az = nem használható együtt a - és + jelekkel\n"
 msgid "Must use '-v', =, - or +\n"
 msgstr "A „-v”, =, - vagy + egyikét kell használni\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:79 misc/create_inode.c:118
 #, c-format
 msgid "while reading inode %u"
 msgstr "%u. inode olvasásakor"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:89 misc/create_inode.c:287 misc/create_inode.c:352
+#: misc/create_inode.c:390
 msgid "while expanding directory"
 msgstr "a könyvtár kibővítésekor"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:96
 #, c-format
 msgid "while linking \"%s\""
 msgstr "„%s” linkelésekor"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:104 misc/create_inode.c:131 misc/create_inode.c:321
 #, c-format
 msgid "while writing inode %u"
 msgstr "%u. inode írásakor"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:151 misc/create_inode.c:175
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "„%s” attribútumainak kiírásakor"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:162
 #, c-format
 msgid "while opening inode %u"
 msgstr "%u. inode megnyitásakor"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:168 misc/create_inode.c:195 misc/create_inode.c:975
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr "memória foglalásakor"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:188 misc/create_inode.c:204
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "„%2$s” „%1$s” attribútumának olvasásakor"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:213
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "„%s” attribútum %u. inode-ba írásakor"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:223
 #, c-format
 msgid "while closing inode %u"
 msgstr "%u. inode lezárásakor"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:274
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr "„%s” inode foglalásakor"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:293
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr "„%s” inode létrehozásakor"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:359
 #, c-format
 msgid "while creating symlink \"%s\""
 msgstr "„%s” szimbolikus link létrehozásakor"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:377 misc/create_inode.c:896
 #, c-format
 msgid "while looking up \"%s\""
 msgstr "„%s” kikeresésekor"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:397
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr "„%s” könyvtár létrehozásakor"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:625
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "„%s” másolásra megnyitásakor"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:739
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr "munkakönyvtár váltásakor erre: „%s”"
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:747
 #, c-format
 msgid "while opening directory \"%s\""
 msgstr "„%s” könyvtár megnyitásakor"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:757
 #, c-format
 msgid "while lstat \"%s\""
 msgstr "„%s” elérésére tett kísérletkor"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:808
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr "„%s” speciális fájl létrehozásakor"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:817
 msgid "malloc failed"
 msgstr "A memóriafoglalás meghiúsult"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:825
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr "„%s” link olvasására tett kísérletkor"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:832
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr "a szimlink mérete nőtt az lstat() és readlink() között"
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:843
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr "„%s” szimlink írásakor"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:854
 #, c-format
 msgid "while writing file \"%s\""
 msgstr "„%s” fájl írásakor"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:867
 #, c-format
 msgid "while making dir \"%s\""
 msgstr "„%s” könyvtár megnyitásakor"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:885
 msgid "while changing directory"
 msgstr "könyvtárváltáskor"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:891
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr "„%s” bejegyzés figyelmen kívül hagyása"
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:904
 #, c-format
 msgid "while setting inode for \"%s\""
 msgstr "„%s” inode-jának beállításakor"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:911
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "„%s” bővített attribútumainak beállításakor"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:937
 msgid "while saving inode data"
 msgstr "az inode adatainak mentésekor"
 
 #: misc/dumpe2fs.c:56
-#, c-format
+#, fuzzy, c-format
 msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+"Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
 msgstr ""
 "Használat: %s [-bfghixV] [-o superblock=<szám>] [-o blocksize=<szám>] "
 "eszköz\n"
@@ -4404,106 +4536,55 @@ msgstr "a hibás blokkok listájának kiírása közben"
 msgid "Bad blocks: %u"
 msgstr "Hibás blokkok: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:367
 msgid "while reading journal inode"
 msgstr "napló inode olvasása közben"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "napló inode megnyitása közben"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "napló szuperblokkjának olvasása közben"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "A naplószuperblokk bűvös száma érvénytelen!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Napló jellemzői:          "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Napló mérete:             "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Napló hossza:             %u\n"
-"Naplósorozat:             0x%08x\n"
-"Napló kezdete:            %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr "Napló ellenőrzőösszegének típusa:    crc32\n"
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-"Napló ellenőrzőösszegének típusa:    %s\n"
-"Napló ellenőrzőösszege:              0x%08x\n"
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Napló hibaszáma:          %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "napló szuperblokkjának olvasásakor"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "A naplószuperblokk bűvös számai nem találhatók"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Napló blokkmérete:        %u\n"
-"Napló hossza:             %u\n"
-"Napló első blokkja:       %u\n"
-"Naplósorozat:             0x%08x\n"
-"Napló kezdete:            %u\n"
-"Napló felhasználószáma:   %u\n"
+#: misc/dumpe2fs.c:468
+#, fuzzy
+msgid "failed to alloc MMP buffer\n"
+msgstr "puffer foglalásakor"
 
-#: misc/dumpe2fs.c:514
-#, c-format
-msgid "Journal users:            %s\n"
-msgstr "Napló felhasználói:       %s\n"
+#: misc/dumpe2fs.c:479
+#, fuzzy, c-format
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "Blokkok ellenőrzése %lu és %lu között\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:798 misc/tune2fs.c:2073
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Nem sikerült memóriát foglalni a beállítások feldolgozásához!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Érvénytelen szuperblokk paraméter: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Érvénytelen blokkméret paraméter: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4527,58 +4608,43 @@ msgstr ""
 "\tsuperblock=<szuperblokk száma>\n"
 "\tblocksize=<blokkméret>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1845
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\t%s használatával\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** Ellenőrzőösszeg-hibák vannak a fájlrendszeren! Futtassa az e2fsck-t "
-"most!\n"
-"\n"
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1590 misc/tune2fs.c:2949
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Nem található érvényes fájlrendszer-szuperblokk.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
 msgstr ""
-"\n"
-"*** Ellenőrzőösszeg-hibák vannak a bittérképekben! Futtassa az e2fsck-t "
-"most!\n"
-"\n"
 
-#: misc/dumpe2fs.c:730
-#, c-format
+#: misc/dumpe2fs.c:747
+#, fuzzy, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "%s bittérképei olvasásának újrapróbálásakor"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
-"\n"
-"%s: %s: hiba a bittérképek olvasásakor: %s\n"
 
-#: misc/e2image.c:106
-#, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
+#: misc/e2image.c:107
+#, fuzzy, c-format
+msgid "Usage: %s [ -r|Q ] [ -f ] device image-file\n"
 msgstr "Használat: %s [ -r|Q ] [ -fr ] eszköz lemezképfájl\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:109
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "           %s -I eszköz lemezképfájl\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:110
 #, c-format
 msgid ""
 "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
@@ -4587,103 +4653,103 @@ msgstr ""
 "           %s -ra  [  -cfnp  ] [ -o forrás_eltolás ] [ -O cél_eltolás ] "
 "forrás_fr [ cél_fr ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:175 misc/e2image.c:580 misc/e2image.c:586 misc/e2image.c:1185
 msgid "while allocating buffer"
 msgstr "puffer foglalásakor"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:180
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "%llu blokk írásakor\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:194
 #, c-format
 msgid "error writing block %llu"
 msgstr "Hiba a(z) %llu. blokk írásakor"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:197
 msgid "error in generic_write()"
 msgstr "hiba a generic_write() függvényben"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:214
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Hiba: a fejléc mérete nagyobb, mint a wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:219
 msgid "Couldn't allocate header buffer\n"
 msgstr "Nem sikerült fejlécpuffert foglalni\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:247
 msgid "while writing superblock"
 msgstr "a szuperblokk írása közben"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:256
 msgid "while writing inode table"
 msgstr "az inode tábla írása közben"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:264
 msgid "while writing block bitmap"
 msgstr "a blokkbittérkép írása közben"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:272
 msgid "while writing inode bitmap"
 msgstr "az inode bittérkép írása közben"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:506
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Sérült könyvtárblokk (%llu): a rec_len (%d) hibás\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:518
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Sérült könyvtárblokk (%llu): a name_len (%d) hibás\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:559
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu blokk (%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:590 misc/e2image.c:630
 msgid "Copying "
 msgstr "Másolás "
 
-#: misc/e2image.c:626
+#: misc/e2image.c:627
 msgid ""
 "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr ""
 "A mostani leállítás megsemmisítené a fájlrendszert, szakítsa meg újra, ha "
 "biztos\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:653
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " %s marad, %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:665 misc/e2image.c:1195
 #, c-format
 msgid "error reading block %llu"
 msgstr "hiba a(z) %llu blokk olvasásakor"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:719
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "%llu / %llu blokk átmásolva (%d%%) %s alatt "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:723
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "%.2f MB/s sebességgel"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:759
 msgid "while allocating l1 table"
 msgstr "az l1 tábla foglalásakor"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:804
 msgid "while allocating l2 cache"
 msgstr "az l2 gyorsítótár foglalásakor"
 
-#: misc/e2image.c:826
+#: misc/e2image.c:827
 msgid ""
 "Warning: There are still tables in the cache while putting the cache, data "
 "will be lost so the image may not be valid.\n"
@@ -4691,77 +4757,77 @@ msgstr ""
 "Figyelmeztetés: Még vannak táblák a gyorsítótárban annak bővítésekor, "
 "adatvesztés fog történni, így a lemezkép esetleg nem lesz érvényes.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1152
 msgid "while allocating ext2_qcow2_image"
 msgstr "az ext2_qcow2_image foglalásakor"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1159
 msgid "while initializing ext2_qcow2_image"
 msgstr "az ext2_qcow2_image előkészítésekor"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1218 misc/e2image.c:1236
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr "Programozási hiba: több egymást követő refcount blokk jött létre!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1276
 msgid "while allocating block bitmap"
 msgstr "a blokkbittérkép lefoglalása közben"
 
 # FIXME: ennek utánanézni
-#: misc/e2image.c:1281
+#: misc/e2image.c:1285
 msgid "while allocating scramble block bitmap"
 msgstr "a kevert blokkbittérkép lefoglalása közben"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1292
 msgid "Scanning inodes...\n"
 msgstr "Inode-ok vizsgálata…\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1304
 msgid "Can't allocate block buffer"
 msgstr "Nem foglalható blokkpuffer"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1343 misc/e2image.c:1357
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "%u. inode bejárása közben"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1389
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "A raw és qcow2 lemezképek nem telepíthetők"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1411
 msgid "error reading bitmaps"
 msgstr "hiba a bittérképek olvasásakor"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1423
 msgid "while opening device file"
 msgstr "az eszközfájl megnyitása közben"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1434
 msgid "while restoring the image table"
 msgstr "a lemezképtábla helyreállítása közben"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1531
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "a -a kapcsoló csak raw vagy QCOW2 lemezképekkel használható."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1537
 msgid "Offsets are only allowed with raw images."
 msgstr "Az eltolások csak nyers lemezképekkel engedélyezettek."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1542
 msgid "Move mode is only allowed with raw images."
 msgstr "Az áthelyezési mód csak nyers lemezképekkel engedélyezett."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1547
 msgid "Move mode requires all data mode."
 msgstr "Az áthelyezési mód teljes adat módot igényel."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1557
 msgid "checking if mounted"
 msgstr "csatoltság ellenőrzése"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1564
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4774,47 +4840,52 @@ msgstr ""
 "lemezképet eredményezhet, ami nem hasznos hibakeresési célokra.\n"
 "Használja a -f kapcsolót, ha tényleg ezt szeretné.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1618
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "a QCOW2 lemezkép nem írható a szabványos kimenetre!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1624
 msgid "Can not stat output\n"
 msgstr "A kimenet nem érhető el\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1634
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "A lemezkép (%s) tömörített\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1637
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "A lemezkép (%s) titkosított\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1640
+#, fuzzy, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "A lemezkép (%s) titkosított\n"
+
+#: misc/e2image.c:1644
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr ""
 "a cow2 lemezkép (%s) raw lemezképpé (%s) alakítására tett kísérlet közben"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1654
 msgid "The -c option only supported in raw mode\n"
 msgstr "A -c kapcsoló csak raw módban támogatott\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1659
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "A -c kapcsoló nem támogatott a szabványos kimenetre íráskor\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1666
 msgid "while allocating check_buf"
 msgstr "a check_buf foglalásakor"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1672
 msgid "The -p option only supported in raw mode\n"
 msgstr "A -p kapcsoló csak raw módban támogatott\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1682
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d blokk már tartalmazta a másolandó adatokat\n"
@@ -4844,7 +4915,7 @@ msgstr "e2label: hiba a szuperblokk olvasásakor\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: ez nem ext2 fájlrendszer\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3152
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Figyelmeztetés: a címke túl hosszú, csonkítás.\n"
@@ -4859,163 +4930,165 @@ msgstr "e2label: nem lehet újra a szuperblokkra pozicionálni\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: hiba a szuperblokk írása közben\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1733
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Használat: e2label eszköz [új_címke]\n"
 
-#: misc/e2undo.c:118
-#, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+#: misc/e2undo.c:124
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> "
+"<filesystem>\n"
 msgstr "Használat: %s [-f] [-h] [-n] [-v] <tranzakciós_fájl> <fájlrendszer>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr "A fájlrendszer szuperblokkja nem felel meg a visszavonási fájlénak.\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr "Az UUID nem egyezik.\n"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr "Az utolsó csatolási idő nem egyezik.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr "Az utolsó írási idő nem egyezik.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr "Az élettartam-írásszámláló nem egyezik.\n"
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr "fájlrendszer szuperblokkjának olvasásakor"
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr "a szuperblokk lekérésekor"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "A visszavonási fájl szuperblokkjának ellenőrzőösszege nem egyezik.\n"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr "érvénytelen eltolás - %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr "Nem fogok egy visszavonási fájlba írni annak újrajátszása közben.\n"
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "„%s” visszavonási fájl megnyitásakor\n"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 msgid "while reading undo file"
 msgstr "a visszavonási fájl olvasásakor"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: Ez nem visszavonási fájl.\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "%s: A fejléc ellenőrzőösszege nem egyezik.\n"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "%s: A visszavonási fájl fejléce sérült.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr "%s: A visszavonási blokkméret túl nagy.\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "%s: A visszavonási blokkméret túl kicsi.\n"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr "%s: A visszavonási fájlhoz ismeretlen jellemző van beállítva.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "Hiba %s csatolt állapotának meghatározása közben."
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr "Az e2undo parancsot csak leválasztott fájlrendszereken lehet futtatni"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, c-format
 msgid "while opening `%s'"
 msgstr "„%s” megnyitásakor"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr "a megadott eltolás túl nagy"
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 msgid "while reading keys"
 msgstr "kulcsok olvasásakor"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr "%s: hibás a kulcs bűvös száma itt: %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr "%s: hiba a kulcsblokk ellenőrzőösszegében itt: %llu.\n"
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, c-format
 msgid "%s: block %llu is too long."
 msgstr "%s: a(z) %llu blokk túl hosszú."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, c-format
 msgid "while fetching block %llu."
 msgstr "%llu blokk elérésekor."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr ""
 "ellenőrzőösszeg-hiba a(z) %llu. fájlrendszerblokkban (visszavonási blokk: "
 "%llu)\n"
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, c-format
 msgid "while writing block %llu."
 msgstr "a(z) %llu. blokk írásakor."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr "A visszavonási fájl sérült, futtassa az e2fsck-t MOST!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr "I/O hiba a visszajátszáskor, futtassa az e2fsck-t MOST!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr "Nem teljes visszavonási rekord, futtassa az e2fsck-t.\n"
@@ -5099,37 +5172,37 @@ msgstr ""
 "\tfájlt, amint csak lehet.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: nem található\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: várjunk csak: nincs több gyermekfolyamat???\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Figyelmeztetés: %s ezen eszközhöz: %s, %d szignállal lépett ki.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: az állapot %x, soha nem fordulhatna elő.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Befejeződött ezzel: %s (kilépési állapot: %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: %d. hiba az fsck.%s végrehajtásakor erre: %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5137,11 +5210,11 @@ msgstr ""
 "A -t kapcsolónak átadott fájlrendszertípusokból vagy az összes,\n"
 "vagy egyik sem kaphat „no” vagy „!” előtagot.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Nem sikerült memóriát foglalni a fájlrendszertípusokhoz\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
@@ -5150,89 +5223,89 @@ msgstr ""
 "%s: hibás sor átugrása az /etc/fstab fájlban: bind csatolás nem nulla fsck "
 "lépésszámmal\n"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: %s nem ellenőrizhető: az fsck.%s nem található\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Minden fájlrendszer ellenőrzése.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--várakozás-- (%d. lépés)\n"
 
-#: misc/fsck.c:1078
+#: misc/fsck.c:1085
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Használat: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fr_típus] [fr-kapcsoló] "
 "[fájlrendszer …]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: túl sok eszköz\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: Túl sok argumentum\n"
 
-#: misc/fuse2fs.c:3745
+#: misc/fuse2fs.c:3739
 msgid "Mounting read-only.\n"
 msgstr "Csatolás csak olvashatóként.\n"
 
-#: misc/fuse2fs.c:3769
+#: misc/fuse2fs.c:3763
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr ""
 "%s: Az összes blokk lefoglalásának engedélyezése a felhasználóknak "
 "veszélyes!\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3775 misc/fuse2fs.c:3789
 #, c-format
 msgid "%s: %s.\n"
 msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3776 misc/fuse2fs.c:3791 misc/tune2fs.c:3049
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr "Futtassa az „e2fsck -fy %s” parancsot.\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3798
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr ""
 "A napló helyreállítást igényel, az „e2fsck -E journal_only” futtatása "
 "szükséges.\n"
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3806
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "%s: A naplóba írás nem támogatott.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3821
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr ""
 "Figyelmeztetés: ellenőrizetlen fájlrendszer csatolása, futtassa az e2fsck-"
 "t.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3825
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
 "Figyelmeztetés: maximális csatolások száma elérve, futtassa az e2fsck-t.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3830
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr "Figyelmeztetés: ellenőrzési idő elérve, futtassa az e2fsck-t.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3834
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr "Árva inode-ok találhatók, futtassa az e2fsck-t.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3838
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr "Hibák találhatók, futtassa az e2fsck-t.\n"
 
@@ -5256,7 +5329,7 @@ msgstr "%s projektjének olvasása közben"
 msgid "While reading version on %s"
 msgstr "%s verziójának olvasása közben"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5278,38 +5351,38 @@ msgstr ""
 "\t[-t fr_típus] [-T használattípus] [-U UUID] [-e hibaviselkedés]\n"
 "\t[-z visszavonási_fájl] [-jnqvDFSV] eszköz [blokkszám]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Parancs futtatása: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "„%s” futtatására tett kísérlet közben"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "a hibás blokkok programból származó listájának feldolgozásakor"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
 "A(z) %d. blokk az elsődleges szuperblokk/csoportleíró területen hibás.\n"
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "Fájlrendszer készítéséhez a(z) %u és %u közötti blokkoknak jóknak kell "
 "lenniük.\n"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Megszakítás…\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5320,15 +5393,20 @@ msgstr ""
 "\thibás blokkokat tartalmaznak.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "a hibás blokkok használtként jelölése közben"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+#, fuzzy
+msgid "while writing reserved inodes"
+msgstr "kvóta inode-ok írásakor"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Inode táblák írásakor: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5337,76 +5415,76 @@ msgstr ""
 "\n"
 "Nem sikerült %d blokk írása az inode táblába innen kezdve: %llu: %s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2726 misc/mke2fs.c:3131
 msgid "done                            \n"
 msgstr "kész                            \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "a gyökérkönyvtár létrehozása közben"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "a gyökér inode olvasása közben"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "a gyökér inode tulajdonosának beállítása közben"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "a /lost+found létrehozása közben"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "a /lost+found kikeresése közben"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "a /lost+found kibővítése közben"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "a hibás blokkok inode beállításakor"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Elfogyott a memória a(z) %d-%d szektorok törlése közben\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Figyelmeztetés: nem olvasható a 0. blokk: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Figyelmeztetés: nem törölhető a(z) %d. szektor: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "napló szuperblokkjának előkészítésekor"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Naplóeszköz nullázása: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "a naplóeszköz nullázása közben (%llu. blokk, számláló: %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "napló szuperblokkjának írásakor"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "Fájlrendszer létrehozása %llu %d blokkal és %u inode-dal\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5415,155 +5493,160 @@ msgstr ""
 "figyelmeztetés: %llu blokk használaton kívül van.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Fájlrendszer címkéje=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "OS típusa: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blokkméret=%u (napló=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Fürtméret=%u (napló=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Töredék mérete=%u (napló=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Stride=%u blokk, csíkszélesség=%u blokk\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u inode, %llu blokk\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu blokk (%2.2f%%) fenntartva a rendszergazda számára\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Első adatblokk=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Gyökérkönyvtár tulajdonosa=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Fájlrendszerblokkok maximális száma=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u blokkcsoport\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u blokkcsoport\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u blokk csoportonként, %u fürt csoportonként\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blokk csoportonként, %u töredék csoportonként\n"
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inode csoportonként\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "Fájlrendszer UUID: %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Tartalék szuperblokkok tárolva a blokkokon: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:820
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s a „-O 64bit” megadását igényli\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:826
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "a(z) „%s” a „resize=%u” előtt kell legyen\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:839
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Érvénytelen desc_size: „%s”\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:853
+#, fuzzy, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Érvénytelen új méret: %s\n"
+
+#: misc/mke2fs.c:865
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Érvénytelen offset: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:879 misc/tune2fs.c:2101
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Érvénytelen mmp_update_interval: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:896
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "A tartalék szuperblokkok száma érvénytelen: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:918
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Érvénytelen stride paraméter: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:933
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Érvénytelen stripe-width paraméter: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:956
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Érvénytelen resize paraméter: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:963
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 "Az átméretezési maximum nagyobb kell legyen a fájlrendszer méreténél.\n"
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:987
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr "Az online átméretezés nem támogatott 0 revíziójú fájlrendszerekkel\n"
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1013 misc/mke2fs.c:1022
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Érvénytelen root_owner: „%s”\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1065
 #, c-format
 msgid ""
 "\n"
@@ -5613,7 +5696,7 @@ msgstr ""
 "\tquotatype=<engedélyezendő kvótatípusok>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1090
 #, c-format
 msgid ""
 "\n"
@@ -5624,7 +5707,7 @@ msgstr ""
 "Figyelmeztetés: %u RAID csíkszélesség nem páros többszöröse %u stride-nak.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1135
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5633,17 +5716,17 @@ msgstr ""
 "Szintaktikai hiba az mke2fs beállítófájljában (%s, a(z) %d. sorban)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1148 misc/tune2fs.c:1120
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Érvénytelen fájlrendszer-beállítás lett megadva: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1160 misc/tune2fs.c:411
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Érvénytelen csatolási beállítás lett megadva: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1296
 #, c-format
 msgid ""
 "\n"
@@ -5652,7 +5735,7 @@ msgstr ""
 "\n"
 "Az mke2fs.conf fájl nem definiálja a(z) %s fájlrendszer típusát.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1300
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5660,11 +5743,11 @@ msgstr ""
 "Valószínűleg telepíteni kell egy frissített mke2fs.conf fájlt.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1304
 msgid "Aborting...\n"
 msgstr "Megszakítás…\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1345
 #, c-format
 msgid ""
 "\n"
@@ -5675,72 +5758,72 @@ msgstr ""
 "Figyelmeztetés: az fs_type %s nincs definiálva az mke2fs.conf-ban\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1527
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Nem sikerült memóriát foglalni az új PATH számára.\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1564
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Nem sikerült a profil előkészítése (hiba: %ld).\n"
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1597
 #, c-format
 msgid "invalid block size - %s"
 msgstr "érvénytelen blokkméret - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1601
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
 "Figyelmeztetés: a(z) %d blokkméret nem használható a legtöbb rendszeren.\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1617
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "Érvénytelen fürtméret - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1630
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "A „-R” elavult, használja helyette a „-E” kapcsolót"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1644 misc/tune2fs.c:1830
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "a hibaviselkedés hibás - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1656
 msgid "Illegal number for blocks per group"
 msgstr "A csoportonkénti blokkok száma érvénytelen"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1661
 msgid "blocks per group must be multiple of 8"
 msgstr "a csoportonkénti blokkok számának 8 többszörösének kell lennie"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1669
 msgid "Illegal number for flex_bg size"
 msgstr "A flex_bg mérethez megadott szám érvénytelen"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1675
 msgid "flex_bg size must be a power of 2"
 msgstr "a flex_bg méretnek 2 hatványának kell lennie"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1680
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "a flex_bg mérete (%lu) legfeljebb 2^31 lehet"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1690
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "az inode arány (%s) érvénytelen (min %d/max %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1700
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "érvénytelen inode méret - %s"
 
-#: misc/mke2fs.c:1684
+#: misc/mke2fs.c:1713
 msgid ""
 "Warning: -K option is deprecated and should not be used anymore. Use '-E "
 "nodiscard' extended option instead!\n"
@@ -5748,11 +5831,11 @@ msgstr ""
 "Figyelmeztetés: a -K kapcsoló elavult, már ne használja. Helyette a „-E "
 "nodiscard” bővített beállítás használható.\n"
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1724
 msgid "in malloc for bad_blocks_filename"
 msgstr "a malloc-ban a bad_blocks_filename-hez"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1733
 #, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
@@ -5761,68 +5844,68 @@ msgstr ""
 "Figyelmeztetés: a címke túl hosszú, csonkítva lesz erre: „%s”\n"
 "\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1742
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "a fenntartott blokkok százaléka érvénytelen - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1757
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "az inode-ok száma hibás - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1770
 msgid "while allocating fs_feature string"
 msgstr "az fs_feature karakterlánc foglalásakor"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1787
 #, c-format
 msgid "bad revision level - %s"
 msgstr "hibás revíziószint - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1792
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "%d revízió létrehozására tett kísérlet közben"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1806
 msgid "The -t option may only be used once"
 msgstr "A -t kapcsoló csak egyszer használható"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1814
 msgid "The -T option may only be used once"
 msgstr "A -T kapcsoló csak egyszer használható"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1870 misc/mke2fs.c:3215
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "%s naplóeszköz megnyitására tett kísérlet közben\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1876
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 "A naplóeszköz blokkmérete (%d) kisebb, mint a minimális %d blokkméret\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1882
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "A naplóeszköz blokkmérete lesz felhasználva: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1893
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "érvénytelen blokkok: „%s” ezen az eszközön: „%s”"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1923
 msgid "filesystem"
 msgstr "fájlrendszer"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1941 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "a fájlrendszerméret meghatározására tett kísérlet közben"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1947
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5830,7 +5913,7 @@ msgstr ""
 "Nem határozható meg az eszközméret, meg kell adnia\n"
 "a fájlrendszer méretét\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1954
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5842,39 +5925,44 @@ msgstr ""
 "\tmert egy módosított partíció foglalt és használatban van. Újraindításra\n"
 "\tlehet szükség a partíciós tábla újraolvasásához.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:1971
 msgid "Filesystem larger than apparent device size."
 msgstr "A fájlrendszer nagyobb, mint a nyilvánvaló lemezméret."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:1991
 msgid "Failed to parse fs types list\n"
 msgstr "A fájlrendszer-típusok listája nem dolgozható fel\n"
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2040
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "A HURD nem támogatja a filetype jellemzőt.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2045
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "A HURD nem támogatja a huge_file jellemzőt.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2050
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "A HURD nem támogatja a metadata_csum jellemzőt.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2055
+#, fuzzy
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "A HURD nem támogatja a huge_file jellemzőt.\n"
+
+#: misc/mke2fs.c:2065
 msgid "while trying to determine hardware sector size"
 msgstr "a hardver szektorméret meghatározására tett kísérlet közben"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2071
 msgid "while trying to determine physical sector size"
 msgstr "a fizikai szektorméret meghatározására tett kísérlet közben"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2103
 msgid "while setting blocksize; too small for device\n"
 msgstr "a blokkméret beállítása közben: túl kicsi az eszközhöz\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
@@ -5882,7 +5970,7 @@ msgstr ""
 "Figyelmeztetés: a megadott %d blokkméret kisebb az eszköz fizikai %d "
 "szektorméreténél\n"
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2132
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5891,38 +5979,38 @@ msgstr ""
 "%s: Az eszköz mérete (0x%llx blokk) %s darabbal nagyobb,\n"
 "\tmint ami 32 biten kifejezhető %d blokkmérettel.\n"
 
-#: misc/mke2fs.c:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2144
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
-"%s: Az eszköz mérete (0x%llx blokk) %s darabbal nagyobb,\n"
-"\tmint ami 32 biten kifejezhető %d blokkmérettel.\n"
+"%s: Az eszköz mérete (0x%llx blokk) %s túl nagy egy\n"
+"\t%d blokkméretet használó fájlrendszer létrehozásához.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2166
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "fs_types feloldása az mke2fs.conf-hoz: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2173
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 "A fájlrendszer jellemzői nem támogatottak 0 revíziójú fájlrendszerekkel\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2181
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr "A ritka szuperblokkok nem támogatottak 0 revíziójú fájlrendszerekkel\n"
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2191
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "A naplók nem támogatottak 0 revíziójú fájlrendszerekkel\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2204
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "a fenntartott blokkok százaléka érvénytelen - %lf"
 
-#: misc/mke2fs.c:2175
+#: misc/mke2fs.c:2221
 msgid ""
 "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
 "rectify.\n"
@@ -5930,36 +6018,36 @@ msgstr ""
 "Az extenteket engedélyezni KELL a 64 bites fájlrendszerekhez. A -O extents "
 "megadásával javíthatja.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2241
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "A fürtméret nem lehet kisebb a blokkméretnél.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2247
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "a fürtméret megadása igényli a bigalloc jellemzőt"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2267
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "figyelmeztetés: Nem kérhető le az eszközgeometria ehhez: %s\n"
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2270
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "%s igazítása eltolva %lu bájttal.\n"
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2272
 #, c-format
 msgid ""
 "This may result in very poor performance, (re)-partitioning suggested.\n"
 msgstr "Ez rossz teljesítményt okozhat, javasolt a(z újra)particionálás.\n"
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2293
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "a(z) %d bájtos blokkméret túl nagy a rendszerhez (maximum: %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2297
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
@@ -5967,7 +6055,7 @@ msgstr ""
 "Figyelmeztetés: a(z) %d bájtos blokkméret túl nagy a rendszerhez (maximum: "
 "%d), folytatás kényszerítve\n"
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2305
 #, c-format
 msgid ""
 "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
@@ -5976,7 +6064,7 @@ msgstr ""
 "Javaslat: használja a 3.18-as vagy újabb Linux kernelt a metaadat- és napló-"
 "ellenőrzőösszeg jellemzők stabilabb támogatásáért.\n"
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2360
 #, c-format
 msgid ""
 "\n"
@@ -5990,11 +6078,17 @@ msgstr ""
 "Létrejön egy %llu blokkos fájlrendszer, de nem biztos, hogy ezt akarta.\n"
 "\n"
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2375
+#, fuzzy, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr ""
+"%d bájtos inode-ok túl kicsik a projektkvótához, adjon meg nagyobb méretet"
+
+#: misc/mke2fs.c:2397
 msgid "Can't support bigalloc feature without extents feature"
 msgstr "A bigalloc jellemző nem támogatható az extents jellemző nélkül"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2404
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -6002,7 +6096,7 @@ msgstr ""
 "A resize_inode és meta_bg jellemzők nem kompatibilisek.\n"
 "Egyszerre nem engedélyezhető mindkettő.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2412
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -6015,50 +6109,44 @@ msgstr ""
 "Bigalloc\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2424
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "a fenntartott online átméretezési blokkok nem támogatottak nem ritka "
 "fájlrendszeren"
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2433
 msgid "blocks per group count out of range"
 msgstr "a csoportonkénti blokkszám kívül esik a tartományon"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2455
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 "A flex_bg jellemző nincs engedélyezve, így a flex_bg mérete nem adható meg"
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2467
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "az inode méret (%d) érvénytelen (min %d/max %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2482
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr ""
 "%d bájtos inode-ok túl kicsik a beágyazott adatokhoz, adjon meg nagyobb "
 "méretet"
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-"%d bájtos inode-ok túl kicsik a projektkvótához, adjon meg nagyobb méretet"
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2497
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "túl sok inode (%llu), növelje az inode arányt"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2504
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "túl sok inode (%llu), 2^32-nél kevesebbet adjon meg"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2518
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -6069,32 +6157,37 @@ msgstr ""
 "\tblokkos fájlrendszernek, adjon meg magasabb inode_ratio (-i) értéket\n"
 "\tvagy csökkentse az inode számot (-N).\n"
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2705
 msgid "Discarding device blocks: "
 msgstr "Eszközblokkok eldobása: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2721
 msgid "failed - "
 msgstr "meghiúsult - "
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2780
 msgid "while initializing quota context"
 msgstr "a kvóta kontextus előkészítésekor"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2787
 msgid "while writing quota inodes"
 msgstr "kvóta inode-ok írásakor"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2812
 #, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "hibás hibaviselkedés a profilban - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2888
+#, fuzzy
+msgid "in malloc for android_sparse_params"
+msgstr "a malloc-ban a bad_blocks_filename-hez"
+
+#: misc/mke2fs.c:2902
 msgid "while setting up superblock"
 msgstr "a szuperblokk beállítása közben"
 
-#: misc/mke2fs.c:2849
+#: misc/mke2fs.c:2918
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
@@ -6104,7 +6197,7 @@ msgstr ""
 "kezelhető, de a blokktérképeké nem. Az extentek kikapcsolása csökkenti a "
 "metaadat-ellenőrzés lefedettségét. A -O extents megadásával javíthatja.\n"
 
-#: misc/mke2fs.c:2856
+#: misc/mke2fs.c:2925
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
@@ -6113,30 +6206,31 @@ msgstr ""
 "támogatott nagyobb mezők lehetővé teszik a teljes erősségű ellenőrzést. A -O "
 "64bit megadásával javíthatja.\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
+#: misc/mke2fs.c:2933
+#, fuzzy
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
 msgstr "A metadata_csum_seed jellemző igényli a metadata_csum jellemzőt.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:2957
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr ""
 "Az eldobás sikerült, és 0-kat fog visszaadni - az inode tábla törlésének "
 "kihagyása\n"
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3056
 #, c-format
 msgid "unknown os - %s"
 msgstr "ismeretlen oprendszer - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3119
 msgid "Allocating group tables: "
 msgstr "Csoporttáblák foglalása: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3127
 msgid "while trying to allocate filesystem tables"
 msgstr "a fájlrendszer táblák lefoglalására tett kísérlet közben"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3136
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6144,30 +6238,30 @@ msgstr ""
 "\n"
 "\tA részfürt bittérképének konvertálása közben"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3142
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr "%s tovább sérülhet a szuperblokk újraírásával\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3183
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "%llu blokk nullázásakor a fájlrendszer végén"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3196
 msgid "while reserving blocks for online resize"
 msgstr "blokkok foglalásakor az online átméretezéshez"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3208 misc/tune2fs.c:1538
 msgid "journal"
 msgstr "napló"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3220
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Napló hozzáadása a(z) %s eszközhöz: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3227
 #, c-format
 msgid ""
 "\n"
@@ -6176,21 +6270,21 @@ msgstr ""
 "\n"
 "\tNapló %s eszközhöz adására tett kísérlet közben"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3232 misc/mke2fs.c:3261 misc/mke2fs.c:3299
+#: misc/mk_hugefiles.c:598 misc/tune2fs.c:1567 misc/tune2fs.c:1586
 msgid "done\n"
 msgstr "kész\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3238
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Naplólétrehozás kihagyása csak szuper módban\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3248
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Napló létrehozása (%u blokk): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3257
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6198,7 +6292,7 @@ msgstr ""
 "\n"
 "\tNapló létrehozására tett kísérlet közben"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3269 misc/tune2fs.c:1185
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
@@ -6206,35 +6300,31 @@ msgstr ""
 "\n"
 "Hiba a többszörös csatolás elleni védelem szolgáltatás bekapcsolásakor."
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3274
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 "A többszörös csatolás elleni védelem bekapcsolva %d másodperces frissítési "
 "gyakorisággal.\n"
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3290
 msgid "Copying files into the device: "
 msgstr "Fájlok másolása az eszközre: "
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3296
 msgid "while populating file system"
 msgstr "a fájlrendszer feltöltésekor"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3303
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Szuperblokkok és fájlrendszer-könyvelési információk írása: "
 
-#: misc/mke2fs.c:3230
+#: misc/mke2fs.c:3310
 #, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Figyelmeztetés: hiba történt a szuperblokkok kiírásakor."
+msgid "while writing out and closing file system"
+msgstr "%llu blokk nullázásakor a fájlrendszer végén"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3313
 msgid ""
 "done\n"
 "\n"
@@ -6242,7 +6332,12 @@ msgstr ""
 "kész\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
+#, c-format
+msgid "while zeroing block %llu for hugefile"
+msgstr "%llu blokk nullázásakor a nagy fájlnál"
+
+#: misc/mk_hugefiles.c:514
 #, c-format
 msgid ""
 "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
@@ -6250,21 +6345,21 @@ msgstr ""
 "A(z) %llu (%uk) blokkos partícióeltolás nem kompatibilis a(z) %u "
 "fürtmérettel.\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:581
 msgid "Huge files will be zero'ed\n"
 msgstr "Az óriási fájlok nullázva lesznek\n"
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:582
 #, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "%lu óriási fájl létrehozása "
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:584
 #, c-format
 msgid "with %llu blocks each"
 msgstr "egyenként %llu blokkal"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:593
 #, c-format
 msgid "while creating huge file %lu"
 msgstr "%lu. óriási fájl létrehozása közben"
@@ -6309,23 +6404,27 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   kezdet=%8d méret=%8lu vég=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "Futtassa az „e2fsck -D” parancsot a fájlrendszeren.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Futtassa az „e2fsck -f” parancsot a fájlrendszeren.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "Futtassa az „e2fsck -D” parancsot a fájlrendszeren.\n"
+msgstr "Futtassa az „e2fsck -fD” parancsot a fájlrendszeren.\n"
 
-#: misc/tune2fs.c:134
-#, c-format
+#: misc/tune2fs.c:136
+#, fuzzy, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
@@ -6340,24 +6439,24 @@ msgstr ""
 "\t[-E bővített_beállítás[,...]] [-T utolsó_ellenőrzés_ideje] [-U UUID]\n"
 "\t[ -I új_inode_méret ] [-z visszavonási_fájl] eszköz\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "A napló-szuperblokk nem található!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "a külső napló megnyitására tett kísérlet közben"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2845
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s nem naplóeszköz.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:297 misc/tune2fs.c:2856
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "A fájlrendszer UUID-ja nem található a naplóeszközön.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:321
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6365,52 +6464,52 @@ msgstr ""
 "Nem található a naplóeszköz. NEM került eltávolításra.\n"
 "Használja a -f kapcsolót hiányzó naplóeszköz eltávolításához.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:330
 msgid "Journal removed\n"
 msgstr "Napló eltávolítva\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:374
 msgid "while reading bitmaps"
 msgstr "bittérképek olvasásakor"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:382
 msgid "while clearing journal inode"
 msgstr "napló inode törlése közben"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:393
 msgid "while writing journal inode"
 msgstr "napló inode írásakor"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:429 misc/tune2fs.c:452 misc/tune2fs.c:465
 msgid "(and reboot afterwards!)\n"
 msgstr "(és utána indítsa újra!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:480
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr "Az e2fsck futtatása után futtassa a „resize2fs %s %s"
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:483
 #, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr "Futtassa a „resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:487
 #, c-format
 msgid " -z \"%s\""
 msgstr " -z \"%s\""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:489
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr "” parancsot a 64 bites mód bekapcsolásához.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:491
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr "” parancsot a 64 bites mód kikapcsolásához.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1087
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
@@ -6418,17 +6517,17 @@ msgstr ""
 "FIGYELMEZTETÉS: Nem erősíthető meg a kernel support metadata_csum_seed\n"
 " kernelbeli támogatása. Ehhez Linux >= v4.4 szükséges.\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1123
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "„%s” fájlrendszer-jellemző törlése nem támogatott.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1129
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "„%s” fájlrendszer-jellemző beállítása nem támogatott.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1138
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6437,7 +6536,7 @@ msgstr ""
 "csatolva,\n"
 "vagy csak olvashatóan van csatolva.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1146
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6445,7 +6544,7 @@ msgstr ""
 "A needs_recovery jelző be van állítva. A has_journal jelző törlése előtt\n"
 "futtassa az e2fsck programot.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1164
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
@@ -6453,7 +6552,7 @@ msgstr ""
 "A „sparse_super” fájlrendszer-jellemző beállítása nem támogatott\n"
 "a bekapcsolt meta_bg jellemzővel rendelkező fájlrendszerekhez.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1177
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6462,14 +6561,14 @@ msgstr ""
 "A többszörös csatolás elleni védelem nem állítható be,\n"
 "ha a fájlrendszer csatolva van, vagy csak olvasható.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1195
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 "A többszörös csatolás elleni védelem bekapcsolva %d mp frissítési "
 "gyakorisággal.\n"
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1204
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6477,26 +6576,26 @@ msgstr ""
 "A többszörös csatolás elleni védelem nem kapcsolható ki,\n"
 "ha a fájlrendszer csak olvasható.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1212
 msgid "Error while reading bitmaps\n"
 msgstr "Hiba a bittérképek olvasásakor\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1221
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr "Az MMP blokkban lévő bűvös szám nem egyezik. Várt: %x, tényleges: %x\n"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1226
 msgid "while reading MMP block."
 msgstr "az MMP blokk olvasása közben."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1258
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr "A flex_bg jelző törlése inkonzisztenssé tenné a fájlrendszert.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1269
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6505,15 +6604,15 @@ msgstr ""
 "csatolva,\n"
 "vagy csak olvashatóan van csatolva.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1280
 msgid "Enabling checksums could take some time."
 msgstr "Az ellenőrzőösszegek engedélyezése eltarthat egy ideig."
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1282
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr "A metadata_csum nem engedélyezhető csatolt fájlrendszeren!\n"
 
-#: misc/tune2fs.c:1175
+#: misc/tune2fs.c:1288
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
@@ -6524,7 +6623,7 @@ msgstr ""
 "metaadat-ellenőrzés lefedettségét. Futtassa újra a -O extents megadásával a "
 "javításhoz.\n"
 
-#: misc/tune2fs.c:1182
+#: misc/tune2fs.c:1295
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Run resize2fs -b to "
@@ -6534,33 +6633,30 @@ msgstr ""
 "támogatott nagyobb mezők lehetővé teszik a teljes erősségű ellenőrzést. "
 "Futtassa a resize2fs -b parancsot a javításhoz.\n"
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1321
 msgid "Disabling checksums could take some time."
 msgstr "Az ellenőrzőösszegek letiltása eltarthat egy ideig."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1323
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr "A metadata_csum nem tiltható le csatolt fájlrendszeren!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1386
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr "A 64 bites mód nem engedélyezhető csatolt fájlrendszeren!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1396
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr "A 64 bites mód nem tiltható le csatolt fájlrendszeren!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1426
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
-"\n"
-"Figyelmeztetés: projekt engedélyezve a kvóta nélkül\n"
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1447
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6568,7 +6664,7 @@ msgstr ""
 "\n"
 "Figyelmeztetés: a '^quota' jellemző felülírja a '-Q' argumentumait.\n"
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1465
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
@@ -6576,7 +6672,7 @@ msgstr ""
 "A „metadata_csum_seed” fájlrendszer-jellemző beállítása csak a bekapcsolt\n"
 "metadata_csum jellemzővel rendelkező fájlrendszerekhez támogatott.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1483
 msgid ""
 "UUID has changed since enabling metadata_csum.  Filesystem must be "
 "unmounted \n"
@@ -6586,11 +6682,16 @@ msgstr ""
 "kell választani az összes metaadat biztonságos újraírásához, hogy "
 "megfeleljenek az új UUID-nek.\n"
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1489
+#, fuzzy
+msgid "Recalculating checksums could take some time."
+msgstr "Az ellenőrzőösszegek engedélyezése eltarthat egy ideig."
+
+#: misc/tune2fs.c:1531
 msgid "The filesystem already has a journal.\n"
 msgstr "A fájlrendszer már rendelkezik naplóval.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1551
 #, c-format
 msgid ""
 "\n"
@@ -6599,21 +6700,21 @@ msgstr ""
 "\n"
 "\t%s naplójának megnyitására tett kísérlet közben\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1555
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Napló létrehozása %s eszközön: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1563
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "fájlrendszer naplóhoz adása közben ezen: %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1569
 msgid "Creating journal inode: "
 msgstr "Napló inode létrehozása: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1583
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6621,26 +6722,31 @@ msgstr ""
 "\n"
 "\tNaplófájl létrehozására tett kísérlet közben"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1621
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1634
 msgid "while initializing quota context in support library"
 msgstr "a kvóta kontextus előkészítésekor a támogató programkönyvtárban"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1649
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr "a kvótakorlátok frissítésekor (%d)"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1657
 #, c-format
 msgid "while writing quota file (%d)"
 msgstr "a kvótafájl írásakor (%d)"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1675
 #, c-format
 msgid "while removing quota file (%d)"
 msgstr "a kvótafájl eltávolításakor (%d)"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1718
 msgid ""
 "\n"
 "Bad quota options specified.\n"
@@ -6664,65 +6770,65 @@ msgstr ""
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1776
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "A dátum/időmeghatározás nem dolgozható fel: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1801 misc/tune2fs.c:1814
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "a csatolásszám hibás - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1857
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "a gid/csoportnév hibás - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1890
 #, c-format
 msgid "bad interval - %s"
 msgstr "a gyakoriság hibás - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1919
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "a fenntartott blokkok aránya hibás - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1934
 msgid "-o may only be specified once"
 msgstr "a -o csak egyszer adható meg"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1943
 msgid "-O may only be specified once"
 msgstr "a -O csak egyszer adható meg"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "a fenntartott blokkok száma hibás - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1989
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "hibás uid/felhasználónév - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:2006
 #, c-format
 msgid "bad inode size - %s"
 msgstr "hibás inode méret - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:2013
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Az inode méretnek kettő hatványának kell lennie - %s"
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2110
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "az mmp_update_interval túl nagy: %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2115
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
 msgid_plural ""
@@ -6734,27 +6840,28 @@ msgstr[1] ""
 "A többszörös csatolás elleni védelem gyakoriságának beállítása %lu "
 "másodpercre\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2138
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Érvénytelen RAID stride: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2153
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Érvénytelen RAID csíkszélesség: %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2168
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Érvénytelen hash algoritmus: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2174
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Az alapértelmezett hash algoritmus beállítása erre: %s (%d)\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2193
+#, fuzzy
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6766,6 +6873,7 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
 "\ttest_fs\n"
@@ -6787,31 +6895,31 @@ msgstr ""
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2663
 msgid "Failed to read inode bitmap\n"
 msgstr "Nem sikerült beolvasni az inode bittérképet\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2668
 msgid "Failed to read block bitmap\n"
 msgstr "Nem sikerült beolvasni a blokkbittérképet\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2685 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "áthelyezendő blokkok"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2688
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr "A blokkbittérkép lefoglalása sikertelen az inode méret növelésekor\n"
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2694
 msgid "Not enough space to increase inode size \n"
 msgstr "Nincs elég hely az inode méret növeléséhez \n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2699
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "A blokkok áthelyezése sikertelen az inode-átméretezéskor \n"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2731
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6820,7 +6928,17 @@ msgstr ""
 "Futtassa az e2undo parancsot a fájlrendszer módosításainak "
 "visszavonásához. \n"
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2936
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+"Ha biztos benne, hogy a fájlrendszer nincs használatban egyetlen "
+"csomóponton\n"
+"sem, akkor futtassa a következőt:\n"
+"„tune2fs -f -E clear_mmp {eszköz}”\n"
+
+#: misc/tune2fs.c:2943
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
@@ -6829,76 +6947,98 @@ msgstr ""
 "Az MMP blokk bűvös száma hibás. Próbálja javítani a következő futtatásával:\n"
 "'e2fsck -f %s'\n"
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2955
 msgid "Cannot modify a journal device.\n"
 msgstr "Nem lehet naplóeszközt módosítani.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2968
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Az inode méret már %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2975
 msgid "Shrinking inode size is not supported\n"
 msgstr "Az inode méret csökkentése nem támogatott\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2980
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "Érvénytelen inode méret: %lu (max: %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2986
 msgid "Resizing inodes could take some time."
 msgstr "Az inode-ok átméretezése eltarthat egy ideig."
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3034
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+"Figyelmeztetés: A napló piszkos. Érdemes lenne újrajátszani a naplót, így:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"és utána futtatni ezt a parancsot. Egyébként a módosításokat a napló\n"
+"helyreállítása felülírhatja.\n"
+
+#: misc/tune2fs.c:3045
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Napló helyreállítása.\n"
+
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "A maximális csatolásszám beállítása ennyire: %d\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Az aktuális csatolásszám beállítása ennyire: %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3074
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "A hibaviselkedés beállítása erre: %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3079
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "A fenntartott blokkok gid-jének beállítása erre: %lu\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3084
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "az ellenőrzések időköze túl nagy (%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3091
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Az ellenőrzések közti időköz beállítása %lu másodpercre\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3098
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr ""
 "A fenntartott blokkok százalékos arányának beállítása ennyire: %g%% (%llu "
 "blokk)\n"
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3104
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "a fenntartott blokkok száma túl nagy (%llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3111
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "A fenntartott blokkok számának beállítása erre: %llu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3116
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6906,7 +7046,7 @@ msgstr ""
 "\n"
 "A fájlrendszer már rendelkezik ritka szuperblokkokkal.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3119
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6917,7 +7057,7 @@ msgstr ""
 "A ritka szuperblokk jelző beállítása nem támogatott\n"
 "a bekapcsolt meta_bg jellemzővel rendelkező fájlrendszerekhez.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3129
 #, c-format
 msgid ""
 "\n"
@@ -6926,7 +7066,7 @@ msgstr ""
 "\n"
 "A ritka szuperblokk jelző beállítva. %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3134
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6934,33 +7074,33 @@ msgstr ""
 "\n"
 "A ritka szuperblokk jelző törlése nem támogatott.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3142
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "A fájlrendszer utolsó ellenőrzési idejének beállítása erre: %s\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3148
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "A fenntartott blokkok uid-jének beállítása erre: %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3180
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr "Hiba a clear_mmp használatakor. A -f kapcsolóval együtt használandó\n"
 
-#: misc/tune2fs.c:3024
+#: misc/tune2fs.c:3198
 msgid ""
 "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "A kvóta jellemző csak akkor módosítható, amikor a fájlrendszer le van "
 "választva.\n"
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3222
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "Az UUID csak akkor módosítható, amikor a fájlrendszer le van választva.\n"
 
-#: misc/tune2fs.c:3051
+#: misc/tune2fs.c:3225
 msgid ""
 "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
 "and re-run this command.\n"
@@ -6968,27 +7108,27 @@ msgstr ""
 "Ha csak a v4.4-nél újabb kernelt használ, futtassa a „tune2fs -O "
 "metadata_csum_seed” parancsot, majd futtassa újra ezt a parancsot.\n"
 
-#: misc/tune2fs.c:3060
+#: misc/tune2fs.c:3234
 msgid "Setting UUID on a checksummed filesystem could take some time."
 msgstr ""
 "Az UUID beállítása egy ellenőrzőösszeget használó fájlrendszeren eltarthat "
 "egy ideig."
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3259
 msgid "Invalid UUID format\n"
 msgstr "Érvénytelen UUID formátum\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3275
 msgid "Need to update journal superblock.\n"
 msgstr "A napló szuperblokkját frissíteni kell.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3301
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "Az inode méret csak akkor módosítható, amikor a fájlrendszer le van "
 "választva.\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3308
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -6996,66 +7136,43 @@ msgstr ""
 "Az inode méret módosítása nem támogatott a bekapcsolt flex_bg\n"
 "jellemzővel rendelkező fájlrendszerekhez.\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3326
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Az inode méret beállítása ennyire: %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3330
 msgid "Failed to change inode size\n"
 msgstr "Nem sikerült megváltoztatni az inode méretet\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3344
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "A stride méret beállítása ennyire: %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3349
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "A csíkszélesség beállítása ennyire: %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3356
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr ""
 "A bővített alapértelmezett csatolási beállítások beállítása erre: „%s”\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-"Figyelmeztetés: A napló piszkos. Érdemes lenne újrajátszani a naplót, így:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"és utána futtatni ezt a parancsot. Egyébként a módosításokat a napló\n"
-"helyreállítása felülírhatja.\n"
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr "Napló helyreállítása.\n"
-
 #: misc/util.c:100
 msgid "<proceeding>\n"
 msgstr "<folytatás>\n"
 
 #: misc/util.c:104
 #, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Mindenképp folytatja (vagy vár %d másodpercet)? (i,n) "
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "Mindenképp folytatja (vagy vár %d másodpercet)? (i,N) "
 
 #: misc/util.c:108
-#, fuzzy
 msgid "Proceed anyway? (y,N) "
-msgstr "Mindenképp folytatja? (i,n) "
+msgstr "Mindenképp folytatja? (i,N) "
 
 #: misc/util.c:133
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
@@ -7294,45 +7411,45 @@ msgid "#\tNum=%llu, Size=%llu, Cursor=%llu, Sorted=%llu\n"
 msgstr "#\tSzám=%llu, Méret=%llu, Kurzor=%llu, Rendezett=%llu\n"
 
 #: resize/main.c:49
-#, c-format
+#, fuzzy, c-format
 msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"[-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
 "Használat: %s [-d hibakeresési_jelzők] [-f] [-F] [-M] [-P] [-p] eszköz [-b|-"
 "s|új_méret] [-z visszavonási_fájl]\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Az inode tábla kibővítése"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Blokkok áthelyezése"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Az inode tábla vizsgálata"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Inode hivatkozások frissítése"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Inode tábla áthelyezése"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Ismeretlen lépés?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "%d. lépés kezdése (max = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7345,17 +7462,17 @@ msgstr ""
 "szeretné.\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "%s megnyitása közben"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "az elérési információk lekérésekor ehhez: %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7364,30 +7481,30 @@ msgstr ""
 "Először futtassa az „e2fsck -f %s” parancsot.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "A fájlrendszer becsült minimális mérete: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Érvénytelen új méret: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "Az új méret túl nagy a 32 biten való ábrázoláshoz\n"
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Az új méret kisebb a minimálisnál (%llu)\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Érvénytelen stride hossz"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7398,12 +7515,12 @@ msgstr ""
 "A kért új méret %llu blokk.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr "A 64bit jellemzőt nem lehet beállítani és törölni is.\n"
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
 msgid ""
 "Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
@@ -7411,12 +7528,12 @@ msgid ""
 msgstr ""
 "Egy 2^32 blokknál nagyobb fájlrendszeren nem módosítható a 64bit jellemző.\n"
 
-#: resize/main.c:575
+#: resize/main.c:581
 #, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr "A 64bit jellemző nem módosítható, amíg a fájlrendszer csatolva van.\n"
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
 msgid ""
 "Please enable the extents feature with tune2fs before enabling the 64bit "
@@ -7425,7 +7542,7 @@ msgstr ""
 "Engedélyezze az extents jellemzőt a tune2fs használatával a 64bit\n"
 "jellemző bekapcsolása előtt.\n"
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
@@ -7434,37 +7551,37 @@ msgstr ""
 "A fájlrendszer már %llu (%dk) blokk hosszú. Nincs teendő!\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "A fájlrendszer már 64 bites.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "A fájlrendszer már 32 bites.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "A fájlrendszer 64 bitesre alakítása.\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "A fájlrendszer 32 bitesre alakítása.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr "A fájlrendszer átméretezése ezen: %s, %llu (%dk) blokkra.\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "%s átméretezésére tett kísérlet közben"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7473,7 +7590,7 @@ msgstr ""
 "Futtassa az „e2fsck -fy %s” parancsot a fájlrendszer\n"
 "megjavításához a megszakított átméretezési művelet után.\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7482,7 +7599,7 @@ msgstr ""
 "A fájlrendszer ezen: %s mostantól %llu (%dk) blokk hosszú.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "%s csonkítására tett kísérlet közben"
@@ -7545,12 +7662,12 @@ msgstr "%s online átméretezésének végrehajtása %llu (%dk) blokkra.\n"
 msgid "While trying to extend the last group"
 msgstr "Az utolsó csoport kiterjesztésére tett kísérlet közben"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "A(z) %d. csoport hozzáadására tett kísérlet közben"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
 msgid ""
 "Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
@@ -7560,38 +7677,38 @@ msgstr ""
 "átméretezés nem támogatott ezen a rendszeren\n"
 
 #: resize/resize2fs.c:759
-#, c-format
-msgid "inodes (%llu) must be less than %u"
+#, fuzzy, c-format
+msgid "inodes (%llu) must be less than %u\n"
 msgstr "az inode-ok (%llu) száma kisebb kell legyen, mint %u"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "fenntartott blokkok"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "metaadat-blokkok"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2475
 msgid "new meta blocks"
 msgstr "új metablokkok"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2698
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr "Soha nem fordulhatna elő! Nincs sb az utolsó super_sparse bg-ben?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2703
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr "Soha nem fordulhatna elő! Váratlan old_desc a super_sparse bg-ben?\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2776
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Soha nem fordulhatna elő: az átméretezendő inode sérült!\n"
 
 #: lib/ext2fs/ext2_err.c:11
 #, fuzzy
-msgid "EXT2FS Library version 1.43.4-WIP"
-msgstr "EXT2FS programkönyvtár 1.43 verzió"
+msgid "EXT2FS Library version 1.44.4"
+msgstr "EXT2FS programkönyvtár 1.43.5 verzió"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -8158,7 +8275,8 @@ msgid "MMP: device currently active"
 msgstr "MMP: az eszköz jelenleg aktív"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
+#, fuzzy
+msgid "MMP: e2fsck being run"
 msgstr "MMP: az fsck fut"
 
 #: lib/ext2fs/ext2_err.c:152
@@ -8214,7 +8332,8 @@ msgid "Unknown checksum algorithm"
 msgstr "Ismeretlen ellenőrzőösszeg-algoritmus"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
+#, fuzzy
+msgid "MMP block checksum does not match"
 msgstr "Az MMP blokk ellenőrzőösszege nem felel meg az MMP blokknak"
 
 #: lib/ext2fs/ext2_err.c:166
@@ -8307,9 +8426,12 @@ msgid "The journal superblock is corrupt"
 msgstr "A napló szuperblokk sérült"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "Az átméretezendő inode sérült"
+msgstr "Az inode sérült"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8503,83 +8625,39 @@ msgstr "%s egy %s fájlrendszert tartalmaz\n"
 msgid "%s contains `%s' data\n"
 msgstr "%s „%s” adatokat tartalmaz\n"
 
-#~ msgid "Please run e2fsck on the filesystem.\n"
-#~ msgstr "Futtassa az e2fsck programot a fájlrendszeren.\n"
-
-#~ msgid "Invalid quotatype parameter: %s\n"
-#~ msgstr "Érvénytelen quotatype paraméter: %s\n"
-
-#~ msgid "@i %i has @cion flag set on @f without @cion support.  "
-#~ msgstr ""
-#~ "a(z) %i. inode tömörítés jelzője be van állítva egy tömörítést nem "
-#~ "támogató fájlrendszeren. "
-
-#~ msgid "@A @a @b %b.  "
-#~ msgstr "hiba a bővített attribútumblokk (%b) lefoglalásakor."
-
-#~ msgid "%s: warning: compression support is experimental.\n"
-#~ msgstr "%s: figyelmeztetés: a tömörítés támogatása még kísérleti.\n"
-
 #~ msgid ""
-#~ "%s: e2fsck not compiled with HTREE support,\n"
-#~ "\tbut filesystem %s has HTREE directories.\n"
+#~ "\n"
+#~ "*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
+#~ "\n"
 #~ msgstr ""
-#~ "%s: az e2fsck a HTREE támogatás nélkül lett lefordítva,\n"
-#~ "\tde ezen a fájlrendszeren HTREE könyvtárak vannak: %s.\n"
-
-#~ msgid "while allocating zeroizing buffer"
-#~ msgstr "nullázó puffer foglalásakor"
-
-#~ msgid ", unused inodes %u\n"
-#~ msgstr ", nem használt inode-ok: %u\n"
-
-#~ msgid "Failed to read the file system data \n"
-#~ msgstr "A fájlrendszer adatainak olvasása sikertelen\n"
-
-#~ msgid "Failed tdb_fetch %s\n"
-#~ msgstr "A tdb_fetch %s meghiúsult\n"
-
-#~ msgid "The file system UUID didn't match \n"
-#~ msgstr "A fájlrendszer UUID-ja nem egyezett \n"
-
-#~ msgid "Failed tdb_open %s\n"
-#~ msgstr "A tdb_open %s meghiúsult\n"
-
-#~ msgid "Failed to open %s\n"
-#~ msgstr "„%s” megnyitása sikertelen\n"
-
-#~ msgid "Replayed transaction of size %zd at location %llu\n"
-#~ msgstr "%zd méretű tranzakció újrajátszva ezen a helyen: %llu\n"
-
-#~ msgid "Failed write %s\n"
-#~ msgstr "Nem sikerült írni ezt: %s\n"
+#~ "\n"
+#~ "*** Ellenőrzőösszeg-hibák vannak a fájlrendszeren! Futtassa az e2fsck-t "
+#~ "most!\n"
+#~ "\n"
 
-#~ msgid "Couldn't allocate memory to parse quota options!\n"
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
+#~ "\n"
 #~ msgstr ""
-#~ "Nem sikerült memóriát foglalni a kvótabeállítások feldolgozásához!\n"
-
-#~ msgid "Couldn't allocate memory for tdb filename\n"
-#~ msgstr "Nem sikerült memóriát foglalni a tdb fájlnév számára\n"
+#~ "\n"
+#~ "*** Ellenőrzőösszeg-hibák vannak a bittérképekben! Futtassa az e2fsck-t "
+#~ "most!\n"
+#~ "\n"
 
 #~ msgid ""
-#~ "To undo the tune2fs operation please run the command\n"
-#~ "    e2undo %s %s\n"
 #~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
 #~ msgstr ""
-#~ "A tune2fs művelet visszavonásához futtassa az\n"
-#~ "    e2undo %s %s\n"
-#~ "parancsot.\n"
-
-#~ msgid "%s is entire device, not just one partition!\n"
-#~ msgstr "%s a teljes eszköz, nem csak egy partíció!\n"
+#~ "\n"
+#~ "%s: %s: hiba a bittérképek olvasásakor: %s\n"
 
-#~ msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
 #~ msgstr ""
-#~ "%g csoport blokkbittérképe inicializálatlan, de az inode bittérkép "
-#~ "használatban.\n"
-
-#~ msgid "<The ACL index inode>"
-#~ msgstr "<Az ACL index inode>"
+#~ "\n"
+#~ "Figyelmeztetés: hiba történt a szuperblokkok kiírásakor.\n"
 
-#~ msgid "<The ACL data inode>"
-#~ msgstr "<Az ACL adat inode>"
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "i_dir_acl a(z) %i. (%Q) inode-hoz %Id, nulla kellene legyen.\n"
index 9c91e15..6657b01 100644 (file)
Binary files a/po/id.gmo and b/po/id.gmo differ
index 6570b39..2f76799 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -51,7 +51,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
@@ -73,7 +73,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: e2fsprogs 1.41.12\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
+"POT-Creation-Date: 2018-08-18 21:03-0400\n"
 "PO-Revision-Date: 2010-05-24 12:30+0700\n"
 "Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -81,8 +81,9 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Bad block %u diluar jangkauan; diabaikan.\n"
@@ -95,11 +96,12 @@ msgstr "ketika melakukan pengecheckan di inode bad block"
 msgid "while reading the bad blocks inode"
 msgstr "ketika membaca inode bad block"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1550
+#: e2fsck/unix.c:1664 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1404
+#: misc/e2image.c:1588 misc/e2image.c:1609 misc/mke2fs.c:236
+#: misc/tune2fs.c:2837 misc/tune2fs.c:2931 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "ketika mencoba untuk membuka %s"
@@ -109,7 +111,7 @@ msgstr "ketika mencoba untuk membuka %s"
 msgid "while trying popen '%s'"
 msgstr "ketika mencoba popen '%s'"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "ketika membaca dalam daftar bad block dari berkas"
 
@@ -123,6 +125,11 @@ msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr ""
 "Peringatan: illegal block %u ditemukan dalam inode bad block. Dihapus.\n"
 
+#: e2fsck/dirinfo.c:331
+#, fuzzy
+msgid "while freeing dir_info tdb file"
+msgstr "ketika membaca inode root"
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -199,12 +206,12 @@ msgstr "BLKFLSBUF ioctl tidak disupport! Tidak dapat memflush buffer.\n"
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Penggunaan: %s [-F] [-I inode_buffer_block] perangkat\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1075
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "ketika membuka %s untuk flushing"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1081 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "ketika mencoba untuk memflush %s"
@@ -214,11 +221,11 @@ msgstr "ketika mencoba untuk memflush %s"
 msgid "while trying to open '%s'"
 msgstr "ketika mencoba untuk membuka %s"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1297
 msgid "while opening inode scan"
 msgstr "ketika mencoba membuka inode scan"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1316
 msgid "while getting next inode"
 msgstr "ketika memperoleh inode berikutnya"
 
@@ -227,361 +234,384 @@ msgstr "ketika memperoleh inode berikutnya"
 msgid "%u inodes scanned.\n"
 msgstr "%u inodes discan.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "membaca journal superblock\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: journal superblock tidak valid ditemukan\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: journal terlalu pendek\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3786
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: merecovery journal\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: tidak akan melakukan journal recovery ketika read-only\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "ketika mencoba untuk membuka %s"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "aextended attribute"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Aerror mengalokasikan"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bblock"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bbitmap"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "ccompress"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Ckonflik dengan beberapa sistem berkas lain @b"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "ddirektori"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Ddeleted"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "eentri"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e '%Dn' dalam %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "fsistem berkas"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Funtuk @i %i (%Q) adalah"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "ggrup"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "hHTREE @d @i"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "iinode"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Iilegal"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jjournal"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Ladalah sebuah link"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mmultiply-claimed"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "ninvalid"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oorphaned"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pproblem dalam"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr ""
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "rroot @i"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "sseharusnya"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssuper@b"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "uunattached"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vperangkat"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xextent"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "zzero-length"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<Inode Kosong>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<Bad block inode>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 #, fuzzy
 msgid "<The user quota inode>"
 msgstr "<Inode journal>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 #, fuzzy
 msgid "<The group quota inode>"
 msgstr "<inode deskripsi grup>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<boot loader inode>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<undelete direktori inode>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<inode deskripsi grup>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<Inode journal>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Inode terpesan 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Inode Terpesan 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "berkas biasa"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "direktori"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "karakter device"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "block device"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "named pipe"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "symbolic link"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "socket"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "tipe file tidak diketahui dengan mode 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "block tidak langsung"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "blok tidak langsung berdua"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "blok tidak langsung bertiga"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "blok penerjemah"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "blok #"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr ""
+
+#: e2fsck/message.c:485
+#, fuzzy
+msgid "group"
+msgstr "ggrup"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr ""
+
+#: e2fsck/message.c:491
+#, fuzzy
+msgid "unknown quota type"
+msgstr "os tidak diketahui - %s"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "kalikan peta inode yang dituntut"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, fuzzy, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "internal error: tidak dapat menemukan dup_blk untuk %u\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "kembali dari clone_file_block"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, fuzzy, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr "internal error: tidak dapat menemukan EA block record untuk %u"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "internal error: tidak dapat menemukan EA inode record untuk %u"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:356
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr ""
+
+#: e2fsck/pass1.c:774 e2fsck/pass2.c:1005
 msgid "reading directory block"
 msgstr "membaca direktori block"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1223
 msgid "in-use inode map"
 msgstr "in-use inode map"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1234
 msgid "directory inode map"
 msgstr "direktori inode map"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1244
 msgid "regular file inode map"
 msgstr "regular file inode map"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1253 misc/e2image.c:1272
 msgid "in-use block map"
 msgstr "in-use block map"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1262
 #, fuzzy
 msgid "metadata block map"
 msgstr "meta-data blok"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1324
 msgid "opening inode scan"
 msgstr "membuka inode scan"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1362
 msgid "getting next inode from scan"
 msgstr "memperoleh inode selanjutnya dari scan"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2066
 msgid "Pass 1"
 msgstr "Tahap 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2127
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "membaca indirect block dari inode %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2178
 msgid "bad inode map"
 msgstr "inode map buruk"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2218
 msgid "inode in bad block map"
 msgstr "inode dalam bad block map"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2238
 msgid "imagic inode map"
 msgstr "imagic inode map"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2269
 msgid "multiply claimed block map"
 msgstr "multiply diklaim block map"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2394
 msgid "ext attr block map"
 msgstr "ext attr block map"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3637
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu(%c): diperkirakan %6lu diperoleh phys %6lu (blkcnt %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4054
 msgid "block bitmap"
 msgstr "block bitmap"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4060
 msgid "inode bitmap"
 msgstr "inode bitmap"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4066
 msgid "inode table"
 msgstr "inode table"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Tahap 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1077 e2fsck/pass2.c:1244
 msgid "Can not continue."
 msgstr "Tidak dapat melanjutkan."
 
@@ -601,19 +631,19 @@ msgstr "Tahap 3"
 msgid "inode loop detection bitmap"
 msgstr "inode deteksi loop bitmap"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Tahap 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Tahap 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr ""
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr ""
 
@@ -778,18 +808,18 @@ msgid "WILL RECREATE"
 msgstr "AKAN MEMBUAT KEMBALI"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:112
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "@b @B untuk @g %g tidak dalam @g. (@b %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:116
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "@i @B untuk @G %G tidak dalam @g. (@b %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:121
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -806,7 +836,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:127
 #, fuzzy
 msgid ""
 "\n"
@@ -831,7 +861,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:138
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -844,7 +874,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:145
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -856,18 +886,18 @@ msgstr ""
 "dari @b.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:152
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "@S @bs_per_group = %b, seharusnya %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:157
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "@S first_data_@b = %b, seharusnya %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:162
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -875,7 +905,7 @@ msgstr ""
 "@f tidak memiliki sebuah UUID; membuat satu.\n"
 "\n"
 
-#: e2fsck/problem.c:165
+#: e2fsck/problem.c:167
 #, c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
@@ -893,48 +923,48 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:176
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Korupsi ditemukan di @S. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
+#: e2fsck/problem.c:181
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Error menentukan ukuran dari phisik @v: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:186
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "@i terhitung dalam @S adalah %i, @s %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:190
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd tidak mendukung layanan filetype.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
+#: e2fsck/problem.c:195
 #, c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "@S memiliki sebuah @n @j (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:200
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr "External @j memiliki multiple @f dari pengguna (tidak dilayani).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:205
 msgid "Can't find external @j\n"
 msgstr "Tidak dapat menemukan external @j\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:210
 msgid "External @j has bad @S\n"
 msgstr "External @j memiliki bad @S\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:215
 msgid "External @j does not support this @f\n"
 msgstr "External @j tidak melayani ini @f\n"
 
@@ -942,7 +972,7 @@ msgstr "External @j tidak melayani ini @f\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:220
 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 "
@@ -955,83 +985,83 @@ msgstr ""
 "Ini juga mungkin jika @j @S telah terkorupsi.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:228
 msgid "@j @S is corrupt.\n"
 msgstr "@j @S telah terkorupsi.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:233
 #, fuzzy
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "@S tanda has_@j hilang, tetapi @j %s ada.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:238
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr "@S tanda needs_recovery ada, tetapi tidak memiliki @j.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:243
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "@S tanda need_recovery sudah hilang, tetapi @j memiliki data.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:248
 msgid "Clear @j"
 msgstr "Hapus @j"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:253 e2fsck/problem.c:764
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr "@f memiliki feature flag(s) set, tetapi memiliki sebuah revisi 0 @f."
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:258
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, ukuran=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:263
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "@I %B (%b) ditemukan dalam @o @i %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:268
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Sudah dihapus %B (%b) ditemukan dalam @o @i %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
+#: e2fsck/problem.c:273
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@I @o @i %i dalam @S.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
+#: e2fsck/problem.c:278
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@I @i %i dalam daftar @o @i.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:283
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr "@j @S memiliki sebuah feature yang tidak diketahui aktif.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:288
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
 "@j @S memiliki sebuah feature yang tidak kompatibel yang tidak diketahui "
 "aktif.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:293
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "versi @j tidak disupport oleh e2fsck ini.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
+#: e2fsck/problem.c:298
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -1042,7 +1072,7 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
+#: e2fsck/problem.c:303
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -1054,7 +1084,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:308
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1065,12 +1095,12 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:314
 msgid "Run @j anyway"
 msgstr "Jalankan @j bagaimanapun"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:319
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
 "Recovery flag tidak diset dalam backup @S, jadi menjalankan @j "
@@ -1078,7 +1108,7 @@ msgstr ""
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:324
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1088,7 +1118,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:330
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1097,18 +1127,18 @@ msgstr ""
 "adalah %N; @s nol. "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:336
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr "Resize_@i tidak aktif, tetapi resize @i bukan nol.  "
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:341
 msgid "Resize @i not valid.  "
 msgstr "Resize @i tidak valid.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:346
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1118,7 +1148,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:351
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1127,14 +1157,14 @@ msgstr ""
 "\tsekarang = %T) berada di masa yang akan datang.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
+#: e2fsck/problem.c:356
 #, c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "@S petunjuk untuk superblok luar @s %X.  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:361
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1143,40 +1173,40 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:366
 #, fuzzy
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "@g deskripsi %g checksum tidak valid.  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:371
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr "@g deskripsi %g ditandai unintialisasi tanpa menset feature.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:376
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr "@g deskripsi %g memiliki inode yang tidak valid terhitung %b.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:381
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Terakhir @g @b @B tidak terinitialisasi.  "
 
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:386
 #, c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "Jurnal transaksi %i terkorupsi, balasan dibatalkan.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:391
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "Tanda test_fs telah aktif (dan ext4 tersedia).  "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:396
 #, fuzzy
 msgid ""
 "@S last mount time is in the future.\n"
@@ -1189,7 +1219,7 @@ msgstr ""
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:402
 #, fuzzy
 msgid ""
 "@S last write time is in the future.\n"
@@ -1200,213 +1230,230 @@ msgstr ""
 "\t(lebih kecil sehari, mungkin karena perangkat jam diset tidak benar). "
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:408
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr "Satu atau lebih @b @g pendeskripsi checksum tidak valid.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:413
 #, fuzzy
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Menset jumlah reserved blok ke %lu\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:418
 #, fuzzy
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Menset jumlah reserved blok ke %lu\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:423
 #, fuzzy
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr ""
-"Memindahkan @j dari /%s ke tersembunyi @i.\n"
-"\n"
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "Hilang '.' dalam @d @i %i.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:428
 #, fuzzy
 msgid "@S has invalid MMP block.  "
 msgstr "Ukuran blok tidak valid - %s"
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:433
 msgid "@S has invalid MMP magic.  "
 msgstr ""
 
-#: e2fsck/problem.c:433
+#: e2fsck/problem.c:438
 #, c-format
 msgid "ext2fs_open2: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:438
+#: e2fsck/problem.c:443
 #, c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr ""
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
+#: e2fsck/problem.c:449
 msgid ""
 "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
 "simultaneously."
 msgstr ""
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:455
 #, fuzzy
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "Cadangan superblok disimpan di blok: "
+msgid "@S MMP @b checksum does not match.  "
+msgstr "External @j tidak melayani ini @f\n"
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:460
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr ""
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:465
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr ""
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:470
 #, fuzzy
 msgid "External @j @S checksum does not match @S.  "
-msgstr "Cadangan superblok disimpan di blok: "
+msgstr "External @j tidak melayani ini @f\n"
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:475
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr ""
 
-#: e2fsck/problem.c:477
+#: e2fsck/problem.c:480
 #, c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr ""
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:485
 msgid "Bad required extra isize in @S (%N).  "
 msgstr ""
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:490
 msgid "Bad desired extra isize in @S (%N).  "
 msgstr ""
 
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:495
+#, fuzzy
+msgid "Invalid %U @q @i %i.  "
+msgstr "@u @z @i %i.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:500
+msgid "@S would have too many inodes (%N).\n"
+msgstr ""
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:505
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
+msgstr ""
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:513
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Tahap 1: Memeriksa @i, @bs, dan ukuran\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:517
 msgid "@r is not a @d.  "
 msgstr "@r bukan sebuah @d.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:522
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr ""
 "@r memiliki dtime terset (mungkin karena penggunaan mke2fs versi lama).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:527
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Reserved @i %i (%Q) memiliki @n mode.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:532
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "@D @i %i memiliki dtime nol.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:537
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "@i %i sedang digunakan, tetapi miliki dtime terset.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:542
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "@i %i adalah sebuah @z @d.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:547
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "@g %g's @b @B di %b @C.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:552
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "@g %g's @i @B di %b @C.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:557
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "@G %g's @i tabel di %b @C.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:562
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "@g %g's @b @B (%b) adalah buruk.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:567
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "@g %g's @i @B (%b) adalah buruk.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:572
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size adalah %Is, @s %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:577
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_@bs adalah %Ib, @s %N.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:582
 msgid "@I %B (%b) in @i %i.  "
 msgstr "@I %B (%b) dalam @i %i.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:587
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B (%b) saling bertumpang tindih @f metadata dalam @i %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "@i %i memiliki @b(s) ilegal.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Terlalu banyak ilegal @bs dalam @i %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "@I %B (%b) dalam @b @i buruk.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:607
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "@b @i buruk memiliki ilegal @b(s).  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:612
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Duplikasi atau @b buruk sedang digunakan!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:617
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "@b %b buruk yang digunakan sama buruknya dengan @b @i indirect @b.  "
 
@@ -1414,7 +1461,7 @@ msgstr "@b %b buruk yang digunakan sama buruknya dengan @b @i indirect @b.  "
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:622
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1428,7 +1475,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:629
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1439,7 +1486,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:634
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1450,125 +1497,125 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:640
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "@S (%b) utama berada dalam daftar @b buruk.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:645
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr "Blok %b dalam deskripsi @g utama berada dalam daftar @b buruk\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:651
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Peringatan: Grup %g's @S (b) buruk.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:657
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 "Peringatan: Grup %g's salinan dari deskripsi @g memiliki sebuah @b (%b) "
 "buruk.\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:663
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 "Programming error? @b #%b terklaim untuk tidak ada alasan dalam "
 "process_bad_@b.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:669
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A %N kontinu @b(s) dalam @b @g %g untuk %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:674
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A @b buffer untuk relokasi %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:679
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Memindahkan @g %g's %s dari %b ke %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:684
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Memindahkan @g %g's %s ke %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:689
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Peringatan: tidak dapat membaca @b %b dari %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:694
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Peringatan: tidak dapat menulis @b %b untuk %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:699 e2fsck/problem.c:1776
 msgid "@A @i @B (%N): %m\n"
 msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:704
 msgid "@A @b @B (%N): %m\n"
 msgstr "@A @b @B (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:709
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A icount link informasi: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:714
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A @d @b array: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
+#: e2fsck/problem.c:719
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Error ketika melakukan scanning @is (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
+#: e2fsck/problem.c:724
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Error ketika mengiterasi melalui @bs dalam @i %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:729
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr "Error menyimpan @i count informasi (@i=%i, count=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:734
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr "Error menyimpan @d @b informasi (@i=%i, @b=%b, num=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
+#: e2fsck/problem.c:740
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Error membaca @i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:748
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "@i %i memiliki flag imagic terset.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:753
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1578,146 +1625,146 @@ msgstr ""
 "atau append-only flag terset."
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
+#: e2fsck/problem.c:759
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Spesial (@v/socket/fifo) @i %i memiliki ukuran kosong.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:769
 msgid "@j @i is not in use, but contains data.  "
 msgstr "@j @i sedang tidak digunakan, tetapi berisi data.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:774
 msgid "@j is not regular file.  "
 msgstr "@j bukan sebuah file regular.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:779
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "@i %i adalah bagian dari daftar @o @i.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:785
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
 "@i adalah bagian dari orphan terkorupsi yang ditemukan dari linked list.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:790
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A refcount structure (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:795
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Error membaca @a @b %b untuk @i %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:800
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "@i %i memiliki sebuah @a @b %b buruk."
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:805
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Error membaca @a @b %b (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:810
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "@a @b %b memiliki jumlah referensi %r, @s %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:815
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Error menulis @a @b %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:820
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "@a @b %b memiliki h_@bs > 1.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:825
 #, fuzzy
 msgid "@A @a region allocation structure.  "
 msgstr "struktur @A icount: %m\n"
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:830
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "@a @b %b adalah korup (bentrok dalam alokasi).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:835
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "@a @b %b adalah korup (@n nama).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:840
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "@a @b %b adalah korup (@n value).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
+#: e2fsck/problem.c:845
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "@i %i terlalu besar.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:849
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B (%b) menyebabkan @d terlalu besar.  "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:854
 msgid "%B (%b) causes file to be too big.  "
 msgstr "%B (%b) menyebabkan berkas terlalu besar.  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:859
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "%B (%b) menyebabkan symlink terlalu besar.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:864
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr "@i %i memiliki INDEX_FL flag terset di @f tanpa bantuan htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
+#: e2fsck/problem.c:869
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "@i %i memiliki INDEX_FL flag terset tetapi tidak sebuah @d\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
+#: e2fsck/problem.c:874
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "@h %i memiliki sebuah @n titik root.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:879
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "@h %i memiliki sebuah versi hash yang tidak dilayani (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
+#: e2fsck/problem.c:884
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr ""
 "@h %i menggunakan sebuah htree yang tidak kompatible di titik root flag.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:889
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "@h %i memiliki sebuah kedalaman pohon (%N) yang terlalu besar\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:895
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1726,58 +1773,58 @@ msgstr ""
 "@f metadata.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
+#: e2fsck/problem.c:901
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Resize @i gagal membuat kembali: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:906
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "@i %i memiliki sebuah ukuran extra (%IS) yang berisi @n\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:911
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "@a dalam @i %i memiliki sebuah panjang nama (%N) yang berisi @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:916
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "@a dalam @i %i memiliki nilai ofset (%N) yang berisi @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:921
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr ""
 "@a dalam @i %i memiliki sebuah nilai @b (%N) yang berisi @n (seharusnya 0)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:926
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr ""
 "@a dalam @i %i memiliki sebuah nilai yang berukuran (%N) yang berisi @n\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:931
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "@a dalam @i %i memiliki sebuah hash (%N) yang berisi @n\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:936
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr ""
 "@i %i adalah sebuah %It tetapi sepertinya benar benar sebuah direktori.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
+#: e2fsck/problem.c:941
 #, c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Error ketika membaca diatas @x tree dalam @i %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:946
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1787,7 +1834,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:952
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1797,7 +1844,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:957
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1806,31 +1853,31 @@ msgstr ""
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
+#: e2fsck/problem.c:962
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr "@i %i memiliki EXTENTS_FL tanda set di @f tanpa support extensi.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
+#: e2fsck/problem.c:967
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr "@i %i adalah sebuah format extensi, tetapi @S hilang feature EXTENTS\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
+#: e2fsck/problem.c:972
 #, c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "@i %i hilang EXTENT_FL, tetapi adalah sebuah format extensi\n"
 
-#: e2fsck/problem.c:956
+#: e2fsck/problem.c:977
 #, c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "Fast symlink %i memiliki EXTENT_FL terset.  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:982
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1839,43 +1886,43 @@ msgstr ""
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:986
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "@i %i memiliki sebuah titik ekstensi tidak valid (blk %b, lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
+#: e2fsck/problem.c:991
 #, fuzzy, c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Error mengiterasi melalui @d @bs: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:996
 #, fuzzy
-msgid "@q @i is not regular file.  "
+msgid "@q @i is not regular file.  "
 msgstr "@j bukan sebuah file regular.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1001
 #, fuzzy
 msgid "@q @i is not in use, but contains data.  "
 msgstr "@j @i sedang tidak digunakan, tetapi berisi data.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1006
 #, fuzzy
 msgid "@q @i is visible to the user.  "
 msgstr "@i %i sedang digunakan, tetapi miliki dtime terset.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1011
 #, fuzzy
 msgid "The bad @b @i looks @n.  "
 msgstr "<Bad block inode>"
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1016
 #, fuzzy
 msgid ""
 "@i %i has zero length extent\n"
@@ -1885,26 +1932,26 @@ msgstr ""
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
+#: e2fsck/problem.c:1021
 #, fuzzy, c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "@i %i terlalu besar.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, fuzzy, c-format
+#: e2fsck/problem.c:1026
+#, c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
-msgstr ", Inode bitmap di "
+msgstr ""
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
+#: e2fsck/problem.c:1031
 #, fuzzy, c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "@a @b %b adalah korup (bentrok dalam alokasi).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1039
 #, fuzzy
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
@@ -1914,13 +1961,13 @@ msgstr ""
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1048
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
 msgstr ""
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1053
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1928,7 +1975,7 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1059
 #, fuzzy
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
@@ -1938,52 +1985,52 @@ msgstr ""
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
+#: e2fsck/problem.c:1064
 #, fuzzy, c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr "@i %i adalah sebuah format extensi, tetapi @S hilang feature EXTENTS\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
+#: e2fsck/problem.c:1069
 #, fuzzy, c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
 msgstr "@i %i memiliki INDEX_FL flag terset di @f tanpa bantuan htree.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
+#: e2fsck/problem.c:1076
 msgid ""
 "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
 msgstr ""
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1081
 #, fuzzy
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "@i %i memiliki sebuah @a @b %b buruk."
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
+#: e2fsck/problem.c:1086
 #, fuzzy, c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "@d @i %i memiliki #%B yang tidak teralokasi.  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1091
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
+#: e2fsck/problem.c:1096
 #, fuzzy, c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
 msgstr "@i %i memiliki INDEX_FL flag terset tetapi tidak sebuah @d\n"
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
+#: e2fsck/problem.c:1102
 #, fuzzy, c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
@@ -1993,43 +2040,43 @@ msgstr ""
 "atau append-only flag terset."
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1108
 #, c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1113
 #, c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
 msgstr ""
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1128
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr ""
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1133
 #, fuzzy
 msgid "@A @x region allocation structure.  "
 msgstr "struktur @A icount: %m\n"
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1138
 #, fuzzy
 msgid ""
 "@i %i has a duplicate @x mapping\n"
@@ -2039,37 +2086,57 @@ msgstr ""
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1143
 msgid "@A memory for encrypted @d list\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1148
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr ""
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1153
 #, c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr ""
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
+#: e2fsck/problem.c:1158
 #, fuzzy, c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "@a @b %b adalah korup (@n nama).  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
+#: e2fsck/problem.c:1163
 #, c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr ""
 
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1168
+#, fuzzy
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "@i %i memiliki sebuah @a @b %b buruk."
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1174
+#, fuzzy
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "@i %i adalah sebuah format extensi, tetapi @S hilang feature EXTENTS\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1179
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1187
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2081,46 +2148,46 @@ msgstr ""
 "Tahap 1B: Menscan kembali untuk @m @bs\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
+#: e2fsck/problem.c:1193
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "@m @b(s) dalam @i %i:"
 
-#: e2fsck/problem.c:1172
+#: e2fsck/problem.c:1208
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Error ketika menscan inodes (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
+#: e2fsck/problem.c:1213
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A @i @B (@i_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
+#: e2fsck/problem.c:1218
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Error ketika mengiterasi di @bs dalam @i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1223 e2fsck/problem.c:1585
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr "Error menyesuaikan refcount untuk @a @b %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1233
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Tahap 1C: Memeriksa direktori untuk @is dengan @m @bs\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1239
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Tahap 1D: Membetulkan @m @bs\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1244
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2129,18 +2196,18 @@ msgstr ""
 "  memiliki %r @m @b(s), dibagi dengan %N berkas:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1250
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i #%i, mod time %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1255
 msgid "\t<@f metadata>\n"
 msgstr "\t<@f metadata>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1260
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2150,7 +2217,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1265
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2158,348 +2225,349 @@ msgstr ""
 "@m @bs telah diassign atau dikopi.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
+#: e2fsck/problem.c:1278
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Tidak dapat menyalin file: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1284
 #, fuzzy
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Tahap 3A: Mengoptimasi direktori\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
+#: e2fsck/problem.c:1289
 #, fuzzy, c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Gagal mengoptimasi direktori %q (%d): %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1294
 #, fuzzy
 msgid "Optimizing @x trees: "
 msgstr "Mengoptimasi direktori: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1309
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1314
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1319
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr ""
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1326
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Tahap 2: Memeriksa struktur @d\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1331
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "@n @i jumlah untuk '.' dalam @d @i %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1336
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E memiliki @n @i #: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1341
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E memiliki @D/tidak dipakai @i %Di.   "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1346
 msgid "@E @L to '.'  "
 msgstr "@E @L ke '.'  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1351
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E menunjuk ke @i (%Di) terletak di dalam @b buruk.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1356
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E @L ke @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1361
 msgid "@E @L to the @r.\n"
 msgstr "@E @L ke @r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1366
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E memiliki karakter ilegal dalam namanya.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
+#: e2fsck/problem.c:1371
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Hilang '.' dalam @d @i %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
+#: e2fsck/problem.c:1376
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Hilang '..' dalam @d @i %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1381
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Pertama @e '%Dn' (@i=%Di) dalam @d @i %i (%p) @s '.'\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1386
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Kedua @e '%Dn' (@i=%Di) dalam @d @i %i @s '..'\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1391
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr @F %IF, @s nol.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1396
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl @F %If, @s nol.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl @F %Id, @s nol.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1401
+#, fuzzy
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_fsize @F %N, @s nol.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1406
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N, @s nol.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1411
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N, @s nol.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1416
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "@i %i (%Q) memiliki mode @n (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1421
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "@d @i %i, %B, ofset %N: @d terkorupsi\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1426
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "@d @i %i, %B, ofset %N: nama berkas terlalu panjang\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1431
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "@d @i %i memiliki #%B yang tidak teralokasi.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
+#: e2fsck/problem.c:1436
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "'.' @d @e dalam @d @i %i tidak terakhiri dengan NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
+#: e2fsck/problem.c:1441
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "'..' @d @e dalam @d @i %i tidak terakhiri dengan NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1446
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "@i %i (%Q) adalah sebuah karakter @I @v.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1451
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "@i %i (%Q) adalah sebuah @I @b @v.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1456
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E adalah salinan '.' @e.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1461
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E adalah duplikasi dari '..' @e.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
+#: e2fsck/problem.c:1466 e2fsck/problem.c:1801
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Internal error: tidak dapat mencari dir_info untuk %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1471
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E memiliki rec_len dari %Dr, @s %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
+#: e2fsck/problem.c:1476
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "struktur @A icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
+#: e2fsck/problem.c:1481
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Error mengiterasi melalui @d @bs: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1486
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Error membaca @d @b %b (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1491
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Error menulis @d @b %b (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
+#: e2fsck/problem.c:1496
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A baru @d @b untuk @i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
+#: e2fsck/problem.c:1501
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Error mendealokasikan @i %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
+#: e2fsck/problem.c:1506
 #, c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "@d @e untuk '.' dalam %p (%i) besar.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1511
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "@i %i (%Q) adalah sebuah @I FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1516
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "@i %i (%Q) adalah sebuah @I socket.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1521
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Setting filetype untuk @E ke %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1526
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr ""
 "@E memiliki sebuah tipe berkas yang tidak benar (sebelumnya %Dt, @s %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1531
 msgid "@E has filetype set.\n"
 msgstr "@E memiliki filetype set.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1536
 msgid "@E has a @z name.\n"
 msgstr "@E memiliki sebuah nama @z.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1541
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Symlink %Q (@i #%i) adalah @n.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1546
 msgid "@a @b @F @n (%If).\n"
 msgstr "@a @b @F @n (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1551
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr "@f berisi berkas besar, tetapi kurang LARGE_FILE flag dalam @S.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1556
 msgid "@p @h %d: %B not referenced\n"
 msgstr "@p @h %d: %B tidak memiliki referensi\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1561
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "@p @h %d: %B memiliki dua referensi.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1566
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "@p @h %d: %B memiliki min hash buruk\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1571
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "@p @h %d: %B memiliki max has buruk\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1576
 msgid "@n @h %d (%q).  "
 msgstr "@n @h %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1580
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p @h %d (%q): buruk @b nomor %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
+#: e2fsck/problem.c:1590
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p @h %d: titik root adalah @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1595
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "@p @h %d: %B memiliki @n batas (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1600
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "@p @h %d: %B memiliki @n jumlah (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1605
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "@p @h %d: %B memiliki sebuah tabel hash yang tidak terurut\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1610
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "@p @h %d: %B memiliki @n kedalaman (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1615
 msgid "Duplicate @E found.  "
 msgstr "Duplikasi @E ditemukan.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1620
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2511,7 +2579,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1625
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2522,157 +2590,157 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1630
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi @F %N, @s nol.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1635
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "Tidak terduga @b dalam @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:1603
+#: e2fsck/problem.c:1639
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr "@E referensi @i %Di dalam @g %g dimana _INODE_UNINIT telah diset.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1644
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr ""
 "@E referensi @i %Di ditemukan dalam @g %g's di daerah inode yang tidak "
 "digunakan.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1649
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "i_file_acl_hi @F %N, @s nol.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
+#: e2fsck/problem.c:1654
 #, fuzzy, c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr "@p @h %d: titik root adalah @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
+#: e2fsck/problem.c:1659
 #, fuzzy, c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr "@p @h %d: titik root adalah @n\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1664
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "@d @i %i, %B, ofset %N: @d terkorupsi\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1669
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr ""
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1674
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr ""
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
+#: e2fsck/problem.c:1679
 #, c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr ""
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1684
 msgid "Encrypted @E is too short.\n"
 msgstr ""
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1691
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Tahap 3: Memeriksa konektivitas @d\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1696
 msgid "@r not allocated.  "
 msgstr "@r tidak dialokasikan.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1701
 msgid "No room in @l @d.  "
 msgstr "Tidak ada ruang dalam @l @d.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
+#: e2fsck/problem.c:1706
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Tidak terhubung @d @i %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1711
 msgid "/@l not found.  "
 msgstr "/@l tidak ditemukan.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1716
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "'..' dalam %Q (%i) adalah %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1721
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "Buruk atau tidak ada /@l. Tidak dapat dihubungkan kembali.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
+#: e2fsck/problem.c:1726
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Tidak dapat mengexpan /@l: %m\n"
 
-#: e2fsck/problem.c:1695
+#: e2fsck/problem.c:1731
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Tidak dapat menghubungkan %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
+#: e2fsck/problem.c:1736
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Error ketika mencoba mencari /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
+#: e2fsck/problem.c:1741
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@b: %m ketika mencoba untuk membuat /@l @d\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
+#: e2fsck/problem.c:1746
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@i: %m ketika mencoba untuk membuat /@l @d\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
+#: e2fsck/problem.c:1751
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_@b: %m ketika membuat @d @b baru\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
+#: e2fsck/problem.c:1756
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_@b: %m ketika menulis @d @b untuk /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
+#: e2fsck/problem.c:1761
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Error ketika menyesuaikan jumlah @i di @i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
+#: e2fsck/problem.c:1766
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2683,7 +2751,7 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
+#: e2fsck/problem.c:1771
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2693,41 +2761,41 @@ msgstr ""
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
+#: e2fsck/problem.c:1781
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Error membuat root @d (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
+#: e2fsck/problem.c:1786
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Error membuat /@l @d (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1791
 msgid "@r is not a @d; aborting.\n"
 msgstr "@r bukan sebuah @d: membatalkan.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1796
 msgid "Cannot proceed without a @r.\n"
 msgstr "Tidak dapat melanjutkan tanpa sebuah @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
+#: e2fsck/problem.c:1806
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l bukan sebuah @d (ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1811
 msgid "/@l has inline data\n"
 msgstr ""
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1816
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2736,7 +2804,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1821
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2744,52 +2812,52 @@ msgid ""
 msgstr ""
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1826
 msgid "/@l is encrypted\n"
 msgstr ""
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1833
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Tahap 3A: Mengoptimasi direktori\n"
 
-#: e2fsck/problem.c:1802
+#: e2fsck/problem.c:1838
 #, c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Gagal membuat peng-iterasi dirs_to_hash: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1843
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Gagal mengoptimasi direktori %q (%d): %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1848
 msgid "Optimizing directories: "
 msgstr "Mengoptimasi direktori: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1865
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Tahap 4: Memeriksa jumlah referensi\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
+#: e2fsck/problem.c:1870
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "@u @z @i %i.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
+#: e2fsck/problem.c:1875
 #, c-format
 msgid "@u @i %i\n"
 msgstr "@u @i %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1880
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "@i %i ref count adalah %Il, @s %N.  "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1884
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2801,59 +2869,70 @@ msgstr ""
 "@i_link_info[%i] adalah %N, @i.i_links_count adalah %Il. Mereka @s adalah "
 "sama!\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1891
+#, fuzzy
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "@i %i ref count adalah %Il, @s %N.  "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1896
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:1903
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Tahap 5: Memeriksa ringkasan informasi @g\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:1908
 msgid "Padding at end of @i @B is not set. "
 msgstr "Menambahkan pad diakhir dari @i @B yang tidak terset.  "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:1913
 msgid "Padding at end of @b @B is not set. "
 msgstr "Menambahkan pad di akhir dari @b @B adalah ter set.  "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:1918
 msgid "@b @B differences: "
 msgstr "@b @B perbedaan: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:1938
 msgid "@i @B differences: "
 msgstr "@i @B perbedaan: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:1958
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Kosong @is terhitung salah untuk @g #%g (%i, terhitung=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:1963
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Direktori terhitung salah untuk @g #%g (%i, terhitung=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:1968
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Kosong @is terhitung salah (%i, terhitung=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:1973
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Kosong @bs terhitung salah untuk @g #%g (%b, terhitung=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:1978
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Kosong @bs terhitung salah (%b, terhitung=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
+#: e2fsck/problem.c:1983
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
@@ -2861,86 +2940,85 @@ msgstr ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) tidak dapat mencocokan "
 "perhitungan @B titik ujung (%i, %j)\n"
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:1989
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Internal error: fudging berakhir dari bitmap (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
+#: e2fsck/problem.c:1994
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Error menyalin dalam mengganti @i @B: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
+#: e2fsck/problem.c:1999
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Error menyalin dalam mengganti @b @B: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
+#: e2fsck/problem.c:2024
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr "@g %g @b(s) sedang digunakan tetapi @g tertanda BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
+#: e2fsck/problem.c:2029
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr "@g %g @i(s) sedang digunakan tetapi @g tertanda INODE_UNINIT\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
+#: e2fsck/problem.c:2034
 #, c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
+#: e2fsck/problem.c:2039
 #, c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2046
 msgid "Recreate @j"
 msgstr "Membuat kembali @j"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2051
 msgid "Update quota info for quota type %N"
 msgstr ""
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
+#: e2fsck/problem.c:2056
 #, fuzzy, c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "ketika sedang menset informasi checksum di grup blok"
 
-#: e2fsck/problem.c:2016
+#: e2fsck/problem.c:2061
 #, fuzzy, c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Error ketika menghapus extensi: %m\n"
 
-#: e2fsck/problem.c:2021
+#: e2fsck/problem.c:2066
 #, c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2026
-#, fuzzy
+#: e2fsck/problem.c:2071
 msgid "Error writing quota info for quota type %N: %m\n"
-msgstr "Error ketika menghapus extensi: %m\n"
+msgstr ""
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2194
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Kode error tidak tertangani (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2320 e2fsck/problem.c:2324
 msgid "IGNORED"
 msgstr "DIABAIKAN"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr ""
 
@@ -2962,21 +3040,21 @@ msgstr "ketika memulai scan dari inode"
 msgid "while doing inode scan"
 msgstr "ketika melakukan pemeriksaan inode"
 
-#: e2fsck/super.c:190
-#, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
+#: e2fsck/super.c:224
+#, fuzzy, c-format
+msgid "while calling ext2fs_block_iterate for inode %u"
 msgstr "ketika memanggil ext2fs_block_iterate untuk inode %d"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, fuzzy, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
 msgstr "ketika memanggil ext2fs_adjust_ea_refcount untuk inode %d"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Truncating"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Menghapus"
 
@@ -3032,68 +3110,68 @@ msgstr ""
 " -l bad_blok_file     Tambahkan ke daftar blok buruk\n"
 " -L bad_blok_file     Set daftar blok buruk\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:136
 #, fuzzy, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %u/%u berkas (%0d.%d%% tidak kontinu), %u/%u blok\n"
 
-#: e2fsck/unix.c:160
-#, fuzzy, c-format
+#: e2fsck/unix.c:162
+#, c-format
 msgid ""
 "\n"
 "%12u inode used (%2.2f%%, out of %u)\n"
 msgid_plural ""
 "\n"
 "%12u inodes used (%2.2f%%, out of %u)\n"
-msgstr[0] "%u inodes discan.\n"
-msgstr[1] "%u inodes discan.\n"
+msgstr[0] ""
+msgstr[1] ""
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:166
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:171
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:176
 #, fuzzy, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "         # dari inodes dengan ind/dind/tind blok: %u/%u/%u\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:184
 #, fuzzy
 msgid "             Extent depth histogram: "
 msgstr "         Kedalaman Extensi histogram: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:193
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:197
 #, fuzzy, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%u inodes, %u blok\n"
 msgstr[1] "%u inodes, %u blok\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:199
 #, fuzzy, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] "berkas biasa"
 msgstr[1] "berkas biasa"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:201
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3104,96 +3182,96 @@ msgid_plural ""
 msgstr[0] "berkas biasa"
 msgstr[1] "berkas biasa"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:203
 #, fuzzy, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "direktori"
 msgstr[1] "direktori"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:205
 #, fuzzy, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
 msgstr[0] "karakter device"
 msgstr[1] "karakter device"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:208
 #, fuzzy, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
 msgstr[0] "block device"
 msgstr[1] "block device"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:210
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:212
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:214
 #, fuzzy, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "symbolic link"
 msgstr[1] "symbolic link"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:216
 #, fuzzy, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] "symbolic link"
 msgstr[1] "symbolic link"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:220
 #, fuzzy, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "socket"
 msgstr[1] "socket"
 
-#: e2fsck/unix.c:222
-#, fuzzy, c-format
+#: e2fsck/unix.c:224
+#, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
-msgstr[0] "berkas biasa"
-msgstr[1] "berkas biasa"
+msgstr[0] ""
+msgstr[1] ""
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:237 misc/badblocks.c:1002 misc/tune2fs.c:3022 misc/util.c:126
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "ketika sedang menentukan apakah %s sedang dimount."
 
-#: e2fsck/unix.c:256
-#, fuzzy, c-format
+#: e2fsck/unix.c:258
+#, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Peringatan! %s sedang dimount.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:261
 #, fuzzy, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Peringatan! %s sedang dimount.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:267
 #, fuzzy, c-format
 msgid "%s is mounted.\n"
 msgstr "%s sedang dimount.   "
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:269
 #, fuzzy, c-format
 msgid "%s is in use.\n"
 msgstr "%s sedang dimount.   "
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:271
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3201,7 +3279,7 @@ msgstr ""
 "Tidak dapat melanjutkan, membatalkan.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:273
 #, fuzzy
 msgid ""
 "\n"
@@ -3217,84 +3295,114 @@ msgstr ""
 "bisa menyebabkan kerusakan ***PARAH*** di sistem berkas.\a\a\a\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:278
 msgid "Do you really want to continue"
 msgstr "Apakah anda yakin ingin melanjutkan"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:280
 msgid "check aborted.\n"
 msgstr "pemeriksaan dibatalkan.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:374
 msgid " contains a file system with errors"
 msgstr " berisi sebuah file system dengan errors"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:376
 msgid " was not cleanly unmounted"
 msgstr " tidak bersih setelah diunmount."
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:378
 msgid " primary superblock features different from backup"
 msgstr " superblok utama memiliki feature berbeda dari backup"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:382
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " telah dimount %u kali tanpa dilakukan pemeriksaan"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:389
 msgid " has filesystem last checked time in the future"
 msgstr ""
 " memiliki sistem berkas yang waktu terakhir diperiksa berada di masa yang "
 "akan datang"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:395
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " telah lewat %u hari tanpa dilakukan pemeriksaan"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:403
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:409
 msgid ", check forced.\n"
 msgstr ", pemeriksaan dipaksakan.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:442
 #, fuzzy, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: bersih, %u/%u berkas, %u/%u blok"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:462
 msgid " (check deferred; on battery)"
 msgstr " (pemeriksaan dibatalkan; power menggunakan batere)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:465
 msgid " (check after next mount)"
 msgstr " (pemeriksaan dilakukan setelah mount selanjutnya)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:467
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (pemeriksaan dilakukan dalam %ld mounts)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:617
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ERROR: Tidak dapat membuka /dev/null (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:688
 msgid "Invalid EA version.\n"
 msgstr "Versi EA tidak valid.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:701
 #, fuzzy
 msgid "Invalid readahead buffer size.\n"
 msgstr "Parameter resize tidak valid: %s\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:750
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Pilihan extended tidak diketahui: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:758
+#, fuzzy
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Pilihan extended buruk dispesifikasikan: %s\n"
+"\n"
+"Pilihan extended dipisahkan dengan koma, dan boleh membawa argument dimana\n"
+"\tini di set off oleh sebuah tanda sama dengan ('=').\n"
+"\n"
+"Pilihan extended yang valid adalah:\n"
+"\tsuperblock=<nomor superblok>\n"
+"\tblocksize=<besar blok>\n"
+
+#: e2fsck/unix.c:762
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr ""
+
+#: e2fsck/unix.c:771
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr ""
+
+#: e2fsck/unix.c:783
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3303,60 +3411,60 @@ msgstr ""
 "Syntax error dalam berkas konfigurasi e2fsck (%s, baris #%d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:856
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Error memvalidasi berkas deskripsi %d: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:860
 msgid "Invalid completion information file descriptor"
 msgstr "Informasi File berkas completion tidak valid"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:875
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr ""
 "Hanya salah satu dari pilihan -p/-a, -n atau -y yang boleh dispesifikasikan."
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:896
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Pilihan -t tidak dilayani dalam versi e2fsck ini.\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:927 e2fsck/unix.c:1005 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1741 misc/tune2fs.c:2036 misc/tune2fs.c:2054
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Tidak dapat meresolve '%s'"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:984
 msgid "The -n and -D options are incompatible."
 msgstr "Pilihan -n dan -D tidak kompatibel."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:989
 msgid "The -n and -c options are incompatible."
 msgstr "Pilihan -n dan -c tidak kompatibel."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:994
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Pilihan -n dan -l/-L tidak kompatibel."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1018
 #, fuzzy
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Pilihan -n dan -D tidak kompatibel."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1024
 #, fuzzy
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Pilihan -n dan -D tidak kompatibel."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1088
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr ""
 "Pilihan -c dan -l/-L tidak boleh digunakan secara bersamaan dalam satu "
 "waktu.\n"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1135
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3365,7 +3473,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG \"%s\" bukan sebuah integer\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1144
 #, c-format
 msgid ""
 "\n"
@@ -3376,32 +3484,33 @@ msgstr ""
 "Argument bukan numerik tidak valid untuk -%c (\"%s\")\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1235
 #, c-format
 msgid ""
 "MMP interval is %u seconds and total wait time is %u seconds. Please "
 "wait...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1252 e2fsck/unix.c:1257
 #, fuzzy
 msgid "while checking MMP block"
 msgstr "ketika mensetup superblok"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1259
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1275
 #, fuzzy
 msgid "while reading MMP block"
 msgstr "ketika sedang membaca inode blok buruk"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1295 e2fsck/unix.c:1347 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2613 misc/mke2fs.c:2664 misc/tune2fs.c:2754
+#: misc/tune2fs.c:2799 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3413,60 +3522,60 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1336 misc/e2undo.c:270 misc/mke2fs.c:2653 misc/tune2fs.c:2788
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "ketika mencoba untuk menghapus %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1362 misc/mke2fs.c:2679 resize/main.c:243
 #, fuzzy
 msgid "while trying to setup undo file\n"
 msgstr ""
 "\n"
 "\tketika mencoba membuat file jurnal"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1405
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Error: ext2fs versi librari ketinggalan jaman!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1412
 msgid "while trying to initialize program"
 msgstr "ketika mencoba untuk menginisialisasi aplikasi"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1435
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tMenggunakan %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1447
 msgid "need terminal for interactive repairs"
 msgstr "butuh terminal untuk reparasi interactive"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1508
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s mencoba membackup blok...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1510
 msgid "Superblock invalid,"
 msgstr "Superblok tidak valid,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1511
 msgid "Group descriptors look bad..."
 msgstr "Deskripsi grup terlihat buruk..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1521
 #, fuzzy, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s mencoba membackup blok...\n"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1525
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: kembali ke superblock asli\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1554
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3476,30 +3585,30 @@ msgstr ""
 "(Atau sistem berkas superblok terkorupsi)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1561
 msgid "Could this be a zero-length partition?\n"
 msgstr "Mungkinkan ini sebuah partisi dengan panjang nol?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1563
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Anda harus memiliki %s akses ke sistem berkas atau menjadi root\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1569
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Mungkin tidak ada atau sebuah perangkat swap?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1571
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 "Sistem berkas dimount atau dibuka secara exclusively oleh aplikasi lain?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1575
 #, fuzzy
 msgid "Possibly non-existent device?\n"
 msgstr "Mungkin tidak ada atau sebuah perangkat swap?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1578
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3508,21 +3617,26 @@ msgstr ""
 "baca-saja\n"
 "dalam memeriksa perangkat.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1592
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1667
 msgid "Get a newer version of e2fsck!"
 msgstr "Dapatkan versi yang lebih baru dari e2fsck!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1711
 #, fuzzy, c-format
 msgid "while checking journal for %s"
 msgstr "ketika memeriksa ext3 jurnal untuk %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1714
 #, fuzzy
 msgid "Cannot proceed with file system check"
 msgstr "Tidak dapat melanjutkan tanpa sebuah @r.\n"
 
-#: e2fsck/unix.c:1661
+#: e2fsck/unix.c:1725
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
@@ -3530,51 +3644,51 @@ msgstr ""
 "Peringatan: melewatkan recovery jurnal karena sedang melakukan pemeriksaan "
 "di sistem berkas yang baca-saja (read-only).\n"
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1737
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "tidak dapat menset superblok flag di %s\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1743
 #, fuzzy, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Jurnal superblok tidak ditemukan!\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1747
 #, fuzzy, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "Jurnal dihapus\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1751
 #, fuzzy, c-format
 msgid "while recovering journal of %s"
 msgstr "ketika merecovery ext3 jurnal dari %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1773
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s memiliki feature yang tidak disupport:"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1832
 #, fuzzy, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "ketika sedang membaca inode blok buruk"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1835
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr ""
 "Ini bukan pertanda baik, tapi kita akan tetap mencoba untuk meneruskan...\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1875
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Membuat jurnal (%d blok): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1885
 msgid " Done.\n"
 msgstr " Selesai.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1887
 #, fuzzy
 msgid ""
 "\n"
@@ -3583,24 +3697,38 @@ msgstr ""
 "\n"
 "*** jurnal telah dibuat kembali - sistem berkas sekarang ext3 lagi ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1893
 msgid "aborted"
 msgstr "dibatalkan"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1895
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck dibatalkan.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1922
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Mengulang kembali e2fsck dari awal...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1926
 msgid "while resetting context"
 msgstr "ketika mereset context"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:1985
+#, fuzzy, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** FILE SYSTEM TELAH TERMODIFIKASI *****\n"
+
+#: e2fsck/unix.c:1987
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr ""
+
+#: e2fsck/unix.c:1991 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3609,12 +3737,12 @@ msgstr ""
 "\n"
 "%s: ***** FILE SYSTEM TELAH TERMODIFIKASI *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:1996
 #, fuzzy, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** REBOOT LINUX *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2006 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3625,51 +3753,51 @@ msgstr ""
 "%s: ********** PERINGATAN: Sistem berkas masih memiliki errors *********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "yY"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr ""
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr ""
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<y>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr "(y/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "dibatalkan!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr ""
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "ya\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "tidak\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3678,7 +3806,7 @@ msgstr ""
 "%s? tidak\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3687,38 +3815,38 @@ msgstr ""
 "%s? ya\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "ya"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "tidak"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: ilegal bitmap blok untuk %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "membaca inode dan blok bitmap"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "ketika sedang mencoba untuk membaca bitmap untuk %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "menulis blok dan inode bitmaps"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "ketika mencoba untuk menulis blok dan inode bitmap untuk %s"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3732,51 +3860,51 @@ msgstr ""
 "MANUAL.\n"
 "\t(i.e, tanpa pilihan -a atau -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Memori yang digunakan: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Memori yang digunakan: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "waktu: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "waktu yang dijalani: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "ketika  membaca inode %lu dalam %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "ketika menulis inode %lu dalam %s"
 
-#: e2fsck/util.c:765
+#: e2fsck/util.c:792
 msgid ""
 "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
 "running.\n"
 msgstr ""
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 #, fuzzy
 msgid "done                                                 \n"
 msgstr "selesai                              \n"
 
-#: misc/badblocks.c:97
-#, c-format
+#: misc/badblocks.c:100
+#, fuzzy, c-format
 msgid ""
-"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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"
@@ -3789,7 +3917,7 @@ msgstr ""
 "       [-e pattern_tes] [-t pattern_test [...]]]\n"
 "       perangkat [blok_terakhir [blok_pertama]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3798,80 +3926,80 @@ msgstr ""
 "%s: Pilihan -n dan -w adalah mutually exclusive.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, fuzzy, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f%% selesai, %s berjalan"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Memeriksa dengan pattern random: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Memeriksa dengan pattern 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "ketika mencari(seek)"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Nilai aneh (%ld) dalam do_read\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "ketika ext2fs_sync_device"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "ketika di awal iterasi daftara blok buruk"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "ketika mengalokasikan buffer"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Memeriksa blok %lu ke %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Memeriksa blok buruk dalam mode baca-saja (read-only)\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Memeriksa blok buruk (pemeriksaan baca-saja): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Terlalu banyak blok buruk, membatalkan pemeriksaan\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Memeriksa untuk blok buruk dalam mode baca-tulis\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Dari blok %lu ke %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Membaca dan membandingkan: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Memeriksa untuk blok buruk dalal mode tidak-merusak baca-tulis\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Memeriksa untuk blok buruk (pemeriksaan tidak-merusak baca-tulis)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3879,58 +4007,58 @@ msgstr ""
 "\n"
 "Interupsi tertangkap, membersihkan\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "ketika memerikas data ditulis, blok %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:131
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s sedang dimount; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "badbloks tetap dipaksakan. Mudah-mudahan /etc/mtab tidak benar\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "ini tidak aman untuk menjalankan badblocks!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:142
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s kelihatannya sedang digunakan oleh system; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "badblocks dipaksakan saja.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "tidak valid %s - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr ""
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "tidak dapat mengalokasikan memori untuk test_pattern - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr ""
 "Maksimum dari satu test_pattern boleh dispesifikasi dalam mode baca-saja"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Random test_pattern tidak diperbolehkan dalam mode baca-saja"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3938,41 +4066,41 @@ msgstr ""
 "Tidak dapat menentukan ukuran perangkat; anda harus menspesifikasikan\n"
 "ukuran perangkat secara manual\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "ketika mencoba untuk menentukakn ukuran perangkat"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "blok terakhir"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "blok pertama"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, fuzzy, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "awal blok tidak valid (%lu): harus lebih kecil dari %lu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, fuzzy, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "awal blok tidak valid (%lu): harus lebih kecil dari %lu"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "ketika membuat daftar blok buruk dalam memori"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr ""
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "ketika menambahkan daftar blok buruk dalam memori"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, fuzzy, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Tahap selesai, %u blok buruk ditemukan.\n"
@@ -4044,159 +4172,158 @@ msgstr "= tidak kompatibel dengan - dan +\n"
 msgid "Must use '-v', =, - or +\n"
 msgstr "Harus menggunakan '-v', =, - atau +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:79 misc/create_inode.c:118
 #, fuzzy, c-format
 msgid "while reading inode %u"
 msgstr "ketika  membaca inode %lu dalam %s"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:89 misc/create_inode.c:287 misc/create_inode.c:352
+#: misc/create_inode.c:390
 #, fuzzy
 msgid "while expanding directory"
 msgstr "ketika mengekspansi /lost+found"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:96
 #, fuzzy, c-format
 msgid "while linking \"%s\""
 msgstr "ketika membuka %s"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:104 misc/create_inode.c:131 misc/create_inode.c:321
 #, fuzzy, c-format
 msgid "while writing inode %u"
 msgstr "ketika menulis inode %lu dalam %s"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:151 misc/create_inode.c:175
 #, fuzzy, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "ketika mencoba untuk memotong %s"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:162
 #, fuzzy, c-format
 msgid "while opening inode %u"
 msgstr "ketika mencoba membuka inode scan"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:168 misc/create_inode.c:195 misc/create_inode.c:975
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 #, fuzzy
 msgid "while allocating memory"
 msgstr "ketika mengalokasikan buffer"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:188 misc/create_inode.c:204
 #, fuzzy, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "ketika membaca flags di %s"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:213
 #, fuzzy, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "ketika menulis inode %lu dalam %s"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:223
 #, fuzzy, c-format
 msgid "while closing inode %u"
 msgstr "ketika melakukan pemeriksaan inode"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:274
 #, fuzzy, c-format
 msgid "while allocating inode \"%s\""
 msgstr "ketika mengalokasikan buffer"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:293
 #, fuzzy, c-format
 msgid "while creating inode \"%s\""
 msgstr "ketika  membaca inode %lu dalam %s"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:359
 #, fuzzy, c-format
 msgid "while creating symlink \"%s\""
 msgstr "ketika membaca flags di %s"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:377 misc/create_inode.c:896
 #, fuzzy, c-format
 msgid "while looking up \"%s\""
 msgstr "ketika mencari /lost+found"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:397
 #, fuzzy, c-format
 msgid "while creating directory \"%s\""
 msgstr "ketika membuat direktori root"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:625
 #, fuzzy, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "ketika membuka %s"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:739
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:747
 #, fuzzy, c-format
 msgid "while opening directory \"%s\""
 msgstr "ketika membuka %s"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:757
 #, fuzzy, c-format
 msgid "while lstat \"%s\""
 msgstr "ketika mencoba untuk melakukan statistik %s"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:808
 #, fuzzy, c-format
 msgid "while creating special file \"%s\""
 msgstr "ketika  membaca inode %lu dalam %s"
 
-#: misc/create_inode.c:761
-#, fuzzy
+#: misc/create_inode.c:817
 msgid "malloc failed"
-msgstr "Aerror mengalokasikan"
+msgstr ""
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:825
 #, fuzzy, c-format
 msgid "while trying to read link \"%s\""
 msgstr "ketika mencoba untuk mengubah ukuran %s"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:832
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr ""
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:843
 #, fuzzy, c-format
 msgid "while writing symlink\"%s\""
 msgstr "ketika menulis inode %lu dalam %s"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:854
 #, fuzzy, c-format
 msgid "while writing file \"%s\""
 msgstr "ketika menulis inode %lu dalam %s"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:867
 #, fuzzy, c-format
 msgid "while making dir \"%s\""
 msgstr "ketika membuka %s"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:885
 #, fuzzy
 msgid "while changing directory"
 msgstr "membaca direktori block"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:891
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:904
 #, fuzzy, c-format
 msgid "while setting inode for \"%s\""
 msgstr "ketika menset versi di %s"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:911
 #, fuzzy, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "ketika menset flags di %s"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:937
 #, fuzzy
 msgid "while saving inode data"
 msgstr "ketika memulai scan dari inode"
@@ -4204,7 +4331,7 @@ msgstr "ketika memulai scan dari inode"
 #: misc/dumpe2fs.c:56
 #, fuzzy, c-format
 msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+"Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
 msgstr ""
 "Penggunaan: %s [-bfhixV] [-o superblok=<jumlah>] [-o ukuranblok=<besar>] "
 "perangkat\n"
@@ -4224,9 +4351,9 @@ msgid "Group %lu: (Blocks "
 msgstr "Grup %lu: (blok "
 
 #: misc/dumpe2fs.c:226
-#, fuzzy, c-format
+#, c-format
 msgid " csum 0x%04x"
-msgstr "  Checksum 0x%04x, inode yang tidak digunakan %d\n"
+msgstr ""
 
 #: misc/dumpe2fs.c:228
 #, c-format
@@ -4267,9 +4394,9 @@ msgid "  Block bitmap at "
 msgstr "  Blok bitmap di "
 
 #: misc/dumpe2fs.c:260 misc/dumpe2fs.c:271
-#, fuzzy, c-format
+#, c-format
 msgid ", csum 0x%08x"
-msgstr "  Checksum 0x%04x, inode yang tidak digunakan %d\n"
+msgstr ""
 
 #: misc/dumpe2fs.c:263
 msgid ","
@@ -4325,105 +4452,56 @@ msgstr "ketika mencetak daftar blok buruk"
 msgid "Bad blocks: %u"
 msgstr "Blok buruk: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:367
 msgid "while reading journal inode"
 msgstr "ketika membaca jurnal inode"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "ketika membuka jurnal inode"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "ketika membaca super blok jurnal"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 #, fuzzy
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Jurnal superblok tidak ditemukan!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Fasilitas jurnal:        "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Ukuran jurnal:            "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Panjang jurnal:           %u\n"
-"Urutan jurnal:            0x%08x\n"
-"Awal dari jurnal:         %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:448
-#, fuzzy, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Pengguna jurnal:         %s\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "ketikan membaca superblok jurnal"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Tidak dapat mencari nomor magic di jurnal superblok"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Ukuran blok jurnal:       %u\n"
-"Panjang jurnal:           %u\n"
-"Blok pertama jurnal:      %u\n"
-"Urutan jurnal:            0x%08x\n"
-"Awal dari jurnal:         %u\n"
-"Jumlah pengguna dari jurnal: %u\n"
+#: misc/dumpe2fs.c:468
+#, fuzzy
+msgid "failed to alloc MMP buffer\n"
+msgstr "ketika mengalokasikan buffer"
 
-#: misc/dumpe2fs.c:514
-#, c-format
-msgid "Journal users:            %s\n"
-msgstr "Pengguna jurnal:         %s\n"
+#: misc/dumpe2fs.c:479
+#, fuzzy, c-format
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "Memeriksa blok %lu ke %lu\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:798 misc/tune2fs.c:2073
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Tidak dapat mengalokasikan memori untuk memparse pilihan!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Parameter superblok tidak valid: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Parameter ukuran-blok tidak valid: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4446,239 +4524,232 @@ msgstr ""
 "\tsuperblock=<nomor superblok>\n"
 "\tblocksize=<besar blok>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1845
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tMenggunakan %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1590 misc/tune2fs.c:2949
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Tidak dapat mencari superblok sistem berkas yang valid.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:730
-#, c-format
+#: misc/dumpe2fs.c:747
+#, fuzzy, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "ketika sedang mencoba untuk membaca bitmap untuk %s"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
-"\n"
-"%s: %s: error membaca bitmaps: %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, fuzzy, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] device image-file\n"
 msgstr "Penggunaan: %s [-rsI] perangkat image_file\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:109
 #, fuzzy, c-format
 msgid "       %s -I device image-file\n"
 msgstr "Penggunaan: %s [-rsI] perangkat image_file\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:110
 #, c-format
 msgid ""
 "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
 "[ dest_fs ]\n"
 msgstr ""
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:175 misc/e2image.c:580 misc/e2image.c:586 misc/e2image.c:1185
 #, fuzzy
 msgid "while allocating buffer"
 msgstr "ketika mengalokasikan buffer"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:180
 #, fuzzy, c-format
 msgid "Writing block %llu\n"
 msgstr "Memeriksa blok %lu ke %lu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:194
 #, fuzzy, c-format
 msgid "error writing block %llu"
 msgstr "Error menulis block %lu (%s).  "
 
-#: misc/e2image.c:196
+#: misc/e2image.c:197
 msgid "error in generic_write()"
 msgstr ""
 
-#: misc/e2image.c:213
+#: misc/e2image.c:214
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr ""
 
-#: misc/e2image.c:218
+#: misc/e2image.c:219
 msgid "Couldn't allocate header buffer\n"
 msgstr "Tidak dapat mengalokasikan buffer header\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:247
 msgid "while writing superblock"
 msgstr "ketika menulis superblok"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:256
 msgid "while writing inode table"
 msgstr "ketika menulis tabel inode"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:264
 msgid "while writing block bitmap"
 msgstr "ketika menulis blok bitmap"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:272
 msgid "while writing inode bitmap"
 msgstr "ketika menulis inode bitmap"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:506
 #, fuzzy, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Direktori block %u (#%d) kosong dalam inode %u\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:518
 #, fuzzy, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Direktori block %u (#%d) kosong dalam inode %u\n"
 
-#: misc/e2image.c:558
-#, fuzzy, c-format
+#: misc/e2image.c:559
+#, c-format
 msgid "%llu / %llu blocks (%d%%)"
-msgstr "%u inodes, %u blok\n"
+msgstr ""
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:590 misc/e2image.c:630
 msgid "Copying "
 msgstr ""
 
-#: misc/e2image.c:626
+#: misc/e2image.c:627
 msgid ""
 "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr ""
 
-#: misc/e2image.c:652
+#: misc/e2image.c:653
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr ""
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:665 misc/e2image.c:1195
 #, fuzzy, c-format
 msgid "error reading block %llu"
 msgstr "Error membaca block %lu (%s).  "
 
-#: misc/e2image.c:718
+#: misc/e2image.c:719
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr ""
 
-#: misc/e2image.c:722
+#: misc/e2image.c:723
 #, c-format
 msgid "at %.2f MB/s"
 msgstr ""
 
-#: misc/e2image.c:758
+#: misc/e2image.c:759
 #, fuzzy
 msgid "while allocating l1 table"
 msgstr "ketika mengalokasikan buffer"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:804
 #, fuzzy
 msgid "while allocating l2 cache"
 msgstr "ketika mengalokasikan buffer"
 
-#: misc/e2image.c:826
+#: misc/e2image.c:827
 msgid ""
 "Warning: There are still tables in the cache while putting the cache, data "
 "will be lost so the image may not be valid.\n"
 msgstr ""
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1152
 #, fuzzy
 msgid "while allocating ext2_qcow2_image"
 msgstr "ketika mengalokasikan zeroizing buffer"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1159
 #, fuzzy
 msgid "while initializing ext2_qcow2_image"
 msgstr "ketika menginisialisasi jurnal superblok"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1218 misc/e2image.c:1236
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr ""
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1276
 #, fuzzy
 msgid "while allocating block bitmap"
 msgstr "ketika menulis blok bitmap"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1285
 #, fuzzy
 msgid "while allocating scramble block bitmap"
 msgstr "ketika menulis blok bitmap"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1292
 #, fuzzy
 msgid "Scanning inodes...\n"
 msgstr "Memeriksa tabel inode"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1304
 #, fuzzy
 msgid "Can't allocate block buffer"
 msgstr "Tidak dapat mengalokasikan block buffer (ukuran=%d)\n"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1343 misc/e2image.c:1357
 #, fuzzy, c-format
 msgid "while iterating over inode %u"
 msgstr "ketika memperoleh inode berikutnya"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1389
 msgid "Raw and qcow2 images cannot be installed"
 msgstr ""
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1411
 #, fuzzy
 msgid "error reading bitmaps"
 msgstr "ketika membaca bitmap"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1423
 #, fuzzy
 msgid "while opening device file"
 msgstr "ketika mencoba membuka inode scan"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1434
 #, fuzzy
 msgid "while restoring the image table"
 msgstr "ketika menulis tabel inode"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1531
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr ""
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1537
 msgid "Offsets are only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1542
 msgid "Move mode is only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1547
 msgid "Move mode requires all data mode."
 msgstr ""
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1557
 #, fuzzy
 msgid "checking if mounted"
 msgstr " (pemeriksaan dilakukan dalam %ld mounts)"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1564
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4686,50 +4757,55 @@ msgid ""
 "Use -f option if you really want to do that.\n"
 msgstr ""
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1618
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr ""
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1624
 msgid "Can not stat output\n"
 msgstr ""
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1634
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr ""
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1637
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr ""
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1640
+#, fuzzy, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "@j @S telah terkorupsi.\n"
+
+#: misc/e2image.c:1644
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr ""
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1654
 #, fuzzy
 msgid "The -c option only supported in raw mode\n"
 msgstr "Pilihan -t tidak dilayani dalam versi e2fsck ini.\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1659
 #, fuzzy
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "Pilihan -t tidak dilayani dalam versi e2fsck ini.\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1666
 #, fuzzy
 msgid "while allocating check_buf"
 msgstr "ketika mengalokasikan buffer"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1672
 #, fuzzy
 msgid "The -p option only supported in raw mode\n"
 msgstr "Pilihan -t tidak dilayani dalam versi e2fsck ini.\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1682
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr ""
@@ -4759,7 +4835,7 @@ msgstr "e2label: error membaca superblok\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: bukan sebuah ext2 sistem berkas\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3152
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Peringatan: label terlalu panjang, memotong.\n"
@@ -4774,171 +4850,173 @@ msgstr "e2label: tidak dapat mencari superblok lagi\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: error menulis superblok\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1733
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Penggunaan: e2label perangkat [labelbaru]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, fuzzy, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+msgid ""
+"Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> "
+"<filesystem>\n"
 msgstr "Penggunaan: %s <berkas transaksi> <sistem berkas>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 #, fuzzy
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr "Sistem berkas waktu mount tidak cocok %u\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 #, fuzzy
 msgid "Last mount time does not match.\n"
 msgstr "Sistem berkas waktu mount tidak cocok %u\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 #, fuzzy
 msgid "while reading filesystem superblock."
 msgstr "ketikan membaca superblok jurnal"
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 #, fuzzy
 msgid "while fetching superblock"
 msgstr "ketika menulis superblok"
 
-#: misc/e2undo.c:195
-#, fuzzy, c-format
+#: misc/e2undo.c:201
+#, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
-msgstr "Cadangan superblok disimpan di blok: "
+msgstr ""
 
-#: misc/e2undo.c:334
-#, fuzzy, c-format
+#: misc/e2undo.c:340
+#, c-format
 msgid "illegal offset - %s"
-msgstr "Ukuran inode baru tidak valid: %s\n"
+msgstr ""
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr ""
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, fuzzy, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "ketika mencoba membuka inode scan"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 #, fuzzy
 msgid "while reading undo file"
 msgstr "ketika membaca inode root"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, fuzzy, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: terlalu banyak perangkat\n"
 
-#: misc/e2undo.c:390
-#, fuzzy, c-format
+#: misc/e2undo.c:396
+#, c-format
 msgid "%s: Header checksum doesn't match.\n"
-msgstr ", Inode bitmap di "
+msgstr ""
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr ""
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr ""
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, fuzzy, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "ukuran blok buruk - %s"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, fuzzy, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr ""
 "@j @S memiliki sebuah feature yang tidak kompatibel yang tidak diketahui "
 "aktif.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, fuzzy, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "Error ketika menentukan apakah %s sudah dimount.\n"
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 #, fuzzy
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr ""
 "e2undo seharusnya hanya dijalankan di sistem berkas yang sudah diunmount\n"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, fuzzy, c-format
 msgid "while opening `%s'"
 msgstr "ketika membuka %s"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr ""
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 #, fuzzy
 msgid "while reading keys"
 msgstr "ketika membaca bitmap"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr ""
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr ""
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, fuzzy, c-format
 msgid "%s: block %llu is too long."
 msgstr "Dari blok %lu ke %lu\n"
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, fuzzy, c-format
 msgid "while fetching block %llu."
-msgstr "Memeriksa blok %lu ke %lu\n"
+msgstr "ketika mencetak daftar blok buruk"
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr ""
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, fuzzy, c-format
 msgid "while writing block %llu."
-msgstr "Error menulis block %lu (%s).  "
+msgstr "ketika menulis blok bitmap"
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr ""
@@ -5017,37 +5095,37 @@ msgstr ""
 "\tseharusnya membetulkan berkas /etc/fstab anda secepatnya.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: tidak ditemukan\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: tunggu: Tidak ada lagi proses anak?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Peringatan... %s untuk perangkat %s keluar dengan sinyal %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: status adalah %x, seharusnya tidak pernah terjadi.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Berakhir dengan %s (status keluar %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Error %d ketika menjalankan fsck.%s untuk %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5056,11 +5134,11 @@ msgstr ""
 "pilihan -t harus diwali\n"
 "dengan 'no' atau '!'.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Tidak dapat mengalokasikan memori untuk tipe sistem berkas\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
@@ -5069,84 +5147,84 @@ msgstr ""
 "%s: melewatkan baris buruk di /etc/fstab: bind mount dengan tidak nol fsck "
 "tahap nomor\n"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: tidak dapat memeriksa %s: fsck.%s tidak ditemukan\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Memeriksa semua filesytem.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--menunggu-- (tahap %d)\n"
 
-#: misc/fsck.c:1078
+#: misc/fsck.c:1085
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Penggunaan: fsck [-AMNPRTV] -C [fd] ] [-t fstype] [fs-pilihan] "
 "[filesys ...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: terlalu banyak perangkat\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: terlalu banyak argumen\n"
 
-#: misc/fuse2fs.c:3745
+#: misc/fuse2fs.c:3739
 msgid "Mounting read-only.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3769
+#: misc/fuse2fs.c:3763
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3775 misc/fuse2fs.c:3789
 #, c-format
 msgid "%s: %s.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3776 misc/fuse2fs.c:3791 misc/tune2fs.c:3049
 #, fuzzy, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr ""
 "Tolong jalankan 'e2fsck -f %s' terlebih dahulu.\n"
 "\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3798
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3806
 #, fuzzy, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "Mengecilkan ukuran inode yang tidak dilayani\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3821
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3825
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3830
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3834
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3838
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr ""
 
@@ -5170,7 +5248,7 @@ msgstr "Ketika membaca versi di %s"
 msgid "While reading version on %s"
 msgstr "Ketika membaca versi di %s"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5191,37 +5269,37 @@ msgstr ""
 "\t[-O fasilitas[,...]] [-r revisi-fs] [-E pilihan-tambahan[,...]]\n"
 "\t[-T type-fs] [-U UUID] [-jnqvFKSV] perangkat [jumlah-blok]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Menjalankan perintah: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "ketika mencoba untuk menjalankan '%s'"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "ketika memproses daftar dari blok buruk dari aplikasi"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Blok %d dalam daerah deskripsi superblok/grup utama buruk.\n"
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "Blok %u sampai %u harus dalam keadaan baik untuk membuat sebuah sistem "
 "berkas.\n"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Membatalkan...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5232,15 +5310,20 @@ msgstr ""
 "\tblok buruk.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "ketika menandai blok buruk sebagai digunakan"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+#, fuzzy
+msgid "while writing reserved inodes"
+msgstr "ketika menulis inode jurnal"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Menulis tabel inode: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -5249,76 +5332,76 @@ msgstr ""
 "\n"
 "Tidak dapat menulis %d blok dalam tabel inode dimulai di %u: %s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2726 misc/mke2fs.c:3131
 msgid "done                            \n"
 msgstr "selesai                        \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "ketika membuat direktori root"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "ketika membaca inode root"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "ketika menset kepemilikan inode root"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "ketika membuat /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "ketika mencari /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "ketika mengekspansi /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "ketika menset inode blok buruk"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Kehabisan memori menghapus sektor %d-%d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Peringatan: tidak dapat membaca blok 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Peringatan: tidak dapat menghapus sektor %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "ketika menginisialisasi jurnal superblok"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Mengosongkan perangkat jurnal: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, fuzzy, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "ketika mengosongkan perangkat jurnal (blok %u, jumlah %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "ketika menulis jurnal superblok"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, fuzzy, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "Mengubah sistem berkas di %s ke %u (%dk) blok.\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, fuzzy, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5327,154 +5410,159 @@ msgstr ""
 "peringatan: %u blok tidak digunakan.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Sistem berkas label=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, fuzzy, c-format
 msgid "OS type: %s\n"
 msgstr "Tipe OS: "
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Ukuran blok=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, fuzzy, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Ukuran blok=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Ukuran pecahan=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Stride=%u blok, Lebar stripe=%u blok\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, fuzzy, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u inodes, %u blok\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, fuzzy, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u blok (%2.2f%%) reserved untuk super user\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Data blok pertama=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr ""
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maksimum blok sistem berkas=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u grup blok\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u grup blok\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, fuzzy, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u blok per grup, %u potongan per grup\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blok per grup, %u potongan per grup\n"
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inode per grup\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, fuzzy, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "Sistem berkas label=%s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Cadangan superblok disimpan di blok: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:820
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr ""
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:826
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr ""
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:839
 #, fuzzy, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Ukuran inode baru tidak valid: %s\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:853
+#, fuzzy, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Ukuran inode baru tidak valid: %s\n"
+
+#: misc/mke2fs.c:865
 #, fuzzy, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Ukuran inode baru tidak valid: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:879 misc/tune2fs.c:2101
 #, fuzzy, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "pilihan mount tidak valid diset: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:896
 #, fuzzy, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Parameter superblok tidak valid: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:918
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Parameter stride tidak valid: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:933
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Parameter stripe-width tidak valid: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:956
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Parameter resize tidak valid: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:963
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr "Resize maksimum harus lebih besar daripada ukuran sistem berkas.\n"
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:987
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr "On-line resizing tidak dilayani dengan sistem berkas revisi 0\n"
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1013 misc/mke2fs.c:1022
 #, fuzzy, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "pilihan mount tidak valid diset: %s\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1065
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -5514,7 +5602,7 @@ msgstr ""
 "\ttest_fs\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1090
 #, c-format
 msgid ""
 "\n"
@@ -5525,7 +5613,7 @@ msgstr ""
 "Peringatan: RAID stripe-width %u bukan sebuah even multiple dari stride %u.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1135
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5534,17 +5622,17 @@ msgstr ""
 "Syntax error dalam mke2fs berkas konfigurasi (%s, baris #%d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1148 misc/tune2fs.c:1120
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Pilihan sistem berkas tidak valid diset: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1160 misc/tune2fs.c:411
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "pilihan mount tidak valid diset: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1296
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -5554,7 +5642,7 @@ msgstr ""
 "Peringatan! Berkas mke2fs.conf anda tidak mendefinisikan tipe sistem berkas "
 "%s.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1300
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5562,12 +5650,12 @@ msgstr ""
 "Anda mungkin butuh untuk memasang sebuah update dari berkas mke2fs.conf.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1304
 #, fuzzy
 msgid "Aborting...\n"
 msgstr "Membatalkan...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1345
 #, c-format
 msgid ""
 "\n"
@@ -5575,155 +5663,155 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1527
 #, fuzzy
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Tidak dapat mengalokasikan memori untuk nama berkas tdb\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1564
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1597
 #, c-format
 msgid "invalid block size - %s"
 msgstr "Ukuran blok tidak valid - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1601
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Peringatan: ukuranblok %d tidak berguna dalam kebanyakan system.\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1617
 #, fuzzy, c-format
 msgid "invalid cluster size - %s"
 msgstr "Ukuran blok tidak valid - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1630
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr ""
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1644 misc/tune2fs.c:1830
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "perilaku error buruk - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1656
 msgid "Illegal number for blocks per group"
 msgstr "Jumlah ilegal untuk blok per grup"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1661
 msgid "blocks per group must be multiple of 8"
 msgstr "blok per grup harus kelipatan dari 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1669
 msgid "Illegal number for flex_bg size"
 msgstr "Jumlah ilegal untuk ukuran flex_bg"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1675
 msgid "flex_bg size must be a power of 2"
 msgstr "ukuran flex_bg harus kelipatan dari 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1680
 #, fuzzy, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "ukuran flex_bg harus kelipatan dari 2"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1690
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "rasio dari inode tidak valid %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1700
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "ukuran inode tidak valid - %s"
 
-#: misc/mke2fs.c:1684
+#: misc/mke2fs.c:1713
 msgid ""
 "Warning: -K option is deprecated and should not be used anymore. Use '-E "
 "nodiscard' extended option instead!\n"
 msgstr ""
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1724
 msgid "in malloc for bad_blocks_filename"
 msgstr "dalam malloc untuk bad_block_filename"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1733
 #, fuzzy, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr "Peringatan: label terlalu panjang, memotong.\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1742
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "persentasi reserved blok tidak valid - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1757
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "jumlah inode buruk - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1770
 #, fuzzy
 msgid "while allocating fs_feature string"
 msgstr "ketika mengalokasikan buffer"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1787
 #, c-format
 msgid "bad revision level - %s"
 msgstr "level revisi buruk - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1792
 #, fuzzy, c-format
 msgid "while trying to create revision %d"
 msgstr ""
 "\n"
 "\tketika mencoba untuk membuat jurnal"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1806
 #, fuzzy
 msgid "The -t option may only be used once"
 msgstr "-o hanya boleh dispesifikasikan sekali"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1814
 #, fuzzy
 msgid "The -T option may only be used once"
 msgstr "-o hanya boleh dispesifikasikan sekali"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1870 misc/mke2fs.c:3215
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "ketika mencoba membuka perangkat jurnal %s\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1876
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 "Perangkat jurnal ukuranblok (%d) lebih kecil daripada minimum ukuranblok %d\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1882
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Menggunakan perangkat jurnal ukuranblok: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1893
 #, fuzzy, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "jumlah blok tidak valid - %s"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1923
 msgid "filesystem"
 msgstr "sistem berkas"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1941 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "ketika mencoba untuk menentukan ukuran sistem berkas"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1947
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5731,7 +5819,7 @@ msgstr ""
 "Tidak dapat menentukan ukuran perangkat; anda harus menspesifikasikan\n"
 "ukuran dari sistem berkas\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1954
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5745,44 +5833,49 @@ msgstr ""
 "reboot\n"
 "\tuntuk membaca kembali tabel partisi.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:1971
 msgid "Filesystem larger than apparent device size."
 msgstr "Sistem berkas lebih besar dari ukuran perangkat yang terlihat."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:1991
 msgid "Failed to parse fs types list\n"
 msgstr "Gagal untuk memparse daftar type fs\n"
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2040
 #, fuzzy
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "Hurd tidak mendukung layanan filetype.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2045
 #, fuzzy
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "Hurd tidak mendukung layanan filetype.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2050
 #, fuzzy
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "Hurd tidak mendukung layanan filetype.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2055
+#, fuzzy
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "Hurd tidak mendukung layanan filetype.\n"
+
+#: misc/mke2fs.c:2065
 msgid "while trying to determine hardware sector size"
 msgstr "ketika mencoba untuk menentukan ukuran sektor perangkat"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2071
 msgid "while trying to determine physical sector size"
 msgstr "ketika mencoba untuk menentukan ukuran fisik sektor"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2103
 msgid "while setting blocksize; too small for device\n"
 msgstr ""
 "ketika sedang melakukan konfigurasi ukuran blok;terlalu kecil untuk "
 "perangkat\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2108
 #, fuzzy, c-format
 msgid ""
 "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
@@ -5790,7 +5883,7 @@ msgstr ""
 "Peringatan: ukuran blok yang dispesifikasikan %d lebih kecil daripada ukuran "
 "fisik sektor perangkat %d, tetap dilanjutkan\n"
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2132
 #, fuzzy, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5799,7 +5892,7 @@ msgstr ""
 "%s: Ukuran dari perangkat %s terlalu besar untuk diexpresikan dalam 32 bit\n"
 "\tmenggunakan sebuah ukuranblok dari %d.\n"
 
-#: misc/mke2fs.c:2098
+#: misc/mke2fs.c:2144
 #, fuzzy, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
@@ -5808,53 +5901,53 @@ msgstr ""
 "%s: Ukuran dari perangkat %s terlalu besar untuk diexpresikan dalam 32 bit\n"
 "\tmenggunakan sebuah ukuranblok dari %d.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2166
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "fs_types untuk mke2fs.conf resolution: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2173
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr "Sistem berkas features tidak dilayani dengan sistem berkas revisi 0\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2181
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr "Sparse superblok tidak dilayani dengan sistem berkas revisi 0\n"
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2191
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Jurnal tidak dilayani dengan sistem berkas revisi 0\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2204
 #, fuzzy, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "persentasi reserved blok tidak valid - %s"
 
-#: misc/mke2fs.c:2175
+#: misc/mke2fs.c:2221
 msgid ""
 "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
 "rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2241
 #, fuzzy
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "Resize maksimum harus lebih besar daripada ukuran sistem berkas.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2247
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr ""
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2267
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "Peringatan: Tidak dapat mendapatkan geometri untuk perangkat %s\n"
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2270
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "%s penyesuaian ofset sebesar %lu bytes.\n"
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2272
 #, c-format
 msgid ""
 "This may result in very poor performance, (re)-partitioning suggested.\n"
@@ -5862,12 +5955,12 @@ msgstr ""
 "Ini mungkin akan berujung ke performa yang tidak baik, disarankan untuk "
 "melakukan pembagian ulang.\n"
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2293
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d-byte bloks terlalu besar untuk system (maksimal %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2297
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
@@ -5875,14 +5968,14 @@ msgstr ""
 "Peringatan: %d-byte blok terlalu besar untuk system (maksimal %d), dipaksa "
 "untuk melanjutkan\n"
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2305
 #, c-format
 msgid ""
 "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
 "and journal checksum features.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2360
 #, c-format
 msgid ""
 "\n"
@@ -5892,11 +5985,16 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2375
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr ""
+
+#: misc/mke2fs.c:2397
 msgid "Can't support bigalloc feature without extents feature"
 msgstr ""
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2404
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -5904,7 +6002,7 @@ msgstr ""
 "resize_inode dan meta_bg feature tidak saling kompatibel.\n"
 "Meraka tidak dapat diaktifkan secara bersamaan.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2412
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5912,46 +6010,41 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2424
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr "reserved online resize blok tidak dilayani di non-sparse sistem berkas"
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2433
 msgid "blocks per group count out of range"
 msgstr "jumlah blok per grup diluar jangkauan"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2455
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 "Flex_bg feature tidak diaktifkan, jadi ukuran flex_bw mungkin tidak dapat "
 "dispesifikasikan"
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2467
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "ukuran inode tidak valid %d (min %d/max %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2482
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr ""
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2497
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "terlalu banyak inode (%llu), naikkan rasio inode?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2504
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "terlalu banyak inode (%llu), spesifikasikan < 2³2 inode"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2518
 #, fuzzy, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5962,101 +6055,107 @@ msgstr ""
 "\tsistem berkas dengan %lu blok, spesifikan lebih tinggi inode_ratio (-i)\n"
 "\tatau lebih rendah jumlah inode (-N).\n"
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2705
 #, fuzzy
 msgid "Discarding device blocks: "
 msgstr "Menggunakan perangkat jurnal ukuranblok: %d\n"
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2721
 #, fuzzy
 msgid "failed - "
 msgstr "gagal.\n"
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2780
 #, fuzzy
 msgid "while initializing quota context"
 msgstr "ketika menginisialisasi jurnal superblok"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2787
 #, fuzzy
 msgid "while writing quota inodes"
 msgstr "ketika menulis inode jurnal"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2812
 #, fuzzy, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "perilaku error buruk - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2888
+#, fuzzy
+msgid "in malloc for android_sparse_params"
+msgstr "dalam malloc untuk bad_block_filename"
+
+#: misc/mke2fs.c:2902
 msgid "while setting up superblock"
 msgstr "ketika mensetup superblok"
 
-#: misc/mke2fs.c:2849
+#: misc/mke2fs.c:2918
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Pass -O extents to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2856
+#: misc/mke2fs.c:2925
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr ""
+#: misc/mke2fs.c:2933
+#, fuzzy
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "Hurd tidak mendukung layanan filetype.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:2957
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr ""
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3056
 #, c-format
 msgid "unknown os - %s"
 msgstr "os tidak diketahui - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3119
 #, fuzzy
 msgid "Allocating group tables: "
 msgstr "Menulis tabel inode: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3127
 msgid "while trying to allocate filesystem tables"
 msgstr "ketika mencoba mengalokasikan tabel sistem berkas"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3136
 #, fuzzy
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
 msgstr "ketika menulis blok bitmap"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3142
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr ""
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3183
 #, fuzzy, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "ketika mengkosongkan blok %u di akhir dari sistem berkas"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3196
 msgid "while reserving blocks for online resize"
 msgstr "ketika menreserve blok untuk online resize"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3208 misc/tune2fs.c:1538
 msgid "journal"
 msgstr "jurnal"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3220
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Menambahkan jurnal ke perangkat %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3227
 #, c-format
 msgid ""
 "\n"
@@ -6065,21 +6164,21 @@ msgstr ""
 "\n"
 "\tketika mencoba untuk menambahkan jurnal ke perangkat %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3232 misc/mke2fs.c:3261 misc/mke2fs.c:3299
+#: misc/mk_hugefiles.c:598 misc/tune2fs.c:1567 misc/tune2fs.c:1586
 msgid "done\n"
 msgstr "selesai\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3238
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Melewatkan pembuatan jurnal dalam mode super-saja\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3248
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Membuat jurnal (%u blok): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3257
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6087,40 +6186,36 @@ msgstr ""
 "\n"
 "\tketika mencoba untuk membuat jurnal"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3269 misc/tune2fs.c:1185
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3274
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3290
 msgid "Copying files into the device: "
 msgstr ""
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3296
 #, fuzzy
 msgid "while populating file system"
-msgstr "ketika mengalokasikan buffer"
+msgstr "ketika mengkosongkan blok %u di akhir dari sistem berkas"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3303
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Menulis superblok dan informasi akuntasi sistem berkas: "
 
-#: misc/mke2fs.c:3230
+#: misc/mke2fs.c:3310
 #, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Peringatan, memiliki masalah menulis diluar superblok."
+msgid "while writing out and closing file system"
+msgstr "ketika mengkosongkan blok %u di akhir dari sistem berkas"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3313
 msgid ""
 "done\n"
 "\n"
@@ -6128,32 +6223,35 @@ msgstr ""
 "selesai\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
+#, fuzzy, c-format
+msgid "while zeroing block %llu for hugefile"
+msgstr "ketika mengkosongkan blok %u di akhir dari sistem berkas"
+
+#: misc/mk_hugefiles.c:514
 #, c-format
 msgid ""
 "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:581
 msgid "Huge files will be zero'ed\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:582
 #, fuzzy, c-format
 msgid "Creating %lu huge file(s) "
-msgstr "berkas biasa"
+msgstr "Membuat jurnal (%u blok): "
 
-#: misc/mk_hugefiles.c:494
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:584
+#, c-format
 msgid "with %llu blocks each"
 msgstr ""
-"peringatan: %u blok tidak digunakan.\n"
-"\n"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:593
 #, fuzzy, c-format
 msgid "while creating huge file %lu"
-msgstr "ketika memperoleh inode berikutnya"
+msgstr "ketika membuat direktori root"
 
 #: misc/mklost+found.c:50
 msgid "Usage: mklost+found\n"
@@ -6195,23 +6293,29 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   awal=%8d ukuran=%8lu akhir=%6d\n"
 
 #: misc/tune2fs.c:119
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+
+#: misc/tune2fs.c:121
 #, fuzzy
 msgid "Please run e2fsck -f on the filesystem.\n"
 msgstr "Tolong jalankan e2fsck untuk sistem berkas.\n"
 
-#: misc/tune2fs.c:121
+#: misc/tune2fs.c:123
 #, fuzzy
 msgid "Please run e2fsck -fD on the filesystem.\n"
 msgstr "Tolong jalankan e2fsck untuk sistem berkas.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
@@ -6224,93 +6328,93 @@ msgstr ""
 "\t[-E pilihan-tambahan[,...]] [-T waktu_terakhir_diperiksa] [-U UUID]\n"
 "\t[-I ukuran_inode_baru] perangkat\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Jurnal superblok tidak ditemukan!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "ketika mencoba membuka jurnal external"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2845
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s bukan sebuah perangkat jurnal.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:297 misc/tune2fs.c:2856
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "Sistem berkas UUID tidak ditemukan dalam perangkat jurnal.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:321
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:330
 msgid "Journal removed\n"
 msgstr "Jurnal dihapus\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:374
 msgid "while reading bitmaps"
 msgstr "ketika membaca bitmap"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:382
 msgid "while clearing journal inode"
 msgstr "ketika menghapus inode jurnal"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:393
 msgid "while writing journal inode"
 msgstr "ketika menulis inode jurnal"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:429 misc/tune2fs.c:452 misc/tune2fs.c:465
 msgid "(and reboot afterwards!)\n"
 msgstr "(dan reboot setelah ini!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:480
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr ""
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:483
 #, fuzzy, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr ""
 "Tolong jalankan 'e2fsck -f %s' terlebih dahulu.\n"
 "\n"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:487
 #, c-format
 msgid " -z \"%s\""
 msgstr ""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:489
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:491
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1087
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1123
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Menghapus feature sistem berkas '%s' tidak dilayani.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1129
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Tatanan fitur sistem berkas '%s' tidak dilayani.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1138
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6318,7 +6422,7 @@ msgstr ""
 "Has_journal feature mungkin hanya bisa dihapus ketika sistem berkas sedang\n"
 "dimount baca-saja atau tidak dimount.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1146
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6326,7 +6430,7 @@ msgstr ""
 "Needs_recovery flag diset. Tolong jalankan e2fsck sebelum menghapus\n"
 "has_journal flag.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1164
 #, fuzzy
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
@@ -6335,7 +6439,7 @@ msgstr ""
 "Pengubahan ukuran inode tidak didukung untuk sistem berkas dengan flex_bg\n"
 "fitur aktif.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1177
 #, fuzzy
 msgid ""
 "The multiple mount protection feature can't\n"
@@ -6345,33 +6449,33 @@ msgstr ""
 "Huge_file feature hanya boleh dihapus ketika sistem berkas sedang\n"
 "dimount baca-saja atau tidak dimount.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1195
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1204
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1212
 #, fuzzy
 msgid "Error while reading bitmaps\n"
 msgstr "ketika membaca bitmap"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1221
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr ""
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1226
 #, fuzzy
 msgid "while reading MMP block."
 msgstr "ketika sedang membaca inode blok buruk"
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1258
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
@@ -6379,7 +6483,7 @@ msgstr ""
 "Menghapus flex_bg flag akan mengakibatkan sistem berkas menjadi\n"
 "tidak konsisten.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1269
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6387,59 +6491,58 @@ msgstr ""
 "Huge_file feature hanya boleh dihapus ketika sistem berkas sedang\n"
 "dimount baca-saja atau tidak dimount.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1280
 msgid "Enabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1282
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1175
+#: misc/tune2fs.c:1288
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Re-run with -O extent to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1182
+#: misc/tune2fs.c:1295
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Run resize2fs -b to "
 "rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1321
 msgid "Disabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1323
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1386
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1396
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1426
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1447
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1465
 #, fuzzy
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
@@ -6448,18 +6551,22 @@ msgstr ""
 "Pengubahan ukuran inode tidak didukung untuk sistem berkas dengan flex_bg\n"
 "fitur aktif.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1483
 msgid ""
 "UUID has changed since enabling metadata_csum.  Filesystem must be "
 "unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1489
+msgid "Recalculating checksums could take some time."
+msgstr ""
+
+#: misc/tune2fs.c:1531
 msgid "The filesystem already has a journal.\n"
 msgstr "Sistem berkas telah memiliki sebuah jurnal.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1551
 #, c-format
 msgid ""
 "\n"
@@ -6468,21 +6575,21 @@ msgstr ""
 "\n"
 "\tketika mencoba untuk membuka jurnal di %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1555
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Membuat jurnal di perangkat %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1563
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "ketika menambahkan sistem berkas di jurnal di %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1569
 msgid "Creating journal inode: "
 msgstr "Membuat jurnal inode: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1583
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6490,27 +6597,32 @@ msgstr ""
 "\n"
 "\tketika mencoba membuat file jurnal"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1621
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1634
 #, fuzzy
 msgid "while initializing quota context in support library"
 msgstr "ketika menginisialisasi jurnal superblok"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1649
 #, fuzzy, c-format
 msgid "while updating quota limits (%d)"
 msgstr "ketika memperbarui inode bad block"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1657
 #, fuzzy, c-format
 msgid "while writing quota file (%d)"
-msgstr "ketika menulis inode %lu dalam %s"
+msgstr "ketika menulis tabel inode"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1675
 #, fuzzy, c-format
 msgid "while removing quota file (%d)"
 msgstr "ketika membaca inode root"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1718
 msgid ""
 "\n"
 "Bad quota options specified.\n"
@@ -6524,65 +6636,65 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1776
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Tidak dapat memparse date/time specifier: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1801 misc/tune2fs.c:1814
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "jumlah mount buruk - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1857
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "nama gid/grup buruk - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1890
 #, c-format
 msgid "bad interval - %s"
 msgstr "interval buruk - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1919
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "rasio reserved blok buruk - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1934
 msgid "-o may only be specified once"
 msgstr "-o hanya boleh dispesifikasikan sekali"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1943
 msgid "-O may only be specified once"
 msgstr "-O hanya boleh dispesifikasikan sekali"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "jumlah reserved blok buruk - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1989
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "nama uid/pengguna buruk - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:2006
 #, c-format
 msgid "bad inode size - %s"
 msgstr "ukuran inode buruk - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:2013
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Ukuran inode harus kelipatan dari dua - %s"
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2110
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2115
 #, fuzzy, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
 msgid_plural ""
@@ -6590,27 +6702,27 @@ msgid_plural ""
 msgstr[0] "Menset maksimal jumlah mount ke %d\n"
 msgstr[1] "Menset maksimal jumlah mount ke %d\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2138
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Invalid RAID stride: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2153
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Invalid RAID stripe-width: %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2168
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Algoritma hash tidak valid: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2174
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Menset default algoritma hash ke %s (%d)\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2193
 #, fuzzy
 msgid ""
 "\n"
@@ -6623,6 +6735,7 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
 "\ttest_fs\n"
@@ -6641,34 +6754,34 @@ msgstr ""
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2663
 #, fuzzy
 msgid "Failed to read inode bitmap\n"
 msgstr "ketika membaca bitmap"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2668
 #, fuzzy
 msgid "Failed to read block bitmap\n"
 msgstr "membaca inode dan blok bitmap"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2685 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "blok akan dipindahkan"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2688
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr ""
 "Gagal untuk mengalokasikan bitmap blok ketika meningkatkan ukuran inode\n"
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2694
 msgid "Not enough space to increase inode size \n"
 msgstr "Tidak cukup ruang untuk meningkatkan ukuran inode \n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2699
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "Gagal untuk memindahkan blok ketika pengubahan ukuran inode \n"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2731
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6676,83 +6789,105 @@ msgstr ""
 "Error dalam mengubah ukuran dari ukuran inode.\n"
 "Jalankan e2undo untuk undo perubahan sistem berkas.\n"
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2936
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+
+#: misc/tune2fs.c:2943
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2955
 #, fuzzy
 msgid "Cannot modify a journal device.\n"
 msgstr "%s bukan sebuah perangkat jurnal.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2968
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Ukuran inode telah %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2975
 #, fuzzy
 msgid "Shrinking inode size is not supported\n"
 msgstr "Mengecilkan ukuran inode yang tidak dilayani\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2980
 #, fuzzy, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "ukuran inode tidak valid %d (min %d/max %d)"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2986
 msgid "Resizing inodes could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3034
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+
+#: misc/tune2fs.c:3045
+#, fuzzy, c-format
+msgid "Recovering journal.\n"
+msgstr "%s: merecovery journal\n"
+
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Menset maksimal jumlah mount ke %d\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Menset jumlah mount sekarang ke %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3074
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Menset perilaku error ke %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3079
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Menset gid reserved blok ke %lu\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3084
 #, fuzzy, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "Menset interval diantara check ke %lu detik\n"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3091
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Menset interval diantara check ke %lu detik\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3098
 #, fuzzy, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "Menset persentasi reserved blok ke %g%% (%u blok)\n"
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3104
 #, fuzzy, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "jumlah reserved blok terlalu besar (%lu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3111
 #, fuzzy, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Menset jumlah reserved blok ke %lu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3116
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6760,7 +6895,7 @@ msgstr ""
 "\n"
 "Sistem berkas telah memiliki sparse superblok.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3119
 #, fuzzy
 msgid ""
 "\n"
@@ -6770,7 +6905,7 @@ msgstr ""
 "Pengubahan ukuran inode tidak didukung untuk sistem berkas dengan flex_bg\n"
 "fitur aktif.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3129
 #, c-format
 msgid ""
 "\n"
@@ -6779,7 +6914,7 @@ msgstr ""
 "\n"
 "Sparse superblok flag diset. %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3134
 #, fuzzy
 msgid ""
 "\n"
@@ -6788,58 +6923,58 @@ msgstr ""
 "\n"
 "Menghapus sparse superflag tidak dilayani.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3142
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Menset waktu sistem berkas terakhir diperiksa ke %s\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3148
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Menset uid reserved blok ke %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3180
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr ""
 
-#: misc/tune2fs.c:3024
+#: misc/tune2fs.c:3198
 #, fuzzy
 msgid ""
 "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "Ukuran inode mungkin akan berubah ketika sistem berkas tidak dimount.\n"
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3222
 #, fuzzy
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "Ukuran inode mungkin akan berubah ketika sistem berkas tidak dimount.\n"
 
-#: misc/tune2fs.c:3051
+#: misc/tune2fs.c:3225
 msgid ""
 "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
 "and re-run this command.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3060
+#: misc/tune2fs.c:3234
 msgid "Setting UUID on a checksummed filesystem could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3259
 msgid "Invalid UUID format\n"
 msgstr "Invalid format UUID\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3275
 #, fuzzy
 msgid "Need to update journal superblock.\n"
 msgstr "membaca journal superblock\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3301
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "Ukuran inode mungkin akan berubah ketika sistem berkas tidak dimount.\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3308
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -6847,55 +6982,39 @@ msgstr ""
 "Pengubahan ukuran inode tidak didukung untuk sistem berkas dengan flex_bg\n"
 "fitur aktif.\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3326
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Menset ukuran inode %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3330
 #, fuzzy
 msgid "Failed to change inode size\n"
 msgstr "Gagal untuk memindahkan blok ketika pengubahan ukuran inode \n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3344
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Menset ukuran stride ke %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3349
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Menset lebar stripe ke %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3356
 #, fuzzy, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Menset jumlah mount sekarang ke %d\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, fuzzy, c-format
-msgid "Recovering journal.\n"
-msgstr "%s: merecovery journal\n"
-
 #: misc/util.c:100
 msgid "<proceeding>\n"
 msgstr ""
 
 #: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Jalankan saja? (y,n) "
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr ""
 
 #: misc/util.c:108
 #, fuzzy
@@ -7143,43 +7262,43 @@ msgstr "#\tNum=%d, Ukuran=%d, Cursor=%d, Sorted=%d\n"
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"[-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
 "Penggunaan: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] perangkat "
 "[ukuran_baru]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Memperbesar tabel inode"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Memindahkan blok"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Memeriksa tabel inode"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Memperbarui referensi inode"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Memindahkan tabel inode"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Tahap tidak diketahui?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Awal tahap %d (max = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7187,17 +7306,17 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "ketika membuka %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "ketika memperoleh informasi statistik untuk %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7206,30 +7325,30 @@ msgstr ""
 "Tolong jalankan 'e2fsck -f %s' terlebih dahulu.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, fuzzy, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Estimasi minimum dari ukuran sistem berkas: %u\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Ukuran inode baru tidak valid: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr ""
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, fuzzy, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Ukuran baru lebih kecil daripada minimum (%u)\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Panjang stride tidak valid"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, fuzzy, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7239,32 +7358,32 @@ msgstr ""
 "Partisi (atau perangkat) hanya berisi %u (%dk) blok.\n"
 "Anda meminta ukuran baru %u blok.\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr ""
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
 msgid ""
 "Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
 "blocks.\n"
 msgstr ""
 
-#: resize/main.c:575
+#: resize/main.c:581
 #, fuzzy, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr ""
 "Ukuran inode mungkin akan berubah ketika sistem berkas tidak dimount.\n"
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
 msgid ""
 "Please enable the extents feature with tune2fs before enabling the 64bit "
 "feature.\n"
 msgstr ""
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, fuzzy, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
@@ -7274,37 +7393,37 @@ msgstr ""
 "dilakukan !\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, fuzzy, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "Sistem berkas telah memiliki sebuah jurnal.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, fuzzy, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "Sistem berkas telah memiliki sebuah jurnal.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, fuzzy, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "Menset waktu sistem berkas terakhir diperiksa ke %s\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, fuzzy, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "Menset waktu sistem berkas terakhir diperiksa ke %s\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, fuzzy, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr "Mengubah sistem berkas di %s ke %u (%dk) blok.\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "ketika mencoba untuk mengubah ukuran %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7313,7 +7432,7 @@ msgstr ""
 "Mohon jalankan 'e2fsck -fy %s' untuk membetulkan sistem berkas\n"
 "setelah pembatalan operasi pengubahan ukuran.\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, fuzzy, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7322,7 +7441,7 @@ msgstr ""
 "Sistem berkas di %s sekarang memiliki panjang %u blok.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "ketika mencoba untuk memotong %s"
@@ -7387,12 +7506,12 @@ msgstr "Menjalankan sebuah on-line resize dari %s ke %u (%dk) blok.\n"
 msgid "While trying to extend the last group"
 msgstr "Ketika mencoba untuk mengexten grup terakhir"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Ketika mencoba untuk menambahkan grup #%d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
 msgid ""
 "Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
@@ -7402,37 +7521,37 @@ msgstr ""
 "system ini.\n"
 
 #: resize/resize2fs.c:759
-#, c-format
-msgid "inodes (%llu) must be less than %u"
+#, fuzzy, c-format
+msgid "inodes (%llu) must be less than %u\n"
 msgstr "inode (%llu) harus lebih kecil dari %u"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "reserved blok"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "meta-data blok"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2475
 #, fuzzy
 msgid "new meta blocks"
 msgstr "meta-data blok"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2698
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2703
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2776
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Seharusnya tidak pernah terjadi: resize inode corrupt!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-msgid "EXT2FS Library version 1.43.4-WIP"
+msgid "EXT2FS Library version 1.44.4"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:12
@@ -8029,7 +8148,7 @@ msgid "MMP: device currently active"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
+msgid "MMP: e2fsck being run"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:152
@@ -8058,9 +8177,8 @@ msgid "Inode checksum does not match inode"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:158
-#, fuzzy
 msgid "Inode bitmap checksum does not match bitmap"
-msgstr ", Inode bitmap di "
+msgstr ""
 
 #: lib/ext2fs/ext2_err.c:159
 msgid "Extent block checksum does not match extent block"
@@ -8088,17 +8206,17 @@ msgid "Unknown checksum algorithm"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr ""
+#, fuzzy
+msgid "MMP block checksum does not match"
+msgstr "Cadangan superblok disimpan di blok: "
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:167
-#, fuzzy
 msgid "Block bitmap checksum does not match bitmap"
-msgstr ", Inode bitmap di "
+msgstr ""
 
 #: lib/ext2fs/ext2_err.c:168
 msgid "Cannot iterate data blocks of an inode containing inline data"
@@ -8117,9 +8235,8 @@ msgid "Extended attribute has an incorrect hash"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:172
-#, fuzzy
 msgid "Extended attribute block has a bad header"
-msgstr "aextended attribute"
+msgstr ""
 
 #: lib/ext2fs/ext2_err.c:173
 #, fuzzy
@@ -8172,9 +8289,8 @@ msgid "Wrong undo file for this filesystem"
 msgstr "Ijin ditolak ketika mengubah ukuran sistem berkas"
 
 #: lib/ext2fs/ext2_err.c:185
-#, fuzzy
 msgid "File system is corrupted"
-msgstr "Sistem berkas lebih besar dari ukuran perangkat yang terlihat."
+msgstr ""
 
 #: lib/ext2fs/ext2_err.c:186
 msgid "Bad CRC detected in file system"
@@ -8183,12 +8299,16 @@ msgstr ""
 #: lib/ext2fs/ext2_err.c:187
 #, fuzzy
 msgid "The journal superblock is corrupt"
-msgstr "Jurnal superblok tidak ditemukan!\n"
+msgstr "membaca journal superblock\n"
 
 #: lib/ext2fs/ext2_err.c:188
 #, fuzzy
 msgid "Inode is corrupted"
-msgstr "Sistem berkas lebih besar dari ukuran perangkat yang terlihat."
+msgstr "@j @S telah terkorupsi.\n"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8384,16 +8504,36 @@ msgid "%s contains a %s file system\n"
 msgstr " berisi sebuah file system dengan errors"
 
 #: lib/support/plausible.c:276
-#, fuzzy, c-format
+#, c-format
 msgid "%s contains `%s' data\n"
-msgstr " berisi sebuah file system dengan errors"
+msgstr ""
 
-#~ msgid "Please run e2fsck on the filesystem.\n"
-#~ msgstr "Tolong jalankan e2fsck untuk sistem berkas.\n"
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %s: error membaca bitmaps: %s\n"
 
 #, fuzzy
-#~ msgid "Invalid quotatype parameter: %s\n"
-#~ msgstr "Parameter stride tidak valid: %s\n"
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Peringatan, memiliki masalah menulis diluar superblok."
+
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "i_dir_acl @F %Id, @s nol.\n"
+
+#~ msgid "<The ACL index inode>"
+#~ msgstr "<ACL index inode>"
+
+#~ msgid "<The ACL data inode>"
+#~ msgstr "<ACL data inode>"
+
+#~ msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+#~ msgstr "@g %g @b @B tidak terinitialisasi tetapi @i @B sedang digunakan.\n"
 
 #~ msgid "@i %i has @cion flag set on @f without @cion support.  "
 #~ msgstr "@i %i memiliki @cion flag terset pada @f tanpa layanan @cion.  "
@@ -8401,24 +8541,65 @@ msgstr " berisi sebuah file system dengan errors"
 #~ msgid "@A @a @b %b.  "
 #~ msgstr "@A @a @b %b.  "
 
-#, fuzzy
-#~ msgid "%s: warning: compression support is experimental.\n"
+#~ msgid "@i %i should not have EOFBLOCKS_FL set (size %Is, lblk %r)\n"
+#~ msgstr "@i %i seharusnya EOFBLOCKS_FL tidak aktif (ukuran %Is, lblk %r)\n"
+
+#~ msgid "Warning: compression support is experimental.\n"
 #~ msgstr "Peringatan: support untuk kompresi adalah experimental.\n"
 
-#, fuzzy
 #~ msgid ""
-#~ "%s: e2fsck not compiled with HTREE support,\n"
+#~ "E2fsck not compiled with HTREE support,\n"
 #~ "\tbut filesystem %s has HTREE directories.\n"
 #~ msgstr ""
 #~ "E2fsck tidak dikompilasi dengan layanan HTREE,\n"
 #~ "\t tetapi sistem berkas %s memiliki direktori HTREE.\n"
 
-#~ msgid "while allocating zeroizing buffer"
-#~ msgstr "ketika mengalokasikan zeroizing buffer"
+#~ msgid "Couldn't determine journal size"
+#~ msgstr "Tidak dapat menentukan ukuran jurnal"
+
+#~ msgid "Clearing extent flag not supported on %s"
+#~ msgstr "Menghapus tanda ekstensi yang tidak didukung di %s"
+
+#~ msgid "  Checksum 0x%04x, unused inodes %d\n"
+#~ msgstr "  Checksum 0x%04x, inode yang tidak digunakan %d\n"
 
-#, fuzzy
-#~ msgid ", unused inodes %u\n"
-#~ msgstr ", %u inode yang tidak digunakan\n"
+#~ msgid "Journal features:        "
+#~ msgstr "Fasilitas jurnal:        "
+
+#~ msgid "Journal size:             "
+#~ msgstr "Ukuran jurnal:            "
+
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "Panjang jurnal:           %u\n"
+#~ "Urutan jurnal:            0x%08x\n"
+#~ "Awal dari jurnal:         %u\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ukuran blok jurnal:       %u\n"
+#~ "Panjang jurnal:           %u\n"
+#~ "Blok pertama jurnal:      %u\n"
+#~ "Urutan jurnal:            0x%08x\n"
+#~ "Awal dari jurnal:         %u\n"
+#~ "Jumlah pengguna dari jurnal: %u\n"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "Pengguna jurnal:         %s\n"
+
+#~ msgid "short write (only %d bytes) for writing image header"
+#~ msgstr "menulis pendek (hanya %d bytes) untuk menulis header image"
 
 #~ msgid "Failed to read the file system data \n"
 #~ msgstr "Gagal membaca data filesystem \n"
@@ -8435,19 +8616,26 @@ msgstr " berisi sebuah file system dengan errors"
 #~ msgid "Failed to open %s\n"
 #~ msgstr "Gagal membuka %s\n"
 
-#, fuzzy
-#~ msgid "Replayed transaction of size %zd at location %llu\n"
+#~ msgid "Replayed transaction of size %zd at location %ld\n"
 #~ msgstr "Balasan ukuran transaksi %zd di lokasi %ld\n"
 
 #~ msgid "Failed write %s\n"
 #~ msgstr "Gagal menulis %s\n"
 
-#, fuzzy
-#~ msgid "Couldn't allocate memory to parse quota options!\n"
-#~ msgstr "Tidak dapat mengalokasikan memori untuk memparse pilihan!\n"
+#~ msgid "invalid fragment size - %s"
+#~ msgstr "ukuran potongan/fragmen tidak valid - %s"
+
+#~ msgid "Warning: fragments not supported.  Ignoring -f option\n"
+#~ msgstr "Peringatan: fragment tidak dilayani. Mengabaikan pilihan -f\n"
+
+#~ msgid "Calling BLKDISCARD from %llu to %llu "
+#~ msgstr "Memanggil BLKDISCARD dari %llu ke %llu "
+
+#~ msgid "succeeded.\n"
+#~ msgstr "berhasil.\n"
 
-#~ msgid "Couldn't allocate memory for tdb filename\n"
-#~ msgstr "Tidak dapat mengalokasikan memori untuk nama berkas tdb\n"
+#~ msgid "Journal NOT removed\n"
+#~ msgstr "Jurnal TIDAK dihapus\n"
 
 #~ msgid ""
 #~ "To undo the tune2fs operation please run the command\n"
@@ -8458,14 +8646,14 @@ msgstr " berisi sebuah file system dengan errors"
 #~ "    e2undo %s %s\n"
 #~ "\n"
 
+#~ msgid "Could not stat %s --- %s\n"
+#~ msgstr "Tidak dapat melakukan statistik %s --- %s\n"
+
 #~ msgid "%s is entire device, not just one partition!\n"
 #~ msgstr "%s adalah seluruh perangkatm bukan hanya sebuah partisi!\n"
 
-#~ msgid "Clearing extent flag not supported on %s"
-#~ msgstr "Menghapus tanda ekstensi yang tidak didukung di %s"
-
-#~ msgid "Could not stat %s --- %s\n"
-#~ msgstr "Tidak dapat melakukan statistik %s --- %s\n"
+#~ msgid "#\t\t %u -> %u (%d)\n"
+#~ msgstr "#\t\t %u -> %u (%d)\n"
 
 #~ msgid ""
 #~ "%s: The combination of flex_bg and\n"
@@ -8474,42 +8662,6 @@ msgstr " berisi sebuah file system dengan errors"
 #~ "%s: Kombinasi dari flex_bg dan\n"
 #~ "\t!resize_inode features tidak dilayani oleh resize2fs.\n"
 
-#~ msgid "<The ACL index inode>"
-#~ msgstr "<ACL index inode>"
-
-#~ msgid "<The ACL data inode>"
-#~ msgstr "<ACL data inode>"
-
-#~ msgid "@g %g @b @B uninitialized but @i @B in use.\n"
-#~ msgstr "@g %g @b @B tidak terinitialisasi tetapi @i @B sedang digunakan.\n"
-
-#~ msgid "@i %i should not have EOFBLOCKS_FL set (size %Is, lblk %r)\n"
-#~ msgstr "@i %i seharusnya EOFBLOCKS_FL tidak aktif (ukuran %Is, lblk %r)\n"
-
-#~ msgid "Couldn't determine journal size"
-#~ msgstr "Tidak dapat menentukan ukuran jurnal"
-
-#~ msgid "short write (only %d bytes) for writing image header"
-#~ msgstr "menulis pendek (hanya %d bytes) untuk menulis header image"
-
-#~ msgid "invalid fragment size - %s"
-#~ msgstr "ukuran potongan/fragmen tidak valid - %s"
-
-#~ msgid "Warning: fragments not supported.  Ignoring -f option\n"
-#~ msgstr "Peringatan: fragment tidak dilayani. Mengabaikan pilihan -f\n"
-
-#~ msgid "Calling BLKDISCARD from %llu to %llu "
-#~ msgstr "Memanggil BLKDISCARD dari %llu ke %llu "
-
-#~ msgid "succeeded.\n"
-#~ msgstr "berhasil.\n"
-
-#~ msgid "Journal NOT removed\n"
-#~ msgstr "Jurnal TIDAK dihapus\n"
-
-#~ msgid "#\t\t %u -> %u (%d)\n"
-#~ msgstr "#\t\t %u -> %u (%d)\n"
-
 #~ msgid "Setting sistem berkas feature '%s' not supported.\n"
 #~ msgstr "Menset sistem berkas feature '%s' tidak dilayani.\n"
 
index 1d66a1d..9ae9bde 100644 (file)
Binary files a/po/it.gmo and b/po/it.gmo differ
index 85691a2..5a9ef2a 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -49,7 +49,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
@@ -71,7 +71,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: e2fsprogs-1.42.10\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
+"POT-Creation-Date: 2018-08-18 21:03-0400\n"
 "PO-Revision-Date: 2014-05-31 16:09+0100\n"
 "Last-Translator: Milo Casagrande <milo@milo.name>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -79,10 +79,11 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
 "X-Generator: Poedit 1.6.5\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Blocco non valido %u fuori dall'intervallo; ignorato.\n"
@@ -95,11 +96,12 @@ msgstr "nel controllare l'integrità degli inode dei blocchi danneggiati"
 msgid "while reading the bad blocks inode"
 msgstr "nel leggere gli inode dei blocchi danneggiati"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1550
+#: e2fsck/unix.c:1664 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1404
+#: misc/e2image.c:1588 misc/e2image.c:1609 misc/mke2fs.c:236
+#: misc/tune2fs.c:2837 misc/tune2fs.c:2931 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "nell'aprire %s"
@@ -109,7 +111,7 @@ msgstr "nell'aprire %s"
 msgid "while trying popen '%s'"
 msgstr "nell'eseguire popen su \"%s\""
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "nel leggere l'elenco di blocchi danneggiati da file"
 
@@ -124,6 +126,11 @@ msgstr ""
 "Attenzione: blocco %u non valido trovato nell'inode di un blocco "
 "danneggiato. Azzerato.\n"
 
+#: e2fsck/dirinfo.c:331
+#, fuzzy
+msgid "while freeing dir_info tdb file"
+msgstr "creando l'inode root"
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -200,12 +207,12 @@ msgstr "Ioctl BLKFLSBUF non supportata: impossibile svuotare i buffer.\n"
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Uso: %s [-F] [-I blocchi_buffer_inode] device\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1075
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "nell'aprire %s per lo svuotamento"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1081 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "nel tentare lo svuotamento di %s"
@@ -215,11 +222,11 @@ msgstr "nel tentare lo svuotamento di %s"
 msgid "while trying to open '%s'"
 msgstr "nel tentare di aprire \"%s\""
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1297
 msgid "while opening inode scan"
 msgstr "nell'avviare l'analisi degli inode"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1316
 msgid "while getting next inode"
 msgstr "nel recuperare l'inode successivo"
 
@@ -228,361 +235,384 @@ msgstr "nel recuperare l'inode successivo"
 msgid "%u inodes scanned.\n"
 msgstr "%u inode analizzati.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "lettura del superblocco del journal\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: non è stato trovato un superblocco valido del journal\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: journal troppo corto\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3786
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: ripristino del journal\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: impossibile ripritinare il journal in modalità sola lettura\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "nel tentare di riaprire %s"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "aattributo esteso"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Aerrore nell'allocare"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bblocco"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bbitmap"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "ccomprimi"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Cva in conflitto con altri blocchi nel file system"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "ddirectory"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Deliminato"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "eelemento"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e \"%Dn\" in %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "ffile system"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fper l'@i %i (%Q) è"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "ggruppo"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "h@i della @d HTREE"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "iinode"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Iillegale"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jjournal"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Lè un collegamento"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 #, fuzzy
 msgid "mmultiply-claimed"
 msgstr "mappa degli inode richiesta più volte"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "nnon valido"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oorfano"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pproblema in"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qquota"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "r@i root"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "sdovrebbe essere"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssuper-@b"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "unon collegato"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vdevice"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xextent"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "zlunghezza-zero"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<Inode NULL>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<Inode dei blocchi danneggiati>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<Inode della quota utente>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<Inode della quota del gruppo>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<Inode del boot loader>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<Inode della directory undelete>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<Inode del descrittore di gruppo>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<Inode del journal>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Inode riservato 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Inode riservato 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "file regolare"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "ddirectory"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "device a caratteri"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "device a blocchi"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 #, fuzzy
 msgid "named pipe"
 msgstr "pipe con nome"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "collegamento simbolico"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "socket"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "tipo di file sconosciuto con modalità 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "blocco indiretto"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "blocco doppio indiretto"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "blocco triplo indiretto"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "blocco traduttore"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "blocco n° "
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr ""
+
+#: e2fsck/message.c:485
+#, fuzzy
+msgid "group"
+msgstr "ggruppo"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr ""
+
+#: e2fsck/message.c:491
+#, fuzzy
+msgid "unknown quota type"
+msgstr "SO sconosciuto - %s"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "mappa degli inode richiesta più volte"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "errore interno: impossibile trovare dup_blk per %llu\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "ritornato da clone_file_block"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr "Errore interno: impossibile trovare il blocco EA per %llu"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "Errore interno: impossibile trovare l'inode EA per %u"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:356
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr ""
+
+#: e2fsck/pass1.c:774 e2fsck/pass2.c:1005
 msgid "reading directory block"
 msgstr "lettura blocco directory"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1223
 msgid "in-use inode map"
 msgstr "mappa degli inode in uso"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1234
 msgid "directory inode map"
 msgstr "mappa degli inode delle directory"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1244
 msgid "regular file inode map"
 msgstr "mappa degli inode dei file regolari"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1253 misc/e2image.c:1272
 msgid "in-use block map"
 msgstr "mappa dei blocchi in uso"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1262
 #, fuzzy
 msgid "metadata block map"
 msgstr "blocchi di meta-dati"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1324
 msgid "opening inode scan"
 msgstr "inizio analisi inode"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1362
 msgid "getting next inode from scan"
 msgstr "recupero inode successivo dall'analisi"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2066
 msgid "Pass 1"
 msgstr "Passo 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2127
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "lettura dei blocchi indiretti dell'inode %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2178
 msgid "bad inode map"
 msgstr "mappa degli inode non valida"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2218
 msgid "inode in bad block map"
 msgstr "inode nella mappa dei blocchi danneggiati"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2238
 msgid "imagic inode map"
 msgstr "mappa degli inode imagic"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2269
 msgid "multiply claimed block map"
 msgstr "mappa dei blocchi richiesta più volte"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2394
 msgid "ext attr block map"
 msgstr ""
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3637
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr ""
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4054
 msgid "block bitmap"
 msgstr "bitmap del blocco"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4060
 msgid "inode bitmap"
 msgstr "bitmap dell'inode"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4066
 msgid "inode table"
 msgstr "tabella dell'inode"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Passo 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1077 e2fsck/pass2.c:1244
 msgid "Can not continue."
 msgstr "Impossibile continuare."
 
@@ -603,19 +633,19 @@ msgstr "Passo 3"
 msgid "inode loop detection bitmap"
 msgstr "mappa dei bit del ciclo di rilevamento inode"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Passo 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Passo 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr ""
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr ""
 
@@ -782,18 +812,18 @@ msgid "WILL RECREATE"
 msgstr "RICREERÀ"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:112
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "@B del @b per il @g %g non è in @g. (@b %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:116
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "@B dell'@i per il @g %g non è 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
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:121
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -810,7 +840,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:127
 #, fuzzy
 msgid ""
 "\n"
@@ -834,7 +864,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:138
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -847,7 +877,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:145
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -858,19 +888,19 @@ msgstr ""
 "differenti dalla dimensione del @b.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:152
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "@S @b(i)_per_gruppo = %b, avrebbe dovuto essere %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:157
 #, fuzzy
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "Primo @b contenente dati del @S = %b, avrebbe dovuto essere %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:162
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -878,7 +908,7 @@ msgstr ""
 "il @f non aveva un UUID; generazione di un UUID.\n"
 "\n"
 
-#: e2fsck/problem.c:165
+#: e2fsck/problem.c:167
 #, fuzzy, c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
@@ -897,49 +927,49 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:176
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Trovata corruzione nel @S. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
+#: e2fsck/problem.c:181
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Errore determinando la dimensione del @v fisico: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:186
 #, fuzzy
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "Il numero di @i in @S è %i, dovrebbe essere %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:190
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Il kernel Hurd non supporta la caratteristica filetype.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
+#: e2fsck/problem.c:195
 #, fuzzy, c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "Il @S ha un @j ext3 non valido (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:200
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr "Il @j esterno ha diversi utenti del @f (non supportato).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:205
 msgid "Can't find external @j\n"
 msgstr "Impossibile trovare il @j esterno\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:210
 msgid "External @j has bad @S\n"
 msgstr "Il @j esterno ha un @S non valido\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:215
 msgid "External @j does not support this @f\n"
 msgstr "Il @j esterno non supporta questo @f\n"
 
@@ -947,7 +977,7 @@ msgstr "Il @j esterno non supporta questo @f\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:220
 #, fuzzy
 msgid ""
 "@f @j @S is unknown type %N (unsupported).\n"
@@ -961,70 +991,70 @@ msgstr ""
 "E' anche possibile che il @S del @j sia corrotto.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:228
 #, fuzzy
 msgid "@j @S is corrupt.\n"
 msgstr "Il @S del @j ext3 è corrotto.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:233
 #, fuzzy
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "Il @S ha il flag ext3 needs_recovery impostato, ma non ha @j.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:238
 #, fuzzy
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr "Il @S ha il flag ext3 needs_recovery impostato, ma non ha @j.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:243
 #, fuzzy
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "flag del recupero ext3 pulito, ma il @j contiene ancora dati.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:248
 msgid "Clear @j"
 msgstr "Azzerare @j"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:253 e2fsck/problem.c:764
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr ""
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:258
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s @o @i %i (uid=%Iu, gid=%Ig, modalità=%Im, dimensione=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:263
 #, fuzzy
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "@b @I #%B (%b) trovato in un @i @o %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:268
 #, fuzzy
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Già azzerato il @b #%B (%b) trovato in un @i @o %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
+#: e2fsck/problem.c:273
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@i @o @I %i nel @S.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
+#: e2fsck/problem.c:278
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@i @I %i nella lista degli @i @o.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:283
 #, fuzzy
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
@@ -1032,7 +1062,7 @@ msgstr ""
 "sconosciuta.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:288
 #, fuzzy
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
@@ -1040,13 +1070,13 @@ msgstr ""
 "compatibile.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:293
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Versione del @j non supportata da questo e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
+#: e2fsck/problem.c:298
 #, fuzzy, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -1057,7 +1087,7 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
+#: e2fsck/problem.c:303
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -1069,7 +1099,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:308
 #, fuzzy
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
@@ -1080,18 +1110,18 @@ msgstr ""
 "Pulitura dei campi al di là del @S del @j V1...\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:314
 msgid "Run @j anyway"
 msgstr "Eseguire @j comunque"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:319
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr "Flag di recupero non impostato nel @S di backup, eseguo @j comunque.\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:324
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1101,26 +1131,26 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:330
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
 msgstr ""
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:336
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr ""
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:341
 #, fuzzy
 msgid "Resize @i not valid.  "
 msgstr "L'@r non è una @d. "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:346
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1128,60 +1158,60 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:351
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
 msgstr ""
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
+#: e2fsck/problem.c:356
 #, c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr ""
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:361
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
 msgstr ""
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:366
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr ""
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:371
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr ""
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:376
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr ""
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:381
 msgid "Last @g @b @B uninitialized.  "
 msgstr ""
 
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:386
 #, c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr ""
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:391
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr ""
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:396
 msgid ""
 "@S last mount time is in the future.\n"
 "\t(by less than a day, probably due to the hardware clock being incorrectly "
@@ -1191,7 +1221,7 @@ msgstr ""
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:402
 msgid ""
 "@S last write time is in the future.\n"
 "\t(by less than a day, probably due to the hardware clock being incorrectly "
@@ -1199,214 +1229,234 @@ msgid ""
 msgstr ""
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:408
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr ""
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:413
 #, fuzzy
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Impostazione del numero di blocchi riservati a %lu\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:418
 #, fuzzy
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Impostazione del numero di blocchi riservati a %lu\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr ""
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:423
+#, fuzzy
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "'.' mancante nell'@i %i della @d.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:428
 msgid "@S has invalid MMP block.  "
 msgstr ""
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:433
 msgid "@S has invalid MMP magic.  "
 msgstr ""
 
-#: e2fsck/problem.c:433
+#: e2fsck/problem.c:438
 #, c-format
 msgid "ext2fs_open2: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:438
+#: e2fsck/problem.c:443
 #, c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr ""
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
+#: e2fsck/problem.c:449
 msgid ""
 "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
 "simultaneously."
 msgstr ""
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:455
 #, fuzzy
-msgid "@S MMP block checksum does not match MMP block.  "
+msgid "@S MMP @b checksum does not match.  "
 msgstr "Il checksum del blocco MMP non corrisponde al blocco MMP"
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:460
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr ""
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:465
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr ""
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:470
 #, fuzzy
 msgid "External @j @S checksum does not match @S.  "
 msgstr "Il checksum del super-blocco non corrisponde al super-blocco"
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:475
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr ""
 
-#: e2fsck/problem.c:477
+#: e2fsck/problem.c:480
 #, c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr ""
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:485
 msgid "Bad required extra isize in @S (%N).  "
 msgstr ""
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:490
 msgid "Bad desired extra isize in @S (%N).  "
 msgstr ""
 
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:495
+#, fuzzy
+msgid "Invalid %U @q @i %i.  "
+msgstr "@i @o @I %i nel @S.\n"
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:500
+msgid "@S would have too many inodes (%N).\n"
+msgstr ""
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:505
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
+msgstr ""
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:513
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Passo 1: Controllo di @i, @b(i) e dimensioni\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:517
 msgid "@r is not a @d.  "
 msgstr "L'@r non è una @d. "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:522
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr ""
 "L'@r ha il dtime impostato (probabilmente a causa di un vecchio mke2fs)."
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:527
 #, fuzzy
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "L'@i riservato %i %Q ha una modalità errata. "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:532
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "L'@i @D  %i ha dtime zero. "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:537
 #, fuzzy, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "L'@i %i è in uso, ma ha il dtime impostato. "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:542
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "L'@i %i è una @d a @z. "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:547
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "La @B dei @b(i) del @g %g a %b @C.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:552
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "La @B degli @i del @g %g a %b @C.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:557
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "La tavola degli @i del @g %g a %b @C.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:562
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "La @B dei @b(i) del @g %g (%b) non è valida. "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:567
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "La @B degli @i del @g %g (%b) non è valida. "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:572
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size è %Is, @s %N. "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:577
 #, fuzzy
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_blocks è %Ib, @s %N. "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:582
 #, fuzzy
 msgid "@I %B (%b) in @i %i.  "
 msgstr "@b @I #%B (%b) nell'@i %i. "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:587
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr ""
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "L'@i %i ha @b(i) illegali. "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Troppi @b(i) illegali in @i %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:602
 #, fuzzy
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "@b @I #%B (%b) nell'@i del @b non valido. "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:607
 #, fuzzy
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "L'@i del @b non valido ha @b(i) illegali. "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:612
 msgid "Duplicate or bad @b in use!\n"
 msgstr "@b duplicato o non valido in uso!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:617
 #, fuzzy
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "Il @b %b usa come @i del @b non valido un @b indiretto. "
@@ -1415,7 +1465,7 @@ msgstr "Il @b %b usa come @i del @b non valido un @b indiretto. "
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:622
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1429,7 +1479,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:629
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1440,7 +1490,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:634
 #, fuzzy
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
@@ -1453,24 +1503,24 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:640
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Il @S primario (%b) è nella listi dei @b(i) non validi.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:645
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 "Il blocco %b nei descrittori primari del @g è nella lista dei @b(i) non "
 "validi\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:651
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Attenzione: Il @S (%b) del gruppo %g non è valido.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:657
 #, fuzzy
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
@@ -1478,107 +1528,107 @@ msgstr ""
 "valido.\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:663
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 "Errore di programmazione? @b #%b reclamato senza ragione in process_bad_@b.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:669
 #, fuzzy
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A %N @b(i) contigui nel @g di @b %g per %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:674
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A il buffer @b per la rilocazione di %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:679
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Rilocazione del %s del @g %g da %b a %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:684
 #, fuzzy, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Rilocazione del %s del @g %g in %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:689
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Attenzione: impossibile leggere @b %b di %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:694
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Attenzione: impossibile scrivere @b %b per %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:699 e2fsck/problem.c:1776
 msgid "@A @i @B (%N): %m\n"
 msgstr "@A la @B dell'@i (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:704
 #, fuzzy
 msgid "@A @b @B (%N): %m\n"
 msgstr "@A la @B dell'@i (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:709
 #, fuzzy, c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A le informazioni del collegamento icount: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:714
 #, fuzzy, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A l'array dei @b di @d: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
+#: e2fsck/problem.c:719
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Errore analizzando @is (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
+#: e2fsck/problem.c:724
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Errore scorrendo i @b(i) nell'@i %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:729
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 "Errore salvando le informazioni sul numero di @i (@i=%i, numero=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:734
 #, fuzzy
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 "Errore salvando le informazioni sui @b(i) di @d (@i=%i, @b=%b, num=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
+#: e2fsck/problem.c:740
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Errore durante la lettura dell'@i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:748
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "L'@i %i ha il flag imagic impostato. "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:753
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1588,7 +1638,7 @@ msgstr ""
 "immutable o append-only impostato. "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
+#: e2fsck/problem.c:759
 #, fuzzy, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
@@ -1596,155 +1646,155 @@ msgstr ""
 "immutable o append-only impostato. "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:769
 #, fuzzy
 msgid "@j @i is not in use, but contains data.  "
 msgstr "L'@i %i è in uso, ma ha il dtime impostato. "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:774
 msgid "@j is not regular file.  "
 msgstr "Il @j non è un file regolare. "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:779
 #, fuzzy, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "L'@i %i faceva parte della lista degli @i orfani. "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:785
 #, fuzzy
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
 "trovati @i che facevano parte di una lista di orfani corrotti collegati. "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:790
 #, fuzzy
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A la struttura icount: %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:795
 #, fuzzy
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Errore leggendo l'@a di @b %b per l'@i %i. "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:800
 #, fuzzy
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "L'@i %i ha un @a di @b %b non valido. "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:805
 #, fuzzy
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Errore leggendo l'@a di @b %b (%m). "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:810
 #, fuzzy
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "L'@a di @b %b è contato come %b, dovrebbe essere %N. "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:815
 #, fuzzy
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Errore scrivendo l'@a @b %b (%m). "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:820
 #, fuzzy
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "L'@a @b %b ha il valore h_blocks > 1. "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:825
 #, fuzzy
 msgid "@A @a region allocation structure.  "
 msgstr "@A la struttura icount: %m\n"
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:830
 #, fuzzy
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "L'@a di @b %b è corrotto (collisione di allocazione). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:835
 #, fuzzy
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "L'@a di @b %b è corrotto (nome non valido). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:840
 #, fuzzy
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "L'@a di @b %b è corrotto (valore non valido). "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
+#: e2fsck/problem.c:845
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "L'@i %i è troppo grande. "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:849
 #, fuzzy
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "Il @b #%B (%b) fa diventare il @d troppo grande. "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:854
 #, fuzzy
 msgid "%B (%b) causes file to be too big.  "
 msgstr "Il @b #%B (%b) fa diventare il file troppo grande. "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:859
 #, fuzzy
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "Il @b #%B (%b) fa diventare il link simbolico troppo grande. "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:864
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
 "L'@i %i ga il flag INDEX_FL impostato nel @f senza il supporto htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
+#: e2fsck/problem.c:869
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "L'@i %i ha il flag INDEX_FL impostato, ma non è un @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
+#: e2fsck/problem.c:874
 #, fuzzy, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "L'@h %i ha un nodo root non valido.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:879
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "L'@h %i ha una versione dell'hash non supportata (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
+#: e2fsck/problem.c:884
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "L'@h %i usa un flag di nodo htree di root non compatibile.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:889
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:895
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1753,61 +1803,61 @@ msgstr ""
 "conflitto con il metadata del @f. "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
+#: e2fsck/problem.c:901
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr ""
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:906
 #, fuzzy
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:911
 #, fuzzy
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:916
 #, fuzzy
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:921
 #, fuzzy
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:926
 #, fuzzy
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:931
 #, fuzzy
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:936
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr ""
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
+#: e2fsck/problem.c:941
 #, fuzzy, c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Errore scorrendo i @b(i) nell'@i %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:946
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1815,7 +1865,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:952
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1823,122 +1873,122 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:957
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
+#: e2fsck/problem.c:962
 #, fuzzy, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr ""
 "L'@i %i ga il flag INDEX_FL impostato nel @f senza il supporto htree.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
+#: e2fsck/problem.c:967
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr ""
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
+#: e2fsck/problem.c:972
 #, c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr ""
 
-#: e2fsck/problem.c:956
+#: e2fsck/problem.c:977
 #, c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr ""
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:982
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:986
 #, fuzzy
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "L'@h %i ha un nodo root non valido.\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
+#: e2fsck/problem.c:991
 #, fuzzy, c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Errore scorrendo i @b(i) delle @d: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:996
 #, fuzzy
-msgid "@q @i is not regular file.  "
+msgid "@q @i is not regular file.  "
 msgstr "Il @j non è un file regolare. "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1001
 #, fuzzy
 msgid "@q @i is not in use, but contains data.  "
 msgstr "L'@i %i è in uso, ma ha il dtime impostato. "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1006
 #, fuzzy
 msgid "@q @i is visible to the user.  "
 msgstr "L'@i %i è in uso, ma ha il dtime impostato. "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1011
 #, fuzzy
 msgid "The bad @b @i looks @n.  "
 msgstr "<Inode numero 1>"
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1016
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
+#: e2fsck/problem.c:1021
 #, fuzzy, c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "L'@i %i è troppo grande. "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
+#: e2fsck/problem.c:1026
 #, c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr ""
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
+#: e2fsck/problem.c:1031
 #, fuzzy, c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "L'@a di @b %b è corrotto (collisione di allocazione). "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1039
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1048
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
 msgstr ""
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1053
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1946,60 +1996,60 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1059
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
+#: e2fsck/problem.c:1064
 #, c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
+#: e2fsck/problem.c:1069
 #, fuzzy, c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
 msgstr ""
 "L'@i %i ga il flag INDEX_FL impostato nel @f senza il supporto htree.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
+#: e2fsck/problem.c:1076
 msgid ""
 "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
 msgstr ""
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1081
 #, fuzzy
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "L'@i %i ha un @a di @b %b non valido. "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
+#: e2fsck/problem.c:1086
 #, fuzzy, c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "L'@i %i della @d ha un @b (#%B) non allocato. "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1091
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
+#: e2fsck/problem.c:1096
 #, fuzzy, c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
 msgstr "L'@i %i ha il flag INDEX_FL impostato, ma non è un @d.\n"
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
+#: e2fsck/problem.c:1102
 #, fuzzy, c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
@@ -2009,80 +2059,99 @@ msgstr ""
 "immutable o append-only impostato. "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1108
 #, c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1113
 #, c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
 msgstr ""
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1128
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr ""
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1133
 #, fuzzy
 msgid "@A @x region allocation structure.  "
 msgstr "@A la struttura icount: %m\n"
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1138
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1143
 msgid "@A memory for encrypted @d list\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1148
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr ""
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1153
 #, c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr ""
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
+#: e2fsck/problem.c:1158
 #, fuzzy, c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "L'@a di @b %b è corrotto (nome non valido). "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
+#: e2fsck/problem.c:1163
 #, c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr ""
 
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1168
+#, fuzzy
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "L'@i %i ha un @a di @b %b non valido. "
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1174
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr ""
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1179
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1187
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2090,51 +2159,51 @@ msgid ""
 msgstr ""
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
+#: e2fsck/problem.c:1193
 #, fuzzy, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "@b @I #%B (%b) nell'@i %i. "
 
-#: e2fsck/problem.c:1172
+#: e2fsck/problem.c:1208
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Errore analizzando gli inode (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
+#: e2fsck/problem.c:1213
 #, fuzzy, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A la @B degli @i (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
+#: e2fsck/problem.c:1218
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Errore scorrendo i @b(i) nell'@i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1223 e2fsck/problem.c:1585
 #, fuzzy
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 "Errore sistemando il conteggio dei riferimenti per il @b @a %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1233
 #, fuzzy
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
 "Passo 1C: Analisi delle directory relativa agli @i con @b(i) duplicati.\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1239
 #, fuzzy
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Passo 1D: Riconciliamento del @b(i) duplicati\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1244
 #, fuzzy
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
@@ -2144,18 +2213,18 @@ msgstr ""
 "  ha %b @b(i) duplicati, condivisi con %N file:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1250
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i #%i, ultima modifica %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1255
 msgid "\t<@f metadata>\n"
 msgstr "\t<metadata del @f>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1260
 #, fuzzy
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
@@ -2166,7 +2235,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1265
 #, fuzzy
 msgid ""
 "@m @bs already reassigned or cloned.\n"
@@ -2175,376 +2244,376 @@ msgstr ""
 "@b(i) duplicati già riassegnati o clonati.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
+#: e2fsck/problem.c:1278
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Impossibile clonare il file: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1284
 #, fuzzy
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Passo 3A: Ottimizzazione delle directory\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
+#: e2fsck/problem.c:1289
 #, fuzzy, c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Impossibile ottimizzare la directory %q (%d): %m"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1294
 #, fuzzy
 msgid "Optimizing @x trees: "
 msgstr "Ottimizzazione delle directory: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1309
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1314
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1319
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr ""
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1326
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Passo 2: Analisi della struttura delle @d\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1331
 #, fuzzy, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Numero di @i non valido per '.' nell'@i @d %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1336
 #, fuzzy
 msgid "@E has @n @i #: %Di.\n"
 msgstr "L'@E ha un @i non valido #: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1341
 #, fuzzy
 msgid "@E has @D/unused @i %Di.  "
 msgstr "L'@E ha @i non utilizzato/@D %Di. "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1346
 msgid "@E @L to '.'  "
 msgstr "L'@E @L a '.' "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1351
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "L'@E punta all'@i (%Di), posizionato in un @b non valido.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1356
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "L'@E @L alla @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1361
 msgid "@E @L to the @r.\n"
 msgstr "L'@E @L all'@r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1366
 msgid "@E has illegal characters in its name.\n"
 msgstr "L'@E ha caratteri non validi nel suo nome.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
+#: e2fsck/problem.c:1371
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "'.' mancante nell'@i %i della @d.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
+#: e2fsck/problem.c:1376
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "'..' mancante nell'@i %i della @d.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1381
 #, fuzzy
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Il primo @e '%Dn' (inode=%Di) nell'@i %i della @d (%p) @s '.'\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1386
 #, fuzzy
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Il secondo @e '%Dn' (inode=%Di) nell'@i %i della @d (%p) @s '.'\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1391
 #, fuzzy
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr @F %IF @s zero.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1396
 #, fuzzy
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl @F %If @s zero.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1401
 #, fuzzy
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl @F %Id @s zero.\n"
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_fsize @F %N @s zero.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1406
 #, fuzzy
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N @s zero.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1411
 #, fuzzy
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N @s zero.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1416
 #, fuzzy
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "L'@o %i (%Q) ha una modalità non valida (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1421
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "@i %i della @d, offset %N: @d corrotta\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1426
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "@i %i della @d, offset %N: nome file troppo lungo\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1431
 #, fuzzy
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "L'@i %i della @d ha un @b (#%B) non allocato. "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
+#: e2fsck/problem.c:1436
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "L'@e della @d '.' nell'@i %i della @d non è terminato da NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
+#: e2fsck/problem.c:1441
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "L'@e della @d '..' nell'@i %i della @d non è terminato da NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1446
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "L'@i %i (%Q) è un @v a caratteri @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1451
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "L'@i %i (%Q) è un @v a @b(i) @I.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1456
 #, fuzzy
 msgid "@E is duplicate '.' @e.\n"
 msgstr "L'@E è un duplicato dell'@e '.'.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1461
 msgid "@E is duplicate '..' @e.\n"
 msgstr "L'@E è un duplicato dell'@e '..'.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
+#: e2fsck/problem.c:1466 e2fsck/problem.c:1801
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Errore interno: impossibile trovare dir_info per %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1471
 #, fuzzy
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "L'@E ha rec_len di %Dr, dovrebbe essere %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
+#: e2fsck/problem.c:1476
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A la struttura icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
+#: e2fsck/problem.c:1481
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Errore scorrendo i @b(i) delle @d: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1486
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Errore leggendo il @b della @d %b (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1491
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Errore scrivendo il @b della @d %b (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
+#: e2fsck/problem.c:1496
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A un nuovo @b della @d per l'@i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
+#: e2fsck/problem.c:1501
 #, fuzzy, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Errore deallocando l'@i %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
+#: e2fsck/problem.c:1506
 #, fuzzy, c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "L'@e della @d di '.' è grande. "
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1511
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "L'@i %i (%Q) è una FIFO @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1516
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "L'@i %i (%Q) è un socket @I.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1521
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Impostazione del tipo di file per l'@E a %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1526
 #, fuzzy
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "L'@E non è del giusto tipo di file (era %Dt, dovrebbe essere %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1531
 msgid "@E has filetype set.\n"
 msgstr "E' impostato il tipo di file per l'@E.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1536
 #, fuzzy
 msgid "@E has a @z name.\n"
 msgstr "Il nome dell'@E è di lunghezza nulla.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1541
 #, fuzzy
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Il symlink %Q (@i #%i) non è valido.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1546
 msgid "@a @b @F @n (%If).\n"
 msgstr ""
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1551
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 "Il @f contiene files di grandi dimensioni, ma nel @S non è specificato il "
 "flag LARGE_FILE.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1556
 #, fuzzy
 msgid "@p @h %d: %B not referenced\n"
 msgstr "@p un @h (%d): nodo (%B) non referenziato\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1561
 #, fuzzy
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "@p un @h (%d): nodo (%b) referenziato due volte\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1566
 #, fuzzy
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "@p un @h (%d): nodo (%B) con hash minimo non valido\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1571
 #, fuzzy
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "@p un @h (%d): nodo (%b) con hash massimo non valido\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1576
 #, fuzzy
 msgid "@n @h %d (%q).  "
 msgstr "@h %d non valido (%q). "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1580
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p un @h %d (%q): @b non valido numero %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
+#: e2fsck/problem.c:1590
 #, fuzzy, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p un @h (%d): nodo root non valido\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1595
 #, fuzzy
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "@p un @h (%d): nodo (%B) con limite non valido (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1600
 #, fuzzy
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "@p un @h (%d): numero (%N) di nodo (%B) non valido\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1605
 #, fuzzy
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "@p un @h (%d): nodo (%B) con tabella hash non ordinata\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1610
 #, fuzzy
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "@p un @h (%d): nodo (%B) con profondità non valida\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1615
 msgid "Duplicate @E found.  "
 msgstr "Trovato @E duplicato. "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1620
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2556,7 +2625,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1625
 #, fuzzy
 msgid ""
 "Duplicate @e '%Dn' found.\n"
@@ -2568,158 +2637,158 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1630
 #, fuzzy
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_fsize @F %N @s zero.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1635
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1639
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1644
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr ""
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1649
 #, fuzzy
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "i_file_acl @F %If @s zero.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
+#: e2fsck/problem.c:1654
 #, fuzzy, c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr "@p un @h (%d): nodo root non valido\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
+#: e2fsck/problem.c:1659
 #, fuzzy, c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr "@p un @h (%d): nodo root non valido\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1664
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "@i %i della @d, offset %N: @d corrotta\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1669
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr ""
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1674
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr ""
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
+#: e2fsck/problem.c:1679
 #, c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr ""
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1684
 msgid "Encrypted @E is too short.\n"
 msgstr ""
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1691
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Passo 3: Controllo della connettività di @d\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1696
 msgid "@r not allocated.  "
 msgstr "@r non allocato."
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1701
 msgid "No room in @l @d.  "
 msgstr "Non c'è spazio nella @d @l"
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
+#: e2fsck/problem.c:1706
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr ""
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1711
 msgid "/@l not found.  "
 msgstr "/@l non trovata. "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1716
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "'..' in %Q (%i) è %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1721
 #, fuzzy
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "/@l non valida o inesistente. Impossibile riconnettere.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
+#: e2fsck/problem.c:1726
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Impossibile espandere /@l: %m\n"
 
-#: e2fsck/problem.c:1695
+#: e2fsck/problem.c:1731
 #, fuzzy, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Impossibile riconnettere %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
+#: e2fsck/problem.c:1736
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Errore cercando /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
+#: e2fsck/problem.c:1741
 #, fuzzy, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block: %m cercando di creare la @d /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
+#: e2fsck/problem.c:1746
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@i: %m cercando di creare la @d /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
+#: e2fsck/problem.c:1751
 #, fuzzy, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2f_new_dir_block: %m creando un nuovo @b @d\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
+#: e2fsck/problem.c:1756
 #, fuzzy, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_block: %m scrivendo il @b @d per /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
+#: e2fsck/problem.c:1761
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Errore aggiustando il numero @i nell'@i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
+#: e2fsck/problem.c:1766
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2728,7 +2797,7 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
+#: e2fsck/problem.c:1771
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2736,42 +2805,42 @@ msgid ""
 msgstr ""
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
+#: e2fsck/problem.c:1781
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Errore creando la @d root (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
+#: e2fsck/problem.c:1786
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Errore creando la @d /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1791
 #, fuzzy
 msgid "@r is not a @d; aborting.\n"
 msgstr "L'@r non è una @d; cancellazione.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1796
 msgid "Cannot proceed without a @r.\n"
 msgstr "Impossibile procedere senza un @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
+#: e2fsck/problem.c:1806
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l non è una @d (ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1811
 msgid "/@l has inline data\n"
 msgstr ""
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1816
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2780,7 +2849,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1821
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2788,46 +2857,46 @@ msgid ""
 msgstr ""
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1826
 msgid "/@l is encrypted\n"
 msgstr ""
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1833
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Passo 3A: Ottimizzazione delle directory\n"
 
-#: e2fsck/problem.c:1802
+#: e2fsck/problem.c:1838
 #, fuzzy, c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Impossibile creare un iteratore dirs_to_hash: %m"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1843
 #, fuzzy
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Impossibile ottimizzare la directory %q (%d): %m"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1848
 msgid "Optimizing directories: "
 msgstr "Ottimizzazione delle directory: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1865
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Pass 4: Controllo del numero dei riferimenti\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
+#: e2fsck/problem.c:1870
 #, fuzzy, c-format
 msgid "@u @z @i %i.  "
 msgstr "@i @o @I %i nel @S.\n"
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
+#: e2fsck/problem.c:1875
 #, c-format
 msgid "@u @i %i\n"
 msgstr ""
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1880
 #, fuzzy
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "Il contatore riferimenti dell'@i %i è %Il, @s %N. "
@@ -2835,7 +2904,7 @@ msgstr "Il contatore riferimenti dell'@i %i è %Il, @s %N. "
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1884
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2846,150 +2915,160 @@ msgstr ""
 "(LIVE).\n"
 "@i_link_info[%i] è %N, @i.i_links_count è %Il. Dovrebbero essere identici!\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1891
+#, fuzzy
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "Il contatore riferimenti dell'@i %i è %Il, @s %N. "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1896
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:1903
 #, fuzzy
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Passo 5: Controllo del riepilogo delle informazioni del @g\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:1908
 #, fuzzy
 msgid "Padding at end of @i @B is not set. "
 msgstr "Riempimento alla fine di @i @B non impostato. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:1913
 #, fuzzy
 msgid "Padding at end of @b @B is not set. "
 msgstr "Riempimento alla fine di @b @B non impostato. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:1918
 msgid "@b @B differences: "
 msgstr "Differenze nella @B dei @b: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:1938
 msgid "@i @B differences: "
 msgstr "Differenze nella @B degli @i: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:1958
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Numero degli @i liberi errato per il @g #%g (%i, contati=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:1963
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Numero delle directory errato per il @g #%g (%i, contati=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:1968
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Numero degli @i liberi errato (%i, contati=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:1973
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Numero dei @b(i) liberi errato per il @g #%g (%b, contati=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:1978
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Numero dei @b(i) liberi errato (%b, contati=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
+#: e2fsck/problem.c:1983
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:1989
 #, fuzzy
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr ""
 "Errore interno: impossibile individuare la fine della mappa di bit (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
+#: e2fsck/problem.c:1994
 #, fuzzy, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Errore durante la lettura dell'@i %i: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
+#: e2fsck/problem.c:1999
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr ""
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
+#: e2fsck/problem.c:2024
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
+#: e2fsck/problem.c:2029
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr ""
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
+#: e2fsck/problem.c:2034
 #, c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
+#: e2fsck/problem.c:2039
 #, c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2046
 #, fuzzy
 msgid "Recreate @j"
 msgstr "Ricrea"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2051
 msgid "Update quota info for quota type %N"
 msgstr ""
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
+#: e2fsck/problem.c:2056
 #, fuzzy, c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "impostando l'inode del blocco difettoso"
 
-#: e2fsck/problem.c:2016
+#: e2fsck/problem.c:2061
 #, fuzzy, c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Errore durante la lettura dell'@i %i: %m\n"
 
-#: e2fsck/problem.c:2021
+#: e2fsck/problem.c:2066
 #, c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2026
-#, fuzzy
+#: e2fsck/problem.c:2071
 msgid "Error writing quota info for quota type %N: %m\n"
-msgstr "Errore durante la lettura dell'@i %i: %m\n"
+msgstr ""
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2194
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Codice errore non gestito (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2320 e2fsck/problem.c:2324
 msgid "IGNORED"
 msgstr "IGNORATO"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr ""
 
@@ -3011,21 +3090,21 @@ msgstr "iniziando la scansione degli inode"
 msgid "while doing inode scan"
 msgstr "durante la scansione dell'inode"
 
-#: e2fsck/super.c:190
-#, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
+#: e2fsck/super.c:224
+#, fuzzy, c-format
+msgid "while calling ext2fs_block_iterate for inode %u"
 msgstr "chiamando ext2fs_block_iterate per l'inode %d"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, fuzzy, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
 msgstr "chiamando ext2fs_adjust_ea_refocunt per l'inode %d"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr ""
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr ""
 
@@ -3081,12 +3160,12 @@ msgstr ""
 " -l file_bad_blocks   Aggiungi alla lista dei blocchi non validi\n"
 " -L file_bad_blocks   Imposta la lista dei blocchi non validi\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:136
 #, fuzzy, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %d/%d files (%0d.%d%% non contigui), %d/%d blocchi\n"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:162
 #, c-format
 msgid ""
 "\n"
@@ -3097,51 +3176,51 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:166
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:171
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:176
 #, fuzzy, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "         # di inode con blocchi ind/dind/tind: %d/%d/%d\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:184
 msgid "             Extent depth histogram: "
 msgstr ""
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:193
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:197
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%12u blocco danneggiato\n"
 msgstr[1] "%12u blocchi danneggiati\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:199
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:201
 #, c-format
 msgid ""
 "\n"
@@ -3156,96 +3235,96 @@ msgstr[1] ""
 "\n"
 "%12u file regolari\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:203
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u directory\n"
 msgstr[1] "%12u directory\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:205
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:208
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:210
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u fifo\n"
 msgstr[1] "%12u fifo\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:212
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u collegamento\n"
 msgstr[1] "%12u collegamenti\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:214
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u collegamento simbolico"
 msgstr[1] "%12u collegamenti simbolici"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:216
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:220
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u socket\n"
 msgstr[1] "%12u socket\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:224
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u file\n"
 msgstr[1] "%12u file\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:237 misc/badblocks.c:1002 misc/tune2fs.c:3022 misc/util.c:126
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "nel determinare se %s è montato."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:258
 #, fuzzy, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Attenzione: %s è %s.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:261
 #, fuzzy, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Attenzione: %s è %s.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:267
 #, fuzzy, c-format
 msgid "%s is mounted.\n"
 msgstr "%s è montato: "
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:269
 #, fuzzy, c-format
 msgid "%s is in use.\n"
 msgstr "%s è %s.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:271
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3253,7 +3332,7 @@ msgstr ""
 "Impossibile continuare, operazione annullata.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:273
 msgid ""
 "\n"
 "\n"
@@ -3267,150 +3346,180 @@ msgstr ""
 "verranno causati seri danni al file system.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:278
 msgid "Do you really want to continue"
 msgstr "Continuare"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:280
 msgid "check aborted.\n"
 msgstr "controllo annullato.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:374
 msgid " contains a file system with errors"
 msgstr " contiene un file system con errori"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:376
 msgid " was not cleanly unmounted"
 msgstr " non è stato smontato in maniera corretta"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:378
 msgid " primary superblock features different from backup"
 msgstr ""
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:382
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " è stato montato %u volte senza essere controllato"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:389
 msgid " has filesystem last checked time in the future"
 msgstr " presenta orario di ultimo controllo del file system nel futuro"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:395
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " non è stato controllato negli ultimi %u giorni"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:403
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:409
 msgid ", check forced.\n"
 msgstr ", controllo forzato.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:442
 #, fuzzy, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: a posto, %d/%d file, %d/%d blocchi"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:462
 #, fuzzy
 msgid " (check deferred; on battery)"
 msgstr " (controllo dopo il prossimo mount)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:465
 msgid " (check after next mount)"
 msgstr " (controllo dopo il prossimo mount)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:467
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (controllo tra %ld mount)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:617
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ERRORE: Impossibile aprire /dev/null (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:688
 msgid "Invalid EA version.\n"
 msgstr "Versione EA non valida.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:701
 #, fuzzy
 msgid "Invalid readahead buffer size.\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:750
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:758
+#, fuzzy
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Opzioni raid non valide.\n"
+"\n"
+"Le opzioni raid sono separte da virgole, e possono avere un parametro, che\n"
+"\tè passato da un segno di uguale ('=').\n"
+"\n"
+"Le opzioni raid valide sono:\n"
+"\tstride=lunghezza stride in blocchi>\n"
+"\n"
+
+#: e2fsck/unix.c:762
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr ""
+
+#: e2fsck/unix.c:771
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr ""
+
+#: e2fsck/unix.c:783
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:856
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Errore convalidando il descrittore di file %d: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:860
 #, fuzzy
 msgid "Invalid completion information file descriptor"
 msgstr "Informazioni di completamento descrittore di file non valide"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:875
 #, fuzzy
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Solo una tra le opzioni -p/-a, -n o -y può essere specificata."
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:896
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "L'opzione -t non è supportata da questa versione di e2fsck.\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:927 e2fsck/unix.c:1005 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1741 misc/tune2fs.c:2036 misc/tune2fs.c:2054
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Impossibile risolvere '%s'"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:984
 msgid "The -n and -D options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:989
 msgid "The -n and -c options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:994
 #, fuzzy
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Le opzioni -c e -I/-L non possono essere usate contemporaneamente.\n"
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1018
 #, fuzzy
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Le opzioni -c e -I/-L non possono essere usate contemporaneamente.\n"
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1024
 #, fuzzy
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Le opzioni -c e -I/-L non possono essere usate contemporaneamente.\n"
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1088
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Le opzioni -c e -I/-L non possono essere usate contemporaneamente.\n"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1135
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1144
 #, c-format
 msgid ""
 "\n"
@@ -3418,32 +3527,33 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1235
 #, c-format
 msgid ""
 "MMP interval is %u seconds and total wait time is %u seconds. Please "
 "wait...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1252 e2fsck/unix.c:1257
 #, fuzzy
 msgid "while checking MMP block"
 msgstr "impostando il superblocco"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1259
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1275
 #, fuzzy
 msgid "while reading MMP block"
 msgstr "leggendo l'inode numero 1"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1295 e2fsck/unix.c:1347 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2613 misc/mke2fs.c:2664 misc/tune2fs.c:2754
+#: misc/tune2fs.c:2799 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3451,60 +3561,60 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1336 misc/e2undo.c:270 misc/mke2fs.c:2653 misc/tune2fs.c:2788
+#: resize/main.c:222
 #, fuzzy, c-format
 msgid "while trying to delete %s"
 msgstr "provando a ridimensionare %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1362 misc/mke2fs.c:2679 resize/main.c:243
 #, fuzzy
 msgid "while trying to setup undo file\n"
 msgstr ""
 "\n"
 "\tcercando di creare il file di journal"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1405
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Errore: versione obsoleta della libreria ext2fs!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1412
 msgid "while trying to initialize program"
 msgstr "tentando di inizializzare il programma"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1435
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tUtilizzando %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1447
 msgid "need terminal for interactive repairs"
 msgstr "serve il terminale per il riparo interattivo"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1508
 #, fuzzy, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s cercando tra i blocchi di backup...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1510
 msgid "Superblock invalid,"
 msgstr ""
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1511
 msgid "Group descriptors look bad..."
 msgstr "I descrittori di gruppo sembrano non validi..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1521
 #, fuzzy, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "durante la lettura dell'inode numero 1"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1525
 #, fuzzy, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: non è stato trovato un superblocco valido del journal\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1554
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3515,29 +3625,29 @@ msgstr ""
 "(O il super-blocco del file system è danneggiato)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1561
 msgid "Could this be a zero-length partition?\n"
 msgstr "E' possibile che questa sia una partizione di dimensione zero?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1563
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Serve accesso di tipo %s al file system o è necessario essere root\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1569
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Device non esistente o di swap?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1571
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1575
 #, fuzzy
 msgid "Possibly non-existent device?\n"
 msgstr "Device non esistente o di swap?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1578
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3545,21 +3655,26 @@ msgstr ""
 "Disco protetto da scrittura: usare l'opzione -n per controllare\n"
 "in modalità sola lettura.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1592
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1667
 msgid "Get a newer version of e2fsck!"
 msgstr "Utilizzare una versione più nuova di e2fsck."
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1711
 #, fuzzy, c-format
 msgid "while checking journal for %s"
 msgstr "controllando il journal ext3 per %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1714
 #, fuzzy
 msgid "Cannot proceed with file system check"
 msgstr "Impossibile procedere senza un @r.\n"
 
-#: e2fsck/unix.c:1661
+#: e2fsck/unix.c:1725
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
@@ -3568,73 +3683,87 @@ msgstr ""
 "ripristinato.\n"
 
 # fuzzy
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1737
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "impossibile impostarei i flag del superblocco a %s\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1743
 #, fuzzy, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Superblocco del journal non trovato!\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1747
 #, fuzzy, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "Journal rimosso\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1751
 #, fuzzy, c-format
 msgid "while recovering journal of %s"
 msgstr "ripristinando il journal ext3 di %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1773
 #, fuzzy, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "L'@h %i ha una versione dell'hash non supportata (%N)\n"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1832
 #, fuzzy, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "leggendo l'inode numero 1"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1835
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Questo non è un buon segno, ma si tenterà di continuare...\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1875
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Creazione del journal (%d blocchi): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1885
 msgid " Done.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1887
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
 msgstr ""
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1893
 msgid "aborted"
 msgstr "annullato"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1895
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck cancellato.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1922
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Riavvio di e2fsck dall'inizio...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1926
 msgid "while resetting context"
 msgstr "resettando il contesto"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:1985
+#, fuzzy, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** IL FILE SYSTEM È STATO MODIFICATO *****\n"
+
+#: e2fsck/unix.c:1987
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr ""
+
+#: e2fsck/unix.c:1991 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3643,12 +3772,12 @@ msgstr ""
 "\n"
 "%s: ***** IL FILE SYSTEM È STATO MODIFICATO *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:1996
 #, fuzzy, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** RIAVVIARE LINUX *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2006 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3660,51 +3789,51 @@ msgstr ""
 "************\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "sS"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr ""
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr ""
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<s>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (s/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "cancellato!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr ""
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "sì\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "no\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3713,7 +3842,7 @@ msgstr ""
 "%s? no\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3722,40 +3851,40 @@ msgstr ""
 "%s? sì\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "sì"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "no"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr ""
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "lettura delle mappe di bit inode e blocco"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "riprovando a leggere le mappe di bit per %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 #, fuzzy
 msgid "writing block and inode bitmaps"
 msgstr "scrivendo le mappe di bit di blocco"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, fuzzy, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "riprovando a scrivere le mappe di bit di inode per %s"
 
 # fuzzy
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3768,51 +3897,51 @@ msgstr ""
 "%s: INCONSISTENZA INASPETTATA: ESEGUIRE fsck MANUALMENTE.\n"
 "\t(es., senza le opzioni -a o -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, fuzzy, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Memoria usata: %dk/%dk (%dk/%dk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, fuzzy, c-format
 msgid "Memory used: %lu, "
 msgstr "Memoria usata: %d, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "durata: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "tempo rimanente: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, fuzzy, c-format
 msgid "while reading inode %lu in %s"
 msgstr "leggendo l'inode %ld in %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, fuzzy, c-format
 msgid "while writing inode %lu in %s"
 msgstr "scrivendo l'inode %ld in %s"
 
-#: e2fsck/util.c:765
+#: e2fsck/util.c:792
 msgid ""
 "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
 "running.\n"
 msgstr ""
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 #, fuzzy
 msgid "done                                                 \n"
 msgstr "fatto                           \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, fuzzy, c-format
 msgid ""
-"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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"
@@ -3823,91 +3952,91 @@ msgstr ""
 "modello_di_prova [...]]]\n"
 " device [blocco_finale [blocco_iniziale]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr ""
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Controllo con un modello casuale: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Controllo con modello 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "durante la ricerca"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Valore strano (%ld) nella do_read\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "durante la ext2fs_sync_device"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "iniziando a scorrere la lista dei blocchi difettosi"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "allocando i buffer"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Controllo dei blocchi da %lu a %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Ricerca dei blocchi non validi in modalità sola lettura\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Ricerca dei blocchi non validi (test a sola lettura): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr ""
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Ricerca dei blocchi non validi in modalità lettura-scrittura\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Dal blocco %lu al blocco %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Lettura e confronto: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
 "Ricerca dei blocchi non validi in modalità lettura-scrittura non "
 "distruttiva\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr ""
 "Ricerca dei blocchi non validi (test in moalità lettura-scrittura non "
 "distruttiva)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3915,60 +4044,60 @@ msgstr ""
 "\n"
 "Rilevato interrupt, pulizia in corso\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "durante la scrittura dei dati del test, blocco %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:131
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s è montato: "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 #, fuzzy
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "forzato comunque badblocks. Speriamo che /etc/mtab si errato.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "non è sicuro eseguire badblocks!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:142
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr ""
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 #, fuzzy
 msgid "badblocks forced anyway.\n"
 msgstr "forzato comunque badblocks. Speriamo che /etc/mtab si errato.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, fuzzy, c-format
 msgid "invalid %s - %s"
 msgstr "intervallo non valido - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr ""
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "impossibile allocare memoria per il modello di prova - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr ""
 "E' possibile specificare un solo modello di prova in modalità sola lettura"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Modello di prova casuale non consentito in modalità sola lettura"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3976,45 +4105,45 @@ msgstr ""
 "Impossibile determinare la dimensione del device:\n"
 "specificarla manualmente\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "tentando di determinare la dimensione del device"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 #, fuzzy
 msgid "last block"
 msgstr "Rilocazione dei blocchi"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 #, fuzzy
 msgid "first block"
 msgstr "Primo blocco dati=%u\n"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr ""
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr ""
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 #, fuzzy
 msgid "while creating in-memory bad blocks list"
 msgstr "creando la lista dei blocchi non validi in memoria"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr ""
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 #, fuzzy
 msgid "while adding to in-memory bad block list"
 msgstr "aggiungendo un elemento alla lista dei blocchi difettosi in memoria"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, fuzzy, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Passo completato. %u blocchi non validi trovati.\n"
@@ -4086,159 +4215,159 @@ msgstr "= è incompatibile con + e -\n"
 msgid "Must use '-v', =, - or +\n"
 msgstr "Si deve usare '-v', =, - o +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:79 misc/create_inode.c:118
 #, fuzzy, c-format
 msgid "while reading inode %u"
 msgstr "leggendo l'inode %ld in %s"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:89 misc/create_inode.c:287 misc/create_inode.c:352
+#: misc/create_inode.c:390
 #, fuzzy
 msgid "while expanding directory"
 msgstr "espandendo /lost+found"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:96
 #, fuzzy, c-format
 msgid "while linking \"%s\""
 msgstr "avviando la scansione degli inode"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:104 misc/create_inode.c:131 misc/create_inode.c:321
 #, fuzzy, c-format
 msgid "while writing inode %u"
 msgstr "scrivendo l'inode %ld in %s"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:151 misc/create_inode.c:175
 #, fuzzy, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "tentando di fare lo stat di %s"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:162
 #, fuzzy, c-format
 msgid "while opening inode %u"
 msgstr "nell'avviare l'analisi degli inode"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:168 misc/create_inode.c:195 misc/create_inode.c:975
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 #, fuzzy
 msgid "while allocating memory"
 msgstr "allocando i buffer"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:188 misc/create_inode.c:204
 #, fuzzy, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "leggendo i flag di %s"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:213
 #, fuzzy, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "scrivendo l'inode %ld in %s"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:223
 #, fuzzy, c-format
 msgid "while closing inode %u"
 msgstr "durante la scansione dell'inode"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:274
 #, fuzzy, c-format
 msgid "while allocating inode \"%s\""
 msgstr "allocando i buffer"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:293
 #, fuzzy, c-format
 msgid "while creating inode \"%s\""
 msgstr "leggendo l'inode %ld in %s"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:359
 #, fuzzy, c-format
 msgid "while creating symlink \"%s\""
 msgstr "leggendo i flag di %s"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:377 misc/create_inode.c:896
 #, fuzzy, c-format
 msgid "while looking up \"%s\""
 msgstr "cercando /lost+found"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:397
 #, fuzzy, c-format
 msgid "while creating directory \"%s\""
 msgstr "creando la directory root"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:625
 #, fuzzy, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "avviando la scansione degli inode"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:739
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:747
 #, fuzzy, c-format
 msgid "while opening directory \"%s\""
 msgstr "avviando la scansione degli inode"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:757
 #, fuzzy, c-format
 msgid "while lstat \"%s\""
 msgstr "tentando di fare lo stat di %s"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:808
 #, fuzzy, c-format
 msgid "while creating special file \"%s\""
 msgstr "leggendo l'inode %ld in %s"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:817
 #, fuzzy
 msgid "malloc failed"
 msgstr "Allocazione di memoria non riuscita"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:825
 #, fuzzy, c-format
 msgid "while trying to read link \"%s\""
 msgstr "provando a ridimensionare %s"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:832
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr ""
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:843
 #, fuzzy, c-format
 msgid "while writing symlink\"%s\""
 msgstr "scrivendo l'inode %ld in %s"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:854
 #, fuzzy, c-format
 msgid "while writing file \"%s\""
 msgstr "scrivendo l'inode %ld in %s"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:867
 #, fuzzy, c-format
 msgid "while making dir \"%s\""
 msgstr "avviando la scansione degli inode"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:885
 #, fuzzy
 msgid "while changing directory"
 msgstr "lettura blocco directory"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:891
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:904
 #, fuzzy, c-format
 msgid "while setting inode for \"%s\""
 msgstr "impostando la versione a %s"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:911
 #, fuzzy, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "impostando i flag di %s"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:937
 #, fuzzy
 msgid "while saving inode data"
 msgstr "iniziando la scansione degli inode"
@@ -4246,7 +4375,7 @@ msgstr "iniziando la scansione degli inode"
 #: misc/dumpe2fs.c:56
 #, fuzzy, c-format
 msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+"Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
 msgstr "Uso: %s [-bfhixV] [-ob superblocco] [-oB dim_blocco] device\n"
 
 #: misc/dumpe2fs.c:159
@@ -4364,112 +4493,59 @@ msgstr "stampando la lista dei blocchi difettosi"
 msgid "Bad blocks: %u"
 msgstr "Blocchi non validi: %d"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:367
 msgid "while reading journal inode"
 msgstr "leggendo l'inode del journal"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 #, fuzzy
 msgid "while opening journal inode"
 msgstr "leggendo l'inode del journal"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 #, fuzzy
 msgid "while reading journal super block"
 msgstr "leggendo il superblocco del journal"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 #, fuzzy
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Superblocco del journal non trovato!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr ""
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr ""
-
-#: misc/dumpe2fs.c:430
-#, fuzzy, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"\n"
-"Dimensione dei blocchi del journal:   %d\n"
-"Dimensione del journal:               %d\n"
-"Primo blocco del journal:             %d\n"
-"Sequenza del journal:                 ox%08x\n"
-"Inizio del journal:                   %d\n"
-"Numero di utenti del journal:         %d\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "leggendo il superblocco del journal"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Impossibile trovare i magic numbers del superblocco del journal"
 
-#: misc/dumpe2fs.c:501
-#, fuzzy, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Dimensione dei blocchi del journal:   %d\n"
-"Dimensione del journal:               %d\n"
-"Primo blocco del journal:             %d\n"
-"Sequenza del journal:                 ox%08x\n"
-"Inizio del journal:                   %d\n"
-"Numero di utenti del journal:         %d\n"
+#: misc/dumpe2fs.c:468
+#, fuzzy
+msgid "failed to alloc MMP buffer\n"
+msgstr "allocando i buffer"
 
-#: misc/dumpe2fs.c:514
-#, c-format
-msgid "Journal users:            %s\n"
-msgstr ""
+#: misc/dumpe2fs.c:479
+#, fuzzy, c-format
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "Controllo dei blocchi da %lu a %lu\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:798 misc/tune2fs.c:2073
 #, fuzzy
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Impossibile allocare memoria per fare il parsing delle opzioni raid!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, fuzzy, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, fuzzy, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -4492,239 +4568,232 @@ msgstr ""
 "\tstride=lunghezza stride in blocchi>\n"
 "\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1845
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tUsando %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1590 misc/tune2fs.c:2949
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Impossibile trovare un valido super-blocco per il file system.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:730
-#, c-format
+#: misc/dumpe2fs.c:747
+#, fuzzy, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "riprovando a leggere le mappe di bit per %s"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
-"\n"
-"%s: %s: errore leggendo le mappe di bit: %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, fuzzy, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] device image-file\n"
 msgstr "Uso: %s [-r] dispositivo file_immagine\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:109
 #, fuzzy, c-format
 msgid "       %s -I device image-file\n"
 msgstr "Uso: %s [-r] dispositivo file_immagine\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:110
 #, c-format
 msgid ""
 "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
 "[ dest_fs ]\n"
 msgstr ""
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:175 misc/e2image.c:580 misc/e2image.c:586 misc/e2image.c:1185
 #, fuzzy
 msgid "while allocating buffer"
 msgstr "allocando i buffer"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:180
 #, fuzzy, c-format
 msgid "Writing block %llu\n"
 msgstr "Controllo dei blocchi da %lu a %lu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:194
 #, fuzzy, c-format
 msgid "error writing block %llu"
 msgstr "Errore nello scrivere il blocco %lu (%s).  "
 
-#: misc/e2image.c:196
+#: misc/e2image.c:197
 msgid "error in generic_write()"
 msgstr ""
 
-#: misc/e2image.c:213
+#: misc/e2image.c:214
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr ""
 
-#: misc/e2image.c:218
+#: misc/e2image.c:219
 msgid "Couldn't allocate header buffer\n"
 msgstr "Impossibile allocare il buffer d'intestazione\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:247
 msgid "while writing superblock"
 msgstr "scrivendo il superblocco"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:256
 msgid "while writing inode table"
 msgstr "scrivendo la tavola degli inode"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:264
 msgid "while writing block bitmap"
 msgstr "scrivendo la mappa dei bit del blocco"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:272
 msgid "while writing inode bitmap"
 msgstr "scrivendo la mappa dei bit dell'inode"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:506
 #, fuzzy, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Blocco directory %u (#%d) vuoto nell'inode %u\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:518
 #, fuzzy, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Blocco directory %u (#%d) vuoto nell'inode %u\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:559
 #, fuzzy, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%u inode, %u blocchi\n"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:590 misc/e2image.c:630
 msgid "Copying "
 msgstr ""
 
-#: misc/e2image.c:626
+#: misc/e2image.c:627
 msgid ""
 "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr ""
 
-#: misc/e2image.c:652
+#: misc/e2image.c:653
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr ""
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:665 misc/e2image.c:1195
 #, fuzzy, c-format
 msgid "error reading block %llu"
 msgstr "Errore nel leggere il blocco %lu (%s).  "
 
-#: misc/e2image.c:718
+#: misc/e2image.c:719
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr ""
 
-#: misc/e2image.c:722
+#: misc/e2image.c:723
 #, c-format
 msgid "at %.2f MB/s"
 msgstr ""
 
-#: misc/e2image.c:758
+#: misc/e2image.c:759
 #, fuzzy
 msgid "while allocating l1 table"
 msgstr "allocando i buffer"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:804
 #, fuzzy
 msgid "while allocating l2 cache"
 msgstr "allocando i buffer"
 
-#: misc/e2image.c:826
+#: misc/e2image.c:827
 msgid ""
 "Warning: There are still tables in the cache while putting the cache, data "
 "will be lost so the image may not be valid.\n"
 msgstr ""
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1152
 #, fuzzy
 msgid "while allocating ext2_qcow2_image"
 msgstr "chiamando ext2fs_block_iterate"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1159
 #, fuzzy
 msgid "while initializing ext2_qcow2_image"
 msgstr "chiamando ext2fs_block_iterate"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1218 misc/e2image.c:1236
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr ""
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1276
 #, fuzzy
 msgid "while allocating block bitmap"
 msgstr "scrivendo la mappa dei bit del blocco"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1285
 #, fuzzy
 msgid "while allocating scramble block bitmap"
 msgstr "scrivendo la mappa dei bit del blocco"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1292
 #, fuzzy
 msgid "Scanning inodes...\n"
 msgstr "Scansione della tavola degli inode"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1304
 #, fuzzy
 msgid "Can't allocate block buffer"
 msgstr "Impossibile allocare il buffer blocco (dimensione=%d)\n"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1343 misc/e2image.c:1357
 #, fuzzy, c-format
 msgid "while iterating over inode %u"
 msgstr "nel recuperare l'inode successivo"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1389
 msgid "Raw and qcow2 images cannot be installed"
 msgstr ""
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1411
 #, fuzzy
 msgid "error reading bitmaps"
 msgstr "leggendo le mappe dei bit"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1423
 #, fuzzy
 msgid "while opening device file"
 msgstr "nell'avviare l'analisi degli inode"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1434
 #, fuzzy
 msgid "while restoring the image table"
 msgstr "scrivendo la tavola degli inode"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1531
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr ""
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1537
 msgid "Offsets are only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1542
 msgid "Move mode is only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1547
 msgid "Move mode requires all data mode."
 msgstr ""
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1557
 #, fuzzy
 msgid "checking if mounted"
 msgstr " (controllo tra %ld mount)"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1564
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4732,50 +4801,55 @@ msgid ""
 "Use -f option if you really want to do that.\n"
 msgstr ""
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1618
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr ""
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1624
 msgid "Can not stat output\n"
 msgstr ""
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1634
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr ""
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1637
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr ""
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1640
+#, fuzzy, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Il @S del @j ext3 è corrotto.\n"
+
+#: misc/e2image.c:1644
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr ""
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1654
 #, fuzzy
 msgid "The -c option only supported in raw mode\n"
 msgstr "L'opzione -t non è supportata da questa versione di e2fsck.\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1659
 #, fuzzy
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "L'opzione -t non è supportata da questa versione di e2fsck.\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1666
 #, fuzzy
 msgid "while allocating check_buf"
 msgstr "allocando i buffer"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1672
 #, fuzzy
 msgid "The -p option only supported in raw mode\n"
 msgstr "L'opzione -t non è supportata da questa versione di e2fsck.\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1682
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr ""
@@ -4805,7 +4879,7 @@ msgstr "e2label: errore durante la lettura del superblocco\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: non è un fil esystem ext2\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3152
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Attenzione: troncamento dell'etichetta, troppo lunga.\n"
@@ -4820,167 +4894,169 @@ msgstr "e2label: impossibile spostarsi nuovamente sul superblocco\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: errore durante la scrittura del superblocco\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1733
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Uso: e2label device [nuova_etichetta]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+msgid ""
+"Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> "
+"<filesystem>\n"
 msgstr ""
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr ""
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 #, fuzzy
 msgid "while reading filesystem superblock."
 msgstr "leggendo il superblocco del journal"
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 #, fuzzy
 msgid "while fetching superblock"
 msgstr "scrivendo il superblocco"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, fuzzy, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "Il checksum del super-blocco non corrisponde al super-blocco"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, fuzzy, c-format
 msgid "illegal offset - %s"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr ""
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, fuzzy, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "nell'avviare l'analisi degli inode"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 #, fuzzy
 msgid "while reading undo file"
 msgstr "creando l'inode root"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, fuzzy, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: troppi device\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, fuzzy, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "Il checksum del super-blocco non corrisponde al super-blocco"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, fuzzy, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "Extent intestazione danneggiato"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr ""
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr ""
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, fuzzy, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr ""
 "Il @S del @j ext3 ha impostato il flag di una caratteristica non "
 "compatibile.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, fuzzy, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "determinando se %s è montato."
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr ""
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, fuzzy, c-format
 msgid "while opening `%s'"
 msgstr "avviando la scansione degli inode"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr ""
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 #, fuzzy
 msgid "while reading keys"
 msgstr "leggendo le mappe dei bit"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr ""
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr ""
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, fuzzy, c-format
 msgid "%s: block %llu is too long."
 msgstr "Dal blocco %lu al blocco %lu\n"
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, fuzzy, c-format
 msgid "while fetching block %llu."
 msgstr "Controllo dei blocchi da %lu a %lu\n"
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr ""
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, fuzzy, c-format
 msgid "while writing block %llu."
 msgstr "Errore nello scrivere il blocco %lu (%s).  "
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr ""
@@ -5059,37 +5135,37 @@ msgstr ""
 "\tessere sistemato al più presto.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: non trovato\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: aspetta: Non ci sono processi figli?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Attenzione... %s per il device %s è uscito con il segnale %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: lo stato è %x, non dovrebbe avvenire mai.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Terminato con %s (stato di uscita %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Errore %d eseguendo fsck. %s per %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5098,95 +5174,95 @@ msgstr ""
 "essere preceduti\n"
 "da \"no\" o \"!\".\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Impossibile allocare memoria per i tipi di file system\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
 "number\n"
 msgstr ""
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: impossibile controllare %s: fsck.%s non trovato\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Controllo di tutti i file system.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--attesa-- (passo %d)\n"
 
-#: misc/fsck.c:1078
+#: misc/fsck.c:1085
 #, fuzzy
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr "Uso: fsck [-ACNPRTV] [-t tipofs] [opzioni-fs] [filesys ...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: troppi device\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: troppi parametri\n"
 
-#: misc/fuse2fs.c:3745
+#: misc/fuse2fs.c:3739
 msgid "Mounting read-only.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3769
+#: misc/fuse2fs.c:3763
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
-#, c-format
+#: misc/fuse2fs.c:3775 misc/fuse2fs.c:3789
+#, fuzzy, c-format
 msgid "%s: %s.\n"
-msgstr ""
+msgstr "%s è %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3776 misc/fuse2fs.c:3791 misc/tune2fs.c:3049
 #, fuzzy, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr ""
 "Eseguire prima 'e2fsck -f %s'.\n"
 "\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3798
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3806
 #, fuzzy, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr ""
 "Impostazione di data ed ora dell'ultimo controllo del file system a %s\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3821
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3825
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3830
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3834
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3838
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr ""
 
@@ -5210,7 +5286,7 @@ msgstr "Durante la lettura della versione di %s"
 msgid "While reading version on %s"
 msgstr "Durante la lettura della versione di %s"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5230,38 +5306,38 @@ msgstr ""
 "\t[-L etichetta-volume] [-M ultima-dir-montata] [-O caratteristica[,...]]\n"
 "\t[-r revisione-fs] [-R opz_raid] [-qvSV] device [numero-blocchi]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Esecuzione del comando: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, fuzzy, c-format
 msgid "while trying to run '%s'"
 msgstr "provando a caricare '%s'"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "analizzando una lista di blocchi non validi dal programma"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
 "Blocco %d non valido nel superblocco primario/area del descrittore di "
 "gruppo.\n"
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "I blocchi da %u a %u devono essere validi per costruire un file system.\n"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Annullamento....\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, fuzzy, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5272,15 +5348,20 @@ msgstr ""
 "\tcontengono blocchi non validi.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "contrassegnando i blocchi non validi come utilizzati"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+#, fuzzy
+msgid "while writing reserved inodes"
+msgstr "scrivendo l'inode del journal"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Scrittura delle tavole degli inode: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -5290,76 +5371,76 @@ msgstr ""
 "Impossibile scrivere %d blocchi nella tavola degli inode iniziando da %d: "
 "%s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2726 misc/mke2fs.c:3131
 msgid "done                            \n"
 msgstr "fatto                           \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "creando la directory root"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "creando l'inode root"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "impostando i permessi dell'inode root"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "creando /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "cercando /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "espandendo /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "impostando l'inode del blocco difettoso"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Fine memoria cancellando i settori %d-%d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Attenzione: impossibile leggere il blocco 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Attenzione: impossibile cancellare il settore %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "inizializzando il superblocco del journal"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Azzeramento del device di journaling: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, fuzzy, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "azzerando il device di journaling (blocco %u, numero %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "scrivendo il superblocco del journal"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "Creazione del file system con %llu %dk blocchi e %u inode\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, fuzzy, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5368,154 +5449,159 @@ msgstr ""
 "attenzione: %d blocchi inutilizzati.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Etichetta del file system=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, fuzzy, c-format
 msgid "OS type: %s\n"
 msgstr "Tipo SO: "
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Dimensione blocco=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, fuzzy, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Dimensione blocco=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Dimensione frammento=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr ""
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, fuzzy, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u inode, %u blocchi\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, fuzzy, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u blocchi (%2.2f%%) riservati per l'utente root\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Primo blocco dati=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr ""
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Blocchi massimi nel file system=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u gruppi di blocchi\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, fuzzy, c-format
 msgid "%u block group\n"
 msgstr "%u gruppo di blocchi\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, fuzzy, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u blocchi per gruppo, %u frammenti per gruppo\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blocchi per gruppo, %u frammenti per gruppo\n"
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inode per gruppo\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "Etichetta del file system=%s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Backup del superblocco salvati nei blocchi: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:820
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr ""
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:826
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr ""
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:839
 #, fuzzy, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:853
+#, fuzzy, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Parametro di stride non valido.\n"
+
+#: misc/mke2fs.c:865
 #, fuzzy, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:879 misc/tune2fs.c:2101
 #, fuzzy, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "modello di prova non valido: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:896
 #, fuzzy, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:918
 #, fuzzy, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:933
 #, fuzzy, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:956
 #, fuzzy, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:963
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:987
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1013 misc/mke2fs.c:1022
 #, fuzzy, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Insieme di opzioni di mount non valido: %s\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1065
 #, c-format
 msgid ""
 "\n"
@@ -5542,7 +5628,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1090
 #, c-format
 msgid ""
 "\n"
@@ -5550,42 +5636,42 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1135
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1148 misc/tune2fs.c:1120
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Set di opzioni del file system non valido: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1160 misc/tune2fs.c:411
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Insieme di opzioni di mount non valido: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1296
 #, c-format
 msgid ""
 "\n"
 "Your mke2fs.conf file does not define the %s filesystem type.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1300
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1304
 #, fuzzy
 msgid "Aborting...\n"
 msgstr "Annullamento....\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1345
 #, c-format
 msgid ""
 "\n"
@@ -5593,157 +5679,157 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1527
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Impossibile allocare memoria per i tipi di file system\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1564
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1597
 #, fuzzy, c-format
 msgid "invalid block size - %s"
 msgstr "dimensione del blocco difettoso - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1601
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
 "Attenzione: la dimensione di blocco %d non è utilizzabile su molti sistemi.\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1617
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "dimensione file system non valida - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1630
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr ""
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1644 misc/tune2fs.c:1830
 #, fuzzy, c-format
 msgid "bad error behavior - %s"
 msgstr "comportamento relativo ad un errore non valido - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1656
 msgid "Illegal number for blocks per group"
 msgstr "Numero di blocchi per gruppo non valido"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1661
 msgid "blocks per group must be multiple of 8"
 msgstr "i blocchi per gruppo devono essere multipli di 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1669
 #, fuzzy
 msgid "Illegal number for flex_bg size"
 msgstr "Numero di blocchi per gruppo non valido"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1675
 msgid "flex_bg size must be a power of 2"
 msgstr ""
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1680
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr ""
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1690
 #, fuzzy, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "tasso di inode non valido %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1700
 #, fuzzy, c-format
 msgid "invalid inode size - %s"
 msgstr "dimensione inode non valida - %s"
 
-#: misc/mke2fs.c:1684
+#: misc/mke2fs.c:1713
 msgid ""
 "Warning: -K option is deprecated and should not be used anymore. Use '-E "
 "nodiscard' extended option instead!\n"
 msgstr ""
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1724
 msgid "in malloc for bad_blocks_filename"
 msgstr "nella malloc per bad_blocks_filename"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1733
 #, fuzzy, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr "Attenzione: troncamento dell'etichetta, troppo lunga.\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1742
 #, fuzzy, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "percentuale di blocchi riservati non valida - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1757
 #, fuzzy, c-format
 msgid "bad num inodes - %s"
 msgstr "dimensione inode non valida - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1770
 #, fuzzy
 msgid "while allocating fs_feature string"
 msgstr "allocando i buffer"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1787
 #, fuzzy, c-format
 msgid "bad revision level - %s"
 msgstr "versione non valida - %s\n"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1792
 #, fuzzy, c-format
 msgid "while trying to create revision %d"
 msgstr ""
 "\n"
 "\tcercando di creare il journal"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1806
 #, fuzzy
 msgid "The -t option may only be used once"
 msgstr "-o può essere specificata solo una volta"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1814
 #, fuzzy
 msgid "The -T option may only be used once"
 msgstr "-o può essere specificata solo una volta"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1870 misc/mke2fs.c:3215
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "durante l'apertura del dispositivo di journaling %s\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1876
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 "Dimensione dei blocchi del device di journaling (%d) minore della dim minima "
 "dei blocchi %d\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1882
 #, fuzzy, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Aggiunta del journal al device %s: "
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1893
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr ""
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1923
 msgid "filesystem"
 msgstr "file system"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1941 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "tentando di determinare la dimensione del file system"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1947
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5751,7 +5837,7 @@ msgstr ""
 "Impossibile determinare la dimensione del device: bisogna\n"
 "specificare la dimensione del file system\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1954
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5764,120 +5850,125 @@ msgstr ""
 "\tdi fdisk, poiché una partizione modificata era occupata. Potrebbe essere\n"
 "\tnecessario riavviare per rileggere la tabella delle partizioni.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:1971
 msgid "Filesystem larger than apparent device size."
 msgstr "Il file system è più grande della dimensione apparente del device."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:1991
 msgid "Failed to parse fs types list\n"
 msgstr ""
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2040
 #, fuzzy
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "Il kernel Hurd non supporta la caratteristica filetype.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2045
 #, fuzzy
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "Il kernel Hurd non supporta la caratteristica filetype.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2050
 #, fuzzy
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "Il kernel Hurd non supporta la caratteristica filetype.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2055
+#, fuzzy
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "Il kernel Hurd non supporta la caratteristica filetype.\n"
+
+#: misc/mke2fs.c:2065
 msgid "while trying to determine hardware sector size"
 msgstr "provando a determinare la dimensione del settore hardware"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2071
 #, fuzzy
 msgid "while trying to determine physical sector size"
 msgstr "provando a determinare la dimensione del settore hardware"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2103
 #, fuzzy
 msgid "while setting blocksize; too small for device\n"
 msgstr "leggendo l'inode dei blocchi non validi"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2132
 #, 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:2098
+#: misc/mke2fs.c:2144
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2166
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr ""
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2173
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2181
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2191
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Journal non supportati con il numero di revisione 0 del file system\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2204
 #, fuzzy, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "percentuale di blocchi riservati non valida - %s"
 
-#: misc/mke2fs.c:2175
+#: misc/mke2fs.c:2221
 msgid ""
 "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
 "rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2241
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2247
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr ""
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2267
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2270
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2272
 #, c-format
 msgid ""
 "This may result in very poor performance, (re)-partitioning suggested.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2293
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "blocchi di %d byte troppo grandi per il sistema (max %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2297
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
@@ -5885,14 +5976,14 @@ msgstr ""
 "Attenzione: blocchi di %d bytes troppo grandi per il sistema (max %d), "
 "continuo comunque\n"
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2305
 #, c-format
 msgid ""
 "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
 "and journal checksum features.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2360
 #, c-format
 msgid ""
 "\n"
@@ -5902,17 +5993,22 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2375
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr ""
+
+#: misc/mke2fs.c:2397
 msgid "Can't support bigalloc feature without extents feature"
 msgstr ""
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2404
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2412
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5920,44 +6016,39 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2424
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2433
 msgid "blocks per group count out of range"
 msgstr "conteggio dei blocchi per gruppo fuori dall'intervallo"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2455
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2467
 #, fuzzy, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "dimensione dell'inode non valida: %d (min %d/max %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2482
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr ""
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2497
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr ""
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2504
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr ""
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2518
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5965,101 +6056,107 @@ msgid ""
 "\tor lower inode count (-N).\n"
 msgstr ""
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2705
 msgid "Discarding device blocks: "
 msgstr ""
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2721
 msgid "failed - "
 msgstr ""
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2780
 #, fuzzy
 msgid "while initializing quota context"
 msgstr "chiamando ext2fs_block_iterate"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2787
 #, fuzzy
 msgid "while writing quota inodes"
 msgstr "scrivendo l'inode del journal"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2812
 #, fuzzy, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "comportamento relativo ad un errore non valido - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2888
+#, fuzzy
+msgid "in malloc for android_sparse_params"
+msgstr "nella malloc per bad_blocks_filename"
+
+#: misc/mke2fs.c:2902
 #, fuzzy
 msgid "while setting up superblock"
 msgstr "impostando il superblocco"
 
-#: misc/mke2fs.c:2849
+#: misc/mke2fs.c:2918
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Pass -O extents to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2856
+#: misc/mke2fs.c:2925
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr ""
+#: misc/mke2fs.c:2933
+#, fuzzy
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "Il kernel Hurd non supporta la caratteristica filetype.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:2957
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr ""
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3056
 #, c-format
 msgid "unknown os - %s"
 msgstr "SO sconosciuto - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3119
 #, fuzzy
 msgid "Allocating group tables: "
 msgstr "Scrittura delle tavole degli inode: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3127
 msgid "while trying to allocate filesystem tables"
 msgstr "tentando di allocare le tabelle del file system"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3136
 #, fuzzy
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
 msgstr "scrivendo la mappa dei bit del blocco"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3142
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr ""
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3183
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "nell'azzerare il blocco %llu alla fine del file system"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3196
 #, fuzzy
 msgid "while reserving blocks for online resize"
 msgstr "leggendo l'inode dei blocchi non validi"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3208 misc/tune2fs.c:1538
 msgid "journal"
 msgstr "journal"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3220
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Aggiunta del journal al device %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3227
 #, c-format
 msgid ""
 "\n"
@@ -6068,21 +6165,21 @@ msgstr ""
 "\n"
 "\tcercando di agigungere il journal al device %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3232 misc/mke2fs.c:3261 misc/mke2fs.c:3299
+#: misc/mk_hugefiles.c:598 misc/tune2fs.c:1567 misc/tune2fs.c:1586
 msgid "done\n"
 msgstr "fatto\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3238
 msgid "Skipping journal creation in super-only mode\n"
 msgstr ""
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3248
 #, fuzzy, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Creazione del journal (%d blocchi): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3257
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6090,42 +6187,38 @@ msgstr ""
 "\n"
 "\tcercando di creare il journal"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3269 misc/tune2fs.c:1185
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3274
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3290
 msgid "Copying files into the device: "
 msgstr ""
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3296
 #, fuzzy
 msgid "while populating file system"
 msgstr "allocando i buffer"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3303
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 "Scrittura delle informazioni dei super-blocchi e dell'accounting del file "
 "system: "
 
-#: misc/mke2fs.c:3230
+#: misc/mke2fs.c:3310
 #, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Attenzione, problemi durante la scrittura dei superblocchi."
+msgid "while writing out and closing file system"
+msgstr "nell'azzerare il blocco %llu alla fine del file system"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3313
 msgid ""
 "done\n"
 "\n"
@@ -6133,29 +6226,34 @@ msgstr ""
 "fatto\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
+#, fuzzy, c-format
+msgid "while zeroing block %llu for hugefile"
+msgstr "nell'azzerare il blocco %llu alla fine del file system"
+
+#: misc/mk_hugefiles.c:514
 #, c-format
 msgid ""
 "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:581
 msgid "Huge files will be zero'ed\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:582
 #, fuzzy, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "file regolare"
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:584
 #, fuzzy, c-format
 msgid "with %llu blocks each"
 msgstr ""
 "attenzione: %d blocchi inutilizzati.\n"
 "\n"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:593
 #, fuzzy, c-format
 msgid "while creating huge file %lu"
 msgstr "nel recuperare l'inode successivo"
@@ -6203,23 +6301,29 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr ""
 
 #: misc/tune2fs.c:119
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+
+#: misc/tune2fs.c:121
 #, fuzzy
 msgid "Please run e2fsck -f on the filesystem.\n"
 msgstr "Eseguire e2fsck sul file system.\n"
 
-#: misc/tune2fs.c:121
+#: misc/tune2fs.c:123
 #, fuzzy
 msgid "Please run e2fsck -fD on the filesystem.\n"
 msgstr "Eseguire e2fsck sul file system.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
@@ -6232,94 +6336,94 @@ msgstr ""
 "montata]\n"
 "\t[-O [^]caratteristica[,...]] [-T ultimo-controllo] [-U UUID] device\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Superblocco del journal non trovato!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "cercando di aprire il journal esterno"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2845
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s non è un dispositivo di journaling.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:297 misc/tune2fs.c:2856
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "UUID del file system non trovato sul dispositivo di journaling.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:321
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:330
 msgid "Journal removed\n"
 msgstr "Journal rimosso\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:374
 msgid "while reading bitmaps"
 msgstr "leggendo le mappe dei bit"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:382
 msgid "while clearing journal inode"
 msgstr "azzerando l'inode del journal"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:393
 msgid "while writing journal inode"
 msgstr "scrivendo l'inode del journal"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:429 misc/tune2fs.c:452 misc/tune2fs.c:465
 msgid "(and reboot afterwards!)\n"
 msgstr ""
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:480
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr ""
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:483
 #, fuzzy, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr ""
 "Eseguire prima 'e2fsck -f %s'.\n"
 "\n"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:487
 #, c-format
 msgid " -z \"%s\""
 msgstr ""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:489
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:491
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1087
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1123
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1129
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 "Impostazione di data ed ora dell'ultimo controllo del file system a %s\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1138
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6327,7 +6431,7 @@ msgstr ""
 "Il flag has_journal può essere azzerato quando il file system non\n"
 "è montato o è montato solo in lettura.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1146
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6335,14 +6439,14 @@ msgstr ""
 "Il flag needs_recovery è impostato. Eseguire e2fsck prima di azzerare\n"
 "il flag has_journal.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1164
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 "Impostazione di data ed ora dell'ultimo controllo del file system a %s\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1177
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6351,39 +6455,39 @@ msgstr ""
 "Il flag has_journal può essere azzerato quando il file system non\n"
 "è montato o è montato solo in lettura.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1195
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1204
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1212
 #, fuzzy
 msgid "Error while reading bitmaps\n"
 msgstr "leggendo le mappe dei bit"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1221
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr ""
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1226
 #, fuzzy
 msgid "while reading MMP block."
 msgstr "leggendo l'inode numero 1"
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1258
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1269
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6391,59 +6495,58 @@ msgstr ""
 "Il flag has_journal può essere azzerato quando il file system non\n"
 "è montato o è montato solo in lettura.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1280
 msgid "Enabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1282
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1175
+#: misc/tune2fs.c:1288
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Re-run with -O extent to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1182
+#: misc/tune2fs.c:1295
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Run resize2fs -b to "
 "rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1321
 msgid "Disabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1323
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1386
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1396
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1426
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1447
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1465
 #, fuzzy
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
@@ -6451,18 +6554,22 @@ msgid ""
 msgstr ""
 "Impostazione di data ed ora dell'ultimo controllo del file system a %s\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1483
 msgid ""
 "UUID has changed since enabling metadata_csum.  Filesystem must be "
 "unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1489
+msgid "Recalculating checksums could take some time."
+msgstr ""
+
+#: misc/tune2fs.c:1531
 msgid "The filesystem already has a journal.\n"
 msgstr "Il file system ha già un journal.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1551
 #, c-format
 msgid ""
 "\n"
@@ -6471,21 +6578,21 @@ msgstr ""
 "\n"
 "\ttentando di aprire il journal in %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1555
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Creando il journal per il device %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1563
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "aggiungendo un file system al journal in %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1569
 msgid "Creating journal inode: "
 msgstr "Creazione dell'inode del journal: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1583
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6493,27 +6600,32 @@ msgstr ""
 "\n"
 "\tcercando di creare il file di journal"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1621
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1634
 #, fuzzy
 msgid "while initializing quota context in support library"
 msgstr "inizializzando il superblocco del journal"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1649
 #, fuzzy, c-format
 msgid "while updating quota limits (%d)"
 msgstr "nell'aggiornare l'inode di un blocco danneggiato"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1657
 #, fuzzy, c-format
 msgid "while writing quota file (%d)"
-msgstr "scrivendo l'inode %ld in %s"
+msgstr "scrivendo la tavola degli inode"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1675
 #, fuzzy, c-format
 msgid "while removing quota file (%d)"
 msgstr "creando l'inode root"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1718
 msgid ""
 "\n"
 "Bad quota options specified.\n"
@@ -6527,65 +6639,65 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1776
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Impossibile comprendere il formato di data/ora: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1801 misc/tune2fs.c:1814
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "numero di mount non validi - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1857
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "gid/nome gruppo non valido - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1890
 #, c-format
 msgid "bad interval - %s"
 msgstr "intervallo non valido - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1919
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "percentuale di blocchi riservati non valida - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1934
 msgid "-o may only be specified once"
 msgstr "-o può essere specificata solo una volta"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1943
 msgid "-O may only be specified once"
 msgstr "-O può essere specificata solo una volta"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "numero di blocchi riservati non valido - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1989
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "uid/nome utente non valido - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:2006
 #, c-format
 msgid "bad inode size - %s"
 msgstr "dimensione inode non valida - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:2013
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr ""
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2110
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2115
 #, fuzzy, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
 msgid_plural ""
@@ -6593,27 +6705,27 @@ msgid_plural ""
 msgstr[0] "Impostazione del numero massimo di mount a %d\n"
 msgstr[1] "Impostazione del numero massimo di mount a %d\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2138
 #, fuzzy, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Insieme di opzioni di mount non valido: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2153
 #, fuzzy, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2168
 #, fuzzy, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2174
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2193
 #, fuzzy
 msgid ""
 "\n"
@@ -6626,6 +6738,7 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
 "\ttest_fs\n"
@@ -6641,117 +6754,139 @@ msgstr ""
 "\tstride=lunghezza stride in blocchi>\n"
 "\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2663
 #, fuzzy
 msgid "Failed to read inode bitmap\n"
 msgstr "leggendo le mappe dei bit"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2668
 #, fuzzy
 msgid "Failed to read block bitmap\n"
 msgstr "lettura delle mappe di bit inode e blocco"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2685 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "blocchi da spostare"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2688
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr ""
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2694
 msgid "Not enough space to increase inode size \n"
 msgstr ""
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2699
 #, fuzzy
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "leggendo l'inode dei blocchi non validi"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2731
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
 msgstr ""
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2936
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+
+#: misc/tune2fs.c:2943
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2955
 #, fuzzy
 msgid "Cannot modify a journal device.\n"
 msgstr "%s non è un dispositivo di journaling.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2968
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2975
 msgid "Shrinking inode size is not supported\n"
 msgstr ""
 "Impostazione di data ed ora dell'ultimo controllo del file system a %s\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2980
 #, fuzzy, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "dimensione dell'inode non valida: %d (min %d/max %d)"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2986
 msgid "Resizing inodes could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3034
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+
+#: misc/tune2fs.c:3045
+#, fuzzy, c-format
+msgid "Recovering journal.\n"
+msgstr "%s: ripristino del journal\n"
+
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Impostazione del numero massimo di mount a %d\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Impostazione del numero attuale di mount a %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3074
 #, fuzzy, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Impostazione del comportamento da errore a %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3079
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Impostazione del gid dei blocchi riservati a %lu\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3084
 #, fuzzy, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "il numero di blocchi riservati è troppo alto (%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3091
 #, fuzzy, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Impostazione dell'intervallo tra i controlli a %lu secondi\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3098
 #, fuzzy, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr ""
 "Impostazione della percentuale di blocchi riservati a %lu (%u blocchi)\n"
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3104
 #, fuzzy, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "il numero di blocchi riservati è troppo alto (%lu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3111
 #, fuzzy, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Impostazione del numero di blocchi riservati a %lu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3116
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6759,14 +6894,14 @@ msgstr ""
 "\n"
 "Il file system ha già dei super-blocchi sparsi.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3119
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3129
 #, c-format
 msgid ""
 "\n"
@@ -6774,120 +6909,104 @@ msgid ""
 msgstr ""
 
 # fuzzy
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3134
 #, fuzzy
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
 msgstr "impossibile impostarei i flag del superblocco a %s\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3142
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr ""
 "Impostazione di data e ora dell'ultimo controllo del file system a %s\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3148
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Impostazione dell'uid dei blocchi riservati a %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3180
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr ""
 
-#: misc/tune2fs.c:3024
+#: misc/tune2fs.c:3198
 msgid ""
 "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "Il flag has_journal può essere azzerato quando il file system non\n"
 "è montato o è montato solo in lettura.\n"
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3222
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "Il flag has_journal può essere azzerato quando il file system non\n"
 "è montato o è montato solo in lettura.\n"
 
-#: misc/tune2fs.c:3051
+#: misc/tune2fs.c:3225
 msgid ""
 "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
 "and re-run this command.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3060
+#: misc/tune2fs.c:3234
 msgid "Setting UUID on a checksummed filesystem could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3259
 msgid "Invalid UUID format\n"
 msgstr "Formato UUID non valido\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3275
 #, fuzzy
 msgid "Need to update journal superblock.\n"
 msgstr "lettura del superblocco del journal\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3301
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "Il flag has_journal può essere azzerato quando il file system non\n"
 "è montato o è montato solo in lettura.\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3308
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3326
 #, fuzzy, c-format
 msgid "Setting inode size %lu\n"
 msgstr "dimensione inode non valida - %s"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3330
 #, fuzzy
 msgid "Failed to change inode size\n"
 msgstr "iniziando la scansione degli inode"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3344
 #, fuzzy, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Impostazione del gid dei blocchi riservati a %lu\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3349
 #, fuzzy, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Impostazione del gid dei blocchi riservati a %lu\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3356
 #, fuzzy, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Impostazione del numero attuale di mount a %d\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, fuzzy, c-format
-msgid "Recovering journal.\n"
-msgstr "%s: ripristino del journal\n"
-
 #: misc/util.c:100
 msgid "<proceeding>\n"
 msgstr ""
 
 #: misc/util.c:104
 #, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
 msgstr "Procedere comunque? (s,n) "
 
 #: misc/util.c:108
@@ -7138,42 +7257,42 @@ msgstr ""
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"[-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
 "Uso: %s [-d flag_di_debug] [-f] [-F] [-p] device [nuova-dimensione]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Estensione della tavola degli inode"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Rilocazione dei blocchi"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Scansione della tavola degli inode"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Aggiornamento dei riferimenti degli inode"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Spostamento della tavola degli inode"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Passo sconosciuto?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Inizio del passo %d (max = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7181,17 +7300,17 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, fuzzy, c-format
 msgid "while opening %s"
 msgstr "avviando la scansione degli inode"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, fuzzy, c-format
 msgid "while getting stat information for %s"
 msgstr "impostando la versione a %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7200,33 +7319,33 @@ msgstr ""
 "Eseguire prima 'e2fsck -f %s'.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr ""
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, fuzzy, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr ""
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, fuzzy, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr ""
 "Dimensione dei blocchi del device di journaling (%d) minore della dim minima "
 "dei blocchi %d\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 #, fuzzy
 msgid "Invalid stride length"
 msgstr "Parametro di stride non valido.\n"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, fuzzy, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7237,33 +7356,33 @@ msgstr ""
 "E' stata richiesta una nuova dimensione di %d blocchi.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr ""
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
 msgid ""
 "Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
 "blocks.\n"
 msgstr ""
 
-#: resize/main.c:575
+#: resize/main.c:581
 #, fuzzy, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr ""
 "Il flag has_journal può essere azzerato quando il file system non\n"
 "è montato o è montato solo in lettura.\n"
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
 msgid ""
 "Please enable the extents feature with tune2fs before enabling the 64bit "
 "feature.\n"
 msgstr ""
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, fuzzy, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
@@ -7272,48 +7391,48 @@ msgstr ""
 "Il filesystem è già lungo %d blocchi. Nulla da fare!\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, fuzzy, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "Il file system ha già un journal.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, fuzzy, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "Il file system ha già un journal.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, fuzzy, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr ""
 "Impostazione di data e ora dell'ultimo controllo del file system a %s\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, fuzzy, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr ""
 "Impostazione di data e ora dell'ultimo controllo del file system a %s\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, fuzzy, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr ""
 "Il filesystem su %s è ora lungo %d blocchi.\n"
 "\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "provando a ridimensionare %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
 "after the aborted resize operation.\n"
 msgstr ""
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, fuzzy, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7322,7 +7441,7 @@ msgstr ""
 "Il filesystem su %s è ora lungo %d blocchi.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, fuzzy, c-format
 msgid "while trying to truncate %s"
 msgstr "tentando di fare lo stat di %s"
@@ -7391,12 +7510,12 @@ msgstr ""
 msgid "While trying to extend the last group"
 msgstr "cercando di aprire il journal esterno"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, fuzzy, c-format
 msgid "While trying to add group #%d"
 msgstr "durante l'apertura di %s"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
 msgid ""
 "Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
@@ -7405,36 +7524,36 @@ msgstr ""
 
 #: resize/resize2fs.c:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
+msgid "inodes (%llu) must be less than %u\n"
 msgstr ""
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "blocchi riservati"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "blocchi di meta-dati"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2475
 #, fuzzy
 msgid "new meta blocks"
 msgstr "blocchi di meta-dati"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2698
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2703
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2776
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:11
-msgid "EXT2FS Library version 1.43.4-WIP"
+msgid "EXT2FS Library version 1.44.4"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:12
@@ -8015,7 +8134,8 @@ msgid "MMP: device currently active"
 msgstr "MMP: device attivo"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
+#, fuzzy
+msgid "MMP: e2fsck being run"
 msgstr "MMP: fsck in esecuzione"
 
 #: lib/ext2fs/ext2_err.c:152
@@ -8073,7 +8193,8 @@ msgid "Unknown checksum algorithm"
 msgstr "Algoritmo di checksum sconosciuto"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
+#, fuzzy
+msgid "MMP block checksum does not match"
 msgstr "Il checksum del blocco MMP non corrisponde al blocco MMP"
 
 #: lib/ext2fs/ext2_err.c:166
@@ -8174,7 +8295,11 @@ msgstr "Il super-blocco ext2 è danneggiato"
 #: lib/ext2fs/ext2_err.c:188
 #, fuzzy
 msgid "Inode is corrupted"
-msgstr "Il filesystem ha una dimensione del blocco non attesa"
+msgstr "Il @S del @j ext3 è corrotto.\n"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8368,12 +8493,24 @@ msgstr "%s contiene un file system %s\n"
 msgid "%s contains `%s' data\n"
 msgstr "%s contiene un file system %s\n"
 
-#~ msgid "Please run e2fsck on the filesystem.\n"
-#~ msgstr "Eseguire e2fsck sul file system.\n"
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %s: errore leggendo le mappe di bit: %s\n"
 
 #, fuzzy
-#~ msgid "Invalid quotatype parameter: %s\n"
-#~ msgstr "Parametro di stride non valido.\n"
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Attenzione, problemi durante la scrittura dei superblocchi."
+
+#, fuzzy
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "i_dir_acl @F %Id @s zero.\n"
 
 #, fuzzy
 #~ msgid "@A @a @b %b.  "
@@ -8397,6 +8534,38 @@ msgstr "%s contiene un file system %s\n"
 #~ msgid ", unused inodes %u\n"
 #~ msgstr "mappa degli inode in utilizzo"
 
+#, fuzzy
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Dimensione dei blocchi del journal:   %d\n"
+#~ "Dimensione del journal:               %d\n"
+#~ "Primo blocco del journal:             %d\n"
+#~ "Sequenza del journal:                 ox%08x\n"
+#~ "Inizio del journal:                   %d\n"
+#~ "Numero di utenti del journal:         %d\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Dimensione dei blocchi del journal:   %d\n"
+#~ "Dimensione del journal:               %d\n"
+#~ "Primo blocco del journal:             %d\n"
+#~ "Sequenza del journal:                 ox%08x\n"
+#~ "Inizio del journal:                   %d\n"
+#~ "Numero di utenti del journal:         %d\n"
+
 #~ msgid "Failed to read the file system data \n"
 #~ msgstr "Lettura dei dati del file system non riuscita\n"
 
@@ -8405,6 +8574,10 @@ msgstr "%s contiene un file system %s\n"
 #~ msgstr "durante l'apertura di %s"
 
 #, fuzzy
+#~ msgid "Invalid quotatype parameter: %s\n"
+#~ msgstr "Parametro di stride non valido.\n"
+
+#, fuzzy
 #~ msgid "Couldn't allocate memory to parse quota options!\n"
 #~ msgstr ""
 #~ "Impossibile allocare memoria per fare il parsing delle opzioni raid!\n"
index e403a2b..e3ae66c 100644 (file)
Binary files a/po/ms.gmo and b/po/ms.gmo differ
index d2fe7a1..ef2a32e 100644 (file)
--- a/po/ms.po
+++ b/po/ms.po
@@ -1,7 +1,7 @@
 # e2fsprogs Bahasa Melayu (Malay) (ms).
-# Copyright (C) 2008, 2015 Theodore Tso (msgids)
+# Copyright (C) 2008, 2009, 2015, 2018, 2019, 2020, 2021 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
-# Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>, 2008, 2009, 2015.
+# Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>, 2008, 2009, 2015, 2018, 2019, 2020, 2021.
 #
 #. 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,
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -47,7 +54,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.42.12-pre2\n"
+"Project-Id-Version: e2fsprogs 1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2015-06-23 17:57+0800\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2021-01-01 16:12+0800\n"
 "Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>\n"
 "Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
 "Language: ms\n"
@@ -79,9 +86,9 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 1.8.1\n"
+"X-Generator: Poedit 2.4.2\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Blok buruk %u diluar julat; diabaikan.\n"
@@ -93,13 +100,14 @@ msgstr "ketika memeriksa kewarasan blok inode buruk"
 #: e2fsck/badblocks.c:58
 #, fuzzy
 msgid "while reading the bad blocks inode"
-msgstr "ketika memeriksa kewarasan blok inode buruk"
+msgstr "ketika membaca dalam senarai blok buruk dari fail"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, fuzzy, c-format
 msgid "while trying to open %s"
 msgstr "ketika cuba untuk membuka titiklekap %s"
@@ -109,7 +117,7 @@ msgstr "ketika cuba untuk membuka titiklekap %s"
 msgid "while trying popen '%s'"
 msgstr "ketika cuba untuk stat %s"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "ketika membaca dalam senarai blok buruk dari fail"
 
@@ -121,8 +129,11 @@ msgstr "ketika menetapkan inod blok buruk"
 #: e2fsck/badblocks.c:133
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
-msgstr ""
-"Amaran: blok tidak sah %u terdapat di dalam blok inode buruk. Dibersihkan.\n"
+msgstr "Amaran: blok tidak sah %u terdapat di dalam blok inode buruk. Dibersihkan.\n"
+
+#: e2fsck/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "ketika membebaskan fail dir_info tdb"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -137,7 +148,7 @@ msgstr "Ralat membaca blok %lu (%s) ketika %s.  "
 #: e2fsck/ehandler.c:66 e2fsck/ehandler.c:115
 #, fuzzy
 msgid "Ignore error"
-msgstr "Abai fail tetapan sistem"
+msgstr "Abai Semua"
 
 #: e2fsck/ehandler.c:67
 #, fuzzy
@@ -157,12 +168,12 @@ msgstr "Ralat membaca blok %lu (%s) ketika %s.  "
 #: e2fsck/emptydir.c:57
 #, fuzzy
 msgid "empty dirblocks"
-msgstr "kosong"
+msgstr "%%empty pada hukum bukan kosong"
 
 #: e2fsck/emptydir.c:62
 #, fuzzy
 msgid "empty dir map"
-msgstr "Peta terjemahan: sintaks tidak betul"
+msgstr "Tiada ruang bebas dalam peta takat"
 
 #: e2fsck/emptydir.c:98
 #, c-format
@@ -177,7 +188,7 @@ msgstr "Parameter saiz blok tidak sah: %s\n"
 #: e2fsck/extend.c:44
 #, fuzzy, c-format
 msgid "Illegal number of blocks!\n"
-msgstr "Nombor tidak sah untuk saiz flex_bg"
+msgstr "Tetapkan bilangan blok pada setiap tepian"
 
 #: e2fsck/extend.c:50
 #, c-format
@@ -187,12 +198,12 @@ msgstr ""
 #: e2fsck/extents.c:42
 #, fuzzy
 msgid "extent rebuild inode map"
-msgstr "fail kosong biasa"
+msgstr "Tiada ruang bebas dalam peta takat"
 
 #: e2fsck/flushb.c:35
 #, fuzzy, c-format
 msgid "Usage: %s disk\n"
-msgstr "Penggunaan: %s <fail transaksi> <sistemfail>\n"
+msgstr "%s\t\tPenggunaan Kekunci (%s):\n"
 
 #: e2fsck/flushb.c:64
 #, c-format
@@ -204,12 +215,12 @@ msgstr ""
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr ""
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, fuzzy, c-format
 msgid "while opening %s for flushing"
 msgstr "ketika membuka %s"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, fuzzy, c-format
 msgid "while trying to flush %s"
 msgstr "ketika cuba untuk melaksana '%s'"
@@ -219,12 +230,12 @@ msgstr "ketika cuba untuk melaksana '%s'"
 msgid "while trying to open '%s'"
 msgstr "ketika cuba untuk membuka titiklekap %s"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 #, fuzzy
 msgid "while opening inode scan"
 msgstr "ketika memulakan pengesanan inod"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 #, fuzzy
 msgid "while getting next inode"
 msgstr "ketika membaca inod root"
@@ -234,408 +245,431 @@ msgstr "ketika membaca inod root"
 msgid "%u inodes scanned.\n"
 msgstr ", %u inod tidak digunakan\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 #, fuzzy
 msgid "reading journal superblock\n"
 msgstr "ketika membaca superblok jurnal"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, fuzzy, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "Superblok jurnal tidak dijumpai!\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, fuzzy, c-format
 msgid "%s: journal too short\n"
-msgstr ""
-"\n"
-"Sistemfail terlalu kecil untuk jurnal\n"
+msgstr "%s: fail terlalu pendek untuk menjadi fail gmon\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, fuzzy, c-format
 msgid "%s: recovering journal\n"
 msgstr "ketika mendapatkan semula jurnal ext3 bagi %s"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr ""
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, fuzzy, c-format
 msgid "while trying to re-open %s"
 msgstr "ketika cuba untuk membuka titiklekap %s"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
+#, fuzzy
 msgid "aextended attribute"
-msgstr ""
+msgstr "\t\tSifat %s yang tidak diketahui:\n"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 #, fuzzy
 msgid "Aerror allocating"
 msgstr "ketika mengumpukkan penimbal"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr ""
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr ""
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr ""
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr ""
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr ""
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr ""
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr ""
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 #, fuzzy
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "Sedang Diguna"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr ""
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 #, fuzzy
 msgid "Ffor @i %i (%Q) is"
 msgstr "Symlink %Q (@i #%i) adalah @n.\n"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr ""
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 #, fuzzy
 msgid "hHTREE @d @i"
 msgstr "/@l adalah bukan sejenis @d (ino=%i)\n"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr ""
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr ""
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr ""
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 #, fuzzy
 msgid "llost+found"
-msgstr "Salinan @E dijumpai."
+msgstr "\"%s\" tidak dijumpai"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 #, fuzzy
 msgid "Lis a link"
-msgstr "pautan simbolik"
+msgstr "Pautan ke %s\n"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr ""
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr ""
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr ""
 
-#: e2fsck/message.c:135
-#, fuzzy
+#: e2fsck/message.c:138
 msgid "pproblem in"
-msgstr "Sedang Diguna"
+msgstr "pproblem dalam"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr ""
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 #, fuzzy
 msgid "rroot @i"
-msgstr "Ralat I/O"
+msgstr "@u @z @i %i.  "
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 #, fuzzy
 msgid "sshould be"
 msgstr "%s mestilah nombor"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr ""
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr ""
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr ""
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr ""
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 #, fuzzy
 msgid "zzero-length"
-msgstr "Panjang stride tidak sah"
+msgstr "panjang pita tidak sah"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 #, fuzzy
 msgid "<The NULL inode>"
 msgstr "aksara null tidak sah"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 #, fuzzy
 msgid "<The bad blocks inode>"
 msgstr "ketika memeriksa kewarasan blok inode buruk"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 #, fuzzy
 msgid "<The user quota inode>"
-msgstr "Nama pengguna tidak sah: %s"
+msgstr ""
+"\n"
+"  Jadual inode di"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 #, fuzzy
 msgid "<The group quota inode>"
-msgstr ", Penghurai kumpulan di"
+msgstr ""
+"\n"
+"  Jadual inode di"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 #, fuzzy
 msgid "<The boot loader inode>"
-msgstr ", Bitmap inode di"
+msgstr "tak dapat masa but"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 #, fuzzy
 msgid "<The undelete directory inode>"
 msgstr "direktori"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 #, fuzzy
 msgid "<The group descriptor inode>"
 msgstr " Penghurai kumpulan di"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 #, fuzzy
 msgid "<The journal inode>"
 msgstr "Mencipta inode jurnal:"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 #, fuzzy
 msgid "<Reserved inode 9>"
 msgstr "blok dikhaskan"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 #, fuzzy
 msgid "<Reserved inode 10>"
 msgstr "blok dikhaskan"
 
-#: e2fsck/message.c:333
-#, fuzzy
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "fail biasa"
 
-#: e2fsck/message.c:335
-#, fuzzy
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "direktori"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 #, fuzzy
 msgid "character device"
-msgstr "Mengosongkan peranti jurnal:"
+msgstr "aksara"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 #, fuzzy
 msgid "block device"
-msgstr "blok terakhir"
+msgstr "%s adalah bukan peranti khas.\n"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 #, fuzzy
 msgid "named pipe"
-msgstr "Tidak dapat menyalurkan"
+msgstr "fail dinamakan"
 
-#: e2fsck/message.c:343
-#, fuzzy
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "pautan simbolik"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
-#, fuzzy
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "soket"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr ""
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 #, fuzzy
 msgid "indirect block"
-msgstr "blok pertama"
+msgstr "<anak tidak terus>"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 #, fuzzy
 msgid "double indirect block"
-msgstr "  Bitmap block di"
+msgstr "berganda"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 #, fuzzy
 msgid "triple indirect block"
-msgstr "  Bitmap block di"
+msgstr "<anak tidak terus>"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 #, fuzzy
 msgid "translator block"
-msgstr "  Bitmap block di"
+msgstr "blok terakhir"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 #, fuzzy
 msgid "block #"
 msgstr "blok terakhir"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "pengguna"
+
+#: e2fsck/message.c:485
+#, fuzzy
+msgid "group"
+msgstr "tak dapat menukar ke kumpulan null"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr ""
+
+#: e2fsck/message.c:491
+#, fuzzy
+#| msgid "unknown os - %s"
+msgid "unknown quota type"
+msgstr "Jenis kandungan struktur PKCS tidak diketahui."
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr ""
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr ""
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr ""
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr ""
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr ""
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr ""
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 #, fuzzy
 msgid "reading directory block"
-msgstr "direktori"
+msgstr "membaca direktori %s"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 #, fuzzy
 msgid "in-use inode map"
-msgstr "Peta terjemahan: sintaks tidak betul"
+msgstr "Inode tidak menggunakan takat"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 #, fuzzy
 msgid "directory inode map"
-msgstr "direktori"
+msgstr "Tiada ruang bebas dalam peta takat"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 #, fuzzy
 msgid "regular file inode map"
-msgstr "fail kosong biasa"
+msgstr "Mencipta fail biasa %s\n"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 #, fuzzy
 msgid "in-use block map"
-msgstr "Peta terjemahan: sintaks tidak betul"
+msgstr "Tidak dapat memetakan nama \"%s\" ke menu\n"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1263
 #, fuzzy
+#| msgid "meta-data blocks"
 msgid "metadata block map"
-msgstr "blok meta-data"
+msgstr "Tidak dapat memetakan nama \"%s\" ke menu\n"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 #, fuzzy
 msgid "opening inode scan"
 msgstr "ketika melakukan pengesanan inod"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr ""
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 #, fuzzy
 msgid "Pass 1"
 msgstr "--menunggu-- (lalu %d)\n"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, fuzzy, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "ketika membaca inod jurnal"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 #, fuzzy
 msgid "bad inode map"
 msgstr "ketika menetapkan inod blok buruk"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 #, fuzzy
 msgid "inode in bad block map"
 msgstr "ketika menetapkan inod blok buruk"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 #, fuzzy
 msgid "imagic inode map"
-msgstr "Peta terjemahan: sintaks tidak betul"
+msgstr "Tidak dapat memetakan nama \"%s\" ke menu\n"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr ""
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr ""
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr ""
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 #, fuzzy
 msgid "block bitmap"
 msgstr "  Bitmap block di"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 #, fuzzy
 msgid "inode bitmap"
 msgstr ", Bitmap inode di"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 #, fuzzy
 msgid "inode table"
 msgstr "ketika menulis jadual inod"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 #, fuzzy
 msgid "Pass 2"
-msgstr "#2 socket() gagal."
+msgstr "--menunggu-- (lalu %d)\n"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 #, fuzzy
 msgid "Can not continue."
 msgstr ""
@@ -662,236 +696,251 @@ msgstr "Ulangan 3: Memeriksa sambungan @d\n"
 msgid "inode loop detection bitmap"
 msgstr ", Bitmap inode di"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 #, fuzzy
 msgid "Pass 4"
-msgstr "--menunggu-- (lalu %d)\n"
+msgstr "Katalaluan tidak diketahui?!?"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 #, fuzzy
 msgid "Pass 5"
-msgstr "--menunggu-- (lalu %d)\n"
+msgstr "Katalaluan tidak diketahui?!?"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr ""
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr ""
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 #, fuzzy
 msgid "(no prompt)"
-msgstr "Tiada Fail"
+msgstr "Auto simpan ketika keluar, jangan maklum"
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 #, fuzzy
 msgid "Fix"
 msgstr ""
 "Tidak dapat membaiki induk untuk @i %i: %m\n"
 "\n"
 
-#: e2fsck/problem.c:53
-#, fuzzy
+#: e2fsck/problem.c:54
 msgid "Clear"
 msgstr "Padam"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr ""
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
+#, fuzzy
 msgid "Allocate"
-msgstr ""
+msgstr "rmtd: tak dapat memperuntukkan ruang penimbal\n"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 #, fuzzy
 msgid "Expand"
 msgstr "Tidak dapat mengembang /@l: %m\n"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 #, fuzzy
 msgid "Connect to /lost+found"
 msgstr "ketika mencipta /lost+found"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 #, fuzzy
 msgid "Create"
-msgstr "Tidak dapat mencipta soket aliran"
+msgstr "tidak dapat mencipta paip"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr ""
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
+#, fuzzy
 msgid "Truncate"
 msgstr ""
+"  baris pemendekan   = %s\n"
+"  terjemah           = %s\n"
+"  pengakhir baris    = %s\n"
+"  pengekodan         = %s\n"
+"  tajuk dokumen      = %s\n"
+"  prolog             = %s\n"
+"  cetak bagaimanapun = %s\n"
+"  mewakilkan         = %s\n"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 #, fuzzy
 msgid "Clear inode"
-msgstr "saiz inod=%d\n"
+msgstr "Padam"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 #, fuzzy
 msgid "Abort"
-msgstr "Batal"
+msgstr ""
+" n [nama]   Beri nama fail baru bagi volum berikutnya\n"
+" q          Batal tar\n"
+" !          Spawn  subshell\n"
+" ?          Cetak senarai ini\n"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 #, fuzzy
 msgid "Split"
-msgstr "Pisah Sel"
+msgstr "pisah baris"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 #, fuzzy
 msgid "Continue"
 msgstr "Adakah anda pasti untuk meneruskan"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr ""
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 #, fuzzy
 msgid "Delete file"
-msgstr "ketika cuba untuk memadam %s"
+msgstr "Padam"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 #, fuzzy
 msgid "Suppress messages"
-msgstr "Memindahkan mesej..."
+msgstr "Tiada mesej untuk fail ini"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
+#, fuzzy
 msgid "Unlink"
-msgstr ""
+msgstr "takboleh nyahpaut %s"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 #, fuzzy
 msgid "Clear HTree index"
-msgstr "Papar Indeks Bantuan"
+msgstr "Padam"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 #, fuzzy
 msgid "Recreate"
 msgstr "Buatsemula Ikon Lalai"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr ""
+
+#: e2fsck/problem.c:81
 #, fuzzy
 msgid "(NONE)"
-msgstr ""
-"Kategori amaran termasuk:\n"
-"  `midrule-values'  nilai hukumtengah nyahtetap atau tidak digunakan\n"
-"  `yacc'            tidak serasi dengan POSIX YACC\n"
-"  `all'             semua amaran\n"
-"  `no-CATEGORY'     matikan amaran dalam CATEGORY\n"
-"  `none'            matikan semua amaran\n"
-"  `error'           jadikan amaran sebagai ralat\n"
-"\n"
+msgstr "tiada"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 #, fuzzy
 msgid "FIXED"
 msgstr "Saiz _tetap"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 #, fuzzy
 msgid "CLEARED"
-msgstr ""
-"Amaran: blok tidak sah %u terdapat di dalam blok inode buruk. Dibersihkan.\n"
+msgstr "Amaran: blok tidak sah %u terdapat di dalam blok inode buruk. Dibersihkan.\n"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr ""
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 #, fuzzy
 msgid "ALLOCATED"
-msgstr "@r tidak diumpukkan."
+msgstr "@r tidak diumpukkan.  "
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr ""
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr ""
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 #, fuzzy
 msgid "CREATED"
-msgstr "GPGME: Tandatangan jenis yang salah dicipta"
+msgstr "direktori %s dicipta"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr ""
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
+#, fuzzy
 msgid "TRUNCATED"
 msgstr ""
+"  %C   abad (tahun dibahagi dengan 100 dan dibundarkan ke integer) [00-99]\n"
+"  %d   hari drpd bulan (01..31)\n"
+"  %D   tarikh (bb/hh/tt)\n"
+"  %e   hari drpd bulan, ruang kosong ditambah ( 1..31)\n"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 #, fuzzy
 msgid "INODE CLEARED"
-msgstr ""
-"Amaran: blok tidak sah %u terdapat di dalam blok inode buruk. Dibersihkan.\n"
+msgstr "Amaran: blok tidak sah %u terdapat di dalam blok inode buruk. Dibersihkan.\n"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 #, fuzzy
 msgid "ABORTED"
 msgstr "dibatalkan"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 #, fuzzy
 msgid "SPLIT"
-msgstr "Pisah Sel"
+msgstr "pisah baris"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr ""
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr ""
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 #, fuzzy
 msgid "FILE DELETED"
-msgstr "FAIL"
+msgstr "  %d %d%% dipadam"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr ""
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr ""
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 #, fuzzy
 msgid "HTREE INDEX CLEARED"
-msgstr "Papar Indeks Bantuan"
+msgstr "indeks"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 #, fuzzy
 msgid "WILL RECREATE"
 msgstr "Buatsemula Ikon Lalai"
 
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr ""
+
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
-#, fuzzy
+#: e2fsck/problem.c:115
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
-msgstr "%s adalah nama hos yang tidak sah"
+msgstr "@b @B untuk @g %g tiada didalam @g.  (@b %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
-#, fuzzy
+#: e2fsck/problem.c:119
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
-msgstr "%s adalah nama hos yang tidak sah"
+msgstr "@i @B untuk @g %g tiada didalam @g.  (@b %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -906,7 +955,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -922,7 +971,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -932,7 +981,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -940,26 +989,25 @@ msgid ""
 msgstr ""
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr ""
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
-#, fuzzy
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %c\n"
-msgstr "          Semua data anda yang dipilih telah"
+msgstr "@S first_data_@b = %b, sepatutnya adalah %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -970,52 +1018,52 @@ msgid ""
 msgstr ""
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 #, fuzzy
 msgid "Corruption found in @S.  (%s = %N).\n"
-msgstr "fsck: %s: tidak dijumpai\n"
+msgstr "\"%.*s%s\" tidak dijumpai"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, fuzzy, c-format
+#: e2fsck/problem.c:186
+#, fuzzy, no-c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Ralat ketika menentukan sama ada %s telah dilekapkan.\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:191
 #, fuzzy
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "'..' dalam %Q (%i) adalah %P (%j), @s %q (%d).\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr ""
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, fuzzy, c-format
+#: e2fsck/problem.c:201
+#, fuzzy, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
-msgstr "'..' dalam %Q (%i) adalah %P (%j), @s %q (%d).\n"
+msgstr "@i %i (%Q) mempunyai mod @n (%Im).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr ""
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:211
 #, fuzzy
 msgid "Can't find external @j\n"
 msgstr "Tidak dapat mencari nama hos sendiri"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 #, fuzzy
 msgid "External @j has bad @S\n"
-msgstr "Mengabaikan rpm buruk: %s"
+msgstr "%s: fail `%s' mempunyai cecikut magik buruk\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 #, fuzzy
 msgid "External @j does not support this @f\n"
 msgstr "Cdrdao %1 tidak menyokong overburning."
@@ -1024,94 +1072,93 @@ msgstr "Cdrdao %1 tidak menyokong overburning."
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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 ""
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:235
 #, fuzzy
 msgid "@j @S is corrupt.\n"
-msgstr "Imej PXE ialah %s/%s"
+msgstr "Takat rosak"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr ""
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr ""
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:250
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr ""
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:255
 #, fuzzy
 msgid "Clear @j"
 msgstr "Padam"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr ""
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:265
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr ""
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:270
 #, fuzzy
 msgid "@I %B (%b) found in @o @i %i.\n"
-msgstr "@i %i (%Q) adalah @I @b @v.\n"
+msgstr "@i @B untuk @g %g tiada didalam @g.  (@b %b)\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:275
 #, fuzzy
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Fail Telah Ada dalam Senarai"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, fuzzy, c-format
+#: e2fsck/problem.c:281
+#, fuzzy, no-c-format
 msgid "@I @o @i %i in @S.\n"
-msgstr "Ralat I/O"
+msgstr "@i %i (%Q) adalah @I FIFO.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, fuzzy, c-format
+#: e2fsck/problem.c:287
+#, fuzzy, no-c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@i %i (%Q) adalah @I FIFO.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:292
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:297
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
 msgstr ""
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, fuzzy, c-format
+#: e2fsck/problem.c:308
+#, fuzzy, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1119,8 +1166,8 @@ msgstr "Direktori Untuk Dikembalikan Dari"
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, fuzzy, c-format
+#: e2fsck/problem.c:314
+#, fuzzy, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1129,7 +1176,7 @@ msgstr "Ralat mengulang ke atas @d @bs: %m\n"
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1137,19 +1184,19 @@ msgid ""
 msgstr ""
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 #, fuzzy
 msgid "Run @j anyway"
-msgstr "Laksana penyemak sintaks fail tetapan"
+msgstr "mke2fs dipaksa juga.\n"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 #, fuzzy
 msgid ""
 "Backing up @j @i @b information.\n"
@@ -1158,26 +1205,26 @@ msgstr "Toggle salinan fail asal"
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
 msgstr ""
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr ""
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:352
 #, fuzzy
 msgid "Resize @i not valid.  "
-msgstr "Hujah yang sah adalah:"
+msgstr "Tidak dapat mengubah saiz tetingkap suntingan"
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1185,21 +1232,21 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
 msgstr ""
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, fuzzy, c-format
+#: e2fsck/problem.c:368
+#, fuzzy, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "Tetap masa untuk memaparkan hint:"
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 #, fuzzy
 msgid ""
 "Adding dirhash hint to @f.\n"
@@ -1207,275 +1254,290 @@ msgid ""
 msgstr "Menambah jurnal ke peranti %s:"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 #, fuzzy
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "Saiz tab \"%s\" yang diminta tidak sah"
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr ""
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:389
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr ""
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:394
 #, fuzzy
 msgid "Last @g @b @B uninitialized.  "
-msgstr "Disimpan terakhir:"
+msgstr "@i @B untuk @g %g tiada didalam @g.  (@b %b)\n"
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr ""
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:405
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr ""
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 #, fuzzy
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr "Saiz tab \"%s\" yang diminta tidak sah"
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr ""
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr ""
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
 #, fuzzy
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr "@i %i (%Q) adalah soket @I.\n"
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "@i %i (%Q) adalah @I FIFO.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 #, fuzzy
 msgid "@S has invalid MMP block.  "
 msgstr "saiz blok tidak sah - %s"
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
+#, fuzzy
 msgid "@S has invalid MMP magic.  "
-msgstr ""
+msgstr "MMP: nombor magic tidak sah"
 
-#: e2fsck/problem.c:433
-#, fuzzy, c-format
+#: e2fsck/problem.c:453
+#, fuzzy, no-c-format
 msgid "ext2fs_open2: %m\n"
-msgstr "Tidak dapat mengembang /@l: %m\n"
+msgstr "@A @i @B (%N): %m\n"
 
-#: e2fsck/problem.c:438
-#, fuzzy, c-format
+#: e2fsck/problem.c:459
+#, fuzzy, no-c-format
 msgid "ext2fs_check_desc: %m\n"
-msgstr "Ralat menyahumpuk @i %i: %m\n"
+msgstr "Tidak dapat mengembang /@l: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
 msgstr ""
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr ""
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+#, fuzzy
+msgid "@S MMP @b checksum does not match.  "
+msgstr "Pengiraan bitmap MMP tidak sepadan"
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr ""
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr ""
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:486
 #, fuzzy
 msgid "External @j @S checksum does not match @S.  "
 msgstr "Cdrdao %1 tidak menyokong overburning."
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr ""
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr ""
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
 msgstr ""
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
 msgstr ""
 
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+#, fuzzy
+msgid "Invalid %U @q @i %i.  "
+msgstr "@u @z @i %i.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr ""
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
+msgstr ""
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr ""
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 #, fuzzy
 msgid "@r is not a @d.  "
 msgstr "@r adalah bukan @d; menghentikan.\n"
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr ""
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:544
 #, fuzzy
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "@i %i (%Q) mempunyai mod @n (%Im).\n"
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, fuzzy, c-format
+#: e2fsck/problem.c:550
+#, fuzzy, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "i_blocks_hi @F %N, @s sifar.\n"
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr ""
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, fuzzy, c-format
+#: e2fsck/problem.c:562
+#, fuzzy, no-c-format
 msgid "@i %i is a @z @d.  "
-msgstr "/@l adalah bukan sejenis @d (ino=%i)\n"
+msgstr "@u @z @i %i.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:567
 #, fuzzy
 msgid "@g %g's @b @B at %b @C.\n"
-msgstr "P&ada:"
+msgstr "@i @B untuk @g %g tiada didalam @g.  (@b %b)\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:572
 #, fuzzy
 msgid "@g %g's @i @B at %b @C.\n"
-msgstr "P&ada:"
+msgstr "@i @B untuk @g %g tiada didalam @g.  (@b %b)\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:577
 #, fuzzy
 msgid "@g %g's @i table at %b @C.\n"
-msgstr ""
-"\n"
-"  Jadual inode di"
+msgstr "@i @B untuk @g %g tiada didalam @g.  (@b %b)\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:582
 #, fuzzy
 msgid "@g %g's @b @B (%b) is bad.  "
-msgstr "@p @h %d (%q): buruk @b nombor %b.\n"
+msgstr "@i @B untuk @g %g tiada didalam @g.  (@b %b)\n"
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 #, fuzzy
 msgid "@g %g's @i @B (%b) is bad.  "
-msgstr "Sijil buruk"
+msgstr "@i @B untuk @g %g tiada didalam @g.  (@b %b)\n"
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 #, fuzzy
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "Symlink %Q (@i #%i) adalah @n.\n"
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 #, fuzzy
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "i_blocks_hi @F %N, @s sifar.\n"
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 #, fuzzy
 msgid "@I %B (%b) in @i %i.  "
-msgstr "@i @B perbezaan: "
+msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 #, fuzzy
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "&Dalam pelayar web"
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, fuzzy, c-format
+#: e2fsck/problem.c:613
+#, fuzzy, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "@A baru @d @b untuk @i %i (%s): %m\n"
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr ""
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 #, fuzzy
 msgid "@I %B (%b) in bad @b @i.  "
-msgstr "@i %i (%Q) adalah @I @b @v.\n"
+msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 #, fuzzy
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "Parameter tidak sah telah diterima."
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr ""
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr ""
 
@@ -1483,7 +1545,7 @@ msgstr ""
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1493,7 +1555,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1502,7 +1564,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1510,340 +1572,344 @@ msgid ""
 msgstr ""
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr ""
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:667
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:673
 #, fuzzy
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "gid/nama kumpulan buruk - %s"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:679
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:685
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:691
 #, fuzzy
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "&Cari Bantuan"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
-#, fuzzy, c-format
+#: e2fsck/problem.c:697
+#, fuzzy, no-c-format
 msgid "@A @b buffer for relocating %s\n"
-msgstr "&Cari Bantuan"
+msgstr ""
+"\n"
+"Buffer tidak ditulis ke %s: %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:702
 #, fuzzy
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Direktori Untuk Dikembalikan Dari"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
-#, fuzzy, c-format
+#: e2fsck/problem.c:708
+#, fuzzy, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
-msgstr "Ub&ahsuai kepada:"
+msgstr ""
+"\n"
+"Setiap sampel kira sebagai %g %s.\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 #, fuzzy
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Amaran: tidak dapat membaca blok 0: %s\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:718
 #, fuzzy
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Tidak dapat menulis kepada fail %s"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
-#, fuzzy
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
-msgstr "Ralat menyalin dalam penggantian @i @B: %m\n"
+msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
-#, fuzzy
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
-msgstr "Ralat menyalin dalam penggantian @i @B: %m\n"
+msgstr "@A @b @B (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, fuzzy, c-format
+#: e2fsck/problem.c:734
+#, fuzzy, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "Maklumat Peranti Terlampir"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, fuzzy, c-format
+#: e2fsck/problem.c:740
+#, fuzzy, no-c-format
 msgid "@A @d @b array: %m\n"
-msgstr "Ralat menyalin dalam gantian @b @B: %m\n"
+msgstr "@A @b @B (%N): %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, fuzzy, c-format
+#: e2fsck/problem.c:746
+#, fuzzy, no-c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Ralat menyahumpuk @i %i: %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr ""
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:757
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:762
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
-#, fuzzy, c-format
+#: e2fsck/problem.c:769
+#, fuzzy, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Ralat menyahumpuk @i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr ""
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
 msgstr ""
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
+#, fuzzy
 msgid "@j @i is not in use, but contains data.  "
-msgstr ""
+msgstr "Data EXIF mengandungi gambar kecil (%i byte)."
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 #, fuzzy
 msgid "@j is not regular file.  "
-msgstr "fail kosong biasa"
+msgstr "Mencipta fail biasa %s\n"
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, fuzzy, c-format
+#: e2fsck/problem.c:812
+#, fuzzy, no-c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "Label Senarai Semasa"
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:818
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:823
+#, fuzzy
 msgid "@A refcount structure (%N): %m\n"
-msgstr ""
+msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:828
 #, fuzzy
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Ralat membaca @d @b %b (@i %i): %m\n"
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:833
 #, fuzzy
 msgid "@i %i has a bad @a @b %b.  "
-msgstr "@i %i (%Q) adalah @I @b @v.\n"
+msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 #, fuzzy
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Ralat menyalin dalam gantian @b @B: %m\n"
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:843
 #, fuzzy
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "@p @h %d: nod (%B) mempunyai @n bilangan (%N)\n"
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:848
 #, fuzzy
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Ralat menyalin dalam gantian @b @B: %m\n"
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:853
 #, fuzzy
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "Mempunyai &Heading"
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:858
 #, fuzzy
 msgid "@A @a region allocation structure.  "
-msgstr "Tidak dapat mengembang /@l: %m\n"
+msgstr "Ralat dalaman dalam pengumpukan memori."
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr ""
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:868
 #, fuzzy
 msgid "@a @b %b is corrupt (@n name).  "
-msgstr "Nama terlalu panjang"
+msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 #, fuzzy
 msgid "@a @b %b is corrupt (@n value).  "
-msgstr "Nilai diminta adalah bukan integer"
+msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, fuzzy, c-format
+#: e2fsck/problem.c:879
+#, fuzzy, no-c-format
 msgid "@i %i is too big.  "
 msgstr "Regular expression terlalu besar"
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr ""
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr ""
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, fuzzy, c-format
+#: e2fsck/problem.c:911
+#, fuzzy, no-c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "@p @h %d: nod root node ialah @n\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:916
 #, fuzzy
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "Sijil tidak mempunyai ciri disokong."
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr ""
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:927
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr ""
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
 msgstr ""
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr ""
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr ""
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:950
 #, fuzzy
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "@i %i (%Q) mempunyai mod @n (%Im).\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:955
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr ""
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:960
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr ""
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:965
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr ""
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:970
 #, fuzzy
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "@i %i (%Q) mempunyai mod @n (%Im).\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:975
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr ""
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
-#, fuzzy, c-format
+#: e2fsck/problem.c:981
+#, fuzzy, no-c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Ralat berlaku bila cuba menyalin cekupan skrin."
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1851,7 +1917,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1859,119 +1925,120 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr ""
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr ""
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr ""
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr ""
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1030
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr ""
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, fuzzy, c-format
+#: e2fsck/problem.c:1036
+#, fuzzy, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Ralat menyalin dalam gantian @b @B: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
 #, fuzzy
-msgid "@q @i is not regular file.  "
-msgstr "fail kosong biasa"
+msgid "@q @i is not regular file.  "
+msgstr "@i %i (%Q) adalah soket @I.\n"
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
+#, fuzzy
 msgid "@q @i is not in use, but contains data.  "
-msgstr ""
+msgstr "Data EXIF mengandungi gambar kecil (%i byte)."
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 #, fuzzy
 msgid "@q @i is visible to the user.  "
 msgstr "@i %i (%Q) adalah soket @I.\n"
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 #, fuzzy
 msgid "The bad @b @i looks @n.  "
-msgstr "saiz inode buruk - %s"
+msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, fuzzy, c-format
+#: e2fsck/problem.c:1067
+#, fuzzy, no-c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "Regular expression terlalu besar"
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr ""
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr ""
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
 msgstr ""
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1979,140 +2046,160 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
 msgstr ""
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
 msgstr ""
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 #, fuzzy
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "@A baru @d @b untuk @i %i (%s): %m\n"
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, fuzzy, c-format
+#: e2fsck/problem.c:1138
+#, fuzzy, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "@d @i %i mempunyai @b tidak diumpuk #%B.  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
 msgstr ""
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
 msgstr ""
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
 msgstr ""
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr ""
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1191
 #, fuzzy
 msgid "@A @x region allocation structure.  "
 msgstr "Tidak dapat mengembang /@l: %m\n"
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
+#, fuzzy
 msgid "@A memory for encrypted @d list\n"
-msgstr ""
+msgstr "Kehabisan memori ketika memadam sektor %d-%d\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr ""
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr ""
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, fuzzy, c-format
+#: e2fsck/problem.c:1218
+#, fuzzy, no-c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "Nama terlalu panjang"
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr ""
 
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+#, fuzzy
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "@i %i (%Q) mempunyai mod @n (%Im).\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr ""
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2120,139 +2207,139 @@ msgid ""
 msgstr ""
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
-#, fuzzy, c-format
+#: e2fsck/problem.c:1255
+#, fuzzy, no-c-format
 msgid "@m @b(s) in @i %i:"
-msgstr "@A baru @d @b untuk @i %i (%s): %m\n"
+msgstr "@A @i @B (%N): %m\n"
 
-#: e2fsck/problem.c:1172
-#, fuzzy, c-format
+#: e2fsck/problem.c:1271
+#, fuzzy, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Ralat apabila membaca fail."
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
-#, fuzzy, c-format
+#: e2fsck/problem.c:1277
+#, fuzzy, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
-msgstr "Ralat membaca @d @b %b (@i %i): %m\n"
+msgstr "@A baru @d @b untuk @i %i (%s): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr ""
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 #, fuzzy
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
-msgstr "Ralat membaca @d @b %b (@i %i): %m\n"
+msgstr "Ralat menulis @d @b %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1298
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr ""
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
 msgstr ""
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 #, fuzzy
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "@i %i (%Q) mempunyai mod @n (%Im).\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
+#, fuzzy
 msgid "\t<@f metadata>\n"
-msgstr ""
+msgstr "font %f terlalu besar"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 #, fuzzy
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
-msgstr "Ralat mengulang ke atas @d @bs: %m\n"
+msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1242
-#, fuzzy, c-format
+#: e2fsck/problem.c:1344
+#, fuzzy, no-c-format
 msgid "Couldn't clone file: %m\n"
-msgstr ""
-"Tidak dapat membaiki induk untuk @i %i: %m\n"
-"\n"
+msgstr "Tidak dapat membuka fail profil"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1350
 #, fuzzy
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Mengoptimakan direktori"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, fuzzy, c-format
+#: e2fsck/problem.c:1356
+#, fuzzy, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Gagal untuk mengoptima direktori %q (%d): %m"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1361
 #, fuzzy
+#| msgid "Optimizing directories: "
 msgid "Optimizing @x trees: "
-msgstr "Mengoptimakan direktori"
+msgstr "Mengoptimumkan direktori: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr ""
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 #, fuzzy
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Ulangan 3: Memeriksa sambungan @d\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, fuzzy, c-format
+#: e2fsck/problem.c:1399
+#, fuzzy, no-c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
-msgstr "Symlink %Q (@i #%i) adalah @n.\n"
+msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1404
 #, fuzzy
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@i %i (%Q) mempunyai mod @n (%Im).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1409
 #, fuzzy
 msgid "@E has @D/unused @i %Di.  "
 msgstr ""
@@ -2260,305 +2347,307 @@ msgstr ""
 "\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1414
 #, fuzzy
 msgid "@E @L to '.'  "
-msgstr "/@l tidak dijumpai."
+msgstr "@E adalah salinan '.' @e.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1419
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1424
 #, fuzzy
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "Ub&ahsuai kepada:"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1429
 #, fuzzy
 msgid "@E @L to the @r.\n"
 msgstr "@E adalah salinan '.' @e.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
 msgstr ""
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, fuzzy, c-format
+#: e2fsck/problem.c:1440
+#, fuzzy, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "/@l adalah bukan sejenis @d (ino=%i)\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, fuzzy, c-format
+#: e2fsck/problem.c:1446
+#, fuzzy, no-c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "/@l adalah bukan sejenis @d (ino=%i)\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1451
 #, fuzzy
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Pergi ke fail pertama dalam senarai"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1456
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr ""
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr @F %IF, @s sifar.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1466
 #, fuzzy
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_faddr @F %IF, @s sifar.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr ""
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+#, fuzzy
+#| msgid "i_fsize @F %N, @s zero.\n"
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_fsize @F %N, @s sifar.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N, @s sifar.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N, @s sifar.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "@i %i (%Q) mempunyai mod @n (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1491
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "@d @i %i, @b %B, offset %N: @d rosak\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "@d @i %i, @b %B, offset %N: namafail terlalu panjang\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 #, fuzzy
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "@A baru @d @b untuk @i %i (%s): %m\n"
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr ""
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr ""
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "@i %i (%Q) adalah @I aksara @v.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "@i %i (%Q) adalah @I @b @v.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E adalah salinan '.' @e.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E adalah salinan '..' @e.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr ""
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, fuzzy, c-format
+#: e2fsck/problem.c:1550
+#, fuzzy, no-c-format
 msgid "@A icount structure: %m\n"
-msgstr "Tidak dapat mengembang /@l: %m\n"
+msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Ralat mengulang ke atas @d @bs: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Ralat membaca @d @b %b (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Ralat menulis @d @b %b (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A baru @d @b untuk @i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Ralat menyahumpuk @i %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, fuzzy, c-format
+#: e2fsck/problem.c:1584
+#, fuzzy, no-c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "'..' dalam %Q (%i) adalah %P (%j), @s %q (%d).\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "@i %i (%Q) adalah @I FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "@i %i (%Q) adalah soket @I.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Menetapkan jenisfail untuk @E ke %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1604
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 msgstr "@E mempunyai jenisfail ditetapkan.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "@E mempunyai nama @z.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Symlink %Q (@i #%i) adalah @n.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1624
+#, fuzzy
 msgid "@a @b @F @n (%If).\n"
-msgstr ""
+msgstr "@A @b @B (%N): %m\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1629
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1634
 #, fuzzy
 msgid "@p @h %d: %B not referenced\n"
 msgstr "@b tidak dijangka dalam @h %d (%q).\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 #, fuzzy
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "@p @h %d (%q): buruk @b nombor %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1644
 #, fuzzy
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "@p @h %d: nod (%B) mempunyai kedalaman @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1649
 #, fuzzy
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "@p @h %d: nod (%B) mempunyai kedalaman @n\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
-#, fuzzy
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
-msgstr "@p @h %d: nod root node ialah @n\n"
+msgstr "@n @h %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p @h %d (%q): buruk @b nombor %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p @h %d: nod root node ialah @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1674
 #, fuzzy
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "@p @h %d: nod (%B) mempunyai had @n (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1679
 #, fuzzy
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "@p @h %d: nod (%B) mempunyai @n bilangan (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1684
 #, fuzzy
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "@p @h %d: nod (%B) mempunyai kedalaman @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1689
 #, fuzzy
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "@p @h %d: nod (%B) mempunyai kedalaman @n\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
-msgstr "Salinan @E dijumpai."
+msgstr "Salinan @E dijumpai.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2568,7 +2657,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2576,157 +2665,161 @@ msgid ""
 msgstr ""
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi @F %N, @s sifar.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "@b tidak dijangka dalam @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:1603
+#: e2fsck/problem.c:1719
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1724
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr ""
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1729
 #, fuzzy
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi @F %N, @s sifar.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, fuzzy, c-format
+#: e2fsck/problem.c:1735
+#, fuzzy, no-c-format
+#| msgid "@p @h %d: root node is @n\n"
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr "@p @h %d: nod root node ialah @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, fuzzy, c-format
+#: e2fsck/problem.c:1741
+#, fuzzy, no-c-format
+#| msgid "@p @h %d: root node is @n\n"
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr "@p @h %d: nod root node ialah @n\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1746
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "@d @i %i, @b %B, offset %N: @d rosak\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr ""
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr ""
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr ""
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
+#, fuzzy
 msgid "Encrypted @E is too short.\n"
-msgstr ""
+msgstr "%s: fail terlalu pendek untuk menjadi fail gmon\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Ulangan 3: Memeriksa sambungan @d\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
-msgstr "@r tidak diumpukkan."
+msgstr "@r tidak diumpukkan.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "Tiada ruang dalam @l @d.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, fuzzy, c-format
+#: e2fsck/problem.c:1790
+#, fuzzy, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "'..' dalam %Q (%i) adalah %P (%j), @s %q (%d).\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
-msgstr "/@l tidak dijumpai."
+msgstr "/@l tidak dijumpai.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "'..' dalam %Q (%i) adalah %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr ""
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Tidak dapat mengembang /@l: %m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Tidak dapat menyambung semula %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Ralat ketika cuba mencari /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr ""
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr ""
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr ""
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr ""
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2736,49 +2829,50 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
 msgstr ""
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Ralat mencipta root @d (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Ralat mencipta /@l @d (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "@r adalah bukan @d; menghentikan.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "Tidak dapat meneruskan tanpa @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l adalah bukan sejenis @d (ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
+#, fuzzy
 msgid "/@l has inline data\n"
-msgstr ""
+msgstr "Inode tidak mempunyai data sebaris"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2787,7 +2881,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2795,202 +2889,213 @@ msgid ""
 msgstr ""
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1924
 #, fuzzy
 msgid "/@l is encrypted\n"
-msgstr "IDENT: data berkemungkinan dienkrip dengan DES..."
+msgstr "/@l tidak dijumpai.  "
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 #, fuzzy
 msgid "Pass 3A: Optimizing directories\n"
-msgstr "Mengoptimakan direktori"
+msgstr "Mengoptimumkan direktori: "
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 #, fuzzy
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Gagal untuk mengoptima direktori %q (%d): %m"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
-msgstr "Mengoptimakan direktori"
+msgstr "Mengoptimumkan direktori: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr ""
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, fuzzy, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
-msgstr "@i %i (%Q) adalah @I aksara @v.\n"
+msgstr "@u @z @i %i.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, fuzzy, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
-msgstr "Ralat menyahumpuk @i %i: %m\n"
+msgstr "@u @i %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr ""
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+#, fuzzy
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "i_blocks_hi @F %N, @s sifar.\n"
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr ""
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
 msgstr ""
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
 msgstr ""
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "@b @B perbezaan: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "@i @B perbezaan: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:2068
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr ""
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2078
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr ""
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr ""
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
+#: e2fsck/problem.c:2088
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr ""
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Ralat menyalin dalam penggantian @i @B: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Ralat menyalin dalam gantian @b @B: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr ""
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 #, fuzzy
 msgid "Recreate @j"
 msgstr "Buatsemula Ikon Lalai"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr ""
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, fuzzy, c-format
+#: e2fsck/problem.c:2172
+#, fuzzy, no-c-format
+#| msgid "while setting block group checksum info"
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "ketika menetapkan maklumat checksum kumpulan blok"
 
-#: e2fsck/problem.c:2016
-#, fuzzy, c-format
+#: e2fsck/problem.c:2178
+#, fuzzy, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Ralat memadam gulungan mel.\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2189
 #, fuzzy
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "Ralat memadam gulungan mel.\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr ""
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "DIABAIKAN"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
+#, fuzzy
 msgid "in move_quota_inode"
-msgstr ""
+msgstr "Semakan inode tidak sepadan inode"
 
 #: e2fsck/scantest.c:79
 #, c-format
@@ -3010,25 +3115,25 @@ msgstr "ketika memulakan pengesanan inod"
 msgid "while doing inode scan"
 msgstr "ketika melakukan pengesanan inod"
 
-#: e2fsck/super.c:190
-#, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr ""
+#: e2fsck/super.c:224
+#, fuzzy, c-format
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "ketika mengosongkan inod jurnal"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
 msgstr ""
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr ""
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Mengosongkan"
 
-#: e2fsck/unix.c:77
+#: e2fsck/unix.c:78
 #, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
@@ -3036,19 +3141,18 @@ msgid ""
 "\t\t[-E extended-options] [-z undo_file] device\n"
 msgstr ""
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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 ""
 
-#: e2fsck/unix.c:88
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -3059,12 +3163,12 @@ msgid ""
 " -z undo_file         Create an undo file\n"
 msgstr ""
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, fuzzy, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: bersih, %u/%u fail, %u/%u blok"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3073,54 +3177,48 @@ msgid_plural ""
 "\n"
 "%12u inodes used (%2.2f%%, out of %u)\n"
 msgstr[0] ""
-msgstr[1] ""
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
 msgstr[0] ""
-msgstr[1] ""
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:172
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
 msgstr[0] ""
-msgstr[1] ""
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:177
 #, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr ""
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 #, fuzzy
 msgid "             Extent depth histogram: "
-msgstr "kira histogram log\n"
+msgstr "Kedalaman maksimum %s"
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
 msgstr[0] ""
-msgstr[1] ""
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:198
 #, fuzzy, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
-msgstr[0] "%u inod, %u blok\n"
-msgstr[1] "%u inod, %u blok\n"
+msgstr[0] "%12u fifo\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:200
 #, fuzzy, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
-msgstr[0] "Extension &fail:"
-msgstr[1] "Extension &fail:"
+msgstr[0] "%12u fifo\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:202
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3128,99 +3226,91 @@ msgid ""
 msgid_plural ""
 "\n"
 "%12u regular files\n"
-msgstr[0] "Extension &fail:"
-msgstr[1] "Extension &fail:"
+msgstr[0] "fail biasa"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, fuzzy, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
-msgstr[0] "Direktori %s:"
-msgstr[1] "Direktori %s:"
+msgstr[0] "%12u fifo\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, fuzzy, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
-msgstr[0] "Peranti Aksara"
-msgstr[1] "Peranti Aksara"
+msgstr[0] "Fail \"%s\" adalah sebuah fail peranti"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:209
 #, fuzzy, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
-msgstr[0] "Peranti Blok"
-msgstr[1] "Peranti Blok"
+msgstr[0] "%s adalah bukan peranti khas.\n"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%12u fifo\n"
 
-#: e2fsck/unix.c:210
-#, c-format
+#: e2fsck/unix.c:213
+#, fuzzy, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%12u fifo\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, fuzzy, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
-msgstr[0] "Pemeriksa Pautan"
-msgstr[1] "Pemeriksa Pautan"
+msgstr[0] "pautan simbolik"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, fuzzy, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
-msgstr[0] "Pemeriksa Pautan"
-msgstr[1] "Pemeriksa Pautan"
+msgstr[0] "pautan simbolik"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:221
 #, fuzzy, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
-msgstr[0] "Soket"
-msgstr[1] "Soket"
+msgstr[0] "%12u fifo\n"
 
-#: e2fsck/unix.c:222
-#, c-format
+#: e2fsck/unix.c:225
+#, fuzzy, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%12u fifo\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "ketika menentukan sama ada %s telah dilekapkan."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, fuzzy, c-format
 msgid "Warning!  %s is mounted.\n"
-msgstr "AMARAN: %s"
+msgstr "\tterakhir dilekapkan pada %s pada %s"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, fuzzy, c-format
 msgid "Warning!  %s is in use.\n"
-msgstr "AMARAN: tidak dapat membuka %s: %s\n"
+msgstr "AMARAN: %s"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, fuzzy, c-format
+#| msgid "%s is mounted.  "
 msgid "%s is mounted.\n"
-msgstr "%s dilekapkan;"
+msgstr "%s dilekapkan; "
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, fuzzy, c-format
+#| msgid "%s is mounted.  "
 msgid "%s is in use.\n"
-msgstr "Mesti menggunakan '-v', =, - atau +\n"
+msgstr "opsyen `-%s' sudah luput; guna `-%c %.*s%.*s%s'"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3228,7 +3318,7 @@ msgstr ""
 "Tidak dapat meneruskan, membatalkan.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3237,184 +3327,206 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "Adakah anda pasti untuk meneruskan"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "pemeriksaan dibatalkan.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 #, fuzzy
 msgid " contains a file system with errors"
-msgstr "Abai fail tetapan sistem"
+msgstr "%s mengandungi sistem fail %s\n"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " telah tidak dinyahlekap dengan bersih"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 msgid " primary superblock features different from backup"
 msgstr ""
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:383
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr ""
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:390
 msgid " has filesystem last checked time in the future"
 msgstr ""
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr ""
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ", pemeriksaan dipaksa.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, fuzzy, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: bersih, %u/%u fail, %u/%u blok"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:463
 #, fuzzy
 msgid " (check deferred; on battery)"
 msgstr " (periksa selepas lekapan akan datang)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr " (periksa selepas lekapan akan datang)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (diperiksa daiam lekapan %ld)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr ""
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "Versi EA tidak sah.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:702
 #, fuzzy
+#| msgid "Invalid resize parameter: %s\n"
 msgid "Invalid readahead buffer size.\n"
-msgstr "Parameter ulangsaiz tidak sah: %s\n"
+msgstr "Tidak dapat memperoleh saiz buffer paip"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Pilihan lanjutan tidak diketahui: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr ""
+
+#: e2fsck/unix.c:778
+#, fuzzy
+#| msgid "Invalid resize parameter: %s\n"
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "Tidak dapat memperoleh saiz buffer paip"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Ralat mengesahkan penghurai fail %d: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr ""
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr ""
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:903
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr ""
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Tidak dapat menghurai '%s'"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 #, fuzzy
 msgid "The -n and -D options are incompatible."
 msgstr "pilihan -l dan -s tidak sepadan"
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 #, fuzzy
 msgid "The -n and -c options are incompatible."
 msgstr "pilihan -l dan -s tidak sepadan"
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 #, fuzzy
 msgid "The -n and -l/-L options are incompatible."
 msgstr "pilihan -l dan -s tidak sepadan"
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1025
 #, fuzzy
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "pilihan -l dan -s tidak sepadan"
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1031
 #, fuzzy
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "pilihan -l dan -s tidak sepadan"
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1142
 #, fuzzy, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
-msgstr "integer diluar julat: %s"
+msgstr "`%s' adalah bukan integer positif yang sah"
 
-#: e2fsck/unix.c:1102
-#, c-format
+#: e2fsck/unix.c:1151
+#, fuzzy, c-format
 msgid ""
 "\n"
 "Invalid non-numeric argument to -%c (\"%s\")\n"
 "\n"
-msgstr ""
+msgstr "%s: hujah tidak sah untuk %s%c escape"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, 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 ""
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 #, fuzzy
 msgid "while checking MMP block"
-msgstr "ketika menulis bitmap blok"
+msgstr "Pengiraan bitmap MMP tidak sepadan"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1282
 #, fuzzy
 msgid "while reading MMP block"
-msgstr "ketika membaca penanda pada %s"
+msgstr "Pengiraan bitmap MMP tidak sepadan"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3422,178 +3534,209 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "ketika cuba untuk memadam %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 #, fuzzy
 msgid "while trying to setup undo file\n"
 msgstr "ketika cuba untuk stat %s"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 msgid "Error: ext2fs library version out of date!\n"
 msgstr ""
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "ketika cuba memulakan program"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, fuzzy, c-format
 msgid "\tUsing %s, %s\n"
-msgstr "kurang menggunakan hukum %d (%s)"
+msgstr "ditandatangan menggunakan %s, "
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr ""
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s mencuba backup blok...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr "Superblok tidak sah,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
 msgstr "Pemerihal kumpulan kelihatan buruk..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, fuzzy, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s mencuba backup blok...\n"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1546
 #, fuzzy, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "ketika membaca superblok jurnal"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 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:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr ""
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1590
 msgid "Possibly non-existent or swap device?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1592
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr ""
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1749
 #, fuzzy, c-format
 msgid "while checking journal for %s"
 msgstr "ketika mendapatkan semula jurnal ext3 bagi %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1752
 #, fuzzy
+#| msgid "Cannot proceed without a @r.\n"
 msgid "Cannot proceed with file system check"
-msgstr "Tidak dapat meneruskan tanpa @r.\n"
+msgstr "tak dapat membaca maklumat sistem fail bagi %s"
 
-#: e2fsck/unix.c:1661
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+#: e2fsck/unix.c:1763
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1775
 #, fuzzy, c-format
 msgid "unable to set superblock flags on %s\n"
-msgstr "Bendera bagi %s ditetapkan sebagai"
+msgstr "Bendera bagi %s ditetapkan sebagai "
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1781
 #, fuzzy, c-format
+#| msgid "Journal superblock not found!\n"
 msgid "Journal checksum error found in %s\n"
 msgstr "Superblok jurnal tidak dijumpai!\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1785
 #, fuzzy, c-format
+#| msgid "Journal removed\n"
 msgid "Journal corrupted in %s\n"
-msgstr "Jurnal dibuang\n"
+msgstr "Menambah jurnal ke peranti %s:"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1789
 #, fuzzy, c-format
+#| msgid "while recovering ext3 journal of %s"
 msgid "while recovering journal of %s"
 msgstr "ketika mendapatkan semula jurnal ext3 bagi %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s tidak mempunyai ciri disokong:"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1826
+#, fuzzy, c-format
+#| msgid "%s has unsupported feature(s):"
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "%s tidak mempunyai ciri disokong:"
+
+#: e2fsck/unix.c:1876
 #, fuzzy, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "ketika menetapkan inod blok buruk"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1879
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
-msgstr "Mencipta jurnal (%d blok):"
+msgstr "Mencipta jurnal (%d blok): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr " Selesai.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1931
+#, fuzzy
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
-msgstr ""
+msgstr "Sistemfail telah mempunyai jurnal.\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "dibatalkan"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck dibatalkan.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "ketika mengulangtetap konteks"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: ***** FILE SYSTEM WAS MODIFIED *****\n"
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr "%s mengandungi sistem fail %s\n"
+
+#: e2fsck/unix.c:2031
+#, fuzzy, c-format
+msgid "%s: File system was modified.\n"
+msgstr ""
+"\n"
+"%s: ***** SISTEM FAIL TELAH DIUBAHSUAI *****\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3602,12 +3745,13 @@ msgstr ""
 "\n"
 "%s: ***** SISTEM FAIL TELAH DIUBAHSUAI *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:2040
 #, fuzzy, c-format
+#| msgid "%s: ***** REBOOT LINUX *****\n"
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** ULANGBOOT LINUX *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3615,54 +3759,55 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "yY"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "tTnN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
-msgstr ""
+msgstr "aA"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
+#, fuzzy
 msgid " ('a' enables 'yes' to all) "
-msgstr ""
+msgstr "Semua"
 
-#: e2fsck/util.c:213
-#, fuzzy
+#: e2fsck/util.c:219
 msgid "<y>"
-msgstr "Teruskan juga? (y,t)"
+msgstr "<y>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 #, fuzzy
 msgid "<n>"
-msgstr "Symlink %Q (@i #%i) adalah @n.\n"
+msgstr "Tiada"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 #, fuzzy
 msgid " (y/n)"
 msgstr "Teruskan juga? (y,t)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "dibatalkan!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
+#, fuzzy
 msgid "yes to all\n"
-msgstr ""
+msgstr "Semua"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "ya\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "tidak\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3671,7 +3816,7 @@ msgstr ""
 "%s? tidak\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3680,40 +3825,40 @@ msgstr ""
 "%s? ya\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "ya"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "tidak"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr ""
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 #, fuzzy
 msgid "reading inode and block bitmaps"
 msgstr "ketika membaca bitmap"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr ""
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 #, fuzzy
 msgid "writing block and inode bitmaps"
 msgstr "ketika menulis jadual inod"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, fuzzy, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "ketika menulis bitmap blok"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3722,502 +3867,515 @@ msgid ""
 "\t(i.e., without -a or -p options)\n"
 msgstr ""
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, fuzzy, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Memori digunakan: %dk/%dk (%dk/%dk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, fuzzy, c-format
 msgid "Memory used: %lu, "
-msgstr "Tidak cukup memori"
+msgstr "Diguna"
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "masa: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "masa lepas: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, fuzzy, c-format
 msgid "while reading inode %lu in %s"
 msgstr "Ralat membaca blok %lu (%s) ketika %s.  "
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, fuzzy, c-format
 msgid "while writing inode %lu in %s"
 msgstr "ketika menulis inod jurnal"
 
-#: e2fsck/util.c:765
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
+#: e2fsck/util.c:792
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
 msgstr ""
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 #, fuzzy
 msgid "done                                                 \n"
-msgstr "selesai                         \n"
+msgstr "selesai                             \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, 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"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 ""
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr ""
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
+#, fuzzy
 msgid "Testing with random pattern: "
-msgstr ""
+msgstr "Gagal untuk mendapatkan data rawak."
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
+#, fuzzy
 msgid "Testing with pattern 0x"
-msgstr ""
+msgstr "Corak"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "ketika mencari"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr ""
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 #, fuzzy
 msgid "during ext2fs_sync_device"
 msgstr "ketika mencari"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr ""
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "ketika mengumpukkan penimbal"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Memeriksa blok %lu ke %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr ""
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr ""
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr ""
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr ""
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Dari blok %lu ke %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
-msgstr "Membaca dan membanding:"
+msgstr "Membaca dan membanding: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr ""
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
 msgstr ""
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr ""
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
-msgstr "%s dilekapkan;"
+msgstr "%s dilekapkan; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 #, fuzzy
 msgid "it's not safe to run badblocks!\n"
-msgstr "ketika cuba untuk melaksana '%s'"
+msgstr "blok buruk dipaksa juga.\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, fuzzy, c-format
 msgid "%s is apparently in use by the system; "
-msgstr ""
-"\n"
-"%s: ***** SISTEM FAIL TELAH DIUBAHSUAI *****\n"
+msgstr "%s mengandungi sistem fail %s\n"
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "blok buruk dipaksa juga.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "%s tidak sah - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr ""
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr ""
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr ""
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr ""
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr ""
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr ""
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "blok terakhir"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "blok pertama"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, fuzzy, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "blok permulaan tidak sah (%lu): mesti kurang dari %lu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, fuzzy, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "blok permulaan tidak sah (%lu): mesti kurang dari %lu"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 #, fuzzy
 msgid "while creating in-memory bad blocks list"
 msgstr "ketika membaca dalam senarai blok buruk dari fail"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 #, fuzzy
 msgid "input file - bad format"
-msgstr "Jika FAIL adalah `-', baca masukan piawai."
+msgstr "Jika FAIL adalah '-', baca masukan piawai."
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr ""
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr ""
 
 #: misc/chattr.c:89
 #, fuzzy, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
 msgstr "Penggunaan: %s [-RVf] [-+=AacDdijsSu] [-v versi] fail...\n"
 
-#: misc/chattr.c:159
+#: misc/chattr.c:160
 #, fuzzy, c-format
+#| msgid "bad version - %s\n"
 msgid "bad project - %s\n"
 msgstr "versi buruk - %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "versi buruk - %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "ketika cuba untuk stat %s"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "ketika membaca penanda pada %s"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
-msgstr "Bendera bagi %s ditetapkan sebagai"
+msgstr "Bendera bagi %s ditetapkan sebagai "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "ketika menetapkan penanda pada %s"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Versi %s ditetapkan sebagai %lu\n"
 
-#: misc/chattr.c:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "ketika menetapkan versi pada %s"
 
-#: misc/chattr.c:271
+#: misc/chattr.c:272
 #, fuzzy, c-format
+#| msgid "Version of %s set as %lu\n"
 msgid "Project of %s set as %lu\n"
 msgstr "Versi %s ditetapkan sebagai %lu\n"
 
-#: misc/chattr.c:275
+#: misc/chattr.c:276
 #, fuzzy, c-format
+#| msgid "while setting version on %s"
 msgid "while setting project on %s"
 msgstr "ketika menetapkan versi pada %s"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr ""
 
-#: misc/chattr.c:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "= tidak sepadan dengan - dan +\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "Mesti menggunakan '-v', =, - atau +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:80 misc/create_inode.c:119
 #, fuzzy, c-format
 msgid "while reading inode %u"
-msgstr "Ralat membaca blok %lu (%s) ketika %s.  "
+msgstr "ketika membaca inod root"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 #, fuzzy
 msgid "while expanding directory"
-msgstr "ketika mencipta /lost+found"
+msgstr "direktori"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:97
 #, fuzzy, c-format
+#| msgid "while opening %s"
 msgid "while linking \"%s\""
 msgstr "ketika membuka %s"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
 #, fuzzy, c-format
 msgid "while writing inode %u"
-msgstr "ketika menulis inod jurnal"
+msgstr "ketika menulis jadual inod"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:152 misc/create_inode.c:176
 #, fuzzy, c-format
 msgid "while listing attributes of \"%s\""
-msgstr "ketika cuba untuk memadam %s"
+msgstr "tak dapat menyenaraikan direktori tersedia-tersenarai: %s"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:163
 #, fuzzy, c-format
 msgid "while opening inode %u"
-msgstr "ketika memulakan pengesanan inod"
+msgstr "ketika membuka %s"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 #, fuzzy
 msgid "while allocating memory"
 msgstr "ketika mengumpukkan penimbal"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:189 misc/create_inode.c:205
 #, fuzzy, c-format
+#| msgid "while reading flags on %s"
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "ketika membaca penanda pada %s"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:214
 #, fuzzy, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "ketika menulis inod jurnal"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:224
 #, fuzzy, c-format
+#| msgid "while doing inode scan"
 msgid "while closing inode %u"
 msgstr "ketika melakukan pengesanan inod"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:275
 #, fuzzy, c-format
+#| msgid "while allocating buffers"
 msgid "while allocating inode \"%s\""
 msgstr "ketika mengumpukkan penimbal"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:294
 #, fuzzy, c-format
 msgid "while creating inode \"%s\""
-msgstr "Ralat membaca blok %lu (%s) ketika %s.  "
+msgstr "ketika mencipta direktori root"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:360
 #, fuzzy, c-format
+#| msgid "while reading flags on %s"
 msgid "while creating symlink \"%s\""
-msgstr "ketika membaca penanda pada %s"
+msgstr "ketika mencipta /lost+found"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:378 misc/create_inode.c:963
 #, fuzzy, c-format
 msgid "while looking up \"%s\""
-msgstr "ketika mencipta /lost+found"
+msgstr "ketika menetapkan superblok"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:398
 #, fuzzy, c-format
+#| msgid "while creating root dir"
 msgid "while creating directory \"%s\""
-msgstr "ketika mencipta direktori root"
+msgstr "mencipta direktori %s"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:627
 #, fuzzy, c-format
+#| msgid "while opening %s"
 msgid "while opening \"%s\" to copy"
 msgstr "ketika membuka %s"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:815
 #, fuzzy, c-format
-msgid "while opening directory \"%s\""
-msgstr "ketika membuka %s"
+#| msgid "while creating root dir"
+msgid "while scanning directory \"%s\""
+msgstr "ketika menetapkan versi pada %s"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:825
 #, fuzzy, c-format
+#| msgid "while trying to stat %s"
 msgid "while lstat \"%s\""
-msgstr "ketika cuba untuk stat %s"
+msgstr "tak dapat lstat %s"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:875
 #, fuzzy, c-format
 msgid "while creating special file \"%s\""
-msgstr "Ralat membaca blok %lu (%s) ketika %s.  "
+msgstr "tak boleh mencipta fail istimewa %s"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:884
 #, fuzzy
 msgid "malloc failed"
-msgstr "Tidak cukup memori"
+msgstr "malloc() gagal. Tidak dapat memperuntukkan memori yang cukup."
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:892
 #, fuzzy, c-format
+#| msgid "while trying to resize %s"
 msgid "while trying to read link \"%s\""
-msgstr "ketika cuba untuk mengulangsaiz %s"
+msgstr "ketika cuba untuk memadam %s"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr ""
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:910
 #, fuzzy, c-format
 msgid "while writing symlink\"%s\""
-msgstr "ketika menulis inod jurnal"
+msgstr "ketika menulis jadual inod"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:921
 #, fuzzy, c-format
 msgid "while writing file \"%s\""
-msgstr "ketika menulis inod jurnal"
+msgstr "ketika menulis superblok"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:934
 #, fuzzy, c-format
+#| msgid "while opening %s"
 msgid "while making dir \"%s\""
-msgstr "ketika membuka %s"
+msgstr "%s: Ketidakkonsistenan luar dugaan bila membuat direktori"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:952
 #, fuzzy
 msgid "while changing directory"
-msgstr "direktori"
+msgstr "penukaran hakmilik %s"
 
-#: misc/create_inode.c:833
-#, c-format
+#: misc/create_inode.c:958
+#, fuzzy, c-format
 msgid "ignoring entry \"%s\""
-msgstr ""
+msgstr "Masukan EXIF '%s' "
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:971
 #, fuzzy, c-format
+#| msgid "while setting version on %s"
 msgid "while setting inode for \"%s\""
-msgstr "ketika menetapkan versi pada %s"
+msgstr "ketika menetapkan inod blok buruk"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:978
 #, fuzzy, c-format
+#| msgid "while setting flags on %s"
 msgid "while setting xattrs for \"%s\""
-msgstr "ketika menetapkan penanda pada %s"
+msgstr "ketika menetapkan versi pada %s"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:1004
 #, fuzzy
+#| msgid "while starting inode scan"
 msgid "while saving inode data"
 msgstr "ketika memulakan pengesanan inod"
 
 #: misc/dumpe2fs.c:56
 #, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
 msgstr ""
 
 #: misc/dumpe2fs.c:159
-#, fuzzy
 msgid "blocks"
-msgstr "Mencipta jurnal (%d blok):"
+msgstr "blok"
 
 #: misc/dumpe2fs.c:168
+#, fuzzy
 msgid "clusters"
-msgstr ""
+msgstr " %d gugusan,"
 
 #: misc/dumpe2fs.c:219
 #, c-format
 msgid "Group %lu: (Blocks "
-msgstr "Kumpulan %lu: (Blok"
+msgstr "Kumpulan %lu: (Blok "
 
 #: misc/dumpe2fs.c:226
-#, c-format
+#, fuzzy, c-format
 msgid " csum 0x%04x"
-msgstr ""
+msgstr "(0x%04x, '%s'): "
 
 #: misc/dumpe2fs.c:228
-#, c-format
+#, fuzzy, c-format
 msgid " (EXPECTED 0x%04x)"
-msgstr ""
+msgstr "(0x%04x, '%s'): "
 
 #: misc/dumpe2fs.c:233
 #, c-format
 msgid "  %s superblock at "
-msgstr "  %s superblok di"
+msgstr "  %s superblok di "
 
 #: misc/dumpe2fs.c:234
 msgid "Primary"
@@ -4229,7 +4387,7 @@ msgstr "Backup"
 
 #: misc/dumpe2fs.c:238
 msgid ", Group descriptors at "
-msgstr ", Penghurai kumpulan di"
+msgstr ", Penerangan kumpulan di "
 
 #: misc/dumpe2fs.c:242
 #, fuzzy
@@ -4247,22 +4405,25 @@ msgid "  Block bitmap at "
 msgstr "  Bitmap block di"
 
 #: misc/dumpe2fs.c:260 misc/dumpe2fs.c:271
-#, c-format
+#, fuzzy, c-format
 msgid ", csum 0x%08x"
-msgstr ""
+msgstr "(0x%x, '%s') "
 
 #: misc/dumpe2fs.c:263
 msgid ","
-msgstr ""
+msgstr ","
 
 #: misc/dumpe2fs.c:265
 msgid ""
 "\n"
 " "
-msgstr ""
+msgstr ""
+"\n"
+" "
 
 #: misc/dumpe2fs.c:266
 #, fuzzy
+#| msgid ", Inode bitmap at "
 msgid " Inode bitmap at "
 msgstr ", Bitmap inode di"
 
@@ -4304,98 +4465,59 @@ msgstr "ketika menetapkan inod blok buruk"
 msgid "Bad blocks: %u"
 msgstr "Blok buruk: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "ketika membaca inod jurnal"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 #, fuzzy
 msgid "while opening journal inode"
 msgstr "ketika membaca inod jurnal"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 #, fuzzy
 msgid "while reading journal super block"
-msgstr "ketika membaca inod jurnal"
+msgstr "ketika membaca superblok jurnal"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 #, fuzzy
 msgid "Journal superblock magic number invalid!\n"
-msgstr "Superblok jurnal tidak dijumpai!\n"
-
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-#, fuzzy
-msgid "Journal features:        "
-msgstr "Saiz jurnal:"
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Saiz jurnal:"
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:448
-#, fuzzy, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Mencipta jurnal (%d blok):"
+msgstr "MMP: nombor magic tidak sah"
 
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "ketika membaca superblok jurnal"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr ""
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
+#: misc/dumpe2fs.c:468
+#, fuzzy
+msgid "failed to alloc MMP buffer\n"
+msgstr "ketika mengumpukkan penimbal"
 
-#: misc/dumpe2fs.c:514
-#, c-format
-msgid "Journal users:            %s\n"
-msgstr "Pengguna jurnal:           %s\n"
+#: misc/dumpe2fs.c:479
+#, fuzzy, c-format
+#| msgid "Checking blocks %lu to %lu\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "Memeriksa blok %lu ke %lu\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Parameter superblok tidak sah: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Parameter saiz blok tidak sah: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4409,245 +4531,246 @@ msgid ""
 "\tblocksize=<blocksize>\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
-#, c-format
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
+#, fuzzy, c-format
 msgid "\tUsing %s\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
+msgstr "ditandatangan menggunakan %s, "
 
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
-msgstr ""
+#: misc/dumpe2fs.c:716
+#, fuzzy, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s tidak mempunyai ciri disokong:"
 
-#: misc/dumpe2fs.c:730
-#, c-format
+#: misc/dumpe2fs.c:747
+#, fuzzy, c-format
+#| msgid "while trying to run '%s'"
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "ketika cuba untuk membuka titiklekap %s"
+
+#: misc/dumpe2fs.c:756
+#, fuzzy
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
-msgstr ""
-"\n"
-"%s: %s: ralat membaca bitmap: %s\n"
+msgstr "%s: e2fsck dibatalkan.\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
 msgstr ""
 
-#: misc/e2image.c:108
-#, c-format
+#: misc/e2image.c:110
+#, fuzzy, c-format
 msgid "       %s -I device image-file\n"
-msgstr ""
+msgstr "_Kerangka pada fail imej:"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
 msgstr ""
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 #, fuzzy
 msgid "while allocating buffer"
 msgstr "ketika mengumpukkan penimbal"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, fuzzy, c-format
 msgid "Writing block %llu\n"
 msgstr "ketika menulis bitmap blok"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, fuzzy, c-format
 msgid "error writing block %llu"
-msgstr "e2label: ralat menulis superblok\n"
+msgstr "ketika menulis bitmap blok"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 #, fuzzy
 msgid "error in generic_write()"
-msgstr "Gagal menulis %s\n"
+msgstr "Penghurai ASN1: Ralat menghurai generik."
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr ""
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
+#, fuzzy
 msgid "Couldn't allocate header buffer\n"
-msgstr ""
+msgstr "Tak dapat memperuntukkan ruang penimbal"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "ketika menulis superblok"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "ketika menulis jadual inod"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "ketika menulis bitmap blok"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "ketika menulis inod bitmap"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr ""
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr ""
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, fuzzy, c-format
 msgid "%llu / %llu blocks (%d%%)"
-msgstr "inod (%llu) mesti kurang dari %u"
+msgstr "inode (%llu) mesti kurang dari %u"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 #, fuzzy
 msgid "Copying "
 msgstr ""
 "Ini adalah perisian bebas; lihat sumber untuk syarat menyalin.  TIADA\n"
-"jaminan disediakan; tidak juga untuk KEBOLEHDAGANGAN atau KEUPAYAAN UNTUK "
-"SESUATU TUJUAN KHUSUS.\n"
+"jaminan disediakan; tidak juga untuk KEBOLEHDAGANGAN atau KEUPAYAAN UNTUK SESUATU TUJUAN KHUSUS.\n"
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr ""
 
-#: misc/e2image.c:652
-#, c-format
+#: misc/e2image.c:662
+#, fuzzy, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr ""
+" untuk %.2f%% dari %.2f %s\n"
+"\n"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, fuzzy, c-format
 msgid "error reading block %llu"
 msgstr "e2label: ralat membaca superblok\n"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr ""
 
-#: misc/e2image.c:722
-#, c-format
+#: misc/e2image.c:732
+#, fuzzy, c-format
 msgid "at %.2f MB/s"
 msgstr ""
+" untuk %.2f%% dari %.2f %s\n"
+"\n"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 #, fuzzy
 msgid "while allocating l1 table"
 msgstr "ketika mengumpukkan penimbal"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 #, fuzzy
 msgid "while allocating l2 cache"
 msgstr "ketika mengumpukkan penimbal"
 
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
 msgstr ""
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 #, fuzzy
 msgid "while allocating ext2_qcow2_image"
 msgstr "ketika mengumpukkan penimbal"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 #, fuzzy
 msgid "while initializing ext2_qcow2_image"
 msgstr "ketika memulakan superblok jurnal"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr ""
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 #, fuzzy
 msgid "while allocating block bitmap"
 msgstr "ketika menulis bitmap blok"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 #, fuzzy
 msgid "while allocating scramble block bitmap"
 msgstr "ketika menulis bitmap blok"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 #, fuzzy
 msgid "Scanning inodes...\n"
-msgstr "Mengesan jadual inode"
+msgstr "Inod"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
+#, fuzzy
 msgid "Can't allocate block buffer"
-msgstr ""
+msgstr "Tak dapat memperuntukkan ruang penimbal"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, fuzzy, c-format
 msgid "while iterating over inode %u"
 msgstr "ketika mengosongkan inod jurnal"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr ""
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 #, fuzzy
 msgid "error reading bitmaps"
 msgstr ""
 "\n"
 "%s: %s: ralat membaca bitmap: %s\n"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 #, fuzzy
 msgid "while opening device file"
 msgstr "ketika membuka %s"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 #, fuzzy
+#| msgid "while writing inode table"
 msgid "while restoring the image table"
 msgstr "ketika menulis jadual inod"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr ""
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr ""
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr ""
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 #, fuzzy
 msgid "checking if mounted"
-msgstr "%s dilekapkan;"
+msgstr " Dilekapkan pada\n"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4655,50 +4778,53 @@ msgid ""
 "Use -f option if you really want to do that.\n"
 msgstr ""
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr ""
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 #, fuzzy
 msgid "Can not stat output\n"
-msgstr "Tidak dapat stat fail `%s'"
+msgstr "ketika cuba untuk stat %s"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, fuzzy, c-format
 msgid "Image (%s) is compressed\n"
-msgstr ""
-"Ditulis oleh by %s, %s, %s,\n"
-"and %s.\n"
+msgstr "Imej"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, fuzzy, c-format
 msgid "Image (%s) is encrypted\n"
-msgstr "IDENT: data berkemungkinan dienkrip dengan DES..."
+msgstr "_Kerangka pada fail imej:"
+
+#: misc/e2image.c:1679
+#, fuzzy, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "_Kerangka pada fail imej:"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1683
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr ""
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr ""
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
 msgstr ""
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 #, fuzzy
 msgid "while allocating check_buf"
 msgstr "ketika mengumpukkan penimbal"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr ""
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr ""
@@ -4706,7 +4832,7 @@ msgstr ""
 #: misc/e2initrd_helper.c:68
 #, fuzzy, c-format
 msgid "Usage: %s -r device\n"
-msgstr "Penggunaan: %s <fail transaksi> <sistemfail>\n"
+msgstr "Penggunaan: %s [-r] [-t]\n"
 
 #: misc/e2label.c:58
 #, c-format
@@ -4716,7 +4842,7 @@ msgstr "e2label: tidak dapat membuka %s\n"
 #: misc/e2label.c:63
 #, fuzzy, c-format
 msgid "e2label: cannot seek to superblock\n"
-msgstr "e2label: tidak dapat membuka %s\n"
+msgstr "e2label: ralat membaca superblok\n"
 
 #: misc/e2label.c:68
 #, c-format
@@ -4726,9 +4852,9 @@ msgstr "e2label: ralat membaca superblok\n"
 #: misc/e2label.c:72
 #, fuzzy, c-format
 msgid "e2label: not an ext2 filesystem\n"
-msgstr "e2label: tidak dapat membuka %s\n"
+msgstr "sistemfail"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr ""
@@ -4743,165 +4869,176 @@ msgstr ""
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: ralat menulis superblok\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr ""
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, fuzzy, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+#| msgid "Usage: %s <transaction file> <filesystem>\n"
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
 msgstr "Penggunaan: %s <fail transaksi> <sistemfail>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr ""
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
+#, fuzzy
 msgid "UUID does not match.\n"
-msgstr ""
+msgstr "Volum %s tidak sepadan %s"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 #, fuzzy
+#| msgid "while reading journal superblock"
 msgid "while reading filesystem superblock."
 msgstr "ketika membaca superblok jurnal"
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 #, fuzzy
+#| msgid "while writing superblock"
 msgid "while fetching superblock"
 msgstr "ketika menulis superblok"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr ""
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, fuzzy, c-format
 msgid "illegal offset - %s"
-msgstr "saiz inode tidak sah - %s"
+msgstr "%s: pilihan salah -- %c\n"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr ""
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, fuzzy, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "ketika membuka %s"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 #, fuzzy
+#| msgid "while reading root inode"
 msgid "while reading undo file"
-msgstr "ketika membaca inod root"
+msgstr "Ralat apabila membaca fail."
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, fuzzy, c-format
+#| msgid "%s: too many devices\n"
 msgid "%s: Not an undo file.\n"
-msgstr "%s: terlalu banyak peranti\n"
+msgstr "Undur fail yang rosak"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr ""
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, fuzzy, c-format
 msgid "%s: Corrupt undo file header.\n"
-msgstr "BUANG HEADER [%s]"
+msgstr "Undur fail yang rosak"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr ""
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr ""
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr ""
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, fuzzy, c-format
+#| msgid "Error while determining whether %s is mounted.\n"
 msgid "Error while determining whether %s is mounted."
 msgstr "Ralat ketika menentukan sama ada %s telah dilekapkan.\n"
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr ""
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, fuzzy, c-format
+#| msgid "while opening %s"
 msgid "while opening `%s'"
 msgstr "ketika membuka %s"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
+#, fuzzy
 msgid "specified offset is too large"
-msgstr ""
+msgstr "kod bagi token %s terlalu besar"
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 #, fuzzy
+#| msgid "while reading bitmaps"
 msgid "while reading keys"
 msgstr "ketika membaca bitmap"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr ""
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr ""
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, fuzzy, c-format
+#| msgid "From block %lu to %lu\n"
 msgid "%s: block %llu is too long."
-msgstr "Dari blok %lu ke %lu\n"
+msgstr "%s: fail terlalu panjang"
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, fuzzy, c-format
 msgid "while fetching block %llu."
 msgstr "ketika menulis bitmap blok"
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr ""
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, fuzzy, c-format
 msgid "while writing block %llu."
-msgstr "e2label: ralat menulis superblok\n"
+msgstr "ketika menulis bitmap blok"
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr ""
@@ -4912,19 +5049,19 @@ msgid "Usage:  findsuper device [skipbytes [startkb]]\n"
 msgstr ""
 
 #: misc/findsuper.c:155
-#, c-format
+#, fuzzy, c-format
 msgid "skipbytes should be a number, not %s\n"
-msgstr ""
+msgstr "\t\tNombor CRL (%s): "
 
 #: misc/findsuper.c:162
-#, c-format
+#, fuzzy, c-format
 msgid "skipbytes must be a multiple of the sector size\n"
-msgstr ""
+msgstr "Saiz rekod mesti dalam gandaan %d."
 
 #: misc/findsuper.c:169
-#, c-format
+#, fuzzy, c-format
 msgid "startkb should be a number, not %s\n"
-msgstr ""
+msgstr "\t\tNombor CRL (%s): "
 
 #: misc/findsuper.c:175
 #, c-format
@@ -4945,17 +5082,15 @@ msgstr ""
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
 msgstr ""
 
 #: misc/findsuper.c:264
-#, c-format
+#, fuzzy, c-format
 msgid ""
 "\n"
 "%11Lu: finished with errno %d\n"
-msgstr ""
+msgstr "Program tempatan [%d] selesai."
 
 #: misc/fsck.c:343
 #, c-format
@@ -4975,78 +5110,75 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: tidak dijumpai\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr ""
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr ""
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr ""
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Selesai dengan %s (status keluar %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr ""
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
 msgstr ""
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr ""
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, 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 ""
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr ""
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr ""
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--menunggu-- (lalu %d)\n"
 
-#: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+#: misc/fsck.c:1085
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: terlalu banyak peranti\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: terlalu banyak hujah\n"
@@ -5054,54 +5186,55 @@ msgstr "%s: terlalu banyak hujah\n"
 #: misc/fuse2fs.c:3745
 #, fuzzy
 msgid "Mounting read-only.\n"
-msgstr "Jika FAIL adalah `-' atau tiada, baca masukan piawai."
+msgstr "Mod lihat (baca sahaja)"
 
 #: misc/fuse2fs.c:3769
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
-msgstr ""
+msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3812
 #, fuzzy, c-format
 msgid "%s: Writing to the journal is not supported.\n"
-msgstr "saiz inode tidak sah - %s"
+msgstr "ketika menulis superblok jurnal"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr ""
 
 #: misc/lsattr.c:75
 #, fuzzy, c-format
+#| msgid "Usage: %s [-RVadlv] [files...]\n"
 msgid "Usage: %s [-RVadlpv] [files...]\n"
 msgstr "Penggunaan: %s [-RVadlv] [fail...]\n"
 
@@ -5112,6 +5245,7 @@ msgstr "Ketika membaca penanda pada %s"
 
 #: misc/lsattr.c:93
 #, fuzzy, c-format
+#| msgid "While reading version on %s"
 msgid "While reading project on %s"
 msgstr "Ketika membaca versi pada %s"
 
@@ -5120,7 +5254,7 @@ msgstr "Ketika membaca versi pada %s"
 msgid "While reading version on %s"
 msgstr "Ketika membaca versi pada %s"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5129,41 +5263,40 @@ 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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Melaksana arahan: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "ketika cuba untuk melaksana '%s'"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 #, fuzzy
 msgid "while processing list of bad blocks from program"
 msgstr "ketika membaca dalam senarai blok buruk dari fail"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Menghentikan....\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5171,95 +5304,101 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 #, fuzzy
 msgid "while marking bad blocks as used"
 msgstr "ketika memeriksa kewarasan blok inode buruk"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+#, fuzzy
+#| msgid "while writing journal inode"
+msgid "while writing reserved inodes"
+msgstr "ketika menulis inod jurnal"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Menulis jadual inode:"
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
 "Could not write %d blocks in inode table starting at %llu: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "selesai                         \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "ketika mencipta direktori root"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "ketika membaca inod root"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 #, fuzzy
 msgid "while setting root inode ownership"
-msgstr "ketika membaca inod root"
+msgstr "ketika menetapkan inod blok buruk"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "ketika mencipta /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 #, fuzzy
 msgid "while looking up /lost+found"
 msgstr "ketika mencipta /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 #, fuzzy
 msgid "while expanding /lost+found"
 msgstr "ketika mencipta /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "ketika menetapkan inod blok buruk"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Kehabisan memori ketika memadam sektor %d-%d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Amaran: tidak dapat membaca blok 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Amaran: tidak dapat memadam sektor %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "ketika memulakan superblok jurnal"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Mengosongkan peranti jurnal:"
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, fuzzy, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "Menggunakan saiz blok peranti jurnal: %d\n"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "ketika menulis superblok jurnal"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr ""
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, fuzzy, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5268,154 +5407,166 @@ msgstr ""
 "amaran: %u blok tidak digunakan.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Label sistemfail=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, fuzzy, c-format
 msgid "OS type: %s\n"
-msgstr "OS tidak diketahui - %s"
+msgstr "Jenis OS:"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Saiz blok=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, fuzzy, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Saiz pecahan=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Saiz pecahan=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr ""
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, fuzzy, c-format
 msgid "%u inodes, %llu blocks\n"
-msgstr "inod (%llu) mesti kurang dari %u"
+msgstr "inode (%llu) mesti kurang dari %u"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr ""
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Blok data pertama=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, fuzzy, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Blok direktori kosong %u (#%d) dalam inode %u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Blok sistemfail maksimum=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "kumpulan blok %u\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "kumpulan blok %u\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inod setiap kumpulan\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, fuzzy, c-format
+#| msgid "Filesystem label=%s\n"
 msgid "Filesystem UUID: %s\n"
 msgstr "Label sistemfail=%s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr ""
 
-#: misc/mke2fs.c:808
-#, c-format
+#: misc/mke2fs.c:822
+#, fuzzy, c-format
 msgid "%s requires '-O 64bit'\n"
-msgstr ""
+msgstr "Pilihan \"%s\" memerlukan hujah"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr ""
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, fuzzy, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "saiz blok tidak sah - %s"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, fuzzy, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "%s: pilihan yang tidak sah -- %c\n"
+
+#: misc/mke2fs.c:867
 #, fuzzy, c-format
 msgid "Invalid offset: %s\n"
-msgstr "saiz inode tidak sah - %s"
+msgstr "Offset rayauan diluar julat"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, fuzzy, c-format
 msgid "Invalid mmp_update_interval: %s\n"
-msgstr "Tetapan pilihan lekapan tidak sah: %s\n"
+msgstr "jarakmasa `%s' tidak sah"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, fuzzy, c-format
+#| msgid "Invalid superblock parameter: %s\n"
 msgid "Invalid # of backup superblocks: %s\n"
-msgstr "%s: %s mencuba backup blok...\n"
+msgstr "%s: Tak dapat backup fail ini"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Parameter stride tidak sah: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Parameter lebar stripe tidak sah: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Parameter ulangsaiz tidak sah: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:965
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:989
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, fuzzy, c-format
 msgid "Invalid root_owner: '%s'\n"
-msgstr "Ralat mencipta root @d (%s): %m\n"
+msgstr "Pemilik tidak sah"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1069
+#, fuzzy, c-format
+msgid "Invalid encoding: %s"
+msgstr "pengekodan tidak diketahui `%s'"
+
+#: misc/mke2fs.c:1087
 #, c-format
 msgid ""
 "\n"
@@ -5438,11 +5589,13 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5450,42 +5603,52 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1125
+#, fuzzy, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr "RALAT DALAMAN pada %s:%d: regex hilang atau tidak sah"
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr ""
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Tetapan pilihan sistemfail tidak sah: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Tetapan pilihan lekapan tidak sah: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
 "Your mke2fs.conf file does not define the %s filesystem type.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 #, fuzzy
 msgid "Aborting...\n"
 msgstr "Menghentikan....\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5493,156 +5656,157 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1608
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "saiz blok tidak sah - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1661
 #, fuzzy, c-format
 msgid "invalid cluster size - %s"
-msgstr "saiz blok tidak sah - %s"
+msgstr "saiz pecahan tidak sah - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr ""
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "kelakuan ralat buruk - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr ""
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 msgid "blocks per group must be multiple of 8"
 msgstr ""
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "Nombor tidak sah untuk saiz flex_bg"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
 msgstr ""
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, fuzzy, c-format
+#| msgid "inodes (%llu) must be less than %u"
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "inod (%llu) mesti kurang dari %u"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1744
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "saiz inode tidak sah - %s"
 
-#: misc/mke2fs.c:1684
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
+#: misc/mke2fs.c:1757
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
 msgstr ""
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1768
 #, fuzzy
 msgid "in malloc for bad_blocks_filename"
 msgstr "ketika memeriksa kewarasan blok inode buruk"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1777
 #, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "nombor inode buruk - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1814
 #, fuzzy
+#| msgid "while allocating buffers"
 msgid "while allocating fs_feature string"
 msgstr "ketika mengumpukkan penimbal"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1831
 #, c-format
 msgid "bad revision level - %s"
 msgstr "tahap semakan buruk - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, fuzzy, c-format
+#| msgid "while trying to resize %s"
 msgid "while trying to create revision %d"
 msgstr "Ketika cuba menambah kumpulan #%d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 msgid "The -t option may only be used once"
 msgstr ""
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1858
 msgid "The -T option may only be used once"
 msgstr ""
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, fuzzy, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "ketika cuba untuk membuka titiklekap %s"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1920
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1926
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Menggunakan saiz blok peranti jurnal: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1937
 #, fuzzy, c-format
 msgid "invalid blocks '%s' on device '%s'"
-msgstr "Mencipta jurnal pada peranti %s: "
+msgstr "nombor peranti major tidak sah %s"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "sistemfail"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr ""
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
 msgstr ""
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5650,132 +5814,140 @@ msgid ""
 "\tto re-read your partition table.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:2015
 msgid "Filesystem larger than apparent device size."
 msgstr ""
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:2035
 msgid "Failed to parse fs types list\n"
 msgstr ""
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2085
 #, fuzzy
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "Cdrdao %1 tidak menyokong overburning."
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2090
 #, fuzzy
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "Cdrdao %1 tidak menyokong overburning."
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2100
+#, fuzzy
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "Cdrdao %1 tidak menyokong overburning."
+
+#: misc/mke2fs.c:2110
 msgid "while trying to determine hardware sector size"
 msgstr ""
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2116
 #, fuzzy
 msgid "while trying to determine physical sector size"
 msgstr "ketika cuba untuk memadam %s"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2148
 #, fuzzy
 msgid "while setting blocksize; too small for device\n"
 msgstr "ketika menetapkan maklumat checksum kumpulan blok"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2153
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2177
 #, 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:2098
+#: misc/mke2fs.c:2191
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr ""
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2228
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2238
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2251
 #, fuzzy, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "kiraan blok tidak sah - %s"
 
-#: misc/mke2fs.c:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr ""
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2317
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2319
 #, 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 ""
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2340
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2344
 #, 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 ""
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
+msgstr ""
+
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr ""
+
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -5785,17 +5957,28 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2449
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr ""
+
+#: misc/mke2fs.c:2465
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+
+#: misc/mke2fs.c:2480
 msgid "Can't support bigalloc feature without extents feature"
 msgstr ""
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5803,44 +5986,39 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2516
 msgid "blocks per group count out of range"
 msgstr ""
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2538
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2550
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr ""
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr ""
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2587
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr ""
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2601
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5848,160 +6026,161 @@ msgid ""
 "\tor lower inode count (-N).\n"
 msgstr ""
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2788
 #, fuzzy
 msgid "Discarding device blocks: "
-msgstr "%s adalah bukan peranti jurnal.\n"
+msgstr "  Blok bebas: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 #, fuzzy
 msgid "failed - "
-msgstr "gagal menulis"
+msgstr "GAGAL"
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2863
 #, fuzzy
 msgid "while initializing quota context"
 msgstr "ketika memulakan superblok jurnal"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2870
 #, fuzzy
+#| msgid "while writing journal inode"
 msgid "while writing quota inodes"
-msgstr "ketika menulis inod jurnal"
+msgstr "ketika menulis bitmap blok"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2895
 #, fuzzy, c-format
+#| msgid "bad error behavior - %s"
 msgid "bad error behavior in profile - %s"
 msgstr "kelakuan ralat buruk - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2971
+#, fuzzy
+msgid "in malloc for android_sparse_params"
+msgstr "ketika memeriksa kewarasan blok inode buruk"
+
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "ketika menetapkan superblok"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
+#: misc/mke2fs.c:3016
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr ""
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "OS tidak diketahui - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 #, fuzzy
 msgid "Allocating group tables: "
 msgstr "ketika mengumpukkan penimbal"
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr ""
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 #, fuzzy
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
 msgstr "ketika menulis bitmap blok"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr ""
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3279
 msgid "while reserving blocks for online resize"
 msgstr ""
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "jurnal"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Menambah jurnal ke peranti %s:"
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to add journal to device %s"
 msgstr ""
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "selesai\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 msgid "Skipping journal creation in super-only mode\n"
 msgstr ""
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Mencipta jurnal (%u blok):"
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 #, fuzzy
 msgid ""
 "\n"
 "\twhile trying to create journal"
 msgstr "ketika cuba memulakan program"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3357
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3373
+#, fuzzy
 msgid "Copying files into the device: "
-msgstr ""
+msgstr "Mengosongkan peranti jurnal:"
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3379
 #, fuzzy
 msgid "while populating file system"
-msgstr "ketika mengumpukkan penimbal"
+msgstr "Abai fail tetapan sistem"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 
-#: misc/mke2fs.c:3230
+#: misc/mke2fs.c:3393
 #, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr "ketika menulis superblok jurnal"
+msgid "while writing out and closing file system"
+msgstr "Abai fail tetapan sistem"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6009,29 +6188,32 @@ msgstr ""
 "selesai\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
+#, fuzzy, c-format
+msgid "while zeroing block %llu for hugefile"
+msgstr "ketika menetapkan maklumat checksum kumpulan blok"
+
+#: misc/mk_hugefiles.c:515
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
+#, fuzzy
 msgid "Huge files will be zero'ed\n"
-msgstr ""
+msgstr " %d fail,"
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:584
 #, fuzzy, c-format
 msgid "Creating %lu huge file(s) "
-msgstr "fail biasa"
+msgstr "Mencipta fail biasa %s\n"
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:586
 #, fuzzy, c-format
 msgid "with %llu blocks each"
-msgstr ""
-"amaran: %u blok tidak digunakan.\n"
-"\n"
+msgstr "Tetapkan bilangan blok pada setiap tepian"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:595
 #, fuzzy, c-format
 msgid "while creating huge file %lu"
 msgstr "ketika mengosongkan inod jurnal"
@@ -6058,12 +6240,12 @@ msgstr "Tidak dapat membuka pengkalan data %s: %s"
 #: misc/partinfo.c:59
 #, fuzzy, c-format
 msgid "Cannot get geometry of %s: %s"
-msgstr "e2label: tidak dapat membuka %s\n"
+msgstr "tidak dapat mengambil maklumat pada fail `%s'"
 
 #: misc/partinfo.c:67
 #, fuzzy, c-format
 msgid "Cannot get size of %s: %s"
-msgstr "saiz blok tidak sah - %s"
+msgstr "tidak dapat mengambil maklumat pada fail `%s'"
 
 #: misc/partinfo.c:73
 #, c-format
@@ -6071,297 +6253,317 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr ""
 
 #: misc/tune2fs.c:119
-msgid "Please run e2fsck -f on the filesystem.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
 msgstr ""
 
 #: misc/tune2fs.c:121
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr ""
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
 msgstr ""
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
 msgstr ""
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Superblok jurnal tidak dijumpai!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 #, fuzzy
 msgid "while trying to open external journal"
 msgstr "ketika cuba untuk membuka titiklekap %s"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s adalah bukan peranti jurnal.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, fuzzy, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr "ketika membaca superblok jurnal"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "Jurnal dibuang\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "ketika membaca bitmap"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
 msgstr "ketika mengosongkan inod jurnal"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "ketika menulis inod jurnal"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(dan ulangboot selepas itu!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr ""
 
-#: misc/tune2fs.c:479
-#, c-format
+#: misc/tune2fs.c:489
+#, fuzzy, c-format
 msgid "Please run `resize2fs %s %s"
-msgstr ""
+msgstr "ketika cuba untuk melaksana '%s'"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
-msgstr ""
+msgstr " -z \"%s\""
 
-#: misc/tune2fs.c:485
-#, c-format
+#: misc/tune2fs.c:495
+#, fuzzy, c-format
 msgid "' to enable 64-bit mode.\n"
-msgstr ""
+msgstr "enable/disable"
 
-#: misc/tune2fs.c:487
-#, c-format
+#: misc/tune2fs.c:497
+#, fuzzy, c-format
 msgid "' to disable 64-bit mode.\n"
-msgstr ""
+msgstr "enable/disable"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 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:1082
+#: misc/tune2fs.c:1143
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 #, fuzzy
 msgid "Error while reading bitmaps\n"
 msgstr "ketika membaca bitmap"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr ""
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1174
 #, fuzzy
 msgid "while reading MMP block."
-msgstr "ketika membaca penanda pada %s"
+msgstr "Pengiraan bitmap MMP tidak sepadan"
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr ""
+
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "Sistemfail telah mempunyai jurnal.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, fuzzy, c-format
 msgid ""
 "\n"
 "\twhile trying to open journal on %s\n"
 msgstr "ketika cuba untuk membuka titiklekap %s"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Mencipta jurnal pada peranti %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, fuzzy, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "Menambah jurnal ke peranti %s:"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "Mencipta inode jurnal:"
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
 msgstr ""
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1588
 #, fuzzy
+#| msgid "while initializing journal superblock"
 msgid "while initializing quota context in support library"
 msgstr "ketika memulakan superblok jurnal"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1603
 #, fuzzy, c-format
 msgid "while updating quota limits (%d)"
 msgstr "ketika menetapkan inod blok buruk"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1611
 #, fuzzy, c-format
+#| msgid "while writing inode table"
 msgid "while writing quota file (%d)"
 msgstr "ketika menulis jadual inod"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1629
 #, fuzzy, c-format
+#| msgid "while reading root inode"
 msgid "while removing quota file (%d)"
 msgstr "ketika membaca inod root"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6369,93 +6571,99 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr ""
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "kiraan lekapan buruk - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "gid/nama kumpulan buruk - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "selamasa buruk - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
+#, fuzzy
 msgid "-o may only be specified once"
-msgstr ""
+msgstr "hanya satu jenis senarai boleh dinyatakan"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
+#, fuzzy
 msgid "-O may only be specified once"
-msgstr ""
+msgstr "hanya satu jenis senarai boleh dinyatakan"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, fuzzy, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "kiraan lekapan buruk - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "uid/nama pengguna buruk - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "saiz inode buruk - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr ""
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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] ""
-msgstr[1] ""
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2078
+#, fuzzy, c-format
+#| msgid "Setting filetype for @E to %N.\n"
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "Menetapkan jenisfail untuk @E ke %N.\n"
+
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Stride RAID tidak sah: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Lebar stripe RAID tidak sah: %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2126
 #, fuzzy, c-format
 msgid "Invalid hash algorithm: %s\n"
-msgstr "GPGME: Algoritma hash salah dilaporkan: %i"
+msgstr "Algoritma hash tidak diketahui."
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2132
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2151
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6467,279 +6675,287 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 #, fuzzy
 msgid "Failed to read inode bitmap\n"
-msgstr "gagal membaca"
+msgstr ", Bitmap inode di"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 #, fuzzy
 msgid "Failed to read block bitmap\n"
-msgstr "gagal membaca"
+msgstr "  Bitmap block di"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "blok untuk dipindahkan"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr ""
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2653
 msgid "Not enough space to increase inode size \n"
 msgstr ""
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2658
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr ""
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
 msgstr ""
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2900
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+
+#: misc/tune2fs.c:2907
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2919
 #, fuzzy
+#| msgid "%s is not a journal device.\n"
 msgid "Cannot modify a journal device.\n"
-msgstr "%s adalah bukan peranti jurnal.\n"
+msgstr "Mencipta jurnal pada peranti %s: "
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, fuzzy, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Menetapkan saiz inod %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 #, fuzzy
 msgid "Shrinking inode size is not supported\n"
 msgstr "saiz inode tidak sah - %s"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, fuzzy, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "saiz inode tidak sah - %s"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+
+#: misc/tune2fs.c:3009
+#, fuzzy, c-format
+msgid "Recovering journal.\n"
+msgstr "ketika mendapatkan semula jurnal ext3 bagi %s"
+
+#: misc/tune2fs.c:3028
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3034
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Menetapkan kelakuan ralat ke %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3049
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr ""
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3056
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr ""
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr ""
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3076
 #, fuzzy, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Memeriksa blok %lu ke %lu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3081
 #, fuzzy
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
 msgstr "Sistemfail telah mempunyai jurnal.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
 "Sparse superblock flag set.  %s"
 msgstr ""
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3113
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3145
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr ""
 
-#: misc/tune2fs.c:3024
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
+#: misc/tune2fs.c:3163
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3048
-msgid "The UUID may only be changed when the filesystem is unmounted.\n"
+#: misc/tune2fs.c:3181
+msgid "Setting the UUID on this filesystem could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
+#: misc/tune2fs.c:3196
+msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "Format UUID tidak sah\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 #, fuzzy
 msgid "Need to update journal superblock.\n"
 msgstr "ketika memulakan superblok jurnal"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3274
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Menetapkan saiz inod %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 #, fuzzy
 msgid "Failed to change inode size\n"
-msgstr "saiz inode tidak sah - %s"
+msgstr "gagal menukar hakmilik %s ke %s\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Menetapkan saiz stride ke %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Menetapkan lebar stripe ke %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3322
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, fuzzy, c-format
-msgid "Recovering journal.\n"
-msgstr "ketika mendapatkan semula jurnal ext3 bagi %s"
-
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr ""
 
-#: misc/util.c:104
+#: misc/util.c:105
 #, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
+#| msgid "Proceed anyway? (y,n) "
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
 msgstr "Teruskan juga? (y,t)"
 
-#: misc/util.c:108
+#: misc/util.c:109
 #, fuzzy
+#| msgid "Proceed anyway? (y,n) "
 msgid "Proceed anyway? (y,N) "
 msgstr "Teruskan juga? (y,t)"
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
-msgstr "tidak akam membuat %s disini!\n"
+msgstr "tidak akan membuat %s disini!\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr "mke2fs dipaksa juga.\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr ""
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
 "Could not find journal device matching %s\n"
 msgstr ""
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -6756,7 +6972,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
@@ -6764,7 +6980,7 @@ msgstr ""
 "\n"
 "Sistemfail terlalu kecil untuk jurnal\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -6772,7 +6988,7 @@ msgid ""
 "between 1024 and 10240000 blocks.  Aborting.\n"
 msgstr ""
 
-#: misc/util.c:259
+#: misc/util.c:262
 #, fuzzy
 msgid ""
 "\n"
@@ -6781,7 +6997,7 @@ msgstr ""
 "\n"
 "Sistemfail terlalu kecil untuk jurnal\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
@@ -6801,12 +7017,12 @@ msgstr ""
 #: misc/uuidd.c:53
 #, c-format
 msgid "       %s -k\n"
-msgstr ""
+msgstr "       %s -k\n"
 
 #: misc/uuidd.c:155
 #, fuzzy
 msgid "bad arguments"
-msgstr "%s: terlalu banyak hujah\n"
+msgstr "Sijil buruk"
 
 #: misc/uuidd.c:173
 #, fuzzy
@@ -6816,12 +7032,12 @@ msgstr "IDENT: connect() gagal"
 #: misc/uuidd.c:192
 #, fuzzy
 msgid "write"
-msgstr "Gagal menulis %s\n"
+msgstr "tidak dapat menulis fail stat"
 
 #: misc/uuidd.c:200
 #, fuzzy
 msgid "read count"
-msgstr "gagal membaca"
+msgstr "Kiraan Perkataan"
 
 #: misc/uuidd.c:206
 #, fuzzy
@@ -6841,12 +7057,12 @@ msgstr ""
 #: misc/uuidd.c:308
 #, fuzzy, c-format
 msgid "Couldn't bind unix socket %s: %s\n"
-msgstr "Tidak dapat menyambung semula %i: %m\n"
+msgstr "Tidak dapat menulis pada soket! %s."
 
 #: misc/uuidd.c:316
 #, fuzzy, c-format
 msgid "Couldn't listen on unix socket %s: %s\n"
-msgstr "Tidak dapat menyambung semula %i: %m\n"
+msgstr "Tidak dapat menulis pada soket! %s."
 
 #: misc/uuidd.c:354
 #, fuzzy, c-format
@@ -6873,7 +7089,6 @@ msgstr ""
 msgid "Generated time UUID %s and subsequent UUID\n"
 msgid_plural "Generated time UUID %s and %d subsequent UUIDs\n"
 msgstr[0] ""
-msgstr[1] ""
 
 #: misc/uuidd.c:421
 #, fuzzy, c-format
@@ -6888,7 +7103,7 @@ msgstr "nilai $ tidak sah: $%d"
 #: misc/uuidd.c:477 misc/uuidd.c:499
 #, fuzzy, c-format
 msgid "Bad number: %s\n"
-msgstr "%s mesti diikuti dengan nombor positif"
+msgstr "versi buruk - %s\n"
 
 #: misc/uuidd.c:534 misc/uuidd.c:563
 #, fuzzy, c-format
@@ -6896,11 +7111,10 @@ msgid "Error calling uuidd daemon (%s): %s\n"
 msgstr "Ralat mencipta /@l @d (%s): %m\n"
 
 #: misc/uuidd.c:544
-#, c-format
+#, fuzzy, c-format
 msgid "%s and subsequent UUID\n"
 msgid_plural "%s and subsequent %d UUIDs\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Format UUID tidak sah\n"
 
 #: misc/uuidd.c:548
 #, fuzzy
@@ -6918,9 +7132,9 @@ msgid "Couldn't kill uuidd running at pid %d: %s\n"
 msgstr ""
 
 #: misc/uuidd.c:592
-#, c-format
+#, fuzzy, c-format
 msgid "Killed uuidd running at pid %d\n"
-msgstr ""
+msgstr "Program ini dilaksanakan sebagai proses bernombor %(pid)d."
 
 #: misc/uuidgen.c:32
 #, c-format
@@ -6939,41 +7153,40 @@ msgstr ""
 #: resize/main.c:49
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Memanjangkan jadual inode"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Memindahkan blok"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Mengesan jadual inode"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Mengemaskini rujukan inode"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Memindah jadual inode"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Katalaluan tidak diketahui?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr ""
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -6981,47 +7194,47 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "ketika membuka %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, fuzzy, c-format
 msgid "while getting stat information for %s"
 msgstr "ketika cuba untuk stat %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr ""
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, fuzzy, c-format
 msgid "Invalid new size: %s\n"
-msgstr "saiz blok tidak sah - %s"
+msgstr "%s: fail saiz tidak sah"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr ""
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr ""
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Panjang stride tidak sah"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7029,82 +7242,80 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr ""
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
 msgstr ""
 
-#: resize/main.c:575
+#: resize/main.c:581
 #, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr ""
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
 msgstr ""
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, fuzzy, c-format
+#| msgid "The filesystem already has a journal.\n"
 msgid "The filesystem is already 64-bit.\n"
 msgstr "Sistemfail telah mempunyai jurnal.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, fuzzy, c-format
+#| msgid "The filesystem already has a journal.\n"
 msgid "The filesystem is already 32-bit.\n"
 msgstr "Sistemfail telah mempunyai jurnal.\n"
 
-#: resize/main.c:608
-#, c-format
+#: resize/main.c:613
+#, fuzzy, c-format
 msgid "Converting the filesystem to 64-bit.\n"
-msgstr ""
+msgstr "Sistem fail       "
 
-#: resize/main.c:610
-#, c-format
+#: resize/main.c:615
+#, fuzzy, c-format
 msgid "Converting the filesystem to 32-bit.\n"
-msgstr ""
+msgstr "Sistem fail       "
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr ""
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "ketika cuba untuk mengulangsaiz %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
 "after the aborted resize operation.\n"
 msgstr ""
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, fuzzy, c-format
 msgid "while trying to truncate %s"
 msgstr "ketika cuba untuk memadam %s"
@@ -7121,7 +7332,7 @@ msgstr ""
 #: resize/online.c:90
 #, fuzzy
 msgid "On-line shrinking not supported"
-msgstr "Arahan tidak disokong."
+msgstr "Sijil tidak disokong"
 
 #: resize/online.c:114
 msgid "Filesystem does not support online resizing"
@@ -7166,55 +7377,57 @@ msgstr ""
 msgid "While trying to extend the last group"
 msgstr "Ketika cuba memanjangkan kumpulan terakhir"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Ketika cuba menambah kumpulan #%d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, 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 ""
 
 #: resize/resize2fs.c:759
-#, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "inod (%llu) mesti kurang dari %u"
+#, fuzzy, c-format
+#| msgid "inodes (%llu) must be less than %u"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "inode (%llu) mesti kurang dari %u"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "blok dikhaskan"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "blok meta-data"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 #, fuzzy
+#| msgid "meta-data blocks"
 msgid "new meta blocks"
 msgstr "blok meta-data"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:11
-msgid "EXT2FS Library version 1.43.4-WIP"
-msgstr ""
+#, fuzzy
+msgid "EXT2FS Library version 1.45.3"
+msgstr "Versi pustaka tasn1 terlalu lama."
 
 #: lib/ext2fs/ext2_err.c:12
+#, fuzzy
 msgid "Wrong magic number for ext2_filsys structure"
-msgstr ""
+msgstr "Nombor ajaib yang salah --- RESERVED_13"
 
 #: lib/ext2fs/ext2_err.c:13
 msgid "Wrong magic number for badblocks_list structure"
@@ -7261,8 +7474,9 @@ msgid "Wrong magic number for directory block list structure"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:24
+#, fuzzy
 msgid "Wrong magic number for icount structure"
-msgstr ""
+msgstr "Nombor ajaib yang salah --- RESERVED_13"
 
 #: lib/ext2fs/ext2_err.c:25
 msgid "Wrong magic number for Powerquest io_channel structure"
@@ -7303,12 +7517,12 @@ msgstr ""
 #: lib/ext2fs/ext2_err.c:33
 #, fuzzy
 msgid "Can't read group descriptors"
-msgstr ", Penghurai kumpulan di"
+msgstr ", Penerangan kumpulan di "
 
 #: lib/ext2fs/ext2_err.c:34
 #, fuzzy
 msgid "Can't write group descriptors"
-msgstr ", Penghurai kumpulan di"
+msgstr ", Penerangan kumpulan di "
 
 #: lib/ext2fs/ext2_err.c:35
 msgid "Corrupt group descriptor: bad block for block bitmap"
@@ -7361,13 +7575,14 @@ msgid "Can't read next inode"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:45
+#, fuzzy
 msgid "Filesystem has unexpected block size"
-msgstr ""
+msgstr "%s: saiz alamat mempunyai nilai %u tidak dijangka\n"
 
 #: lib/ext2fs/ext2_err.c:46
 #, fuzzy
 msgid "EXT2 directory corrupted"
-msgstr "direktori"
+msgstr "Fail Ext2 sudah wujud"
 
 #: lib/ext2fs/ext2_err.c:47
 msgid "Attempt to read block from filesystem resulted in short read"
@@ -7380,7 +7595,7 @@ msgstr ""
 #: lib/ext2fs/ext2_err.c:49
 #, fuzzy
 msgid "No free space in the directory"
-msgstr "direktori"
+msgstr "Tiada ruang bebas dalam data sebaris"
 
 #: lib/ext2fs/ext2_err.c:50
 #, fuzzy
@@ -7405,7 +7620,7 @@ msgstr "Nombor tidak sah untuk saiz flex_bg"
 #: lib/ext2fs/ext2_err.c:54
 #, fuzzy
 msgid "Internal error in ext2fs_expand_dir"
-msgstr "RALAT DALAMAN"
+msgstr "Ralat dalaman GnuTLS."
 
 #: lib/ext2fs/ext2_err.c:55
 msgid "Not enough space to build proposed filesystem"
@@ -7461,12 +7676,12 @@ msgstr "ketika membaca inod jurnal"
 #: lib/ext2fs/ext2_err.c:67
 #, fuzzy
 msgid "Block bitmaps are not the same"
-msgstr "Perkara yang sama bagi hujah pilihan.\n"
+msgstr "ketika membaca bitmap"
 
 #: lib/ext2fs/ext2_err.c:68
 #, fuzzy
 msgid "Inode bitmaps are not the same"
-msgstr "Perkara yang sama bagi hujah pilihan.\n"
+msgstr "ketika membaca bitmap"
 
 #: lib/ext2fs/ext2_err.c:69
 msgid "Illegal or malformed device name"
@@ -7479,7 +7694,7 @@ msgstr ""
 #: lib/ext2fs/ext2_err.c:71
 #, fuzzy
 msgid "The ext2 superblock is corrupt"
-msgstr "ketika membaca superblok jurnal"
+msgstr "Superblock jurnal ini rosak"
 
 #: lib/ext2fs/ext2_err.c:72
 msgid "Illegal generic bit number passed to ext2fs_mark_generic_bitmap"
@@ -7523,7 +7738,7 @@ msgstr ""
 #: lib/ext2fs/ext2_err.c:81
 #, fuzzy
 msgid "Memory allocation failed"
-msgstr "Tidak cukup memori"
+msgstr "Ralat dalaman dalam pengumpukan memori."
 
 #: lib/ext2fs/ext2_err.c:82
 msgid "Invalid argument passed to ext2 library"
@@ -7540,31 +7755,32 @@ msgstr ""
 #: lib/ext2fs/ext2_err.c:85
 #, fuzzy
 msgid "Ext2 inode is not a directory"
-msgstr "direktori"
+msgstr "Fail Ext2 sudah wujud"
 
 #: lib/ext2fs/ext2_err.c:86
 #, fuzzy
 msgid "Too many references in table"
-msgstr "Sepadan, tetapi terlalu banyak subrentetan."
+msgstr "Terlalu banyak ralat, keluar"
 
 #: lib/ext2fs/ext2_err.c:87
 #, fuzzy
 msgid "File not found by ext2_lookup"
-msgstr "FAIL"
+msgstr "Ralat ditemui dalam fail .nanorc"
 
 #: lib/ext2fs/ext2_err.c:88
 #, fuzzy
 msgid "File open read-only"
-msgstr "Jika FAIL adalah `-' atau tiada, baca masukan piawai."
+msgstr "Mod lihat (baca sahaja)"
 
 #: lib/ext2fs/ext2_err.c:89
 #, fuzzy
 msgid "Ext2 directory block not found"
-msgstr "Menulis bitmap blok"
+msgstr "Senarai blok direktori Ext2fs kosong"
 
 #: lib/ext2fs/ext2_err.c:90
+#, fuzzy
 msgid "Ext2 directory already exists"
-msgstr ""
+msgstr "Fail Ext2 sudah wujud"
 
 #: lib/ext2fs/ext2_err.c:91
 msgid "Unimplemented ext2 library function"
@@ -7573,17 +7789,17 @@ msgstr ""
 #: lib/ext2fs/ext2_err.c:92
 #, fuzzy
 msgid "User cancel requested"
-msgstr "Nama pengguna tidak sah: %s"
+msgstr "pengguna"
 
 #: lib/ext2fs/ext2_err.c:93
 #, fuzzy
 msgid "Ext2 file too big"
-msgstr "Regular expression terlalu besar"
+msgstr "Fail Ext2 sudah wujud"
 
 #: lib/ext2fs/ext2_err.c:94
 #, fuzzy
 msgid "Supplied journal device not a block device"
-msgstr "Menggunakan saiz blok peranti jurnal: %d\n"
+msgstr "%s adalah bukan peranti khas.\n"
 
 #: lib/ext2fs/ext2_err.c:95
 #, fuzzy
@@ -7597,11 +7813,12 @@ msgstr ""
 #: lib/ext2fs/ext2_err.c:97
 #, fuzzy
 msgid "Unsupported journal version"
-msgstr "%s tidak mempunyai ciri disokong:"
+msgstr "jurnal"
 
 #: lib/ext2fs/ext2_err.c:98
+#, fuzzy
 msgid "Error loading external journal"
-msgstr ""
+msgstr "Ralat memuatkan cecincin kunci."
 
 #: lib/ext2fs/ext2_err.c:99
 #, fuzzy
@@ -7611,11 +7828,12 @@ msgstr "Superblok jurnal tidak dijumpai!\n"
 #: lib/ext2fs/ext2_err.c:100
 #, fuzzy
 msgid "Directory hash unsupported"
-msgstr "direktori"
+msgstr "Algoritma hash tidak diketahui."
 
 #: lib/ext2fs/ext2_err.c:101
+#, fuzzy
 msgid "Illegal extended attribute block number"
-msgstr ""
+msgstr "Semakan blok atribut lanjutan tidak sepadan dengan blok"
 
 #: lib/ext2fs/ext2_err.c:102
 msgid "Cannot create filesystem with requested number of inodes"
@@ -7624,7 +7842,7 @@ msgstr ""
 #: lib/ext2fs/ext2_err.c:103
 #, fuzzy
 msgid "E2image snapshot not in use"
-msgstr "Mesti menggunakan '-v', =, - atau +\n"
+msgstr "Guna%"
 
 #: lib/ext2fs/ext2_err.c:104
 #, fuzzy
@@ -7634,7 +7852,7 @@ msgstr " Penghurai kumpulan di"
 #: lib/ext2fs/ext2_err.c:105
 #, fuzzy
 msgid "Resize inode is corrupt"
-msgstr "ketika cuba untuk mengulangsaiz %s"
+msgstr "Pengepala takat rosak"
 
 #: lib/ext2fs/ext2_err.c:106
 msgid "Tried to set block bmap with missing indirect block"
@@ -7643,12 +7861,12 @@ msgstr ""
 #: lib/ext2fs/ext2_err.c:107
 #, fuzzy
 msgid "TDB: Success"
-msgstr "Berjaya"
+msgstr "Berjaya."
 
 #: lib/ext2fs/ext2_err.c:108
 #, fuzzy
 msgid "TDB: Corrupt database"
-msgstr "Pengkalan data tidak dinyatakan"
+msgstr "TDB: Tulis tidak dibenarkan"
 
 #: lib/ext2fs/ext2_err.c:109
 #, fuzzy
@@ -7661,13 +7879,14 @@ msgid "TDB: Locking error"
 msgstr "tdb_open %s gagal\n"
 
 #: lib/ext2fs/ext2_err.c:111
+#, fuzzy
 msgid "TDB: Out of memory"
-msgstr ""
+msgstr "nano tidak cukup memori!"
 
 #: lib/ext2fs/ext2_err.c:112
 #, fuzzy
 msgid "TDB: Record exists"
-msgstr "Rekod dijumpai untuk `%s'."
+msgstr "tdb_open %s gagal\n"
 
 #: lib/ext2fs/ext2_err.c:113
 msgid "TDB: Lock exists on other keys"
@@ -7679,18 +7898,17 @@ msgid "TDB: Invalid parameter"
 msgstr "Parameter lebar stripe tidak sah: %s\n"
 
 #: lib/ext2fs/ext2_err.c:115
+#, fuzzy
 msgid "TDB: Record does not exist"
-msgstr ""
+msgstr "pengguna %s tidak wujud"
 
 #: lib/ext2fs/ext2_err.c:116
-#, fuzzy
 msgid "TDB: Write not permitted"
-msgstr "gagal menulis"
+msgstr "TDB: Tulis tidak dibenarkan"
 
 #: lib/ext2fs/ext2_err.c:117
-#, fuzzy
 msgid "Ext2fs directory block list is empty"
-msgstr "Blok direktori kosong %u (#%d) dalam inode %u\n"
+msgstr "Senarai blok direktori Ext2fs kosong"
 
 #: lib/ext2fs/ext2_err.c:118
 msgid "Attempt to modify a block mapping via a read-only block iterator"
@@ -7714,83 +7932,75 @@ msgstr ""
 
 #: lib/ext2fs/ext2_err.c:123
 msgid "Wrong magic number --- RESERVED_13"
-msgstr ""
+msgstr "Nombor ajaib yang salah --- RESERVED_13"
 
 #: lib/ext2fs/ext2_err.c:124
 msgid "Wrong magic number --- RESERVED_14"
-msgstr ""
+msgstr "Nombor ajaib yang salah --- RESERVED_14"
 
 #: lib/ext2fs/ext2_err.c:125
 msgid "Wrong magic number --- RESERVED_15"
-msgstr ""
+msgstr "Nombor ajaib yang salah --- RESERVED_15"
 
 #: lib/ext2fs/ext2_err.c:126
 msgid "Wrong magic number --- RESERVED_16"
-msgstr ""
+msgstr "Nombor ajaib yang salah --- RESERVED_16"
 
 #: lib/ext2fs/ext2_err.c:127
 msgid "Wrong magic number --- RESERVED_17"
-msgstr ""
+msgstr "Nombor ajaib yang salah --- RESERVED_17"
 
 #: lib/ext2fs/ext2_err.c:128
 msgid "Wrong magic number --- RESERVED_18"
-msgstr ""
+msgstr "Nombor ajaib yang salah --- RESERVED_18"
 
 #: lib/ext2fs/ext2_err.c:129
 msgid "Wrong magic number --- RESERVED_19"
-msgstr ""
+msgstr "Nombor ajaib yang salah --- RESERVED_19"
 
 #: lib/ext2fs/ext2_err.c:130
-#, fuzzy
 msgid "Corrupt extent header"
-msgstr "BUANG HEADER [%s]"
+msgstr "Pengepala takat rosak"
 
 #: lib/ext2fs/ext2_err.c:131
-#, fuzzy
 msgid "Corrupt extent index"
-msgstr "# Loggokan extent:\n"
+msgstr "Takat indeks rosak"
 
 #: lib/ext2fs/ext2_err.c:132
-#, fuzzy
 msgid "Corrupt extent"
-msgstr "# Loggokan extent:\n"
+msgstr "Takat rosak"
 
 #: lib/ext2fs/ext2_err.c:133
 msgid "No free space in extent map"
-msgstr ""
+msgstr "Tiada ruang bebas dalam peta takat"
 
 #: lib/ext2fs/ext2_err.c:134
 msgid "Inode does not use extents"
-msgstr ""
+msgstr "Inode tidak menggunakan takat"
 
 #: lib/ext2fs/ext2_err.c:135
-#, fuzzy
 msgid "No 'next' extent"
-msgstr "# Loggokan extent:\n"
+msgstr "Tiada takat 'seterusnya'"
 
 #: lib/ext2fs/ext2_err.c:136
-#, fuzzy
 msgid "No 'previous' extent"
-msgstr "pengisytiharan terdahulu"
+msgstr "Tiada takat 'terdahulu'"
 
 #: lib/ext2fs/ext2_err.c:137
-#, fuzzy
 msgid "No 'up' extent"
-msgstr "# Loggokan extent:\n"
+msgstr "Tiada takat 'atas'"
 
 #: lib/ext2fs/ext2_err.c:138
-#, fuzzy
 msgid "No 'down' extent"
-msgstr "# Loggokan extent:\n"
+msgstr "Tiada takat 'bawah'"
 
 #: lib/ext2fs/ext2_err.c:139
 msgid "No current node"
-msgstr ""
+msgstr "Tiada nod semasa"
 
 #: lib/ext2fs/ext2_err.c:140
-#, fuzzy
 msgid "Ext2fs operation not supported"
-msgstr "Arahan tidak disokong."
+msgstr "Operasi Ext2fs tidak disokong"
 
 #: lib/ext2fs/ext2_err.c:141
 msgid "No room to insert extent in node"
@@ -7801,18 +8011,16 @@ msgid "Splitting would result in empty node"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:143
-#, fuzzy
 msgid "Extent not found"
-msgstr "# Loggokan extent:\n"
+msgstr "Takat tidak dijumpai"
 
 #: lib/ext2fs/ext2_err.c:144
 msgid "Operation not supported for inodes containing extents"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:145
-#, fuzzy
 msgid "Extent length is invalid"
-msgstr "panjang konteks `%s' tidak sah"
+msgstr "Panjang takat tidak sah"
 
 #: lib/ext2fs/ext2_err.c:146
 msgid "I/O Channel does not support 64-bit block numbers"
@@ -7827,16 +8035,15 @@ msgid "Filesystem too large to use legacy bitmaps"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:149
-#, fuzzy
 msgid "MMP: invalid magic number"
-msgstr "jumlah hujah tidak sah"
+msgstr "MMP: nombor magic tidak sah"
 
 #: lib/ext2fs/ext2_err.c:150
 msgid "MMP: device currently active"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
+msgid "MMP: e2fsck being run"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:152
@@ -7856,56 +8063,52 @@ msgid "MMP: open with O_DIRECT failed"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:156
-#, fuzzy
 msgid "Block group descriptor size incorrect"
-msgstr " Penghurai kumpulan di"
+msgstr "Saiz huraian kumpulan blok tidak tepat"
 
 #: lib/ext2fs/ext2_err.c:157
 msgid "Inode checksum does not match inode"
-msgstr ""
+msgstr "Semakan inode tidak sepadan inode"
 
 #: lib/ext2fs/ext2_err.c:158
 msgid "Inode bitmap checksum does not match bitmap"
-msgstr ""
+msgstr "Semakan peta bit inode peta bit tidak sepadan peta bit"
 
 #: lib/ext2fs/ext2_err.c:159
 msgid "Extent block checksum does not match extent block"
-msgstr ""
+msgstr "Semakan blok medan tidak sepadan dengan blok medan"
 
 #: lib/ext2fs/ext2_err.c:160
 msgid "Directory block does not have space for checksum"
-msgstr ""
+msgstr "Blok direktori tidak mempunyai ruang untuk semakan"
 
 #: lib/ext2fs/ext2_err.c:161
 msgid "Directory block checksum does not match directory block"
-msgstr ""
+msgstr "Semakan blok direktori tidak sepadan dengan blok direktori"
 
 #: lib/ext2fs/ext2_err.c:162
 msgid "Extended attribute block checksum does not match block"
-msgstr ""
+msgstr "Semakan blok atribut lanjutan tidak sepadan dengan blok"
 
 #: lib/ext2fs/ext2_err.c:163
 msgid "Superblock checksum does not match superblock"
-msgstr ""
+msgstr "Pengiraan superblock tidak sepadan superblok"
 
 #: lib/ext2fs/ext2_err.c:164
-#, fuzzy
 msgid "Unknown checksum algorithm"
-msgstr "TDAK DIKETAHUI\n"
+msgstr "Algoritma pengiraan tidak diketahui"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr ""
+msgid "MMP block checksum does not match"
+msgstr "Pengiraan bitmap MMP tidak sepadan"
 
 #: lib/ext2fs/ext2_err.c:166
-#, fuzzy
 msgid "Ext2 file already exists"
-msgstr "Fail `%s' telah pun dibaca.\n"
+msgstr "Fail Ext2 sudah wujud"
 
 #: lib/ext2fs/ext2_err.c:167
-#, fuzzy
 msgid "Block bitmap checksum does not match bitmap"
-msgstr "Perkara yang sama bagi hujah pilihan.\n"
+msgstr "Pengiraan bitmap blok tidak padan bitmap"
 
 #: lib/ext2fs/ext2_err.c:168
 msgid "Cannot iterate data blocks of an inode containing inline data"
@@ -7928,9 +8131,8 @@ msgid "Extended attribute block has a bad header"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:173
-#, fuzzy
 msgid "Extended attribute key not found"
-msgstr "# Loggokan extent:\n"
+msgstr "Kekunci atribut lanjutan tidak dijumpai"
 
 #: lib/ext2fs/ext2_err.c:174
 msgid "Insufficient space to store extended attribute data"
@@ -7942,16 +8144,15 @@ msgstr ""
 
 #: lib/ext2fs/ext2_err.c:176
 msgid "Inode doesn't have inline data"
-msgstr ""
+msgstr "Inode tidak mempunyai data sebaris"
 
 #: lib/ext2fs/ext2_err.c:177
 msgid "No block for an inode with inline data"
-msgstr ""
+msgstr "Tiada blok untuk inode dengan data sebaris"
 
 #: lib/ext2fs/ext2_err.c:178
-#, fuzzy
 msgid "No free space in inline data"
-msgstr "direktori"
+msgstr "Tiada ruang bebas dalam data sebaris"
 
 #: lib/ext2fs/ext2_err.c:179
 msgid "Wrong magic number for extended attribute structure"
@@ -7967,54 +8168,51 @@ msgstr ""
 
 #: lib/ext2fs/ext2_err.c:182
 msgid "Journal flags inconsistent"
-msgstr ""
+msgstr "Bendera jurnal tidak konsisten"
 
 #: lib/ext2fs/ext2_err.c:183
-#, fuzzy
 msgid "Undo file corrupt"
-msgstr "ketika cuba untuk mengulangsaiz %s"
+msgstr "Undur fail yang rosak"
 
 #: lib/ext2fs/ext2_err.c:184
 msgid "Wrong undo file for this filesystem"
-msgstr ""
+msgstr "Fail undur yang salah untuk sistem fail ini"
 
 #: lib/ext2fs/ext2_err.c:185
-#, fuzzy
 msgid "File system is corrupted"
-msgstr "ketika cuba untuk mengulangsaiz %s"
+msgstr "Sistem fail rosak"
 
 #: lib/ext2fs/ext2_err.c:186
 msgid "Bad CRC detected in file system"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:187
-#, fuzzy
 msgid "The journal superblock is corrupt"
-msgstr "ketika membaca superblok jurnal"
+msgstr "Superblock jurnal ini rosak"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "ketika cuba untuk mengulangsaiz %s"
+msgstr "Inode rosak"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
 
 #: lib/support/prof_err.c:11
-#, fuzzy
 msgid "Profile version 0.0"
-msgstr "Versi EA tidak sah.\n"
+msgstr "Versi profil 0.0"
 
 #: lib/support/prof_err.c:12
 msgid "Bad magic value in profile_node"
 msgstr ""
 
 #: lib/support/prof_err.c:13
-#, fuzzy
 msgid "Profile section not found"
-msgstr "Tiada seksyen sebegitu: %s"
+msgstr "Seksyen profil tidak dijumpai"
 
 #: lib/support/prof_err.c:14
-#, fuzzy
 msgid "Profile relation not found"
-msgstr "Tiada sijil dijumpai!"
+msgstr "Kaitan profil tidak dijumpai"
 
 #: lib/support/prof_err.c:15
 msgid "Attempt to add a relation to node which is not a section"
@@ -8054,23 +8252,23 @@ msgstr ""
 
 #: lib/support/prof_err.c:24
 msgid "Profile section header not at top level"
-msgstr ""
+msgstr "Profail seksyen pengepala tidak di peringkat tertinggi"
 
 #: lib/support/prof_err.c:25
 msgid "Syntax error in profile section header"
-msgstr ""
+msgstr "Ralat sintaks dalam pengepala seksyen profil"
 
 #: lib/support/prof_err.c:26
 msgid "Syntax error in profile relation"
-msgstr ""
+msgstr "Ralat sintaks dalam kaitan profil"
 
 #: lib/support/prof_err.c:27
 msgid "Extra closing brace in profile"
-msgstr ""
+msgstr "Penutup pendakap tambahan dalam profil"
 
 #: lib/support/prof_err.c:28
 msgid "Missing open brace in profile"
-msgstr ""
+msgstr "Hilang pembuka pendakap dalam profil"
 
 #: lib/support/prof_err.c:29
 msgid "Bad magic value in profile_t"
@@ -8085,91 +8283,84 @@ msgid "Iteration through all top level section not supported"
 msgstr ""
 
 #: lib/support/prof_err.c:32
-#, fuzzy
 msgid "Invalid profile_section object"
-msgstr "Tetapan pilihan sistemfail tidak sah: %s\n"
+msgstr "Objek profile_section tidak sah"
 
 #: lib/support/prof_err.c:33
 msgid "No more sections"
-msgstr ""
+msgstr "Tiada lagi seksyen"
 
 #: lib/support/prof_err.c:34
 msgid "Bad nameset passed to query routine"
 msgstr ""
 
 #: lib/support/prof_err.c:35
-#, fuzzy
 msgid "No profile file open"
-msgstr "tidak dapat membuka fail `%s'"
+msgstr "Tiada fail profil dibuka"
 
 #: lib/support/prof_err.c:36
 msgid "Bad magic value in profile_file_t"
 msgstr ""
 
 #: lib/support/prof_err.c:37
-#, fuzzy
 msgid "Couldn't open profile file"
-msgstr "AMARAN: tidak dapat membuka %s: %s\n"
+msgstr "Tidak dapat membuka fail profil"
 
 #: lib/support/prof_err.c:38
-#, fuzzy
 msgid "Section already exists"
-msgstr "Seksyen %s telah ditakrif"
+msgstr "Seksyen telah wujud"
 
 #: lib/support/prof_err.c:39
 msgid "Invalid boolean value"
-msgstr ""
+msgstr "Nilai boolean tidak sah"
 
 #: lib/support/prof_err.c:40
-#, fuzzy
 msgid "Invalid integer value"
-msgstr "nilai $ tidak sah: $%d"
+msgstr "Nilai integer tidak sah"
 
 #: lib/support/prof_err.c:41
 msgid "Bad magic value in profile_file_data_t"
 msgstr ""
 
 #: lib/support/plausible.c:118
-#, fuzzy, c-format
+#, c-format
 msgid "\tlast mounted on %s on %s"
-msgstr "%s dilekapkan;"
+msgstr "\tterakhir dilekapkan pada %s pada %s"
 
 #: lib/support/plausible.c:121
-#, fuzzy, c-format
+#, c-format
 msgid "\tlast mounted on %s"
-msgstr "%s dilekapkan;"
+msgstr "\tterakhir dilekapkan pada %s"
 
 #: lib/support/plausible.c:124
 #, c-format
 msgid "\tcreated on %s"
-msgstr ""
+msgstr "\tdicipta pada %s"
 
 #: lib/support/plausible.c:127
-#, fuzzy, c-format
+#, c-format
 msgid "\tlast modified on %s"
-msgstr ""
-"\n"
-"%s: ***** SISTEM FAIL TELAH DIUBAHSUAI *****\n"
+msgstr "\tterakhir diubahsuai pada %s"
 
 #: lib/support/plausible.c:161
-#, fuzzy, c-format
+#, c-format
 msgid "Found a %s partition table in %s\n"
-msgstr "GPGME: Penandatangan tidak sah dijumpai: %s"
+msgstr "%s jadual pembahagian dijumpai didalam %s\n"
 
 #: lib/support/plausible.c:191
 #, c-format
 msgid "The file %s does not exist and no size was specified.\n"
-msgstr ""
+msgstr "Fail %s tidak wujud dan tiada saiz dinyatakan.\n"
 
 #: lib/support/plausible.c:199
-#, fuzzy, c-format
+#, c-format
 msgid "Creating regular file %s\n"
-msgstr "fail biasa"
+msgstr "Mencipta fail biasa %s\n"
 
 #: lib/support/plausible.c:202
-#, fuzzy, c-format
+#, c-format
 msgid "Could not open %s: %s\n"
-msgstr "e2label: tidak dapat membuka %s\n"
+msgstr "Tidak dapat membuka %s: %s\n"
 
 #: lib/support/plausible.c:205
 msgid ""
@@ -8178,49 +8369,21 @@ msgid ""
 msgstr ""
 
 #: lib/support/plausible.c:227
-#, fuzzy, c-format
+#, c-format
 msgid "%s is not a block special device.\n"
-msgstr "fail khas blok"
+msgstr "%s adalah bukan peranti khas.\n"
 
 #: lib/support/plausible.c:249
-#, fuzzy, c-format
+#, c-format
 msgid "%s contains a %s file system labelled '%s'\n"
-msgstr "Membaca fail konfigurasi sistem %s..."
+msgstr "%s mengandungi sistem fail %s yang dilabelkan '%s'\n"
 
 #: lib/support/plausible.c:252
-#, fuzzy, c-format
+#, c-format
 msgid "%s contains a %s file system\n"
-msgstr "Membaca fail konfigurasi sistem %s..."
+msgstr "%s mengandungi sistem fail %s\n"
 
 #: lib/support/plausible.c:276
-#, fuzzy, c-format
+#, c-format
 msgid "%s contains `%s' data\n"
-msgstr "Membaca fail konfigurasi sistem %s..."
-
-#, fuzzy
-#~ msgid "@A @a @b %b.  "
-#~ msgstr "@b @B perbezaan: "
-
-#, fuzzy
-#~ msgid "while allocating zeroizing buffer"
-#~ msgstr "ketika mengumpukkan penimbal"
-
-#, fuzzy
-#~ msgid ", unused inodes %u\n"
-#~ msgstr ", %u inod tidak digunakan\n"
-
-#~ msgid "Failed tdb_fetch %s\n"
-#~ msgstr "tdb_fetch %s gagal\n"
-
-#~ msgid "Failed tdb_open %s\n"
-#~ msgstr "tdb_open %s gagal\n"
-
-#~ msgid "Failed to open %s\n"
-#~ msgstr "Gagal untuk membuka %s\n"
-
-#~ msgid "Failed write %s\n"
-#~ msgstr "Gagal menulis %s\n"
-
-#, fuzzy
-#~ msgid "Invalid quotatype parameter: %s\n"
-#~ msgstr "Parameter superblok tidak sah: %s\n"
+msgstr "%s mengandungi data `%s'\n"
index 6a923ef..517931f 100644 (file)
Binary files a/po/nl.gmo and b/po/nl.gmo differ
index 872ea05..dae6e3a 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,17 +1,26 @@
 # Dutch translations for e2fsprogs.
-# Copyright (C) 2016 Theodore Tso (msgids)
+# Copyright (C) 2019 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
 #
-# "Wir haben eine Menge verschiedener Optionen bekam."
-# Benno Schulenberg <benno@vertaalt.nl>, 2005, 2006, 2007, 2008, 2010, 2011, 2012, 2013, 2014, 2016.
+# «A reality program does actually illustrate it well.  The key to victory
+# lies more in manipulation and cooperation than in exceptional personal skills.»
+#
+# Benno Schulenberg <benno@vertaalt.nl>, 2005, 2006, 2007, 2008, 2010, 2011, 2012.
+# Benno Schulenberg <benno@vertaalt.nl>, 2013, 2014, 2016, 2017, 2018, 2019, 2020.
 #
 # Woordgebruik:
-# block   -> blok
-# sector  -> sector
-# (inode blijft onvertaald)
-# (extent blijft onvertaald)
-# (journal blijft onvertaald)
-# ('trying to' wordt weggelaten)
+#   block -> blok
+#   sector -> sector
+#   directory -> map
+#   entry -> item
+#   filesystem -> bestandssysteem
+#   checksum -> controlesom
+#   superblock -> superblok
+#
+#   (inode blijft onvertaald)
+#   (extent blijft onvertaald)
+#   (journal blijft onvertaald)
+#   ('trying to' wordt weggelaten)
 #
 #. 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,
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -57,7 +73,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs-1.43.1\n"
+"Project-Id-Version: e2fsprogs-1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2016-08-08 10:41+0200\n"
-"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2020-10-18 15:58+0200\n"
+"Last-Translator: Benno Schulenberg <vertaling@coevern.nl>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "Language: nl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Slecht blok %u ligt buiten bereik; genegeerd.\n"
@@ -103,11 +119,12 @@ msgstr "tijdens controle van de slechteblokken-inode"
 msgid "while reading the bad blocks inode"
 msgstr "tijdens lezen van de slechteblokken-inode"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "tijdens openen van %s"
@@ -117,7 +134,7 @@ msgstr "tijdens openen van %s"
 msgid "while trying popen '%s'"
 msgstr "tijdens een popen() van %s"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "tijdens lezen van lijst van slechte blokken uit bestand"
 
@@ -128,8 +145,11 @@ msgstr "tijdens bijwerken van de inode van een slecht blok"
 #: e2fsck/badblocks.c:133
 #, 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/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "tijdens vrijgeven van 'dir_info' TDB-bestand"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -188,9 +208,8 @@ msgid "Couldn't allocate block buffer (size=%d)\n"
 msgstr "Kan geen blokbuffer reserveren (grootte=%d).\n"
 
 #: e2fsck/extents.c:42
-#, fuzzy
 msgid "extent rebuild inode map"
-msgstr "bitkaart van normale bestanden"
+msgstr "bitkaart van inodes met te hermaken extents"
 
 #: e2fsck/flushb.c:35
 #, c-format
@@ -200,20 +219,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:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, 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:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "tijdens leegmaken van %s"
@@ -223,11 +241,11 @@ msgstr "tijdens leegmaken van %s"
 msgid "while trying to open '%s'"
 msgstr "tijdens openen van '%s'"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr "tijdens openen voor inode-scan"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr "tijdens halen van volgende inode"
 
@@ -236,362 +254,380 @@ msgstr "tijdens halen van volgende inode"
 msgid "%u inodes scanned.\n"
 msgstr "%u inodes gescand.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "lezen van journal-superblok...\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: geen geldig journal-superblok gevonden\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: journal is te kort\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: herstellen van journal...\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: geen herstelling van journal bij alleen-lezen\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "tijdens heropenen van %s"
 
 # Behalve E en F worden de volgende 30 letterafkortingen niet gebruikt.
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "a<fout>"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "A<fout>"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "b<fout>"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "B<fout>"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "c<fout>"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "C<fout>"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "d<fout>"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "D<fout>"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "e<fout>"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "EItem '%Dn' in %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "f<fout>"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fvoor inode %i (%Q)"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "g<fout>"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "h<fout>"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "i<fout>"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "I<fout>"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "j<fout>"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "l<fout>"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "L<fout>"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "m<fout>"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "n<fout>"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "o<fout>"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "p<fout>"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "q<fout>"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "r<fout>"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "s<fout>"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "S<fout>"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "u<fout>"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "v<fout>"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "x<fout>"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "z<fout>"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<de NULL-inode>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<de slechteblokken-inode>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<de gebruikersquota-inode>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<de groepsquota-inode>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<de opstart-inode>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<de wis-ongedaanmakingsmap-inode>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<de groepsbeschrijver-inode>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<de journal-inode>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<gereserveerde inode 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<gereserveerde inode 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "normaal bestand"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "map"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "byte-apparaat"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "blok-apparaat"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "benoemde pijp"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "symbolische koppeling"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "socket"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "onbekend bestandstype met modus 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "indirect blok"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "dubbel-indirect blok"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "drievoudig-indirect blok"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "translator-blok"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "blok #"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "gebruiker"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "groep"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr "project"
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "onbekend quotatype"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
-msgstr "kaart van meervoudig-geclaimde inodes"
+msgstr "bitkaart van meervoudig-geclaimde inodes"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "**interne programmafout**: kan geen 'dup_blk' voor %llu vinden\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "### teruggekeerd van clone_file_block()"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
-msgstr ""
-"**interne programmafout**: kan de record van EA-blokken voor %llu niet "
-"opvragen"
+msgstr "**interne programmafout**: kan de record van EA-blokken voor %llu niet opvragen"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
-msgstr ""
-"**interne programmafout**: kan de record van EA-inodes voor %u niet opvragen"
+msgstr "**interne programmafout**: kan de record van EA-inodes voor %u niet opvragen"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr "tijdens hashen van item met e_value_inum = %u"
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 msgid "reading directory block"
 msgstr "tijdens lezen van mapblok"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 msgid "in-use inode map"
 msgstr "bitkaart van gebruikte inodes"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 msgid "directory inode map"
 msgstr "bitkaart van mappen"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 msgid "regular file inode map"
 msgstr "bitkaart van normale bestanden"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr "bitkaart van gebruikte blokken"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1263
 msgid "metadata block map"
 msgstr "bitkaart van blokken met metagegevens"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 msgid "opening inode scan"
 msgstr "tijdens starten van inode-scan"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr "tijdens halen van volgende inode"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 msgid "Pass 1"
 msgstr "Stap 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "lezen van indirecte blokken van inode %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 msgid "bad inode map"
 msgstr "bitkaart van slechte inodes"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 msgid "inode in bad block map"
 msgstr "inode staat in kaart van slechte blokken"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 msgid "imagic inode map"
-msgstr "imagic-inodekaart"
+msgstr "bitkaart van imagic-inodes"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr "kaart van meervoudig-geclaimde blokken"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr "kaart van blokken met uitgebreide kenmerken"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu(%c): verwachtte %6lu, kreeg fysiek %6lu (blokkenaantal %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 msgid "block bitmap"
 msgstr "blok-bitkaart"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 msgid "inode bitmap"
 msgstr "inode-bitkaart"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 msgid "inode table"
 msgstr "inodetabel"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Stap 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 msgid "Can not continue."
 msgstr "Kan niet verdergaan."
 
@@ -611,195 +647,203 @@ msgstr "Stap 3"
 msgid "inode loop detection bitmap"
 msgstr "bitkaart van inode-lusdetectie"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Stap 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Stap 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
-msgstr ""
+msgstr "check_inode_bitmap_checksum: Onvoldoende geheugen beschikbaar"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
-msgstr ""
+msgstr "check_block_bitmap_checksum: Onvoldoende geheugen beschikbaar"
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 msgid "(no prompt)"
 msgstr "(geen prompt)"
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 msgid "Fix"
 msgstr "Repareren"
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:54
 msgid "Clear"
 msgstr "Wissen"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr "Herplaatsen"
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
 msgid "Allocate"
 msgstr "Plaatsen"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 msgid "Expand"
 msgstr "Uitbreiden"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 msgid "Connect to /lost+found"
 msgstr "Verbinden met /lost+found"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 msgid "Create"
 msgstr "Aanmaken"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr "Bergen"
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
 msgid "Truncate"
 msgstr "Afkappen"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 msgid "Clear inode"
 msgstr "Inode wissen"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 msgid "Abort"
 msgstr "Afbreken"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 msgid "Split"
 msgstr "Splitsen"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 msgid "Continue"
 msgstr "Doorgaan"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr "Meervoudig-geclaimde blokken klonen"
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 msgid "Delete file"
 msgstr "Bestand verwijderen"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 msgid "Suppress messages"
 msgstr "Berichten onderdrukken"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
 msgid "Unlink"
 msgstr "Losmaken"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 msgid "Clear HTree index"
 msgstr "'htree'-index wissen"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 msgid "Recreate"
 msgstr "Heraanmaken"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr "Optimaliseren"
+
+#: e2fsck/problem.c:81
 msgid "(NONE)"
 msgstr "(GEEN)"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 msgid "FIXED"
 msgstr "GEREPAREERD"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 msgid "CLEARED"
 msgstr "GEWIST"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr "HERPLAATST"
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 msgid "ALLOCATED"
 msgstr "GEPLAATST"
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr "UITGEBREID"
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr "HERVERBONDEN"
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 msgid "CREATED"
 msgstr "AANGEMAAKT"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr "GEBORGEN"
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
 msgid "TRUNCATED"
 msgstr "AFGEKAPT"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 msgid "INODE CLEARED"
 msgstr "INODE GEWIST"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 msgid "ABORTED"
 msgstr "AFGEBROKEN"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 msgid "SPLIT"
 msgstr "GESPLITST"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr "VERDERGAAND"
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr "MEERVOUDIG-GECLAIMDE BLOKKEN GEKLOOND"
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 msgid "FILE DELETED"
 msgstr "BESTAND VERWIJDERD"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr "ONDERDRUKT"
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr "LOSGEMAAKT"
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 msgid "HTREE INDEX CLEARED"
 msgstr "'HTREE'-INDEX GEWIST"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 msgid "WILL RECREATE"
 msgstr "ZAL HERAANMAKEN"
 
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr "ZAL OPTIMALISEREN"
+
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:115
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "blok-bitkaart voor groep %g zit niet in groep  (blok %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:119
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "inode-bitkaart voor groep %g zit niet in groep  (blok %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -816,7 +860,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -829,12 +873,9 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Het superblok is onleesbaar of omschrijft geen geldig ext2/3/4-"
-"bestandssysteem.\n"
-"Als het apparaat juist is en werkelijk een ext2-, ext3- of ext4-"
-"bestandssysteem\n"
-"bevat (en niet swap of UFS of iets anders), dan is het superblok "
-"beschadigd.\n"
+"Het superblok is onleesbaar of omschrijft geen geldig ext2/3/4-bestandssysteem.\n"
+"Als het apparaat juist is en werkelijk een ext2-, ext3- of ext4-bestandssysteem\n"
+"bevat (en niet swap of UFS of iets anders), dan is het superblok beschadigd.\n"
 "U kunt dan proberen een ander superblok te gebruiken, bijvoorbeeld:\n"
 "    e2fsck -b 8193 <apparaat>\n"
 "of:\n"
@@ -844,7 +885,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -857,7 +898,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -868,18 +909,18 @@ msgstr ""
 "fragmentgrootte die verschilt van de blokgrootte.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "Superblok: blokken_per_groep = %b, zou %c moeten zijn.\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "Superblok: eerste_gegevens_blok = %b, zou %c moeten zijn.\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -887,8 +928,8 @@ msgstr ""
 "Bestandssysteem heeft geen UUID; er wordt eentje aangemaakt.\n"
 "\n"
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -905,50 +946,50 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Beschadiging gevonden in het superblok:  %s = %N.\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:186
+#, no-c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Fout tijdens bepalen van de grootte van fysiek apparaat: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:191
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "Inodetal in superblok is %i, zou %j moeten zijn.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "De Hurd ondersteunt de bestandstypenfunctie niet.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:201
+#, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "Superblok heeft een ongeldig journal (inode %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr ""
 "Het externe journal heeft meerdere bestandssysteem-gebruikers;\n"
 "dit wordt niet ondersteund.\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:211
 msgid "Can't find external @j\n"
 msgstr "Kan geen extern journal vinden.\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 msgid "External @j has bad @S\n"
 msgstr "Het externe journal heeft een slecht superblok.\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 msgid "External @j does not support this @f\n"
 msgstr "Het externe journal ondersteunt dit bestandssysteem niet.\n"
 
@@ -956,99 +997,92 @@ msgstr "Het externe journal ondersteunt dit bestandssysteem niet.\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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:226
+#: e2fsck/problem.c:235
 msgid "@j @S is corrupt.\n"
 msgstr "Het superblok van het journal is beschadigd.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "Journal-vlag in superblok is niet gezet, maar er is wel een journal.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
-msgstr "Reddingsvlag in superblok is gezet, maar er is geen journal.\n"
+msgstr "Herstellingsvlag 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:241
+#: e2fsck/problem.c:250
 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 "Herstellingsvlag in superblok is niet gezet, maar het journal bevat gegevens.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:255
 msgid "Clear @j"
 msgstr "Journal wissen"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr "Bestandssysteem is een versie 0, maar heeft functievlag(gen) gezet.  "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:265
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s van verweesde inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:270
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "Ongeldig %B (%b) gevonden in verweesde inode %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:275
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Reeds-gewist %B (%b) gevonden in verweesde inode %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:281
+#, no-c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "Ongeldige verweesde inode %i in superblok.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:287
+#, no-c-format
 msgid "@I @i %i in @o @i list.\n"
 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:281
+#: e2fsck/problem.c:292
 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:286
+#: e2fsck/problem.c:297
 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:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Journal-versie wordt niet ondersteund door deze e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:308
+#, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1058,8 +1092,8 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:314
+#, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1070,7 +1104,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1081,20 +1115,20 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 msgid "Run @j anyway"
 msgstr "Journal toch afspelen"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
-"Reservekopieën van het superblok kennen geen reddingsvlag;\n"
+"Reservekopieën van het superblok kennen geen herstellingsvlag;\n"
 "het niet-lege journal wordt daarom afgespeeld.\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1104,7 +1138,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1113,20 +1147,18 @@ msgstr ""
 "maar 's_reserved_gdt_blocks' is %N; zou nul moeten zijn.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 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:338
+#: e2fsck/problem.c:352
 msgid "Resize @i not valid.  "
 msgstr "Ongeldige 'resize'-inode.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1136,7 +1168,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1145,14 +1177,14 @@ msgstr ""
 "    in de toekomst (nu = %T).\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:368
+#, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "De superblokhint voor een extern superblok dient %X te zijn.  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1161,283 +1193,282 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 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:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-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:372
+#: e2fsck/problem.c:389
 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:377
+#: e2fsck/problem.c:394
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Blok-bitkaart van laatste groepsbeschrijver is ongeïnitialiseerd.  "
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "Journal-transactie %i is beschadigd; het afspelen is afgebroken.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:405
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "De functievlag 'test_fs' is gezet (en ext4 is beschikbaar).  "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
-#, fuzzy
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 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.)\n"
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
-#, fuzzy
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 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.)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr "Een of meer groepsbeschrijvers hebben een ongeldige controlesom.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Het aantal vrije inodes is op %j gezet (was %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Het aantal vrije blokken is op %c gezet (was %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr "De quota-inode %i (%Q) wordt verborgen.\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "De %U quota-inode %i (%Q) wordt verborgen.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 msgid "@S has invalid MMP block.  "
 msgstr "Superblok heeft ongeldig MMP-blok.  "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
 msgid "@S has invalid MMP magic.  "
 msgstr "Superblok heeft ongeldig magisch getal voor MMP.  "
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:453
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2(): %m\n"
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:459
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc(): %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
-msgstr ""
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "Superblok 'metadata_csum' overstijgt 'uninit_bg'; de twee functiebits kunnen niet tegelijk gezet zijn."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-#, fuzzy
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "Controlesom van MMP-blok komt niet overeen met MMP-blok"
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+msgid "@S MMP @b checksum does not match.  "
+msgstr "Controlesom (in superblok) van MMP-blok komt niet overeen.  "
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
-msgstr ""
-"Superblok van 64-bits bestandssystemen heeft extents nodig om gehele schijf "
-"te kunnen bereiken.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
+msgstr "Superblok van 64-bits bestandssysteem heeft extents nodig om gehele schijf te kunnen bereiken.  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "Waarde van 'first_meta_bg' is te groot (%N, maximum is %g).  "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
-#, fuzzy
+#: e2fsck/problem.c:486
 msgid "External @j @S checksum does not match @S.  "
-msgstr "Controlesom van extent-blok komt niet overeen met extent-blok"
+msgstr "Controlesom van superblok (in extern journal) komt niet overeen met superblok.  "
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
-msgstr ""
+msgstr "Superblok 'metadata_csum_seed' is onnodig zonder 'metadata_csum'."
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
-msgstr ""
+msgstr "Fout tijdens initialiseren van quota-context in ondersteunende bibliotheek: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Ongeldige vereiste extra inode-grootte in superblok (%N).  "
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Ongeldige gewenste extra inode-grootte in superblok (%N).  "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "Ongeldige %U quota-inode %i.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr "Superblok zou te veel inodes (%N) bevatten.\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
+"De functies 'resize_inode' en 'meta_bg' zijn beide actief, maar ze gaan\n"
+"niet samen.  Functie 'resize_inode' zou uitgeschakeld moeten worden.  "
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Stap 1: Controle van inodes, blokken, en groottes\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 msgid "@r is not a @d.  "
 msgstr "De hoofd-inode is geen map.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 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:508
+#: e2fsck/problem.c:544
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Gereserveerde inode %i %Q heeft een ongeldige modus.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:550
+#, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "De verwijderingstijd van verwijderde inode %i is nul.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "Inode %i is in gebruik, maar heeft een ingevulde verwijderingstijd.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:562
+#, no-c-format
 msgid "@i %i is a @z @d.  "
 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:528
+#: e2fsck/problem.c:567
 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:533
+#: e2fsck/problem.c:572
 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:538
+#: e2fsck/problem.c:577
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "De inodetabel van groep %g botst bij %b met een bestandssysteemblok.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:582
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "De blok-bitkaart %b van groep %g is ongeldig.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "De inode-bitkaart %b van groep %g is ongeldig.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "Inode %i, 'i_size' is %Is, zou %N moeten zijn.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "Inode %i, 'i_blocks' is %Ib, zou %N moeten zijn.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in @i %i.  "
 msgstr "Ongeldig %B (%b) in inode %i.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B (%b) overlapt metadata van bestandssysteem in inode %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:613
+#, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "Inode %i bevat ongeldig(e) blok(ken).  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Te veel ongeldige blokken in inode %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "Ongeldig %B (%b) in slechteblokken-inode.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "Slechteblokken-inode bevat ongeldig(e) blok(ken).  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Een dubbel of slecht blok is in gebruik!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 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
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1451,19 +1482,18 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1474,285 +1504,268 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 msgid "The primary @S (%b) is on the bad @b list.\n"
 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:626
+#: e2fsck/problem.c:667
 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:632
+#: e2fsck/problem.c:673
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 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:637
+#: e2fsck/problem.c:679
 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:643
+#: e2fsck/problem.c:685
 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:649
+#: e2fsck/problem.c:691
 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:654
-#, c-format
+#: e2fsck/problem.c:697
+#, no-c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "Fout tijdens reserveren van buffer voor verplaatsen van %s.\n"
 
 # src/delegate.c:368
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:702
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Bezig met verplaatsen van groep %g's %s van %b naar %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
-#, c-format
+#: e2fsck/problem.c:708
+#, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Bezig met verplaatsen van groep %g's %s naar %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Waarschuwing: kan blok %b van %s niet lezen: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:718
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Waarschuwing: kan blok %b van %s niet schrijven: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
 msgstr "Fout tijdens reserveren van inode-bitkaart (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
 msgstr "Fout tijdens reserveren van blok-bitkaart (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:734
+#, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "Fout tijdens reserveren van 'icount'-link-informatie: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:740
+#, no-c-format
 msgid "@A @d @b array: %m\n"
 msgstr "Fout tijdens reserveren van blokreeks voor map: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:746
+#, no-c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Fout tijdens scannen van inodes (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Fout tijdens langslopen van blokken van inode %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:757
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 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:714
+#: e2fsck/problem.c:762
 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:720
-#, c-format
+#: e2fsck/problem.c:769
+#, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Fout tijdens lezen van inode %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "Inode %i heeft de imagic-vlag gezet.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
 msgstr ""
-"Speciaal bestand (apparaat/socket/fifo/symlink) heeft de onveranderbaar-\n"
-"of de alleen-toevoegenvlag gezet (inode %i).  "
+"Speciaal bestand (apparaat/socket/fifo/symlink) (inode %i) heeft de\n"
+"onveranderbaar- of de alleen-toevoegenvlag gezet.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Speciale inode %i (apparaat/socket/fifo) heeft niet lengte nul.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
 msgid "@j @i is not in use, but contains data.  "
 msgstr "Journal-inode is niet in gebruik, maar bevat gegevens.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 msgid "@j is not regular file.  "
 msgstr "Journal is geen normaal bestand.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:812
+#, no-c-format
 msgid "@i %i was part of the @o @i list.  "
 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:765
+#: e2fsck/problem.c:818
 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:770
+#: e2fsck/problem.c:823
 msgid "@A refcount structure (%N): %m\n"
 msgstr "Fout tijdens reserveren van 'refcount'-structuur (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:828
 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:780
+#: e2fsck/problem.c:833
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "Inode %i bevat een slecht blok %b met uitgebreide kenmerken.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 msgid "Error reading @a @b %b (%m).  "
 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:790
+#: e2fsck/problem.c:843
 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:795
+#: e2fsck/problem.c:848
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Fout tijdens schrijven van blok %b met uitgebreide kenmerken: %m  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:853
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "Blok %b met uitgebreide kenmerken heeft h_blocks > 1.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
-#, fuzzy
+#: e2fsck/problem.c:858
 msgid "@A @a region allocation structure.  "
-msgstr "Fout tijdens reserveren van 'icount'-structuur: %m\n"
+msgstr "Fout tijdens reserveren van structuur voor reservering van uitgebreidekenmerkenregio.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 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:815
+#: e2fsck/problem.c:868
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "Blok %b met uitgebreide kenmerken is beschadigd (ongeldige naam).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "Blok %b met uitgebreide kenmerken is beschadigd (ongeldige waarde).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:879
+#, no-c-format
 msgid "@i %i is too big.  "
 msgstr "Inode %i is te groot.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B (%b) maakt map te groot.  "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr "%B (%b) maakt bestand te groot.  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "%B (%b) maakt symbolische koppeling te groot.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-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:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "Inode %i heeft de 'INDEX_FL'-vlag gezet maar het is geen map.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:911
+#, no-c-format
 msgid "@h %i has an @n root node.\n"
 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:859
+#: e2fsck/problem.c:916
 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:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "Inode %i van 'htree'-map gebruikt een incompatibele wortelknoopvlag.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:927
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "Inode %i van 'htree'-map heeft een te grote boomdiepte (%N).\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1761,364 +1774,359 @@ msgstr ""
 "is met de metagegevens van het bestandssysteem.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Aanmaken van 'resize'-inode is mislukt: %m"
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\n"
 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:890
+#: e2fsck/problem.c:950
 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:895
+#: e2fsck/problem.c:955
 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:900
+#: e2fsck/problem.c:960
 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:905
+#: e2fsck/problem.c:965
 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:910
+#: e2fsck/problem.c:970
 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:915
+#: e2fsck/problem.c:975
 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:920
-#, c-format
+#: e2fsck/problem.c:981
+#, no-c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
-msgstr "Fout tijdens doorlezen van 'extents'-boom in inode %i: %m\n"
+msgstr "Fout tijdens doorlezen van extents-boom in inode %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
 msgstr ""
-"Langslopen van 'extents' in inode %i is mislukt\n"
+"Langslopen van extents in inode %i is mislukt\n"
 "    (op %s, blk %b, lblk %c): %m\n"
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
-"Inode %i heeft een ongeldige 'extent'\n"
+"Inode %i heeft een ongeldige extent\n"
 "  (logisch blok %c, ongeldig fysiek blok %b, lengte %N)\n"
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
 msgstr ""
-"Inode %i heeft een ongeldige 'extent'\n"
+"Inode %i heeft een ongeldige extent\n"
 "  (logisch blok %c, fysiek blok %b, ongeldige lengte %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-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:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-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-vlag niet gezet.\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-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:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "Snelle symbolische koppeling %i heeft 'EXTENT_FL'-vlag gezet.  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"Inode %i heeft 'extents' die niet op volgorde liggen\n"
+"Inode %i heeft extents die niet op volgorde liggen\n"
 "  (ongeldig logisch blok %c, fysiek blok %b, lengte %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1030
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
-msgstr "Inode %i heeft een ongeldige 'extent'-knoop (blk %b, lblk %c)\n"
+msgstr "Inode %i heeft een ongeldige extent-knoop (blk %b, lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1036
+#, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Fout tijdens converteren van subclusterblokken-bitkaart: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not regular file.  "
 msgstr "Quota-inode is geen normaal bestand.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
 msgid "@q @i is not in use, but contains data.  "
 msgstr "Quota-inode is niet in gebruik, maar bevat gegevens.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 msgid "@q @i is visible to the user.  "
 msgstr "Quota-inode is zichtbaar voor de gebruiker.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 msgid "The bad @b @i looks @n.  "
 msgstr "De slechteblokken-inode lijkt ongeldig.  "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
 msgstr ""
-"Inode %i heeft een 'extent' met lengte nul\n"
+"Inode %i heeft een extent met lengte nul\n"
 "  (ongeldig logisch blok %c, fysiek blok %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, c-format
+#: e2fsck/problem.c:1067
+#, no-c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "Inode %i schijnt rommel te bevatten.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
-msgstr ""
-"Inode %i komt door de tests, maar controlesom komt niet overeen met inode.  "
+msgstr "Inode %i komt door de tests, maar controlesom komt niet overeen met inode.  "
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "Uitgebreid kenmerk van inode %i is beschadigd (reserveringsoverlap).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"Extent-blok van inode %i komt door de tests, maar controlesom komt niet "
-"overeen met extent\n"
+"Extent-blok van inode %i komt door de tests, maar controlesom komt niet overeen met extent\n"
 "  (logisch blok %c, fysiek blok %b, lengte %N).\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
-msgstr ""
-"Uitgebreidekenmerkenblok van inode %i komt door de tests, maar controlesom "
-"komt niet overeen met blok.  "
+msgstr "Uitgebreidkenmerkblok van inode %i komt door de tests, maar controlesom komt niet overeen met blok.  "
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
 msgstr ""
-"Inwendig 'extent'-knoopniveau %N van inode %i:\n"
+"Inwendig extent-knoopniveau %N van inode %i:\n"
 "Logisch begin %b komt niet overeen met logisch begin %c op volgende niveau.  "
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"Inode %i: einde van 'extent' overschrijdt toegestane waarde\n"
+"Inode %i: einde van extent overschrijdt toegestane waarde\n"
 "  (logisch blok %c, fysiek blok %b, lengte %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, fuzzy, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
-msgstr ""
-"Inode %i heeft extent-opmaak, maar superblok heeft EXTENTS-functievlag niet "
-"gezet.\n"
+msgstr "Inode %i bevat inline gegevens, maar superblok heeft INLINE_DATA-vlag niet gezet.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, fuzzy, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
-msgstr ""
-"Inode %i heeft de 'INDEX_FL'-vlag gezet op een bestandssysteem zonder "
-"'htree'-ondersteuning.\n"
+msgstr "Inode %i heeft de 'INLINE_DATA_FL'-vlag gezet op een bestandssysteem zonder ondersteuning voor inline gegevens.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
-msgstr ""
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+msgstr "Blok %b van inode %i conflicteert met kritieke metadata; blokcontroles worden overgeslagen.\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "In map-inode %i zou blok %b blok %c moeten zijn.  "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1138
+#, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "Map-inode %i bevat een ongeïnitialiseerde extent in blok %c.  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
-"Logisch blok %b (fysiek blok %c) in inode %i schendt "
-"clusterreserveringsregels.\n"
+"Logisch blok %b (fysiek blok %c) in inode %i schendt clusterreserveringsregels.\n"
 "Zal worden gerepareerd in stap 1B.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, fuzzy, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
-msgstr "Inode %i heeft de 'INDEX_FL'-vlag gezet maar het is geen map.\n"
+msgstr "Inode %i heeft de 'INLINE_DATA_FL'-vlag gezet maar uitgebreid kenmerk is niet gevonden.  "
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, fuzzy, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
 msgstr ""
-"Speciaal bestand (apparaat/socket/fifo/symlink) heeft de onveranderbaar-\n"
-"of de alleen-toevoegenvlag gezet (inode %i).  "
+"Speciaal bestand (apparaat/socket/fifo) (inode %i) heeft de\n"
+"extents- of inline-gegevens-vlag gezet.  "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
-msgstr ""
+msgstr "Inode %i heeft een extents-header maar de inline-gegevens-vlag is gezet.\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
-msgstr ""
+msgstr "Inode %i schijnt inline gegevens te hebben maar de extents-vlag is gezet.\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
-msgstr ""
+msgstr "Inode %i schijnt een blokkenkaart te hebben maar de inline-gegevens- of de extents-vlag is gezet.\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
-msgstr ""
+msgstr "Inode %i bevat inline gegevens en heeft extent-vlaggen gezet maar 'i_block' bevat rommel.\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
-msgstr ""
+msgstr "De slechteblokkenlijst zegt dat de slechteblokkenlijst-inode slecht is.  "
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
-#, fuzzy
+#: e2fsck/problem.c:1191
 msgid "@A @x region allocation structure.  "
-msgstr "Fout tijdens reserveren van 'icount'-structuur: %m\n"
+msgstr "Fout tijdens reserveren van structuur voor reservering van extents-regio.  "
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
-#, fuzzy
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
-"Inode %i heeft een ongeldige 'extent'\n"
+"Inode %i heeft een gedupliceerde extent-toewijzing\n"
 "  (logisch blok %c, ongeldig fysiek blok %b, lengte %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
 msgid "@A memory for encrypted @d list\n"
-msgstr ""
+msgstr "Fout tijdens reserveren van geheugen voor versleutelde mappenlijst\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
-msgstr ""
+msgstr "extents-boom van inode %i zou ondieper kunnen (%b; zou <= %c kunnen zijn)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
-msgstr ""
+msgstr "Inode %i op 'bigalloc'-bestandssysteem kan niet blok-mapped zijn.  "
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, fuzzy, c-format
+#: e2fsck/problem.c:1218
+#, no-c-format
 msgid "@i %i has corrupt @x header.  "
-msgstr "Blok %b met uitgebreide kenmerken is beschadigd (ongeldige naam).  "
+msgstr "Inode %i heeft een beschadigde extents-header.  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
+msgstr "Tijdsstempels van inode %i voorbij 4 april 2310 zijn vermoedelijk van vóór 1970.\n"
+
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "Inode %i bevat een ongeldig slecht blok %b met uitgebreide kenmerken.  \n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "Inode %i heeft een ongeldig uitgebreid kenmerk.  Uitgebreidkenmerk-inode %N heeft EA_INODE-vlag niet gezet.\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
 msgstr ""
 
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2130,49 +2138,46 @@ msgstr ""
 "Stap 1B: Opnieuw zoeken naar meervoudig-geclaimde blokken\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
-#, c-format
+#: e2fsck/problem.c:1255
+#, no-c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "Meervoudig-geclaimd blok (of blokken) in inode %i:"
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1271
+#, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Fout tijdens scannen van inodes (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "Fout tijdens reserveren van vervangende inode-bitkaart: %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 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:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 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:1197
+#: e2fsck/problem.c:1298
 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:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Stap 1D: Verzoenen van meervoudig-geclaimde blokken\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2181,18 +2186,18 @@ msgstr ""
 "    bevat %r meervoudig-geclaimd(e) blok(ken), gedeeld met %N bestand(en):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (inode %i, wijzigingstijd %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
 msgid "\t<@f metadata>\n"
 msgstr "\t<metagegevens van bestandssysteem>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2202,7 +2207,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2210,354 +2215,345 @@ msgstr ""
 "Meervoudig-geclaimde blokken zijn al gekloond of opnieuw toegekend.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1344
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Kan bestand niet klonen: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
-#, fuzzy
+#: e2fsck/problem.c:1350
 msgid "Pass 1E: Optimizing @x trees\n"
-msgstr "Stap 3A: Optimalisatie van mappen\n"
+msgstr "Stap 1E: Optimalisatie van extents-bomen\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, fuzzy, c-format
+#: e2fsck/problem.c:1356
+#, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
-msgstr "Optimaliseren van map %q (%d) is mislukt: %m\n"
+msgstr "Optimaliseren van extents-boom %p (%i) is mislukt: %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
-#, fuzzy
+#: e2fsck/problem.c:1361
 msgid "Optimizing @x trees: "
-msgstr "Optimaliseren van mappen: "
+msgstr "Optimaliseren van extents-bomen: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
-msgstr ""
+msgstr "Extents-boom van inode %i zou korter kunnen (op niveau %b).  "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
-msgstr ""
+msgstr "Extents-boom van inode %i zou smaller kunnen (op niveau %b).  "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Stap 2: Controle van mappenstructuur\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1399
+#, no-c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Ongeldig inodenummer voor '.' in map-inode %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1404
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E heeft een ongeldig inodenummer: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1409
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E bevat een verwijderde of ongebruikte inode %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1414
 msgid "@E @L to '.'  "
 msgstr "@E is een koppeling naar '.'  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1419
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E verwijst naar een inode (%Di) in een slecht blok.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1424
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E is een koppeling naar map %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1429
 msgid "@E @L to the @r.\n"
 msgstr "@E is een koppeling naar de hoofd-inode.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E bevat ongeldige tekens in de naam.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, c-format
+#: e2fsck/problem.c:1440
+#, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Ontbrekende '.' in map-inode %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1446
+#, no-c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Ontbrekende '..' in map-inode %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1451
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Eerste item '%Dn' (inode=%Di) in map-inode %i (%p) moet '.' zijn.\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1456
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Tweede item '%Dn' (inode=%Di) in map-inode %i moet '..' zijn.\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "'i_faddr' @F is %IF, moet nul zijn.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1466
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "'i_file_acl' @F is %If, moet nul zijn.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "'i_dir_acl' @F is %Id, moet nul zijn.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "'i_size_high' @F is %Id, moet nul zijn.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "'i_frag' @F is %N, moet nul zijn.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "'i_fsize' @F is %N, moet nul zijn.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "Inode %i (%Q) heeft een ongeldige modus (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1491
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "Map-inode %i, %B, positie %N: map is beschadigd\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "Map-inode %i, %B, positie %N: bestandsnaam is te lang\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "Map-inode %i bevat een ongereserveerd %B.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Item '.' in map-inode %i eindigt niet op NULL.\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Item '..' in map-inode %i eindigt niet op NULL.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "Inode %i (%Q) is een ongeldig byte-apparaat.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "Inode %i (%Q) is een ongeldig blok-apparaat.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E is een duplicaat-'.'-item.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E is een duplicaat-'..'-item.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "**Interne programmafout**: kan 'dir_info' voor %i niet vinden.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E heeft een 'rec_len' van %Dr, zou %N moeten zijn.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, c-format
+#: e2fsck/problem.c:1550
+#, no-c-format
 msgid "@A icount structure: %m\n"
 msgstr "Fout tijdens reserveren van 'icount'-structuur: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Fout tijdens langslopen van mapblokken: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Fout tijdens lezen van mapblok %b (inode %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Fout tijdens schrijven van mapblok %b (inode %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "Fout tijdens reserveren van nieuw mapblok voor inode %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Fout tijdens vrijgeven van inode %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1584
+#, no-c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "Mapitem voor '.' in %p (%i) is groot.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "Inode %i (%Q) is een ongeldige FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "Inode %i (%Q) is een ongeldige socket.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Bestandstype van @E wordt op %N gezet.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1604
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E heeft een ongeldig bestandstype (%Dt, zou %N moeten zijn).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 msgstr "@E heeft een ingevuld bestandstype.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "@E heeft een naam met lengte nul.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Symbolische koppeling %Q (inode %i) is ongeldig.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1624
 msgid "@a @b @F @n (%If).\n"
 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:1515
+#: e2fsck/problem.c:1629
 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:1520
+#: e2fsck/problem.c:1634
 msgid "@p @h %d: %B not referenced\n"
 msgstr "Probleem in 'htree'-map-inode %d: naar %B wordt niet verwezen.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 msgid "@p @h %d: %B referenced twice\n"
 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:1530
+#: e2fsck/problem.c:1644
 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:1535
+#: e2fsck/problem.c:1649
 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:1540
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
 msgstr "Ongeldige 'htree'-map-inode %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "Probleem in 'htree'-map-inode %d (%q): ongeldig bloknummer %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
 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:1559
+#: e2fsck/problem.c:1674
 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:1564
+#: e2fsck/problem.c:1679
 msgid "@p @h %d: %B has @n count (%N)\n"
 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:1569
+#: e2fsck/problem.c:1684
 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:1574
+#: e2fsck/problem.c:1689
 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:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
 msgstr "Dubbel item '%Dn' in %p (%i) gevonden.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2569,7 +2565,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2580,161 +2576,156 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "'i_blocks_hi' @F is %N, moet nul zijn.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %d (%q).\n"
 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:1603
+#: e2fsck/problem.c:1719
 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:1608
+#: e2fsck/problem.c:1724
 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:1613
+#: e2fsck/problem.c:1729
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "'i_file_acl' @F is %N, moet nul zijn.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, fuzzy, c-format
+#: e2fsck/problem.c:1735
+#, no-c-format
 msgid "@p @h %d: root node fails checksum.\n"
-msgstr "Probleem in 'htree'-map-inode %d: de wortelknoop is ongeldig.\n"
+msgstr "Probleem in 'htree'-map-inode %d: controlesomfout over wortelknoop.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, fuzzy, c-format
+#: e2fsck/problem.c:1741
+#, no-c-format
 msgid "@p @h %d: internal node fails checksum.\n"
-msgstr "Probleem in 'htree'-map-inode %d: de wortelknoop is ongeldig.\n"
+msgstr "Probleem in 'htree'-map-inode %d: controlesomfout over wortelknoop.\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
-#, fuzzy
+#: e2fsck/problem.c:1746
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
-msgstr "Map-inode %i, %B, positie %N: map is beschadigd\n"
+msgstr "Map-inode %i, %B, positie %N: map heeft geen controlesom.\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
-msgstr ""
+msgstr "Map-inode %i, %B: map voldoet aan eisen maar controlesom klopt niet.\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
-msgstr ""
+msgstr "Grootte van inline map-inode %i (%N) moet een veelvoud van 4 zijn,\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
-msgstr ""
+msgstr "Het corrigeren van de grootte van inline map-inode %i is mislukt.\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
 msgid "Encrypted @E is too short.\n"
-msgstr ""
+msgstr "Versleuteld item '%Dn' in %p (%i) is te kort.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Stap 3: Controle van verbindingen tussen mappen\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
 msgstr "Hoofd-inode is niet gereserveerd.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "Geen ruimte meer in /lost+found.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1790
+#, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Onverbonden map-inode %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
 msgstr "/lost+found niet gevonden.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 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:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 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:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Kan /lost+found niet uitbreiden: %m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Kan inode %i niet herverbinden: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Fout tijdens zoeken van /lost+found: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block(): %m tijdens maken van /lost+found\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode(): %m tijdens maken van /lost+found\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block(): %m tijdens maken van nieuw mapblok\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-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:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Fout tijdens bijwerken van inodetal van inode %i.\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2744,52 +2735,51 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 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
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Fout tijdens maken van hoofdmap (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Fout tijdens maken van /lost+found-map (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "De hoofd-inode is geen map.  Gestopt.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "Kan niet verder zonder een hoofd-inode.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/lost+found (inode %i) is geen map\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
 msgid "/@l has inline data\n"
 msgstr "/lost+found heeft inline-gegevens\n"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2798,7 +2788,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2806,52 +2796,52 @@ msgid ""
 msgstr ""
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1924
 msgid "/@l is encrypted\n"
 msgstr "/lost+found is versleuteld\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Stap 3A: Optimalisatie van mappen\n"
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Maken van 'dirs_to_hash-iterator' is mislukt: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Optimaliseren van map %q (%d) is mislukt: %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
 msgstr "Optimaliseren van mappen: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Stap 4: Controle van verwijzingsaantallen\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
 msgstr "Onverbonden inode %i met lengte nul.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
 msgstr "Onverbonden inode %i.\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "Verwijzingsaantal van inode %i is %Il, zou %N moeten zijn.  "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2863,150 +2853,153 @@ msgstr ""
 "inode_link_info[%i] is %N, inode.i_links_count is %Il.\n"
 "Deze horen hetzelfde te zijn!\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "Verwijzingsaantal van uitgebreidkenmerk-inode %i is %N, zou %n moeten zijn.  "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr "Map overschrijdt maximum aantal koppelingen, maar superblok heeft DIR_NLINK-vlag niet gezet.\n"
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Stap 5: Controle van groepssamenvattingen\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
 msgstr "Opvulling aan het eind van inode-bitkaart is niet gezet. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
 msgstr "Opvulling aan het eind van blok-bitkaart is niet gezet. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "Blok-bitkaart-verschillen: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "Inode-bitkaart-verschillen: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Verkeerd aantal vrije inodes voor groep #%g (%i, geteld=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:2068
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Verkeerd aantal mappen voor groep #%g (%i, geteld=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Verkeerd aantal inodes (%i, geteld=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2078
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Verkeerd aantal blokken voor groep #%g (%b, geteld=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 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:1938
-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:2088
+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:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "**Interne programmafout**: einde van bitmap is gefoezeld (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Fout tijdens kopiëren naar vervangende inode-bitkaart: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Fout tijdens kopiëren naar vervangende blok-bitkaart: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-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:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-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: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr "Inode-bitkaart van groep %g komt niet overeen met controlesom.\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr "Blok-bitkaart van groep %g komt niet overeen met controlesom.\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 msgid "Recreate @j"
 msgstr "Journal heraanmaken"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr "Quota-informatie bijwerken voor quotatype %N"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2172
+#, no-c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "Fout bij instellen van blokgroepcontrolesominformatie: %m\n"
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2178
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Fout bij schrijven van bestandssysteeminformatie: %m\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr "Fout bij wegschrijven van buffers naar opslagapparaat: %m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2189
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "Fout tijdens schrijven van quota-informatie voor quotatype %N: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Onbekende foutcode (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "GENEGEERD"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
-msgstr ""
+msgstr "in 'move_quota_inode'"
 
 #: e2fsck/scantest.c:79
 #, c-format
@@ -3026,46 +3019,45 @@ msgstr "tijdens start van inode-scan"
 msgid "while doing inode scan"
 msgstr "tijdens uitvoering van inode-scan"
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "tijdens aanroep van ext2fs_block_iterate() voor inode %d"
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "tijdens aanroep van ext2fs_block_iterate() voor inode %u"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "tijdens aanroep van ext2fs_adjust_ea_refcount2() voor inode %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "tijdens aanroep van ext2fs_adjust_ea_refcount2() voor inode %u"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Afkappen van"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Wissen van"
 
-#: e2fsck/unix.c:77
-#, fuzzy, c-format
+#: e2fsck/unix.c:78
+#, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] [-z undo_file] device\n"
 msgstr ""
-"Gebruik:  %s [-cdfknptvyDFV] [-b superblok] [-B blokgrootte]\n"
+"Gebruik:  %s [-pnycdfktvDFV] [-b superblok] [-B blokgrootte]\n"
 "                 [-C bestandsdescriptor] [-E uitgebreide_opties]\n"
-"                 [-I inodebufferblokken] [-l|-L slechteblokkenbestand]\n"
-"                 [-j extern_journal] [-P procesinode-grootte]\n"
+"                 [-I inodebufferblokken] [-j extern_journal] \n"
+"                 [-l|-L slechteblokkenbestand] [-z ongedaanmakenbestand]\n"
 "                 apparaat\n"
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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"
@@ -3076,8 +3068,7 @@ msgstr ""
 " -c   Op slechte blokken controleren en deze aan lijst toevoegen.\n"
 " -f   Een controle afdwingen, ook als het bestandssysteem schoon is.\n"
 
-#: e2fsck/unix.c:88
-#, fuzzy
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -3091,17 +3082,16 @@ 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 slechteblokkenbestand   Deze lijst aan de slechteblokkenlijst "
-"toevoegen.\n"
+" -l slechteblokkenbestand   Deze lijst aan de slechteblokkenlijst toevoegen.\n"
 " -L slechteblokkenbestand   Deze slechteblokkenlijst gebruiken.\n"
+" -z ongedaanmakenbestand    Een ongedaanmakenbestand met deze naam aanmaken.\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, 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:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3116,53 +3106,51 @@ msgstr[1] ""
 "\n"
 "%12u inodes gebruikt (%2.2f%% van %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 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:169
+#: e2fsck/unix.c:172
 #, c-format
 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:174
+#: e2fsck/unix.c:177
 #, 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"
+msgstr "             aantal inodes met indirecte blokken: %u enkel, %u dubbel, %u triple\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr "             Extents-dieptehistogram: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 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:195
+#: e2fsck/unix.c:198
 #, c-format
 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:197
+#: e2fsck/unix.c:200
 #, c-format
 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:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -3177,96 +3165,96 @@ msgstr[1] ""
 "\n"
 "%12u normale bestanden\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u map\n"
 msgstr[1] "%12u mappen\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 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:206
+#: e2fsck/unix.c:209
 #, c-format
 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:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u fifo\n"
 msgstr[1] "%12u fifo's\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u koppeling\n"
 msgstr[1] "%12u koppelingen\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u symbolische koppeling"
 msgstr[1] "%12u symbolische koppelingen"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, 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:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u socket\n"
 msgstr[1] "%12u sockets\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u bestand\n"
 msgstr[1] "%12u bestanden\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "tijdens bepalen of %s aangekoppeld is."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Waarschuwing!  %s is aangekoppeld.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Waarschuwing!  %s is in gebruik.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s is aangekoppeld.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s is in gebruik.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3274,7 +3262,7 @@ msgstr ""
 "Kan niet doorgaan.  Gestopt.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3288,84 +3276,105 @@ msgstr ""
 "    Als u doorgaat **ZAL** dit tot **ZWARE** beschadigingen leiden.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "Wilt u echt doorgaan"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "De controle is afgebroken.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr " bevat een bestandssysteem met fouten"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " is niet goed ontkoppeld"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 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:379
+#: e2fsck/unix.c:383
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " is %u keer aangekoppeld geweest zonder controle"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:390
 msgid " has filesystem last checked time in the future"
 msgstr " is schijnbaar het laatst gecontroleerd in de toekomst"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " is gedurende %u dagen niet gecontroleerd"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ", gedwongen controle.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: schoon, %u/%u bestanden, %llu/%llu blokken"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
 msgstr " (controle is uitgesteld; computer loopt op accu)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr " (controle bij volgende aankoppeling)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (controle na %ld aankoppelingen)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "FOUT: kan /dev/null niet openen (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "Ongeldige versie van uitgebreide kenmerken.\n"
 
-#: e2fsck/unix.c:692
-#, fuzzy
+#: e2fsck/unix.c:702
 msgid "Invalid readahead buffer size.\n"
-msgstr "Ongeldig argument van 'resize': %s\n"
+msgstr "Ongeldige grootte van vooruitleesbuffer.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Onbekende uitgebreide optie: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Uitgebreide opties worden gescheiden door komma's; een eventueel argument\n"
+"wordt voorafgegaan door een '='-teken.  Geldige uitgebreide opties zijn:\n"
+"\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr "    ea_ver=<uitgebreidekenmerkenversie (1 of 2)>\n"
+
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "    readahead_kb=<buffergrootte>\n"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3374,55 +3383,55 @@ msgstr ""
 "Syntaxfout in 'e2fsck'-configuratiebestand (%s, regel #%d)\n"
 "    %s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Fout tijdens valideren van bestandsdesriptor %d: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr "Ongeldige completeringsinformatie voor bestandsdescriptor."
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 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:865
+#: e2fsck/unix.c:903
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Optie '-t' wordt niet ondersteund door deze versie van e2fsck.\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Kan apparaat '%s' niet vinden."
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 msgid "The -n and -D options are incompatible."
 msgstr "Opties '-n' en '-D' gaan niet samen."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 msgid "The -n and -c options are incompatible."
 msgstr "Opties '-n' en '-c' gaan niet samen."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 msgid "The -n and -l/-L options are incompatible."
 msgstr "De opties '-n' en '-l' of '-L' gaan niet samen."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Opties '-D' en '-E fixes_only' gaan niet samen."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Opties '-E bmap2extent' en '-E fixes_only' gaan niet samen."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 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:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3431,7 +3440,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG -- \"%s\" is geen geheel getal\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3442,35 +3451,31 @@ msgstr ""
 "Ongeldig niet-numeriek argument van '-%c': \"%s\"\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, 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:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr "tijdens controleren van MMP-blok"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
-"Als u zeker weet dat het bestandssysteem nergens gebruikt wordt,\n"
-"geef dan deze opdracht: 'tune2fs -f -E clear_mmp {apparaat}'\n"
+"Als u zeker weet dat het bestandssysteem nergens in gebruik is,\n"
+"geef dan deze opdracht: 'tune2fs -f -E clear_mmp %s'\n"
 
-#: e2fsck/unix.c:1232
-#, fuzzy
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
 msgstr "tijdens lezen van MMP-blok"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3482,59 +3487,59 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "tijdens verwijderen van %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "tijdens aanmaken van 'undo'-bestand\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Fout: de ext2fs-bibliotheek is te oud!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "tijdens programma-initialisatie"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "    gebruik makend van %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr "voor interactieve reparaties is een terminal vereist"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, 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:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr "Superblok is ongeldig --"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
 msgstr "Groepsbeschrijvers zien er slecht uit --"
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s tijdens gebruik van de reservekopieblokken"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1546
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: er wordt teruggevallen op het eerste superblok\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3544,31 +3549,28 @@ msgstr ""
 "(Of het superblok is beschadigd.)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr "Is dit misschien een partitie met lengte nul?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, 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:1526
+#: e2fsck/unix.c:1590
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Mogelijk een niet-bestaand apparaat of een swap-apparaat?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1592
 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:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr "Mogelijk een niet-bestaand apparaat?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3576,100 +3578,118 @@ msgstr ""
 "De schijf is schrijfbeveiligd.  Gebruik de optie '-n' om een\n"
 "alleen-lezencontrole van het apparaat uit te voeren.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr "%s: Poging om superblok te laden ondanks fouten...\n"
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr "Installeer een nieuwere versie van e2fsck!"
 
-#: e2fsck/unix.c:1647
-#, fuzzy, c-format
+#: e2fsck/unix.c:1749
+#, c-format
 msgid "while checking journal for %s"
-msgstr "tijdens controle van het ext3-journal van %s"
+msgstr "tijdens controle van het journal voor %s"
 
-#: e2fsck/unix.c:1650
-#, fuzzy
+#: e2fsck/unix.c:1752
 msgid "Cannot proceed with file system check"
-msgstr "Kan niet verder zonder een hoofd-inode.\n"
+msgstr "Kan niet verdergaan met bestandssysteemcontrole"
 
-#: e2fsck/unix.c:1661
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+#: e2fsck/unix.c:1763
+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:1673
+#: e2fsck/unix.c:1775
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "Kan superblokvlaggen van %s niet zetten.\n"
 
-#: e2fsck/unix.c:1679
-#, fuzzy, c-format
+#: e2fsck/unix.c:1781
+#, c-format
 msgid "Journal checksum error found in %s\n"
-msgstr "Geen journal-superblok gevonden!\n"
+msgstr "Controlesomfout in journal in %s\n"
 
-#: e2fsck/unix.c:1683
-#, fuzzy, c-format
+#: e2fsck/unix.c:1785
+#, c-format
 msgid "Journal corrupted in %s\n"
-msgstr "Journal is verwijderd.\n"
+msgstr "Journal is beschadigd in %s\n"
 
-#: e2fsck/unix.c:1687
-#, fuzzy, c-format
+#: e2fsck/unix.c:1789
+#, c-format
 msgid "while recovering journal of %s"
-msgstr "tijdens afspelen van het ext3-journal van %s"
+msgstr "tijdens afspelen van het journal van %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, 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:1826
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "Bestandssysteem %s heeft een niet-ondersteunde codering: %0x\n"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1876
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s tijdens lezen van slechteblokken-inode\n"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1879
 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:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Aanmaken van journal (%d blokken): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr " voltooid.\n"
 
-#: e2fsck/unix.c:1823
-#, fuzzy
+#: e2fsck/unix.c:1931
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
 msgstr ""
 "\n"
-"*** journal is opnieuw aangemaakt -- het bestandssysteem is nu weer ext3 "
-"***\n"
+"*** journal is opnieuw aangemaakt ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "afgebroken"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: 'e2fsck' is geannuleerd.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "E2fsck wordt opnieuw gestart vanaf het begin...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "tijdens wissen van de context"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** BESTANDSSYSTEEMFOUTEN ZIJN GECORRIGEERD *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: Het bestandssysteem is veranderd.\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3678,12 +3698,12 @@ msgstr ""
 "\n"
 "%s: ***** BESTANDSSYSTEEM IS VERANDERD *****\n"
 
-#: e2fsck/unix.c:1910
-#, fuzzy, c-format
+#: e2fsck/unix.c:2040
+#, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** HERSTART UW SYSTEEM *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3694,55 +3714,55 @@ msgstr ""
 "%s: ********** WAARSCHUWING: bestandssysteem bevat nog fouten **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "jJyY"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
-msgstr ""
+msgstr "aA"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
-msgstr ""
+msgstr " ('a' betekent 'ja tegen alles') "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<j>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (j/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "geannuleerd!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
-msgstr ""
+msgstr "ja tegen alles\n"
 
 # src/main.c:417 src/main.c:418 src/main.c:483 src/main.c:484 src/main.c:489
 # src/main.c:490 src/main.c:574
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "ja\n"
 
 # src/main.c:417 src/main.c:418 src/main.c:432 src/main.c:483 src/main.c:484
 # src/main.c:489 src/main.c:490 src/main.c:574
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "nee\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3751,7 +3771,7 @@ msgstr ""
 "%s? nee\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3760,38 +3780,38 @@ msgstr ""
 "%s? ja\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "ja"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "nee"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps(): ongeldige bitkaartblokken voor %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "lezen van inode- en blok-bitkaarten"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "tijdens herlezen van bitkaarten voor %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "schrijven van blok- en inode-bitkaarten"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "tijdens herschrijven van blok- en inode-bitkaarten voor %s"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3804,65 +3824,59 @@ msgstr ""
 "%s: ONVERWACHTE INCONSISTENTIE; voer 'fsck' met de hand uit\n"
 "    (dat wil zeggen: zonder de opties '-a' of '-p').\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Gebruikt geheugen: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Gebruikt geheugen: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "tijd: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "verlopen tijd: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "tijdens lezen van inode %lu in %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "tijdens schrijven van inode %lu in %s"
 
-#: e2fsck/util.c:765
-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"
+#: e2fsck/util.c:792
+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:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "voltooid                                             \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, 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"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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"
+"          [-t testpatroon [-t testpatroon [...]]]  [-fnsvwBX]\n"
 "          apparaat  [eindblok [beginblok]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3871,83 +3885,80 @@ msgstr ""
 "%s: Opties '-n' en '-w' gaan niet samen.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f%% gedaan, %s verlopen  (%d/%d/%d fouten)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Test wordt uitgevoerd met dit willekeurige patroon: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Test wordt uitgevoerd met patroon 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "tijdens 'seek'"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Vreemde waarde (%ld) bij leespoging\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "tijdens leegmaken van de buffers"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 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:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "tijdens reserveren van buffers"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Controleren van blokken %lu tot %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Zoeken naar slechte blokken in alleen-lezen-modus\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Zoeken naar slechte blokken (alleen-lezen-test): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Te veel slechte blokken -- controle is afgebroken\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Zoeken naar slechte blokken in lezen-en-schrijven-modus\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Van blok %lu tot %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Lezen en vergelijken: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 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:787
+#: misc/badblocks.c:796
 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:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3955,329 +3966,326 @@ msgstr ""
 "\n"
 "Interrupt ontvangen, bezig met opschonen...\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "tijdens schrijven van testpatroon, blok %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s is aangekoppeld; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 "maar 'badblocks' wordt gedwongen uitgevoerd.\n"
 "Hoop dat /etc/mtab onjuist is.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "het is niet veilig om 'badblocks' uit te voeren!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s wordt blijkbaar gebruikt door het systeem; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "maar 'badblocks' wordt gedwongen uitgevoerd.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "ongeldige %s: %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
-msgstr ""
+msgstr "Te groot aantal (%u) slechte blokken -- maximum is %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "kan geen geheugen reserveren voor testpatroon -- %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "In alleen-lezen-modus mag slechts één testpatroon gegeven worden"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "In alleen-lezen-modus is een willekeurig testpatroon niet toegestaan"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr "Kan de apparaatgrootte niet bepalen; geef de grootte handmatig op.\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "tijdens bepalen van apparaatgrootte"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "laatste blok"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "eerste blok"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "ongeldig beginblok: %llu -- moet kleiner dan %llu zijn"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "ongeldig beginblok: %llu -- moet een 32-bits waarde zijn"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "tijdens opstellen van lijst van slechte blokken in geheugen"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "invoerbestand heeft ongeldige opmaak"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "tijdens toevoegen aan lijst van slechte blokken in geheugen"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Controle is voltooid; %u slechte blokken gevonden (%d/%d/%d fouten).\n"
 
 #: misc/chattr.c:89
-#, fuzzy, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
-msgstr "Gebruik:  %s [-RVf] [-+=AaCcDdeijSsTtu] [-v VERSIE] BESTAND...\n"
+#, c-format
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "Gebruik:  %s [-pRVf] [-+=AaCcDdeijPSsTtuF] [-v VERSIE] BESTAND...\n"
 
-#: misc/chattr.c:159
+#: misc/chattr.c:160
 #, c-format
 msgid "bad project - %s\n"
 msgstr "ongeldig project: %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "ongeldige versie: %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "tijdens opvragen van de status van %s"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "tijdens lezen van vlaggen op %s"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Vlaggen van %s zijn gezet als "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "tijdens zetten van vlaggen op %s"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Versie van %s is gezet als %lu\n"
 
-#: misc/chattr.c:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "tijdens zetten van versie op %s"
 
-#: misc/chattr.c:271
+#: misc/chattr.c:272
 #, c-format
 msgid "Project of %s set as %lu\n"
 msgstr "Project van %s is gezet als %lu\n"
 
-#: misc/chattr.c:275
+#: misc/chattr.c:276
 #, c-format
 msgid "while setting project on %s"
 msgstr "tijdens instellen van project op %s"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Kan geen padvariabele reserveren in chattr_dir_proc()"
 
-#: misc/chattr.c:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "'=' gaat niet samen met '-' en '+'\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "Gebruik '-v', '=', '-' of '+'.\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:80 misc/create_inode.c:119
 #, c-format
 msgid "while reading inode %u"
 msgstr "tijdens lezen van inode %u"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 msgid "while expanding directory"
 msgstr "tijdens uitbreiden van map"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:97
 #, c-format
 msgid "while linking \"%s\""
 msgstr "tijdens koppelen van \"%s\""
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
 #, c-format
 msgid "while writing inode %u"
 msgstr "tijdens schrijven van inode %u"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:152 misc/create_inode.c:176
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "tijdens opsommen van kenmerken van \"%s\""
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:163
 #, c-format
 msgid "while opening inode %u"
 msgstr "tijdens openen van inode %u"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr "tijdens reserveren van geheugen"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:189 misc/create_inode.c:205
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "tijdens lezen van kenmerk \"%s\" van \"%s\""
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:214
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "tijdens schrijven van kenmerk \"%s\" naar inode %u"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:224
 #, c-format
 msgid "while closing inode %u"
 msgstr "tijdens sluiten van inode %u"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:275
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr "tijdens reserveren van geheugen voor inode \"%s\""
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:294
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr "tijdens aanmaken van inode \"%s\""
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:360
 #, c-format
 msgid "while creating symlink \"%s\""
 msgstr "tijdens aanmaken van symbolische koppeling \"%s\""
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:378 misc/create_inode.c:963
 #, c-format
 msgid "while looking up \"%s\""
 msgstr "tijdens opzoeken van \"%s\""
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:398
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr "tijdens aanmaken van map \"%s\""
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:627
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "tijdens openen van \"%s\" voor kopiëren"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr "tijdens veranderen van werkmap naar \"%s\""
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:815
 #, c-format
-msgid "while opening directory \"%s\""
-msgstr "tijdens openen van map \"%s\""
+msgid "while scanning directory \"%s\""
+msgstr "tijdens scannen van map \"%s\""
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:825
 #, c-format
 msgid "while lstat \"%s\""
 msgstr "tijdens lstat() van \"%s\""
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:875
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr "tijdens aanmaken van speciaal bestand \"%s\""
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:884
 msgid "malloc failed"
 msgstr "onvoldoende geheugen beschikbaar"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:892
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr "tijdens lezen van koppeling \"%s\""
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr "symbolische koppeling is groter geworden tussen lstat() en readlink()"
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:910
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr "tijdens schrijven van symbolische koppeling \"%s\""
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:921
 #, c-format
 msgid "while writing file \"%s\""
 msgstr "tijdens schrijven van bestand \"%s\""
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:934
 #, c-format
 msgid "while making dir \"%s\""
 msgstr "tijdens aanmaken van map \"%s\""
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:952
 msgid "while changing directory"
 msgstr "tijdens wijzigen van map"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:958
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr "item \"%s\" wordt genegeerd"
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:971
 #, c-format
 msgid "while setting inode for \"%s\""
 msgstr "tijdens instellen van inode voor \"%s\""
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:978
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "tijdens instellen van uitgebreide kenmerken voor \"%s\""
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:1004
 msgid "while saving inode data"
 msgstr "tijdens opslaan van inode-gegevens"
 
 #: misc/dumpe2fs.c:56
 #, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Gebruik:  %s [-bfghixV] [-o superblock=<nummer>] [-o blocksize=<getal>] "
-"apparaat\n"
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "Gebruik:  %s [-bfghimxV] [-o superblock=<nummer>] [-o blocksize=<getal>] apparaat\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -4395,106 +4403,54 @@ msgstr "tijdens printen van lijst van slechte blokken"
 msgid "Bad blocks: %u"
 msgstr "Slechte blokken: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "tijdens lezen van journal-inode"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "tijdens openen van journal-inode"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "tijdens lezen van journal-superblok"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Magisch getal van journal-superblok is ongeldig!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Journal-functies:         "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Grootte van journal:      "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Lengte van journal:       %u\n"
-"Journal-sequentie:        0x%08x\n"
-"Begin van journal:        %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr "Journal-controlesomtype:  crc32\n"
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-"Journal-controlesomtype:  %s\n"
-"Journal-controlesom:      0x%08x\n"
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Journal-foutmnummer:      %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "tijdens lezen van journal-superblok"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Kan magische getallen van journal-superblok niet vinden"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Blokgrootte in journal:     %u\n"
-"Lengte van journal:         %u\n"
-"Eerste journal-blok:        %u\n"
-"Kopcode van journal-reeks:  0x%08x\n"
-"Begin van journal:          %u\n"
-"Aantal journal-gebruikers:  %u\n"
+#: misc/dumpe2fs.c:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "reserveren van MMP-buffer is mislukt\n"
 
-#: misc/dumpe2fs.c:514
+#: misc/dumpe2fs.c:479
 #, c-format
-msgid "Journal users:            %s\n"
-msgstr "Journal-gebruikers:       %s\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "lezen van MMP-blok %llu van '%s'\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Kan geen geheugen reserveren om opties te ontleden!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Ongeldig superblok opgegeven: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Ongeldige blokgrootte opgegeven: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4517,243 +4473,226 @@ msgstr ""
 "    superblock=<superbloknummer>\n"
 "    blocksize=<blokgrootte>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tgebruik makend van %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** Controlesomfouten gevonden in bestandssysteem!  Draai 'e2fsck' nu!\n"
-"\n"
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Kan geen geldig bestandssysteem-superblok vinden.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
 msgstr ""
-"\n"
-"*** Controlesomfouten gevonden in bitkaarten!  Draai 'e2fsck' nu!\n"
-"\n"
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:747
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "tijdens lezen van '%s'-bitkaarten\n"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"*** Draai 'e2fsck' nu!\n"
 "\n"
-"%s: %s: fout tijdens lezen van bitkaarten: %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
-msgstr "Gebruik:  %s [-r|-Q] [-fr] apparaat imagebestand\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
+msgstr "Gebruik:  %s [-r|-Q] [-f] [-b superblok] [-B blokgrootte]  apparaat imagebestand\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "          %s -I apparaat imagebestand\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
-msgstr ""
-"          %s -ra [-cfnp] [-o bronpositie] [-O doelpositie] bron-bs [doel-"
-"bs]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+msgstr "          %s -ra [-cfnp] [-o bronpositie] [-O doelpositie] bron-bs [doel-bs]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr "tijdens reserveren van buffer"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "Schrijven van blok %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr "fout tijdens schrijven van blok %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr "fout in generic_write()"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Fout: header-grootte is groter dan wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr "Kan geen header-buffer reserveren.\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "tijdens schrijven van superblok"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "tijdens aanmaken van inodetabel"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "tijdens schrijven van blok-bitkaart"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "tijdens schrijven van inode-bitkaart"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Beschadigd mapblok %llu: onjuiste 'rec_len' (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Beschadigd mapblok %llu: onjuiste 'name_len' (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu blokken (%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
 msgstr "Kopiëren van "
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
-msgstr ""
-"Nu stoppen zal het bestandssysteem vernietigen; onderbreek opnieuw als u het "
-"zeker weet.\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+msgstr "Nu stoppen zal het bestandssysteem vernietigen; onderbreek opnieuw als u het zeker weet.\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " nog %s bij %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr "fout tijdens lezen van blok %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "Er zijn %llu / %llu blokken gekopieerd (%d%%) in %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "met %.2f MB/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
 msgstr "tijdens reserveren van l1-tabel"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr "tijdens reserveren van l2-cache"
 
 # XXX  "while putting"??
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
 msgstr ""
-"Waarschuwing: er zitten nog tabellen in de cache terwijl deze opgeslagen "
-"wordt;\n"
+"Waarschuwing: er zitten nog tabellen in de cache terwijl deze opgeslagen wordt;\n"
 "er zullen gegevens verloren gaan, dus de image kan ongeldig zijn.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr "tijdens reserveren van 'ext2_qcow2_image'"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr "tijdens initialiseren van 'ext2_qcow2_image'"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
-msgstr ""
-"**Programmafout**: meerdere opeenvolgende 'refcount'-blokken aangemaakt!\n"
+msgstr "**Programmafout**: meerdere opeenvolgende 'refcount'-blokken aangemaakt!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr "tijdens reserveren van blok-bitkaart"
 
 # XXX  maybe 'scrambled'?
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr "tijdens reserveren van gehusselde blok-bitkaart"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
 msgstr "Scannen van inodes...\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr "Kan geen blokbuffer reserveren"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "tijdens iteratie over inode %u"
 
 # XXX  uppercase QCOW2, add space
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "'raw'- en QCOW2-images kunnen niet geïnstalleerd worden"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr "fout tijdens lezen van bitkaarten"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr "tijdens openen van apparaatbestand"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr "tijdens het herstellen van de image-tabel"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "Optie '-a' kan alleen gebruikt worden met 'raw'- of QCOW2-images."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "Optie '-b' kan alleen gebruikt worden met 'raw'- of QCOW2-images."
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr "Posities zijn alleen toegestaan met 'raw'-images."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr "Verplaatsingsmodus is alleen toegestaan met 'raw'-images."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr "Verplaatsingsmodus vereist 'all-data'-modus"
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr "controle op aankoppeling"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4762,53 +4701,55 @@ msgid ""
 msgstr ""
 "\n"
 "Het draaien van 'e2image' op een schrijfbaar aangekoppeld bestandssysteem\n"
-"kan resulteren in een inconsistente image die onbruikbaar is voor "
-"debugging.\n"
+"kan resulteren in een inconsistente image die onbruikbaar is voor debugging.\n"
 "Gebruik optie '-f' als u dit echt wilt doen.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "Een QCOW2-image kan niet naar standaarduitvoer geschreven worden.\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr "Kan status van uitvoer niet opvragen\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "Image (%s) is gecomprimeerd.\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "Image (%s) is versleuteld.\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Image (%s) is beschadigd.\n"
+
+#: misc/e2image.c:1683
 #, 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/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr "Optie '-c' wordt alleen ondersteund in 'raw'-modus.\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
-msgstr ""
-"Optie '-c' wordt niet ondersteund bij schrijven naar standaarduitvoer.\n"
+msgstr "Optie '-c' wordt niet ondersteund bij schrijven naar standaarduitvoer.\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr "tijdens reserveren van 'check_buf'"
 
-# XXX  add 'is' before 'only'
-#: misc/e2image.c:1663
+# XXX  add the word 'is' before 'only'
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr "Optie '-p' wordt alleen ondersteund in 'raw'-modus.\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d blokken bevatten reeds de te kopiëren gegevens\n"
@@ -4838,7 +4779,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:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Waarschuwing: label is te lang, wordt afgekapt.\n"
@@ -4853,170 +4794,166 @@ 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:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Gebruik:  e2label apparaat [nieuw_label]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
 msgstr ""
-"Gebruik:  %s [-f] [-h] [-n] [-v] <transactiebestand> <bestandssysteem>\n"
+"Gebruik:  %s [-f] [-h] [-n] [-o positie] [-v] [-z ongedaanmakenbestand]\n"
+"                <transactiebestand> <bestandssysteem>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
-msgstr ""
-"Superblok van bestandssysteem komt niet overeen met die in 'undo'-bestand.\n"
+msgstr "Superblok van bestandssysteem komt niet overeen met die in 'undo'-bestand.\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr "UUID komt niet overeen.\n"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr "Laatste-aankoppelingstijd komt niet overeen.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr "Laatste-schrijftijd komt niet overeen.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr "Schrijfteller komt niet overeen.\n"
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr "tijdens lezen van bestandssysteem-superblok"
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr "tijdens ophalen van superblok"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "Controlesom van superblok in 'undo'-bestand komt niet overeen.\n"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr "ongeldige positie: %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
-msgstr ""
+msgstr "Zal niet naar een ongedaanmakenbestand schrijven tijdens het afspelen ervan.\n"
 
-#: misc/e2undo.c:367
-#, fuzzy, c-format
+#: misc/e2undo.c:373
+#, c-format
 msgid "while opening undo file `%s'\n"
-msgstr "tijdens openen van apparaatbestand"
+msgstr "tijdens openen van ongedaanmakenbestand '%s'\n"
 
-#: misc/e2undo.c:374
-#, fuzzy
+#: misc/e2undo.c:380
 msgid "while reading undo file"
-msgstr "tijdens lezen van hoofd-inode"
+msgstr "tijdens lezen van ongedaanmakenbestand"
 
-#: misc/e2undo.c:379
-#, fuzzy, c-format
+#: misc/e2undo.c:385
+#, c-format
 msgid "%s: Not an undo file.\n"
-msgstr "%s: te veel apparaten\n"
+msgstr "%s: is geen ongedaanmakenbestand\n"
 
-#: misc/e2undo.c:390
-#, fuzzy, c-format
+#: misc/e2undo.c:396
+#, c-format
 msgid "%s: Header checksum doesn't match.\n"
-msgstr "Controlesom van inode komt niet overeen met inode"
+msgstr "%s: Controlesom van header komt niet overeen.\n"
 
-#: misc/e2undo.c:397
-#, fuzzy, c-format
+#: misc/e2undo.c:403
+#, c-format
 msgid "%s: Corrupt undo file header.\n"
-msgstr "Extent-header is beschadigd"
+msgstr "%s: Header van undo-bestand is beschadigd.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
-msgstr ""
+msgstr "%s: Undo-blokgrootte is te groot.\n"
 
-#: misc/e2undo.c:406
-#, fuzzy, c-format
+#: misc/e2undo.c:412
+#, c-format
 msgid "%s: Undo block size too small.\n"
-msgstr "ongeldige blokgrootte: %s"
+msgstr "%s: Undo-blokgrootte is te klein.\n"
 
-#: misc/e2undo.c:419
-#, fuzzy, c-format
+#: misc/e2undo.c:425
+#, c-format
 msgid "%s: Unknown undo file feature set.\n"
-msgstr ""
-"Journal-superblok heeft een onbekende en incompatibele functievlag gezet.\n"
+msgstr "%s: Onbekende ongedaanmaken-functievlag gezet.\n"
 
-#: misc/e2undo.c:427
-#, fuzzy, c-format
+#: misc/e2undo.c:433
+#, c-format
 msgid "Error while determining whether %s is mounted."
-msgstr "Fout tijdens bepalen of %s aangekoppeld is.\n"
+msgstr "Fout tijdens bepalen of %s aangekoppeld is."
 
-#: misc/e2undo.c:433
-#, fuzzy
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
-msgstr "Voer 'e2undo' alleen uit op een niet-aangekoppeld bestandssysteem.\n"
+msgstr "Voer 'e2undo' alleen uit op een niet-aangekoppeld bestandssysteem."
 
-#: misc/e2undo.c:449
-#, fuzzy, c-format
+#: misc/e2undo.c:455
+#, c-format
 msgid "while opening `%s'"
-msgstr "tijdens openen van %s"
+msgstr "tijdens openen van '%s'"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
-msgstr ""
+msgstr "gegeven positie is te groot"
 
-#: misc/e2undo.c:501
-#, fuzzy
+#: misc/e2undo.c:507
 msgid "while reading keys"
-msgstr "tijdens lezen van bitkaarten"
+msgstr "tijdens lezen van sleutels"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
-msgstr ""
+msgstr "%s: ongeldig magisch getal voor sleutel op %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
-msgstr ""
+msgstr "%s: controlesomfout van sleutelblok op %llu.\n"
 
-#: misc/e2undo.c:546
-#, fuzzy, c-format
+#: misc/e2undo.c:552
+#, c-format
 msgid "%s: block %llu is too long."
-msgstr "Van blok %lu tot %lu\n"
+msgstr "%s: blok %llu is te lang."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
-#, fuzzy, c-format
+#: misc/e2undo.c:564 misc/e2undo.c:600
+#, c-format
 msgid "while fetching block %llu."
-msgstr "Schrijven van blok %llu\n"
+msgstr "tijdens ophalen van blok %llu."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
-msgstr ""
+msgstr "controlesomfout in bestandssysteemblok %llu (ongedaanmakenblok %llu)\n"
 
-#: misc/e2undo.c:609
-#, fuzzy, c-format
+#: misc/e2undo.c:615
+#, c-format
 msgid "while writing block %llu."
-msgstr "fout tijdens schrijven van blok %llu"
+msgstr "tijdens schrijven van blok %llu."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
-msgstr ""
+msgstr "Beschadiging in ongedaanmakenbestand; voer 'e2fsck' NU uit!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
-msgstr ""
+msgstr "In-/uitvoerfout tijdens afspelen; voer 'e2fsck' NU uit!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
-msgstr ""
+msgstr "Onvolledig ongedaanmakenitem; voer 'e2fsck' uit.\n"
 
 #: misc/findsuper.c:110
 #, c-format
@@ -5057,9 +4994,7 @@ msgstr ""
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
 msgstr ""
 
 #: misc/findsuper.c:264
@@ -5091,37 +5026,37 @@ msgstr ""
 "    de eerstvolgende gelegenheid toe dienen te voegen.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: niet gevonden\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: geen dochterprocessen meer?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Waarschuwing: %s voor apparaat %s werd beëindigd met signaal %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: de status is %x, dit zou nooit voor mogen komen.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Afgesloten met %s (afsluitwaarde %d).\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Fout %d tijdens uitvoering van fsck.%s voor %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5129,105 +5064,105 @@ msgstr ""
 "Óf geen óf alle bestandsssysteemsoorten bij optie -t\n"
 "dienen voorafgegaan te worden door 'no' of '!'.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Kan geen geheugen reserveren voor bestandssysteemsoorten.\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, 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"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: kan %s niet controleren: fsck.%s niet gevonden\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Alle bestandssystemen worden gecontroleerd.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 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"
+#: misc/fsck.c:1085
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Gebruik:  fsck [-AMNPRTV] [-C [descriptor]] [-t bestandssysteemsoort]\n"
-"          [bestandssysteemopties] [bestandssysteem...]\n"
+"               [bestandssysteemopties] [bestandssysteem...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: te veel apparaten\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: te veel argumenten\n"
 
 #: misc/fuse2fs.c:3745
-#, fuzzy
 msgid "Mounting read-only.\n"
-msgstr "Bestand is geopend voor alleen-lezen"
+msgstr "Wordt als alleen-lezen aangekoppeld.\n"
 
 #: misc/fuse2fs.c:3769
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
-msgstr ""
+msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
-#, fuzzy, c-format
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
+#, c-format
 msgid "Please run e2fsck -fy %s.\n"
-msgstr ""
-"Voer eerst 'e2fsck -f %s' uit.\n"
-"\n"
+msgstr "Voer 'e2fsck -fy %s' uit.\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
-msgstr ""
+msgstr "Het journal moet worden afgespeeld; draai 'e2fsck -E journal_only'.\n"
 
-#: misc/fuse2fs.c:3811
-#, fuzzy, c-format
+#: misc/fuse2fs.c:3812
+#, c-format
 msgid "%s: Writing to the journal is not supported.\n"
-msgstr "Het verkleinen van de inode-grootte wordt niet ondersteund.\n"
+msgstr "%s: Schrijven naar het journal wordt niet ondersteund.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr ""
+"Waarschuwing: een ongecontroleerd bestandssysteem wordt aangekoppeld;\n"
+"het uitvoeren van 'e2fsck' wordt aangeraden.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
+"Waarschuwing: het maximum aantal aankoppelingen is bereikt;\n"
+"het uitvoeren van 'e2fsck' wordt aangeraden.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr ""
+"Waarschuwing: de controletijd is bereikt;\n"
+"het uitvoeren van 'e2fsck' wordt aangeraden.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
-msgstr ""
+msgstr "Wees-inodes gevonden; het uitvoeren van 'e2fsck' wordt aangeraden.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
-msgstr ""
+msgstr "Fouten gedetecteerd; het uitvoeren van 'e2fsck' wordt aangeraden.\n"
 
 #: misc/lsattr.c:75
-#, fuzzy, c-format
+#, c-format
 msgid "Usage: %s [-RVadlpv] [files...]\n"
-msgstr "Gebruik:  %s [-RVadlv] [bestand...]\n"
+msgstr "Gebruik:  %s [-RVadlpv] [bestand...]\n"
 
 #: misc/lsattr.c:86
 #, c-format
@@ -5235,17 +5170,17 @@ msgid "While reading flags on %s"
 msgstr "Tijdens lezen van vlaggen op %s"
 
 #: misc/lsattr.c:93
-#, fuzzy, c-format
+#, c-format
 msgid "While reading project on %s"
-msgstr "Tijdens lezen van versie op %s"
+msgstr "Tijdens lezen van project op %s"
 
 #: misc/lsattr.c:102
 #, c-format
 msgid "While reading version on %s"
 msgstr "Tijdens lezen van versie op %s"
 
-#: misc/mke2fs.c:124
-#, fuzzy, c-format
+#: misc/mke2fs.c:130
+#, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
@@ -5253,55 +5188,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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 "Gebruik:  %s [-b blokgrootte] [-c|-l bestandsnaam] [-C clustergrootte]\n"
+"          [-d hoofdmap] [-e gedrag_bij_fouten] [-E uitgebreide_optie[,...]]\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:255
+"          [-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[,...]]\n"
+"          [-r bestandssysteemversie] [-t bestandssysteemsoort]\n"
+"          [-T gebruikstype] [-U UUID] [-z ongedaanmakenbestand]\n"
+"          [-jnqvDFKSV]  apparaat  [aantal_blokken]\n"
+
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Uitgevoerde opdracht is: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "tijdens uitvoering van '%s'"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "tijdens verwerken van de gemaakte lijst van slechte blokken"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, 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:295
+#: misc/mke2fs.c:301
 #, 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:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Gestopt...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5312,15 +5242,19 @@ msgstr ""
 "beginnend bij blok %u, bevat slechte blokken.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "tijdens het markeren van slechte blokken (als zijnde in gebruik)"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "tijdens schrijven van gereserveerde inodes"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Schrijven van inodetabellen: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5329,77 +5263,76 @@ msgstr ""
 "\n"
 "Kan %d blokken in inodetabel niet schrijven, beginnend bij %llu: %s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "voltooid                        \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "tijdens aanmaken van hoofdmap"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "tijdens lezen van hoofd-inode"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "tijdens zetten van eigenaar van hoofd-inode"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "tijdens aanmaken van /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "tijdens zoeken van /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "tijdens uitbreiden van /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "tijdens zetten van slechteblokken-inode"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Onvoldoende geheugen tijdens wissen van sectoren %d-%d.\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Waarschuwing: kan blok 0 niet lezen: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Waarschuwing: kan sector %d niet wissen: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "tijdens initialiseren van het journal-superblok"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Nulmaken van journal-apparaat: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "tijdens nulmaken van journal-apparaat (blok %llu, nummer %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "tijdens schrijven van journal-superblok"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
-msgstr ""
-"Aanmaken van bestandssysteem met %llu blokken (van %dK) en %u inodes.\n"
+msgstr "Aanmaken van bestandssysteem met %llu blokken (van %dK) en %u inodes.\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5408,160 +5341,167 @@ msgstr ""
 "Waarschuwing: %llu ongebruikte blokken.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Bestandssysteemlabel=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Soort besturingssysteem: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blokgrootte=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Clustergrootte=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Fragmentgrootte=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "'stride'=%u blokken, 'stripe'-breedte=%u blokken\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u inodes, %llu blokken\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, 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:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Eerste gegevensblok=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Hoofdmap-eigenaar=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximum aantal bestandssysteemblokken=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u blokgroepen\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u blokgroep\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, 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:702
+#: misc/mke2fs.c:714
 #, 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:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inodes per groep\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "Bestandssysteem-UUID: %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Superblokreservekopieën zijn opgeslagen in blokken: "
 
 # XXX  manpage does not mention -O 64bit
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:822
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s vereist '-O 64bit'\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "'%s' moet vóór 'resize=%u' staan\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Ongeldige 'desc_size': '%s'\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Ongeldige hash-seed: %s\n"
+
+#: misc/mke2fs.c:867
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Ongeldige positie: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Ongeldig 'mmp_update_interval': %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Ongeldig aantal reservekopie-superblokken: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Ongeldig argument van 'stride': %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Ongeldig argument van 'stripe_width': %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Ongeldig argument van 'resize': %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:965
 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:959
+#: misc/mke2fs.c:989
 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:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Ongeldige hoofdmap-eigenaar: '%s'\n"
 
-#: misc/mke2fs.c:1035
-#, fuzzy, c-format
+#: misc/mke2fs.c:1069
+#, c-format
+msgid "Invalid encoding: %s"
+msgstr "Ongeldige codering: %s"
+
+#: misc/mke2fs.c:1087
+#, c-format
 msgid ""
 "\n"
 "Bad option(s) specified: %s\n"
@@ -5583,6 +5523,8 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
@@ -5595,23 +5537,22 @@ msgstr ""
 "Geldige uitgebreide opties zijn:\n"
 "    mmp_update_interval=<interval>\n"
 "    num_backup_sb=<0|1|2>\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"
 "    offset=<positie waarop het bestandssysteem te beginnen>\n"
 "    resize=<maximum grootte van bestandssysteem in blokken>\n"
 "    packed_meta_blocks=<0 voor uitschakelen, 1 voor inschakelen>\n"
 "    lazy_itable_init=<0 voor uitschakelen, 1 voor inschakelen>\n"
 "    lazy_journal_init=<0 voor uitschakelen, 1 voor inschakelen>\n"
-"    root_uid=<UID van hoofdmap>\n"
-"    root_gid=<GID van hoofdmap>\n"
+"    root_owner=<UID van hoofdmap>:<GID van hoofdmap>\n"
 "    test_fs\n"
 "    discard\n"
 "    nodiscard\n"
-"    quotatype=<usr OF grp>\n"
+"    encoding=<codering>\n"
+"    encoding_flags=<vlaggen>\n"
+"    quotatype=<in_te_schakelen_quotatypes>\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5622,7 +5563,17 @@ msgstr ""
 "Waarschuwing: 'stripe'-breedte %u is geen even veelvoud van 'stride' %u.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr ""
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5632,17 +5583,17 @@ msgstr ""
 "    %s\n"
 
 # Dit gaat over het argument van optie -O.
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Ongeldige bestandssysteemfunctie: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ongeldige aankoppelingsoptie: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
@@ -5651,7 +5602,7 @@ msgstr ""
 "\n"
 "Uw mke2fs.conf definieert geen bestandssysteemtype %s.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5659,11 +5610,11 @@ msgstr ""
 "U dient waarschijnlijk een nieuwer mke2fs.conf-bestand te installeren.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 msgid "Aborting...\n"
 msgstr "Gestopt...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5674,155 +5625,152 @@ msgstr ""
 "Waarschuwing: bestandssysteemtype %s is niet gedefinieerd in mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Kan geen geheugen reserveren voor nieuwe PATH.\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1608
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Initialiseren van profile is mislukt (fout: %ld).\n"
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "ongeldige blokgrootte: %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, 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:1588
+#: misc/mke2fs.c:1661
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "ongeldige clustergrootte: %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "'optie '-R' is verouderd; gebruik '-E'"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "onjuist argument van -e (gedrag bij een fout): %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr "Ongeldig aantal blokken per groep"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 msgid "blocks per group must be multiple of 8"
 msgstr "argument van -g (blokken per groep) is geen veelvoud van 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "Ongeldig getal voor metagroepgrootte"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
 msgstr "Metagroepgrootte moet een macht van 2 zijn"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "Metagroepgrootte (%lu) moet kleiner zijn dan of gelijk zijn aan 2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "ongeldige inodeverhouding %s (min %d / max %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1744
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "ongeldige grootte van inode: %s"
 
-#: misc/mke2fs.c:1684
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
+#: misc/mke2fs.c:1757
+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:1695
+#: misc/mke2fs.c:1768
 msgid "in malloc for bad_blocks_filename"
 msgstr "onvoldoende geheugen in bad_blocks_filename()"
 
-#: misc/mke2fs.c:1704
-#, fuzzy, c-format
+#: misc/mke2fs.c:1777
+#, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
-msgstr "Waarschuwing: label is te lang, wordt afgekapt.\n"
+msgstr ""
+"Waarschuwing: label is te lang -- wordt afgekapt tot '%s'.\n"
+"\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, 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:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "ongeldig aantal inodes: %s"
 
-#: misc/mke2fs.c:1741
-#, fuzzy
+#: misc/mke2fs.c:1814
 msgid "while allocating fs_feature string"
-msgstr "tijdens reserveren van buffers"
+msgstr "tijdens reserveren van tekenreeks voor 'fs_feature'"
 
 # lib/prange.c:299 lib/prange.c:316
-#: misc/mke2fs.c:1758
-#, fuzzy, c-format
+#: misc/mke2fs.c:1831
+#, c-format
 msgid "bad revision level - %s"
-msgstr "ongeldig versienummer: %s"
+msgstr "ongeldig revisienummer: %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "tijdens aanmaken van versie %d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 msgid "The -t option may only be used once"
 msgstr "Optie '-t' mag slechts één keer gegeven worden"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1858
 msgid "The -T option may only be used once"
 msgstr "Optie '-T' mag slechts één keer gegeven worden"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "tijdens openen van journal-apparaat %s\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1920
 #, 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:1853
+#: misc/mke2fs.c:1926
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Blokgrootte van het journal-apparaat wordt gebruikt: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1937
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "ongeldige blokken '%s' op apparaat '%s'"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "bestandssysteem"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "tijdens bepalen van grootte van bestandssysteem"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5830,7 +5778,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:1914
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5843,50 +5791,48 @@ 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:1931
+#: misc/mke2fs.c:2015
 msgid "Filesystem larger than apparent device size."
 msgstr "Bestandssysteem is groter dan de schijnbare apparaatgrootte."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:2035
 msgid "Failed to parse fs types list\n"
 msgstr "Verwerken van lijst met bestandssysteemsoorten is mislukt\n"
 
-#: misc/mke2fs.c:1999
-#, fuzzy
+#: misc/mke2fs.c:2085
 msgid "The HURD does not support the filetype feature.\n"
-msgstr "De Hurd ondersteunt de bestandstypenfunctie niet.\n"
+msgstr "De Hurd ondersteunt de 'filetype'-functie niet.\n"
 
-#: misc/mke2fs.c:2004
-#, fuzzy
+#: misc/mke2fs.c:2090
 msgid "The HURD does not support the huge_file feature.\n"
-msgstr "De Hurd ondersteunt de bestandstypenfunctie niet.\n"
+msgstr "De Hurd ondersteunt de 'huge_file'-functie niet.\n"
 
-#: misc/mke2fs.c:2009
-#, fuzzy
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
-msgstr "De Hurd ondersteunt de bestandstypenfunctie niet.\n"
+msgstr "De Hurd ondersteunt de 'metadata_csum'-functie niet.\n"
+
+#: misc/mke2fs.c:2100
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "De Hurd ondersteunt de 'ea_inode'-functie niet.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2110
 msgid "while trying to determine hardware sector size"
 msgstr "tijdens bepalen van de hardware-sectorgrootte"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2116
 msgid "while trying to determine physical sector size"
 msgstr "tijdens bepalen van de fysieke sectorgrootte"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2148
 msgid "while setting blocksize; too small for device\n"
 msgstr "tijdens instellen van de blokgrootte; te klein voor apparaat\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2153
 #, 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:2086
+#: misc/mke2fs.c:2177
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5895,95 +5841,96 @@ 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:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2191
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
-"%s: De grootte (0x%llx blokken) van apparaat %s kan niet uitgedrukt\n"
-"    worden in 32 bits bij een blokgrootte van %d.\n"
+"%s: De grootte (0x%llx blokken) van apparaat %s is te groot om\n"
+"    een bestandssysteem aan te kunnen maken met blokgrootte %d.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "Lijst met bestandssysteemsoorten voor mke2fs.conf: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 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:2135
+#: misc/mke2fs.c:2228
 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:2145
+#: misc/mke2fs.c:2238
 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:2158
+#: misc/mke2fs.c:2251
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "ongeldig percentage gereserveerde blokken: %lf"
 
 # XXX  option should '-O extent', singular
-#: misc/mke2fs.c:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
 msgstr ""
 "Extents MOETEN ingeschakeld zijn voor een 64-bits bestandssysteem.\n"
 "Geef optie '-O extent' om dit te doen.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "De clustergrootte mag niet kleiner zijn dan de blokgrootte.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "het opgeven van een clustergrootte vereist de 'bigalloc'-functie"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, 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:2224
+#: misc/mke2fs.c:2317
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "Uitlijning van %s is %lu bytes verschoven.\n"
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2319
 #, 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:2247
+#: misc/mke2fs.c:2340
 #, 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:2251
+#: misc/mke2fs.c:2344
 #, 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:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "Suggestie: Gebruik Linux-kernel 3.18 of nieuwer voor verbeterde stabiliteit van de controlesomfuncties op metagegevens en journal.\n"
+
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
 msgstr ""
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr ""
+
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -5993,11 +5940,24 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2449
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr "inodes van %d bytes zijn te klein voor projectquota"
+
+#: misc/mke2fs.c:2465
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"De functies 'encrypt' en 'casefold' gaan niet samen.\n"
+"Ze kunnen niet beide ingeschakeld worden.\n"
+
+#: misc/mke2fs.c:2480
 msgid "Can't support bigalloc feature without extents feature"
 msgstr "Kan 'bigalloc'-functie niet ondersteunen zonder 'extents'-functie"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -6005,7 +5965,7 @@ msgstr ""
 "De functies 'resize_inode' en 'meta_bg' gaan niet samen.\n"
 "Ze kunnen niet beide ingeschakeld worden.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -6017,48 +5977,39 @@ msgstr ""
 "Zie https://ext4.wiki.kernel.org/index.php/Bigalloc voor meer informatie.\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 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:2367
+#: misc/mke2fs.c:2516
 msgid "blocks per group count out of range"
 msgstr "teller van blokken-per-groep ligt buiten het toegestane bereik"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2538
 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:2401
+#: misc/mke2fs.c:2550
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "ongeldige inode-grootte %d (min %d / max %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
+msgstr "inodes van %d bytes zijn te klein voor inline gegevens -- geef een grotere grootte op"
 
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "te veel inodes (%llu) -- inodeverhouding verhogen?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2587
 #, 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:2465
+#: misc/mke2fs.c:2601
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -6070,71 +6021,66 @@ msgstr ""
 "   geef een hogere bytes-per-inodeverhouding op (-i),\n"
 "   of verklein het aantal inodes (-N).\n"
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2788
 msgid "Discarding device blocks: "
 msgstr "Verwerpen van blokken: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 msgid "failed - "
 msgstr "is mislukt - "
 
-#: misc/mke2fs.c:2727
-#, fuzzy
+#: misc/mke2fs.c:2863
 msgid "while initializing quota context"
-msgstr "tijdens initialiseren van 'ext2_qcow2_image'"
+msgstr "tijdens initialiseren van quota-context"
 
-#: misc/mke2fs.c:2734
-#, fuzzy
+#: misc/mke2fs.c:2870
 msgid "while writing quota inodes"
-msgstr "tijdens schrijven van journal-inode"
+msgstr "tijdens schrijven van quota-inodes"
 
-#: misc/mke2fs.c:2759
-#, fuzzy, c-format
+#: misc/mke2fs.c:2895
+#, c-format
 msgid "bad error behavior in profile - %s"
-msgstr "onjuist argument van -e (gedrag bij een fout): %s"
+msgstr "onjuist foutengedrag gegeven in profile - %s"
+
+#: misc/mke2fs.c:2971
+msgid "in malloc for android_sparse_params"
+msgstr "onvoldoende geheugen in android_sparse_params()"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "tijdens aanmaken van superblok"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr ""
+#: misc/mke2fs.c:3016
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "De 'metadata_csum_seed'-functie vereist de 'metadata_csum'-functie.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 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"
 
 # XXX  uppercase OS
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "onbekend besturingssysteem: %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 msgid "Allocating group tables: "
 msgstr "Reserveren van groepstabellen: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr "tijdens reserveren van bestandssysteemtabellen"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6142,30 +6088,30 @@ msgstr ""
 "\n"
 "    tijdens converteren van subcluster-bitkaart"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
-msgstr ""
+msgstr "%s kan verder beschadigd raken door het herschrijven van het superblok\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, 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:3114
+#: misc/mke2fs.c:3279
 msgid "while reserving blocks for online resize"
 msgstr "tijdens reserveren van uitbreidingsblokken"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "journal"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Toevoegen van journal aan apparaat %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
@@ -6174,21 +6120,21 @@ msgstr ""
 "\n"
 "    tijdens toevoegen van journal aan apparaat %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "voltooid\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Aanmaken van journal wordt overgeslagen wegens optie '-S'.\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Aanmaken van journal (%u blokken): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6196,46 +6142,38 @@ msgstr ""
 "\n"
 "    tijdens aanmaken van journal"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 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:3192
+#: misc/mke2fs.c:3357
 #, 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:3210
-#, fuzzy
+#: misc/mke2fs.c:3373
 msgid "Copying files into the device: "
-msgstr "Fout bij wegschrijven van buffers naar opslagapparaat: %m\n"
+msgstr "Kopiëren van bestanden naar apparaat: "
 
-#: misc/mke2fs.c:3216
-#, fuzzy
+#: misc/mke2fs.c:3379
 msgid "while populating file system"
-msgstr "tijdens reserveren van l1-tabel"
+msgstr "tijdens bevolken van bestandssysteem"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Schrijven van superblokken en bestandssysteem-metagegevens: "
 
-#: misc/mke2fs.c:3230
-#, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Waarschuwing: problemen tijdens schrijven van superblokken."
+#: misc/mke2fs.c:3393
+msgid "while writing out and closing file system"
+msgstr "tijdens schrijven en sluiten van het bestandssysteem"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6243,32 +6181,34 @@ msgstr ""
 "voltooid\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
-msgstr ""
+msgid "while zeroing block %llu for hugefile"
+msgstr "tijdens nulmaken van blok %llu voor enorm bestand"
+
+#: misc/mk_hugefiles.c:515
+#, c-format
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgstr "Partitiepositie van %llu (%uK) blokken is niet compatibel met clustergrootte %u.\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
-msgstr ""
+msgstr "Enorme bestanden worden nulgemaakt.\n"
 
-#: misc/mk_hugefiles.c:492
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:584
+#, c-format
 msgid "Creating %lu huge file(s) "
-msgstr "Aanmaken van normaal bestand %s\n"
+msgstr "Aanmaken van %lu enorm(e) bestand(en) "
 
-#: misc/mk_hugefiles.c:494
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:586
+#, c-format
 msgid "with %llu blocks each"
-msgstr ""
-"Waarschuwing: %llu ongebruikte blokken.\n"
-"\n"
+msgstr "met elk %llu blokken"
 
-#: misc/mk_hugefiles.c:505
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:595
+#, c-format
 msgid "while creating huge file %lu"
-msgstr "tijdens iteratie over inode %u"
+msgstr "tijdens aanmaken van enorm bestand %lu"
 
 #: misc/mklost+found.c:50
 msgid "Usage: mklost+found\n"
@@ -6311,56 +6251,68 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: kop=%3d sec=%3d cil=%4d   begin=%8d grootte=%8lu einde=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "Controleer het bestandssysteem met 'e2fsck'.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+"\n"
+"Deze bewerking vereist een vers-gecontroleerd bestandssysteem.\n"
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Controleer het bestandssysteem met 'e2fsck -f'.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "Controleer het bestandssysteem met 'e2fsck'.\n"
+msgstr "Controleer het bestandssysteem met 'e2fsck -fD'.\n"
 
-#: misc/tune2fs.c:134
-#, fuzzy, c-format
+#: misc/tune2fs.c:136
+#, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
 msgstr ""
 "Gebruik:  %s [-c maximum_aantal_aankoppelingen] [-C aankoppelingental]\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"
+"          [-e gedrag_bij_fouten] [-E uitgebreide_optie[,...]] [-f]\n"
+"          [-g groep] [-i interval[d|w|m]] [-I nieuwe_inode-grootte]\n"
+"          [-j] [-J journal-opties] [-l] [-L label]\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"
-"          [-I nieuwe_inode-grootte] [-Q quota-opties]  apparaat\n"
+"          [-Q quota-opties] [-r aantal_gereserveerde_blokken]\n"
+"          [-T tijdstip_van_laatste_controle] [-u gebruiker]\n"
+"          [-U UUID] [-z ongedaanmakenbestand]  apparaat\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Geen journal-superblok gevonden!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "tijdens openen van extern journal"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s: is geen journal-apparaat.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr "Het journal-superblok is beschadigd: nr_users is te groot (%d).\n"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "UUID van bestandssysteem niet gevonden op journal-apparaat.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6368,70 +6320,69 @@ msgstr ""
 "Kan journal-apparaat niet lokaliseren.  Het is NIET verwijderd.\n"
 "Gebruik optie '-f' om het ontbrekende journal-apparaat te verwijderen.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "Journal is verwijderd.\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "tijdens lezen van bitkaarten"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
 msgstr "tijdens wissen van journal-inode"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "tijdens schrijven van journal-inode"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(En herstart daarna uw computer!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
-msgstr ""
+msgstr "Voer eerst 'e2fsck' uit.  Voer dan 'resize2fs %s %s"
 
-#: misc/tune2fs.c:479
-#, fuzzy, c-format
+# XXX The next three should be a single msgid.
+#: misc/tune2fs.c:489
+#, c-format
 msgid "Please run `resize2fs %s %s"
-msgstr ""
-"Voer eerst 'e2fsck -f %s' uit.\n"
-"\n"
+msgstr "Voer 'resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
-msgstr ""
+msgstr " -z \"%s\""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:495
 #, c-format
 msgid "' to enable 64-bit mode.\n"
-msgstr ""
+msgstr "' uit om 64-bit modus in te schakelen.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:497
 #, c-format
 msgid "' to disable 64-bit mode.\n"
-msgstr ""
+msgstr "' uit om 64-bit modus uit te schakelen.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Het uitschakelen van bestandssysteemfunctie '%s' is niet mogelijk.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Het inschakelen van bestandssysteemfunctie '%s' is niet mogelijk.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6439,24 +6390,23 @@ msgstr ""
 "De journal-vlag mag alleen gewist worden wanneer het bestandssysteem\n"
 "ontkoppeld is of aangekoppeld als alleen-lezen.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
-"De reddingsvlag van het journal is gezet.\n"
+"De herstellingsvlag van het journal is gezet.\n"
 "Voer eerst 'e2fsck' uit, voordat u de journal-vlag wist.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
-"Het inschakelen van bestandssysteemfunctie 'sparse_super' is niet mogelijk "
-"voor\n"
+"Het inschakelen van bestandssysteemfunctie 'sparse_super' is niet mogelijk voor\n"
 "bestandssystemen met ingeschakelde 'meta_bg'-functievlag.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6466,14 +6416,14 @@ msgstr ""
 "niet ingeschakeld worden als het bestandssysteem\n"
 "aangekoppeld of alleen-lezen is.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1143
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 "Bescherming tegen meervoudige aankoppelingen is ingeschakeld\n"
 "met een bijwerkingsinterval van %d seconden.\n"
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6482,20 +6432,20 @@ msgstr ""
 "niet uitgeschakeld worden als het bestandssysteem\n"
 "alleen-lezen is.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 msgid "Error while reading bitmaps\n"
 msgstr "Fout tijdens lezen van bitkaarten\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr "Magisch getal in MMP-blok klopt niet -- verwacht: %x, gevonden: %x\n"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1174
 msgid "while reading MMP block."
 msgstr "tijdens lezen van MMP-blok"
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
@@ -6503,7 +6453,7 @@ msgstr ""
 "Het uitschakelen van bestandssysteemfunctie 'flex_bg' zou het\n"
 "bestandssysteem inconsistent maken.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6511,55 +6461,46 @@ msgstr ""
 "De 'huge_file'-functievlag mag alleen gewist worden wanneer het\n"
 "bestandssysteem ontkoppeld is of aangekoppeld als alleen-lezen.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
-msgstr ""
+msgstr "Het inschakelen van controlesommen kan enige tijd duren."
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
-msgstr ""
+msgstr "Kan 'metadata_csum' niet inschaklen voor een aangekoppeld bestandssysteem!\n"
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
-msgstr ""
+msgstr "Het uitschakelen van controlesommen kan enige tijd duren."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
-msgstr ""
+msgstr "Kan 'metadata_csum' niet uitschaklen voor een aangekoppeld bestandssysteem!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
-msgstr ""
-"Kan 64-bit-modus niet inschakelen terwijl bestandssysteem aangekoppeld is!\n"
+msgstr "Kan 64-bit-modus niet inschakelen terwijl bestandssysteem aangekoppeld is!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
-msgstr ""
-"Kan 64-bit-modus niet uitschakelen terwijl bestandssysteem aangekoppeld is!\n"
+msgstr "Kan 64-bit-modus niet uitschakelen terwijl bestandssysteem aangekoppeld is!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
-msgstr ""
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
+msgstr "Kan 'project'-functie niet inschakelen; de inode-grootte is te klein.\n"
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6567,28 +6508,33 @@ msgstr ""
 "\n"
 "Waarschuwing: '^quota'-optie overstijgt '-Q'-argumenten.\n"
 
-#: misc/tune2fs.c:1344
-#, fuzzy
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr "Kan 'encrypt'-functie niet inschakelen op bestandssystemen met ingeschakelde 'encoding'-functie.\n"
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
 msgstr ""
-"Het inschakelen van bestandssysteemfunctie 'sparse_super' is niet mogelijk "
-"voor\n"
-"bestandssystemen met ingeschakelde 'meta_bg'-functievlag.\n"
+"Het inschakelen van bestandssysteemfunctie 'metadata_csum_seed' is alleen\n"
+"mogelijk voor bestandssystemen met ingeschakelde 'metadata_csum'-functievlag.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr "Het herberekenen van controlesommen kan enige tijd duren."
+
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "Het bestandssysteem heeft al een journal.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, c-format
 msgid ""
 "\n"
@@ -6597,21 +6543,21 @@ msgstr ""
 "\n"
 "    tijdens openen van journal op %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Aanmaken van journal op apparaat %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "tijdens toevoegen van bestandssysteem aan journal op %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "Aanmaken van journal-inode: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6619,33 +6565,36 @@ msgstr ""
 "\n"
 "    tijdens aanmaken van journal-inode"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr "Kan projectquota niet inschakelen; de inode-grootte is te klein.\n"
+
+#: misc/tune2fs.c:1588
 msgid "while initializing quota context in support library"
 msgstr "tijdens initialiseren van quota-context in ondersteunende bibliotheek"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1603
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr "tijdens bijwerken van quota-grenzen (%d)"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1611
 #, c-format
 msgid "while writing quota file (%d)"
 msgstr "tijdens schrijven van quota-bestand (%d)"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "while removing quota file (%d)"
 msgstr "tijdens verwijderen van quota-bestand (%d)"
 
-#: misc/tune2fs.c:1575
-#, fuzzy
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6656,99 +6605,104 @@ msgstr ""
 "Ongeldige quota-optie opgegeven.\n"
 "\n"
 "Geldige quota-opties zijn (te scheiden met een komma):\n"
-"    [^]usrquota\n"
-"    [^]grpquota\n"
+"    [^]usr[quota]\n"
+"    [^]grp[quota]\n"
+"    [^]prj[quota]\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Kan datum/tijd-specificatie niet ontleden: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "onjuist aankoppelingenaantal: %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, 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:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "onjuist interval: %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "onjuiste verhouding (%s) voor gereserveerde blokken"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
 msgid "-o may only be specified once"
 msgstr "Optie '-o' mag slechts één keer gegeven worden"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
 msgid "-O may only be specified once"
 msgstr "Optie '-o' mag slechts één keer gegeven worden"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "onjuist aantal gereserveerde blokken: %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "onjuiste UID of gebruikersnaam: %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "ongeldige grootte van inode: %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, 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:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "MMP-bijwerkingsinterval is te groot: %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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:1995
+#: misc/tune2fs.c:2078
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "Bestandssysteem-foutvlag wordt gezet om een controle af te dwingen.\n"
+
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Ongeldig argument van 'stride': %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Ongeldig argument van 'stripe_width': %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2126
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Ongeldig hash-algoritme: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2132
 #, 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:2050
+#: misc/tune2fs.c:2151
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6760,8 +6714,10 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -6775,40 +6731,38 @@ 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"
+"    mmp_update_interval=<update-interval voor MMP in seconden>\n"
+"    stride=<aantal blokken dat samen per RAID-schijf wordt gelezen/geschreven>\n"
+"    stripe_width=<aantal blokken per stripe> (meestal stride × aantal schijven)\n"
+"    force_fsck\n"
 "    test_fs\n"
 "    ^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 msgid "Failed to read inode bitmap\n"
 msgstr "Lezen van inode-bitkaart is mislukt\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 msgid "Failed to read block bitmap\n"
 msgstr "Lezen van blok-bitkaart is mislukt\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "te verplaatsen blokken"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 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:2550
+#: misc/tune2fs.c:2653
 msgid "Not enough space to increase inode size \n"
 msgstr "Er is onvoldoende ruimte om de inode-grootte te vergroten. \n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2658
 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:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6816,7 +6770,15 @@ msgstr ""
 "Fout tijdens veranderen van de inode-grootte.\n"
 "Voer 'e2undo' uit om de bestandssysteemwijzigingen ongedaan te maken. \n"
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2900
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+"Als u zeker weet dat het bestandssysteem nergens gebruikt wordt,\n"
+"geef dan deze opdracht: 'tune2fs -f -E clear_mmp {apparaat}'\n"
+
+#: misc/tune2fs.c:2907
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
@@ -6826,75 +6788,96 @@ msgstr ""
 "Probeer het te repareren met:\n"
 "    e2fsck -f %s\n"
 
-#: misc/tune2fs.c:2811
-#, fuzzy
+#: misc/tune2fs.c:2919
 msgid "Cannot modify a journal device.\n"
-msgstr "%s: is geen journal-apparaat.\n"
+msgstr "Kan een journal-apparaat niet wijzigen.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "De inode-grootte is al %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 msgid "Shrinking inode size is not supported\n"
 msgstr "Het verkleinen van de inode-grootte wordt niet ondersteund.\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "ongeldige inode-grootte %lu (max %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
+msgstr "Het veranderen van de inode-grootte kan enige tijd duren."
+
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
 msgstr ""
+"Waarschuwing: Het journal bevat gegevens. U kunt beter eerst het journal afspelen met:\n"
+"\n"
+"    e2fsck -E journal_only %s\n"
+"\n"
+"en dan het huidige commando opnieuw geven.  Anders kunnen gemaakte veranderingen\n"
+"overschreven worden door het latere afspelen van het journal.\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Herstellen van journal.\n"
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3028
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Het maximum aantal aankoppelingen is op %d gezet\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3034
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Het huidige aantal aankoppelingen is op %d gezet\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Gedrag bij fouten is op %d gezet\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "GID van gereserveerde blokken is op %lu gezet\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3049
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "interval tussen controles is te groot (%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3056
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Interval tussen controles is op %lu seconden gezet\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3063
 #, 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:2930
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "aantal gereserveerde blokken is te groot (%llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3076
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Het aantal gereserveerde blokken is op %llu gezet\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3081
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6902,7 +6885,7 @@ msgstr ""
 "\n"
 "Het bestandssysteem is al zuinig met superblokken.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6912,7 +6895,7 @@ msgstr ""
 "Het inschakelen van de 'sparse_super'-functievlag is niet mogelijk voor\n"
 "bestandssystemen met ingeschakelde 'meta_bg'-functievlag.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
@@ -6921,7 +6904,7 @@ msgstr ""
 "\n"
 "De zuinig-met-superblokkenvlag is aangezet.  %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6929,58 +6912,53 @@ msgstr ""
 "\n"
 "Het uitzetten van de 'sparse_super'-functievlag is niet mogelijk.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Tijd van laatste controle is op %s gezet\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3113
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "UID van gereserveerde blokken is op %lu gezet\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3145
 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:3024
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
+#: misc/tune2fs.c:3163
+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:3048
-msgid "The UUID may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"De UUID mag alleen gewijzigd worden wanneer het bestandssysteem ontkoppeld "
-"is.\n"
+#: misc/tune2fs.c:3181
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "Een UUID instellen voor dit bestandssyteem kan enige tijd duren."
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
-msgstr ""
+#: misc/tune2fs.c:3196
+msgid "The UUID may only be changed when the filesystem is unmounted.\n"
+msgstr "De UUID mag alleen gewijzigd worden wanneer het bestandssysteem ontkoppeld is.\n"
 
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "Onjuiste UUID-indeling\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 msgid "Need to update journal superblock.\n"
 msgstr "Het journal-superblok moet bijgewerkt worden.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 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:3133
+#: misc/tune2fs.c:3274
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -6988,78 +6966,61 @@ msgstr ""
 "Het veranderen van de inode-grootte is niet mogelijk voor\n"
 "bestandssystemen met ingeschakelde 'flex_bg'-functievlag.\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "De inode-groote is op %lu gezet\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 msgid "Failed to change inode size\n"
 msgstr "Het veranderen van de inode-grootte is mislukt. \n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "De 'stride'-lengte is op %d gezet\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "De 'stripe'-breedte is op %d gezet\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3322
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "De uitgebreide standaard aankoppelingsopties zijn op '%s' gezet\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr "Herstellen van journal.\n"
-
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr "<verdergaand>\n"
 
-#: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Toch doorgaan (of %d seconden wachten)? (j,n) "
+#: misc/util.c:105
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "Toch doorgaan? (anders wordt na %d seconden doorgegaan) (j,N) "
 
-#: misc/util.c:108
-#, fuzzy
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
-msgstr "Toch doorgaan? (j,n) "
+msgstr "Toch doorgaan? (j,N) "
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "'mke2fs' wordt gedwongen uitgevoerd.  Hoop dat /etc/mtab onjuist is.\n"
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr "zal hier geen %s maken!\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr "'mke2fs' wordt gedwongen uitgevoerd.\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr "Kan geen geheugen reserveren om journal-opties te ontleden!\n"
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
@@ -7068,7 +7029,7 @@ msgstr ""
 "\n"
 "Kan geen journal-apparaat vinden dat overeenkomt met %s\n"
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -7098,7 +7059,7 @@ msgstr ""
 "De grootte van het journal is minimaal 1024 en maximaal 10240000 blokken.\n"
 "\n"
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
@@ -7106,7 +7067,7 @@ msgstr ""
 "\n"
 "Bestandssysteem is te klein voor een journal.\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -7117,7 +7078,7 @@ msgstr ""
 "De gevraagde journal-afmeting is %d blokken; maar deze dient\n"
 "tussen de 1024 en de 10.240.000 blokken te liggen.  Gestopt.\n"
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
@@ -7125,7 +7086,7 @@ msgstr ""
 "\n"
 "Journal-afmeting is te groot voor bestandssysteem.\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
@@ -7278,45 +7239,45 @@ msgid "#\tNum=%llu, Size=%llu, Cursor=%llu, Sorted=%llu\n"
 msgstr "# (debug)\tNum=%llu Size=%llu, Cursor=%llu, Sorted=%llu\n"
 
 #: resize/main.c:49
-#, fuzzy, c-format
+#, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
-"Gebruik:  %s [-d debugvlaggen] [-fFMpP] apparaat [nieuwe_grootte]\n"
+"Gebruik:  %s [-d debugvlaggen] [-fFMPp] apparaat [-b|-s|nieuwe_grootte]\n"
+"                 [-S RAID-stride] [-z ongedaanmakenbestand]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Uitbreiden van inodetabel"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Verplaatsen van blokken"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Scannen van inodetabel"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Bijwerken van inode-verwijzingen"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Verplaatsen van inodetabel"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Onbekende stap?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Begin van stap %d (max = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7329,17 +7290,17 @@ msgstr ""
 "de dwangoptie als u toch door wilt gaan.\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "tijdens openen van %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "tijdens opvragen van status van %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7348,31 +7309,30 @@ msgstr ""
 "Voer eerst 'e2fsck -f %s' uit.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Geschatte minimum grootte van het bestandssysteem: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Ongeldige nieuwe grootte: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 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:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Nieuwe grootte is kleiner dan minimum (%llu).\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Ongeldige lengte voor 'stride'"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7383,76 +7343,66 @@ msgstr ""
 "U vroeg om een nieuwe grootte van %llu blokken.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr "Kan 64-bit-functie niet in- en uitschakelen.\n"
 
-#: resize/main.c:569
-#, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
-msgstr ""
-"Kan 64-bit-functie niet wijzigen op een bestandssysteem dat groter is dan "
-"2^32 blokken.\n"
-
 #: resize/main.c:575
 #, c-format
-msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
-msgstr ""
-"Kan 64-bit-functie niet wijzigen terwijl bestandssysteem aangekoppeld is.\n"
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
+msgstr "Kan 64-bit-functie niet wijzigen op een bestandssysteem dat groter is dan 2^32 blokken.\n"
 
 #: resize/main.c:581
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
-msgstr ""
+msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
+msgstr "Kan 64-bit-functie niet wijzigen terwijl bestandssysteem aangekoppeld is.\n"
 
 #: resize/main.c:587
 #, c-format
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
+msgstr "Schakel met 'tune2fs' de extents-functie in alvorens de 64bit-functie in te schakelen.\n"
+
+#: resize/main.c:593
+#, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
 msgstr ""
-"Het bestandssysteem is al %llu blokken (van %dK) groot.  Er is niets te "
-"doen!\n"
+"Het bestandssysteem is al %llu blokken (van %dK) groot.  Er is niets te doen!\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "Het bestandssysteem is al 64-bit.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "Het bestandssysteem is al 32-bit.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "Converteren van bestandssysteem naar 64-bit.\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "Converteren van bestandssysteem naar 32-bit.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, 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"
+msgstr "Van grootte veranderen van bestandssysteem op %s naar %llu blokken (van %dK).\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "tijdens veranderen van de grootte van %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7461,7 +7411,7 @@ msgstr ""
 "Voer 'e2fsck -fy %s' uit om het bestandssysteem\n"
 "te repareren na de afgebroken grootteverandering.\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7470,15 +7420,14 @@ msgstr ""
 "Het bestandssysteem op %s is nu %llu blokken (van %dK) groot.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "tijdens inkorten van %s"
 
 #: resize/online.c:81
 msgid "kernel does not support online resize with sparse_super2"
-msgstr ""
-"de kernel ondersteunt het live vergroten/verkleinen met 'sparse_super2' niet"
+msgstr "de kernel ondersteunt het live vergroten/verkleinen met 'sparse_super2' niet"
 
 #: resize/online.c:86
 #, c-format
@@ -7536,57 +7485,50 @@ msgstr "Uitvoeren van live verandering van %s naar %llu blokken (van %dK).\n"
 msgid "While trying to extend the last group"
 msgstr "Tijdens uitbreiden van de laatste groep"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Tijdens toevoegen van groep #%d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, 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:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "aantal inodes (%llu) moet kleiner zijn dan %u"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "aantal inodes (%llu) moet kleiner zijn dan %u\n"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "gereserveerde blokken"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "blokken voor metagegevens"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr "nieuwe metablokken"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
-msgstr ""
-"Zou nooit mogen gebeuren: geen superblok in laatste 'super_sparse' "
-"blokgroep!\n"
+msgstr "Zou nooit mogen gebeuren: geen superblok in laatste 'super_sparse' blokgroep!\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
-msgstr ""
-"Zou nooit mogen gebeuren: onverwachte 'old_desc' in 'super_sparse' "
-"blokgroep!\n"
+msgstr "Zou nooit mogen gebeuren: onverwachte 'old_desc' in 'super_sparse' blokgroep!\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 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.43.4-WIP"
-msgstr "EXT2FS-bibliotheek  versie 1.43"
+msgid "EXT2FS Library version 1.45.3"
+msgstr "EXT2FS-bibliotheek  versie 1.45.3"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -7670,8 +7612,7 @@ msgstr "Bestandssysteemversie 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"
@@ -7763,8 +7704,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"
@@ -7796,8 +7736,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"
@@ -8151,8 +8090,8 @@ msgid "MMP: device currently active"
 msgstr "MMP: apparaat is momenteel actief"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
-msgstr "MMP: 'fsck' wordt uitgevoerd"
+msgid "MMP: e2fsck being run"
+msgstr "MMP: 'e2fsck' wordt uitgevoerd"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
@@ -8196,7 +8135,7 @@ msgstr "Controlesom van map-blok komt niet overeen met map-blok"
 
 #: lib/ext2fs/ext2_err.c:162
 msgid "Extended attribute block checksum does not match block"
-msgstr "Controlesom van uitgebreidekenmerken-blok komt niet overeen met blok"
+msgstr "Controlesom van uitgebreidkenmerkblok komt niet overeen met blok"
 
 #: lib/ext2fs/ext2_err.c:163
 msgid "Superblock checksum does not match superblock"
@@ -8207,8 +8146,8 @@ msgid "Unknown checksum algorithm"
 msgstr "Ongeldig controlesom-algoritme"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr "Controlesom van MMP-blok komt niet overeen met MMP-blok"
+msgid "MMP block checksum does not match"
+msgstr "Controlesom van MMP-blok komt niet overeen"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
@@ -8220,7 +8159,7 @@ msgstr "Controlesom van blok-bitkaart komt niet overeen met bitkaart"
 
 #: lib/ext2fs/ext2_err.c:168
 msgid "Cannot iterate data blocks of an inode containing inline data"
-msgstr ""
+msgstr "Kan datablokken van een inode met inline data niet langslopen"
 
 #: lib/ext2fs/ext2_err.c:169
 msgid "Extended attribute has an invalid name length"
@@ -8236,7 +8175,6 @@ msgstr "Uitgebreid kenmerk heeft een onjuiste hash"
 
 # Behalve E en F worden de volgende 30 letterafkortingen niet gebruikt.
 #: lib/ext2fs/ext2_err.c:172
-#, fuzzy
 msgid "Extended attribute block has a bad header"
 msgstr "Uitgebreidkenmerkblok heeft een ongeldige header"
 
@@ -8247,30 +8185,27 @@ msgstr "Uitgebreidkenmerksleutel is niet gevonden"
 
 #: lib/ext2fs/ext2_err.c:174
 msgid "Insufficient space to store extended attribute data"
-msgstr ""
+msgstr "Onvoldoende ruimte om gegevens voor uitgebreide kenmerken op te slaan"
 
 #: lib/ext2fs/ext2_err.c:175
 msgid "Filesystem is missing ext_attr or inline_data feature"
-msgstr ""
+msgstr "Bestandssysteem heeft functievlag 'ext_attr' of 'inline_data' niet"
 
 #: lib/ext2fs/ext2_err.c:176
-#, fuzzy
 msgid "Inode doesn't have inline data"
-msgstr "Inode gebruikt geen extents"
+msgstr "Inode bevat geen inline gegevens"
 
 #: lib/ext2fs/ext2_err.c:177
 msgid "No block for an inode with inline data"
-msgstr ""
+msgstr "Geen blok voor een inode met inline gegevens"
 
 #: lib/ext2fs/ext2_err.c:178
-#, fuzzy
 msgid "No free space in inline data"
-msgstr "Geen vrije ruimte meer in extent-kaart"
+msgstr "Geen vrije ruimte meer in inline gegevens"
 
 #: lib/ext2fs/ext2_err.c:179
-#, fuzzy
 msgid "Wrong magic number for extended attribute structure"
-msgstr "Ongeldig magisch getal voor ext2-bestands-structuur"
+msgstr "Ongeldig magisch getal voor uitgebreidekenmerkenstructuur"
 
 #: lib/ext2fs/ext2_err.c:180
 msgid "Inode seems to contain garbage"
@@ -8305,9 +8240,12 @@ msgid "The journal superblock is corrupt"
 msgstr "Het journal-superblok is beschadigd"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "De resize-inode is beschadigd"
+msgstr "Inode is beschadigd"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr "Inode met uitgebreidkenmerkwaarde is beschadigd"
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8327,8 +8265,7 @@ msgstr "Profile-relatie niet gevonden"
 
 #: lib/support/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"
 
 #: lib/support/prof_err.c:16
 msgid "A profile section header has a non-zero value"
@@ -8503,13 +8440,97 @@ msgstr "%s bevat een %s-bestandssysteem\n"
 msgid "%s contains `%s' data\n"
 msgstr "%s bevat '%s'-gegevens\n"
 
+#~ msgid "while opening directory \"%s\""
+#~ msgstr "tijdens openen van map \"%s\""
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** Controlesomfouten gevonden in bestandssysteem!  Draai 'e2fsck' nu!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** Controlesomfouten gevonden in bitkaarten!  Draai 'e2fsck' nu!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %s: fout tijdens lezen van bitkaarten: %s\n"
+
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "'i_dir_acl' @F is %Id, moet nul zijn.\n"
+
+#~ msgid "Journal features:        "
+#~ msgstr "Journal-functies:         "
+
+#~ msgid "Journal size:             "
+#~ msgstr "Grootte van journal:      "
+
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "Lengte van journal:       %u\n"
+#~ "Journal-sequentie:        0x%08x\n"
+#~ "Begin van journal:        %u\n"
+
+#~ msgid "Journal checksum type:    crc32\n"
+#~ msgstr "Journal-controlesomtype:  crc32\n"
+
+#~ msgid ""
+#~ "Journal checksum type:    %s\n"
+#~ "Journal checksum:         0x%08x\n"
+#~ msgstr ""
+#~ "Journal-controlesomtype:  %s\n"
+#~ "Journal-controlesom:      0x%08x\n"
+
+#~ msgid "Journal errno:            %d\n"
+#~ msgstr "Journal-foutmnummer:      %d\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Blokgrootte in journal:     %u\n"
+#~ "Lengte van journal:         %u\n"
+#~ "Eerste journal-blok:        %u\n"
+#~ "Kopcode van journal-reeks:  0x%08x\n"
+#~ "Begin van journal:          %u\n"
+#~ "Aantal journal-gebruikers:  %u\n"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "Journal-gebruikers:       %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Waarschuwing: problemen tijdens schrijven van superblokken.\n"
+
 #~ msgid "Please run e2fsck on the filesystem.\n"
 #~ msgstr "Controleer het bestandssysteem met 'e2fsck'.\n"
 
 #~ 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.  "
 
 #~ msgid "@A @a @b %b.  "
 #~ msgstr "Fout tijdens reserveren van blok %b met uitgebreide kenmerken.  "
@@ -8537,8 +8558,7 @@ msgstr "%s bevat '%s'-gegevens\n"
 #~ msgstr "Lezen van transactiegegevens is mislukt: %s\n"
 
 #~ 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"
 
 #~ msgid "Failed tdb_open %s\n"
 #~ msgstr "Openen van transactiebestand %s is mislukt\n"
@@ -8589,8 +8609,7 @@ msgstr "%s bevat '%s'-gegevens\n"
 #~ msgstr "Kan de status van %s niet opvragen -- %s\n"
 
 #~ msgid "Clearing extent flag not supported on %s"
-#~ msgstr ""
-#~ "Het uitzetten van de 'extent'-functievlag wordt niet ondersteund op %s"
+#~ msgstr "Het uitzetten van de extent-functievlag wordt niet ondersteund op %s"
 
 #~ msgid ""
 #~ "%s: The combination of flex_bg and\n"
@@ -8600,14 +8619,10 @@ msgstr "%s bevat '%s'-gegevens\n"
 #~ "    wordt door 'resize2fs' niet ondersteund.\n"
 
 #~ 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"
@@ -8615,9 +8630,6 @@ msgstr "%s bevat '%s'-gegevens\n"
 #~ msgid "Missing indirect block not present"
 #~ msgstr "Ontbrekend indirect blok is afwezig"
 
-#~ msgid "<The ACL index inode>"
-#~ msgstr "<de ACL-index-inode>"
-
 #~ msgid "<The ACL data inode>"
 #~ msgstr "<de ACL-data-inode>"
 
@@ -8628,9 +8640,7 @@ msgstr "%s bevat '%s'-gegevens\n"
 #~ 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 "
@@ -8642,13 +8652,10 @@ msgstr "%s bevat '%s'-gegevens\n"
 #~ 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 "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 "while retrying to write block bitmaps for %s"
 #~ msgstr "tijdens herschrijven van blok-bitkaarten voor %s"
@@ -8663,16 +8670,13 @@ msgstr "%s bevat '%s'-gegevens\n"
 #~ 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 iterator function"
 #~ msgstr "tijdens aanroep van iterator-functie"
 
 #~ 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"
@@ -8718,5 +8722,4 @@ msgstr "%s bevat '%s'-gegevens\n"
 #~ "\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 8ff7f1d..8d510d4 100644 (file)
Binary files a/po/pl.gmo and b/po/pl.gmo differ
index 46dd245..ec39b95 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,7 +1,7 @@
 # Polish translation for e2fsprogs.
-# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Theodore Tso (msgids)
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
-# Jakub Bogusz <qboosh@pld-linux.org>, 2002-2016.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2002-2019.
 #
 #. 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,
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -47,7 +54,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.43.1\n"
+"Project-Id-Version: e2fsprogs 1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2016-07-06 15:30+0200\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2019-07-20 17:45+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=UTF-8\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"
+"X-Bugs: Report translation errors to the Language-Team address.\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:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Wadliwy blok %u poza zakresem - zignorowany.\n"
@@ -93,11 +100,12 @@ msgstr "podczas sprawdzania poprawności i-węzła wadliwych bloków"
 msgid "while reading the bad blocks inode"
 msgstr "podczas odczytu i-węzła wadliwych bloków"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "podczas próby otworzenia %s"
@@ -107,7 +115,7 @@ msgstr "podczas próby otworzenia %s"
 msgid "while trying popen '%s'"
 msgstr "podczas próby popen '%s'"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "podczas wczytywania z pliku listy wadliwych bloków"
 
@@ -118,9 +126,11 @@ msgstr "podczas uaktualniania i-węzła wadliwego bloku"
 #: e2fsck/badblocks.c:133
 #, 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/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "podczas zwalniania pliku tdb dir_info"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -197,12 +207,12 @@ msgstr "ioctl BLKFLSBUF nie obsługiwany! Nie można opróżnić buforów.\n"
 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:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "podczas otwierania %s w celu opróżnienia"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "podczas próby opróżnienia %s"
@@ -212,11 +222,11 @@ msgstr "podczas próby opróżnienia %s"
 msgid "while trying to open '%s'"
 msgstr "podczas próby otwarcia '%s'"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr "podczas otwierania obrazu i-węzłów"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr "podczas pobierania następnego i-węzła"
 
@@ -225,359 +235,379 @@ msgstr "podczas pobierania następnego i-węzła"
 msgid "%u inodes scanned.\n"
 msgstr "Przeszukano i-węzłów: %u.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "odczyt superbloku kroniki\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: nie znaleziono poprawnego superbloku kroniki\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: kronika za krótka\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: odtwarzanie z kroniki\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, 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:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "podczas próby ponownego otwarcia %s"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "arozszerzony atrybut"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Abłąd podczas przydzielania"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bblok"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bbitmapa"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "ckompresja"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Ckonflikt z innym @biem systemu plików"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "dkatalog"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Dusunięty"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "ewpis"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e '%Dn' w %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "fsystem plików"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fdla i-węzła %i (%Q) wynosi"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "ggrupa"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "h@i @du HTREE"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "ii-węzeł"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Iniedopuszczalny"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jkronika"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Ljest dowiązaniem"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mwielokrotnie zadeklarowany"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "nbłędny"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oosierocony"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pproblem w"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qlimit"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "rgłówny @i"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "spowinno być"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssuper@b"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "uniedołączony"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vurządzenie"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xekstent"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "zzerowej długości"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<pusty i-węzeł>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<i-węzeł wadliwych bloków>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<i-węzeł limitów użytkowników>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<i-węzeł limitów grup>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<i-węzeł boot-loadera>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<i-węzeł katalogu undelete>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<i-węzeł deskryptora grupy>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<i-węzeł kroniki>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<zarezerwowany i-węzeł 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<zarezerwowany i-węzeł 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "plik zwykły"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "katalog"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "urządzenie znakowe"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "urządzenie blokowe"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "nazwany potok"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "dowiązanie symboliczne"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "gniazdo"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "nieznany rodzaj pliku typu 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "blok pośredni"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "blok podwójnie pośredni"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "blok potrójnie pośredni"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "blok tłumaczący"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "blok #"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "użytkownika"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "grupy"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr "projektu"
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "nieznany rodzaj limitów"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "wielokrotnie zadeklarowana mapa i-węzłów"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "błąd wewnętrzny; nie można znaleźć dup_blk dla %llu\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "powrót z clone_file_block"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr "błąd wewnętrzny: nie można znaleźć rekordu bloku EA dla %llu"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "Błąd wewnętrzny: nie można znaleźć rekordu i-węzła EA dla %u"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr "podczas haszowania wpisu z e_value_inum = %u"
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 msgid "reading directory block"
 msgstr "odczytu bloku katalogu"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 msgid "in-use inode map"
 msgstr "mapa używanych i-węzłów"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 msgid "directory inode map"
 msgstr "mapa i-węzłów katalogów"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 msgid "regular file inode map"
 msgstr "mapa i-węzłów zwykłych plików"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr "mapa używanych bloków"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1263
 msgid "metadata block map"
 msgstr "mapa bloków metadanych"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 msgid "opening inode scan"
 msgstr "rozpoczynania przeszukiwania i-węzłów"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr "pobierania następnego i-węzła"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 msgid "Pass 1"
 msgstr "Przebieg 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "odczytu niebezpośrednich bloków i-węzła %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 msgid "bad inode map"
 msgstr "błędna mapa i-węzłów"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 msgid "inode in bad block map"
 msgstr "i-węzeł w mapie wadliwych bloków"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 msgid "imagic inode map"
 msgstr "mapa i-węzłów imagic"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr "wielokrotnie zadeklarowana mapa bloków"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr "mapa bloków rozszerzonych atrybutów"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu(%c): oczekiwano %6lu, otrzymano phys %6lu (blkcnt %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 msgid "block bitmap"
 msgstr "bitmapa bloków"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 msgid "inode bitmap"
 msgstr "bitmapa i-węzłów"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 msgid "inode table"
 msgstr "tablica i-węzłów"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Przebieg 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 msgid "Can not continue."
 msgstr "Nie można kontynuować."
 
@@ -597,195 +627,203 @@ msgstr "Przebieg 3"
 msgid "inode loop detection bitmap"
 msgstr "bitmapa wykrywania pętli i-węzłów"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Przebieg 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Przebieg 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr "check_inode_bitmap_checksum: błąd przydzielania pamięci"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr "check_block_bitmap_checksum: błąd przydzielania pamięci"
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 msgid "(no prompt)"
 msgstr "(bez pytania)"
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 msgid "Fix"
 msgstr "Poprawić"
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:54
 msgid "Clear"
 msgstr "Wyczyścić"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr "Przenieść"
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
 msgid "Allocate"
 msgstr "Przydzielić"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 msgid "Expand"
 msgstr "Rozszerzyć"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 msgid "Connect to /lost+found"
 msgstr "Dołączyć do /lost+found"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 msgid "Create"
 msgstr "Wyczyścić"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr "Uratować"
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
 msgid "Truncate"
 msgstr "Uciąć"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 msgid "Clear inode"
 msgstr "Wyczyścić i-węzeł"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 msgid "Abort"
 msgstr "Przerwać"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 msgid "Split"
 msgstr "Podzielić"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 msgid "Continue"
 msgstr "Kontynuować"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr "Sklonować wielokrotnie zadeklarowane bloki"
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 msgid "Delete file"
 msgstr "Usunąć plik"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 msgid "Suppress messages"
 msgstr "Pominąć komunikaty"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
 msgid "Unlink"
 msgstr "Odłączyć"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 msgid "Clear HTree index"
 msgstr "Wyczyścić indeks HTree"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 msgid "Recreate"
 msgstr "Odtworzyć"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr "Zoptymalizować"
+
+#: e2fsck/problem.c:81
 msgid "(NONE)"
 msgstr "(NIC)"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 msgid "FIXED"
 msgstr "POPRAWIONO"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 msgid "CLEARED"
 msgstr "WYCZYSZCZONO"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr "PRZENIESIONO"
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 msgid "ALLOCATED"
 msgstr "PRZYDZIELONO"
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr "ROZSZERZONO"
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr "PODŁĄCZONO"
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 msgid "CREATED"
 msgstr "UTWORZONO"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr "URATOWANO"
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
 msgid "TRUNCATED"
 msgstr "SKRÓCONO"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 msgid "INODE CLEARED"
 msgstr "I-WĘZEŁ WYCZYSZCZONY"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 msgid "ABORTED"
 msgstr "PRZERWANO"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 msgid "SPLIT"
 msgstr "PODZIELONO"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr "KONTYNUACJA"
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr "SKLONOWANO WIELOKROTNIE ZADEKLAROWANE BLOKI"
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 msgid "FILE DELETED"
 msgstr "PLIK USUNIĘTY"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr "POMINIĘTO"
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr "ODŁĄCZONO"
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 msgid "HTREE INDEX CLEARED"
 msgstr "INDEKS HTREE WYCZYSZCZONY"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 msgid "WILL RECREATE"
 msgstr "ZOSTANIE ODTWORZONY"
 
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr "ZOSTANIE ZOPTYMALIZOWANE"
+
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:115
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "@B @bów dla grupy %g nie jest w grupie. (@b %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:119
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "@B i-węzłów dla grupy %g nie jest w grupie. (@b %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -802,7 +840,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -828,7 +866,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -841,7 +879,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -852,18 +890,18 @@ msgstr ""
 "@bu.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "W @Su blocks_per_group (bloków w grupie) = %b, powinno być %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "W @Su first_data_block (1. @b danych) = %b, powinien być %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -871,8 +909,8 @@ msgstr ""
 "@f nie miał UUID-a; wygenerowano.\n"
 "\n"
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -888,49 +926,48 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Znaleziono uszkodzenia w @Su. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:186
+#, no-c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Błąd podczas określania rozmiaru fizycznego urządzenia: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:191
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "licznik i-węzłów w @Su wynosi %i, powinien być %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd nie obsługuje własności filetype.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:201
+#, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "@S ma błędną kronikę (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 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:203
+#: e2fsck/problem.c:211
 msgid "Can't find external @j\n"
 msgstr "Nie można znaleźć zewnętrznej kroniki\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 msgid "External @j has bad @S\n"
 msgstr "Zewnętrzna @j ma błędny @S\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 msgid "External @j does not support this @f\n"
 msgstr "Zewnętrzna @j nie obsługuje tego systemu plików\n"
 
@@ -938,11 +975,10 @@ msgstr "Zewnętrzna @j nie obsługuje tego systemu plików\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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"
@@ -951,81 +987,81 @@ msgstr ""
 "Możliwe też, że @S kroniki jest uszkodzony.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:235
 msgid "@j @S is corrupt.\n"
 msgstr "@S kroniki jest uszkodzony.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "flaga @Su has_journal jest wyzerowana, ale @j istnieje.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr "@S ma ustawioną flagę needs_recovery, ale nie ma kroniki.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:250
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "flaga needs_recovery @Su jest wyzerowana, ale @j zawiera dane.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:255
 msgid "Clear @j"
 msgstr "Wyczyścić kronikę"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr "@f ma ustawione flagi cech, ale ma wersję 0 systemu plików. "
+msgstr "@f ma ustawione flagi właściwości, ale ma wersję 0 systemu plików. "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:265
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s @o @i %i (uid=%Iu, gid=%Ig, uprawnienia=%Im, rozmiar=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:270
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "znaleziono @I %B (%b) w @om i-węźle %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:275
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Już wyczyszczono %B (%b) znaleziony w @om i-węźle %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:281
+#, no-c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@I @o @i %i w @Su.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:287
+#, no-c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@I @i %i w liście @och i-węzłów.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:292
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr "@S kroniki ma ustawioną nieznaną flagę tylko do odczytu.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:297
 msgid "@j @S has an unknown incompatible feature flag set.\n"
-msgstr "@S kroniki ma ustawioną flagę nieznanej cechy.\n"
+msgstr "@S kroniki ma ustawioną flagę nieznanej właściwości.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Wersja kroniki nie obsługiwana przez ten e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:308
+#, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1035,8 +1071,8 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:314
+#, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1047,7 +1083,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1058,12 +1094,12 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 msgid "Run @j anyway"
 msgstr "Wykonać zapisy z kroniki"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
 "Flaga odtworzenia nie ustawiona w zapasowym @Su,\n"
@@ -1071,7 +1107,7 @@ msgstr ""
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1079,7 +1115,7 @@ msgstr "Tworzenie kopii zapasowej informacji z @bu i-węzła kroniki.\n"
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1088,19 +1124,18 @@ msgstr ""
 "wynosi %N; @s zero. "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 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:338
+#: e2fsck/problem.c:352
 msgid "Resize @i not valid.  "
 msgstr "i-węzeł zmiany rozmiaru (resize) nieprawidłowy. "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1110,7 +1145,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1119,14 +1154,14 @@ msgstr ""
 "\tteraz = %T) jest w przyszłości.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:368
+#, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "Podpowiedź @Su dla zewnętrznego superbloku powinna być %X. "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1135,43 +1170,42 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "Suma kontrolna deskryptora grupy %g to %04x, powinna wynosić %04y. "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
-msgstr "Deskryptor grupy %g oznaczony jako nie zainicjowany bez zbioru cech.\n"
+msgstr "Deskryptor grupy %g oznaczony jako nie zainicjowany bez zbioru właściwości.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:389
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr "Deskryptor grupy %g ma błędną liczbę nie używanych i-węzłów %b. "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:394
 msgid "Last @g @b @B uninitialized.  "
 msgstr "@B @bu ostatniej grupy niezainicjowana. "
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "Transakcja %i kroniki była uszkodzona, odtwarzanie przerwano.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:405
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "Flags test_fs jest ustawiona (i ext4 jest dostępny). "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 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)\n"
@@ -1179,227 +1213,239 @@ msgstr ""
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 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)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr "Jeden lub więcej deskryptorów grup bloków jest błędnych. "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Ustawianie liczby wolnych i-węzłów na %j (było %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Ustawianie liczby wolnych @bów na %c (było %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr "Zmiana i-węzła @qów na ukryty.\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "Ukrywanie i-węzła @qów %U %i (%Q).\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 msgid "@S has invalid MMP block.  "
 msgstr "@S ma błędny blok MMP. "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
 msgid "@S has invalid MMP magic.  "
 msgstr "@S ma błędną liczbę magiczną MMP. "
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:453
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2: %m\n"
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:459
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
-msgstr ""
-"Pole @Su metadata_csum zastępuje uninit_bg: oba bity cech nie mogą być użyte "
-"jednocześnie."
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "Pole @Su metadata_csum zastępuje uninit_bg: oba bity właściwości nie mogą być użyte jednocześnie."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "Suma kontrolna bloku MMP @Su nie zgadza się z blokiem MMP"
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+msgid "@S MMP @b checksum does not match.  "
+msgstr "Suma kontrolna @bu MMP @Su nie zgadza się. "
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
-msgstr ""
-"@S 64-bitowych systemów plików wymaga ekstentów do dostępu do całego dysku. "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
+msgstr "@S 64-bitowych systemów plików wymaga ekstentów do dostępu do całego dysku. "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "First_meta_bg jest zbyt duże (%N, wartość maksymalna %g). "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:486
 msgid "External @j @S checksum does not match @S.  "
-msgstr ""
-"Suma kontrolna superbloku zewnętrznej kroniki nie zgadza się z superblokiem"
+msgstr "Suma kontrolna superbloku zewnętrznej kroniki nie zgadza się z superblokiem"
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr "Pole metadata_csum_seed @Su nie jest potrzebne bez metadata_csum."
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr "Błąd inicjowania kontekstu limitów w bibliotece wspierającej: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Wadliwy dodatkowy wymagany isize w @Su (%N). "
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Wadliwy dodatkowy pożądany isize w @Su (%N). "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "Błędny i-węzeł @q %U %i. "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr "@S miałby zbyt dużo i-węzłów (%N).\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
+"Właściwości resize_inode oraz meta_bg są włączone. Nie są one\n"
+"kompatybilne. Resize_inode powinno być wyłączone. "
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Przebieg 1: Sprawdzanie i-węzłów, @bów i rozmiarów\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 msgid "@r is not a @d.  "
 msgstr "@r nie jest @diem. "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "@r ma ustawiony dtime (zapewne przez stary mke2fs). "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:544
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Zarezerwowany @i %i (%Q) ma błędne uprawnienia. "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:550
+#, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "@D @i %i ma zerowy dtime. "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "@i %i jest używany, ale ma ustawiony dtime. "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:562
+#, no-c-format
 msgid "@i %i is a @z @d.  "
 msgstr "@i %i jest @diem @z. "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:567
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "@B @bów grupy %g w %b jest w konflikcie z innym @biem.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:572
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "@B i-węzłów grupy %g w %b jest w konflikcie z innym @biem.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:577
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "tablica i-węzłów grupy %g w %b jest w konflikcie z innym @biem.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:582
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "@B @bów grupy %g (%b) jest błędna. "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "@B i-węzłów grupy %g (%b) jest błędna. "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size wynosi %Is, @s %N. "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_blocks wynosi %Ib, @s %N. "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in @i %i.  "
 msgstr "@I %B (%b) w i-węźle %i. "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B (%b) nakłada się na metadane systemu plików w i-węźle %i. "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:613
+#, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "@i %i ma niedopuszczalne @bi. "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Za dużo niedopuszczalnych @bów w i-węźle %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "@I %B (%b) w i-węźle wadliwych @bów. "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "I-węzeł wadliwych @bów ma niedopuszczalne @bi. "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Podwójny lub wadliwy @b jest używany!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 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
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1413,7 +1459,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1424,7 +1470,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1435,124 +1481,122 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Główny @S (%b) jest na liście wadliwych @bów.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:667
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr "Blok %b z deskryptorów głównej grupy jest na liście wadliwych @bów\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:673
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Uwaga: w grupie %g @S (%b) jest wadliwy.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:679
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr "Uwaga: kopia deskryptorów grupy %g ma błędny @b (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:685
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr "Błąd programu? @b #%b uznany bez powodu w process_bad_block.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:691
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A %N ciągłych @bów w grupie @bów %g dla %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
-#, c-format
+#: e2fsck/problem.c:697
+#, no-c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A bufora @bów do przenoszenia %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:702
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Przenoszenie w grupie %g %s z %b do %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
-#, c-format
+#: e2fsck/problem.c:708
+#, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Przenoszenie w grupie %g %s do %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Uwaga: nie można odczytać @bu %b z %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:718
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Uwaga: nie można zapisać @bu %b do %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
 msgstr "@A bitmapy i-węzłów (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
 msgstr "@A bitmapy i-węzłów (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:734
+#, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A informacji o liczniku dowiązań (icount): %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:740
+#, no-c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A tablicy @dch @bów: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:746
+#, no-c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Błąd podczas przeszukiwania i-węzłów (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Błąd podczas iteracji po @bach w i-węźle %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:757
 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:714
+#: e2fsck/problem.c:762
 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:720
-#, c-format
+#: e2fsck/problem.c:769
+#, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Błąd podczas odczytu i-węzła %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "@i %i ma ustawioną flagę imagic. "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
@@ -1561,145 +1605,143 @@ msgstr ""
 "flagę nienaruszalności (immutable) lub dopisywania (append-only). "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Specjalny (@v/gniazdo/potok/dowiązanie) @i %i ma niezerowy rozmiar. "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
 msgid "@j @i is not in use, but contains data.  "
 msgstr "@i kroniki nie jest używany, ale zawiera dane. "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 msgid "@j is not regular file.  "
 msgstr "@j nie jest zwykłym plikiem. "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:812
+#, no-c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "@i %i był częścią listy osieroconych i-węzłów. "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:818
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr "Znaleziono i-węzły, które były częścią uszkodzonej listy sierot. "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:823
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A struktury refcount (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:828
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Błąd podczas odczytu @bu rozszerzonych atrybutów %b dla i-węzła %i. "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:833
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "@i %i ma błędny @b rozszerzonych atrybutów %b. "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Błąd podczas odczytu @bu rozszerzonych atrybutów %b (%m). "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:843
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "@b rozszerzonych atrybutów %b ma liczbę odniesień %r, powinno być %N. "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:848
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Błąd podczas zapisu @bu rozszerzonych atrybutów %b (%m). "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:853
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "@b rozszerzonych atrybutów %b ma h_blocks > 1. "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:858
 msgid "@A @a region allocation structure.  "
 msgstr "@A struktury przydzielania regionu rozszerzonych atrybutów. "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 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:815
+#: e2fsck/problem.c:868
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "@b rozszerzonych atrybutów %b jest uszkodzony (błędna nazwa). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "@b rozszerzonych atrybutów %b jest uszkodzony (błędna wartość). "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:879
+#, no-c-format
 msgid "@i %i is too big.  "
 msgstr "@i %i jest zbyt duży. "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B (%b) powoduje, że @d jest zbyt duży. "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr "%B (%b) powoduje, że plik jest zbyt duży. "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "%B (%b) powoduje, że dowiązanie jest zbyt duże. "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-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:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "@i %i ma ustawioną flagę INDEX_FL, ale nie jest @diem.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:911
+#, no-c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "@h %i ma błędny główny węzeł.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:916
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "@h %i ma nie obsługiwaną wersję hasza (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "@h %i używa niekompatybilnej flagi głównego węzła htree.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:927
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "@h %i ma zbyt dużą głębokość drzewa (%N)\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1708,55 +1750,55 @@ msgstr ""
 "w konflikcie z metadanymi systemu plików. "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Tworzenie/odtwarzanie i-węzła zmiany rozmiaru nie powiodło się: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "@i %i ma dodatkowy rozmiar (%IS), co jest błędne\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:950
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "@a w i-węźle %i ma namelen (%N), co jest błędne\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:955
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "@a w i-węźle %i ma przesunięcie wartości (%N), co jest błędne\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:960
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "@a w i-węźle %i ma @b wartości (%N), co jest błędne (musi być 0)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:965
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "@a w i-węźle %i ma rozmiar wartości (%N), co jest błędne\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:970
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "@a w i-węźle %i ma hash (%N), co jest błędne\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:975
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "@i %i to %It, ale wygląda jakby w rzeczywistości był katalogiem.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
-#, c-format
+#: e2fsck/problem.c:981
+#, no-c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Błąd podczas czytania po @xach w i-węźle %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1766,7 +1808,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1776,7 +1818,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1785,34 +1827,31 @@ msgstr ""
 "\t(@b logiczny %c, @b fizyczny %b, błędna długość %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-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:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-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:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "@i %i nie ma flagi EXTENT_FL, ale jest w formacie z ekstentami\n"
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "Szybkie dowiązanie symboliczne %i ma ustawioną flagę EXTENT_FL. "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1821,39 +1860,39 @@ msgstr ""
 "\t(@n @b logiczny %c, @b fizyczny %b, długość %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1030
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "@i %i ma błędny węzeł ekstentu (blk %b, lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1036
+#, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Błąd podczas przekształcania bitmapy @bów podklastra: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not regular file.  "
 msgstr "@i @qów nie jest zwykłym plikiem. "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
 msgid "@q @i is not in use, but contains data.  "
 msgstr "@i @qów nie jest używany, ale zawiera dane. "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 msgid "@q @i is visible to the user.  "
 msgstr "@i @qów jest widoczny dla użytkownika. "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 msgid "The bad @b @i looks @n.  "
 msgstr "I-węzeł wadliwych @bów wygląda na błędny. "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1862,55 +1901,51 @@ msgstr ""
 "\t(@n @b logiczny %c, @b fizyczny %b, długość %N)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, c-format
+#: e2fsck/problem.c:1067
+#, no-c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "@i %i zdaje się zawierać śmieci. "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr "@i %i przechodzi testy, ale suma kontrolna nie zgadza się z i-węzłem. "
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "@a i-węzła %i jest uszkodzony (kolizja przydzielania). "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"blok ekstentów i-węzła %i przechodzi testy, ale suma kontrolna nie zgadza "
-"się z ekstentem\n"
+"blok ekstentów i-węzła %i przechodzi testy, ale suma kontrolna nie zgadza się z ekstentem\n"
 "\t(@b logiczny %c, @b fizyczny %b, długość %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
-msgstr ""
-"@b rozszerzonych atrybutów i-węzła %i %b przechodzi testy, ale suma "
-"kontrolna nie zgadza się z @biem. "
+msgstr "@b rozszerzonych atrybutów i-węzła %i %b przechodzi testy, ale suma kontrolna nie zgadza się z @biem. "
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
 msgstr ""
 "Poziom wewnętrznego węzła ekstentu %N i-węzła %i:\n"
-"Początek logiczny %b nie zgadza się z początkiem logicznym %c kolejnego "
-"poziomu. "
+"Początek logiczny %b nie zgadza się z początkiem logicznym %c kolejnego poziomu. "
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1919,60 +1954,54 @@ msgstr ""
 "\t(@b logiczny %c, @b fizyczny %b, długość %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr "@i %i ma dane wewnętrzne, ale w @Su brak właściwości INLINE_DATA\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
-msgstr ""
-"@i %i ma flagę INLINE_DATA_FL w systemie plików bez obsługi danych "
-"wewnętrznych.\n"
+msgstr "@i %i ma flagę INLINE_DATA_FL w systemie plików bez obsługi danych wewnętrznych.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
-msgstr ""
-"blok i-węzła %i %b jest w konflikcie z krytycznymi metadanymi, pominięto "
-"sprawdzanie bloku.\n"
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+msgstr "blok i-węzła %i %b jest w konflikcie z krytycznymi metadanymi, pominięto sprawdzanie bloku.\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "Dla i-węzła @du %i @b %b powinien być przy @bu %c. "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1138
+#, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "@i @du %i ma @x oznaczony jako niezainicjowany przy @bu %c. "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
-"Dla i-węzła %i @b logiczny %b (@b fizyczny %c) narusza zasady przydzielania "
-"klastrów.\n"
+"Dla i-węzła %i @b logiczny %b (@b fizyczny %c) narusza zasady przydzielania klastrów.\n"
 "Zostanie poprawiony w przebiegu 1B.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
-msgstr ""
-"@i %i ma flagę INLINE_DATA_FL, ale nie znaleziono rozszerzonych atrybutów. "
+msgstr "@i %i ma flagę INLINE_DATA_FL, ale nie znaleziono rozszerzonych atrybutów. "
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
@@ -1981,47 +2010,42 @@ msgstr ""
 "flagę nienaruszalności (immutable) lub dopisywania (append-only). "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr "@i %i ma nagłówek @xu, ale flaga danych wewnętrznych jest ustawiona.\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr "@i %i wydaje się mieć dane wewnętrzne, ale ustawiona jest flaga @xu.\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
-msgstr ""
-"@i %i wydaje się mieć mapę @bów, ale ustawione flagi danych wewnętrznych i "
-"@xu.\n"
+msgstr "@i %i wydaje się mieć mapę @bów, ale ustawione flagi danych wewnętrznych i @xu.\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
-msgstr ""
-"@i %i ma ustawione flagi danych wewnętrznych i @xu, ale pole i_block zawiera "
-"śmieci.\n"
+msgstr "@i %i ma ustawione flagi danych wewnętrznych i @xu, ale pole i_block zawiera śmieci.\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
-msgstr ""
-"Lista wadliwych bloków twierdzi, że @i listy wadliwych bloków jest wadliwy. "
+msgstr "Lista wadliwych bloków twierdzi, że @i listy wadliwych bloków jest wadliwy. "
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1191
 msgid "@A @x region allocation structure.  "
 msgstr "@A struktury przydzielania regionu @xu. "
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -2030,39 +2054,57 @@ msgstr ""
 "\t(@b logiczny %c, @n @b fizyczny %b, długość %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
 msgid "@A memory for encrypted @d list\n"
 msgstr "@A pamięci dla listy zaszyfrowanych @dów\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
-msgstr ""
-"drzewo ekstentów i-węzła %i mogłoby być płytsze (%b; mogłoby być <= %c)\n"
+msgstr "drzewo ekstentów i-węzła %i mogłoby być płytsze (%b; mogłoby być <= %c)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr "@i %i w systemie plików bigalloc nie może być odwzorowany na @b. "
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, c-format
+#: e2fsck/problem.c:1218
+#, no-c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "@i %i ma uszkodzony nagłówek @xu. "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
+msgstr "Znaczniki czasu w i-węźle %i po 2310-04-04 są prawdopodobnie sprzed 1970.\n"
+
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "@i %i ma niedopuszczalny i-węzeł wartości rozszerzonego atrybutu %N.\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "@i %i ma błędny @a. I-węzeł EA nie ma flagi EA_INODE.\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
 msgstr ""
-"Znaczniki czasu w i-węźle %i po 2310-04-04 są prawdopodobnie sprzed 1970.\n"
+"@i EA %N dla i-węzła rodzica %i nie ma flagi EA_INODE.\n"
+" "
 
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2074,49 +2116,46 @@ msgstr ""
 "Przebieg 1B: Ponowne przeszukiwanie @mch @bów\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
-#, c-format
+#: e2fsck/problem.c:1255
+#, no-c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "@m @b(i) w i-węźle %i:"
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1271
+#, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Błąd podczas szukania i-węzła (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A bitmapy i-węzłów (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Błąd podczas iteracji po @bach w i-węźle %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 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:1197
+#: e2fsck/problem.c:1298
 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:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Przebieg 1D: Uzgadnianie @mch @bów\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2125,18 +2164,18 @@ msgstr ""
 "  ma %r @mch @bów, dzielonych z %N plikami:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i #%i, czas modyfikacji %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
 msgid "\t<@f metadata>\n"
 msgstr "\t<metadane systemu plików>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2146,7 +2185,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2154,347 +2193,345 @@ msgstr ""
 "Podwójnie zadeklarowane @bi już przepisane lub sklonowane.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1344
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Nie można sklonować pliku: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1350
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Przebieg 1E: Optymalizacja drzew @xów\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, c-format
+#: e2fsck/problem.c:1356
+#, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Nie udało się zoptymalizować drzewa @xów %p (%i): %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1361
 msgid "Optimizing @x trees: "
 msgstr "Optymalizacja drzew @xów: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
-msgstr ""
-"Błąd wewnętrzny: zbut duża głębokość maksymalna drzewa ekstentów (%b; "
-"oczekiwana=%c).\n"
+msgstr "Błąd wewnętrzny: zbut duża głębokość maksymalna drzewa ekstentów (%b; oczekiwana=%c).\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr "drzewo @xów i-węzła %i (na poziomie %b) mogłoby być krótsze. "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr "drzewo @xów i-węzła %i (na poziomie %b) mogłoby być węższe. "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Przebieg 2: Sprawdzanie struktury @dów\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1399
+#, no-c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Błędny numer i-węzła dla '.' w i-węźle @du %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1404
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E ma błędny numer i-węzła: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1409
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E ma @D/nie używany @i %Di. "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1414
 msgid "@E @L to '.'  "
 msgstr "@E @L do '.' "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1419
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E wskazuje na @i (%Di) położony w wadliwym @b.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1424
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E @L do @du %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1429
 msgid "@E @L to the @r.\n"
 msgstr "@E @L do głównego katalogu.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E ma niedopuszczalne znaki w nazwie.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, c-format
+#: e2fsck/problem.c:1440
+#, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Brakuje '.' w i-węźle @du %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1446
+#, no-c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Brakuje '..' w i-węźle @du %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1451
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Pierwszym @eem '%Dn' (@i=%Di) w i-węźle @du %i (%p) @s '.'\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1456
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Drugim @eem '%Dn' (@i=%Di) w i-węźle @du %i @s '..'\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr @F %IF, @s zero.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1466
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl @F %If, @s zero.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl @F %Id, @s zero.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_size_high @F %Id, @s zero.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N, @s zero.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N, @s zero.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "@i %i (%Q) ma błędne uprawnienia (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1491
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "@i @du %i, %B, offset %N: @d uszkodzony\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "@i @du %i, %B, offset %N: nazwa pliku zbyt długa\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "@i @du %i ma nie przydzielony %B. "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "@e @du '.' w i-węźle @du %i nie jest zakończony przez NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "@e @du '..' w i-węźle @du %i nie jest zakończony przez NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "@i %i (%Q) jest @Im @vm znakowym.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "@i %i (%Q) jest @Im @vm @bowym.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E jest powielonym @eem '.'.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E jest powielonym @eem '..'.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Błąd wewnętrzny: nie można znaleźć dir_info dla %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E ma rec_len %Dr, @s %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, c-format
+#: e2fsck/problem.c:1550
+#, no-c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A struktury icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Błąd podczas iteracji po @bach @du: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Błąd podczas odczytu @b %b @du (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Błąd podczas zapisu @b %b @du (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A nowego @bu @du dla i-węzła %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Błąd podczas zwalniania i-węzła %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1584
+#, no-c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "@e @du dla '.' w %p (%i) jest duży.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "@i %i (%Q) jest @Im FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "@i %i (%Q) jest @Im gniazdem.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Ustawiono filetype dla @eu '%Dn' w %p (%i) na %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1604
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E ma błędny filetype (był %Dt, powinien być %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 msgstr "@E ma ustawione filetype.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "@E ma nazwę zerowej długości.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Dowiązanie symboliczne %Q (@i #%i) jest błędne.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1624
 msgid "@a @b @F @n (%If).\n"
 msgstr "@b rozszerzonych atrybutów dla i-węzła %i (%Q) jest błędny (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1629
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr "@f zawiera duże pliki, ale brak flagi LARGE_FILE w @Su.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1634
 msgid "@p @h %d: %B not referenced\n"
 msgstr "@p i-węźle @du HTREE %d: %B nie ma odwołań\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "@p i-węźle @du HTREE %d: %B ma podwójne odwołanie\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1644
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "@p i-węźle @du HTREE %d: %B ma błędny minimalny hasz\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1649
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "@p i-węźle @du HTREE %d: %B ma błędny maksymalny hasz\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
 msgstr "Błędne @h %d (%q). "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p i-węźle @du HTREE %d (%q): błędny numer @bu %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p i-węźle @du HTREE %d: główny węzeł jest błędny\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1674
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "@p i-węźle @du HTREE %d: %B ma błędny limit (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1679
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "@p i-węźle @du HTREE %d: %B ma błędny licznik (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1684
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "@p i-węźle @du HTREE %d: %B ma nie uporządkowaną tablicę haszującą\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1689
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "@p i-węźle @du HTREE %d: %B ma błędną głębokość (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
 msgstr "Znaleziono podwójny @E. "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2506,7 +2543,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2517,156 +2554,156 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi @F %N, @s zero.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "Nieoczekiwany @b w i-węźle @du HTREE %d (%q)\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1719
 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:1608
+#: e2fsck/problem.c:1724
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr "@i %Di znaleziony w grupie %g obszaru nie używanych i-węzłów.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1729
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "i_file_acl_hi @F %N, @s zero.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, c-format
+#: e2fsck/problem.c:1735
+#, no-c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr "@p i-węźle @du HTREE %d: główny węzeł ma błędną sumę kontrolną.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, c-format
+#: e2fsck/problem.c:1741
+#, no-c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr "@p i-węźle @du HTREE %d: wewnętrzny węzeł ma błędną sumę kontrolną.\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1746
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "@i @du %i, %B, offset %N: @d nie ma sumy kontrolnej.\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr "@i @du %i, %B: @d przechodzi testy, ale ma błędną sumę kontrolną.\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr "Rozmiar i-węzła @du wewnętrznego %i (%N) musi być wielokrotnością 4.\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr "Poprawienie rozmiaru i-węzła @du wewnętrznego %i nie powiodło się.\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
 msgid "Encrypted @E is too short.\n"
 msgstr "Szyfrowany @E jest zbyt krótki.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Przebieg 3: Sprawdzanie łączności @dów\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
 msgstr "@r jest nie przydzielony. "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "Brak miejsca w @du @l. "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1790
+#, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Nie podłączony @i @du %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
 msgstr "Nie znaleziono /@l. "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "'..' w %Q (%i) jest %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "Błędny lub nie istniejący /@l. Nie można podłączyć.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Nie można rozszerzyć /@l: %m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Nie można podłączyć %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Błąd podczas szukania /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block: %m podczas próby utworzenia @du /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode: %m podczas próby utworzenia @du /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block: %m podczas tworzenia nowego @bu @du\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_block: %m podczas zapisu @bu @du dla /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Błąd podczas poprawiania liczby i-węzłów w i-węźle %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2676,8 +2713,8 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
@@ -2686,41 +2723,41 @@ msgstr ""
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Błąd podczas tworzenia głównego @du (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Błąd podczas tworzenia @du /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "@r nie jest @diem; przerwanie.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "Nie można kontynuować bez głównego katalogu.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l nie jest @diem (@i=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
 msgid "/@l has inline data\n"
 msgstr "/@l ma dane wewnętrzne\n"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2731,7 +2768,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2742,52 +2779,52 @@ msgstr ""
 "\n"
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1924
 msgid "/@l is encrypted\n"
 msgstr "/@l jest zaszyfrowany\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Przebieg 3A: Optymalizacja katalogów\n"
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Tworzenie iteratora dirs_to_hash nie powiodło się: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Optymalizacja katalogu %q (%d) nie powiodła się: %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
 msgstr "Optymalizacja katalogów: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Przebieg 4: Sprawdzanie liczników odwołań\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
 msgstr "@u @i @z %i. "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
 msgstr "@u @i %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "licznik odwołań i-węzła %i wynosi %Il, @s %N. "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2797,146 +2834,151 @@ msgstr ""
 "\tLUB KTOŚ BEZMÓZGI (TY) SPRAWDZA PODMONTOWANY (ŻYWY) SYSTEM PLIKÓW.\n"
 "inode_link_info[%i]=%N, inode.i_links_count=%Il. Powinny być takie same!\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "Licznik odwołań i-węzła rozszerzonych atrybutów %i wynosi %N, @s %n. "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr "@d przekracza maksymalną liczbę dowiązań, ale brak cechy DIR_NLINK w @Su.\n"
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Przebieg 5: Sprawdzanie sumarycznych informacji o @gch\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
 msgstr "Wypełnienie na końcu bitmapy i-węzłów nie jest ustawione. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
 msgstr "Wypełnienie na końcu bitmapy @bów nie jest ustawione. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "Różnice bitmapy @bów: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "Różnice bitmapy i-węzłów: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Błędna liczba wolnych i-węzłów dla grupy #%g (%i, naliczono %j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:2068
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Błędna liczba katalogów dla grupy #%g (%i, naliczono %j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Błędna liczba wolnych i-węzłów (%i, naliczono %j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2078
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Błędna liczba wolnych @bów dla grupy #%g (%b, naliczono %c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Błędna liczba wolnych @bów (%b, naliczono %c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
-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:2088
+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:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Błąd wewnętrzny: fałszywy koniec bitmapy (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Błąd podczas kopiowania w zastępczej bitmapie i-węzłów: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Błąd podczas kopiowania w zastępczej bitmapie @bów: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr "@b(i) grupy %g są używane, ale @g ma flagę BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr "i-węzły grupy %g są używane, ale @g ma flagę INODE_UNINIT\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr "@B i-węzłów grupy %g nie zgadza się z sumą kontrolną.\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr "@B @bów grupy %g nie zgadza się z sumą kontrolną.\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 msgid "Recreate @j"
 msgstr "Odtworzyć kronikę"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr "Uaktualnić informacje o limitach typu %N"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2172
+#, no-c-format
 msgid "Error setting @b @g checksum info: %m\n"
-msgstr ""
-"Błąd podczas ustawiania informacji o sumie kontrolnej grupy bloków: %m\n"
+msgstr "Błąd podczas ustawiania informacji o sumie kontrolnej grupy bloków: %m\n"
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2178
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Błąd podczas zapisu informacji o systemie plików: %m\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr "Błąd podczas zrzucania zapisów na urządzenie przechowujące: %m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2189
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "Błąd podczas zapisu informacji o limitach typu %N: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Nie obsłużony kod błędu (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "ZIGNOROWANO"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr "w move_quota_inode"
 
@@ -2958,25 +3000,25 @@ msgstr "podczas rozpoczynania przeszukiwania i-węzłów"
 msgid "while doing inode scan"
 msgstr "podczas przeszukiwania i-węzłów"
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "podczas wywołania ext2fs_block_iterate dla i-węzła %d"
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "podczas wywołania ext2fs_block_iterate dla i-węzła %u"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "podczas wywołania ext2fs_adjust_ea_refcount2 dla i-węzła %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "podczas wywołania ext2fs_adjust_ea_refcount2 dla i-węzła %u"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Skracanie"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Czyszczenie"
 
-#: e2fsck/unix.c:77
+#: e2fsck/unix.c:78
 #, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
@@ -2987,15 +3029,14 @@ msgstr ""
 "\t\t[-l|-L plik_wadliwych_bloków] [-C fd] [-j zewn-kronika]\n"
 "\t\t[-E opcje-rozszerzone] [-z plik-undo] urządzenie\n"
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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"
@@ -3004,10 +3045,9 @@ 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:88
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -3019,20 +3059,18 @@ 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"
-" -z plik_undo         Utworzenie pliku \"undo\" pozwalającego wycofać "
-"zmiany\n"
+" -z plik_undo         Utworzenie pliku \"undo\" pozwalającego wycofać zmiany\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, 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:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3050,7 +3088,7 @@ msgstr[2] ""
 "\n"
 "%12u użytych i-węzłów (%2.2f%% z %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
@@ -3058,7 +3096,7 @@ 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:169
+#: e2fsck/unix.c:172
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
@@ -3066,16 +3104,16 @@ 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:174
+#: e2fsck/unix.c:177
 #, 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"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr "             Histogram głębokości ekstentów: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
@@ -3083,7 +3121,7 @@ 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:195
+#: e2fsck/unix.c:198
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
@@ -3091,7 +3129,7 @@ msgstr[0] "%12u wadliwy blok\n"
 msgstr[1] "%12u wadliwe bloki\n"
 msgstr[2] "%12u wadliwych bloków\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:200
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
@@ -3099,7 +3137,7 @@ 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:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -3117,7 +3155,7 @@ msgstr[2] ""
 "\n"
 "%12u zwykłych plików\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
@@ -3125,7 +3163,7 @@ msgstr[0] "%12u katalog\n"
 msgstr[1] "%12u katalogi\n"
 msgstr[2] "%12u katalogów\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
@@ -3133,7 +3171,7 @@ 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:206
+#: e2fsck/unix.c:209
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
@@ -3141,7 +3179,7 @@ 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:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
@@ -3149,7 +3187,7 @@ msgstr[0] "%12u potok\n"
 msgstr[1] "%12u potoki\n"
 msgstr[2] "%12u potoków\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
@@ -3157,7 +3195,7 @@ msgstr[0] "%12u dowiązanie\n"
 msgstr[1] "%12u dowiązania\n"
 msgstr[2] "%12u dowiązań\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
@@ -3165,7 +3203,7 @@ msgstr[0] "%12u dowiązanie symboliczne"
 msgstr[1] "%12u dowiązania symboliczne"
 msgstr[2] "%12u dowiązań symbolicznych"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
@@ -3173,7 +3211,7 @@ msgstr[0] " (%u szybkie dowiązanie symboliczne)\n"
 msgstr[1] " (%u szybkie dowiązania symboliczne)\n"
 msgstr[2] " (%u szybkich dowiązań symbolicznych)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
@@ -3181,7 +3219,7 @@ msgstr[0] "%12u gniazdo\n"
 msgstr[1] "%12u gniazda\n"
 msgstr[2] "%12u gniazd\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
@@ -3189,33 +3227,33 @@ msgstr[0] "%12u plik\n"
 msgstr[1] "%12u pliki\n"
 msgstr[2] "%12u plików\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "podczas sprawdzania, czy %s jest zamontowany."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Uwaga! %s jest zamontowany.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Uwaga! %s jest w użyciu.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s jest zamontowany.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s jest w użyciu.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3223,7 +3261,7 @@ msgstr ""
 "Nie można kontynuować, przerwano.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3237,81 +3275,105 @@ msgstr ""
 "***POWAŻNE*** uszkodzenie systemu plików.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "Naprawdę kontynuować?"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "sprawdzanie przerwane.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr " zawiera system plików z błędami"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " nie był czysto odmontowany"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 msgid " primary superblock features different from backup"
-msgstr " cechy głównego superbloku różnią się od kopii zapasowej"
+msgstr " właściwości głównego superbloku różnią się od kopii zapasowej"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:383
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " był montowany %u razy bez sprawdzania"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:390
 msgid " has filesystem last checked time in the future"
 msgstr " ma czas ostatniego sprawdzenia systemu plików w przyszłości"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " przetrwał %u dni bez sprawdzania"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr "zignorowano częstotliwość sprawdzania, ustawione jest broken_system_clock\n"
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ", wymuszono sprawdzenie.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, 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:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
 msgstr " (sprawdzenie wstrzymane; zasilanie z baterii)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr " (sprawdzenie po następnym montowaniu)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr "(sprawdzenie za %ld montowań)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, 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:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "Błędna wersja EA.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:702
 msgid "Invalid readahead buffer size.\n"
 msgstr "Błędny parametr rozmiaru bufora odczytu z wyprzedzeniem.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Nieznana opcja rozszerzona: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Opcje rozszerzone są oddzielane przecinkami i mogą przyjmować parametr,\n"
+"który jest ustawiany znakiem równości ('='). Poprawne opcje rozszerzone to:\n"
+"\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr "\tea_ver=<wersja ea (1 lub 2)>\n"
+
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "\treadahead_kb=<rozmiar bufora>\n"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3320,55 +3382,55 @@ msgstr ""
 "Błąd składni w pliku konfiguracyjnym e2fsck (%s, linia %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Błąd podczas kontroli deskryptora pliku %d: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr "Błędne informacje dopełniające deskryptora plików"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 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:865
+#: e2fsck/unix.c:903
 #, 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:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Nie udało się rozwiązać '%s'"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 msgid "The -n and -D options are incompatible."
 msgstr "Opcje -n i -D są niekompatybilne."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 msgid "The -n and -c options are incompatible."
 msgstr "Opcje -n i -c są niekompatybilne."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Opcje -n i -l/-L są niekompatybilne."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Opcje -D i -E fixes_only są niekompatybilne."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Opcje -E bmap2extent i fixes_only są niekompatybilne."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 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:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3377,7 +3439,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG \"%s\" nie jest liczbą całkowitą\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3388,35 +3450,31 @@ msgstr ""
 "Błędny argument nieliczbowy dla -%c (\"%s\")\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, 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:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr "podczas sprawdzania bloku MMP"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
-"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"
+"Jeśli system plików nie jest na pewno używany przez żaden system, można uruchomić:\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
 msgstr "podczas odczytu bloku MMP"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3427,57 +3485,57 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "podczas próby usunięcia %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "podczas próby utworzenia pliku cofnięcia (undo)\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Błąd: wersja biblioteki ext2fs jest za stara!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "podczas próby zainicjowania programu"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tUżywane %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr "interaktywna naprawa wymaga terminala"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s próba użycia zapasowych bloków...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr "Superblok błędny,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
 msgstr "Deskryptory grup wyglądają źle..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s podczas próby użycia zapasowych bloków"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1546
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: powracanie do oryginalnego superbloku\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3487,29 +3545,28 @@ msgstr ""
 "(lub superblok systemu plików jest uszkodzony)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr "Czy to może jest partycja zerowej długości?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, 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:1526
+#: e2fsck/unix.c:1590
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Zapewne nie istniejące urządzenie lub swap?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1592
 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:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr "Zapewne nie istniejące urządzenie?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3517,71 +3574,79 @@ 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:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr "%s: Próba załadowania superbloku mimo błędów...\n"
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr "Potrzeba nowszej wersji e2fsck!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1749
 #, c-format
 msgid "while checking journal for %s"
 msgstr "podczas sprawdzania kroniki dla %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1752
 msgid "Cannot proceed with file system check"
 msgstr "Nie można kontynuować sprawdzania systemu plików"
 
-#: e2fsck/unix.c:1661
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+#: e2fsck/unix.c:1763
+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:1673
+#: e2fsck/unix.c:1775
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "nie można ustawić flag superbloku na %s\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1781
 #, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Napotkano błąd sumy kontrolnej kroniki w %s\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1785
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "Uszkodzona kronika w %s\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1789
 #, c-format
 msgid "while recovering journal of %s"
 msgstr "podczas odtwarzania kroniki dla %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, c-format
 msgid "%s has unsupported feature(s):"
-msgstr "%s ma włączone nie obsługiwane cechy:"
+msgstr "%s ma włączone nie obsługiwane właściwości:"
+
+#: e2fsck/unix.c:1826
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "%s ma nie obsługiwane kodowanie: %0x\n"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1876
 #, 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:1771
+#: e2fsck/unix.c:1879
 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:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Tworzenie kroniki (%d bloków): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr " Wykonano.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1931
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
@@ -3589,24 +3654,38 @@ msgstr ""
 "\n"
 "*** kronika została zregenerowana ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "przerwano"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck przerwany.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Restart e2fsck od początku...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "podczas resetowania kontekstu"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** BŁĘDY SYSTEMU PLIKÓW NAPRAWIONE *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: System plików został zmodyfikowany.\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3615,12 +3694,12 @@ msgstr ""
 "\n"
 "%s: ***** SYSTEM PLIKÓW ZMODYFIKOWANY *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:2040
 #, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** WYMAGANY RESTART SYSTEMU *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3631,51 +3710,51 @@ msgstr ""
 "%s: ********** UWAGA: System plików nadal ma błędy **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "tTyY"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr "wWaA"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr " ('w' włącza 'tak' na wszystko) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<t>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (t/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "anulowano!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr "tak na wszystko\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "tak\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "nie\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3684,7 +3763,7 @@ msgstr ""
 "%s? nie\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3693,38 +3772,38 @@ msgstr ""
 "%s? tak\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "tak"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "nie"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: niedopuszczalne bloki bitmapy dla %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "odczytu bitmap i-węzłów i bloków"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "podczas ponawiania próby odczytu bitmap dla %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "zapisu bitmap bloków i i-węzłów"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "podczas ponownego zapisu bitmap blików i i-węzłów dla %s"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3737,64 +3816,59 @@ msgstr ""
 "%s: NIEOCZEKIWANA NIESPÓJNOŚĆ; TRZEBA URUCHOMIĆ fsck RĘCZNIE.\n"
 "\t(tzn. bez opcji -a ani -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Użyta pamięć: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Użyta pamięć: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "czas: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "upłynął czas: %6.f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "podczas odczytu i-węzła %lu w %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "podczas zapisu i-węzła %lu w %s"
 
-#: e2fsck/util.c:765
-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"
+#: e2fsck/util.c:792
+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:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "zakończono                                           \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, 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"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 ""
-"Składnia: %s [-b rozm_bloku] [-i plik_wej] [-o plik_wyj] [-svwnf]\n"
+"Składnia: %s [-b rozm_bloku] [-i plik_wej] [-o plik_wyj] [-svwnfBX]\n"
 "       [-c bloków_naraz] [-d wsp_opóźn_między_odczytami]\n"
 "       [-e maks_wadliwych_bloków] [-p przebiegów]\n"
 "       [-t wzór_testowy [-t wzór_testowy [...]]]\n"
 "       urządzenie [ostatni_blok [pierwszy_blok]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3803,80 +3877,80 @@ msgstr ""
 "%s: Opcje -n i -w wykluczają się wzajemnie.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "Gotowe w %6.2f%%, minęło %s (błędów: %d/%d/%d)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Testowanie wzorcem losowym: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Testowanie wzorcem 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "podczas przeskakiwania"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Dziwna wartość (%ld) w do_read\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "podczas ext2fs_sync_device"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "podczas rozpoczynania iteracji po liście wadliwych bloków"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "podczas przydzielania buforów"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Sprawdzanie bloków od %lu do %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Poszukiwanie wadliwych bloków w trybie tylko do odczytu\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Poszukiwanie wadliwych bloków (tylko odczyt): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Zbyt dużo wadliwych bloków, przerwanie testu\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Poszukiwanie wadliwych bloków w trybie odczytu i zapisu\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Od bloku %lu do %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Odczyt i porównywanie: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Poszukiwanie wadliwych bloków w trybie z niedestruktywnym zapisem\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Poszukiwanie wadliwych bloków (odczyt i niedestruktywny zapis)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3885,57 +3959,57 @@ msgstr ""
 "Otrzymano przerwanie, sprzątam\n"
 "\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "podczas zapisu testowych danych, blok %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s jest zamontowany; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "badblocks wymuszone mimo to. Mam nadzieję, że /etc/mtab się myli.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "nie jest bezpiecznie uruchamiać badblocks!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s jest najwyraźniej używany przez system; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "badblocks wymuszone mimo to.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "błędny %s - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr "Zbyt duża maksymalna liczba wadliwych bloków %u - maksymalna to %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "nie można przydzielić pamięci na wzorzec_testowy - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "W trybie odczytu-zapisu można podać najwyżej jeden wzorzec testowy"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "W trybie samego odczytu nie można podać wzorca_testowego"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3943,272 +4017,268 @@ msgstr ""
 "Nie można określić rozmiaru urządzenia; trzeba podać\n"
 "rozmiar ręcznie\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "podczas próby określenia rozmiaru urządzenia"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "ostatni blok"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "pierwszy blok"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "błędny początkowy blok (%llu): musi być mniejszy niż %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "błędny początkowy blok (%llu): musi być wartością 32-bitową"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "podczas tworzenia listy wadliwych bloków w pamięci"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "plik wejściowy - błędny format"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "podczas dodawania do listy wadliwych bloków w pamięci"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, 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:89
 #, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
-msgstr "Składnia: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v wersja] pliki...\n"
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "Składnia: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v wersja] pliki...\n"
 
-#: misc/chattr.c:159
+#: misc/chattr.c:160
 #, c-format
 msgid "bad project - %s\n"
 msgstr "błędny projekt - %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "błędna wersja - %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "podczas próby stat %s"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "podczas odczytu flag %s"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Flagi %s ustawiono jako "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "podczas ustawiania flag %s"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Wersja %s ustawiona jako %lu\n"
 
-#: misc/chattr.c:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "podczas ustawiania wersji %s"
 
-#: misc/chattr.c:271
+#: misc/chattr.c:272
 #, c-format
 msgid "Project of %s set as %lu\n"
 msgstr "Projekt %s ustawiony na %lu\n"
 
-#: misc/chattr.c:275
+#: misc/chattr.c:276
 #, c-format
 msgid "while setting project on %s"
 msgstr "podczas ustawiania projektu %s"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Nie można przydzielić zmiennej path w chattr_dir_proc"
 
-#: misc/chattr.c:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "= jest niekompatybilne z - i +\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "Trzeba użyć '-v', =, - lub +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:80 misc/create_inode.c:119
 #, c-format
 msgid "while reading inode %u"
 msgstr "podczas odczytu i-węzła %u"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 msgid "while expanding directory"
 msgstr "podczas rozszerzania katalogu"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:97
 #, c-format
 msgid "while linking \"%s\""
 msgstr "podczas dowiązywania \"%s\""
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
 #, c-format
 msgid "while writing inode %u"
 msgstr "podczas zapisu i-węzła %u"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:152 misc/create_inode.c:176
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "podczas wypisywania atrybutów \"%s\""
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:163
 #, c-format
 msgid "while opening inode %u"
 msgstr "podczas otwierania i-węzła %u"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr "podczas przydzielania pamięci"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:189 misc/create_inode.c:205
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "podczas odczytu atrubytu \"%s\" dla \"%s\""
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:214
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "podczas zapisu atrybutu \"%s\" do i-węzła %u"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:224
 #, c-format
 msgid "while closing inode %u"
 msgstr "podczas zamykania i-węzła %u"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:275
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr "podczas przydzielania i-węzła \"%s\""
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:294
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr "podczas tworzenia i-węzła \"%s\""
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:360
 #, c-format
 msgid "while creating symlink \"%s\""
 msgstr "podczas tworzenia dowiązania symbolicznego \"%s\""
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:378 misc/create_inode.c:963
 #, c-format
 msgid "while looking up \"%s\""
 msgstr "podczas szukania \"%s\""
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:398
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr "podczas tworzenia katalogu \"%s\""
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:627
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "podczas otwierania \"%s\" w celu skopiowania"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr "podczas zmiany katalogu roboczego na \"%s\""
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:815
 #, c-format
-msgid "while opening directory \"%s\""
-msgstr "podczas otwierania katalogu \"%s\""
+msgid "while scanning directory \"%s\""
+msgstr "podczas skanowania katalogu \"%s\""
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:825
 #, c-format
 msgid "while lstat \"%s\""
 msgstr "podczas wykonywania lstat na \"%s\""
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:875
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr "podczas tworzenia pliku specjalnego \"%s\""
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:884
 msgid "malloc failed"
 msgstr "malloc nie powiodło się"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:892
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr "podczas próby odczytu dowiązania \"%s\""
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr "dowiązanie symboliczne zwiększyło rozmiar między lstat() a readlink()"
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:910
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr "podczas zapisu dowiązania symbolicznego \"%s\""
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:921
 #, c-format
 msgid "while writing file \"%s\""
 msgstr "podczas zapisu pliku \"%s\""
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:934
 #, c-format
 msgid "while making dir \"%s\""
 msgstr "podczas tworzenia katalogu \"%s\""
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:952
 msgid "while changing directory"
 msgstr "podczas zmiany katalogu"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:958
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr "ignorowanie wpisu \"%s\""
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:971
 #, c-format
 msgid "while setting inode for \"%s\""
 msgstr "podczas ustawiania i-węzła dla \"%s\""
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:978
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "podczas ustawiania rozszerzonych atrybutów dla \"%s\""
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:1004
 msgid "while saving inode data"
 msgstr "podczas zapisywania danych i-węzła"
 
 #: misc/dumpe2fs.c:56
 #, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Składnia: %s [-bfghixV] [-o superblok=<numer>] [-o blocksize=<rozmiar>] "
-"urządzenie\n"
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "Składnia: %s [-bfghimxV] [-o superblok=<numer>] [-o blocksize=<rozmiar>] urządzenie\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -4326,106 +4396,54 @@ msgstr "podczas wypisywania listy wadliwych bloków"
 msgid "Bad blocks: %u"
 msgstr "Wadliwe bloki: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "podczas odczytu i-węzła kroniki"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "podczas otwierania i-węzła kroniki"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "podczas odczytu superbloku kroniki"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Błędna liczba magiczna superbloku kroniki!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Cechy kroniki:                "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Rozmiar kroniki:              "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Długość kroniki:              %u\n"
-"Sekwencja kroniki:            0x%08x\n"
-"Początek kroniki:             %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr "Typ sumy kontr. kroniki:  crc32\n"
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-"Typ sumy kontr. kroniki:  %s\n"
-"Suma kontrolna kroniki:   0x%08x\n"
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Błąd kroniki:             %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "podczas odczytu superbloku kroniki"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Nie można znaleźć magicznych liczb superbloku kroniki"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Rozmiar bloku kroniki:        %u\n"
-"Długość kroniki:              %u\n"
-"Pierwszy blok kroniki:        %u\n"
-"Sekwencja kroniki:            0x%08x\n"
-"Początek kroniki:             %u\n"
-"Liczba użytkowników kroniki:  %u\n"
+#: misc/dumpe2fs.c:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "nie udało się przydzielić bufora MMP\n"
 
-#: misc/dumpe2fs.c:514
+#: misc/dumpe2fs.c:479
 #, c-format
-msgid "Journal users:            %s\n"
-msgstr "Użytkownicy kroniki:          %s\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "podczas odczytu bloku MMP %llu z '%s'\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Nie można przydzielić pamięci do analizy opcji!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Błędny parametr superblock: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Błędny parametr blocksize: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4448,241 +4466,221 @@ msgstr ""
 "\tsuperblock=<numer superbloku>\n"
 "\tblocksize=<rozmiar bloku>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tUżywane %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** W systemie plików wykryto błędy sumy kontrolnej! Proszę uruchomić teraz "
-"e2fsck!\n"
-"\n"
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
-msgstr "Nie można znaleźć poprawnego superbloku systemu plików.\n"
-
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** W bitmapach wykryto błędy sumy kontrolnej! Proszę uruchomić teraz "
-"e2fsck!\n"
-"\n"
+msgstr "Nie można znaleźć poprawnego superbloku systemu plików.\n"
+
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s: cecha MMP nie jest włączona.\n"
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:747
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "podczas próby odczytu bitmap '%s'\n"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"*** Należy teraz uruchomić e2fsck!\n"
 "\n"
-"%s: %s: błąd podczas czytania bitmap: %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
-msgstr "Składnia: %s [-r|Q ] [ -fr ] urządzenie plik_obrazu\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
+msgstr "Składnia: %s [ -r|Q ] [ -f ] [ -b superblok ] [ -B rozm_bloku ] [ -fr ] urządzenie plik_obrazu\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "       %s -I urządzenie plik_obrazu\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
-msgstr ""
-"       %s -ra  [  -cnfp  ] [ -o offset_źr ] [ -O offset_doc ] fs_źr "
-"[ fs_doc ]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+msgstr "       %s -ra  [  -cnfp  ] [ -o offset_źr ] [ -O offset_doc ] fs_źr [ fs_doc ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr "podczas przydzielania bufora"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "Zapisywanie bloku %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr "błąd przy zapisie bloku %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr "błąd w generic_write()"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Błąd: rozmiar nagłówka jest większy niż wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr "Nie można przydzielić bufora nagłówka\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "podczas zapisu superbloku"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "podczas zapisu tabeli i-węzłów"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "podczas zapisu bitmapy bloków"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "podczas zapisu bitmapy i-węzłów"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Uszkodzony blok katalogu %llu: błędne rec_len (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Uszkodzony blok katalogu %llu: błędne name_len (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "Bloków: %llu / %llu (%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
 msgstr "Kopiowanie "
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
-msgstr ""
-"Zatrzymanie teraz zniszczy system plików; aby potwierdzić, można przerwać "
-"ponownie\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+msgstr "Zatrzymanie teraz zniszczy system plików; aby potwierdzić, można przerwać ponownie\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " %s pozostało przy %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr "błąd przy odczycie bloku %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "Skopiowano bloków: %llu / %llu (%d%%) w %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "przy %.2f MB/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
 msgstr "podczas przydzielania tablicy l1"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr "podczas przydzielania bufora l2"
 
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
-msgstr ""
-"Uwaga: w pamięci podręcznej są nadal tablice w trakcie zapisu bufora, dane "
-"zostaną utracone, więc obraz może nie być poprawny.\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
+msgstr "Uwaga: w pamięci podręcznej są nadal tablice w trakcie zapisu bufora, dane zostaną utracone, więc obraz może nie być poprawny.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr "podczas przydzielania ext_qcow2_image"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr "podczas inicjowania ext2_qcow2_image"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
-msgstr ""
-"Błąd programu: utworzono wiele bloków sekwencyjnych liczników odwołań!\n"
+msgstr "Błąd programu: utworzono wiele bloków sekwencyjnych liczników odwołań!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr "podczas przydzielania bitmapy bloków"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr "podczas przydzielania bitmapy bloków scramble"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
 msgstr "Przeszukiwanie i-węzłów...\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr "Nie można przydzielić bufora bloku"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "podczas iteracji po i-węźle %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "Obrazów surowego i qcow2 nie można zainstalować"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr "błąd podczas odczytu bitmap"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr "podczas otwierania pliku urządzenia"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr "podczas odtwarzania tabeli obrazu"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "Opcja -a może być użyta tylko z obrazami surowym lub QCOW2."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "Opcja -b może być użyta tylko z obrazami surowym lub QCOW2."
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr "Offsety są dozwolone tylko z obrazami surowymi."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr "Tryb przesunięcia jest dozwolony tylko z obrazami surowymi."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr "Tryb przesunięcia wymaga trybu wszystkich danych."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr "sprawdzanie, czy zamontowany"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4694,46 +4692,51 @@ msgstr ""
 "może spowodować, że obraz będzie niespójny, przez co nie będzie przydatny\n"
 "do celów diagnostycznych. Aby na pewno to zrobić, można użyć opcji -f.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "Obrazu QCOW2 nie można zapisać na standardowe wyjście!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr "Nie można wykonać stat na wyjściu\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "Obraz (%s) jest skompresowany\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "Obraz (%s) jest zaszyfrowany\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Obraz (%s) jest uszkodzony\n"
+
+#: misc/e2image.c:1683
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr "podczas próby przekształcenia obrazu qcow2 (%s) na obraz surowy (%s)"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr "Opcja -c jest obsługiwana tylko w trybie surowym\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "Opcja -c nie jest obsługiwana przy zapisie na standardowe wyjscie\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr "podczas przydzielania check_buf"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr "Opcja -p jest obsługiwana tylko w trybie surowym\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d bloków już zawierało dane do skopiowania\n"
@@ -4763,7 +4766,7 @@ msgstr "e2label: błąd podczas odczytu superbloku\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: to nie jest system plików ext2\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Uwaga: etykieta za długa, skrócono.\n"
@@ -4778,161 +4781,161 @@ msgstr "e2label: nie można przejść ponownie do superbloku\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: błąd podczas zapisu superbloku\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Składnia: e2label urządzenie [nowa-etykieta]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
-msgstr "Składnia: %s [-f] [-h] [-n] [-v] <plik_transakcji> <system_plików>\n"
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
+msgstr "Składnia: %s [-f] [-h] [-n] [-o offset] [-v] [-z plik_undo] <plik_transakcji> <system_plików>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr "Superblok systemu plików nie pasuje do pliku undo.\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr "UUID się nie zgadza.\n"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr "Czas ostatniego montowania się nie zgadza.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr "Czas ostatniego zapisu się nie zgadza.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr "Licznik zapisu czasu życia się nie zgadza.\n"
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr "podczas odczytu superbloku systemu plików."
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr "podczas pobierania superbloku"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "Suma kontrolna superbloku pliku undo nie zgadza się.\n"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr "Błędny offset - %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr "Nie będzie zapisu do pliku undo podczas odtwarzania go.\n"
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "podczas otwierania pliku undo `%s'\n"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 msgid "while reading undo file"
 msgstr "podczas odczytu pliku undo"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: To nie jest plik undo.\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "%s: Suma kontrolna nagłówka się nie zgadza.\n"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "%s: Uszkodzony nagłówek pliku undo.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr "%s: Rozmiar bloku undo zbyt duży.\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "%s: Rozmiar bloku undo zbyt mały.\n"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
-msgstr "%s: Nieznany zbiór cech pliku undo.\n"
+msgstr "%s: Nieznany zbiór właściwości pliku undo.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "Błąd podczas sprawdzania, czy %s jest zamontowany."
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr "e2undo powinno być uruchamiane tylko na odmontowanych systemach plików"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, c-format
 msgid "while opening `%s'"
 msgstr "podczas otwierania `%s'"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr "podany offset jest zbyt duży"
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 msgid "while reading keys"
 msgstr "podczas odczytu kluczy"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr "%s: błędna wartość magiczna klucza pod %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr "%s: błąd sumy kontrolnej klucza pod %llu.\n"
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, c-format
 msgid "%s: block %llu is too long."
 msgstr "%s: blok %llu jest zbyt długi."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, c-format
 msgid "while fetching block %llu."
 msgstr "podczas pobierania bloku %llu."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr "błąd sumy kontrolnej w bloku systemu plików %llu (blok undo %llu)\n"
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, c-format
 msgid "while writing block %llu."
 msgstr "podczas zapisu bloku %llu."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr "Uszkodzenie pliku undo; proszę TERAZ uruchomić e2fsck!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr "Błąd we/wy podczas odtwarzania: proszę TERAZ uruchomić e2fsck!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr "Niekompletny rekord undo; proszę uruchomić e2fsc.\n"
@@ -4978,12 +4981,8 @@ msgstr ""
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
-msgstr ""
-"offset_b     pocz_b         koniec_b  bloki_fs  rozmb  grp  mkfs/"
-"czas_mont            sb_uuid etykieta\n"
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+msgstr "offset_b     pocz_b         koniec_b  bloki_fs  rozmb  grp  mkfs/czas_mont            sb_uuid etykieta\n"
 
 #: misc/findsuper.c:264
 #, c-format
@@ -5015,37 +5014,37 @@ msgstr ""
 "Pominę ten błąd, ale /etc/fstab należy jak najszybciej poprawić.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: nie znaleziono\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: Nie ma więcej procesów potomnych?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Uwaga... %s dla urządzenia %s zakończył się sygnałem %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: status wynosi %x, to się nie powinno nigdy zdarzyć.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Skończono z %s (status wyjścia %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Błąd %d podczas wykonywania fsck.%s dla %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5053,46 +5052,39 @@ msgstr ""
 "Albo wszystkie, albo żaden rodzaj systemu plików z podanych po -t musi być\n"
 "poprzedzony 'no' lub '!'.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Nie można przydzielić pamięci na rodzaje systemów plików\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, 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
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: nie można sprawdzić %s: fsck.%s nie znaleziony\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Sprawdzanie wszystkich systemów plików.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 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"
+#: misc/fsck.c:1085
+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
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: za dużo urządzeń\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: za dużo parametrów\n"
@@ -5104,52 +5096,44 @@ msgstr "Montowanie tylko do odczytu.\n"
 #: misc/fuse2fs.c:3769
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
-msgstr ""
-"%s: Zezwolenie użytkownikom na przydzielenie wszystkich bloków. To "
-"niebezpieczne!\n"
+msgstr "%s: Zezwolenie użytkownikom na przydzielenie wszystkich bloków. To niebezpieczne!\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
 msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr "Proszę uruchomić e2fsck -fy %s.\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
-msgstr ""
-"Kronika wymaga odtworzenia; wymagane uruchomienie `e2fsck -E journal_only'.\n"
+msgstr "Kronika wymaga odtworzenia; wymagane uruchomienie `e2fsck -E journal_only'.\n"
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3812
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "%s: Zapis do kroniki nie jest obsługiwany.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
-msgstr ""
-"Uwaga: Montowanie nie sprawdzonego systemu plików, zalecane jest "
-"uruchomienie e2fsck.\n"
+msgstr "Uwaga: Montowanie nie sprawdzonego systemu plików, zalecane jest uruchomienie e2fsck.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
-msgstr ""
-"Uwaga: Osiągnięto maksymalną liczbę montowań, zalecane jest uruchomienie "
-"e2fsck.\n"
+msgstr "Uwaga: Osiągnięto maksymalną liczbę montowań, zalecane jest uruchomienie e2fsck.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
-msgstr ""
-"Uwaga: Osiągnięto czas sprawdzenia; zalecane jest uruchomienie e2fsck.\n"
+msgstr "Uwaga: Osiągnięto czas sprawdzenia; zalecane jest uruchomienie e2fsck.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr "Wykryto sieroty; zalecane jest uruchomienie e2fsck.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr "Wykryto błędy; konieczne jest uruchomienie e2fsck.\n"
 
@@ -5173,7 +5157,7 @@ msgstr "Podczas odczytu projektu %s"
 msgid "While reading version on %s"
 msgstr "Podczas odczytu wersji %s"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5182,8 +5166,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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 "Składnia: %s [-c|-l nazwa-pliku] [-b rozm.bloku] [-C rozm.klastra]\n"
@@ -5191,39 +5174,39 @@ msgstr ""
 "\t[-G rozmiar-grupy-flex] [-N liczba-i-węzłów] [-d katalog-główny]\n"
 "\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[-O właściwość[,...]] [-r wersja-fs] [-E opcja-rozszerzona[,...]]\n"
 "\t[-t typ-fs] [-T typ-użycia] [-U UUID] [-e traktowanie_błędów]\n"
 "\t[-z plik_undo] [-jnqvDFSV] urządzenie [liczba-bloków]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Uruchamianie polecenia: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "podczas próby uruchomienia '%s'"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "podczas przetwarzania listy wadliwych bloków z programu"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, 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:295
+#: misc/mke2fs.c:301
 #, 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:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Przerwano...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5234,15 +5217,19 @@ msgstr ""
 "\twadliwe bloki.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "podczas zaznaczania wadliwych bloków jako używane"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "podczas zapisu zarezerwowanych i-węzłów"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Zapis tablicy i-węzłów: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5251,76 +5238,76 @@ 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:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "zakończono                      \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "podczas tworzenia głównego katalogu"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "podczas odczytu głównego i-węzła"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "podczas ustawiania właściciela głównego i-węzła"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "podczas tworzenia /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "podczas szukania /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "podczas rozszerzania /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "podczas ustawiania i-węzła wadliwych bloków"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, 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:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Uwaga: nie można odczytać bloku 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, 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:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "podczas inicjowania superbloku kroniki"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Zerowanie urządzenia kroniki: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "podczas zerowania urządzenia kroniki (blok %llu, liczba %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "podczas zapisu superbloku kroniki"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "Tworzenie systemu plików o %llu blokach %dk oraz %u i-węzłach\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5329,157 +5316,164 @@ msgstr ""
 "uwaga: %llu bloków nie używanych.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Etykieta systemu plików=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Typ OS: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Rozmiar bloku=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Rozmiar klastra=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Rozmiar fragmentu=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, 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:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u i-węzłów, %llu bloków\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, 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:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Pierwszy blok danych=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Właściciel głównego katalogu=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maksymalna liczba bloków systemu plików=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u grup bloków\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u grupa bloków\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, 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:702
+#: misc/mke2fs.c:714
 #, 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:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u i-węzłów w grupie\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "UUID systemu plików: %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Kopie zapasowe superbloku zapisane w blokach: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:822
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s wymaga '-O 64bit'\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "'%s' musi być przed 'resize=%u'\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Błędny desc_size: '%s'\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Błędny zarodek haszowania: %s\n"
+
+#: misc/mke2fs.c:867
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Błędny offset: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Błędny okres uaktualniania mmp: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Błędna liczba kopii zapasowych superbloku: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Błędny parametr stride: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Błędny parametr stripe-width: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Błędny parametr resize: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:965
 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:959
+#: misc/mke2fs.c:989
 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:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Błędny root_owner: '%s'\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1069
+#, c-format
+msgid "Invalid encoding: %s"
+msgstr "Błędne kodowanie: %s"
+
+#: misc/mke2fs.c:1087
 #, c-format
 msgid ""
 "\n"
@@ -5502,6 +5496,8 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
@@ -5509,7 +5505,7 @@ msgstr ""
 "Podano błędne opcje: %s\n"
 "\n"
 "Opcje rozszerzone są oddzielane przecinkami i mogą przyjmować parametr,\n"
-"\tktóry jest ustawiany znakiem '='.\n"
+"\tktóry jest ustawiany znakiem równości ('=').\n"
 "\n"
 "Poprawne opcje rozszerzone to:\n"
 "\tmmp_update_interval=<przedział>\n"
@@ -5525,10 +5521,12 @@ msgstr ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<kodowanie>\n"
+"\tencoding_flags=<flagi>\n"
 "\tquotatype=<rodzaj(e) limitów do włączenia>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5539,7 +5537,17 @@ msgstr ""
 "Uwaga: RAID stripe-width %u nie jest parzystą wielokrotnością stride %u.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr "błąd: Błędna flaga kodowania: %s\n"
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr "błąd: W przypadku podawania flag kodowania trzeba podać bezpośrednio kodowanie\n"
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5548,17 +5556,17 @@ msgstr ""
 "Błąd składni w pliku konfiguracyjnym mke2fs (%s, linia %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Ustawiona błędna opcja systemu plików: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ustawiona błędna opcja montowania: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
@@ -5567,7 +5575,7 @@ msgstr ""
 "\n"
 "Uwaga! Plik mke2fs.conf nie określa typu systemu plików %s.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5575,11 +5583,11 @@ msgstr ""
 "Prawdopodobnie trzeba zainstalować uaktualniony plik mke2fs.conf.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 msgid "Aborting...\n"
 msgstr "Przerwano...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5590,150 +5598,146 @@ msgstr ""
 "Uwaga: typ systemu plików %s nie jest zdefiniowany w mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Nie udało się przydzielić pamięci na nową PATH\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1608
 #, 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:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "błędny rozmiar bloku - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, 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:1588
+#: misc/mke2fs.c:1661
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "błędny rozmiar klastra - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "'-%' jest przestarzałe, zamiast niego należy używać '-E'"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "błędne traktowanie błędów - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr "Błędna liczba bloków w grupie"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 msgid "blocks per group must be multiple of 8"
 msgstr "liczba bloków w grupie musi być wielokrotnością 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "Niedopuszczalny rozmiar flex_bg"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
 msgstr "rozmiar flex_bg musi być potęgą 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "rozmiar flex_bg (%lu) musi być mniejszy lub równy 2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, 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:1671
+#: misc/mke2fs.c:1744
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "błędny rozmiar i-węzła - %s"
 
-#: misc/mke2fs.c:1684
-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:1757
+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:1695
+#: misc/mke2fs.c:1768
 msgid "in malloc for bad_blocks_filename"
 msgstr "w malloc dla bad_blocks_filename"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1777
 #, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr "Uwaga: etykieta za długa; zostanie skrócona do '%s'\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "błędny procent zarezerwowanych bloków - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "błędna liczba i-węzłów - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1814
 msgid "while allocating fs_feature string"
 msgstr "podczas przydzielania łańcucha fs_feature"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1831
 #, c-format
 msgid "bad revision level - %s"
 msgstr "błędny poziom wersji - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "tpodczas próby utworzenia rewizji %d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 msgid "The -t option may only be used once"
 msgstr "Opcja -t może być użyta tylko raz"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1858
 msgid "The -T option may only be used once"
 msgstr "Opcja -T może być użyta tylko raz"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "podczas próby otwarcia urządzenia kroniki %s\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1920
 #, 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:1853
+#: misc/mke2fs.c:1926
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Użycie rozmiaru bloku urządzenia kroniki: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1937
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "błędna liczba bloków '%s' na urządzeniu '%s'"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "system plików"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "podczas próby określenia rozmiaru systemu plików"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5741,7 +5745,7 @@ msgstr ""
 "Nie można określić rozmiaru urządzenia; rozmiar systemu\n"
 "plików musi być podany\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5753,47 +5757,48 @@ msgstr ""
 "\tfdiska z powodu zajętej modyfikowanej partycji. Ponowny odczyt\n"
 "\ttablicy partycji może wymagać rebootu.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:2015
 msgid "Filesystem larger than apparent device size."
 msgstr "System plików większy od widocznego rozmiaru urządzenia."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:2035
 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:1999
+#: misc/mke2fs.c:2085
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "HURD nie obsługuje właściwości filetype.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2090
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "HURD nie obsługuje właściwości huge_file.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "HURD nie obsługuje właściwości metadata_csum.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2100
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "HURD nie obsługuje właściwości ea_inode.\n"
+
+#: misc/mke2fs.c:2110
 msgid "while trying to determine hardware sector size"
 msgstr "podczas próby określenia rozmiaru sprzętowego sektora"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2116
 msgid "while trying to determine physical sector size"
 msgstr "podczas próby określenia rozmiaru sektora fizycznego"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2148
 msgid "while setting blocksize; too small for device\n"
 msgstr "podczas ustawiania rozmiaru bloku; zbyt mały dla urządzenia\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2153
 #, 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:2086
+#: misc/mke2fs.c:2177
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5802,94 +5807,89 @@ 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:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2191
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 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"
+"%s: Rozmiar urządzenia (0x%llx bloków) %s jest zbyt duży, aby utworzyć\n"
+"\tsystem plików przy użyciu rozmiaru bloku %d.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "Rozwinięcie fs_types dla mke2fs.conf: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 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"
+msgstr "Właściwości systemu plików nie obsługiwane przez systemy plików w wersji 0\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2228
 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:2145
+#: misc/mke2fs.c:2238
 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:2158
+#: misc/mke2fs.c:2251
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "błędny procent zarezerwowanych bloków - %lf"
 
-#: misc/mke2fs.c:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
-msgstr ""
-"Ekstenty MUSZĄ być włączone dla 64-bitowego systemu plików. Aby to poprawić, "
-"należy przekazać -O extents.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
+msgstr "Ekstenty MUSZĄ być włączone dla 64-bitowego systemu plików. Aby to poprawić, należy przekazać -O extents.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "Rozmiar klastra nie może być mniejszy niż rozmiar bloku.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "określenie rozmiaru klastra wymaga własności bigalloc"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, 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:2224
+#: misc/mke2fs.c:2317
 #, 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:2226
+#: misc/mke2fs.c:2319
 #, 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:2247
+#: misc/mke2fs.c:2340
 #, 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:2251
+#: misc/mke2fs.c:2344
 #, 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:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
-msgstr ""
-"Sugestia: jądro Linuksa >= 3.18 daje lepszą stabilność metadanych oraz sumy "
-"kontrolne kroniki.\n"
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "Sugestia: jądro Linuksa >= 3.18 daje lepszą stabilność metadanych oraz sumy kontrolne kroniki.\n"
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
+msgstr "Nieznane kodowanie nazw plików z profilu: %s"
+
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr "Nieznane flagi kodowania z profilu: %s"
+
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -5903,19 +5903,32 @@ msgstr ""
 "Tworzenie systemu plików o %llu blokach, ale być może nie o to chodziło.\n"
 "\n"
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2449
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr "i-węzły %d-bajtowe są zbyt małe dla limitów projektu"
+
+#: misc/mke2fs.c:2465
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Właściwości encrypt i casefold nie są kompatybilne.\n"
+"Nie można ich włączyć jednocześnie.\n"
+
+#: misc/mke2fs.c:2480
 msgid "Can't support bigalloc feature without extents feature"
 msgstr "Obsługa własności bigalloc jest niemożliwa bez własności extents"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
 msgstr ""
-"Cechy resize_inode i meta_bg nie są kompatybilne.\n"
+"Właściwości resize_inode i meta_bg nie są kompatybilne.\n"
 "Nie można ich włączyć jednocześnie.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5927,51 +5940,39 @@ msgstr ""
 "Więcej informacji pod https://ext4.wiki.kernel.org/index.php/Bigalloc\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 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:2367
+#: misc/mke2fs.c:2516
 msgid "blocks per group count out of range"
 msgstr "liczba bloków w grupie spoza zakresu"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2538
 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 "Właściwość flex_bg nie jest włączona, więc nie można określić rozmiaru flex_bg"
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2550
 #, 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:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
-msgstr ""
-"i-węzły %d-bajtowe są zbyt małe dla danych wewnętrznych; proszę podać "
-"większy rozmiar"
-
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-"i-węzły %d-bajtowe są zbyt małe dla limitów projektu; proszę podać większy "
-"rozmiar"
+msgstr "i-węzły %d-bajtowe są zbyt małe dla danych wewnętrznych; proszę podać większy rozmiar"
 
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, 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:2451
+#: misc/mke2fs.c:2587
 #, 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:2465
+#: misc/mke2fs.c:2601
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5982,74 +5983,65 @@ 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:2652
+#: misc/mke2fs.c:2788
 msgid "Discarding device blocks: "
 msgstr "Porzucanie bloków urządzenia: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 msgid "failed - "
 msgstr "nie powiodło się - "
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2863
 msgid "while initializing quota context"
 msgstr "podczas inicjowania kontekstu limitów"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2870
 msgid "while writing quota inodes"
 msgstr "podczas zapisu i-węzłów limitów"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2895
 #, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "błędne traktowanie błędów w profilu - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2971
+msgid "in malloc for android_sparse_params"
+msgstr "w malloc dla android_sparse_params"
+
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "podczas ustawiania superbloku"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
-msgstr ""
-"Ekstenty nie są włączone. Drzewo ekstenów plików może mieć sumy kontrolne, a "
-"mapy bloków nie. Niewłączenie ekstentów zmniejsza pokrycie sum kontrolnych "
-"metadanych. Aby to poprawić, należy dodać opcję -O extents.\n"
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
+msgstr "Ekstenty nie są włączone. Drzewo ekstenów plików może mieć sumy kontrolne, a mapy bloków nie. Niewłączenie ekstentów zmniejsza pokrycie sum kontrolnych metadanych. Aby to poprawić, należy dodać opcję -O extents.\n"
 
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
-msgstr ""
-"Obsługa 64-bitowego systemu plików nie jest włączona. Większe pola "
-"dostarczane przez tę cechę pozwalają na silniejsze sumy kontrolne. Aby to "
-"poprawić, należy dodać opcję -O 64bit.\n"
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+msgstr "Obsługa 64-bitowego systemu plików nie jest włączona. Większe pola dostarczane przez tę właściwość pozwalają na silniejsze sumy kontrolne. Aby to poprawić, należy dodać opcję -O 64bit.\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr "Cecha metadata_csum_seed wymaga cechy metadata_csum.\n"
+#: misc/mke2fs.c:3016
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "Właściwość metadata_csum_seed wymaga właściwości metadata_csum.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 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:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "nieznany os - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 msgid "Allocating group tables: "
 msgstr "Przydzielanie tablicy grup: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr "podczas próby przydzielenia tablic systemu plików"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6057,30 +6049,30 @@ msgstr ""
 "\n"
 "\tpodczas próby przekształcenia bitmapy podklastrów"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr "%s może być bardziej uszkodzony poprzez nadpisanie superbloku\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, 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:3114
+#: misc/mke2fs.c:3279
 msgid "while reserving blocks for online resize"
 msgstr "podczas rezerwowania bloków na zmianę rozmiaru w locie"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "kronika"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Dodano kronikę do urządzenia %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
@@ -6089,21 +6081,21 @@ msgstr ""
 "\n"
 "\tpodczas próby dodania kroniki do urządzenia %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "wykonano\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Pominięto tworzenie kroniki w trybie super-only\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Tworzenie kroniki (%u bloków): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6111,7 +6103,7 @@ msgstr ""
 "\n"
 "\tpodczas próby utworzenia kroniki"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
@@ -6119,35 +6111,28 @@ msgstr ""
 "\n"
 "Błąd podczas włączania funkcji zabezpieczenia przed wielokrotnym montowaniem."
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3357
 #, 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:3210
+#: misc/mke2fs.c:3373
 msgid "Copying files into the device: "
 msgstr "Kopiowanie plików na urzędzenie: "
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3379
 msgid "while populating file system"
 msgstr "podczas zapełniania systemu plików"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Zapis superbloków i podsumowania systemu plików: "
 
-#: misc/mke2fs.c:3230
-#, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Uwaga, problemy z zapisem superbloków."
+#: misc/mke2fs.c:3393
+msgid "while writing out and closing file system"
+msgstr "podczas zapisu i zamykania systemu plików"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6155,29 +6140,31 @@ msgstr ""
 "wykonano\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
-msgstr ""
-"Przesunięcie partycji w blokach %llu (%uk) nie jest zgodne z rozmiarem "
-"klastra %u.\n"
+msgid "while zeroing block %llu for hugefile"
+msgstr "podczas zerowania bloku %llu dla dużego pliku"
+
+#: misc/mk_hugefiles.c:515
+#, c-format
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgstr "Przesunięcie partycji w blokach %llu (%uk) nie jest zgodne z rozmiarem klastra %u.\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
 msgstr "Duże pliki będą wyzerowane\n"
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:584
 #, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "Tworzenie dużych plików w liczbie %lu "
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:586
 #, c-format
 msgid "with %llu blocks each"
 msgstr "mających po %llu blok(ów)"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:595
 #, c-format
 msgid "while creating huge file %lu"
 msgstr "podczas tworzenia dużego pliku %lu"
@@ -6222,23 +6209,29 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   początek=%8d rozmiar=%8lu koniec=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "Proszę uruchomić e2fsck -D na systemie plików.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+"\n"
+"Ta operacja wymaga świeżo sprawdzonego systemu plików.\n"
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Proszę uruchomić e2fsck -f na systemie plików.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "Proszę uruchomić e2fsck -D na systemie plików.\n"
+msgstr "Proszę uruchomić e2fsck -fD na systemie plików.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
@@ -6246,30 +6239,39 @@ msgstr ""
 "Składnia: %s [-c max_licznik_montowań] [-e trakt._błędów] [-f] [-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[,...]]\n"
-"\t[-p okres_uakt._mmp] [-r liczba_zarez._bloków] [-u użytkownik]\n"
-"\t[-C licznik_montowań] [-L etykieta_wolumenu] [-M ostatnio_mont._katalog]\n"
-"\t[-O [^]cecha[,...]] [-Q opcje_limitów]\n"
+"\t[-r liczba_zarez._bloków] [-u użytkownik] [-C licznik_montowań]\n"
+"\t[-L etykieta_wolumenu] [-M ostatnio_mont._katalog]\n"
+"\t[-O [^]właściwość[,...]] [-Q opcje_limitów]\n"
 "\t[-E opcja_rozszerzona[,...]] [-T czas_ost._sprawdz.] [-U UUID]\n"
 "\t[-I nowy_rozmiar_i-węzła] [-z plik_undo] urządzenie\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Nie znaleziono superbloku kroniki!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "podczas próby otworzenia zewnętrznej kroniki"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s nie jest urządzeniem kroniki.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr ""
+"Superblok kroniki jest uszkodzony, nr_users\n"
+"jest zbyt duże (%d).\n"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "UUID systemu plików nie znaleziony na urządzeniu kroniki.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6277,71 +6279,70 @@ msgstr ""
 "Nie można zlokalizować urządzenia kroniki. NIE zostało usunięte.\n"
 "Można użyć opcji -f, aby usunąć nieistniejące urządzenie kroniki.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "Kronika usunięta\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "podczas odczytu bitmap"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
 msgstr "podczas czyszczenia i-węzła kroniki"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "podczas zapisu i-węzła kroniki"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(proszę zrestartować potem system!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr "Po uruchomieniu e2fsck proszę uruchomić `resize2fs %s %s"
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:489
 #, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr "Proszę uruchomić `resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
 msgstr " -z \"%s\""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:495
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr "', aby włączyć tryb 64-bitowy.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:497
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr "', aby wyłączyć tryb 64-bitowy.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
-"UWAGA: nie udało się upewnić co do obsługi cechy metadata_csum_seed w "
-"jądrze.\n"
+"UWAGA: nie udało się upewnić co do obsługi właściwości metadata_csum_seed w jądrze.\n"
 "  Wymaga to Linuksa w wersji >= 4.4.\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
-msgstr "Usuwanie cechy systemu plików '%s' nie jest obsługiwane.\n"
+msgstr "Usuwanie właściwości systemu plików '%s' nie jest obsługiwane.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
-msgstr "Ustawianie cechy systemu plików '%s' nie jest obsługiwane.\n"
+msgstr "Ustawianie właściwości systemu plików '%s' nie jest obsługiwane.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6349,7 +6350,7 @@ msgstr ""
 "Flaga has_journal może być wyczyszczona tylko kiedy system plików\n"
 "jest odmontowany lub zamontowany tylko do odczytu.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6357,15 +6358,15 @@ msgstr ""
 "Flaga needs_recovery jest ustawiona. Proszę uruchomić e2fsck przed\n"
 "czyszczeniem flagi has_journal.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 "Ustawienie właściwości systemu plików 'sparse_super' nie jest obsługiwane\n"
-"dla systemów plików z włączoną cechą meta_bg.\n"
+"dla systemów plików z włączoną właściwością meta_bg.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6374,14 +6375,12 @@ msgstr ""
 "Funkcja ochrony przed wielokrotnym montowaniem nie może zostać\n"
 "włączona, jeśli system plików jest zamontowany lub tylko do odczytu.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1143
 #, 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:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6389,26 +6388,26 @@ msgstr ""
 "Funkcja zabezpieczenia przed wielokrotnym montowaniem nie może zostać\n"
 "wyłączona, jeśli system plików jest tylko do odczytu.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 msgid "Error while reading bitmaps\n"
 msgstr "Błąd podczas odczytu bitmap\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr "Liczba magiczna w bloku MMP się nie zgadza; oczekiwano %x, jest %x\n"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1174
 msgid "while reading MMP block."
 msgstr "podczas odczytu bloku MMP."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr "Wyłączenie flagi flex_bg spowoduje niespójność systemu plików.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6416,65 +6415,46 @@ msgstr ""
 "Flaga huge_file może być wyczyszczona tylko kiedy system plików\n"
 "jest odmontowany lub zamontowany tylko do odczytu.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
 msgstr "Włączenie sum kontrolnych może zająć trochę czasu."
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
-msgstr ""
-"Nie można włączyć cechy metadata_csum na zamontowanym systemie plików!\n"
+msgstr "Nie można włączyć właściwości metadata_csum na zamontowanym systemie plików!\n"
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
-msgstr ""
-"Ekstenty nie są włączone. Drzewo ekstenów plików może mieć sumy kontrolne, a "
-"mapy bloków nie. Niewłączenie ekstentów zmniejsza pokrycie sum kontrolnych "
-"metadanych. Aby to poprawić, należy uruchomić ponownie z opcją -O extents.\n"
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
+msgstr "Ekstenty nie są włączone. Drzewo ekstenów plików może mieć sumy kontrolne, a mapy bloków nie. Niewłączenie ekstentów zmniejsza pokrycie sum kontrolnych metadanych. Aby to poprawić, należy uruchomić ponownie z opcją -O extents.\n"
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
-msgstr ""
-"Obsługa 64-bitowego systemu plików nie jest włączona. Większe pola "
-"dostarczane przez tę cechę pozwalają na silniejsze sumy kontrolne. Aby to "
-"poprawić, należy uruchomić resize2fs -b.\n"
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
+msgstr "Obsługa 64-bitowego systemu plików nie jest włączona. Większe pola dostarczane przez tę właściwość pozwalają na silniejsze sumy kontrolne. Aby to poprawić, należy uruchomić resize2fs -b.\n"
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
 msgstr "Wyłączenie sum kontrolnych może zająć trochę czasu."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
-msgstr ""
-"Nie można wyłączyć cechy metadata_csum na zamontowanym systemie plików!\n"
+msgstr "Nie można wyłączyć właściwości metadata_csum na zamontowanym systemie plików!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
-msgstr ""
-"Nie można włączyć trybu 64-bitowego, kiedy system plików jest zamontowany!\n"
+msgstr "Nie można włączyć trybu 64-bitowego, kiedy system plików jest zamontowany!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
-msgstr ""
-"Nie można wyłączyć trybu 64-bitowego, kiedy system plików jest zamontowany!\n"
+msgstr "Nie można wyłączyć trybu 64-bitowego, kiedy system plików jest zamontowany!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
-msgstr ""
-"\n"
-"Uwaga: włączono projekt bez jednoczesnego włączenia limitów\n"
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
+msgstr "Nie można włączyć właściwości project; rozmiar i-węzła zbyt mały.\n"
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6482,29 +6462,36 @@ msgstr ""
 "\n"
 "Uwaga: opcja '^quota' nadpisuje argumenty '-Q'.\n"
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr "Nie można zmienić właściwości encrypt na systemach plików z włączoną właściwością encoding.\n"
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
 msgstr ""
-"Ustawienie cechy 'metadata_csum_seed' jest obsługiwane\n"
-"tylko dla systemów plików z włączoną cechą metadata_csum.\n"
+"Ustawienie właściwości 'metadata_csum_seed' jest obsługiwane\n"
+"tylko dla systemów plików z włączoną właściwością metadata_csum.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
-"UUID zmienił się od czasu włączenia cechy metadata_csum. System plików musi\n"
+"UUID zmienił się od czasu włączenia właściwości metadata_csum. System plików musi\n"
 "być odmontowany, aby bezpiecznie nadpisać wszystkie metadane, żeby zgadzały\n"
 "się z nowym UUID-em.\n"
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr "Przeliczanie sum kontrolnych może zająć trochę czasu."
+
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "System plików już ma kronikę.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, c-format
 msgid ""
 "\n"
@@ -6513,21 +6500,21 @@ msgstr ""
 "\n"
 "\tpodczas próby otworzenia kroniki na %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Tworzenie kroniki na urządzeniu %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "podczas dodawania systemu plików do kroniki na %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "Tworzenie i-węzła kroniki: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6535,32 +6522,36 @@ msgstr ""
 "\n"
 "\tpodczas próby utworzenia pliku kroniki"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr "Nie można włączyć limitów projektów; rozmiar i-węzła zbyt mały.\n"
+
+#: misc/tune2fs.c:1588
 msgid "while initializing quota context in support library"
 msgstr "podczas inicjowania kontekstu limitów w bibliotece wspierającej"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1603
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr "podczas uaktualniania limitów (%d)"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1611
 #, c-format
 msgid "while writing quota file (%d)"
 msgstr "podczas zapisu pliku limitów (%d)"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "while removing quota file (%d)"
 msgstr "podczas usuwania pliku limitów (%d)"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6570,108 +6561,105 @@ 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Nie można przeanalizować podanej daty/czasu: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "błędna liczba montowań - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "błędny gid/nazwa grupy - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "błędny odstęp - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "błędny procent zarezerwowanych bloków - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
 msgid "-o may only be specified once"
 msgstr "-o może być podane tylko raz"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
 msgid "-O may only be specified once"
 msgstr "-O może być podane tylko raz"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "błędna liczba zarezerwowanych bloków - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "błędny uid/nazwa użytkownika - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "błędny rozmiar i-węzła - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, 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:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "Okres uaktualniania mmp zbyt duży: %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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:2078
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "Ustawianie flagi błędu systemu plików w celu wymuszenia fsck.\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Błędny parametr RAID stride: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Błędny parametr RAID stripe-width: %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2126
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Błędny algorytm haszowania: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2132
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Ustawianie domyślnego algorytmu haszowania na %s (%d)\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2151
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6683,8 +6671,10 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -6692,44 +6682,44 @@ msgstr ""
 "Podano błędne opcje.\n"
 "\n"
 "Opcje rozszerzone są oddzielane przecinkami i mogą przyjmować parametr,\n"
-"\tktóry jest ustawiany znakiem '='.\n"
+"\tktóry jest ustawiany znakiem równości ('=').\n"
 "\n"
-"Poprawne opcje to:\n"
+"Poprawne opcje rozszerzone to:\n"
 "\tclear_mmp\n"
 "\thash_alg=<algorytm haszowania>\n"
 "\tmount_opts=<rozszerzone domyślne opcje montowania>\n"
+"\tmmp_update_interval=<częśtotliwość uaktualniania mmp w sekundach>\n"
 "\tstride=<rozmiar porcji danych RAID na dysku w blokach>\n"
 "\tstripe_width=<RAID stride * liczba dysków danych w blokach>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 msgid "Failed to read inode bitmap\n"
 msgstr "Nie udało się odczytać bitmapy i-węzłów\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 msgid "Failed to read block bitmap\n"
 msgstr "Nie udało się odczytać bitmapy bloków\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "bloki do przeniesienia"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 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:2550
+#: misc/tune2fs.c:2653
 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:2555
+#: misc/tune2fs.c:2658
 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:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6737,84 +6727,113 @@ 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:2799
+#: misc/tune2fs.c:2900
+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"
+"'tune2fs -f -E clear_mmp {urządzenie}'\n"
+
+#: misc/tune2fs.c:2907
 #, 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:2811
+#: misc/tune2fs.c:2919
 msgid "Cannot modify a journal device.\n"
 msgstr "Nie można zmodyfikować urządzenia kroniki.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Rozmiar i-węzła już wynosi %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 msgid "Shrinking inode size is not supported\n"
 msgstr "Zmniejszanie rozmiaru i-węzła nie jest obsługiwane\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "Błędny rozmiar i-węzła %lu (max %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
 msgstr "Zmiana rozmiaru i-węzłów może zająć trochę czasu."
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+"Uwaga: kronika nie jest czysta. Można odtworzyć kronikę poleceniem:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"a następnie uruchomić ponownie to polecenie. W innym przypadku wszelkie\n"
+"wykonane zmiany mogą zostać nadpisane przy odtwarzaniu kroniki.\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Odtwarzanie kroniki.\n"
+
+#: misc/tune2fs.c:3028
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Ustawianie maksymalnej liczby montowań na %d\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3034
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Ustawianie aktualnego licznika montowań na %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Ustawianie traktowania błędów na %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Ustawianie gid-a zarezerwowanych bloków na %lu\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3049
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "odstęp pomiędzy sprawdzeniami jest zbyt duży (%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3056
 #, 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:2924
+#: misc/tune2fs.c:3063
 #, 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:2930
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "liczba zarezerwowanych bloków jest zbyt duża (%llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3076
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Ustawianie liczby zarezerwowanych bloków na %llu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3081
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6822,7 +6841,7 @@ msgstr ""
 "\n"
 "System plików już ma rzadkie superbloki.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6830,9 +6849,9 @@ msgid ""
 msgstr ""
 "\n"
 "Ustawienie flagi rzadkiego superbloku nie jest obsługiwane\n"
-"dla systemów plików z włączoną cechą meta_bg.\n"
+"dla systemów plików z włączoną właściwością meta_bg.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
@@ -6841,7 +6860,7 @@ msgstr ""
 "\n"
 "Flaga rzadkich superbloków ustawiona. %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6849,143 +6868,111 @@ msgstr ""
 "\n"
 "Usuwanie flagi rzadkiego superbloku nie jest obsługiwane.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, 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:2974
+#: misc/tune2fs.c:3113
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Ustawianie uid-a zarezerwowanych bloków na %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3145
 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:3024
-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:3163
+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:3181
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "Ustawienie UUID-a w tym systemie plików może zająć trochę czasu."
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3196
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr "UUID można zmienić tylko na niezamontowanym systemie plików.\n"
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
-msgstr ""
-"Jeżeli używane są tylko jądra nowsze niż 4.4, można uruchomić 'tune2fs -O "
-"metadata_csum_seed', a następnie ponownie to polecenie.\n"
-
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr ""
-"Ustawienie UUID-a systemu plików z sumami kontrolnymi może zająć trochę "
-"czasu."
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
+msgstr "Jeżeli używane są tylko jądra nowsze niż 4.4, można uruchomić 'tune2fs -O metadata_csum_seed', a następnie ponownie to polecenie.\n"
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "Błędny format UUID-a\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 msgid "Need to update journal superblock.\n"
 msgstr "Trzeba uaktualnić superblok kroniki.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 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:3133
+#: misc/tune2fs.c:3274
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
 "Zmiana rozmiaru i-węzła nie jest obsługiwana dla systemów plików\n"
-"z włączoną cechą flex_bg.\n"
+"z włączoną właściwością flex_bg.\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Ustawianie rozmiaru i-węzła na %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 msgid "Failed to change inode size\n"
 msgstr "Nie udało się zmienić rozmiaru i-węzła\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Ustawianie rozmiaru stride na %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Ustawianie szerokości stripe na na %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3322
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Ustawianie rozszerzonych domyślnych opcji montowania na '%s'\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-"Uwaga: kronika nie jest czysta. Można odtworzyć kronikę poleceniem:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"a następnie uruchomić ponownie to polecenie. W innym przypadku wszelkie\n"
-"wykonane zmiany mogą zostać nadpisane przy odtwarzaniu kroniki.\n"
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr "Odtwarzanie kroniki.\n"
-
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr "<kontynuacja>\n"
 
-#: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Kontynuować mimo to (lub odczekać %d s)? (t,n) "
+#: misc/util.c:105
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "Kontynuować mimo to (lub odczekać %d s, aby kontynuować)? (t,N) "
 
-#: misc/util.c:108
-#, fuzzy
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
-msgstr "Kontynuować mimo to? (t,n) "
+msgstr "Kontynuować mimo to? (t,N) "
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "mke2fs wymuszone mimo to. Mam nadzieję, że /etc/mtab się myli.\n"
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr "nie zrobię tutaj %s!\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr "mke2fs wymuszone mimo to.\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr "Nie można przydzielić pamięci na analizę opcji kroniki!\n"
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
@@ -6994,7 +6981,7 @@ msgstr ""
 "\n"
 "Nie można znaleźć urządzenia kroniki pasującego do %s\n"
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -7024,7 +7011,7 @@ msgstr ""
 "Rozmiar kroniki musi być pomiędzy 1024 a 10240000 blokami systemu plików.\n"
 "\n"
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
@@ -7032,7 +7019,7 @@ msgstr ""
 "\n"
 "System plików za mały na kronikę\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -7043,7 +7030,7 @@ msgstr ""
 "Żądany rozmiar kroniki to %d bloków; musi być\n"
 "pomiędzy 1024 a 10240000 bloków. Przerwano.\n"
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
@@ -7051,7 +7038,7 @@ msgstr ""
 "\n"
 "Rozmiar kroniki zbyt duży dla systemu plików.\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
@@ -7064,8 +7051,7 @@ msgstr ""
 #: misc/uuidd.c:49
 #, 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:51
 #, c-format
@@ -7209,44 +7195,42 @@ msgstr "#\tNum=%llu, Rozmiar=%llu, Kursor=%llu, Sortowane=%llu\n"
 #: resize/main.c:49
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
-"Składnia: %s [-d flagi_śledzenia] [-f] [-F] [-M] [-P] [-p] urządzenie [-b|-s|"
-"nowy_rozm] [-z plik_undo]\n"
+"Składnia: %s [-d flagi_śledzenia] [-f] [-F] [-M] [-P] [-p] urządzenie [-b|-s|nowy_rozm] [-S porcja-RAID] [-z plik_undo]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Rozszerzanie tablicy i-węzłów"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Relokowanie bloków"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Przeszukiwanie tablicy i-węzłów"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Uaktualnianie odwołań do i-węzłów"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Przenoszenie tablicy i-węzłów"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Nieznany przebieg?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Początkowy przebieg %d (maksymalny = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7259,17 +7243,17 @@ msgstr ""
 "to wykonać, należy użyć opcji force.\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "podczas otwierania %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "podczas pobierania informacji stat dla %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7278,30 +7262,30 @@ msgstr ""
 "Proszę uruchomić najpierw 'e2fsck -f %s'.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Przybliżony minimalny rozmiar systemu plików: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Błędny nowy rozmiar: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 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:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Nowy rozmiar jest mniejszy niż minimalny (%llu)\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Błędna długość stride"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7312,35 +7296,28 @@ msgstr ""
 "Zażądano nowego rozmiaru %llu bloków.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
-msgstr "Nie można włączyć i wyłączyć cechy 64bit.\n"
-
-#: resize/main.c:569
-#, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
-msgstr ""
-"Nie można zmienić cechy 64bit w systemie plików większym niż 2^32 bloków.\n"
+msgstr "Nie można włączyć i wyłączyć właściwości 64bit.\n"
 
 #: resize/main.c:575
 #, c-format
-msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
-msgstr "Nie można zmienić cechy 64bit, kiedy system plików jest zamontowany.\n"
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
+msgstr "Nie można zmienić właściwości 64bit w systemie plików większym niż 2^32 bloków.\n"
 
 #: resize/main.c:581
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
-msgstr ""
-"Proszę włączyć cechę extents przy użyciu tune2fs przed włączeniem cechy "
-"64bit.\n"
+msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
+msgstr "Nie można zmienić właściwości 64bit, kiedy system plików jest zamontowany.\n"
 
 #: resize/main.c:587
 #, c-format
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
+msgstr "Proszę włączyć właściwość extents przy użyciu tune2fs przed włączeniem właściwości 64bit.\n"
+
+#: resize/main.c:593
+#, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
@@ -7348,37 +7325,37 @@ msgstr ""
 "System plików już ma wielkość %llu (%dk) bloków. Nie ma nic do roboty!\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "System plików jest już 64-bitowy.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "System plików jest już 32-bitowy.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "Konwersja systemu plików na 64 bity.\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "Konwersja systemu plików na 32 bity.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, 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:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "podczas próby zmiany rozmiaru %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7387,7 +7364,7 @@ msgstr ""
 "Proszę uruchomić 'e2fsck -fy %s', aby naprawić system plików\n"
 "po przerwanej operacji zmiany rozmiaru.\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7396,7 +7373,7 @@ msgstr ""
 "System plików na %s ma teraz %llu (%dk) bloków.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "podczas próby skrócenia %s"
@@ -7408,8 +7385,7 @@ msgstr "jądro nie obsługuje zmiany rozmiaru w locie przy fladze sparse_super2"
 #: resize/online.c:86
 #, 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:90
 msgid "On-line shrinking not supported"
@@ -7458,54 +7434,48 @@ msgstr "Wykonywanie zmiany rozmiaru w locie %s na %llu (%dk) bloków.\n"
 msgid "While trying to extend the last group"
 msgstr "Podczas próby rozszerzenia ostatniej grupy"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Podczas próby dodania grupy #%d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, 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:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "liczba i-węzłów (%llu) musi być mniejsza niż %u"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "liczba i-węzłów (%llu) musi być mniejsza niż %u\n"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "zarezerwowane bloki"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "bloki metadanych"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr "nowe bloki meta"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr "To się nie powinno zdarzyć! Brak sb w ostatnim super_sparse bg?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
-msgstr ""
-"To się nie powinno zdarzyć! Nieoczekiwane old_desc w super_sparse bg?\n"
+msgstr "To się nie powinno zdarzyć! Nieoczekiwane old_desc w super_sparse bg?\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 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.43.4-WIP"
-msgstr "Biblioteka EXT2FS w wersji 1.43"
+msgid "EXT2FS Library version 1.45.3"
+msgstr "Biblioteka EXT2FS w wersji 1.45.3"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -7773,16 +7743,15 @@ msgstr "I-węzeł pochodzący z wadliwego bloku w tablicy i-węzłów"
 
 #: lib/ext2fs/ext2_err.c:78
 msgid "Filesystem has unsupported feature(s)"
-msgstr "System plików ma włączone nie obsługiwane cechy"
+msgstr "System plików ma włączone nie obsługiwane właściwości"
 
 #: lib/ext2fs/ext2_err.c:79
 msgid "Filesystem has unsupported read-only feature(s)"
-msgstr "System plików ma włączone nie obsługiwane cechy tylko do odczytu"
+msgstr "System plików ma włączone nie obsługiwane właściwości tylko do odczytu"
 
 #: 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"
@@ -7934,8 +7903,7 @@ msgstr "Lista bloków katalogu ext2fs jest pusta"
 
 #: 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"
@@ -8051,9 +8019,7 @@ msgstr "Kanał we/wy nie obsługuje 64-bitowych numerów bloków"
 
 #: 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"
@@ -8068,8 +8034,8 @@ msgid "MMP: device currently active"
 msgstr "MMP: urządzenie obecnie aktywne"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
-msgstr "MMP: fsck jest uruchomiony"
+msgid "MMP: e2fsck being run"
+msgstr "MMP: e2fsck jest uruchomiony"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
@@ -8124,8 +8090,8 @@ msgid "Unknown checksum algorithm"
 msgstr "Nieznany algorytm sumy kontrolnej"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr "Suma kontrolna bloku MMP nie zgadza się z blokiem MMP"
+msgid "MMP block checksum does not match"
+msgstr "Suma kontrolna bloku MMP nie zgadza się"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
@@ -8137,8 +8103,7 @@ msgstr "Suma kontrolna bitmapy bloków nie zgadza się z bitmapą"
 
 #: lib/ext2fs/ext2_err.c:168
 msgid "Cannot iterate data blocks of an inode containing inline data"
-msgstr ""
-"Nie można iterować po blokach danych i-węzła zawierającego dane wewnętrzne"
+msgstr "Nie można iterować po blokach danych i-węzła zawierającego dane wewnętrzne"
 
 #: lib/ext2fs/ext2_err.c:169
 msgid "Extended attribute has an invalid name length"
@@ -8166,7 +8131,7 @@ msgstr "Za mało miejsca na zapisanie danych rozszerzonego atrybutu"
 
 #: lib/ext2fs/ext2_err.c:175
 msgid "Filesystem is missing ext_attr or inline_data feature"
-msgstr "System plików nie ma cechy ext_attr lub inline_data"
+msgstr "System plików nie ma właściwości ext_attr lub inline_data"
 
 #: lib/ext2fs/ext2_err.c:176
 msgid "Inode doesn't have inline data"
@@ -8217,9 +8182,12 @@ msgid "The journal superblock is corrupt"
 msgstr "Superblok kroniki jest uszkodzony"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "I-węzeł zmiany rozmiaru jest uszkodzony"
+msgstr "I-węzeł jest uszkodzony"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr "I-węzeł zawierający wartość rozszerzonego atrybutu jest uszkodzony"
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8303,8 +8271,7 @@ msgstr "Błędna wartość magiczna w profile_section_t"
 
 #: lib/support/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"
 
 #: lib/support/prof_err.c:32
 msgid "Invalid profile_section object"
@@ -8413,6 +8380,3 @@ msgstr "%s zawiera system plików %s\n"
 #, c-format
 msgid "%s contains `%s' data\n"
 msgstr "%s zawiera dane `%s'\n"
-
-#~ msgid "Please run e2fsck on the filesystem.\n"
-#~ msgstr "Proszę uruchomić e2fsck na systemie plików.\n"
diff --git a/po/pt.gmo b/po/pt.gmo
new file mode 100644 (file)
index 0000000..931592e
Binary files /dev/null and b/po/pt.gmo differ
diff --git a/po/pt.po b/po/pt.po
new file mode 100644 (file)
index 0000000..be549fc
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,8364 @@
+# 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,
+#      2013, 2014, 2015, 2016, 2017, 2018 by Theodore Ts'o
+# This file is distributed under the same license as the e2fsprogs package.
+# Theodore Ts'o <tytso@mit.edu>, 2018.
+# Pedro Albuquerque <palbuquerque73@gmail.com>, 2018, 2019.
+#
+#. 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,
+#. there is an @-expansion, where strings like "@i" are expanded to
+#. "inode", and so on.  In order to make it easier for translators, the
+#. e2fsprogs po template file has been enhanced with comments that show
+#. the @-expansion, for the strings in the problem.c file.
+#.
+#. Translators are free to use the @-expansion facility if they so
+#. choose, by providing translations for strings in e2fsck/message.c.
+#. These translation can completely replace an expansion; for example,
+#. if "bblock" (which indicated that "@b" would be expanded to "block")
+#. is translated as "ddatenverlust", then "@d" will be expanded to
+#. "datenverlust".  Alternatively, translators can simply not use the
+#. @-expansion facility at all.
+#.
+#. The second expansion which is done for e2fsck's problem.c messages is
+#. a dynamic %-expansion, which expands %i as an inode number, and so
+#. on.  A table of these expansions can be found below.  Note that
+#. %-expressions that begin with "%D" and "%I" are two-character
+#. expansions; so for example, "%Iu" expands to the inode's user id
+#. ownership field (inode->i_uid).  Also the "%B" expansion is special:
+#. it can expand to either the string "indirect block" (possibly preceded
+#. by the word "double" or "triple"), or the string "block #" immediately
+#. followed by an integer indicating a block sequence number.
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
+#.     %b      <blk>                   block number
+#.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
+#.     %c      <blk2>                  block number
+#.     %Di     <dirent> -> ino         inode number
+#.     %Dn     <dirent> -> name        string
+#.     %Dr     <dirent> -> rec_len
+#.     %Dl     <dirent> -> name_len
+#.     %Dt     <dirent> -> filetype
+#.     %d      <dir>                   inode number
+#.     %g      <group>                 integer
+#.     %i      <ino>                   inode number
+#.     %Is     <inode> -> i_size
+#.     %IS     <inode> -> i_extra_isize
+#.     %Ib     <inode> -> i_blocks
+#.     %Il     <inode> -> i_links_count
+#.     %Im     <inode> -> i_mode
+#.     %IM     <inode> -> i_mtime
+#.     %IF     <inode> -> i_faddr
+#.     %If     <inode> -> i_file_acl
+#.     %Id     <inode> -> i_size_high
+#.     %Iu     <inode> -> i_uid
+#.     %Ig     <inode> -> i_gid
+#.     %It     <str>                   file type
+#.     %j      <ino2>                  inode number
+#.     %m      <com_err error message>
+#.     %N      <num>
+#.     %p              ext2fs_get_pathname of directory <ino>
+#.     %P              ext2fs_get_pathname of <dirent>->ino with <ino2> as
+#.                             the containing directory.  (If dirent is NULL
+#.                             then return the pathname of directory <ino2>)
+#.     %q              ext2fs_get_pathname of directory <dir>
+#.     %Q              ext2fs_get_pathname of directory <ino> with <dir> as
+#.                             the containing directory.
+#.     %s      <str>                   miscellaneous string
+#.     %S              backup superblock
+#.     %X      <num>   hexadecimal format
+#.
+msgid ""
+msgstr ""
+"Project-Id-Version: e2fsprogs 1.45.3\n"
+"Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2019-07-21 08:48+0100\n"
+"Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.com>\n"
+"Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Geany / PoHelper 1.36\n"
+
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
+#, c-format
+msgid "Bad block %u out of range; ignored.\n"
+msgstr "Mau bloco %u fora do intervalo; ignorado.\n"
+
+#: e2fsck/badblocks.c:46
+msgid "while sanity checking the bad blocks inode"
+msgstr "ao verificar a sanidade de inodes de maus blocos"
+
+#: e2fsck/badblocks.c:58
+msgid "while reading the bad blocks inode"
+msgstr "ao ler inodes de maus blocos"
+
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
+#, c-format
+msgid "while trying to open %s"
+msgstr "ao tentar abrir %s"
+
+#: e2fsck/badblocks.c:83
+#, c-format
+msgid "while trying popen '%s'"
+msgstr "ao tentar popen \"%s\""
+
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
+msgid "while reading in list of bad blocks from file"
+msgstr "ao ler na lista de maus blocos a partir de ficheiro"
+
+#: e2fsck/badblocks.c:105
+msgid "while updating bad block inode"
+msgstr "ao actualizar inode de mau bloco"
+
+#: e2fsck/badblocks.c:133
+#, c-format
+msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
+msgstr "Aviso: bloco %u ilegal encontrado em inode de mau bloco. Limpo.\n"
+
+#: e2fsck/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "ao libertar ficheiro dir_info tdb"
+
+#: e2fsck/ehandler.c:55
+#, c-format
+msgid "Error reading block %lu (%s) while %s.  "
+msgstr "Erro ao ler bloco %lu (%s) enquanto %s. "
+
+#: e2fsck/ehandler.c:58
+#, c-format
+msgid "Error reading block %lu (%s).  "
+msgstr "Erro ao ler bloco %lu (%s). "
+
+#: e2fsck/ehandler.c:66 e2fsck/ehandler.c:115
+msgid "Ignore error"
+msgstr "Ignorar erro"
+
+#: e2fsck/ehandler.c:67
+msgid "Force rewrite"
+msgstr "Forçar reescrever"
+
+#: e2fsck/ehandler.c:109
+#, c-format
+msgid "Error writing block %lu (%s) while %s.  "
+msgstr "Erro ao escrever bloco %lu (%s) enquanto %s. "
+
+#: e2fsck/ehandler.c:112
+#, c-format
+msgid "Error writing block %lu (%s).  "
+msgstr "Erro ao escrever bloco %lu (%s). "
+
+#: e2fsck/emptydir.c:57
+msgid "empty dirblocks"
+msgstr "dirblocks vazio"
+
+#: e2fsck/emptydir.c:62
+msgid "empty dir map"
+msgstr "dir map vazio"
+
+#: e2fsck/emptydir.c:98
+#, c-format
+msgid "Empty directory block %u (#%d) in inode %u\n"
+msgstr "Bloco de pastas vazio %u (nº %d) em inode %u\n"
+
+#: e2fsck/extend.c:22
+#, c-format
+msgid "%s: %s filename nblocks blocksize\n"
+msgstr "%s: %s nome de ficheiro nblocks tamanho de bloco\n"
+
+#: e2fsck/extend.c:44
+#, c-format
+msgid "Illegal number of blocks!\n"
+msgstr "Número ilegal de blocos!\n"
+
+#: e2fsck/extend.c:50
+#, c-format
+msgid "Couldn't allocate block buffer (size=%d)\n"
+msgstr "Impossível alocar buffer do bloco (tamanho=%d)\n"
+
+#: e2fsck/extents.c:42
+msgid "extent rebuild inode map"
+msgstr "estender reconstrução de mapa de inode"
+
+#: e2fsck/flushb.c:35
+#, c-format
+msgid "Usage: %s disk\n"
+msgstr "Uso: %s disco\n"
+
+#: e2fsck/flushb.c:64
+#, c-format
+msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
+msgstr "BLKFLSBUF ioctl não suportado! Impossível despejar os buffers.\n"
+
+#: e2fsck/iscan.c:44
+#, c-format
+msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
+msgstr "Uso: %s [-F] [-I inode_buffer_blocks] dispositivo\n"
+
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
+#, c-format
+msgid "while opening %s for flushing"
+msgstr "ao abrir %s para despejo"
+
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
+#, c-format
+msgid "while trying to flush %s"
+msgstr "ao tentar despejar %s"
+
+#: e2fsck/iscan.c:110
+#, c-format
+msgid "while trying to open '%s'"
+msgstr "ao tentar abrir '%s'"
+
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
+msgid "while opening inode scan"
+msgstr "ao abrir análise inode"
+
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
+msgid "while getting next inode"
+msgstr "ao obter inode seguinte"
+
+#: e2fsck/iscan.c:136
+#, c-format
+msgid "%u inodes scanned.\n"
+msgstr "%u inodes analisados.\n"
+
+#: e2fsck/journal.c:597
+msgid "reading journal superblock\n"
+msgstr "ao ler super-bloco de diário\n"
+
+#: e2fsck/journal.c:670
+#, c-format
+msgid "%s: no valid journal superblock found\n"
+msgstr "%s: sem super-bloco de diário válido\n"
+
+#: e2fsck/journal.c:679
+#, c-format
+msgid "%s: journal too short\n"
+msgstr "%s: diário muito curto\n"
+
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
+#, c-format
+msgid "%s: recovering journal\n"
+msgstr "%s: a recuperar diário\n"
+
+#: e2fsck/journal.c:974
+#, c-format
+msgid "%s: won't do journal recovery while read-only\n"
+msgstr "%s: impossível recuperar diário em modo só-de-leitura\n"
+
+#: e2fsck/journal.c:1001
+#, c-format
+msgid "while trying to re-open %s"
+msgstr "ao tentar reabrir %s"
+
+#: e2fsck/message.c:116
+msgid "aextended attribute"
+msgstr "aatributo estendido"
+
+#: e2fsck/message.c:117
+msgid "Aerror allocating"
+msgstr "AErro de alocação"
+
+#: e2fsck/message.c:118
+msgid "bblock"
+msgstr "bbloco"
+
+#: e2fsck/message.c:119
+msgid "Bbitmap"
+msgstr "Bbitmap"
+
+#: e2fsck/message.c:120
+msgid "ccompress"
+msgstr "ccomprimir"
+
+#: e2fsck/message.c:121
+msgid "Cconflicts with some other fs @b"
+msgstr "Cconflitos com bloco de outro fs"
+
+#: e2fsck/message.c:122
+msgid "ddirectory"
+msgstr "dpasta"
+
+#: e2fsck/message.c:123
+msgid "Ddeleted"
+msgstr "Deliminado"
+
+#: e2fsck/message.c:124
+msgid "eentry"
+msgstr "eentrada"
+
+#: e2fsck/message.c:125
+msgid "E@e '%Dn' in %p (%i)"
+msgstr "Eentrada '%Dn' em %p (%i)"
+
+#: e2fsck/message.c:126
+msgid "ffilesystem"
+msgstr "fsistema de ficheiros"
+
+#: e2fsck/message.c:127
+msgid "Ffor @i %i (%Q) is"
+msgstr "Fpara inode %i (%Q) é"
+
+#: e2fsck/message.c:128
+msgid "ggroup"
+msgstr "ggrupo"
+
+#: e2fsck/message.c:129
+msgid "hHTREE @d @i"
+msgstr "hpasta HTREE inode"
+
+#: e2fsck/message.c:130
+msgid "iinode"
+msgstr "iinode"
+
+#: e2fsck/message.c:131
+msgid "Iillegal"
+msgstr "Iilegal"
+
+#: e2fsck/message.c:132
+msgid "jjournal"
+msgstr "jdiário"
+
+#: e2fsck/message.c:133
+msgid "llost+found"
+msgstr "lperdido+achado"
+
+#: e2fsck/message.c:134
+msgid "Lis a link"
+msgstr "Lé ligação"
+
+#: e2fsck/message.c:135
+msgid "mmultiply-claimed"
+msgstr "mmultiplicar-reclamado"
+
+#: e2fsck/message.c:136
+msgid "ninvalid"
+msgstr "ninválido"
+
+#: e2fsck/message.c:137
+msgid "oorphaned"
+msgstr "oorfanado"
+
+#: e2fsck/message.c:138
+msgid "pproblem in"
+msgstr "pproblema em"
+
+#: e2fsck/message.c:139
+msgid "qquota"
+msgstr "qquota"
+
+#: e2fsck/message.c:140
+msgid "rroot @i"
+msgstr "rinode root"
+
+#: e2fsck/message.c:141
+msgid "sshould be"
+msgstr "sdevia ser"
+
+#: e2fsck/message.c:142
+msgid "Ssuper@b"
+msgstr "Ssuper-bloco"
+
+#: e2fsck/message.c:143
+msgid "uunattached"
+msgstr "udesanexado"
+
+#: e2fsck/message.c:144
+msgid "vdevice"
+msgstr "vdispositivo"
+
+#: e2fsck/message.c:145
+msgid "xextent"
+msgstr "xestender"
+
+#: e2fsck/message.c:146
+msgid "zzero-length"
+msgstr "ztamanho-zero"
+
+#: e2fsck/message.c:157
+msgid "<The NULL inode>"
+msgstr "<o inode NULL>"
+
+#: e2fsck/message.c:158
+msgid "<The bad blocks inode>"
+msgstr "<o inode de maus blocos>"
+
+#: e2fsck/message.c:160
+msgid "<The user quota inode>"
+msgstr "<o inode de quota do utilizador>"
+
+#: e2fsck/message.c:161
+msgid "<The group quota inode>"
+msgstr "<o inode de quota do grupo>"
+
+#: e2fsck/message.c:162
+msgid "<The boot loader inode>"
+msgstr "<o inode do boot loader>"
+
+#: e2fsck/message.c:163
+msgid "<The undelete directory inode>"
+msgstr "<o inode da pasta de recuperação>"
+
+#: e2fsck/message.c:164
+msgid "<The group descriptor inode>"
+msgstr "<o inode de descritor de grupo>"
+
+#: e2fsck/message.c:165
+msgid "<The journal inode>"
+msgstr "<o inode de diário>"
+
+#: e2fsck/message.c:166
+msgid "<Reserved inode 9>"
+msgstr "<inode 9 reservado>"
+
+#: e2fsck/message.c:167
+msgid "<Reserved inode 10>"
+msgstr "<inode 10 reservado>"
+
+#: e2fsck/message.c:327
+msgid "regular file"
+msgstr "ficheiro normal"
+
+#: e2fsck/message.c:329
+msgid "directory"
+msgstr "pasta"
+
+#: e2fsck/message.c:331
+msgid "character device"
+msgstr "dispositivo de carácter"
+
+#: e2fsck/message.c:333
+msgid "block device"
+msgstr "dispositivo de bloco"
+
+#: e2fsck/message.c:335
+msgid "named pipe"
+msgstr "túnel nomeado"
+
+#: e2fsck/message.c:337
+msgid "symbolic link"
+msgstr "ligação simbólica"
+
+#: e2fsck/message.c:339 misc/uuidd.c:162
+msgid "socket"
+msgstr "socket"
+
+#: e2fsck/message.c:341
+#, c-format
+msgid "unknown file type with mode 0%o"
+msgstr "tipo de ficheiro desconhecido com modo 0%o"
+
+#: e2fsck/message.c:412
+msgid "indirect block"
+msgstr "bloco indirecto"
+
+#: e2fsck/message.c:414
+msgid "double indirect block"
+msgstr "duplo bloco indirecto"
+
+#: e2fsck/message.c:416
+msgid "triple indirect block"
+msgstr "triplo bloco indirecto"
+
+#: e2fsck/message.c:418
+msgid "translator block"
+msgstr "bloco de tradutor"
+
+#: e2fsck/message.c:420
+msgid "block #"
+msgstr "bloco nº"
+
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "utilizador"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "grupo"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr "projecto"
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "tipo de quota desconhecido"
+
+#: e2fsck/pass1b.c:222
+msgid "multiply claimed inode map"
+msgstr "multiplicar mapa de inode reclamado"
+
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
+#, c-format
+msgid "internal error: can't find dup_blk for %llu\n"
+msgstr "erro interno: impossível encontrar dup_blk para %llu\n"
+
+#: e2fsck/pass1b.c:952
+msgid "returned from clone_file_block"
+msgstr "devolvido de clone_file_block"
+
+#: e2fsck/pass1b.c:976
+#, c-format
+msgid "internal error: couldn't lookup EA block record for %llu"
+msgstr "erro interno: impossível procurar registo de bloco EA para %llu"
+
+#: e2fsck/pass1b.c:988
+#, c-format
+msgid "internal error: couldn't lookup EA inode record for %u"
+msgstr "erro interno: impossível procurar registo de inode EA para %u"
+
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr "ao criar hash da entrada com e_value_inum = %u"
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
+msgid "reading directory block"
+msgstr "a ler bloco de pasta"
+
+#: e2fsck/pass1.c:1224
+msgid "in-use inode map"
+msgstr "mapa de inode em-uso"
+
+#: e2fsck/pass1.c:1235
+msgid "directory inode map"
+msgstr "mapa de inode de pasta"
+
+#: e2fsck/pass1.c:1245
+msgid "regular file inode map"
+msgstr "mapa de inode de ficheiro normal"
+
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
+msgid "in-use block map"
+msgstr "mapa de bloco em-uso"
+
+#: e2fsck/pass1.c:1263
+msgid "metadata block map"
+msgstr "mapa de bloco de meta-dados"
+
+#: e2fsck/pass1.c:1325
+msgid "opening inode scan"
+msgstr "a abrir análise de inode"
+
+#: e2fsck/pass1.c:1363
+msgid "getting next inode from scan"
+msgstr "a obter inode seguinte da análise"
+
+#: e2fsck/pass1.c:2067
+msgid "Pass 1"
+msgstr "Passagem 1"
+
+#: e2fsck/pass1.c:2128
+#, c-format
+msgid "reading indirect blocks of inode %u"
+msgstr "a ler blocos indirectos de inode %u"
+
+#: e2fsck/pass1.c:2179
+msgid "bad inode map"
+msgstr "mau mapa de inode"
+
+#: e2fsck/pass1.c:2219
+msgid "inode in bad block map"
+msgstr "inode em mau mapa de bloco"
+
+#: e2fsck/pass1.c:2239
+msgid "imagic inode map"
+msgstr "mapa de inode imagic"
+
+#: e2fsck/pass1.c:2270
+msgid "multiply claimed block map"
+msgstr "multiplicar mapa de bloco reclamado"
+
+#: e2fsck/pass1.c:2395
+msgid "ext attr block map"
+msgstr "mapa de bloco de atributo estendido"
+
+#: e2fsck/pass1.c:3640
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr "%6lu(%c): esperado %6lu, obtido phys %6lu (blkcnt %lld)\n"
+
+#: e2fsck/pass1.c:4060
+msgid "block bitmap"
+msgstr "bitmap de bloco"
+
+#: e2fsck/pass1.c:4066
+msgid "inode bitmap"
+msgstr "bitmap de inode"
+
+#: e2fsck/pass1.c:4072
+msgid "inode table"
+msgstr "tabela de inode"
+
+#: e2fsck/pass2.c:307
+msgid "Pass 2"
+msgstr "Passagem 2"
+
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
+msgid "Can not continue."
+msgstr "Impossível continuar."
+
+#: e2fsck/pass3.c:77
+msgid "inode done bitmap"
+msgstr "bitmap de inode feito"
+
+#: e2fsck/pass3.c:86
+msgid "Peak memory"
+msgstr "Memória pico"
+
+#: e2fsck/pass3.c:149
+msgid "Pass 3"
+msgstr "Passagem 3"
+
+#: e2fsck/pass3.c:344
+msgid "inode loop detection bitmap"
+msgstr "bitmap de detecção de ciclos de inode"
+
+#: e2fsck/pass4.c:277
+msgid "Pass 4"
+msgstr "Passagem 4"
+
+#: e2fsck/pass5.c:79
+msgid "Pass 5"
+msgstr "Passagem 5"
+
+#: e2fsck/pass5.c:102
+msgid "check_inode_bitmap_checksum: Memory allocation error"
+msgstr "check_inode_bitmap_checksum: erro de alocação de memória"
+
+#: e2fsck/pass5.c:156
+msgid "check_block_bitmap_checksum: Memory allocation error"
+msgstr "check_block_bitmap_checksum: erro de alocação de memória"
+
+#: e2fsck/problem.c:52
+msgid "(no prompt)"
+msgstr "(sem prompt)"
+
+#: e2fsck/problem.c:53
+msgid "Fix"
+msgstr "Reparar"
+
+#: e2fsck/problem.c:54
+msgid "Clear"
+msgstr "Limpar"
+
+#: e2fsck/problem.c:55
+msgid "Relocate"
+msgstr "Relocalizar"
+
+#: e2fsck/problem.c:56
+msgid "Allocate"
+msgstr "Alocar"
+
+#: e2fsck/problem.c:57
+msgid "Expand"
+msgstr "Expandir"
+
+#: e2fsck/problem.c:58
+msgid "Connect to /lost+found"
+msgstr "Ligar a/perdido+achado"
+
+#: e2fsck/problem.c:59
+msgid "Create"
+msgstr "Criar"
+
+#: e2fsck/problem.c:60
+msgid "Salvage"
+msgstr "Salvar"
+
+#: e2fsck/problem.c:61
+msgid "Truncate"
+msgstr "Truncar"
+
+#: e2fsck/problem.c:62
+msgid "Clear inode"
+msgstr "Limpar inode"
+
+#: e2fsck/problem.c:63
+msgid "Abort"
+msgstr "Abortar"
+
+#: e2fsck/problem.c:64
+msgid "Split"
+msgstr "Dividir"
+
+#: e2fsck/problem.c:65
+msgid "Continue"
+msgstr "Continuar"
+
+#: e2fsck/problem.c:66
+msgid "Clone multiply-claimed blocks"
+msgstr "Clonar blocos multiplicar-reclamado"
+
+#: e2fsck/problem.c:67
+msgid "Delete file"
+msgstr "Eliminar ficheiro"
+
+#: e2fsck/problem.c:68
+msgid "Suppress messages"
+msgstr "Suprimir mensagens"
+
+#: e2fsck/problem.c:69
+msgid "Unlink"
+msgstr "Desligar"
+
+#: e2fsck/problem.c:70
+msgid "Clear HTree index"
+msgstr "Limpar índice HTree"
+
+#: e2fsck/problem.c:71
+msgid "Recreate"
+msgstr "Recriar"
+
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr "Optimizar"
+
+#: e2fsck/problem.c:81
+msgid "(NONE)"
+msgstr "(NADA)"
+
+#: e2fsck/problem.c:82
+msgid "FIXED"
+msgstr "REPARADO"
+
+#: e2fsck/problem.c:83
+msgid "CLEARED"
+msgstr "LIMPO"
+
+#: e2fsck/problem.c:84
+msgid "RELOCATED"
+msgstr "RELOCALIZADO"
+
+#: e2fsck/problem.c:85
+msgid "ALLOCATED"
+msgstr "ALOCADO"
+
+#: e2fsck/problem.c:86
+msgid "EXPANDED"
+msgstr "EXPANDIDO"
+
+#: e2fsck/problem.c:87
+msgid "RECONNECTED"
+msgstr "RELIGADO"
+
+#: e2fsck/problem.c:88
+msgid "CREATED"
+msgstr "CRIADO"
+
+#: e2fsck/problem.c:89
+msgid "SALVAGED"
+msgstr "SALVO"
+
+#: e2fsck/problem.c:90
+msgid "TRUNCATED"
+msgstr "TRUNCADO"
+
+#: e2fsck/problem.c:91
+msgid "INODE CLEARED"
+msgstr "INODE LIMPO"
+
+#: e2fsck/problem.c:92
+msgid "ABORTED"
+msgstr "ABORTADO"
+
+#: e2fsck/problem.c:93
+msgid "SPLIT"
+msgstr "DIVIDIDO"
+
+#: e2fsck/problem.c:94
+msgid "CONTINUING"
+msgstr "A CONTINUAR"
+
+#: e2fsck/problem.c:95
+msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
+msgstr "BLOCOS MULTIPLICAR-RECLAMADO CLONADOS"
+
+#: e2fsck/problem.c:96
+msgid "FILE DELETED"
+msgstr "FICHEIRO ELIMINADO"
+
+#: e2fsck/problem.c:97
+msgid "SUPPRESSED"
+msgstr "SUPRIMIDAS"
+
+#: e2fsck/problem.c:98
+msgid "UNLINKED"
+msgstr "DESLIGADO"
+
+#: e2fsck/problem.c:99
+msgid "HTREE INDEX CLEARED"
+msgstr "ÍNDICE HTREE LIMPO"
+
+#: e2fsck/problem.c:100
+msgid "WILL RECREATE"
+msgstr "SERÁ RECRIADO"
+
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr "SERÁ OPTIMIZADO"
+
+#. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
+#: e2fsck/problem.c:115
+msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
+msgstr "bitmap do bloco para o grupo %g não está no grupo. (bloco %b)\n"
+
+#. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
+#: e2fsck/problem.c:119
+msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
+msgstr "Bitmap de inode para grupo %g não está em grupo. (bloco %b)\n"
+
+#. @-expanded: inode table for group %g is not in group.  (block %b)\n
+#. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
+#: e2fsck/problem.c:124
+msgid ""
+"@i table for @g %g is not in @g.  (@b %b)\n"
+"WARNING: SEVERE DATA LOSS POSSIBLE.\n"
+msgstr ""
+"tabela inode para grupo %g não está em grupo. (bloco %b)\n"
+"AVISO: POSSÍVEL PERDA SEVERA DE DADOS.\n"
+
+#. @-expanded: \n
+#. @-expanded: The superblock could not be read or does not describe a valid ext2/ext3/ext4\n
+#. @-expanded: filesystem.  If the device is valid and it really contains an ext2/ext3/ext4\n
+#. @-expanded: filesystem (and not swap or ufs or something else), then the superblock\n
+#. @-expanded: is corrupt, and you might try running e2fsck with an alternate superblock:\n
+#. @-expanded:     e2fsck -b 8193 <device>\n
+#. @-expanded:  or\n
+#. @-expanded:     e2fsck -b 32768 <device>\n
+#. @-expanded: \n
+#: e2fsck/problem.c:130
+msgid ""
+"\n"
+"The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
+"@f.  If the @v is valid and it really contains an ext2/ext3/ext4\n"
+"@f (and not swap or ufs or something else), then the @S\n"
+"is corrupt, and you might try running e2fsck with an alternate @S:\n"
+"    e2fsck -b 8193 <@v>\n"
+" or\n"
+"    e2fsck -b 32768 <@v>\n"
+"\n"
+msgstr ""
+"\n"
+"O super-bloco não pôde ser lido ou não descreve um sistema ext2/ext3/ext4\n"
+"válido. Se o dispositivo é válido e realmente contém um sistema ext2/ext3/ext4\n"
+"(e não swap, ufs ou outra coisa), então o super-bloco está corrompido e\n"
+"pode tentar executar e2fsck com um super-bloco alternativo:\n"
+"  e2fsck -b 8193 <dispositivo>\n"
+" ou\n"
+"  e2fsck -b 32768 <dispositivo>\n"
+"\n"
+
+#. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
+#. @-expanded: The physical size of the device is %c blocks\n
+#. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
+#: e2fsck/problem.c:141
+msgid ""
+"The @f size (according to the @S) is %b @bs\n"
+"The physical size of the @v is %c @bs\n"
+"Either the @S or the partition table is likely to be corrupt!\n"
+msgstr ""
+"O tamanho de sistema de ficheiros (de acordo com o super-bloco)\n"
+"é %b blocos. O tamanho físico do dispositivo é %c blocos.\n"
+"Ou o super-bloco ou a tabela de partições estão corrompidos!\n"
+
+#. @-expanded: superblock block_size = %b, fragsize = %c.\n
+#. @-expanded: This version of e2fsck does not support fragment sizes different\n
+#. @-expanded: from the block size.\n
+#: e2fsck/problem.c:148
+msgid ""
+"@S @b_size = %b, fragsize = %c.\n"
+"This version of e2fsck does not support fragment sizes different\n"
+"from the @b size.\n"
+msgstr ""
+"super-bloco block_size = %b, fragsize = %c.\n"
+"Esta versão do e2fsck não suporta tamanhos de fragmento diferentes\n"
+"do tamanho de bloco.\n"
+
+#. @-expanded: superblock blocks_per_group = %b, should have been %c\n
+#: e2fsck/problem.c:155
+msgid "@S @bs_per_group = %b, should have been %c\n"
+msgstr "super-bloco blocks_per_group = %b, devia ter sido %c\n"
+
+#. @-expanded: superblock first_data_block = %b, should have been %c\n
+#: e2fsck/problem.c:160
+msgid "@S first_data_@b = %b, should have been %c\n"
+msgstr "super-bloco first_data_block = %b, devia ter sido %c\n"
+
+#. @-expanded: filesystem did not have a UUID; generating one.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:165
+msgid ""
+"@f did not have a UUID; generating one.\n"
+"\n"
+msgstr ""
+"sistema de ficheiros não tinha UUID; a gerar uma.\n"
+"\n"
+
+#: e2fsck/problem.c:171
+#, no-c-format
+msgid ""
+"Note: if several inode or block bitmap blocks or part\n"
+"of the inode table require relocation, you may wish to try\n"
+"running e2fsck with the '-b %S' option first.  The problem\n"
+"may lie only with the primary block group descriptors, and\n"
+"the backup block group descriptors may be OK.\n"
+"\n"
+msgstr ""
+"Nota: se vários blocos de inode ou bimap de bloco ou parte\n"
+"da tabela de inode requerem relocalização, poderá querer\n"
+"executar e2fsck com '-b %S' primeiro. O problema\n"
+"pode ser só com os descritores primários de grupos de blocos e\n"
+"os descritores de segurança dos grupos de blocos podem estar bons.\n"
+"\n"
+
+#. @-expanded: Corruption found in superblock.  (%s = %N).\n
+#: e2fsck/problem.c:180
+msgid "Corruption found in @S.  (%s = %N).\n"
+msgstr "Encontrada corrupção em super-bloco (%s = %N).\n"
+
+#. @-expanded: Error determining size of the physical device: %m\n
+#: e2fsck/problem.c:186
+#, no-c-format
+msgid "Error determining size of the physical @v: %m\n"
+msgstr "Erro ao determinar o tamanho do dispositivo físico: %m\n"
+
+#. @-expanded: inode count in superblock is %i, should be %j.\n
+#: e2fsck/problem.c:191
+msgid "@i count in @S is %i, @s %j.\n"
+msgstr "total de inode no super-bloco é %i, devia ser %j.\n"
+
+#: e2fsck/problem.c:195
+msgid "The Hurd does not support the filetype feature.\n"
+msgstr "The Hurd não suporta a funcionalidade de tipo de ficheiro.\n"
+
+#. @-expanded: superblock has an invalid journal (inode %i).\n
+#: e2fsck/problem.c:201
+#, no-c-format
+msgid "@S has an @n @j (@i %i).\n"
+msgstr "super-bloco tem um diário inválido (inode %i).\n"
+
+#. @-expanded: External journal has multiple filesystem users (unsupported).\n
+#: e2fsck/problem.c:206
+msgid "External @j has multiple @f users (unsupported).\n"
+msgstr "Diário externo tem múltiplos utilizadores de sistema de ficheiros (não suportado).\n"
+
+#. @-expanded: Can't find external journal\n
+#: e2fsck/problem.c:211
+msgid "Can't find external @j\n"
+msgstr "Impossível encontrar diário externo\n"
+
+#. @-expanded: External journal has bad superblock\n
+#: e2fsck/problem.c:216
+msgid "External @j has bad @S\n"
+msgstr "Diário externo tem um mau super-bloco\n"
+
+#. @-expanded: External journal does not support this filesystem\n
+#: e2fsck/problem.c:221
+msgid "External @j does not support this @f\n"
+msgstr "Diário externo não suporta este sistema de ficheiros\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 
+#. @-expanded: format.\n
+#. @-expanded: It is also possible the journal superblock is corrupt.\n
+#: e2fsck/problem.c:226
+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 also possible the @j @S is corrupt.\n"
+msgstr ""
+"Super-bloco de diário de sistema de ficheiros de tipo %N desconhecido (não suportado).\n"
+"É possível que a sua cópia do e2fsck seja antiga e/ou não suporte este formato de diário.\n"
+"Também é possível que o super-bloco de diário esteja corrompido.\n"
+
+#. @-expanded: journal superblock is corrupt.\n
+#: e2fsck/problem.c:235
+msgid "@j @S is corrupt.\n"
+msgstr "Super-bloco de diário corrompido.\n"
+
+#. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
+#: e2fsck/problem.c:240
+msgid "@S has_@j flag is clear, but a @j is present.\n"
+msgstr "Bandeira has_journal de super-bloco limpa, mas está presente um diário.\n"
+
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
+#: e2fsck/problem.c:245
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
+msgstr "Bandeira needs_recovery de super-bloco definida, mas não há um diário presente.\n"
+
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
+#: e2fsck/problem.c:250
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
+msgstr "Bandeira needs_recovery de super-bloco limpa, mas o diário tem dados.\n"
+
+#. @-expanded: Clear journal
+#: e2fsck/problem.c:255
+msgid "Clear @j"
+msgstr "Diário limpo"
+
+#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
+msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
+msgstr "Sistema de ficheiros tem bandeiras de funcionalidade definidas, mas é um sistema de ficheiros revisão 0. "
+
+#. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
+#: e2fsck/problem.c:265
+msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
+msgstr "inode orfanado %s %i (uid=%Iu, gid=%Ig, modo=%Im, tamanho=%Is)\n"
+
+#. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
+#: e2fsck/problem.c:270
+msgid "@I %B (%b) found in @o @i %i.\n"
+msgstr "%B (%b) ilegal encontrado em inode orfanado %i.\n"
+
+#. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
+#: e2fsck/problem.c:275
+msgid "Already cleared %B (%b) found in @o @i %i.\n"
+msgstr "%B (%b) já limpo encontrado em inode orfanado %i.\n"
+
+#. @-expanded: illegal orphaned inode %i in superblock.\n
+#: e2fsck/problem.c:281
+#, no-c-format
+msgid "@I @o @i %i in @S.\n"
+msgstr "inode orfanado %i ilegal em super-bloco.\n"
+
+#. @-expanded: illegal inode %i in orphaned inode list.\n
+#: e2fsck/problem.c:287
+#, no-c-format
+msgid "@I @i %i in @o @i list.\n"
+msgstr "inode %i ilegal na lista de inode orfanados.\n"
+
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
+#: e2fsck/problem.c:292
+msgid "@j @S has an unknown read-only feature flag set.\n"
+msgstr "Super-bloco de diário tem uma bandeira só-de-leitura desconhecida definida.\n"
+
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
+#: e2fsck/problem.c:297
+msgid "@j @S has an unknown incompatible feature flag set.\n"
+msgstr "Super-bloco de diário tem uma bandeira de incompatibilidade desconhecida definida.\n"
+
+#. @-expanded: journal version not supported by this e2fsck.\n
+#: e2fsck/problem.c:302
+msgid "@j version not supported by this e2fsck.\n"
+msgstr "Versão de diário não suportada por este e2fsck.\n"
+
+#. @-expanded: Moving journal from /%s to hidden inode.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:308
+#, no-c-format
+msgid ""
+"Moving @j from /%s to hidden @i.\n"
+"\n"
+msgstr ""
+"A mover diário de /%s para inode oculto.\n"
+"\n"
+
+#. @-expanded: Error moving journal: %m\n
+#. @-expanded: \n
+#: e2fsck/problem.c:314
+#, no-c-format
+msgid ""
+"Error moving @j: %m\n"
+"\n"
+msgstr ""
+"Erro ao mover diário: %m\n"
+"\n"
+
+#. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
+#. @-expanded: Clearing fields beyond the V1 journal superblock...\n
+#. @-expanded: \n
+#: e2fsck/problem.c:319
+msgid ""
+"Found @n V2 @j @S fields (from V1 @j).\n"
+"Clearing fields beyond the V1 @j @S...\n"
+"\n"
+msgstr ""
+"Encontrados campos de super-bloco V2 inválidos (de diário V1).\n"
+"A limpar campos além do super-bloco de diário V1...\n"
+"\n"
+
+#. @-expanded: Run journal anyway
+#: e2fsck/problem.c:325
+msgid "Run @j anyway"
+msgstr "Executar diário mesmo assim"
+
+#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
+#: e2fsck/problem.c:330
+msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
+msgstr "Bandeira de recuperação não definida na segurança de super-bloco, a executar diário mesmo assim.\n"
+
+#. @-expanded: Backing up journal inode block information.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:335
+msgid ""
+"Backing up @j @i @b information.\n"
+"\n"
+msgstr ""
+"A fazer segurança de diário da informação de bloco de inode.\n"
+"\n"
+
+#. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
+#. @-expanded: is %N; should be zero.  
+#: e2fsck/problem.c:341
+msgid ""
+"@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
+"is %N; @s zero.  "
+msgstr ""
+"sistema de ficheiros não tem resize_inode activo, mas s_reserved_gdt_blocks\n"
+"é %N; devia ser zero. "
+
+#. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
+#: e2fsck/problem.c:347
+msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
+msgstr "Resize_inode não activo, mas resize inode é não-zero. "
+
+#. @-expanded: Resize inode not valid.  
+#: e2fsck/problem.c:352
+msgid "Resize @i not valid.  "
+msgstr "Resize inode inválido. "
+
+#. @-expanded: superblock last mount time (%t,\n
+#. @-expanded: \tnow = %T) is in the future.\n
+#: e2fsck/problem.c:357
+msgid ""
+"@S last mount time (%t,\n"
+"\tnow = %T) is in the future.\n"
+msgstr ""
+"última hora de montagem do super-bloco (%t\n"
+"\t, agora = %T) está no futuro.\n"
+
+#. @-expanded: superblock last write time (%t,\n
+#. @-expanded: \tnow = %T) is in the future.\n
+#: e2fsck/problem.c:362
+msgid ""
+"@S last write time (%t,\n"
+"\tnow = %T) is in the future.\n"
+msgstr ""
+"última hora de escrita super-bloco (%t,\n"
+"\tagora = %T) está no futuro.\n"
+
+#. @-expanded: superblock hint for external superblock should be %X.  
+#: e2fsck/problem.c:368
+#, no-c-format
+msgid "@S hint for external superblock @s %X.  "
+msgstr "Dica de super-bloco para super-bloco externo devia ser %X. "
+
+#. @-expanded: Adding dirhash hint to filesystem.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:373
+msgid ""
+"Adding dirhash hint to @f.\n"
+"\n"
+msgstr ""
+"A adicionar dica dirhash a sistema de ficheiros.\n"
+"\n"
+
+#. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
+#: e2fsck/problem.c:378
+msgid "@g descriptor %g checksum is %04x, should be %04y.  "
+msgstr "checksum de descritor de grupo %g é %04x, deveria ser %04y. "
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:384
+#, no-c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr "descritor de grupo %g marcado como inicializado sem conjunto de funcionalidades.\n"
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:389
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr "Descritor de grupo %g tem um total %b de inodes não utilizados. "
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:394
+msgid "Last @g @b @B uninitialized.  "
+msgstr "Último bitmap de grupo de blocos não inicializados. "
+
+#: e2fsck/problem.c:400
+#, no-c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr "Transacção de diário %i estava corrompida, reprodução abortada.\n"
+
+#: e2fsck/problem.c:405
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr "A bandeira test_fs está definida (e ext4 está disponível). "
+
+#. @-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 
+#. @-expanded: set)\n
+#: e2fsck/problem.c:410
+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)\n"
+msgstr ""
+"última hora de montagem de super-bloco é no futuro.\n"
+"\t(por menos de um dia, provavelmente devido ao relógio do equipamento não estar certo)\n"
+
+#. @-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 
+#. @-expanded: set)\n
+#: e2fsck/problem.c:416
+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)\n"
+msgstr ""
+"última hora de escrita de super-bloco é no futuro.\n"
+"\t(por menos de um dia, provavelmente devido ao relógio do equipamento não estar certo)\n"
+
+#. @-expanded: One or more block group descriptor checksums are invalid.  
+#: e2fsck/problem.c:422
+msgid "One or more @b @g descriptor checksums are invalid.  "
+msgstr "Uma ou mais checksums de descritores de grupo de blocos são inválidas. "
+
+#. @-expanded: Setting free inodes count to %j (was %i)\n
+#: e2fsck/problem.c:427
+msgid "Setting free @is count to %j (was %i)\n"
+msgstr "A definir total de inodes livres para %j (era %i)\n"
+
+#. @-expanded: Setting free blocks count to %c (was %b)\n
+#: e2fsck/problem.c:432
+msgid "Setting free @bs count to %c (was %b)\n"
+msgstr "A definir total de blocos livres para %c (era %b)\n"
+
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "A ocultar quota %U de inode %i (%Q).\n"
+
+#. @-expanded: superblock has invalid MMP block.  
+#: e2fsck/problem.c:442
+msgid "@S has invalid MMP block.  "
+msgstr "Super-bloco tem um bloco MMP inválido. "
+
+#. @-expanded: superblock has invalid MMP magic.  
+#: e2fsck/problem.c:447
+msgid "@S has invalid MMP magic.  "
+msgstr "Super-bloco tem magia MMP inválida. "
+
+#: e2fsck/problem.c:453
+#, no-c-format
+msgid "ext2fs_open2: %m\n"
+msgstr "ext2fs_open2: %m\n"
+
+#: e2fsck/problem.c:459
+#, no-c-format
+msgid "ext2fs_check_desc: %m\n"
+msgstr "ext2fs_check_desc: %m\n"
+
+#. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
+#. @-expanded: simultaneously.
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "metadata_csum suplanta uninit_bg; impossível definir ambos os bits em simultâneo."
+
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+msgid "@S MMP @b checksum does not match.  "
+msgstr "chcecksum de super-bloco MMP bloco não coincide. "
+
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
+msgstr "Sistema de ficheiros de super-bloco 64bit precisa de extents para aceder a todo o disco. "
+
+#: e2fsck/problem.c:481
+msgid "First_meta_bg is too big.  (%N, max value %g).  "
+msgstr "First_meta_bg é muito grande. (%N, valor máximo %g). "
+
+#. @-expanded: External journal superblock checksum does not match superblock.  
+#: e2fsck/problem.c:486
+msgid "External @j @S checksum does not match @S.  "
+msgstr "Checksum de super-bloco de diário externo não coincide com super-bloco. "
+
+#. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
+#: e2fsck/problem.c:491
+msgid "@S metadata_csum_seed is not necessary without metadata_csum."
+msgstr "metadata_csum_seed não é necessário sem metadata_csum."
+
+#: e2fsck/problem.c:497
+#, no-c-format
+msgid "Error initializing quota context in support library: %m\n"
+msgstr "Erro ao inicializar contexto de quota em biblioteca de suporte: %m\n"
+
+#. @-expanded: Bad required extra isize in superblock (%N).  
+#: e2fsck/problem.c:502
+msgid "Bad required extra isize in @S (%N).  "
+msgstr "isize extra requerido incorrecto em super-bloco (%N). "
+
+#. @-expanded: Bad desired extra isize in superblock (%N).  
+#: e2fsck/problem.c:507
+msgid "Bad desired extra isize in @S (%N).  "
+msgstr "isize extra desejado incorrecto em super-bloco (%N). "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "Quota %U de inode %i inválida. "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr "super-bloco teria demasiados inodes (%N).\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
+msgstr ""
+"As funcionalidades Resize_@i e meta_bg estão activas. Essas funcionalidades\n"
+"não são compatíveis. Deve desactivar Resize @i. "
+
+#. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
+#: e2fsck/problem.c:530
+msgid "Pass 1: Checking @is, @bs, and sizes\n"
+msgstr "Passo 1: a verificar inodes, blocos e tamanhos\n"
+
+#. @-expanded: root inode is not a directory.  
+#: e2fsck/problem.c:534
+msgid "@r is not a @d.  "
+msgstr "inode root não é pasta. "
+
+#. @-expanded: root inode has dtime set (probably due to old mke2fs).  
+#: e2fsck/problem.c:539
+msgid "@r has dtime set (probably due to old mke2fs).  "
+msgstr "inode root tem dtime definido (provavelmente devido a um mke2fs antigo). "
+
+#. @-expanded: Reserved inode %i (%Q) has invalid mode.  
+#: e2fsck/problem.c:544
+msgid "Reserved @i %i (%Q) has @n mode.  "
+msgstr "inode %i (%Q) reservado tem modo inválido. "
+
+#. @-expanded: deleted inode %i has zero dtime.  
+#: e2fsck/problem.c:550
+#, no-c-format
+msgid "@D @i %i has zero dtime.  "
+msgstr "inode %i eliminado tem dtime zero. "
+
+#. @-expanded: inode %i is in use, but has dtime set.  
+#: e2fsck/problem.c:556
+#, no-c-format
+msgid "@i %i is in use, but has dtime set.  "
+msgstr "inode %i está em uso, mas tem dtime definido. "
+
+#. @-expanded: inode %i is a zero-length directory.  
+#: e2fsck/problem.c:562
+#, no-c-format
+msgid "@i %i is a @z @d.  "
+msgstr "inode %i é pasta de tamanho zero. "
+
+#. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:567
+msgid "@g %g's @b @B at %b @C.\n"
+msgstr "Bitmap de bloco de grupo %g em %b em conflito com outro bloco do sistema de ficheiros.\n"
+
+#. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:572
+msgid "@g %g's @i @B at %b @C.\n"
+msgstr "Bitmap de inode de grupo %g em %b em conflito com outro bloco do sistema de ficheiros.\n"
+
+#. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:577
+msgid "@g %g's @i table at %b @C.\n"
+msgstr "tabela inode de grupo %g em %b em conflito com outro bloco do sistema de ficheiros.\n"
+
+#. @-expanded: group %g's block bitmap (%b) is bad.  
+#: e2fsck/problem.c:582
+msgid "@g %g's @b @B (%b) is bad.  "
+msgstr "Bitmap de bloco de grupo %g (%b) está mau. "
+
+#. @-expanded: group %g's inode bitmap (%b) is bad.  
+#: e2fsck/problem.c:587
+msgid "@g %g's @i @B (%b) is bad.  "
+msgstr "Bitmap de inode de grupo %g (%b) está mau. "
+
+#. @-expanded: inode %i, i_size is %Is, should be %N.  
+#: e2fsck/problem.c:592
+msgid "@i %i, i_size is %Is, @s %N.  "
+msgstr "inode %i, i_size é %Is, devia ser %N. "
+
+#. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
+#: e2fsck/problem.c:597
+msgid "@i %i, i_@bs is %Ib, @s %N.  "
+msgstr "inode %i, i_blocks é %Ib, devia ser %N. "
+
+#. @-expanded: illegal %B (%b) in inode %i.  
+#: e2fsck/problem.c:602
+msgid "@I %B (%b) in @i %i.  "
+msgstr "ilegal %B (%b) em inode %i. "
+
+#. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
+#: e2fsck/problem.c:607
+msgid "%B (%b) overlaps @f metadata in @i %i.  "
+msgstr "%B (%b) sobrepõe-se aos meta-dados do sistema de ficheiros em inode %i. "
+
+#. @-expanded: inode %i has illegal block(s).  
+#: e2fsck/problem.c:613
+#, no-c-format
+msgid "@i %i has illegal @b(s).  "
+msgstr "inode %i tem blocos ilegais. "
+
+#. @-expanded: Too many illegal blocks in inode %i.\n
+#: e2fsck/problem.c:619
+#, no-c-format
+msgid "Too many illegal @bs in @i %i.\n"
+msgstr "Demasiados blocos ilegais em inode %i.\n"
+
+#. @-expanded: illegal %B (%b) in bad block inode.  
+#: e2fsck/problem.c:624
+msgid "@I %B (%b) in bad @b @i.  "
+msgstr "%B (%b) ilegal em mau inode de bloco. "
+
+#. @-expanded: Bad block inode has illegal block(s).  
+#: e2fsck/problem.c:629
+msgid "Bad @b @i has illegal @b(s).  "
+msgstr "Mau inode de bloco tem blocos ilegais. "
+
+#. @-expanded: Duplicate or bad block in use!\n
+#: e2fsck/problem.c:634
+msgid "Duplicate or bad @b in use!\n"
+msgstr "Bloco duplicado ou mau em uso!\n"
+
+#. @-expanded: Bad block %b used as bad block inode indirect block.  
+#: e2fsck/problem.c:639
+msgid "Bad @b %b used as bad @b @i indirect @b.  "
+msgstr "Mau bloco %b usado como mau bloco indirecto de inode de bloco. "
+
+#. @-expanded: \n
+#. @-expanded: The bad block inode has probably been corrupted.  You probably\n
+#. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
+#. @-expanded: in the filesystem.\n
+#: e2fsck/problem.c:644
+msgid ""
+"\n"
+"The bad @b @i has probably been corrupted.  You probably\n"
+"should stop now and run e2fsck -c to scan for bad blocks\n"
+"in the @f.\n"
+msgstr ""
+"\n"
+"O mau inode de bloco foi provavelmente corrompido. Deverá\n"
+"parar agora e executar e2fsck -c para procurar maus blocos\n"
+"no sistema de ficheiros.\n"
+
+#. @-expanded: \n
+#. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
+#: e2fsck/problem.c:651
+msgid ""
+"\n"
+"If the @b is really bad, the @f can not be fixed.\n"
+msgstr ""
+"\n"
+"Se o bloco está realmente mau, o sistema de ficheiros não pode ser reparado.\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
+#. @-expanded: \n
+#: e2fsck/problem.c:656
+msgid ""
+"You can remove this @b from the bad @b list and hope\n"
+"that the @b is really OK.  But there are no guarantees.\n"
+"\n"
+msgstr ""
+"Pode remover este bloco da lista de maus blocos e esperar\n"
+"que o bloco esteja realmente bom. Mas não há garantias.\n"
+"\n"
+
+#. @-expanded: The primary superblock (%b) is on the bad block list.\n
+#: e2fsck/problem.c:662
+msgid "The primary @S (%b) is on the bad @b list.\n"
+msgstr "O super-bloco (%b) primário está na lista de maus blocos.\n"
+
+#. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
+#: e2fsck/problem.c:667
+msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
+msgstr "O bloco %b nos descritores primários do grupo está na lista de maus blocos\n"
+
+#. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
+#: e2fsck/problem.c:673
+msgid "Warning: Group %g's @S (%b) is bad.\n"
+msgstr "Aviso: o super-bloco (%b) do grupo %g está mau.\n"
+
+#. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
+#: e2fsck/problem.c:679
+msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
+msgstr "Aviso: a cópia dos descritores grupo do grupo %g tem um bloco (%b) mau.\n"
+
+#. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
+#: e2fsck/problem.c:685
+msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
+msgstr "Erro de programação? Bloco nº %b reclamado sem razão em process_bad_block.\n"
+
+#. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
+#: e2fsck/problem.c:691
+msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
+msgstr "Erro ao alocar %N bloco(s) contíguos no grupo de blocos %g para %s: %m\n"
+
+#. @-expanded: error allocating block buffer for relocating %s\n
+#: e2fsck/problem.c:697
+#, no-c-format
+msgid "@A @b buffer for relocating %s\n"
+msgstr "Erro ao alocar o buffer de bloco para relocalizar %s\n"
+
+#. @-expanded: Relocating group %g's %s from %b to %c...\n
+#: e2fsck/problem.c:702
+msgid "Relocating @g %g's %s from %b to %c...\n"
+msgstr "A relocalizar %s de grupo %g de %b para %c...\n"
+
+#. @-expanded: Relocating group %g's %s to %c...\n
+#: e2fsck/problem.c:708
+#, no-c-format
+msgid "Relocating @g %g's %s to %c...\n"
+msgstr "A relocalizar grupo %g - %s para %c...\n"
+
+#. @-expanded: Warning: could not read block %b of %s: %m\n
+#: e2fsck/problem.c:713
+msgid "Warning: could not read @b %b of %s: %m\n"
+msgstr "Aviso: impossível ler bloco %b de %s: %m\n"
+
+#. @-expanded: Warning: could not write block %b for %s: %m\n
+#: e2fsck/problem.c:718
+msgid "Warning: could not write @b %b for %s: %m\n"
+msgstr "Aviso: impossível escrever bloco %b em %s: %m\n"
+
+#. @-expanded: error allocating inode bitmap (%N): %m\n
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
+msgid "@A @i @B (%N): %m\n"
+msgstr "Erro ao alocar bitmap de inode (%N): %m\n"
+
+#. @-expanded: error allocating block bitmap (%N): %m\n
+#: e2fsck/problem.c:728
+msgid "@A @b @B (%N): %m\n"
+msgstr "Erro ao alocar bitmap de bloco (%N): %m\n"
+
+#. @-expanded: error allocating icount link information: %m\n
+#: e2fsck/problem.c:734
+#, no-c-format
+msgid "@A icount link information: %m\n"
+msgstr "Erro ao alocar informação de ligação icount: %m\n"
+
+#. @-expanded: error allocating directory block array: %m\n
+#: e2fsck/problem.c:740
+#, no-c-format
+msgid "@A @d @b array: %m\n"
+msgstr "Erro ao alocar pasta de matriz de bloco: %m\n"
+
+#. @-expanded: Error while scanning inodes (%i): %m\n
+#: e2fsck/problem.c:746
+#, no-c-format
+msgid "Error while scanning @is (%i): %m\n"
+msgstr "Erro ao analisar inodes (%i): %m\n"
+
+#. @-expanded: Error while iterating over blocks in inode %i: %m\n
+#: e2fsck/problem.c:752
+#, no-c-format
+msgid "Error while iterating over @bs in @i %i: %m\n"
+msgstr "Erro ao iterar sobre blocos em inode %i: %m\n"
+
+#. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
+#: e2fsck/problem.c:757
+msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
+msgstr "Erro ao armazenar informação de total de inodes (inode=%i, total=%N): %m\n"
+
+#. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
+#: e2fsck/problem.c:762
+msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
+msgstr "Erro ao armazenar informação de bloco de pasta (inode=%i, bloco=%b, núm=%N): %m\n"
+
+#. @-expanded: Error reading inode %i: %m\n
+#: e2fsck/problem.c:769
+#, no-c-format
+msgid "Error reading @i %i: %m\n"
+msgstr "Erro ao ler inode %i: %m\n"
+
+#. @-expanded: inode %i has imagic flag set.  
+#: e2fsck/problem.c:778
+#, no-c-format
+msgid "@i %i has imagic flag set.  "
+msgstr "inode %i tem bandeira imagic definida. "
+
+#. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
+#. @-expanded: or append-only flag set.  
+#: e2fsck/problem.c:784
+#, no-c-format
+msgid ""
+"Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
+"or append-only flag set.  "
+msgstr ""
+"Ficheiro especial (dispositivo/socket/fifo/symlink) (inode %i) tem bandeira\n"
+"immuttable ou append-only definidas. "
+
+#. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
+#: e2fsck/problem.c:791
+#, no-c-format
+msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
+msgstr "inode %i especial (dispositivo/socket/fifo) tem tamanho não-zero. "
+
+#. @-expanded: journal inode is not in use, but contains data.  
+#: e2fsck/problem.c:801
+msgid "@j @i is not in use, but contains data.  "
+msgstr "inode de diário não está em uso, mas contém dados. "
+
+#. @-expanded: journal is not regular file.  
+#: e2fsck/problem.c:806
+msgid "@j is not regular file.  "
+msgstr "o diário não é um ficheiro regular. "
+
+#. @-expanded: inode %i was part of the orphaned inode list.  
+#: e2fsck/problem.c:812
+#, no-c-format
+msgid "@i %i was part of the @o @i list.  "
+msgstr "inode %i fazia parte da lista de inodes orfanados. "
+
+#. @-expanded: inodes that were part of a corrupted orphan linked list found.  
+#: e2fsck/problem.c:818
+msgid "@is that were part of a corrupted orphan linked list found.  "
+msgstr "inodes que faziam parte de uma lista ligada orfanada corrompida. "
+
+#. @-expanded: error allocating refcount structure (%N): %m\n
+#: e2fsck/problem.c:823
+msgid "@A refcount structure (%N): %m\n"
+msgstr "Erro ao alocar estrutura refcount (%N): %m\n"
+
+#. @-expanded: Error reading extended attribute block %b for inode %i.  
+#: e2fsck/problem.c:828
+msgid "Error reading @a @b %b for @i %i.  "
+msgstr "Erro ao ler bloco %b de atributo estendido para inode %i. "
+
+#. @-expanded: inode %i has a bad extended attribute block %b.  
+#: e2fsck/problem.c:833
+msgid "@i %i has a bad @a @b %b.  "
+msgstr "inode %i tem um mau bloco %b de atributo estendido. "
+
+#. @-expanded: Error reading extended attribute block %b (%m).  
+#: e2fsck/problem.c:838
+msgid "Error reading @a @b %b (%m).  "
+msgstr "Erro ao ler bloco %b de atributo estendido (%m). "
+
+#. @-expanded: extended attribute block %b has reference count %r, should be %N.  
+#: e2fsck/problem.c:843
+msgid "@a @b %b has reference count %r, @s %N.  "
+msgstr "bloco %b de atributo estendido tem total de referência %r, devia ser %N. "
+
+#. @-expanded: Error writing extended attribute block %b (%m).  
+#: e2fsck/problem.c:848
+msgid "Error writing @a @b %b (%m).  "
+msgstr "Erro ao escrever bloco %b de atributo estendido (%m). "
+
+#. @-expanded: extended attribute block %b has h_blocks > 1.  
+#: e2fsck/problem.c:853
+msgid "@a @b %b has h_@bs > 1.  "
+msgstr "bloco %b de atributo estendido tem h_blocks > 1. "
+
+#. @-expanded: error allocating extended attribute region allocation structure.  
+#: e2fsck/problem.c:858
+msgid "@A @a region allocation structure.  "
+msgstr "Erro ao alocar estrutura de alocação de região de atributo estendido. "
+
+#. @-expanded: extended attribute block %b is corrupt (allocation collision).  
+#: e2fsck/problem.c:863
+msgid "@a @b %b is corrupt (allocation collision).  "
+msgstr "bloco %b de atributo estendido está corrompido (colisão de alocação). "
+
+#. @-expanded: extended attribute block %b is corrupt (invalid name).  
+#: e2fsck/problem.c:868
+msgid "@a @b %b is corrupt (@n name).  "
+msgstr "bloco %b de atributo estendido está corrompido (nome inválido). "
+
+#. @-expanded: extended attribute block %b is corrupt (invalid value).  
+#: e2fsck/problem.c:873
+msgid "@a @b %b is corrupt (@n value).  "
+msgstr "bloco %b de atributo estendido está corrompido (valor inválido). "
+
+#. @-expanded: inode %i is too big.  
+#: e2fsck/problem.c:879
+#, no-c-format
+msgid "@i %i is too big.  "
+msgstr "inode %i muito grande. "
+
+#. @-expanded: %B (%b) causes directory to be too big.  
+#: e2fsck/problem.c:883
+msgid "%B (%b) causes @d to be too big.  "
+msgstr "%B (%b) faz com que a pasta seja muito grande. "
+
+#: e2fsck/problem.c:888
+msgid "%B (%b) causes file to be too big.  "
+msgstr "%B (%b) faz com que o ficheiro seja muito grande. "
+
+#: e2fsck/problem.c:893
+msgid "%B (%b) causes symlink to be too big.  "
+msgstr "%B (%b) faz com que a symlink seja muito grande. "
+
+#. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
+#: e2fsck/problem.c:899
+#, no-c-format
+msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
+msgstr "inode %i tem bandeira INDEX_FL definida em sistema de ficheiros sem suporte a htree.\n"
+
+#. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
+#: e2fsck/problem.c:905
+#, no-c-format
+msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
+msgstr "inode %i tem bandeira INDEX_FL definida mas não é uma pasta.\n"
+
+#. @-expanded: HTREE directory inode %i has an invalid root node.\n
+#: e2fsck/problem.c:911
+#, no-c-format
+msgid "@h %i has an @n root node.\n"
+msgstr "pasta HTREE inode %i tem nó raiz inválido.\n"
+
+#. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
+#: e2fsck/problem.c:916
+msgid "@h %i has an unsupported hash version (%N)\n"
+msgstr "pasta HTREE inode %i tem versãi hash não suportada (%N).\n"
+
+#. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
+#: e2fsck/problem.c:922
+#, no-c-format
+msgid "@h %i uses an incompatible htree root node flag.\n"
+msgstr "pasta HTREE inode %i usa uma bandeira de nó raiz htree incompatível.\n"
+
+#. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
+#: e2fsck/problem.c:927
+msgid "@h %i has a tree depth (%N) which is too big\n"
+msgstr "pasta HTREE inode %i tem uma profundidade de árvore (%N) muito grande\n"
+
+#. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
+#. @-expanded: filesystem metadata.  
+#: e2fsck/problem.c:933
+msgid ""
+"Bad @b @i has an indirect @b (%b) that conflicts with\n"
+"@f metadata.  "
+msgstr ""
+"Mau inode de bloco tem um bloco (%b) indirecto que conflitua com\n"
+"meta-dados do sistema de ficheiros. "
+
+#. @-expanded: Resize inode (re)creation failed: %m.
+#: e2fsck/problem.c:940
+#, no-c-format
+msgid "Resize @i (re)creation failed: %m."
+msgstr "Falha ao redimensionar (re)criação de inode: %m."
+
+#. @-expanded: inode %i has a extra size (%IS) which is invalid\n
+#: e2fsck/problem.c:945
+msgid "@i %i has a extra size (%IS) which is @n\n"
+msgstr "inode %i tem um tamanho extra (%IS) que é inválido\n"
+
+#. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
+#: e2fsck/problem.c:950
+msgid "@a in @i %i has a namelen (%N) which is @n\n"
+msgstr "atributo estendido em inode %i tem um namelen (%N) que é inválido\n"
+
+#. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
+#: e2fsck/problem.c:955
+msgid "@a in @i %i has a value offset (%N) which is @n\n"
+msgstr "atributo estendido em inode %i tem um desvio de valor (%N) que é inválido\n"
+
+#. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
+#: e2fsck/problem.c:960
+msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
+msgstr "atributo estendido em inode %i tem um bloco de valor (%N) que é inválido (tem de ser 0)\n"
+
+#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
+#: e2fsck/problem.c:965
+msgid "@a in @i %i has a value size (%N) which is @n\n"
+msgstr "atributo estendido em inode %i tem um tamanho de valor (%N) que é inválido\n"
+
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:970
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "atributo estendido em inode %i tem uma hash (%N) que é inválida\n"
+
+#. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
+#: e2fsck/problem.c:975
+msgid "@i %i is a %It but it looks like it is really a directory.\n"
+msgstr "inode %i é %It mas parece que é realmente uma pasta.\n"
+
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:981
+#, no-c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "Erro ao ler sobre árvore estendida em inode %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:986
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+"Falha ao iterar extensões em inode %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:992
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+"inode %i tem uma extensão inválida\n"
+"\t(bloco lógico %c, bloco físico %b inválido, tamanho %N)\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:997
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+"inode %i tem uma extensão inválida\n"
+"\t(bloco lógico %c, bloco físico %b, tamanho inválido %N)\n"
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:1003
+#, no-c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr "inode %i tem bandeira EXTENTS_FL definida em sistema de ficheiros sem suporte a extensões.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:1009
+#, no-c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr "inode %i está em formato de extensão, mas o super-bloco tem a funcionalidade EXTENTS em falta\n"
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:1015
+#, no-c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr "inode %i com EXTENT_FL em falta, mas está em formato de extensão\n"
+
+#: e2fsck/problem.c:1021
+#, no-c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr "symlink %i rápida tem EXTENT_FL definida. "
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:1026
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"inode %i tem extensões fora de ordem\n"
+"\t(bloco lógico %c inválido, bloco físico %b, tamanho %N)\n"
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:1030
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr "inode %i tem um nó de extensão inválido (blk %b, lblk %c)\n"
+
+#. @-expanded: Error converting subcluster block bitmap: %m\n
+#: e2fsck/problem.c:1036
+#, no-c-format
+msgid "Error converting subcluster @b @B: %m\n"
+msgstr "Erro ao converter bitmap de bloco de sub-cluster: %m\n"
+
+#. @-expanded: quota inode is not a regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not a regular file.  "
+msgstr "inode de quota não é um ficheiro normal. "
+
+#. @-expanded: quota inode is not in use, but contains data.  
+#: e2fsck/problem.c:1046
+msgid "@q @i is not in use, but contains data.  "
+msgstr "inode de quota não está em uso, mas contém dados. "
+
+#. @-expanded: quota inode is visible to the user.  
+#: e2fsck/problem.c:1051
+msgid "@q @i is visible to the user.  "
+msgstr "inode de quota é visível pelo utilizador. "
+
+#. @-expanded: The bad block inode looks invalid.  
+#: e2fsck/problem.c:1056
+msgid "The bad @b @i looks @n.  "
+msgstr "O inode de bloco mau parece inválido. "
+
+#. @-expanded: inode %i has zero length extent\n
+#. @-expanded: \t(invalid logical block %c, physical block %b)\n
+#: e2fsck/problem.c:1061
+msgid ""
+"@i %i has zero length extent\n"
+"\t(@n logical @b %c, physical @b %b)\n"
+msgstr ""
+"inode %i tem extensão de tamanho zero\n"
+"\t(bloco lógico %c inválido, bloco físico %b)\n"
+
+#. @-expanded: inode %i seems to contain garbage.  
+#: e2fsck/problem.c:1067
+#, no-c-format
+msgid "@i %i seems to contain garbage.  "
+msgstr "inode %i parece conter lixo. "
+
+#. @-expanded: inode %i passes checks, but checksum does not match inode.  
+#: e2fsck/problem.c:1073
+#, no-c-format
+msgid "@i %i passes checks, but checksum does not match @i.  "
+msgstr "inode %i passa os testes, mas a checksum não corresponde a inode. "
+
+#. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
+#: e2fsck/problem.c:1079
+#, no-c-format
+msgid "@i %i @a is corrupt (allocation collision).  "
+msgstr "atributo estendido de inode %i está corrompido (colisão de alocação). "
+
+#. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
+#. @-expanded: \t(logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:1087
+msgid ""
+"@i %i extent block passes checks, but checksum does not match extent\n"
+"\t(logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"bloco estendido de inode %i passa os testes, mas a checksum não corresponde a extensão\n"
+"\t(bloco lógico %c, bloco físico %b, tamanho %N)\n"
+
+#. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
+#: e2fsck/problem.c:1096
+msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
+msgstr "bloco %b de atributo estendido de inode %i passa os testes, mas a checksum não corresponde ao bloco. "
+
+#. @-expanded: Interior extent node level %N of inode %i:\n
+#. @-expanded: Logical start %b does not match logical start %c at next level.  
+#: e2fsck/problem.c:1101
+msgid ""
+"Interior @x node level %N of @i %i:\n"
+"Logical start %b does not match logical start %c at next level.  "
+msgstr ""
+"Nível de nó de extensão interior %N de inode %i:\n"
+"início lógico %b não corresponde ao início lógico %c no nível seguinte. "
+
+#. @-expanded: inode %i, end of extent exceeds allowed value\n
+#. @-expanded: \t(logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:1107
+msgid ""
+"@i %i, end of extent exceeds allowed value\n"
+"\t(logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"inode %i, fim da extensão excede o valor permitido\n"
+"\t(bloco lógico %c, bloco físico %b, tamanho %N)\n"
+
+#. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
+#: e2fsck/problem.c:1113
+#, no-c-format
+msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
+msgstr "inode %i tem dados em linha, mas o super-bloco tem a funcionalidade INLINE_DATA em falta\n"
+
+#. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
+#: e2fsck/problem.c:1119
+#, no-c-format
+msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
+msgstr "inode %i tem bandeira INLINE_DATA_FL em sistema de ficheiros sem suporte a dados em linha.\n"
+
+#. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+msgstr "inode %i bloco %b conflitua com meta-dados críticos, a saltar testes de bloco.\n"
+
+#. @-expanded: directory inode %i block %b should be at block %c.  
+#: e2fsck/problem.c:1132
+msgid "@d @i %i @b %b should be at @b %c.  "
+msgstr "bloco %b de inode %i de pasta devia estar em bloco %c. "
+
+#. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
+#: e2fsck/problem.c:1138
+#, no-c-format
+msgid "@d @i %i has @x marked uninitialized at @b %c.  "
+msgstr "inode %i de pasta tem extensão marcada como não-inicializada no bloco %c. "
+
+#. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
+#. @-expanded: Will fix in pass 1B.\n
+#: e2fsck/problem.c:1143
+msgid ""
+"@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
+"Will fix in pass 1B.\n"
+msgstr ""
+"inode %i bloco lógico %b (bloco físico %c) viola as regras de alocação de cluster.\n"
+"Será reparado no passo 1B.\n"
+
+#. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
+#: e2fsck/problem.c:1149
+#, no-c-format
+msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
+msgstr "inode %i tem bandeira INLINE_DATA_FL mas não se encontrou atributo estendido. "
+
+#. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
+#. @-expanded: or inline-data flag set.  
+#: e2fsck/problem.c:1156
+#, no-c-format
+msgid ""
+"Special (@v/socket/fifo) file (@i %i) has extents\n"
+"or inline-data flag set.  "
+msgstr ""
+"Ficheiro especial (dispositivo/socket/fifo) (inode %i) tem extensões\n"
+"ou bandeira inline-data definida. "
+
+#. @-expanded: inode %i has extent header but inline data flag is set.\n
+#: e2fsck/problem.c:1163
+#, no-c-format
+msgid "@i %i has @x header but inline data flag is set.\n"
+msgstr "inode %i tem cabeçalho de extensão mas a bandeira de dados em linha está definida.\n"
+
+#. @-expanded: inode %i seems to have inline data but extent flag is set.\n
+#: e2fsck/problem.c:1169
+#, no-c-format
+msgid "@i %i seems to have inline data but @x flag is set.\n"
+msgstr "inode %i parece ter dados em linha, mas a bandeira de extensão está definida.\n"
+
+#. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
+#: e2fsck/problem.c:1175
+#, no-c-format
+msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
+msgstr "inode %i parece ter mapa de bloco, mas as bandeiras de dados em linha e extensão estão definidas.\n"
+
+#. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
+#: e2fsck/problem.c:1181
+#, no-c-format
+msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
+msgstr "inode %i tem as bandeiras de dados em linha e extensão definidas, mas i_block contém lixo.\n"
+
+#. @-expanded: Bad block list says the bad block list inode is bad.  
+#: e2fsck/problem.c:1186
+msgid "Bad block list says the bad block list @i is bad.  "
+msgstr "Lista de blocos maus diz que o inode da lista de blocos maus está mau. "
+
+#. @-expanded: error allocating extent region allocation structure.  
+#: e2fsck/problem.c:1191
+msgid "@A @x region allocation structure.  "
+msgstr "Erro ao alocar estrutura de alocação de região de extensão. "
+
+#. @-expanded: inode %i has a duplicate extent mapping\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:1196
+msgid ""
+"@i %i has a duplicate @x mapping\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+"inode %i tem mapeamento de extensão duplicado\n"
+"\t(bloco lógico %c, bloco físico %b inválido, tamanho %N)\n"
+
+#. @-expanded: error allocating memory for encrypted directory list\n
+#: e2fsck/problem.c:1201
+msgid "@A memory for encrypted @d list\n"
+msgstr "Erro ao alocar memória para lista de pastas encriptada\n"
+
+#. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
+#: e2fsck/problem.c:1206
+msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
+msgstr "árvore de extensões de inode %i podia ser mais rasa (%b; podia ser <= %c)\n"
+
+#. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
+#: e2fsck/problem.c:1212
+#, no-c-format
+msgid "@i %i on bigalloc @f cannot be @b mapped.  "
+msgstr "inode %i em sistema de ficheiros bigalloc não pode ser mapeada em blocos. "
+
+#. @-expanded: inode %i has corrupt extent header.  
+#: e2fsck/problem.c:1218
+#, no-c-format
+msgid "@i %i has corrupt @x header.  "
+msgstr "inode %i tem cabeçalho de extensão corrompido. "
+
+#. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
+#: e2fsck/problem.c:1224
+#, no-c-format
+msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
+msgstr "Carimbo(s) em inode %i além de 04-04-2310 são provavelmente pré-1970.\n"
+
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "inode %i tem valor de atributo estendido ilegal inode %N.\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "inode %i tem atributo estendido inválido. inode EA %N com bandeira EA_INODE em falta.\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+"inode EA %N para inode-mãe %i com bandeira EA_INODE em falta.\n"
+" "
+
+#. @-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
+#: e2fsck/problem.c:1248
+msgid ""
+"\n"
+"Running additional passes to resolve @bs claimed by more than one @i...\n"
+"Pass 1B: Rescanning for @m @bs\n"
+msgstr ""
+"\n"
+"A executar passos adicionais para resolver blocos reclamados por mais de um inode..\n"
+"Passo 1B: re-analisar blocos multiplicar-reclamados\n"
+
+#. @-expanded: multiply-claimed block(s) in inode %i:
+#: e2fsck/problem.c:1255
+#, no-c-format
+msgid "@m @b(s) in @i %i:"
+msgstr "blocos multiplicar-reclamados em inode %i:"
+
+#: e2fsck/problem.c:1271
+#, no-c-format
+msgid "Error while scanning inodes (%i): %m\n"
+msgstr "Erro ao analisar inodes (%i): %m\n"
+
+#. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
+#: e2fsck/problem.c:1277
+#, no-c-format
+msgid "@A @i @B (@i_dup_map): %m\n"
+msgstr "Erro ao alocar bitmap de inode (inode_dup_map): %m\n"
+
+#. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
+#: e2fsck/problem.c:1283
+#, no-c-format
+msgid "Error while iterating over @bs in @i %i (%s): %m\n"
+msgstr "Erro ao iterar sobre blocos em inode %i (%s): %m\n"
+
+#. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
+msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
+msgstr "Erro ao ajustar refcount para bloco %b de atributo estendido (@i %i): %m\n"
+
+#. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
+#: e2fsck/problem.c:1298
+msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
+msgstr "Passo 1C: analisar pastas para inodes com blocos multiplicar-reclamados\n"
+
+#. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
+#: e2fsck/problem.c:1304
+msgid "Pass 1D: Reconciling @m @bs\n"
+msgstr "Passo 1D: reconciliar blocos multiplicar-reclamados\n"
+
+#. @-expanded: File %Q (inode #%i, mod time %IM) \n
+#. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
+#: e2fsck/problem.c:1309
+msgid ""
+"File %Q (@i #%i, mod time %IM) \n"
+"  has %r @m @b(s), shared with %N file(s):\n"
+msgstr ""
+"Ficheiro %Q (inode nº %i, hora de mod. %IM) \n"
+" tem %r bloco(s) multiplicar-reclamado(s), partilhados com %N ficheiro(s):\n"
+
+#. @-expanded: \t%Q (inode #%i, mod time %IM)\n
+#: e2fsck/problem.c:1315
+msgid "\t%Q (@i #%i, mod time %IM)\n"
+msgstr "\t%Q (inode nº %i, hora de mod. %IM)\n"
+
+#. @-expanded: \t<filesystem metadata>\n
+#: e2fsck/problem.c:1320
+msgid "\t<@f metadata>\n"
+msgstr "\t<meta-dados do sistema de ficheiros>\n"
+
+#. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1325
+msgid ""
+"(There are %N @is containing @m @bs.)\n"
+"\n"
+msgstr ""
+"(há %N inodes contendo blocos multiplicar-reclamados.)\n"
+"\n"
+
+#. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1330
+msgid ""
+"@m @bs already reassigned or cloned.\n"
+"\n"
+msgstr ""
+"blocos multiplicar-reclamados já re-atribuídos ou clonados.\n"
+"\n"
+
+#: e2fsck/problem.c:1344
+#, no-c-format
+msgid "Couldn't clone file: %m\n"
+msgstr "Impossível clonar o ficheiro: %m\n"
+
+#. @-expanded: Pass 1E: Optimizing extent trees\n
+#: e2fsck/problem.c:1350
+msgid "Pass 1E: Optimizing @x trees\n"
+msgstr "Passo 1E: optimizar árvores de extensões\n"
+
+#. @-expanded: Failed to optimize extent tree %p (%i): %m\n
+#: e2fsck/problem.c:1356
+#, no-c-format
+msgid "Failed to optimize @x tree %p (%i): %m\n"
+msgstr "Falha ao optimizar árvore de extensão %p (%i): %m\n"
+
+#. @-expanded: Optimizing extent trees: 
+#: e2fsck/problem.c:1361
+msgid "Optimizing @x trees: "
+msgstr "Optimizar árvores de extensões: "
+
+#: e2fsck/problem.c:1376
+msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
+msgstr "Erro interno: profundidade máxima da árvore de extensões muito grande (%b; esperada=%c).\n"
+
+#. @-expanded: inode %i extent tree (at level %b) could be shorter.  
+#: e2fsck/problem.c:1381
+msgid "@i %i @x tree (at level %b) could be shorter.  "
+msgstr "árvore de extensão de inode %i (no nível %b) podia ser mais curta. "
+
+#. @-expanded: inode %i extent tree (at level %b) could be narrower.  
+#: e2fsck/problem.c:1386
+msgid "@i %i @x tree (at level %b) could be narrower.  "
+msgstr "árvore de extensão de inode %i (no nível %b) podia ser mais estreita. "
+
+#. @-expanded: Pass 2: Checking directory structure\n
+#: e2fsck/problem.c:1393
+msgid "Pass 2: Checking @d structure\n"
+msgstr "Passo 2: verificar estrutura de pastas\n"
+
+#. @-expanded: invalid inode number for '.' in directory inode %i.\n
+#: e2fsck/problem.c:1399
+#, no-c-format
+msgid "@n @i number for '.' in @d @i %i.\n"
+msgstr "número de inode inválido para '.' em inode de pasta %i.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
+#: e2fsck/problem.c:1404
+msgid "@E has @n @i #: %Di.\n"
+msgstr "Entrada \"%Dn\" em %p (%i) tem número de inode inválido: %Di.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
+#: e2fsck/problem.c:1409
+msgid "@E has @D/unused @i %Di.  "
+msgstr "Entrada \"%Dn\" em %p (%i) tem inode %Di eliminado/não utilizado. "
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
+#: e2fsck/problem.c:1414
+msgid "@E @L to '.'  "
+msgstr "Entrada \"%Dn\" em %p (%i) é ligação a '.' "
+
+#. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
+#: e2fsck/problem.c:1419
+msgid "@E points to @i (%Di) located in a bad @b.\n"
+msgstr "Entrada \"%Dn\" em %p (%i) aponta para indode (%Di) localizado num mau bloco.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
+#: e2fsck/problem.c:1424
+msgid "@E @L to @d %P (%Di).\n"
+msgstr "Entrada \"%Dn\" em %p (%i) é ligação a pasta %P (%Di).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
+#: e2fsck/problem.c:1429
+msgid "@E @L to the @r.\n"
+msgstr "Entrada \"%Dn\" em %p (%i) é ligação ao inode raiz.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
+#: e2fsck/problem.c:1434
+msgid "@E has illegal characters in its name.\n"
+msgstr "Entrada \"%Dn\" em %p (%i) tem caracteres ilegais no nome.\n"
+
+#. @-expanded: Missing '.' in directory inode %i.\n
+#: e2fsck/problem.c:1440
+#, no-c-format
+msgid "Missing '.' in @d @i %i.\n"
+msgstr "'.' em falta em inode de pasta %i.\n"
+
+#. @-expanded: Missing '..' in directory inode %i.\n
+#: e2fsck/problem.c:1446
+#, no-c-format
+msgid "Missing '..' in @d @i %i.\n"
+msgstr "'..' em falta em inode de pasta %i.\n"
+
+#. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
+#: e2fsck/problem.c:1451
+msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
+msgstr "Primeira entrada '%Dn' (inode=%Di) em inode de pastai %i (%p) devia ser '.'\n"
+
+#. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
+#: e2fsck/problem.c:1456
+msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
+msgstr "Segunda entrada '%Dn' (inode=%Di) em inode de pasta %i devia ser '..'\n"
+
+#. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
+#: e2fsck/problem.c:1461
+msgid "i_faddr @F %IF, @s zero.\n"
+msgstr "i_faddr para inode %i(%Q) é %IF, devia ser zero.\n"
+
+#. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
+#: e2fsck/problem.c:1466
+msgid "i_file_acl @F %If, @s zero.\n"
+msgstr "i_file_acl para inode %i(%Q) é %If, devia ser zero.\n"
+
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_size_high para inode %i(%Q) é %Id, devia zero.\n"
+
+#. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1476
+msgid "i_frag @F %N, @s zero.\n"
+msgstr "i_frag para inode %i(%Q) é %N, devia ser zero.\n"
+
+#. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1481
+msgid "i_fsize @F %N, @s zero.\n"
+msgstr "i_fsize para inode %i(%Q) é %N, devia ser zero.\n"
+
+#. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
+#: e2fsck/problem.c:1486
+msgid "@i %i (%Q) has @n mode (%Im).\n"
+msgstr "inode %i (%Q) tem modo inválido (%Im).\n"
+
+#. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
+#: e2fsck/problem.c:1491
+msgid "@d @i %i, %B, offset %N: @d corrupted\n"
+msgstr "inode de pasta %i, %B, desvio %N: pasta corrompida\n"
+
+#. @-expanded: directory inode %i, %B, offset %N: filename too long\n
+#: e2fsck/problem.c:1496
+msgid "@d @i %i, %B, offset %N: filename too long\n"
+msgstr "inode de pasta %i, %B, desvio %N: nome de ficheiro muito grande\n"
+
+#. @-expanded: directory inode %i has an unallocated %B.  
+#: e2fsck/problem.c:1501
+msgid "@d @i %i has an unallocated %B.  "
+msgstr "inode de pasta %i tem %B não alocado. "
+
+#. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
+#: e2fsck/problem.c:1507
+#, no-c-format
+msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
+msgstr "entrada de pasta '.' em inode de pasta %i não termina em NULL\n"
+
+#. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
+#: e2fsck/problem.c:1513
+#, no-c-format
+msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
+msgstr "entrada de pasta '..' em inode de pasta %i não termina em NULL\n"
+
+#. @-expanded: inode %i (%Q) is an illegal character device.\n
+#: e2fsck/problem.c:1518
+msgid "@i %i (%Q) is an @I character @v.\n"
+msgstr "inode %i (%Q) é um dispositivo de carácter ilegal.\n"
+
+#. @-expanded: inode %i (%Q) is an illegal block device.\n
+#: e2fsck/problem.c:1523
+msgid "@i %i (%Q) is an @I @b @v.\n"
+msgstr "inode %i (%Q) é um dispositivo de bloco ilegal.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
+#: e2fsck/problem.c:1528
+msgid "@E is duplicate '.' @e.\n"
+msgstr "Entrada \"%Dn\" em %p(%i) é entrada '.' duplicada.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
+#: e2fsck/problem.c:1533
+msgid "@E is duplicate '..' @e.\n"
+msgstr "Entrada \"%Dn\" em %p(%i) é entrada '..' duplicada.\n"
+
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
+msgid "Internal error: couldn't find dir_info for %i.\n"
+msgstr "Erro interno: impossível encontrar dir_info para %i.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
+#: e2fsck/problem.c:1544
+msgid "@E has rec_len of %Dr, @s %N.\n"
+msgstr "Entrada \"%Dn\" em %p(%i) tem rec_len de %Dr, devia ser %N.\n"
+
+#. @-expanded: error allocating icount structure: %m\n
+#: e2fsck/problem.c:1550
+#, no-c-format
+msgid "@A icount structure: %m\n"
+msgstr "Erro ao alocar estrutura icount: %m\n"
+
+#. @-expanded: Error iterating over directory blocks: %m\n
+#: e2fsck/problem.c:1556
+#, no-c-format
+msgid "Error iterating over @d @bs: %m\n"
+msgstr "Erro ao iterar sobre blocos de pasta: %m\n"
+
+#. @-expanded: Error reading directory block %b (inode %i): %m\n
+#: e2fsck/problem.c:1561
+msgid "Error reading @d @b %b (@i %i): %m\n"
+msgstr "Erro ao ler bloco de pasta %b (inode %i): %m\n"
+
+#. @-expanded: Error writing directory block %b (inode %i): %m\n
+#: e2fsck/problem.c:1566
+msgid "Error writing @d @b %b (@i %i): %m\n"
+msgstr "Erro ao escrever bloco de pasta %b (inode %i): %m\n"
+
+#. @-expanded: error allocating new directory block for inode %i (%s): %m\n
+#: e2fsck/problem.c:1572
+#, no-c-format
+msgid "@A new @d @b for @i %i (%s): %m\n"
+msgstr "Erro ao alocar novo bloco de pasta para inode %i (%s): %m\n"
+
+#. @-expanded: Error deallocating inode %i: %m\n
+#: e2fsck/problem.c:1578
+#, no-c-format
+msgid "Error deallocating @i %i: %m\n"
+msgstr "Erro ao desalocar inode %i: %m\n"
+
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1584
+#, no-c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr "Entrada de pasta para '.' em %p (%i) é grande.\n"
+
+#. @-expanded: inode %i (%Q) is an illegal FIFO.\n
+#: e2fsck/problem.c:1589
+msgid "@i %i (%Q) is an @I FIFO.\n"
+msgstr "inode %i (%Q) é FIFO ilegal.\n"
+
+#. @-expanded: inode %i (%Q) is an illegal socket.\n
+#: e2fsck/problem.c:1594
+msgid "@i %i (%Q) is an @I socket.\n"
+msgstr "inode %i (%Q) é um socket ilegal.\n"
+
+#. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
+#: e2fsck/problem.c:1599
+msgid "Setting filetype for @E to %N.\n"
+msgstr "A definir tipo de ficheiro para entrada \"%Dn\" em %p(%i) como %N.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
+#: e2fsck/problem.c:1604
+msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
+msgstr "Entrada \"%Dn\" em %p(%i) tem um tipo de ficheiro incorrecto (era %Dt, devia ser %N).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
+#: e2fsck/problem.c:1609
+msgid "@E has filetype set.\n"
+msgstr "Entrada \"%Dn\" em %p(%i) tem tipo de ficheiro definido.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
+#: e2fsck/problem.c:1614
+msgid "@E has a @z name.\n"
+msgstr "Entrada \"%Dn\" em %p(%i) tem nome de tamanho zero.\n"
+
+#. @-expanded: Symlink %Q (inode #%i) is invalid.\n
+#: e2fsck/problem.c:1619
+msgid "Symlink %Q (@i #%i) is @n.\n"
+msgstr "Symlink %Q (inode nº %i) é inválido.\n"
+
+#. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
+#: e2fsck/problem.c:1624
+msgid "@a @b @F @n (%If).\n"
+msgstr "bloco de atributo estendido para inode %i(%Q) é inválido (%If).\n"
+
+#. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
+#: e2fsck/problem.c:1629
+msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
+msgstr "o sistema de ficheiros contém ficheiros grandes, mas te bandeira LARGE_FILE em super-bloco.\n"
+
+#. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
+#: e2fsck/problem.c:1634
+msgid "@p @h %d: %B not referenced\n"
+msgstr "problema em pasta HTREE inode %d: %B não referenciado\n"
+
+#. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
+#: e2fsck/problem.c:1639
+msgid "@p @h %d: %B referenced twice\n"
+msgstr "problema em pasta HTREE inode %d: %B referenciado duas vezes\n"
+
+#. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
+#: e2fsck/problem.c:1644
+msgid "@p @h %d: %B has bad min hash\n"
+msgstr "problema em pasta HTREE inode %d: %B tem hash mínima má\n"
+
+#. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
+#: e2fsck/problem.c:1649
+msgid "@p @h %d: %B has bad max hash\n"
+msgstr "Problema em pasta HTREE inode %d: %B tem má hash máxima\n"
+
+#. @-expanded: invalid HTREE directory inode %d (%q).  
+#: e2fsck/problem.c:1654
+msgid "@n @h %d (%q).  "
+msgstr "Pasta HTREE inode %d (%q) inválida. "
+
+#. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
+#: e2fsck/problem.c:1658
+msgid "@p @h %d (%q): bad @b number %b.\n"
+msgstr "Problema em pasta HTREE inode %d (%q): mau número de bloco %b.\n"
+
+#. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
+#: e2fsck/problem.c:1669
+#, no-c-format
+msgid "@p @h %d: root node is @n\n"
+msgstr "Problema em pasta HTREE inode %d: nó raiz inválido\n"
+
+#. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
+#: e2fsck/problem.c:1674
+msgid "@p @h %d: %B has @n limit (%N)\n"
+msgstr "Problema em pasta HTREE inode %d: %B tem limite inválido (%N)\n"
+
+#. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
+#: e2fsck/problem.c:1679
+msgid "@p @h %d: %B has @n count (%N)\n"
+msgstr "Problema em pasta HTREE inode %d: %B tem total inválido (%N)\n"
+
+#. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
+#: e2fsck/problem.c:1684
+msgid "@p @h %d: %B has an unordered hash table\n"
+msgstr "Problema em pasta HTREE inode %d: %B tem tabela de hash desordenada\n"
+
+#. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
+#: e2fsck/problem.c:1689
+msgid "@p @h %d: %B has @n depth (%N)\n"
+msgstr "Problema em pasta HTREE inode %d: %B tem profundidade inválida (%N)\n"
+
+#. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
+#: e2fsck/problem.c:1694
+msgid "Duplicate @E found.  "
+msgstr "Encontrada entrada \"%Dn\" em %p (%i) duplicada. "
+
+#. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
+#. @-expanded: Rename to %s
+#: e2fsck/problem.c:1699
+#, no-c-format
+msgid ""
+"@E has a non-unique filename.\n"
+"Rename to %s"
+msgstr ""
+"Entrada \"%Dn\" em %p (%i) com nome de ficheiro não único.\n"
+"Renomear para %s"
+
+#. @-expanded: Duplicate entry '%Dn' found.\n
+#. @-expanded: \tMarking %p (%i) to be rebuilt.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1704
+msgid ""
+"Duplicate @e '%Dn' found.\n"
+"\tMarking %p (%i) to be rebuilt.\n"
+"\n"
+msgstr ""
+"Encontrada entrada '%Dn' duplicada.\n"
+"\tA marcar %p (%i) para reconstrução.\n"
+"\n"
+
+#. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1709
+msgid "i_blocks_hi @F %N, @s zero.\n"
+msgstr "i_blocks_hi para inode %i(%Q) é %N, devia ser zero.\n"
+
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1714
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "Bloco inesperado em pasta HTREE 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:1719
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr "Entrada \"%Dn\" em %p(%i) referencia inode %Di em grupo %g onde _INODE_UNINIT está definida.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1724
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr "Entrada \"%Dn\" em %p(%i) referencia inode %Di encontrado na área de inodes não usados do grupo %g.\n"
+
+#. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1729
+msgid "i_file_acl_hi @F %N, @s zero.\n"
+msgstr "i_file_acl_hi para inode %i(%Q) é %N, devia ser zero.\n"
+
+#. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
+#: e2fsck/problem.c:1735
+#, no-c-format
+msgid "@p @h %d: root node fails checksum.\n"
+msgstr "Problema em pasta HTREE inode %d: nó raiz falha a checksum.\n"
+
+#. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
+#: e2fsck/problem.c:1741
+#, no-c-format
+msgid "@p @h %d: internal node fails checksum.\n"
+msgstr "Problema em pasta HTREE inode %d: nó interno falha a checksum.\n"
+
+#. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
+#: e2fsck/problem.c:1746
+msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
+msgstr "inode de pasta %i, %B, desvio %N: pasta sem checksum.\n"
+
+#. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
+#: e2fsck/problem.c:1751
+msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
+msgstr "inode de pasta %i, %B: a pasta passa os testes mas falha a checksum.\n"
+
+#. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
+#: e2fsck/problem.c:1756
+msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
+msgstr "O tamanho do inode de pasta %i em linha (%N) tem de ser múltiplo de 4.\n"
+
+#. @-expanded: Fixing size of inline directory inode %i failed.\n
+#: e2fsck/problem.c:1762
+#, no-c-format
+msgid "Fixing size of inline @d @i %i failed.\n"
+msgstr "Falha ao reparar o tamanho do inode de pasta %i em linha.\n"
+
+#. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
+#: e2fsck/problem.c:1767
+msgid "Encrypted @E is too short.\n"
+msgstr "Entrada \"%Dn\" em %p(%i) encriptada muito curta.\n"
+
+#. @-expanded: Pass 3: Checking directory connectivity\n
+#: e2fsck/problem.c:1774
+msgid "Pass 3: Checking @d connectivity\n"
+msgstr "Passo 3: verificar conectividade da pasta\n"
+
+#. @-expanded: root inode not allocated.  
+#: e2fsck/problem.c:1779
+msgid "@r not allocated.  "
+msgstr "inode raiz não alocado..."
+
+#. @-expanded: No room in lost+found directory.  
+#: e2fsck/problem.c:1784
+msgid "No room in @l @d.  "
+msgstr "sem espaço na pasta perdido+achado. "
+
+#. @-expanded: Unconnected directory inode %i (%p)\n
+#: e2fsck/problem.c:1790
+#, no-c-format
+msgid "Unconnected @d @i %i (%p)\n"
+msgstr "inode de pasta %i (%p) não ligado\n"
+
+#. @-expanded: /lost+found not found.  
+#: e2fsck/problem.c:1795
+msgid "/@l not found.  "
+msgstr "/perdido+achado não encontrado. "
+
+#. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
+#: e2fsck/problem.c:1800
+msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
+msgstr "'..' em %Q (%i) é %P (%j), devia ser %q (%d).\n"
+
+#. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
+#: e2fsck/problem.c:1806
+#, no-c-format
+msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
+msgstr "/perdido+achado mau ou não-existente. Impossível religar.\n"
+
+#. @-expanded: Could not expand /lost+found: %m\n
+#: e2fsck/problem.c:1812
+#, no-c-format
+msgid "Could not expand /@l: %m\n"
+msgstr "Impossível expandir /perdido+achado: %m\n"
+
+#: e2fsck/problem.c:1818
+#, no-c-format
+msgid "Could not reconnect %i: %m\n"
+msgstr "Impossível religar %i: %m\n"
+
+#. @-expanded: Error while trying to find /lost+found: %m\n
+#: e2fsck/problem.c:1824
+#, no-c-format
+msgid "Error while trying to find /@l: %m\n"
+msgstr "Erro ao tentar encontrar /perdido+achado: %m\n"
+
+#. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
+#: e2fsck/problem.c:1830
+#, no-c-format
+msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
+msgstr "ext2fs_new_@b: %m ao tentar criar pasta /perdido+achado\n"
+
+#. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
+#: e2fsck/problem.c:1836
+#, no-c-format
+msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
+msgstr "ext2fs_new_@i: %m ao tentar criar pasta /perdido+achado\n"
+
+#. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
+#: e2fsck/problem.c:1842
+#, no-c-format
+msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
+msgstr "ext2fs_new_dir_@b: %m ao criar novo bloco de pasta\n"
+
+#. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
+#: e2fsck/problem.c:1848
+#, no-c-format
+msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
+msgstr "ext2fs_write_dir_@b: %m ao escrever o bloco de pasta para /perdido+achado\n"
+
+#. @-expanded: Error while adjusting inode count on inode %i\n
+#: e2fsck/problem.c:1854
+#, no-c-format
+msgid "Error while adjusting @i count on @i %i\n"
+msgstr "Erro ao ajustar total de inodes no inode %i\n"
+
+#. @-expanded: Couldn't fix parent of inode %i: %m\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1860
+#, no-c-format
+msgid ""
+"Couldn't fix parent of @i %i: %m\n"
+"\n"
+msgstr ""
+"Impossível reparar mãe de inode %i: %m\n"
+"\n"
+
+#. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1866
+#, no-c-format
+msgid ""
+"Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
+"\n"
+msgstr ""
+"Impossível reparar mãe de inode %i: impossível encontrar entrada de pasta-mãe\n"
+"\n"
+
+#. @-expanded: Error creating root directory (%s): %m\n
+#: e2fsck/problem.c:1877
+#, no-c-format
+msgid "Error creating root @d (%s): %m\n"
+msgstr "Erro ao criar pasta raiz (%s): %m\n"
+
+#. @-expanded: Error creating /lost+found directory (%s): %m\n
+#: e2fsck/problem.c:1883
+#, no-c-format
+msgid "Error creating /@l @d (%s): %m\n"
+msgstr "Erro ao criar pasta /perdido+achado (%s): %m\n"
+
+#. @-expanded: root inode is not a directory; aborting.\n
+#: e2fsck/problem.c:1888
+msgid "@r is not a @d; aborting.\n"
+msgstr "inode raiz não é uma pasta; a abortar.\n"
+
+#. @-expanded: Cannot proceed without a root inode.\n
+#: e2fsck/problem.c:1893
+msgid "Cannot proceed without a @r.\n"
+msgstr "Impossível prosseguir sem um inode raiz.\n"
+
+#. @-expanded: /lost+found is not a directory (ino=%i)\n
+#: e2fsck/problem.c:1904
+#, no-c-format
+msgid "/@l is not a @d (ino=%i)\n"
+msgstr "/perdido+achado não é uma pasta (ino=%i)\n"
+
+#. @-expanded: /lost+found has inline data\n
+#: e2fsck/problem.c:1909
+msgid "/@l has inline data\n"
+msgstr "/perdido+achado tem dados em linha\n"
+
+#. @-expanded: Cannot allocate space for /lost+found.\n
+#. @-expanded: Place lost files in root directory instead
+#: e2fsck/problem.c:1914
+msgid ""
+"Cannot allocate space for /@l.\n"
+"Place lost files in root directory instead"
+msgstr ""
+"Impossível alocar espaço para /perdido+achado.\n"
+"Colocar antes os ficheiros perdidos na pasta raiz"
+
+#. @-expanded: Insufficient space to recover lost files!\n
+#. @-expanded: Move data off the filesystem and re-run e2fsck.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1919
+msgid ""
+"Insufficient space to recover lost files!\n"
+"Move data off the @f and re-run e2fsck.\n"
+"\n"
+msgstr ""
+"Espaço insuficiente para recuperar ficheiros perdidos!\n"
+"Mova dados para fora do sistema de ficheiros e volte a executar e2fsck.\n"
+"\n"
+
+#. @-expanded: /lost+found is encrypted\n
+#: e2fsck/problem.c:1924
+msgid "/@l is encrypted\n"
+msgstr "/perdido+achado está encriptada\n"
+
+#: e2fsck/problem.c:1931
+msgid "Pass 3A: Optimizing directories\n"
+msgstr "Passo 3A: optimizar pastas\n"
+
+#: e2fsck/problem.c:1937
+#, no-c-format
+msgid "Failed to create dirs_to_hash iterator: %m\n"
+msgstr "Falha ao criar iterador dirs_to_hash: %m\n"
+
+#: e2fsck/problem.c:1942
+msgid "Failed to optimize directory %q (%d): %m\n"
+msgstr "Falha ao optimizar a pasta %q (%d): %m\n"
+
+#: e2fsck/problem.c:1947
+msgid "Optimizing directories: "
+msgstr "A optimizar pastas: "
+
+#: e2fsck/problem.c:1964
+msgid "Pass 4: Checking reference counts\n"
+msgstr "Passo 4: verificar totais de referência\n"
+
+#. @-expanded: unattached zero-length inode %i.  
+#: e2fsck/problem.c:1970
+#, no-c-format
+msgid "@u @z @i %i.  "
+msgstr "inode %i desanexado de tamanho zero. "
+
+#. @-expanded: unattached inode %i\n
+#: e2fsck/problem.c:1976
+#, no-c-format
+msgid "@u @i %i\n"
+msgstr "inode %i desanexado\n"
+
+#. @-expanded: inode %i ref count is %Il, should be %N.  
+#: e2fsck/problem.c:1981
+msgid "@i %i ref count is %Il, @s %N.  "
+msgstr "total referência de inode %i é %Il, devia ser %N. "
+
+#. @-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
+#: e2fsck/problem.c:1985
+msgid ""
+"WARNING: PROGRAMMING BUG IN E2FSCK!\n"
+"\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
+"@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
+msgstr ""
+"AVISO: ERRO DE PROGRAMAÇÃO NO E2FSCK!\n"
+"\tOU ALGUM TONTO (?!?) ESTÁ A VERIFICAR UM SISTEMA DE FICHEIROS MONTADO.\n"
+"@i_link_info[%i] é %N, inode.i_links_count é %Il. Deviam ser iguais!\n"
+
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "total de referência do inode %i de atributo estendido é %N, devia ser %n. "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr "A pasta excede o máximo de ligações, mas não há funcionalidade DIR_NLINK no super-bloco.\n"
+
+#. @-expanded: Pass 5: Checking group summary information\n
+#: e2fsck/problem.c:2004
+msgid "Pass 5: Checking @g summary information\n"
+msgstr "Passo 5: verificar informação de resumo do grupo\n"
+
+#. @-expanded: Padding at end of inode bitmap is not set. 
+#: e2fsck/problem.c:2009
+msgid "Padding at end of @i @B is not set. "
+msgstr "Espaço no final do bitmap de inode não está definido. "
+
+#. @-expanded: Padding at end of block bitmap is not set. 
+#: e2fsck/problem.c:2014
+msgid "Padding at end of @b @B is not set. "
+msgstr "Espaço no final do bitmap de bloco não está definido. "
+
+#. @-expanded: block bitmap differences: 
+#: e2fsck/problem.c:2019
+msgid "@b @B differences: "
+msgstr "diferenças do bitmap de bloco: "
+
+#. @-expanded: inode bitmap differences: 
+#: e2fsck/problem.c:2041
+msgid "@i @B differences: "
+msgstr "diferenças do bitmap de inode: "
+
+#. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
+#: e2fsck/problem.c:2063
+msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
+msgstr "Total de inodes livres para o grupo nº %g errado (%i, contados=%j).\n"
+
+#. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
+#: e2fsck/problem.c:2068
+msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
+msgstr "Total de pastas para o grupo nº %g (%i, contadas=%j).\n"
+
+#. @-expanded: Free inodes count wrong (%i, counted=%j).\n
+#: e2fsck/problem.c:2073
+msgid "Free @is count wrong (%i, counted=%j).\n"
+msgstr "Total de inodes livres errado (%i, contados=%j).\n"
+
+#. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
+#: e2fsck/problem.c:2078
+msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
+msgstr "Total de blocos livres para o grupo nº %g errado (%b, contados=%c).\n"
+
+#. @-expanded: Free blocks count wrong (%b, counted=%c).\n
+#: e2fsck/problem.c:2083
+msgid "Free @bs count wrong (%b, counted=%c).\n"
+msgstr "Total de blocos livres errado (%b, contados=%c).\n"
+
+#. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
+#. @-expanded: endpoints (%i, %j)\n
+#: e2fsck/problem.c:2088
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "ERRO DE PROGRAMAÇÃO: pontos finais do bitmap do sistema de ficheiros (nº %N) (%b, %c) não correspondem aos pontos finais calculados (%i, %j)\n"
+
+#: e2fsck/problem.c:2094
+msgid "Internal error: fudging end of bitmap (%N)\n"
+msgstr "Erro interno: final de bitmap disparatado (%N)\n"
+
+#. @-expanded: Error copying in replacement inode bitmap: %m\n
+#: e2fsck/problem.c:2100
+#, no-c-format
+msgid "Error copying in replacement @i @B: %m\n"
+msgstr "Erro de cópia no bitmap de inode substituto: %m\n"
+
+#. @-expanded: Error copying in replacement block bitmap: %m\n
+#: e2fsck/problem.c:2106
+#, no-c-format
+msgid "Error copying in replacement @b @B: %m\n"
+msgstr "Erro de cópia no bitmap de bloco substituto: %m\n"
+
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:2136
+#, no-c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
+msgstr "blocos de grupo %g em uso, mas o grupo está marcado como BLOCK_UNINIT\n"
+
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:2142
+#, no-c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr "inodes de grupo %g em uso, mas o grupo está marcado como INODE_UNINIT\n"
+
+#. @-expanded: group %g inode bitmap does not match checksum.\n
+#: e2fsck/problem.c:2148
+#, no-c-format
+msgid "@g %g @i @B does not match checksum.\n"
+msgstr "bitmap de inode do grupo %g não corresponde à checksum.\n"
+
+#. @-expanded: group %g block bitmap does not match checksum.\n
+#: e2fsck/problem.c:2154
+#, no-c-format
+msgid "@g %g @b @B does not match checksum.\n"
+msgstr "bitmap de bloco do grupo %g não corresponde à checksum.\n"
+
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:2161
+msgid "Recreate @j"
+msgstr "Recriar diário"
+
+#: e2fsck/problem.c:2166
+msgid "Update quota info for quota type %N"
+msgstr "Actualizar informação de quota para quota tipo %N"
+
+#. @-expanded: Error setting block group checksum info: %m\n
+#: e2fsck/problem.c:2172
+#, no-c-format
+msgid "Error setting @b @g checksum info: %m\n"
+msgstr "Erro ao definir informação de checksum de grupo do bloco: %m\n"
+
+#: e2fsck/problem.c:2178
+#, no-c-format
+msgid "Error writing file system info: %m\n"
+msgstr "Erro ao escrever informação do sistema de ficheiros: %m\n"
+
+#: e2fsck/problem.c:2184
+#, no-c-format
+msgid "Error flushing writes to storage device: %m\n"
+msgstr "Erro ao despejar escritas para o dispositivo de armazenamento: %m\n"
+
+#: e2fsck/problem.c:2189
+msgid "Error writing quota info for quota type %N: %m\n"
+msgstr "Erro ao escrever informação de quota para quota tipo %N: %m\n"
+
+#: e2fsck/problem.c:2352
+#, c-format
+msgid "Unhandled error code (0x%x)!\n"
+msgstr "Código de erro não gerido (0x%x)!\n"
+
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
+msgid "IGNORED"
+msgstr "IGNORADO"
+
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
+msgid "in move_quota_inode"
+msgstr "em move_quota_inode"
+
+#: e2fsck/scantest.c:79
+#, c-format
+msgid "Memory used: %d, elapsed time: %6.3f/%6.3f/%6.3f\n"
+msgstr "Memória usada: %d, tempo decorrido: %6.3f/%6.3f/%6.3f\n"
+
+#: e2fsck/scantest.c:98
+#, c-format
+msgid "size of inode=%d\n"
+msgstr "tamanho do inode=%d\n"
+
+#: e2fsck/scantest.c:119
+msgid "while starting inode scan"
+msgstr "ao iniciar análise de inode"
+
+#: e2fsck/scantest.c:130
+msgid "while doing inode scan"
+msgstr "ao fazer análise de inode"
+
+#: e2fsck/super.c:224
+#, c-format
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "ao chamar ext2fs_block_iterate para inode %u"
+
+#: e2fsck/super.c:249
+#, c-format
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "ao chamar ext2fs_adjust_ea_refcount2 para inode %u"
+
+#: e2fsck/super.c:374
+msgid "Truncating"
+msgstr "A truncar"
+
+#: e2fsck/super.c:375
+msgid "Clearing"
+msgstr "A limpar"
+
+#: e2fsck/unix.c:78
+#, c-format
+msgid ""
+"Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
+"\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
+"\t\t[-E extended-options] [-z undo_file] device\n"
+msgstr ""
+"Uso: %s [-panyrcdfktvDFV] [-b super-bloco] [-B tam-bloco]\n"
+"\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
+"\t\t[-E extended-options] [-z undo_file] dispositivo\n"
+
+#: e2fsck/unix.c:83
+msgid ""
+"\n"
+"Emergency help:\n"
+" -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"
+" -f                   Force checking even if filesystem is marked clean\n"
+msgstr ""
+"\n"
+"Ajuda de emergência:\n"
+" -p                   Reparação automática (sem perguntas)\n"
+" -n                   Não faz alterações ao sistema de ficheiros\n"
+" -y                   Assume \"yes\" para todas as perguntas\n"
+" -c                   Procura maus blocos e adiciona-os à lista de maus blocos\n"
+" -f                   Força a verificação, mesmo que o sistema de ficheiros esteja marcado como limpo\n"
+
+#: e2fsck/unix.c:89
+msgid ""
+" -v                   Be verbose\n"
+" -b superblock        Use alternative superblock\n"
+" -B blocksize         Force blocksize when looking for superblock\n"
+" -j external_journal  Set location of the external journal\n"
+" -l bad_blocks_file   Add to badblocks list\n"
+" -L bad_blocks_file   Set badblocks list\n"
+" -z undo_file         Create an undo file\n"
+msgstr ""
+" -v                   Verboso\n"
+" -b superblock        Usa super-bloco alternativo\n"
+" -B tam-bloco         Força tam-bloco ao procurar o super-bloco\n"
+" -j external_journal  Define localização do diário externo\n"
+" -l bad_blocks_file   Adiciona à lista de maus blocos\n"
+" -L bad_blocks_file   Define a lista de maus blocos\n"
+" -z undo_file         Cria um ficheiro para desfazer\n"
+
+#: e2fsck/unix.c:137
+#, c-format
+msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
+msgstr "%s: %u/%u ficheiros (%0d.%d%% não-contíguos), %llu/%llu blocos\n"
+
+#: e2fsck/unix.c:163
+#, c-format
+msgid ""
+"\n"
+"%12u inode used (%2.2f%%, out of %u)\n"
+msgid_plural ""
+"\n"
+"%12u inodes used (%2.2f%%, out of %u)\n"
+msgstr[0] ""
+"\n"
+"%12u inode usado (%2.2f%%, de %u)\n"
+msgstr[1] ""
+"\n"
+"%12u inodes usados (%2.2f%%, de %u)\n"
+
+#: e2fsck/unix.c:167
+#, c-format
+msgid "%12u non-contiguous file (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
+msgstr[0] "%12u ficheiro não-contíguo (%0d.%d%%)\n"
+msgstr[1] "%12u ficheiros não-contíguos (%0d.%d%%)\n"
+
+#: e2fsck/unix.c:172
+#, c-format
+msgid "%12u non-contiguous directory (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
+msgstr[0] "%12u pasta não-contígua (%0d.%d%%)\n"
+msgstr[1] "%12u pastas não-contíguas (%0d.%d%%)\n"
+
+#: e2fsck/unix.c:177
+#, c-format
+msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgstr "             nº de inodes com blocos ind/dind/tind: %u/%u/%u\n"
+
+#: e2fsck/unix.c:185
+msgid "             Extent depth histogram: "
+msgstr "             Histograma de profundidade de extensão: "
+
+#: e2fsck/unix.c:194
+#, c-format
+msgid "%12llu block used (%2.2f%%, out of %llu)\n"
+msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
+msgstr[0] "%12llu bloco usado (%2.2f%%, de %llu)\n"
+msgstr[1] "%12llu blocos usados (%2.2f%%, de %llu)\n"
+
+#: e2fsck/unix.c:198
+#, c-format
+msgid "%12u bad block\n"
+msgid_plural "%12u bad blocks\n"
+msgstr[0] "%12u mau bloco\n"
+msgstr[1] "%12u maus blocos\n"
+
+#: e2fsck/unix.c:200
+#, c-format
+msgid "%12u large file\n"
+msgid_plural "%12u large files\n"
+msgstr[0] "%12u ficheiro grande\n"
+msgstr[1] "%12u ficheiros grandes\n"
+
+#: e2fsck/unix.c:202
+#, c-format
+msgid ""
+"\n"
+"%12u regular file\n"
+msgid_plural ""
+"\n"
+"%12u regular files\n"
+msgstr[0] ""
+"\n"
+"%12u ficheiro normal\n"
+msgstr[1] ""
+"\n"
+"%12u ficheiros normais\n"
+
+#: e2fsck/unix.c:204
+#, c-format
+msgid "%12u directory\n"
+msgid_plural "%12u directories\n"
+msgstr[0] "%12u pasta\n"
+msgstr[1] "%12u pastas\n"
+
+#: e2fsck/unix.c:206
+#, c-format
+msgid "%12u character device file\n"
+msgid_plural "%12u character device files\n"
+msgstr[0] "%12u ficheiro de dispositivo de carácter\n"
+msgstr[1] "%12u ficheiros de dispositivo de carácter\n"
+
+#: e2fsck/unix.c:209
+#, c-format
+msgid "%12u block device file\n"
+msgid_plural "%12u block device files\n"
+msgstr[0] "%12u ficheiro de dispositivo de bloco\n"
+msgstr[1] "%12u ficheiros de dispositivo de bloco\n"
+
+#: e2fsck/unix.c:211
+#, c-format
+msgid "%12u fifo\n"
+msgid_plural "%12u fifos\n"
+msgstr[0] "%12u fifo\n"
+msgstr[1] "%12u fifos\n"
+
+#: e2fsck/unix.c:213
+#, c-format
+msgid "%12u link\n"
+msgid_plural "%12u links\n"
+msgstr[0] "%12u ligação\n"
+msgstr[1] "%12u ligações\n"
+
+#: e2fsck/unix.c:215
+#, c-format
+msgid "%12u symbolic link"
+msgid_plural "%12u symbolic links"
+msgstr[0] "%12u ligação simbólica"
+msgstr[1] "%12u ligações simbólicas"
+
+#: e2fsck/unix.c:217
+#, c-format
+msgid " (%u fast symbolic link)\n"
+msgid_plural " (%u fast symbolic links)\n"
+msgstr[0] " (%u ligação simbólica rápida)\n"
+msgstr[1] " (%u ligações simbólicas rápidas)\n"
+
+#: e2fsck/unix.c:221
+#, c-format
+msgid "%12u socket\n"
+msgid_plural "%12u sockets\n"
+msgstr[0] "%12u socket\n"
+msgstr[1] "%12u sockets\n"
+
+#: e2fsck/unix.c:225
+#, c-format
+msgid "%12u file\n"
+msgid_plural "%12u files\n"
+msgstr[0] "%12u ficheiro\n"
+msgstr[1] "%12u ficheiros\n"
+
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
+#, c-format
+msgid "while determining whether %s is mounted."
+msgstr "ao determinar se %s está montado."
+
+#: e2fsck/unix.c:259
+#, c-format
+msgid "Warning!  %s is mounted.\n"
+msgstr "Aviso!  %s está montado.\n"
+
+#: e2fsck/unix.c:262
+#, c-format
+msgid "Warning!  %s is in use.\n"
+msgstr "Aviso!  %s está em uso.\n"
+
+#: e2fsck/unix.c:268
+#, c-format
+msgid "%s is mounted.\n"
+msgstr "%s está montado.\n"
+
+#: e2fsck/unix.c:270
+#, c-format
+msgid "%s is in use.\n"
+msgstr "%s está em uso.\n"
+
+#: e2fsck/unix.c:272
+msgid ""
+"Cannot continue, aborting.\n"
+"\n"
+msgstr ""
+"Impossível continuar, a abortar.\n"
+"\n"
+
+#: e2fsck/unix.c:274
+msgid ""
+"\n"
+"\n"
+"WARNING!!!  The filesystem is mounted.   If you continue you ***WILL***\n"
+"cause ***SEVERE*** filesystem damage.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"AVISO!!!  O sistema de ficheiros está montado.   Se continuar ***VAI***\n"
+"causar ***GRAVES*** danos ao sistema de ficheiros.\n"
+"\n"
+
+#: e2fsck/unix.c:279
+msgid "Do you really want to continue"
+msgstr "Deseja realmente continuar"
+
+#: e2fsck/unix.c:281
+msgid "check aborted.\n"
+msgstr "verificação abortada.\n"
+
+#: e2fsck/unix.c:375
+msgid " contains a file system with errors"
+msgstr " contém um sistema de ficheiros com erros"
+
+#: e2fsck/unix.c:377
+msgid " was not cleanly unmounted"
+msgstr " não foi desmontado asseadamente"
+
+#: e2fsck/unix.c:379
+msgid " primary superblock features different from backup"
+msgstr " funcionalidades do super-bloco primário diferentes da segurança"
+
+#: e2fsck/unix.c:383
+#, c-format
+msgid " has been mounted %u times without being checked"
+msgstr " foi montado %u vezes sem verificação"
+
+#: e2fsck/unix.c:390
+msgid " has filesystem last checked time in the future"
+msgstr " tem a última hora de verificação do sistema de ficheiros no futuro"
+
+#: e2fsck/unix.c:396
+#, c-format
+msgid " has gone %u days without being checked"
+msgstr " há %u dias que não é verificado"
+
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr "a ignorar intervalo de verificação, broken_system_clock definido\n"
+
+#: e2fsck/unix.c:410
+msgid ", check forced.\n"
+msgstr ", verificação forçada.\n"
+
+#: e2fsck/unix.c:443
+#, c-format
+msgid "%s: clean, %u/%u files, %llu/%llu blocks"
+msgstr "%s: limpo, %u/%u ficheiros, %llu/%llu blocos"
+
+#: e2fsck/unix.c:463
+msgid " (check deferred; on battery)"
+msgstr " (verificação adiada; em bateria)"
+
+#: e2fsck/unix.c:466
+msgid " (check after next mount)"
+msgstr " (verificar após montagem seguinte)"
+
+#: e2fsck/unix.c:468
+#, c-format
+msgid " (check in %ld mounts)"
+msgstr " (verificar após %ld montagens)"
+
+#: e2fsck/unix.c:618
+#, c-format
+msgid "ERROR: Couldn't open /dev/null (%s)\n"
+msgstr "ERRO: impossível abrir /dev/null (%s)\n"
+
+#: e2fsck/unix.c:689
+msgid "Invalid EA version.\n"
+msgstr "Versão EA inválida.\n"
+
+#: e2fsck/unix.c:702
+msgid "Invalid readahead buffer size.\n"
+msgstr "Tamanho de buffer readahead inválido.\n"
+
+#: e2fsck/unix.c:757
+#, c-format
+msgid "Unknown extended option: %s\n"
+msgstr "Opção estendida desconhecida: %s\n"
+
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Opções estendidas são separadas por vírgulas e podem receber um argumento\n"
+"que é predefinido como um sinal de igual (\"=\"). As opções válidas são:\n"
+"\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr "\tea_ver=<ea_version (1 ou 2)>\n"
+
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "\treadahead_kb=<tamanho do buffer>\n"
+
+#: e2fsck/unix.c:790
+#, c-format
+msgid ""
+"Syntax error in e2fsck config file (%s, line #%d)\n"
+"\t%s\n"
+msgstr ""
+"Erro de sintaxe no ficheiro de configuração do e2fsck (%s, linha #%d)\n"
+"\t%s\n"
+
+#: e2fsck/unix.c:863
+#, c-format
+msgid "Error validating file descriptor %d: %s\n"
+msgstr "Erro ao validar o descritor do ficheiro %d: %s\n"
+
+#: e2fsck/unix.c:867
+msgid "Invalid completion information file descriptor"
+msgstr "Descritor de ficheiro de informação de conclusão inválido"
+
+#: e2fsck/unix.c:882
+msgid "Only one of the options -p/-a, -n or -y may be specified."
+msgstr "Só pode especificar uma das opções -p/-a, -n ou -y."
+
+#: e2fsck/unix.c:903
+#, c-format
+msgid "The -t option is not supported on this version of e2fsck.\n"
+msgstr "A opção -t não é suportada nesta versão do e2fsck.\n"
+
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
+#, c-format
+msgid "Unable to resolve '%s'"
+msgstr "Impossível resolver \"%s\""
+
+#: e2fsck/unix.c:991
+msgid "The -n and -D options are incompatible."
+msgstr "As opções -n e -D são incompatíveis."
+
+#: e2fsck/unix.c:996
+msgid "The -n and -c options are incompatible."
+msgstr "As opções -n e -c são incompatíveis."
+
+#: e2fsck/unix.c:1001
+msgid "The -n and -l/-L options are incompatible."
+msgstr "As opções -n e -l/-L são incompatíveis."
+
+#: e2fsck/unix.c:1025
+msgid "The -D and -E fixes_only options are incompatible."
+msgstr "As opções -D e -E fixes_only são incompatíveis."
+
+#: e2fsck/unix.c:1031
+msgid "The -E bmap2extent and fixes_only options are incompatible."
+msgstr "As opções -E bmap2extent e fixes_only são incompatíveis."
+
+#: e2fsck/unix.c:1095
+msgid "The -c and the -l/-L options may not be both used at the same time.\n"
+msgstr "As opções -c e -l/-L não podem ser usadas ao mesmo tempo.\n"
+
+#: e2fsck/unix.c:1142
+#, c-format
+msgid ""
+"E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
+"\n"
+msgstr ""
+"E2FSCK_JBD_DEBUG \"%s\" não é inteiro\n"
+"\n"
+
+#: e2fsck/unix.c:1151
+#, c-format
+msgid ""
+"\n"
+"Invalid non-numeric argument to -%c (\"%s\")\n"
+"\n"
+msgstr ""
+"\n"
+"Argumento não-numérico inválido para -%c (\"%s\")\n"
+"\n"
+
+#: e2fsck/unix.c:1242
+#, c-format
+msgid "MMP interval is %u seconds and total wait time is %u seconds. Please wait...\n"
+msgstr "Intervalo MMP é %u segundos e o tempo total de espera é %u segundos. Por favor aguarde...\n"
+
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
+msgid "while checking MMP block"
+msgstr "ao verificar bloco MMP"
+
+#: e2fsck/unix.c:1266
+#, c-format
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp %s'\n"
+msgstr ""
+"Se tem a certeza de que o sistema de ficheiros não está em uso em nenhum nó, execute:\n"
+"\"tune2fs -f -E clear_mmp %s\"\n"
+
+#: e2fsck/unix.c:1282
+msgid "while reading MMP block"
+msgstr "ao ler bloco MMP"
+
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"A sobresscrever sistema de ficheiros existente; pode ser desfeito com o comando:\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
+#, c-format
+msgid "while trying to delete %s"
+msgstr "ao tentar eliminar %s"
+
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
+msgid "while trying to setup undo file\n"
+msgstr "ao tentar configurar o ficheiro de desfazer\n"
+
+#: e2fsck/unix.c:1412
+msgid "Error: ext2fs library version out of date!\n"
+msgstr "Erro: versão da biblioteca ext2fs fora de prazo!\n"
+
+#: e2fsck/unix.c:1419
+msgid "while trying to initialize program"
+msgstr "ao tentar inicializar o programa"
+
+#: e2fsck/unix.c:1456
+#, c-format
+msgid "\tUsing %s, %s\n"
+msgstr "\tA usar %s, %s\n"
+
+#: e2fsck/unix.c:1468
+msgid "need terminal for interactive repairs"
+msgstr "precisa do terminal para reparações interactivas"
+
+#: e2fsck/unix.c:1529
+#, c-format
+msgid "%s: %s trying backup blocks...\n"
+msgstr "%s: %s a tentar blocos de segurança...\n"
+
+#: e2fsck/unix.c:1531
+msgid "Superblock invalid,"
+msgstr "Super-bloco inválido,"
+
+#: e2fsck/unix.c:1532
+msgid "Group descriptors look bad..."
+msgstr "Descritores de grupo parecem mal..."
+
+#: e2fsck/unix.c:1542
+#, c-format
+msgid "%s: %s while using the backup blocks"
+msgstr "%s: %s ao usar os blocos de segurança"
+
+#: e2fsck/unix.c:1546
+#, c-format
+msgid "%s: going back to original superblock\n"
+msgstr "%s: a regressar ao super-bloco original\n"
+
+#: e2fsck/unix.c:1575
+msgid ""
+"The filesystem revision is apparently too high for this version of e2fsck.\n"
+"(Or the filesystem superblock is corrupt)\n"
+"\n"
+msgstr ""
+"Aparentemente, a revisão do sistema de ficheiros é muito alta para esta\n"
+"versão do e2fsck (ou o super-bloco do sistema de ficheiros está corrompido).\n"
+"\n"
+
+#: e2fsck/unix.c:1582
+msgid "Could this be a zero-length partition?\n"
+msgstr "Poderá esta ser uma partição de tamanho zero?\n"
+
+#: e2fsck/unix.c:1584
+#, c-format
+msgid "You must have %s access to the filesystem or be root\n"
+msgstr "Tem de ter acesso %s ao sistema de ficheiros ou ser root\n"
+
+#: e2fsck/unix.c:1590
+msgid "Possibly non-existent or swap device?\n"
+msgstr "Possível dispositivo não-existente ou swap?\n"
+
+#: e2fsck/unix.c:1592
+msgid "Filesystem mounted or opened exclusively by another program?\n"
+msgstr "Sistema de ficheiros montado ou aberto exclusivamente por outro programa?\n"
+
+#: e2fsck/unix.c:1596
+msgid "Possibly non-existent device?\n"
+msgstr "Possível dispositivo não-existente?\n"
+
+#: e2fsck/unix.c:1599
+msgid ""
+"Disk write-protected; use the -n option to do a read-only\n"
+"check of the device.\n"
+msgstr ""
+"Disco protegido contra escrita; use a opção -n para fazer\n"
+"uma verificação só-de-leitura do dispositivo.\n"
+
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr "%s: a tentar carregar o super-bloco, apesar dos erros...\n"
+
+#: e2fsck/unix.c:1688
+msgid "Get a newer version of e2fsck!"
+msgstr "Obtenha uma nova versão do e2fsck!"
+
+#: e2fsck/unix.c:1749
+#, c-format
+msgid "while checking journal for %s"
+msgstr "ao verificar diário para %s"
+
+#: e2fsck/unix.c:1752
+msgid "Cannot proceed with file system check"
+msgstr "Impossível prosseguir com a verificação do sistema de ficheiros"
+
+#: e2fsck/unix.c:1763
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
+msgstr "Aviso: a saltar recuperação do diário por estar em curso uma verificação só-de-leitura do sistema de ficheiros.\n"
+
+#: e2fsck/unix.c:1775
+#, c-format
+msgid "unable to set superblock flags on %s\n"
+msgstr "impossível definir bandeiras do super-bloco em %s\n"
+
+#: e2fsck/unix.c:1781
+#, c-format
+msgid "Journal checksum error found in %s\n"
+msgstr "Encontrado erro de checksum de diário em %s\n"
+
+#: e2fsck/unix.c:1785
+#, c-format
+msgid "Journal corrupted in %s\n"
+msgstr "Diário corrompido em %s\n"
+
+#: e2fsck/unix.c:1789
+#, c-format
+msgid "while recovering journal of %s"
+msgstr "ao recuperar diário de %s"
+
+#: e2fsck/unix.c:1811
+#, c-format
+msgid "%s has unsupported feature(s):"
+msgstr "%s tem funcionalidades não suportadas:"
+
+#: e2fsck/unix.c:1826
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "%s tem codificação não suportada: %0x\n"
+
+#: e2fsck/unix.c:1876
+#, c-format
+msgid "%s: %s while reading bad blocks inode\n"
+msgstr "%s: %s ao ler inode de maus blocos\n"
+
+#: e2fsck/unix.c:1879
+msgid "This doesn't bode well, but we'll try to go on...\n"
+msgstr "Isto não augura nada de bom, mas vamos tentar continuar...\n"
+
+#: e2fsck/unix.c:1919
+#, c-format
+msgid "Creating journal (%d blocks): "
+msgstr "A criar diário (%d blocos): "
+
+#: e2fsck/unix.c:1929
+msgid " Done.\n"
+msgstr " Feito.\n"
+
+#: e2fsck/unix.c:1931
+msgid ""
+"\n"
+"*** journal has been regenerated ***\n"
+msgstr ""
+"\n"
+"*** o diário foi regenerado ***\n"
+
+#: e2fsck/unix.c:1937
+msgid "aborted"
+msgstr "abortado"
+
+#: e2fsck/unix.c:1939
+#, c-format
+msgid "%s: e2fsck canceled.\n"
+msgstr "%s: e2fsck cancelado.\n"
+
+#: e2fsck/unix.c:1966
+msgid "Restarting e2fsck from the beginning...\n"
+msgstr "A recomeçar o e2fsck desde o princípio...\n"
+
+#: e2fsck/unix.c:1970
+msgid "while resetting context"
+msgstr "ao repor o contexto"
+
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** ERROS DO SISTEMA DE FICHEIROS CORRIGIDOS *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: o sistema de ficheiros foi modificado.\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM WAS MODIFIED *****\n"
+msgstr ""
+"\n"
+"%s: ***** O SISTEMA DE FICHEIROS FOI MODIFICADO *****\n"
+
+#: e2fsck/unix.c:2040
+#, c-format
+msgid "%s: ***** REBOOT SYSTEM *****\n"
+msgstr "%s: ***** REINICIAR O SISTEMA *****\n"
+
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
+#, c-format
+msgid ""
+"\n"
+"%s: ********** WARNING: Filesystem still has errors **********\n"
+"\n"
+msgstr ""
+"\n"
+"%s: ********** AVISO: o sistema de ficheiros ainda tem erros **********\n"
+"\n"
+
+#: e2fsck/util.c:196 misc/util.c:93
+msgid "yY"
+msgstr "sS"
+
+#: e2fsck/util.c:197 misc/util.c:112
+msgid "nN"
+msgstr "nN"
+
+#: e2fsck/util.c:198
+msgid "aA"
+msgstr "tT"
+
+#: e2fsck/util.c:202
+msgid " ('a' enables 'yes' to all) "
+msgstr " ('t' activa \"sim\" para todos) "
+
+#: e2fsck/util.c:219
+msgid "<y>"
+msgstr "<s>"
+
+#: e2fsck/util.c:221
+msgid "<n>"
+msgstr "<n>"
+
+#: e2fsck/util.c:223
+msgid " (y/n)"
+msgstr " (s/n)"
+
+#: e2fsck/util.c:246
+msgid "cancelled!\n"
+msgstr "cancelado!\n"
+
+#: e2fsck/util.c:279
+msgid "yes to all\n"
+msgstr "sim para todos\n"
+
+#: e2fsck/util.c:281
+msgid "yes\n"
+msgstr "sim\n"
+
+#: e2fsck/util.c:283
+msgid "no\n"
+msgstr "não\n"
+
+#: e2fsck/util.c:293
+#, c-format
+msgid ""
+"%s? no\n"
+"\n"
+msgstr ""
+"%s? não\n"
+"\n"
+
+#: e2fsck/util.c:297
+#, c-format
+msgid ""
+"%s? yes\n"
+"\n"
+msgstr ""
+"%s? sim\n"
+"\n"
+
+#: e2fsck/util.c:301
+msgid "yes"
+msgstr "sim"
+
+#: e2fsck/util.c:301
+msgid "no"
+msgstr "não"
+
+#: e2fsck/util.c:317
+#, c-format
+msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
+msgstr "e2fsck_read_bitmaps: blocos de bitmap ilegais para %s"
+
+#: e2fsck/util.c:322
+msgid "reading inode and block bitmaps"
+msgstr "a ler bitmaps de inode e bloco"
+
+#: e2fsck/util.c:334
+#, c-format
+msgid "while retrying to read bitmaps for %s"
+msgstr "ao tentar ler bitmaps para %s"
+
+#: e2fsck/util.c:346
+msgid "writing block and inode bitmaps"
+msgstr "escrever bitmaps de bloco e inode"
+
+#: e2fsck/util.c:351
+#, c-format
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr "ao reescrever bitmaps de bloco e inode para %s"
+
+#: e2fsck/util.c:363
+#, c-format
+msgid ""
+"\n"
+"\n"
+"%s: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.\n"
+"\t(i.e., without -a or -p options)\n"
+msgstr ""
+"\n"
+"\n"
+"%s: INCONSISTENCIA INESPERADA; EXECUTE fsck MANUALMENTE.\n"
+"\t(i.e., sem opções -a ou -p)\n"
+
+#: e2fsck/util.c:444
+#, c-format
+msgid "Memory used: %luk/%luk (%luk/%luk), "
+msgstr "Memória usada: %luk/%luk (%luk/%luk), "
+
+#: e2fsck/util.c:448
+#, c-format
+msgid "Memory used: %lu, "
+msgstr "Memória usada: %lu, "
+
+#: e2fsck/util.c:455
+#, c-format
+msgid "time: %5.2f/%5.2f/%5.2f\n"
+msgstr "hora: %5.2f/%5.2f/%5.2f\n"
+
+#: e2fsck/util.c:460
+#, c-format
+msgid "elapsed time: %6.3f\n"
+msgstr "tempo decorrido: %6.3f\n"
+
+#: e2fsck/util.c:495 e2fsck/util.c:509
+#, c-format
+msgid "while reading inode %lu in %s"
+msgstr "ao ler inode %lu em %s"
+
+#: e2fsck/util.c:523 e2fsck/util.c:536
+#, c-format
+msgid "while writing inode %lu in %s"
+msgstr "ao escrever inode %lu em %s"
+
+#: e2fsck/util.c:792
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "INCONSISTENCIA INESPERADA: o sistema de ficheiros está a ser modificado enquanto o fsck está em execução.\n"
+
+#: misc/badblocks.c:75
+msgid "done                                                 \n"
+msgstr "feito                                                \n"
+
+#: misc/badblocks.c:100
+#, c-format
+msgid ""
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 ""
+"Uso: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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"
+"       dispositivo [last_block [first_block]]\n"
+
+#: misc/badblocks.c:111
+#, c-format
+msgid ""
+"%s: The -n and -w options are mutually exclusive.\n"
+"\n"
+msgstr ""
+"%s: as opções -n e -w são mutuamente exclusivas.\n"
+"\n"
+
+#: misc/badblocks.c:229
+#, c-format
+msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
+msgstr "%6.2f%% feito, %s decorrido. (%d/%d/%d erros)"
+
+#: misc/badblocks.c:337
+msgid "Testing with random pattern: "
+msgstr "A testar com padrão aleatório: "
+
+#: misc/badblocks.c:355
+msgid "Testing with pattern 0x"
+msgstr "A testar com padrão 0x"
+
+#: misc/badblocks.c:387 misc/badblocks.c:460
+msgid "during seek"
+msgstr "durante a procura"
+
+#: misc/badblocks.c:398
+#, c-format
+msgid "Weird value (%ld) in do_read\n"
+msgstr "Valor esquisito (%ld) em do_read\n"
+
+#: misc/badblocks.c:485
+msgid "during ext2fs_sync_device"
+msgstr "durante ext2fs_sync_device"
+
+#: misc/badblocks.c:505 misc/badblocks.c:767
+msgid "while beginning bad block list iteration"
+msgstr "ao iniciar iteração da lista de maus blocos"
+
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
+msgid "while allocating buffers"
+msgstr "ao alocar buffers"
+
+#: misc/badblocks.c:524
+#, c-format
+msgid "Checking blocks %lu to %lu\n"
+msgstr "A verificar blocos %lu a %lu\n"
+
+#: misc/badblocks.c:529
+msgid "Checking for bad blocks in read-only mode\n"
+msgstr "A procurar maus blocos em modo só-de-leitura\n"
+
+#: misc/badblocks.c:538
+msgid "Checking for bad blocks (read-only test): "
+msgstr "A procurar maus blocos (teste só-de-leitura): "
+
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
+msgid "Too many bad blocks, aborting test\n"
+msgstr "Demasiados maus blocos, a abortar o teste\n"
+
+#: misc/badblocks.c:627
+msgid "Checking for bad blocks in read-write mode\n"
+msgstr "A procurar maus blocos em modo leitura-escrita\n"
+
+#: misc/badblocks.c:629 misc/badblocks.c:791
+#, c-format
+msgid "From block %lu to %lu\n"
+msgstr "Do bloco %lu ao %lu\n"
+
+#: misc/badblocks.c:684
+msgid "Reading and comparing: "
+msgstr "A ler e comparar: "
+
+#: misc/badblocks.c:790
+msgid "Checking for bad blocks in non-destructive read-write mode\n"
+msgstr "A procurar maus blocos em modo leitura-escrita não destrutivo\n"
+
+#: misc/badblocks.c:796
+msgid "Checking for bad blocks (non-destructive read-write test)\n"
+msgstr "A procurar maus blocos (teste leitura-escrita não destrutivo)\n"
+
+#: misc/badblocks.c:803
+msgid ""
+"\n"
+"Interrupt caught, cleaning up\n"
+msgstr ""
+"\n"
+"Apanhado um interrupt, a limpar\n"
+
+#: misc/badblocks.c:886
+#, c-format
+msgid "during test data write, block %lu"
+msgstr "durante escrita de dados de teste, bloco %lu"
+
+#: misc/badblocks.c:1007 misc/util.c:134
+#, c-format
+msgid "%s is mounted; "
+msgstr "%s está montado; "
+
+#: misc/badblocks.c:1009
+msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
+msgstr "badblocks forçado mesmo assim.  Espera-se que /etc/mtab esteja incorrecta.\n"
+
+#: misc/badblocks.c:1014
+msgid "it's not safe to run badblocks!\n"
+msgstr "não é seguro executar badblocks!\n"
+
+#: misc/badblocks.c:1019 misc/util.c:145
+#, c-format
+msgid "%s is apparently in use by the system; "
+msgstr "%s aparenta estar em uso pelo sistema; "
+
+#: misc/badblocks.c:1022
+msgid "badblocks forced anyway.\n"
+msgstr "badblocks forçado mesmo assim.\n"
+
+#: misc/badblocks.c:1042
+#, c-format
+msgid "invalid %s - %s"
+msgstr "%s - %s inválido"
+
+#: misc/badblocks.c:1136
+#, c-format
+msgid "Too big max bad blocks count %u - maximum is %u"
+msgstr "Total de máximo de maus blocos %u muito grande - o máximo é %u"
+
+#: misc/badblocks.c:1163
+#, c-format
+msgid "can't allocate memory for test_pattern - %s"
+msgstr "impossível alocae memória para test_pattern - %s"
+
+#: misc/badblocks.c:1193
+msgid "Maximum of one test_pattern may be specified in read-only mode"
+msgstr "Máximo de um test_pattern pode ter sido especificado em modo só-de-leitura"
+
+#: misc/badblocks.c:1199
+msgid "Random test_pattern is not allowed in read-only mode"
+msgstr "test_pattern aleatório não é permitido em modo só-de-leitura"
+
+#: misc/badblocks.c:1213
+msgid ""
+"Couldn't determine device size; you must specify\n"
+"the size manually\n"
+msgstr ""
+"Impossível determinar o tamanho do dispositivo; tem de o\n"
+"especificar manualmente\n"
+
+#: misc/badblocks.c:1219
+msgid "while trying to determine device size"
+msgstr "ao tentar determinar o tamanho do dispositivo"
+
+#: misc/badblocks.c:1224
+msgid "last block"
+msgstr "último bloco"
+
+#: misc/badblocks.c:1230
+msgid "first block"
+msgstr "primeiro bloco"
+
+#: misc/badblocks.c:1233
+#, c-format
+msgid "invalid starting block (%llu): must be less than %llu"
+msgstr "bloco inicial inválido (%llu): tem de ser menor que %llu"
+
+#: misc/badblocks.c:1240
+#, c-format
+msgid "invalid end block (%llu): must be 32-bit value"
+msgstr "bloco final inválido (%llu): tem de ser um valor 32-bit"
+
+#: misc/badblocks.c:1296
+msgid "while creating in-memory bad blocks list"
+msgstr "ao criar lista de maus blocos em memória"
+
+#: misc/badblocks.c:1305
+msgid "input file - bad format"
+msgstr "ficheiro de entrada - mau formato"
+
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
+msgid "while adding to in-memory bad block list"
+msgstr "ao adicionar à lista de maus blocos em memória"
+
+#: misc/badblocks.c:1347
+#, c-format
+msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
+msgstr "Passo concluído, encontrados %u maus blocos. (%d/%d/%d erros)\n"
+
+#: misc/chattr.c:89
+#, c-format
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "Uso: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v versão] ficheiros...\n"
+
+#: misc/chattr.c:160
+#, c-format
+msgid "bad project - %s\n"
+msgstr "projecto errado - %s\n"
+
+#: misc/chattr.c:174
+#, c-format
+msgid "bad version - %s\n"
+msgstr "versão errada - %s\n"
+
+#: misc/chattr.c:220 misc/lsattr.c:127
+#, c-format
+msgid "while trying to stat %s"
+msgstr "ao tentar analisar %s"
+
+#: misc/chattr.c:227
+#, c-format
+msgid "while reading flags on %s"
+msgstr "ao ler bandeiras em %s"
+
+#: misc/chattr.c:232 misc/chattr.c:244
+#, c-format
+msgid "Flags of %s set as "
+msgstr "Bandeiras de %s definidas como "
+
+#: misc/chattr.c:253
+#, c-format
+msgid "while setting flags on %s"
+msgstr "ao definir bandeiras em %s"
+
+#: misc/chattr.c:261
+#, c-format
+msgid "Version of %s set as %lu\n"
+msgstr "Versão de %s definida como %lu\n"
+
+#: misc/chattr.c:265
+#, c-format
+msgid "while setting version on %s"
+msgstr "ao definir versão em %s"
+
+#: misc/chattr.c:272
+#, c-format
+msgid "Project of %s set as %lu\n"
+msgstr "Projecto de %s definido como %lu\n"
+
+#: misc/chattr.c:276
+#, c-format
+msgid "while setting project on %s"
+msgstr "ao definir projecto em %s"
+
+#: misc/chattr.c:298
+msgid "Couldn't allocate path variable in chattr_dir_proc"
+msgstr "Impossível alocar variável de caminho em chattr_dir_proc"
+
+#: misc/chattr.c:338
+msgid "= is incompatible with - and +\n"
+msgstr "= é incompatível com - e +\n"
+
+#: misc/chattr.c:346
+msgid "Must use '-v', =, - or +\n"
+msgstr "Deve usar \"-v\", =, - ou +\n"
+
+#: misc/create_inode.c:80 misc/create_inode.c:119
+#, c-format
+msgid "while reading inode %u"
+msgstr "ao ler inode %u"
+
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
+msgid "while expanding directory"
+msgstr "ao expandir pasta"
+
+#: misc/create_inode.c:97
+#, c-format
+msgid "while linking \"%s\""
+msgstr "ao ligar \"%s\""
+
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
+#, c-format
+msgid "while writing inode %u"
+msgstr "ao escrever inode %u"
+
+#: misc/create_inode.c:152 misc/create_inode.c:176
+#, c-format
+msgid "while listing attributes of \"%s\""
+msgstr "ao listar atributos de \"%s\""
+
+#: misc/create_inode.c:163
+#, c-format
+msgid "while opening inode %u"
+msgstr "ao abrir inode %u"
+
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
+msgid "while allocating memory"
+msgstr "ao alocar memória"
+
+#: misc/create_inode.c:189 misc/create_inode.c:205
+#, c-format
+msgid "while reading attribute \"%s\" of \"%s\""
+msgstr "ao ler atributo \"%s\" de \"%s\""
+
+#: misc/create_inode.c:214
+#, c-format
+msgid "while writing attribute \"%s\" to inode %u"
+msgstr "ao escrever atributo \"%s\" no inode %u"
+
+#: misc/create_inode.c:224
+#, c-format
+msgid "while closing inode %u"
+msgstr "ao fechar inode %u"
+
+#: misc/create_inode.c:275
+#, c-format
+msgid "while allocating inode \"%s\""
+msgstr "ao alocar inode \"%s\""
+
+#: misc/create_inode.c:294
+#, c-format
+msgid "while creating inode \"%s\""
+msgstr "ao criar inode \"%s\""
+
+#: misc/create_inode.c:360
+#, c-format
+msgid "while creating symlink \"%s\""
+msgstr "ao criar ligação simbólica \"%s\""
+
+#: misc/create_inode.c:378 misc/create_inode.c:963
+#, c-format
+msgid "while looking up \"%s\""
+msgstr "ao procurar \"%s\""
+
+#: misc/create_inode.c:398
+#, c-format
+msgid "while creating directory \"%s\""
+msgstr "ao criar pasta \"%s\""
+
+#: misc/create_inode.c:627
+#, c-format
+msgid "while opening \"%s\" to copy"
+msgstr "ao abrir \"%s\" para cópia"
+
+#: misc/create_inode.c:805
+#, c-format
+msgid "while changing working directory to \"%s\""
+msgstr "ao mudar pasta de trabalho para \"%s\""
+
+#: misc/create_inode.c:815
+#, c-format
+msgid "while scanning directory \"%s\""
+msgstr "ao analisar pasta \"%s\""
+
+#: misc/create_inode.c:825
+#, c-format
+msgid "while lstat \"%s\""
+msgstr "ao lstat \"%s\""
+
+#: misc/create_inode.c:875
+#, c-format
+msgid "while creating special file \"%s\""
+msgstr "ao criar o ficheiro especial \"%s\""
+
+#: misc/create_inode.c:884
+msgid "malloc failed"
+msgstr "malloc falhou"
+
+#: misc/create_inode.c:892
+#, c-format
+msgid "while trying to read link \"%s\""
+msgstr "ao tentar ler a ligação \"%s\""
+
+#: misc/create_inode.c:899
+msgid "symlink increased in size between lstat() and readlink()"
+msgstr "a ligação simbólica aumentou de tamanho entre lstat() e readlink()"
+
+#: misc/create_inode.c:910
+#, c-format
+msgid "while writing symlink\"%s\""
+msgstr "ao escrever ligação simbólica \"%s\""
+
+#: misc/create_inode.c:921
+#, c-format
+msgid "while writing file \"%s\""
+msgstr "ao escrever ficheiro \"%s\""
+
+#: misc/create_inode.c:934
+#, c-format
+msgid "while making dir \"%s\""
+msgstr "ao fazer pasta \"%s\""
+
+#: misc/create_inode.c:952
+msgid "while changing directory"
+msgstr "ao mudar de pasta"
+
+#: misc/create_inode.c:958
+#, c-format
+msgid "ignoring entry \"%s\""
+msgstr "a ignorar entrada \"%s\""
+
+#: misc/create_inode.c:971
+#, c-format
+msgid "while setting inode for \"%s\""
+msgstr "ao definir inode para \"%s\""
+
+#: misc/create_inode.c:978
+#, c-format
+msgid "while setting xattrs for \"%s\""
+msgstr "ao definir xattrs para \"%s\""
+
+#: misc/create_inode.c:1004
+msgid "while saving inode data"
+msgstr "ao gravar dados do inode"
+
+#: misc/dumpe2fs.c:56
+#, c-format
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "Uso: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] dispositivo\n"
+
+#: misc/dumpe2fs.c:159
+msgid "blocks"
+msgstr "blocos"
+
+#: misc/dumpe2fs.c:168
+msgid "clusters"
+msgstr "clusters"
+
+#: misc/dumpe2fs.c:219
+#, c-format
+msgid "Group %lu: (Blocks "
+msgstr "Grupo %lu: (blocos "
+
+#: misc/dumpe2fs.c:226
+#, c-format
+msgid " csum 0x%04x"
+msgstr " csum 0x%04x"
+
+#: misc/dumpe2fs.c:228
+#, c-format
+msgid " (EXPECTED 0x%04x)"
+msgstr " (ESPERADO 0x%04x)"
+
+#: misc/dumpe2fs.c:233
+#, c-format
+msgid "  %s superblock at "
+msgstr "  %s super-bloco em "
+
+#: misc/dumpe2fs.c:234
+msgid "Primary"
+msgstr "Primário"
+
+#: misc/dumpe2fs.c:234
+msgid "Backup"
+msgstr "Segurança"
+
+#: misc/dumpe2fs.c:238
+msgid ", Group descriptors at "
+msgstr ", descritores de grupo em "
+
+#: misc/dumpe2fs.c:242
+msgid ""
+"\n"
+"  Reserved GDT blocks at "
+msgstr ""
+"\n"
+"  Blocos GDT reservados em "
+
+#: misc/dumpe2fs.c:249
+msgid " Group descriptor at "
+msgstr " descritor de grupo em "
+
+#: misc/dumpe2fs.c:255
+msgid "  Block bitmap at "
+msgstr "  bitmap de bloco em "
+
+#: misc/dumpe2fs.c:260 misc/dumpe2fs.c:271
+#, c-format
+msgid ", csum 0x%08x"
+msgstr ", csum 0x%08x"
+
+#: misc/dumpe2fs.c:263
+msgid ","
+msgstr ","
+
+#: misc/dumpe2fs.c:265
+msgid ""
+"\n"
+" "
+msgstr ""
+"\n"
+" "
+
+#: misc/dumpe2fs.c:266
+msgid " Inode bitmap at "
+msgstr " bitmap de inode em "
+
+#: misc/dumpe2fs.c:273
+msgid ""
+"\n"
+"  Inode table at "
+msgstr ""
+"\n"
+"  tabela de inode em "
+
+#: misc/dumpe2fs.c:279
+#, c-format
+msgid ""
+"\n"
+"  %u free %s, %u free inodes, %u directories%s"
+msgstr ""
+"\n"
+"  %u livre %s, %u inodes livres, %u pastas%s"
+
+#: misc/dumpe2fs.c:286
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u inodes não usados\n"
+
+#: misc/dumpe2fs.c:289
+msgid "  Free blocks: "
+msgstr "  Blocos livres: "
+
+#: misc/dumpe2fs.c:304
+msgid "  Free inodes: "
+msgstr "  inodes livres: "
+
+#: misc/dumpe2fs.c:340
+msgid "while printing bad block list"
+msgstr "ao imprimir lista de maus blocos"
+
+#: misc/dumpe2fs.c:346
+#, c-format
+msgid "Bad blocks: %u"
+msgstr "Maus blocos: %u"
+
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
+msgid "while reading journal inode"
+msgstr "ao ler inode de diário"
+
+#: misc/dumpe2fs.c:379
+msgid "while opening journal inode"
+msgstr "ao abrir inode de diário"
+
+#: misc/dumpe2fs.c:385
+msgid "while reading journal super block"
+msgstr "ao ler super-bloco de diário"
+
+#: misc/dumpe2fs.c:392
+msgid "Journal superblock magic number invalid!\n"
+msgstr "Número mágico do super-bloco de diário inválido!\n"
+
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
+msgid "while reading journal superblock"
+msgstr "ao ler super-bloco de diário"
+
+#: misc/dumpe2fs.c:417
+msgid "Couldn't find journal superblock magic numbers"
+msgstr "Impossível encontrar números mágicos do super-bloco de diário"
+
+#: misc/dumpe2fs.c:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "falha ao alocar buffer MMP\n"
+
+#: misc/dumpe2fs.c:479
+#, c-format
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "a ler bloco MMP %llu de \"%s\"\n"
+
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
+msgid "Couldn't allocate memory to parse options!\n"
+msgstr "Impossível alocar memória para processar opções!\n"
+
+#: misc/dumpe2fs.c:533
+#, c-format
+msgid "Invalid superblock parameter: %s\n"
+msgstr "Parâmetro de super-bloco inválido: %s\n"
+
+#: misc/dumpe2fs.c:548
+#, c-format
+msgid "Invalid blocksize parameter: %s\n"
+msgstr "Parâmetro de tamanho de bloco inválido: %s\n"
+
+#: misc/dumpe2fs.c:559
+#, c-format
+msgid ""
+"\n"
+"Bad extended option(s) specified: %s\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tsuperblock=<superblock number>\n"
+"\tblocksize=<blocksize>\n"
+msgstr ""
+"\n"
+"Especificou más opções estendidas: %s\n"
+"\n"
+"Opções estendidas são separadas por vírgulas e podem receber um argumento\n"
+"\tiniciado com um sinal de igual (\"=\").\n"
+"\n"
+"As opções válidas são:\n"
+"\tsuperblock=<número do super-bloco>\n"
+"\tblocksize=<tamanho do bloco>\n"
+
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
+#, c-format
+msgid "\tUsing %s\n"
+msgstr "\tA usar %s\n"
+
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
+msgid "Couldn't find valid filesystem superblock.\n"
+msgstr "Impossível encontrar um super-bloco de sistema de ficheiros válido.\n"
+
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s: funcionalidade MMP não activada.\n"
+
+#: misc/dumpe2fs.c:747
+#, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "ao tentar ler bitmaps de \"%s\"\n"
+
+#: misc/dumpe2fs.c:756
+msgid ""
+"*** Run e2fsck now!\n"
+"\n"
+msgstr ""
+"*** Executar e2fsck agora!\n"
+"\n"
+
+#: misc/e2image.c:107
+#, c-format
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
+msgstr "Uso: %s [ -r|Q ] [ -f ] [ -b super-bloco ] [ -B tam-bloco][ -fr ] dispositivo ficheiro-imagem\n"
+
+#: misc/e2image.c:110
+#, c-format
+msgid "       %s -I device image-file\n"
+msgstr "       %s -I dispositivo ficheiro-imagem\n"
+
+#: misc/e2image.c:111
+#, c-format
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+msgstr "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
+msgid "while allocating buffer"
+msgstr "ao alocar o buffer"
+
+#: misc/e2image.c:181
+#, c-format
+msgid "Writing block %llu\n"
+msgstr "A escrever bloco %llu\n"
+
+#: misc/e2image.c:195
+#, c-format
+msgid "error writing block %llu"
+msgstr "erro ao escrever bloco %llu"
+
+#: misc/e2image.c:198
+msgid "error in generic_write()"
+msgstr "erro em generic_write()"
+
+#: misc/e2image.c:215
+msgid "Error: header size is bigger than wrt_size\n"
+msgstr "Erro: tamanho de cabeçalho maior que wrt_size\n"
+
+#: misc/e2image.c:220
+msgid "Couldn't allocate header buffer\n"
+msgstr "Impossível alocar buffer de cabeçalho\n"
+
+#: misc/e2image.c:248
+msgid "while writing superblock"
+msgstr "ao escrever super-bloco"
+
+#: misc/e2image.c:257
+msgid "while writing inode table"
+msgstr "ao escrever tabela de inodes"
+
+#: misc/e2image.c:265
+msgid "while writing block bitmap"
+msgstr "ao escrever bitmap de bloco"
+
+#: misc/e2image.c:273
+msgid "while writing inode bitmap"
+msgstr "ao escrever bitmap de inode"
+
+#: misc/e2image.c:515
+#, c-format
+msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
+msgstr "Bloco de pasta corrompido %llu: mau rec_len (%d)\n"
+
+#: misc/e2image.c:527
+#, c-format
+msgid "Corrupt directory block %llu: bad name_len (%d)\n"
+msgstr "Bloco de pasta corrompido %llu: mau name_len (%d)\n"
+
+#: misc/e2image.c:568
+#, c-format
+msgid "%llu / %llu blocks (%d%%)"
+msgstr "%llu / %llu blocos (%d%%)"
+
+#: misc/e2image.c:599 misc/e2image.c:639
+msgid "Copying "
+msgstr "A copiar "
+
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+msgstr "Parar agora destruirá o sistema de ficheiros, interrompa novamente se tem a certeza\n"
+
+#: misc/e2image.c:662
+#, c-format
+msgid " %s remaining at %.2f MB/s"
+msgstr " %s restante em %.2f MB/s"
+
+#: misc/e2image.c:674 misc/e2image.c:1204
+#, c-format
+msgid "error reading block %llu"
+msgstr "erro ao ler bloco %llu"
+
+#: misc/e2image.c:728
+#, c-format
+msgid "Copied %llu / %llu blocks (%d%%) in %s "
+msgstr "Copiados %llu / %llu blocos (%d%%) em %s "
+
+#: misc/e2image.c:732
+#, c-format
+msgid "at %.2f MB/s"
+msgstr "em %.2f MB/s"
+
+#: misc/e2image.c:768
+msgid "while allocating l1 table"
+msgstr "ao alocar tabela l1"
+
+#: misc/e2image.c:813
+msgid "while allocating l2 cache"
+msgstr "ao alocar cache l2"
+
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
+msgstr "Aviso: ainda há tabelas na cache ao Pôr a cache, perder-se-ão dados, pelo que a imagem poderá não ser válida.\n"
+
+#: misc/e2image.c:1161
+msgid "while allocating ext2_qcow2_image"
+msgstr "ao alocar ext2_qcow2_image"
+
+#: misc/e2image.c:1168
+msgid "while initializing ext2_qcow2_image"
+msgstr "ao inicializar ext2_qcow2_image"
+
+#: misc/e2image.c:1227 misc/e2image.c:1245
+msgid "Programming error: multiple sequential refcount blocks created!\n"
+msgstr "Erro de programação: criados múltiplos blocos refcount sequenciais!\n"
+
+#: misc/e2image.c:1286
+msgid "while allocating block bitmap"
+msgstr "ao alocar bitmap de bloco"
+
+#: misc/e2image.c:1295
+msgid "while allocating scramble block bitmap"
+msgstr "ao alocar bitmap de bloco baralhado"
+
+#: misc/e2image.c:1318
+msgid "Scanning inodes...\n"
+msgstr "A analisar inodes...\n"
+
+#: misc/e2image.c:1330
+msgid "Can't allocate block buffer"
+msgstr "Impossível alocar buffer de bloco"
+
+#: misc/e2image.c:1369 misc/e2image.c:1383
+#, c-format
+msgid "while iterating over inode %u"
+msgstr "ao iterar sobre inode %u"
+
+#: misc/e2image.c:1415
+msgid "Raw and qcow2 images cannot be installed"
+msgstr "Não se podem instalar imagens raw e qcow2"
+
+#: misc/e2image.c:1437
+msgid "error reading bitmaps"
+msgstr "erro ao ler bitmaps"
+
+#: misc/e2image.c:1449
+msgid "while opening device file"
+msgstr "ao abrir ficheiro de dispositivo"
+
+#: misc/e2image.c:1460
+msgid "while restoring the image table"
+msgstr "ao restaurar a tabela da imagem"
+
+#: misc/e2image.c:1565
+msgid "-a option can only be used with raw or QCOW2 images."
+msgstr "a opção -a só pode ser usada com imagens raw ou QCOW2."
+
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "a opção -b só pode ser usada com imagens raw ou QCOW2."
+
+#: misc/e2image.c:1576
+msgid "Offsets are only allowed with raw images."
+msgstr "SAó são permitidos desvios com imagens raw."
+
+#: misc/e2image.c:1581
+msgid "Move mode is only allowed with raw images."
+msgstr "O modo move só é permitido com imagens raw."
+
+#: misc/e2image.c:1586
+msgid "Move mode requires all data mode."
+msgstr "O modo move requer o modo all data"
+
+#: misc/e2image.c:1596
+msgid "checking if mounted"
+msgstr "a verificar se está montado"
+
+#: misc/e2image.c:1603
+msgid ""
+"\n"
+"Running e2image on a R/W mounted filesystem can result in an\n"
+"inconsistent image which will not be useful for debugging purposes.\n"
+"Use -f option if you really want to do that.\n"
+msgstr ""
+"\n"
+"Executar e2image num sistema de ficheiros R/W montado pode resultar numa\n"
+"imagem inconsistente que não terá utilidade para depuração.\n"
+"Use a opção -f se realmente o quer fazer.\n"
+
+#: misc/e2image.c:1657
+msgid "QCOW2 image can not be written to the stdout!\n"
+msgstr "A imagem QCOW2 não pode ser escrita em stdout!\n"
+
+#: misc/e2image.c:1663
+msgid "Can not stat output\n"
+msgstr "Impossível analisar a saída\n"
+
+#: misc/e2image.c:1673
+#, c-format
+msgid "Image (%s) is compressed\n"
+msgstr "A imagem (%s) está comprimida\n"
+
+#: misc/e2image.c:1676
+#, c-format
+msgid "Image (%s) is encrypted\n"
+msgstr "A imagem (%s) está encriptada\n"
+
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "A imagem (%s) está corrompida\n"
+
+#: misc/e2image.c:1683
+#, c-format
+msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
+msgstr "ao tentar converter imagem qcow2 (%s) em imagem raw (%s)"
+
+#: misc/e2image.c:1693
+msgid "The -c option only supported in raw mode\n"
+msgstr "A opção -c só é suportada em modo raw\n"
+
+#: misc/e2image.c:1698
+msgid "The -c option not supported when writing to stdout\n"
+msgstr "A opção -c não é suportada ao escrever em stdout\n"
+
+#: misc/e2image.c:1705
+msgid "while allocating check_buf"
+msgstr "ao alocar check_buf"
+
+#: misc/e2image.c:1711
+msgid "The -p option only supported in raw mode\n"
+msgstr "A opção -p só é suportada em modo raw\n"
+
+#: misc/e2image.c:1721
+#, c-format
+msgid "%d blocks already contained the data to be copied\n"
+msgstr "%d blocos já continham os dados a copiar\n"
+
+#: misc/e2initrd_helper.c:68
+#, c-format
+msgid "Usage: %s -r device\n"
+msgstr "Uso: %s -r dispositivo\n"
+
+#: misc/e2label.c:58
+#, c-format
+msgid "e2label: cannot open %s\n"
+msgstr "e2label: impossível abrir %s\n"
+
+#: misc/e2label.c:63
+#, c-format
+msgid "e2label: cannot seek to superblock\n"
+msgstr "e2label: impossível procurar para super-bloco\n"
+
+#: misc/e2label.c:68
+#, c-format
+msgid "e2label: error reading superblock\n"
+msgstr "e2label: erro ao ler super-bloco\n"
+
+#: misc/e2label.c:72
+#, c-format
+msgid "e2label: not an ext2 filesystem\n"
+msgstr "e2label: não é sistema ext2\n"
+
+#: misc/e2label.c:97 misc/tune2fs.c:3117
+#, c-format
+msgid "Warning: label too long, truncating.\n"
+msgstr "Aviso: rótulo muito longo, a truncar.\n"
+
+#: misc/e2label.c:100
+#, c-format
+msgid "e2label: cannot seek to superblock again\n"
+msgstr "e2label: impossível procurar para super-bloco de novo\n"
+
+#: misc/e2label.c:105
+#, c-format
+msgid "e2label: error writing superblock\n"
+msgstr "e2label: erro ao escrever super-bloco\n"
+
+#: misc/e2label.c:117 misc/tune2fs.c:1687
+#, c-format
+msgid "Usage: e2label device [newlabel]\n"
+msgstr "Uso: e2label dispositivo [novo-rótulo]\n"
+
+#: misc/e2undo.c:124
+#, c-format
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
+msgstr "Uso: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <ficheiro de transacção> <sistema de ficheiros>\n"
+
+#: misc/e2undo.c:149
+msgid "The file system superblock doesn't match the undo file.\n"
+msgstr "O super-bloco de sistema de ficheiros não corresponde ao ficheiro de desfazer.\n"
+
+#: misc/e2undo.c:152
+msgid "UUID does not match.\n"
+msgstr "UUID não corresponde.\n"
+
+#: misc/e2undo.c:154
+msgid "Last mount time does not match.\n"
+msgstr "Última hora de montagem não corresponde.\n"
+
+#: misc/e2undo.c:156
+msgid "Last write time does not match.\n"
+msgstr "Última hora de escrita não corresponde.\n"
+
+#: misc/e2undo.c:158
+msgid "Lifetime write counter does not match.\n"
+msgstr "Contador de escrita vitalício não corresponde.\n"
+
+#: misc/e2undo.c:172
+msgid "while reading filesystem superblock."
+msgstr "ao ler super-bloco de sistema de ficheiros."
+
+#: misc/e2undo.c:188
+msgid "while fetching superblock"
+msgstr "ao obter super-bloco"
+
+#: misc/e2undo.c:201
+#, c-format
+msgid "Undo file superblock checksum doesn't match.\n"
+msgstr "Checksum de super-bloco do ficheiro de desfazer não corresponde.\n"
+
+#: misc/e2undo.c:340
+#, c-format
+msgid "illegal offset - %s"
+msgstr "desvio ilegal - %s"
+
+#: misc/e2undo.c:364
+#, c-format
+msgid "Will not write to an undo file while replaying it.\n"
+msgstr "Não se escreve no ficheiro de desfazer enquanto ele estiver em reprodução.\n"
+
+#: misc/e2undo.c:373
+#, c-format
+msgid "while opening undo file `%s'\n"
+msgstr "ao abrir ficheiro de desfazer \"%s\"\n"
+
+#: misc/e2undo.c:380
+msgid "while reading undo file"
+msgstr "ao ler ficheiro de desfazer"
+
+#: misc/e2undo.c:385
+#, c-format
+msgid "%s: Not an undo file.\n"
+msgstr "%s: não é ficheiro de desfazer.\n"
+
+#: misc/e2undo.c:396
+#, c-format
+msgid "%s: Header checksum doesn't match.\n"
+msgstr "%s: checksum de cabeçalho não corresponde.\n"
+
+#: misc/e2undo.c:403
+#, c-format
+msgid "%s: Corrupt undo file header.\n"
+msgstr "%s: cabeçalho de ficheiro de desfazer corrompido.\n"
+
+#: misc/e2undo.c:407
+#, c-format
+msgid "%s: Undo block size too large.\n"
+msgstr "%s: tamanho de bloco de desfazer muito grande.\n"
+
+#: misc/e2undo.c:412
+#, c-format
+msgid "%s: Undo block size too small.\n"
+msgstr "%s: tamanho de bloco de desfazer muito pequeno.\n"
+
+#: misc/e2undo.c:425
+#, c-format
+msgid "%s: Unknown undo file feature set.\n"
+msgstr "%s: conjunto de funcionalidades de ficheiro de desfazer desconhecido.\n"
+
+#: misc/e2undo.c:433
+#, c-format
+msgid "Error while determining whether %s is mounted."
+msgstr "Erro ao determinar se %s está montado."
+
+#: misc/e2undo.c:439
+msgid "e2undo should only be run on unmounted filesystems"
+msgstr "e2undo só deve ser executado em sistemas de ficheiros desmontados"
+
+#: misc/e2undo.c:455
+#, c-format
+msgid "while opening `%s'"
+msgstr "ao abrir \"%s\""
+
+#: misc/e2undo.c:466
+msgid "specified offset is too large"
+msgstr "desvio especificado muito grande"
+
+#: misc/e2undo.c:507
+msgid "while reading keys"
+msgstr "ao ler chaves"
+
+#: misc/e2undo.c:519
+#, c-format
+msgid "%s: wrong key magic at %llu\n"
+msgstr "%s: magia de chave errada em %llu\n"
+
+#: misc/e2undo.c:529
+#, c-format
+msgid "%s: key block checksum error at %llu.\n"
+msgstr "%s: erro de checksum de bloco de chave em %llu.\n"
+
+#: misc/e2undo.c:552
+#, c-format
+msgid "%s: block %llu is too long."
+msgstr "%s: bloco %llu é muito longo."
+
+#: misc/e2undo.c:564 misc/e2undo.c:600
+#, c-format
+msgid "while fetching block %llu."
+msgstr "ao obter bloco %llu."
+
+#: misc/e2undo.c:576
+#, c-format
+msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
+msgstr "erro de checksum em bloco de sistema de ficheiros %llu (undo blk %llu)\n"
+
+#: misc/e2undo.c:615
+#, c-format
+msgid "while writing block %llu."
+msgstr "ao escrever bloco %llu."
+
+#: misc/e2undo.c:621
+#, c-format
+msgid "Undo file corruption; run e2fsck NOW!\n"
+msgstr "Corrupção de ficheiro de desfazer; execute e2fsck AGORA!\n"
+
+#: misc/e2undo.c:623
+#, c-format
+msgid "IO error during replay; run e2fsck NOW!\n"
+msgstr "Erro IO durante a reprodução; execute e2fsck AGORA!\n"
+
+#: misc/e2undo.c:626
+#, c-format
+msgid "Incomplete undo record; run e2fsck.\n"
+msgstr "Registo de desfazer incompleto; execute e2fsck.\n"
+
+#: misc/findsuper.c:110
+#, c-format
+msgid "Usage:  findsuper device [skipbytes [startkb]]\n"
+msgstr "Uso:  findsuper dispositivo [saltarbytes [kbinicial]]\n"
+
+#: misc/findsuper.c:155
+#, c-format
+msgid "skipbytes should be a number, not %s\n"
+msgstr "saltarbytes deve ser um número, não %s\n"
+
+#: misc/findsuper.c:162
+#, c-format
+msgid "skipbytes must be a multiple of the sector size\n"
+msgstr "saltarbytes tem de ser múltiplo do tamanho do sector\n"
+
+#: misc/findsuper.c:169
+#, c-format
+msgid "startkb should be a number, not %s\n"
+msgstr "kbinicial deve ser um número, não %s\n"
+
+#: misc/findsuper.c:175
+#, c-format
+msgid "startkb should be positive, not %llu\n"
+msgstr "kbinicial deve ser positivo, não %llu\n"
+
+#: misc/findsuper.c:186
+#, c-format
+msgid "starting at %llu, with %u byte increments\n"
+msgstr "a iniciar em %llu, com incrementos de %u byte\n"
+
+#: misc/findsuper.c:188
+#, c-format
+msgid ""
+"[*] probably superblock written in the ext3 journal superblock,\n"
+"\tso start/end/grp wrong\n"
+msgstr ""
+"[*] provavelmente super-bloco escrito no super-bloco de diário ext3,\n"
+"\tlogo start/end/grp errados\n"
+
+#: misc/findsuper.c:190
+#, c-format
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+msgstr "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+
+#: misc/findsuper.c:264
+#, c-format
+msgid ""
+"\n"
+"%11Lu: finished with errno %d\n"
+msgstr ""
+"\n"
+"%11Lu: terminado com erro nº %d\n"
+
+#: misc/fsck.c:343
+#, c-format
+msgid "WARNING: couldn't open %s: %s\n"
+msgstr "AVISO: impossível abrir %s: %s\n"
+
+#: misc/fsck.c:353
+#, c-format
+msgid "WARNING: bad format on line %d of %s\n"
+msgstr "AVISO: mau formato na linha %d de %s\n"
+
+#: misc/fsck.c:370
+msgid ""
+"WARNING: Your /etc/fstab does not contain the fsck passno\n"
+"\tfield.  I will kludge around things for you, but you\n"
+"\tshould fix your /etc/fstab file as soon as you can.\n"
+"\n"
+msgstr ""
+"AVISO: a sua /etc/fstab não contém o campo fsck passno.\n"
+"\tAs coisas serão compostas por si, mas deve reparar\n"
+"\to seu ficheiro /etc/fstab assim que possível.\n"
+"\n"
+
+#: misc/fsck.c:485
+#, c-format
+msgid "fsck: %s: not found\n"
+msgstr "fsck: %s: não encontrado\n"
+
+#: misc/fsck.c:601
+#, c-format
+msgid "%s: wait: No more child process?!?\n"
+msgstr "%s: espere: sem mais processos-filho?!?\n"
+
+#: misc/fsck.c:623
+#, c-format
+msgid "Warning... %s for device %s exited with signal %d.\n"
+msgstr "Aviso... %s para dispositivo %s saiu sem sinal %d.\n"
+
+#: misc/fsck.c:629
+#, c-format
+msgid "%s %s: status is %x, should never happen.\n"
+msgstr "%s %s: o estado é %x, nunca devia acontecer.\n"
+
+#: misc/fsck.c:668
+#, c-format
+msgid "Finished with %s (exit status %d)\n"
+msgstr "Terminado com %s (estado de saída %d)\n"
+
+#: misc/fsck.c:728
+#, c-format
+msgid "%s: Error %d while executing fsck.%s for %s\n"
+msgstr "%s: Erro %d ao executar fsck.%s para %s\n"
+
+#: misc/fsck.c:749
+msgid ""
+"Either all or none of the filesystem types passed to -t must be prefixed\n"
+"with 'no' or '!'.\n"
+msgstr ""
+"Ou todos ou nenhum dos tipos de sistema de ficheiros passados a -t têm de ser\n"
+"prefixados com \"no\" ou \"!\".\n"
+
+#: misc/fsck.c:768
+msgid "Couldn't allocate memory for filesystem types\n"
+msgstr "Impossível alocar memória para tipos de sistema de ficheiro\n"
+
+#: misc/fsck.c:891
+#, c-format
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgstr "%s: a saltar linha má em /etc/fstab: ligar montagem com número de passagem fsck não zero\n"
+
+#: misc/fsck.c:918
+#, c-format
+msgid "fsck: cannot check %s: fsck.%s not found\n"
+msgstr "fsck: impossível verificar %s: fsck.%s não encontrado\n"
+
+#: misc/fsck.c:974
+msgid "Checking all file systems.\n"
+msgstr "A verificar todos os sistemas de ficheiros.\n"
+
+#: misc/fsck.c:1065
+#, c-format
+msgid "--waiting-- (pass %d)\n"
+msgstr "--em espera-- (passo %d)\n"
+
+#: misc/fsck.c:1085
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "Uso: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+
+#: misc/fsck.c:1127
+#, c-format
+msgid "%s: too many devices\n"
+msgstr "%s: demasiados dispositivos\n"
+
+#: misc/fsck.c:1160 misc/fsck.c:1246
+#, c-format
+msgid "%s: too many arguments\n"
+msgstr "%s: demasiados argumentos\n"
+
+#: misc/fuse2fs.c:3745
+msgid "Mounting read-only.\n"
+msgstr "A montar só-de-leitura.\n"
+
+#: misc/fuse2fs.c:3769
+#, c-format
+msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
+msgstr "%s: permissão a todos os utilizadores para alocar todos os blocos. Isto é perigoso!\n"
+
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
+#, c-format
+msgid "%s: %s.\n"
+msgstr "%s: %s.\n"
+
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
+#, c-format
+msgid "Please run e2fsck -fy %s.\n"
+msgstr "Por favor, execute e2fsck -fy %s.\n"
+
+#: misc/fuse2fs.c:3804
+msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
+msgstr "O diário precisa de recuperação; é requerida a execução de \"e2fsck -E journal_only\"\n"
+
+#: misc/fuse2fs.c:3812
+#, c-format
+msgid "%s: Writing to the journal is not supported.\n"
+msgstr "%s: escrever no diário não é suportado.\n"
+
+#: misc/fuse2fs.c:3827
+msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
+msgstr "Aviso: a montar sf não verificado, recomenda-se a execução de e2fsck.\n"
+
+#: misc/fuse2fs.c:3831
+msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
+msgstr "Aviso: atingido o máximo total de montagem, recomenda-se a execução de e2fsck.\n"
+
+#: misc/fuse2fs.c:3836
+msgid "Warning: Check time reached; running e2fsck is recommended.\n"
+msgstr "Aviso: atingida hora de verificação; recomenda-se a execução de e2fsck.\n"
+
+#: misc/fuse2fs.c:3840
+msgid "Orphans detected; running e2fsck is recommended.\n"
+msgstr "Órfãos detectados; recomenda-se a execução de e2fsck.\n"
+
+#: misc/fuse2fs.c:3844
+msgid "Errors detected; running e2fsck is required.\n"
+msgstr "Erros detectados; é requerida a execução de e2fsck.\n"
+
+#: misc/lsattr.c:75
+#, c-format
+msgid "Usage: %s [-RVadlpv] [files...]\n"
+msgstr "Uso: %s [-RVadlpv] [ficheiros...]\n"
+
+#: misc/lsattr.c:86
+#, c-format
+msgid "While reading flags on %s"
+msgstr "Ao ler bandeiras em %s"
+
+#: misc/lsattr.c:93
+#, c-format
+msgid "While reading project on %s"
+msgstr "Ao ler projecto em %s"
+
+#: misc/lsattr.c:102
+#, c-format
+msgid "While reading version on %s"
+msgstr "Ao ler versão em %s"
+
+#: misc/mke2fs.c:130
+#, c-format
+msgid ""
+"Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
+"\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
+"\t[-G flex-group-size] [-N number-of-inodes] [-d root-directory]\n"
+"\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] [-e errors_behavior][-z undo_file]\n"
+"\t[-jnqvDFSV] device [blocks-count]\n"
+msgstr ""
+"Uso: %s [-c|-l nomefich] [-b block-size] [-C cluster-size]\n"
+"\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
+"\t[-G flex-group-size] [-N number-of-inodes] [-d root-directory]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
+"\t[-O funcionalidade[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
+"\t[-jnqvDFSV] dispositivo [blocks-count]\n"
+
+#: misc/mke2fs.c:261
+#, c-format
+msgid "Running command: %s\n"
+msgstr "A executar comando: %s\n"
+
+#: misc/mke2fs.c:265
+#, c-format
+msgid "while trying to run '%s'"
+msgstr "ao tentar executar \"%s\""
+
+#: misc/mke2fs.c:272
+msgid "while processing list of bad blocks from program"
+msgstr "ao processar lista de maus blocos do programa"
+
+#: misc/mke2fs.c:299
+#, c-format
+msgid "Block %d in primary superblock/group descriptor area bad.\n"
+msgstr "Mau bloco %d em área em descritor primário de super-bloco/grupo.\n"
+
+#: misc/mke2fs.c:301
+#, c-format
+msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
+msgstr "Blocos %u a %u têm de estar em boa ordem para construir um sistema de ficheiros.\n"
+
+#: misc/mke2fs.c:304
+msgid "Aborting....\n"
+msgstr "A abortar...\n"
+
+#: misc/mke2fs.c:324
+#, c-format
+msgid ""
+"Warning: the backup superblock/group descriptors at block %u contain\n"
+"\tbad blocks.\n"
+"\n"
+msgstr ""
+"Aviso: os descritores de segurança de super-bloco/grupo no bloco %u contêm\n"
+"\tmaus blocos.\n"
+"\n"
+
+#: misc/mke2fs.c:343
+msgid "while marking bad blocks as used"
+msgstr "ao marcar maus blocos como usados"
+
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "ao escrever inodes reservados"
+
+#: misc/mke2fs.c:420
+msgid "Writing inode tables: "
+msgstr "A escrever tabelas de inodes: "
+
+#: misc/mke2fs.c:442
+#, c-format
+msgid ""
+"\n"
+"Could not write %d blocks in inode table starting at %llu: %s\n"
+msgstr ""
+"\n"
+"Impossível escrever %d blocos na tabela de inodes começando em %llu: %s\n"
+
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
+msgid "done                            \n"
+msgstr "feito                           \n"
+
+#: misc/mke2fs.c:471
+msgid "while creating root dir"
+msgstr "ao criar pasta raiz"
+
+#: misc/mke2fs.c:478
+msgid "while reading root inode"
+msgstr "ao ler inode raiz"
+
+#: misc/mke2fs.c:490
+msgid "while setting root inode ownership"
+msgstr "ao definir propriedade do inode raiz"
+
+#: misc/mke2fs.c:508
+msgid "while creating /lost+found"
+msgstr "ao criar /perdido+achado"
+
+#: misc/mke2fs.c:515
+msgid "while looking up /lost+found"
+msgstr "ao procurar /perdido+achado"
+
+#: misc/mke2fs.c:528
+msgid "while expanding /lost+found"
+msgstr "ao expandir /perdido+achado"
+
+#: misc/mke2fs.c:543
+msgid "while setting bad block inode"
+msgstr "ao definir inode de mau bloco"
+
+#: misc/mke2fs.c:570
+#, c-format
+msgid "Out of memory erasing sectors %d-%d\n"
+msgstr "Memória esgotada ao apagar sectores %d-%d\n"
+
+#: misc/mke2fs.c:580
+#, c-format
+msgid "Warning: could not read block 0: %s\n"
+msgstr "Aviso: impossível ler bloco 0: %s\n"
+
+#: misc/mke2fs.c:596
+#, c-format
+msgid "Warning: could not erase sector %d: %s\n"
+msgstr "Aviso: impossível apagar sector %d: %s\n"
+
+#: misc/mke2fs.c:612
+msgid "while initializing journal superblock"
+msgstr "ao inicializar super-bloco de diário"
+
+#: misc/mke2fs.c:620
+msgid "Zeroing journal device: "
+msgstr "A pôr a zero o dispositivo de diário: "
+
+#: misc/mke2fs.c:632
+#, c-format
+msgid "while zeroing journal device (block %llu, count %d)"
+msgstr "ao pôr a zero o dispositivo de diário (bloco %llu, total %d)"
+
+#: misc/mke2fs.c:650
+msgid "while writing journal superblock"
+msgstr "ao escrever super-bloco de diário"
+
+#: misc/mke2fs.c:665
+#, c-format
+msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
+msgstr "A criar sistema de ficheiros com %llu %dk blocos e %u inodes\n"
+
+#: misc/mke2fs.c:673
+#, c-format
+msgid ""
+"warning: %llu blocks unused.\n"
+"\n"
+msgstr ""
+"aviso: %llu blocos não usados.\n"
+"\n"
+
+#: misc/mke2fs.c:678
+#, c-format
+msgid "Filesystem label=%s\n"
+msgstr "Rótulo do sistema de ficheiros=%s\n"
+
+#: misc/mke2fs.c:681
+#, c-format
+msgid "OS type: %s\n"
+msgstr "Tipo de SO: %s\n"
+
+#: misc/mke2fs.c:683
+#, c-format
+msgid "Block size=%u (log=%u)\n"
+msgstr "Tamanho de bloco=%u (diário=%u)\n"
+
+#: misc/mke2fs.c:686
+#, c-format
+msgid "Cluster size=%u (log=%u)\n"
+msgstr "Tamanho de cluster=%u (diário=%u)\n"
+
+#: misc/mke2fs.c:690
+#, c-format
+msgid "Fragment size=%u (log=%u)\n"
+msgstr "Tamanho de fragmento=%u (diário=%u)\n"
+
+#: misc/mke2fs.c:692
+#, c-format
+msgid "Stride=%u blocks, Stripe width=%u blocks\n"
+msgstr "Passo=%u blocos, Largura de banda=%u blocos\n"
+
+#: misc/mke2fs.c:694
+#, c-format
+msgid "%u inodes, %llu blocks\n"
+msgstr "%u inodes, %llu blocos\n"
+
+#: misc/mke2fs.c:696
+#, c-format
+msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
+msgstr "%llu blocos (%2.2f%%) reservado para super-utilizador\n"
+
+#: misc/mke2fs.c:699
+#, c-format
+msgid "First data block=%u\n"
+msgstr "1º bloco de dados=%u\n"
+
+#: misc/mke2fs.c:701
+#, c-format
+msgid "Root directory owner=%u:%u\n"
+msgstr "Dono da pasta raiz=%u:%u\n"
+
+#: misc/mke2fs.c:703
+#, c-format
+msgid "Maximum filesystem blocks=%lu\n"
+msgstr "Máximo de blocos do sistema de ficheiros=%lu\n"
+
+#: misc/mke2fs.c:707
+#, c-format
+msgid "%u block groups\n"
+msgstr "%u grupos de blocos\n"
+
+#: misc/mke2fs.c:709
+#, c-format
+msgid "%u block group\n"
+msgstr "%u grupo de blocos\n"
+
+#: misc/mke2fs.c:711
+#, c-format
+msgid "%u blocks per group, %u clusters per group\n"
+msgstr "%u blocos por grupo, %u clusters por grupo\n"
+
+#: misc/mke2fs.c:714
+#, c-format
+msgid "%u blocks per group, %u fragments per group\n"
+msgstr "%u blocos por grupo, %u fragmentos por grupo\n"
+
+#: misc/mke2fs.c:716
+#, c-format
+msgid "%u inodes per group\n"
+msgstr "%u inodes por grupo\n"
+
+#: misc/mke2fs.c:725
+#, c-format
+msgid "Filesystem UUID: %s\n"
+msgstr "UUID do sistema de ficheiros: %s\n"
+
+#: misc/mke2fs.c:726
+msgid "Superblock backups stored on blocks: "
+msgstr "Seguranças de super-blocos armazenadas em blocos: "
+
+#: misc/mke2fs.c:822
+#, c-format
+msgid "%s requires '-O 64bit'\n"
+msgstr "%s requer \"-O 64bit\"\n"
+
+#: misc/mke2fs.c:828
+#, c-format
+msgid "'%s' must be before 'resize=%u'\n"
+msgstr "\"%s\" tem de estar antes de \"resize=%u\"\n"
+
+#: misc/mke2fs.c:841
+#, c-format
+msgid "Invalid desc_size: '%s'\n"
+msgstr "desc_size inválido: \"%s\"\n"
+
+#: misc/mke2fs.c:855
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Semente de hash inválida: %s\n"
+
+#: misc/mke2fs.c:867
+#, c-format
+msgid "Invalid offset: %s\n"
+msgstr "Desvio inválido: %s\n"
+
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
+#, c-format
+msgid "Invalid mmp_update_interval: %s\n"
+msgstr "mmp_update_interval inválido: %s\n"
+
+#: misc/mke2fs.c:898
+#, c-format
+msgid "Invalid # of backup superblocks: %s\n"
+msgstr "Nº de super-blocos de segurança inválido: %s\n"
+
+#: misc/mke2fs.c:920
+#, c-format
+msgid "Invalid stride parameter: %s\n"
+msgstr "Parâmetro de passo inválido: %s\n"
+
+#: misc/mke2fs.c:935
+#, c-format
+msgid "Invalid stripe-width parameter: %s\n"
+msgstr "Parâmetro de largura de banda inválido: %s\n"
+
+#: misc/mke2fs.c:958
+#, c-format
+msgid "Invalid resize parameter: %s\n"
+msgstr "Parâmetro de redimensionamento inválido: %s\n"
+
+#: misc/mke2fs.c:965
+msgid "The resize maximum must be greater than the filesystem size.\n"
+msgstr "O redimensionamento máximo tem de ser maior que o tamanho do sistema de ficheiros.\n"
+
+#: misc/mke2fs.c:989
+msgid "On-line resizing not supported with revision 0 filesystems\n"
+msgstr "Redimensionamento em linha não suportado com sistemas de ficheiros revisão 0\n"
+
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
+#, c-format
+msgid "Invalid root_owner: '%s'\n"
+msgstr "root_owner inválido: \"%s\"\n"
+
+#: misc/mke2fs.c:1069
+#, c-format
+msgid "Invalid encoding: %s"
+msgstr "Codificação inválida: %s"
+
+#: misc/mke2fs.c:1087
+#, c-format
+msgid ""
+"\n"
+"Bad option(s) specified: %s\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tmmp_update_interval=<interval>\n"
+"\tnum_backup_sb=<0|1|2>\n"
+"\tstride=<RAID per-disk data chunk in blocks>\n"
+"\tstripe-width=<RAID stride * data disks in blocks>\n"
+"\toffset=<offset to create the file system>\n"
+"\tresize=<resize maximum size in blocks>\n"
+"\tpacked_meta_blocks=<0 to disable, 1 to enable>\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
+"\tlazy_journal_init=<0 to disable, 1 to enable>\n"
+"\troot_owner=<uid of root dir>:<gid of root dir>\n"
+"\ttest_fs\n"
+"\tdiscard\n"
+"\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
+"\tquotatype=<quota type(s) to be enabled>\n"
+"\n"
+msgstr ""
+"\n"
+"Más opções especificadas: %s\n"
+"\n"
+"As opções estendidas são separadas por vírgulas e podem receber um argumento que\n"
+"\té definido por um sinal de igual (\"=\").\n"
+"\n"
+"Opções estendidas válidas:\n"
+"\tmmp_update_interval=<intervalo>\n"
+"\tnum_backup_sb=<0|1|2>\n"
+"\tstride=<RAID por-bocado de dados de disco em blocos>\n"
+"\tstripe-width=<RAID passo * discos de dados em blocos>\n"
+"\toffset=<desvio para criar o sistema de ficheiros>\n"
+"\tresize=<tamanho máximo de redimensionamento em blocos>\n"
+"\tpacked_meta_blocks=<0 para desactivar, 1 para activar>\n"
+"\tlazy_itable_init=<0 para desactivar, 1 para activar>\n"
+"\tlazy_journal_init=<0 para desactivar, 1 para activar>\n"
+"\troot_owner=<uid da pasta raiz>:<gid da pasta raiz>\n"
+"\ttest_fs\n"
+"\tdiscard\n"
+"\tnodiscard\n"
+"\tencoding=<codificação>\n"
+"\tencoding_flags=<bandeiras>\n"
+"\tquotatype=<tipo(s) de quota a activar>\n"
+"\n"
+
+#: misc/mke2fs.c:1114
+#, c-format
+msgid ""
+"\n"
+"Warning: RAID stripe-width %u not an even multiple of stride %u.\n"
+"\n"
+msgstr ""
+"\n"
+"Aviso: largura de banda RAID %u não é um múltiplo par do passo %u.\n"
+"\n"
+
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr "erro: bandeira de codificação inválida: %s\n"
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr "erro: tem de especificar explicitamente uma codificação ao passar bandeiras de codificação\n"
+
+#: misc/mke2fs.c:1179
+#, c-format
+msgid ""
+"Syntax error in mke2fs config file (%s, line #%d)\n"
+"\t%s\n"
+msgstr ""
+"Erro de sintaxe no ficheiro de configuração de mke2fs (%s, linha #%d)\n"
+"\t%s\n"
+
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
+#, c-format
+msgid "Invalid filesystem option set: %s\n"
+msgstr "Opção de sistema de ficheiros definida inválida: %s\n"
+
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
+#, c-format
+msgid "Invalid mount option set: %s\n"
+msgstr "Opção de montagem definida inválida: %s\n"
+
+#: misc/mke2fs.c:1340
+#, c-format
+msgid ""
+"\n"
+"Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+"\n"
+"O seu ficheiro mke2fs.conf não define o tipo de sistema de ficheiros %s.\n"
+
+#: misc/mke2fs.c:1344
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+"Provavelmente tem de instalar um ficheiro mke2fs.conf actualizado.\n"
+"\n"
+
+#: misc/mke2fs.c:1348
+msgid "Aborting...\n"
+msgstr "A abortar...\n"
+
+#: misc/mke2fs.c:1389
+#, c-format
+msgid ""
+"\n"
+"Warning: the fs_type %s is not defined in mke2fs.conf\n"
+"\n"
+msgstr ""
+"\n"
+"Aviso: fs_type %s não definido em mke2fs.conf\n"
+"\n"
+
+#: misc/mke2fs.c:1571
+msgid "Couldn't allocate memory for new PATH.\n"
+msgstr "Impossível alocar memória para o novo PATH.\n"
+
+#: misc/mke2fs.c:1608
+#, c-format
+msgid "Couldn't init profile successfully (error: %ld).\n"
+msgstr "Impossível inicializar o perfil com sucesso (erro: %ld).\n"
+
+#: misc/mke2fs.c:1641
+#, c-format
+msgid "invalid block size - %s"
+msgstr "tamanho de bloco inválido - %s"
+
+#: misc/mke2fs.c:1645
+#, c-format
+msgid "Warning: blocksize %d not usable on most systems.\n"
+msgstr "Aviso: tamanho de bloco %d não utilizável na maioria dos sistemas.\n"
+
+#: misc/mke2fs.c:1661
+#, c-format
+msgid "invalid cluster size - %s"
+msgstr "tamanho de cluster inválido - %s"
+
+#: misc/mke2fs.c:1674
+msgid "'-R' is deprecated, use '-E' instead"
+msgstr "\"-R\" é obsoleto, use antes \"-E\""
+
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
+#, c-format
+msgid "bad error behavior - %s"
+msgstr "mau comportamento de erro - %s"
+
+#: misc/mke2fs.c:1700
+msgid "Illegal number for blocks per group"
+msgstr "Número ilegal para blocos por grupo"
+
+#: misc/mke2fs.c:1705
+msgid "blocks per group must be multiple of 8"
+msgstr "blocos por grupo tem de ser múltiplo de 8"
+
+#: misc/mke2fs.c:1713
+msgid "Illegal number for flex_bg size"
+msgstr "Número ilegal para tamanho de flex_bg"
+
+#: misc/mke2fs.c:1719
+msgid "flex_bg size must be a power of 2"
+msgstr "tamanho de flex_bg tem de ser uma potência de 2"
+
+#: misc/mke2fs.c:1724
+#, c-format
+msgid "flex_bg size (%lu) must be less than or equal to 2^31"
+msgstr "tamanho de flex_bg (%lu) tem de ser menor ou igual a 2^31"
+
+#: misc/mke2fs.c:1734
+#, c-format
+msgid "invalid inode ratio %s (min %d/max %d)"
+msgstr "proporção de inode inválida %s (mín %d/máx %d)"
+
+#: misc/mke2fs.c:1744
+#, c-format
+msgid "invalid inode size - %s"
+msgstr "tamanho de inode inválido - %s"
+
+#: misc/mke2fs.c:1757
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "Aviso: a opção -K option é obsoleta e já não devia ser usada. Use antes a opção estendida \"-E nodiscard\"!\n"
+
+#: misc/mke2fs.c:1768
+msgid "in malloc for bad_blocks_filename"
+msgstr "em malloc para bad_blocks_filename"
+
+#: misc/mke2fs.c:1777
+#, c-format
+msgid ""
+"Warning: label too long; will be truncated to '%s'\n"
+"\n"
+msgstr ""
+"Aviso: rótulo muito grande; será truncado para \"%s\"\n"
+"\n"
+
+#: misc/mke2fs.c:1786
+#, c-format
+msgid "invalid reserved blocks percent - %s"
+msgstr "percentagem de blocos reservados inválida - %s"
+
+#: misc/mke2fs.c:1801
+#, c-format
+msgid "bad num inodes - %s"
+msgstr "mau núm inodes - %s"
+
+#: misc/mke2fs.c:1814
+msgid "while allocating fs_feature string"
+msgstr "ao alocar cadeia fs_feature"
+
+#: misc/mke2fs.c:1831
+#, c-format
+msgid "bad revision level - %s"
+msgstr "mau nível de revisão - %s"
+
+#: misc/mke2fs.c:1836
+#, c-format
+msgid "while trying to create revision %d"
+msgstr "ao tentar criar revisão %d"
+
+#: misc/mke2fs.c:1850
+msgid "The -t option may only be used once"
+msgstr "A opção -t só pode ser usada uma vez"
+
+#: misc/mke2fs.c:1858
+msgid "The -T option may only be used once"
+msgstr "A opção -T só pode ser usada uma vez"
+
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
+#, c-format
+msgid "while trying to open journal device %s\n"
+msgstr "ao tentar abrir dispositivo de diário %s\n"
+
+#: misc/mke2fs.c:1920
+#, c-format
+msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
+msgstr "Tamanho de bloco do dispositivo de diário (%d) menor que o tamanho mínimo de bloco %d\n"
+
+#: misc/mke2fs.c:1926
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "A usar tamanho de bloco do dispositivo de diário: %d\n"
+
+#: misc/mke2fs.c:1937
+#, c-format
+msgid "invalid blocks '%s' on device '%s'"
+msgstr "Blocos \"%s\" inválidos no dispositivo \"%s\""
+
+#: misc/mke2fs.c:1967
+msgid "filesystem"
+msgstr "sistema de ficheiros"
+
+#: misc/mke2fs.c:1985 resize/main.c:497
+msgid "while trying to determine filesystem size"
+msgstr "Ao tentar determinar o tamanho do sistema de ficheiros"
+
+#: misc/mke2fs.c:1991
+msgid ""
+"Couldn't determine device size; you must specify\n"
+"the size of the filesystem\n"
+msgstr ""
+"Impossível determinar o tamanho do dispositivo; tem de especificar\n"
+"o tamanho do sistema de ficheiros\n"
+
+#: misc/mke2fs.c:1998
+msgid ""
+"Device size reported to be zero.  Invalid partition specified, or\n"
+"\tpartition table wasn't reread after running fdisk, due to\n"
+"\ta modified partition being busy and in use.  You may need to reboot\n"
+"\tto re-read your partition table.\n"
+msgstr ""
+"Tamanho de dispositivo reportado como zero. Partição inválida especificada ou\n"
+"\ta tabela de partições não foi lida após executar fdisk, devido a uma\n"
+"\tpartição modificada estar ocupada e em uso. Pode precisar de reiniciar\n"
+"\tpara voltar a ler a tabela de partições.\n"
+
+#: misc/mke2fs.c:2015
+msgid "Filesystem larger than apparent device size."
+msgstr "Sistema de ficheiros maior que o tamanho aparente do dispositivo."
+
+#: misc/mke2fs.c:2035
+msgid "Failed to parse fs types list\n"
+msgstr "Falha ao analisar a lista de tipos de sistemas de ficheiros\n"
+
+#: misc/mke2fs.c:2085
+msgid "The HURD does not support the filetype feature.\n"
+msgstr "HURD não suporta a funcionalidade de tipo de ficheiro.\n"
+
+#: misc/mke2fs.c:2090
+msgid "The HURD does not support the huge_file feature.\n"
+msgstr "HURD não suporta a funcionalidade huge_file.\n"
+
+#: misc/mke2fs.c:2095
+msgid "The HURD does not support the metadata_csum feature.\n"
+msgstr "HURD não suporta a funcionalidade metadata_csum.\n"
+
+#: misc/mke2fs.c:2100
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "HURD não suporta a funcionalidade ea_inode.\n"
+
+#: misc/mke2fs.c:2110
+msgid "while trying to determine hardware sector size"
+msgstr "ao tentar determinar o tamanho do sector do equipamento"
+
+#: misc/mke2fs.c:2116
+msgid "while trying to determine physical sector size"
+msgstr "ao tentar determinar o tamanho do sector físico"
+
+#: misc/mke2fs.c:2148
+msgid "while setting blocksize; too small for device\n"
+msgstr "ao definir tamanho de bloco; muito pequeno para o dispositivo\n"
+
+#: misc/mke2fs.c:2153
+#, c-format
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgstr "Aviso: tamanho de bloco especificado %d menor que tamanho do sector físico do dispositivo %d\n"
+
+#: misc/mke2fs.c:2177
+#, 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: tamanho do dispositivo (0x%llx blocos) %s muito grande para expressar\n"
+"\tem 32 bits usando um tamanho de bloco de %d.\n"
+
+#: misc/mke2fs.c:2191
+#, c-format
+msgid ""
+"%s: Size of device (0x%llx blocks) %s too big to create\n"
+"\ta filesystem using a blocksize of %d.\n"
+msgstr ""
+"%s: tamanho de dispositivo (0x%llx blocos) %s muito grande para criar\n"
+"\tum sistema de ficheiros usando tamanho de bloco %d.\n"
+
+#: misc/mke2fs.c:2213
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr "fs_types para resolução mke2fs.conf: "
+
+#: misc/mke2fs.c:2220
+msgid "Filesystem features not supported with revision 0 filesystems\n"
+msgstr "Funcionalidades de sistema de ficheiros não suportadas com sistemas de ficheiros revisão 0\n"
+
+#: misc/mke2fs.c:2228
+msgid "Sparse superblocks not supported with revision 0 filesystems\n"
+msgstr "Super-blocos esparsos não suportados com sistemas de ficheiros revisão 0\n"
+
+#: misc/mke2fs.c:2238
+msgid "Journals not supported with revision 0 filesystems\n"
+msgstr "Diários não suportados com sistemas de ficheiros revisão 0\n"
+
+#: misc/mke2fs.c:2251
+#, c-format
+msgid "invalid reserved blocks percent - %lf"
+msgstr "percentagem de blocos reservados inválida - %lf"
+
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
+msgstr "Extents TÊM de estar activadas para um sistema de ficheiros 64-bit. Passe -O extents para rectificar.\n"
+
+#: misc/mke2fs.c:2288
+msgid "The cluster size may not be smaller than the block size.\n"
+msgstr "O tamanho de cluster não pode ser menor que o tamanho de bloco.\n"
+
+#: misc/mke2fs.c:2294
+msgid "specifying a cluster size requires the bigalloc feature"
+msgstr "especificar um tamanho de cluster requer a funcionalidade bigalloc"
+
+#: misc/mke2fs.c:2314
+#, c-format
+msgid "warning: Unable to get device geometry for %s\n"
+msgstr "aviso: impossível obter a geometria do dispositivo para %s\n"
+
+#: misc/mke2fs.c:2317
+#, c-format
+msgid "%s alignment is offset by %lu bytes.\n"
+msgstr "alinhamento de %s está desviado em %lu bytes.\n"
+
+#: misc/mke2fs.c:2319
+#, c-format
+msgid "This may result in very poor performance, (re)-partitioning suggested.\n"
+msgstr "Isto pode resultar num desempenho muito pobre, recomenda-se re-particionamento.\n"
+
+#: misc/mke2fs.c:2340
+#, c-format
+msgid "%d-byte blocks too big for system (max %d)"
+msgstr "blocos %d-byte muito grandes para o sistema (máx %d)"
+
+#: misc/mke2fs.c:2344
+#, c-format
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgstr "Aviso: blocos %d-byte muito grandes para o sistema (máx %d), forçado a continuar\n"
+
+#: misc/mke2fs.c:2352
+#, c-format
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "Sugestão: use kernel Linux >= 3.18 para estabilidade melhorada das funcionalidades de checksum dos meta-dados e diários.\n"
+
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
+msgstr "Codificação de nome de ficheiro a partir de perfil desconhecida: %s"
+
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr "Bandeiras de codificação a partir do perfil desconhecidas: %s"
+
+#: misc/mke2fs.c:2434
+#, c-format
+msgid ""
+"\n"
+"Warning: offset specified without an explicit file system size.\n"
+"Creating a file system with %llu blocks but this might\n"
+"not be what you want.\n"
+"\n"
+msgstr ""
+"\n"
+"Aviso: desvio especificado sem tamanho explícito de sistema de ficheiros.\n"
+"Será criado um sistema de ficheiros com %llu blocos mas isto \n"
+"pode não ser o que deseja.\n"
+"\n"
+
+#: misc/mke2fs.c:2449
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr "inodes de %d byte são muito pequenos para a quota do projecto"
+
+#: misc/mke2fs.c:2465
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"As funcionalidades encrypt e casefold não são compatíveis.\n"
+"Não podem estar activas simultaneamente.\n"
+
+#: misc/mke2fs.c:2480
+msgid "Can't support bigalloc feature without extents feature"
+msgstr "Impossível suportar a funcionalidade bigalloc sem a funcionalidade extents"
+
+#: misc/mke2fs.c:2487
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"As funcionalidades resize_inode e meta_bg não são compatíveis.\n"
+"Não podem estar activas simultaneamente.\n"
+
+#: misc/mke2fs.c:2495
+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 ""
+"\n"
+"Aviso: a funcionalidade bigalloc ainda está em desenvolvimento\n"
+"Veja https://ext4.wiki.kernel.org/index.php/Bigalloc para mais informação\n"
+"\n"
+
+#: misc/mke2fs.c:2507
+msgid "reserved online resize blocks not supported on non-sparse filesystem"
+msgstr "redimensionamento de blocos em linha reservado não é suportado em sistemas de ficheiros não-esparsos"
+
+#: misc/mke2fs.c:2516
+msgid "blocks per group count out of range"
+msgstr "total de blocos por grupo fora do intervalo"
+
+#: misc/mke2fs.c:2538
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
+msgstr "Funcionalidade Flex_bg não activa, não pode especificar tamanho flex_bg"
+
+#: misc/mke2fs.c:2550
+#, c-format
+msgid "invalid inode size %d (min %d/max %d)"
+msgstr "tamanho de inode inválido %d (mín %d/máx %d)"
+
+#: misc/mke2fs.c:2565
+#, c-format
+msgid "%d byte inodes are too small for inline data; specify larger size"
+msgstr "inodes de %d byte muito pequenos para dados em linha; especifique um tamanho maior"
+
+#: misc/mke2fs.c:2580
+#, c-format
+msgid "too many inodes (%llu), raise inode ratio?"
+msgstr "demasiados inodes (%llu), aumentar a proporção de inodes?"
+
+#: misc/mke2fs.c:2587
+#, c-format
+msgid "too many inodes (%llu), specify < 2^32 inodes"
+msgstr "demasiados inodes (%llu), especifique < 2^32 inodes"
+
+#: misc/mke2fs.c:2601
+#, 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 ""
+"inode_size (%u) * inodes_count (%u) muito grande para um\n"
+"\tsistema de ficheiros com %llu blocos, especifique inode_ratio (-i) maior\n"
+"\tou menor total de inode (-N).\n"
+
+#: misc/mke2fs.c:2788
+msgid "Discarding device blocks: "
+msgstr "A descartar blocos de dispositivo: "
+
+#: misc/mke2fs.c:2804
+msgid "failed - "
+msgstr "falhou - "
+
+#: misc/mke2fs.c:2863
+msgid "while initializing quota context"
+msgstr "ao inicializar contexto de quota"
+
+#: misc/mke2fs.c:2870
+msgid "while writing quota inodes"
+msgstr "ao escrever inodes de quota"
+
+#: misc/mke2fs.c:2895
+#, c-format
+msgid "bad error behavior in profile - %s"
+msgstr "mau comportamento de erro em perfil - %s"
+
+#: misc/mke2fs.c:2971
+msgid "in malloc for android_sparse_params"
+msgstr "em malloc para android_sparse_params"
+
+#: misc/mke2fs.c:2985
+msgid "while setting up superblock"
+msgstr "ao configurar super-bloco"
+
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
+msgstr "Extensões não activadas. A árvore de extensões de ficheiro pode ter a checksum, mas os mapas de bloco não. Não activar as extensões reduz a cobertura das checksums de meta-dados. Passe -0 extends para rectificar.\n"
+
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+msgstr "Suporte a sistemas de ficheiros 64 bits não activado. Os campos maiores oferecidos por esta funcionalidade activam as checksums de máxima força. Passe -0 64bit para rectificar\n"
+
+#: misc/mke2fs.c:3016
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "A funcionalidade metadata_csum_seed requer a funcionalidade metadata_csum.\n"
+
+#: misc/mke2fs.c:3040
+msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
+msgstr "Descarte com sucesso e devolverá 0s - a saltar limpeza da tabela de inodes\n"
+
+#: misc/mke2fs.c:3139
+#, c-format
+msgid "unknown os - %s"
+msgstr "so desconhecido - %s"
+
+#: misc/mke2fs.c:3202
+msgid "Allocating group tables: "
+msgstr "A alocar tabelas de grupo: "
+
+#: misc/mke2fs.c:3210
+msgid "while trying to allocate filesystem tables"
+msgstr "ao tentar alocar tabelas de sistemas de ficheiros"
+
+#: misc/mke2fs.c:3219
+msgid ""
+"\n"
+"\twhile converting subcluster bitmap"
+msgstr ""
+"\n"
+"\tao converter bitmap de sub-cluster"
+
+#: misc/mke2fs.c:3225
+#, c-format
+msgid "%s may be further corrupted by superblock rewrite\n"
+msgstr "%s pode estar mais comprometido pela re-escrita do super-bloco\n"
+
+#: misc/mke2fs.c:3266
+#, c-format
+msgid "while zeroing block %llu at end of filesystem"
+msgstr "ao pôr a zero o bloco %llu no final do sistema de ficheiros"
+
+#: misc/mke2fs.c:3279
+msgid "while reserving blocks for online resize"
+msgstr "ao reservar blocos para redimensionamento em linha"
+
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
+msgid "journal"
+msgstr "diário"
+
+#: misc/mke2fs.c:3303
+#, c-format
+msgid "Adding journal to device %s: "
+msgstr "A adicionar diário ao dispositivo %s: "
+
+#: misc/mke2fs.c:3310
+#, c-format
+msgid ""
+"\n"
+"\twhile trying to add journal to device %s"
+msgstr ""
+"\n"
+"\tao tentar adicionar diário ao dispositivo %s"
+
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
+msgid "done\n"
+msgstr "feito\n"
+
+#: misc/mke2fs.c:3321
+msgid "Skipping journal creation in super-only mode\n"
+msgstr "A saltar criação de diário em modo super-only\n"
+
+#: misc/mke2fs.c:3331
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "A criar diário (%u blocos): "
+
+#: misc/mke2fs.c:3340
+msgid ""
+"\n"
+"\twhile trying to create journal"
+msgstr ""
+"\n"
+"\tao tentar criar diário"
+
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
+msgid ""
+"\n"
+"Error while enabling multiple mount protection feature."
+msgstr ""
+"\n"
+"Erro ao activar funcionalidade de protecção de múltipla montagem."
+
+#: misc/mke2fs.c:3357
+#, c-format
+msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
+msgstr "Protecção de múltipla montagem activada com intervalo de actualização de %d segundos.\n"
+
+#: misc/mke2fs.c:3373
+msgid "Copying files into the device: "
+msgstr "A copiar ficheiros para o dispositivo: "
+
+#: misc/mke2fs.c:3379
+msgid "while populating file system"
+msgstr "ao povoar o sistema de ficheiros"
+
+#: misc/mke2fs.c:3386
+msgid "Writing superblocks and filesystem accounting information: "
+msgstr "A escrever super-blocos e informação de contabilidade do sistema de ficheiros: "
+
+#: misc/mke2fs.c:3393
+msgid "while writing out and closing file system"
+msgstr "ao escrever e fechar o sistema de ficheiros"
+
+#: misc/mke2fs.c:3396
+msgid ""
+"done\n"
+"\n"
+msgstr ""
+"feito\n"
+"\n"
+
+#: misc/mk_hugefiles.c:339
+#, c-format
+msgid "while zeroing block %llu for hugefile"
+msgstr "ao pôr a zero o bloco %llu para ficheiro enorme"
+
+#: misc/mk_hugefiles.c:515
+#, c-format
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgstr "Desvio de partição de %llu (%uk) blocos não é compatível com o tamanho do cluster %u.\n"
+
+#: misc/mk_hugefiles.c:583
+msgid "Huge files will be zero'ed\n"
+msgstr "Ficheiros enormes serão postos a zero\n"
+
+#: misc/mk_hugefiles.c:584
+#, c-format
+msgid "Creating %lu huge file(s) "
+msgstr "A criar %lu ficheiros enormes."
+
+#: misc/mk_hugefiles.c:586
+#, c-format
+msgid "with %llu blocks each"
+msgstr "com %llu blocos cada"
+
+#: misc/mk_hugefiles.c:595
+#, c-format
+msgid "while creating huge file %lu"
+msgstr "ao criar ficheiro enorme %lu"
+
+#: misc/mklost+found.c:50
+msgid "Usage: mklost+found\n"
+msgstr "Uso: mklost+found\n"
+
+#: misc/partinfo.c:43
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Uso:  %s dispositivo...\n"
+"\n"
+"Imprime a informação da partição para cada dispositivo indicado.\n"
+"Por exemplo: %s /dev/hda\n"
+"\n"
+
+#: misc/partinfo.c:53
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "Impossível abrir %s: %s"
+
+#: misc/partinfo.c:59
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr "Impossível obter a geometria de %s: %s"
+
+#: misc/partinfo.c:67
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "Impossível obter o tamanho de %s: %s"
+
+#: misc/partinfo.c:73
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr "%s: h=%3d s=%3d c=%4d   início=%8d tamanho=%8lu fim=%8d\n"
+
+#: misc/tune2fs.c:119
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+"\n"
+"Esta operação requer um sistema de ficheiros acabado de verificar.\n"
+
+#: misc/tune2fs.c:121
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Por favor, execute e2fsck -f no sistema de ficheiros.\n"
+
+#: misc/tune2fs.c:123
+msgid "Please run e2fsck -fD on the filesystem.\n"
+msgstr "Por favor, execute e2fsck -fD no sistema de ficheiros.\n"
+
+#: misc/tune2fs.c:136
+#, c-format
+msgid ""
+"Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
+"\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
+"\t[-O [^]feature[,...]] [-Q quota_options]\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[-I new_inode_size] [-z undo_file] device\n"
+msgstr ""
+"Uso: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g grupo]\n"
+"\t[-i intervalo[d|m|w]] [-j] [-J journal_options] [-l]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
+"\t[-r reserved_blocks_count] [-u utilizador] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
+"\t[-O [^]funcionalidade[,...]] [-Q quota_options]\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[-I new_inode_size] [-z undo_file] dispositivo\n"
+
+#: misc/tune2fs.c:223
+msgid "Journal superblock not found!\n"
+msgstr "Super-bloco de diário não encontrado!\n"
+
+#: misc/tune2fs.c:281
+msgid "while trying to open external journal"
+msgstr "ao tentar abrir diário externo"
+
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
+#, c-format
+msgid "%s is not a journal device.\n"
+msgstr "%s não é dispositivo de diário.\n"
+
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr ""
+"Super-bloco de diário corrompido, nr_users\n"
+"muito alto (%d).\n"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
+msgid "Filesystem's UUID not found on journal device.\n"
+msgstr "UUID do sistema de ficheiros não encontrada no dispositivo de diário.\n"
+
+#: misc/tune2fs.c:327
+msgid ""
+"Cannot locate journal device. It was NOT removed\n"
+"Use -f option to remove missing journal device.\n"
+msgstr ""
+"Impossível localizar o dispositivo de diário. NÃO foi removido\n"
+"Use a opção -f para remover o dispositivo de diário em falta.\n"
+
+#: misc/tune2fs.c:336
+msgid "Journal removed\n"
+msgstr "Diário removido\n"
+
+#: misc/tune2fs.c:380
+msgid "while reading bitmaps"
+msgstr "ao ler bitmaps"
+
+#: misc/tune2fs.c:388
+msgid "while clearing journal inode"
+msgstr "ao limpar inode de diário"
+
+#: misc/tune2fs.c:399
+msgid "while writing journal inode"
+msgstr "ao escrever inode de diário"
+
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
+msgid "(and reboot afterwards!)\n"
+msgstr "(e reiniciar depois!)\n"
+
+#: misc/tune2fs.c:486
+#, c-format
+msgid "After running e2fsck, please run `resize2fs %s %s"
+msgstr "Após executar e2fsck, por favor execute `resize2fs %s %s"
+
+#: misc/tune2fs.c:489
+#, c-format
+msgid "Please run `resize2fs %s %s"
+msgstr "Por favor, execute `resize2fs %s %s"
+
+#: misc/tune2fs.c:493
+#, c-format
+msgid " -z \"%s\""
+msgstr " -z \"%s\""
+
+#: misc/tune2fs.c:495
+#, c-format
+msgid "' to enable 64-bit mode.\n"
+msgstr "' para activar o modo 64-bit.\n"
+
+#: misc/tune2fs.c:497
+#, c-format
+msgid "' to disable 64-bit mode.\n"
+msgstr "' para desactivar o modo 64-bit.\n"
+
+#: misc/tune2fs.c:1035
+msgid ""
+"WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
+"  This requires Linux >= v4.4.\n"
+msgstr ""
+"AVISO: impossível confirmar o suporte do kernel a metadata_csum_seed.\n"
+"  Isto requer o Linux >= v4.4.\n"
+
+#: misc/tune2fs.c:1071
+#, c-format
+msgid "Clearing filesystem feature '%s' not supported.\n"
+msgstr "Funcionalidade \"%s\" de limpeza do sistema de ficheiros não suportada.\n"
+
+#: misc/tune2fs.c:1077
+#, c-format
+msgid "Setting filesystem feature '%s' not supported.\n"
+msgstr "Funcionalidade \"%s\" de definição do sistema de ficheiros não suportada.\n"
+
+#: misc/tune2fs.c:1086
+msgid ""
+"The has_journal feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"A funcionalidade has_journal só pode ser limpa quando o sistema de ficheiros estiver\n"
+"desmontado ou montado como só-de-leitura.\n"
+
+#: misc/tune2fs.c:1094
+msgid ""
+"The needs_recovery flag is set.  Please run e2fsck before clearing\n"
+"the has_journal flag.\n"
+msgstr ""
+"A bandeira needs_recovery está definida. Por favor, execute e2fsck antes de limpar\n"
+"a bandeira has_journal.\n"
+
+#: misc/tune2fs.c:1112
+msgid ""
+"Setting filesystem feature 'sparse_super' not supported\n"
+"for filesystems with the meta_bg feature enabled.\n"
+msgstr ""
+"Definiçã da funcionalidade \"sparse_super\" do sistema de ficheiros não suportada\n"
+"em sistemas de ficheiros com meta_bg feature activa.\n"
+
+#: misc/tune2fs.c:1125
+msgid ""
+"The multiple mount protection feature can't\n"
+"be set if the filesystem is mounted or\n"
+"read-only.\n"
+msgstr ""
+"A funcionalidade de protecção de montagem múltipla não\n"
+"pode ser definida se o sistema de ficheiros estiver montado\n"
+"seja só de leitura.\n"
+
+#: misc/tune2fs.c:1143
+#, c-format
+msgid "Multiple mount protection has been enabled with update interval %ds.\n"
+msgstr "Protecção de montagem múltipla activada com intervalo de actualização de  %ds.\n"
+
+#: misc/tune2fs.c:1152
+msgid ""
+"The multiple mount protection feature cannot\n"
+"be disabled if the filesystem is readonly.\n"
+msgstr ""
+"A funcionalidade de protecção de montagem múltipla não pode\n"
+"ser desactivada se o sistema de ficheiros for só de leitura.\n"
+
+#: misc/tune2fs.c:1160
+msgid "Error while reading bitmaps\n"
+msgstr "Erro ao ler bitmaps\n"
+
+#: misc/tune2fs.c:1169
+#, c-format
+msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
+msgstr "O número mágico no bloco MMP não corresponde. Esperado: %x, actual: %x\n"
+
+#: misc/tune2fs.c:1174
+msgid "while reading MMP block."
+msgstr "ao ler bloco MMP."
+
+#: misc/tune2fs.c:1206
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+"Limpar a bandeira flex_bg faria com que o sistema de ficheiros se\n"
+"tornasse inconsistente.\n"
+
+#: misc/tune2fs.c:1217
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"A funcionalidade huge_file só pode ser limpa quando o sistema de ficheiros estiver\n"
+"desmontado ou montado só-de-leitura.\n"
+
+#: misc/tune2fs.c:1228
+msgid "Enabling checksums could take some time."
+msgstr "Activar as checksums pode levar algum tempo."
+
+#: misc/tune2fs.c:1230
+msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
+msgstr "Impossível activar metadata_csum num sistema de ficheiros montado!\n"
+
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
+msgstr "Extents não estão activas. A árvore de extensão do ficheiro pode aceitar a checksum, mas os mapas de bloco não. Não activar as extensões reduz a cobertura das checksums de meta-dados. Re-execute com -O extent para rectificar.\n"
+
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
+msgstr "Suporte a sistemas de ficheiros de 64-bit não activo. Os campos mais largos oferecidos por esta funcionalidade permitem as checksums de máxima força. Execute resize2fs -b para rectificar.\n"
+
+#: misc/tune2fs.c:1269
+msgid "Disabling checksums could take some time."
+msgstr "Desactivar as checksums pode levar algum tempo."
+
+#: misc/tune2fs.c:1271
+msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
+msgstr "Impossível desactivar metadata_csum num sistema de ficheiros montado!\n"
+
+#: misc/tune2fs.c:1334
+#, c-format
+msgid "Cannot enable 64-bit mode while mounted!\n"
+msgstr "Impossível activar o modo 64-bit enquanto montado!\n"
+
+#: misc/tune2fs.c:1344
+#, c-format
+msgid "Cannot disable 64-bit mode while mounted!\n"
+msgstr "Impossível desactivar o modo 64-bit enquanto montado!\n"
+
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
+msgstr "Impossível activar a funcionalidade do projecto; tamanho de inode muito pequeno.\n"
+
+#: misc/tune2fs.c:1395
+msgid ""
+"\n"
+"Warning: '^quota' option overrides '-Q'arguments.\n"
+msgstr ""
+"\n"
+"Aviso: a opção \"^quota\" sobrpõe-se a argumentos \"-Q\".\n"
+
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr "Impossível activar a funcionalidade de encriptação em sistemas de ficheiros com codificação activa.\n"
+
+#: misc/tune2fs.c:1419
+msgid ""
+"Setting feature 'metadata_csum_seed' is only supported\n"
+"on filesystems with the metadata_csum feature enabled.\n"
+msgstr ""
+"Definir a funcionalidade \"metadata_csum_seed\" só é suportado\n"
+"em sistemas de ficheiroscom a funcionalidade metadata_csum activa.\n"
+
+#: misc/tune2fs.c:1437
+msgid ""
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
+"to safely rewrite all metadata to match the new UUID.\n"
+msgstr ""
+"UUID alterada desde a activação de metadata_csum. O sistema de ficheiros tem de ser\n"
+"desmontado para reescrever com segurança os meta-dados correspondentes à nova UUID.\n"
+
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr "Recalcular as checksums pode levar algum tempo."
+
+#: misc/tune2fs.c:1485
+msgid "The filesystem already has a journal.\n"
+msgstr "O sistema de ficheiros já tem um diário.\n"
+
+#: misc/tune2fs.c:1505
+#, c-format
+msgid ""
+"\n"
+"\twhile trying to open journal on %s\n"
+msgstr ""
+"\n"
+"\tao tentar abrir o diário em %s\n"
+
+#: misc/tune2fs.c:1509
+#, c-format
+msgid "Creating journal on device %s: "
+msgstr "A criar diário no dispositivo %s: "
+
+#: misc/tune2fs.c:1517
+#, c-format
+msgid "while adding filesystem to journal on %s"
+msgstr "ao adicionar sistema de ficheiros ao diário em %s"
+
+#: misc/tune2fs.c:1523
+msgid "Creating journal inode: "
+msgstr "A criar inode de diário: "
+
+#: misc/tune2fs.c:1537
+msgid ""
+"\n"
+"\twhile trying to create journal file"
+msgstr ""
+"\n"
+"\tao tentar criar ficheiros de diário"
+
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr "Impossível activar quota do projecto; tamanho de inode muito pequeno.\n"
+
+#: misc/tune2fs.c:1588
+msgid "while initializing quota context in support library"
+msgstr "ao inicializar contexto de quota em biblioteca de suporte"
+
+#: misc/tune2fs.c:1603
+#, c-format
+msgid "while updating quota limits (%d)"
+msgstr "ao actualizar limites de quota (%d)"
+
+#: misc/tune2fs.c:1611
+#, c-format
+msgid "while writing quota file (%d)"
+msgstr "ao escrever ficheiro de quota (%d)"
+
+#: misc/tune2fs.c:1629
+#, c-format
+msgid "while removing quota file (%d)"
+msgstr "ao remover ficheiro de quota (%d)"
+
+#: misc/tune2fs.c:1672
+msgid ""
+"\n"
+"Bad quota options specified.\n"
+"\n"
+"Following valid quota options are available (pass by separating with comma):\n"
+"\t[^]usr[quota]\n"
+"\t[^]grp[quota]\n"
+"\t[^]prj[quota]\n"
+"\n"
+"\n"
+msgstr ""
+"\n"
+"Más opções de quota especificadas.\n"
+"\n"
+"Estão disponíveis as seguintes opções válidas de quota (passe separadas por vírgulas):\n"
+"\t[^]usr[quota]\n"
+"\t[^]grp[quota]\n"
+"\t[^]prj[quota]\n"
+"\n"
+"\n"
+
+#: misc/tune2fs.c:1730
+#, c-format
+msgid "Couldn't parse date/time specifier: %s"
+msgstr "Impossível analisar especificador de data/hora: %s"
+
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
+#, c-format
+msgid "bad mounts count - %s"
+msgstr "total de montagem mau - %s"
+
+#: misc/tune2fs.c:1811
+#, c-format
+msgid "bad gid/group name - %s"
+msgstr "mau nome de gid/grupo - %s"
+
+#: misc/tune2fs.c:1844
+#, c-format
+msgid "bad interval - %s"
+msgstr "mau intervalo - %s"
+
+#: misc/tune2fs.c:1873
+#, c-format
+msgid "bad reserved block ratio - %s"
+msgstr "má proporção de bloco reservado - %s"
+
+#: misc/tune2fs.c:1888
+msgid "-o may only be specified once"
+msgstr "-o só pode ser especificado uma vez"
+
+#: misc/tune2fs.c:1897
+msgid "-O may only be specified once"
+msgstr "-O só pode ser especificado uma vez"
+
+#: misc/tune2fs.c:1914
+#, c-format
+msgid "bad reserved blocks count - %s"
+msgstr "mau total de blocos reservados - %s"
+
+#: misc/tune2fs.c:1943
+#, c-format
+msgid "bad uid/user name - %s"
+msgstr "mau nome de uid/utilizador - %s"
+
+#: misc/tune2fs.c:1960
+#, c-format
+msgid "bad inode size - %s"
+msgstr "mau tamanho de inode - %s"
+
+#: misc/tune2fs.c:1967
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "Tamanho de inode tem de ser uma potência de 2- %s"
+
+#: misc/tune2fs.c:2064
+#, c-format
+msgid "mmp_update_interval too big: %lu\n"
+msgstr "mmp_update_interval muito grande: %lu\n"
+
+#: misc/tune2fs.c:2069
+#, 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] "A definir intervalo de actualização de protecção de montagem múltipla para %lu segundo\n"
+msgstr[1] "A definir intervalo de actualização de protecção de montagem múltipla para %lu segundos\n"
+
+#: misc/tune2fs.c:2078
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "A definir bandeira de erro do sistema de ficheiros para forçar fsck.\n"
+
+#: misc/tune2fs.c:2096
+#, c-format
+msgid "Invalid RAID stride: %s\n"
+msgstr "Passo RAID inválido: %s\n"
+
+#: misc/tune2fs.c:2111
+#, c-format
+msgid "Invalid RAID stripe-width: %s\n"
+msgstr "Largura de banda RAID inválida: %s\n"
+
+#: misc/tune2fs.c:2126
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Algoritmo hash inválido: %s\n"
+
+#: misc/tune2fs.c:2132
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr "A predefinir algoritmo hash para %s (%d)\n"
+
+#: misc/tune2fs.c:2151
+msgid ""
+"\n"
+"Bad options specified.\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tclear_mmp\n"
+"\thash_alg=<hash algorithm>\n"
+"\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
+"\tstride=<RAID per-disk chunk size in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
+"\ttest_fs\n"
+"\t^test_fs\n"
+msgstr ""
+"\n"
+"Especificou más opções estendidas: %s\n"
+"\n"
+"Opções estendidas são separadas por vírgulas e podem receber um argumento\n"
+"\tiniciado por um sinal de igual (\"=\").\n"
+"\n"
+"As opções válidas são:\n"
+"\tclear_mmp\n"
+"\thash_alg=<algoritmo hash>\n"
+"\tmount_opts=<opções de montagem estendidas predefinidas>\n"
+"\tmmp_update_interval=<intervalo de actualização mmp em segundos>\n"
+"\tstride=<tamanho de bocado de RAID por-disco em blocos>\n"
+"\tstripe_width=<RAID passo*discos de dados em blocos>\n"
+"\tforce_fsck\n"
+"\ttest_fs\n"
+"\t^test_fs\n"
+
+#: misc/tune2fs.c:2622
+msgid "Failed to read inode bitmap\n"
+msgstr "Falha ao ler bitmap de inode\n"
+
+#: misc/tune2fs.c:2627
+msgid "Failed to read block bitmap\n"
+msgstr "Falha ao ler bitmap de bloco\n"
+
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
+msgid "blocks to be moved"
+msgstr "blocos a mover"
+
+#: misc/tune2fs.c:2647
+msgid "Failed to allocate block bitmap when increasing inode size\n"
+msgstr "Falha ao alocar bimap de bloco ao aumentar tamanho do inode\n"
+
+#: misc/tune2fs.c:2653
+msgid "Not enough space to increase inode size \n"
+msgstr "Sem espaço suficiente para aumentar tamanho do inode \n"
+
+#: misc/tune2fs.c:2658
+msgid "Failed to relocate blocks during inode resize \n"
+msgstr "Falha ao relocalizar blocos durante o redimensionamento do inode \n"
+
+#: misc/tune2fs.c:2690
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+"Erro ao redimensionar o inode.\n"
+"Execute e2undo para desfazer as alterações ao sistema de ficheiros. \n"
+
+#: misc/tune2fs.c:2900
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+"Se tem a certeza de que o sistema de ficheiros não está em uso em nenhum nó, execute:\n"
+"\"tune2fs -f -E clear_mmp {dispositivo}\"\n"
+
+#: misc/tune2fs.c:2907
+#, c-format
+msgid ""
+"MMP block magic is bad. Try to fix it by running:\n"
+"'e2fsck -f %s'\n"
+msgstr ""
+"A magia do bloco MMP está má. Tente repará-la executando:\n"
+"\"e2fsck -f %s\"\n"
+
+#: misc/tune2fs.c:2919
+msgid "Cannot modify a journal device.\n"
+msgstr "Impossível modificar um dispositivo de diário.\n"
+
+#: misc/tune2fs.c:2932
+#, c-format
+msgid "The inode size is already %lu\n"
+msgstr "O tamanho do inode já é %lu\n"
+
+#: misc/tune2fs.c:2939
+msgid "Shrinking inode size is not supported\n"
+msgstr "Diminuição do tamanho do inode não suportada\n"
+
+#: misc/tune2fs.c:2944
+#, c-format
+msgid "Invalid inode size %lu (max %d)\n"
+msgstr "Tamanho de inode inválido %lu (máx %d)\n"
+
+#: misc/tune2fs.c:2950
+msgid "Resizing inodes could take some time."
+msgstr "Redimensionar inodes pode levar algum tempo."
+
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+"Aviso: o diário está sujo. Poderá querer reproduzir o diário assim:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"e depois re-executar este comando. Senão, quaisquer alterações podem ser sobrescritas\n"
+"pela recuperação do diário.\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "A recuperar diário.\n"
+
+#: misc/tune2fs.c:3028
+#, c-format
+msgid "Setting maximal mount count to %d\n"
+msgstr "A definir máximo de total de montagens para %d\n"
+
+#: misc/tune2fs.c:3034
+#, c-format
+msgid "Setting current mount count to %d\n"
+msgstr "A definir total de montagens actual para %d\n"
+
+#: misc/tune2fs.c:3039
+#, c-format
+msgid "Setting error behavior to %d\n"
+msgstr "A definir comportamento de erro para %d\n"
+
+#: misc/tune2fs.c:3044
+#, c-format
+msgid "Setting reserved blocks gid to %lu\n"
+msgstr "A definir gid de blocos reservados para %lu\n"
+
+#: misc/tune2fs.c:3049
+#, c-format
+msgid "interval between checks is too big (%lu)"
+msgstr "intervalo entre verificações muito grande (%lu)"
+
+#: misc/tune2fs.c:3056
+#, c-format
+msgid "Setting interval between checks to %lu seconds\n"
+msgstr "A definir intervalo entre verificações para %lu segundos\n"
+
+#: misc/tune2fs.c:3063
+#, c-format
+msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
+msgstr "A definir percentagem de blocos reservados para %g%% (%llu blocos)\n"
+
+#: misc/tune2fs.c:3069
+#, c-format
+msgid "reserved blocks count is too big (%llu)"
+msgstr "total de blocos reservados muito grande (%llu)"
+
+#: misc/tune2fs.c:3076
+#, c-format
+msgid "Setting reserved blocks count to %llu\n"
+msgstr "A definir total de blocos reservados para %llu\n"
+
+#: misc/tune2fs.c:3081
+msgid ""
+"\n"
+"The filesystem already has sparse superblocks.\n"
+msgstr ""
+"\n"
+"O sistema de ficheiros já tem super-blocos esparsos.\n"
+
+#: misc/tune2fs.c:3084
+msgid ""
+"\n"
+"Setting the sparse superblock flag not supported\n"
+"for filesystems with the meta_bg feature enabled.\n"
+msgstr ""
+"\n"
+"Definição de bandeira de super-bloco esparso não suportada\n"
+"em sistemas de ficheiros com a funcionalidade meta_bg activa.\n"
+
+#: misc/tune2fs.c:3094
+#, c-format
+msgid ""
+"\n"
+"Sparse superblock flag set.  %s"
+msgstr ""
+"\n"
+"Bandeira de super-bloco esparso definida. %s"
+
+#: misc/tune2fs.c:3099
+msgid ""
+"\n"
+"Clearing the sparse superblock flag not supported.\n"
+msgstr ""
+"\n"
+"Limpeza da bandeira de super-bloco esparso não suportada.\n"
+
+#: misc/tune2fs.c:3107
+#, c-format
+msgid "Setting time filesystem last checked to %s\n"
+msgstr "A definir hora da última verificação do sistema de ficheiros para %s\n"
+
+#: misc/tune2fs.c:3113
+#, c-format
+msgid "Setting reserved blocks uid to %lu\n"
+msgstr "A definir uid de blocos reservados para %lu\n"
+
+#: misc/tune2fs.c:3145
+msgid "Error in using clear_mmp. It must be used with -f\n"
+msgstr "Erro ao usar clear_mmp. Tem de ser usado com -f\n"
+
+#: misc/tune2fs.c:3163
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
+msgstr "A funcionalidade de quota só pode ser alterada com o sistema de ficheiros desmontado.\n"
+
+#: misc/tune2fs.c:3181
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "Definir a UUID neste sistema de ficheiros pode levar algum tempo."
+
+#: misc/tune2fs.c:3196
+msgid "The UUID may only be changed when the filesystem is unmounted.\n"
+msgstr "A UUID só pode ser alterada com o sistema de ficheiros desmontado.\n"
+
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
+msgstr "Se só utiliza kernels mais recentes que o v4.4, execute \"tune2fs -O metadata_csum_seed\" e re-execute este comando.\n"
+
+#: misc/tune2fs.c:3229
+msgid "Invalid UUID format\n"
+msgstr "Formato de UUID inválido\n"
+
+#: misc/tune2fs.c:3245
+msgid "Need to update journal superblock.\n"
+msgstr "Tem de actualizar o super-bloco de diário.\n"
+
+#: misc/tune2fs.c:3267
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr "O tamanho de inode só pode ser alterado com o sistema de ficheiros desmontado.\n"
+
+#: misc/tune2fs.c:3274
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+"Alteração de tamanho de inode não suportada em sistemas de ficheiros com a funcionalidade\n"
+"flex_bg activa.\n"
+
+#: misc/tune2fs.c:3292
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "A definir tamanho de inode %lu\n"
+
+#: misc/tune2fs.c:3296
+msgid "Failed to change inode size\n"
+msgstr "Falha ao alterar o tamanho de inode\n"
+
+#: misc/tune2fs.c:3310
+#, c-format
+msgid "Setting stride size to %d\n"
+msgstr "A definir tamanho de passo para %d\n"
+
+#: misc/tune2fs.c:3315
+#, c-format
+msgid "Setting stripe width to %d\n"
+msgstr "A definir largura de banda para %d\n"
+
+#: misc/tune2fs.c:3322
+#, c-format
+msgid "Setting extended default mount options to '%s'\n"
+msgstr "A predefinir opções de montagem estendidas para \"%s\"\n"
+
+#: misc/util.c:101
+msgid "<proceeding>\n"
+msgstr "<prosseguindo>\n"
+
+#: misc/util.c:105
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "Proceder mesmo assim (ou esperar %d segundos para proceder)? (y,N) "
+
+#: misc/util.c:109
+msgid "Proceed anyway? (y,N) "
+msgstr "Proceder mesmo assim? (y,N) "
+
+#: misc/util.c:136
+msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
+msgstr "mke2fs forçado mesmo assim. Esperemos que /etc/mtab esteja incorrecta.\n"
+
+#: misc/util.c:141
+#, c-format
+msgid "will not make a %s here!\n"
+msgstr "não fará um %s aqui!\n"
+
+#: misc/util.c:148
+msgid "mke2fs forced anyway.\n"
+msgstr "mke2fs forçado mesmo assim.\n"
+
+#: misc/util.c:164
+msgid "Couldn't allocate memory to parse journal options!\n"
+msgstr "Impossível alocar memória para processar opções do diário!\n"
+
+#: misc/util.c:189
+#, c-format
+msgid ""
+"\n"
+"Could not find journal device matching %s\n"
+msgstr ""
+"\n"
+"Impossível encontrar dispositivo de diário correspondente a %s\n"
+
+#: misc/util.c:216
+msgid ""
+"\n"
+"Bad journal options specified.\n"
+"\n"
+"Journal options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid journal options are:\n"
+"\tsize=<journal size in megabytes>\n"
+"\tdevice=<journal device>\n"
+"\tlocation=<journal location>\n"
+"\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
+"\n"
+msgstr ""
+"\n"
+"Más opções de diário especificadas.\n"
+"\n"
+"As opções de diário são separadas por vírgulas e podem receber um argumento que\n"
+"\té definido por um sinal de igual (\"=\").\n"
+"\n"
+"As opções de diário válidas são:\n"
+"\tsize=<tamanho do diário em megabytes>\n"
+"\tdevice=<dispositivo de diário>\n"
+"\tlocation=<localização do diário>\n"
+"\n"
+"O tamanho do diário tem de estar entre 1024 e 10240000 blocos do sistema de ficheiros.\n"
+"\n"
+
+#: misc/util.c:247
+msgid ""
+"\n"
+"Filesystem too small for a journal\n"
+msgstr ""
+"\n"
+"Sistema de ficheiros muito pequeno para um diário\n"
+
+#: misc/util.c:254
+#, c-format
+msgid ""
+"\n"
+"The requested journal size is %d blocks; it must be\n"
+"between 1024 and 10240000 blocks.  Aborting.\n"
+msgstr ""
+"\n"
+"O tamanho de diário pedido é %d blocos; tem de estar\n"
+"entre 1024 e 10240000 blocos. A abortar.\n"
+
+#: misc/util.c:262
+msgid ""
+"\n"
+"Journal size too big for filesystem.\n"
+msgstr ""
+"\n"
+"Tamanho de diário muito grande para o sistema de ficheiros.\n"
+
+#: misc/util.c:276
+#, c-format
+msgid ""
+"This filesystem will be automatically checked every %d mounts or\n"
+"%g days, whichever comes first.  Use tune2fs -c or -i to override.\n"
+msgstr ""
+"Este sistema de ficheiros será verificado automaticamente a cada %d montagens ou\n"
+"%g dias, o que ocorrer primeiro. Use tune2fs -c ou -i para sobrepor.\n"
+
+#: misc/uuidd.c:49
+#, c-format
+msgid "Usage: %s [-d] [-p pidfile] [-s socketpath] [-T timeout]\n"
+msgstr "Uso: %s [-d] [-p pidfile] [-s socketpath] [-T expiração]\n"
+
+#: misc/uuidd.c:51
+#, c-format
+msgid "       %s [-r|t] [-n num] [-s socketpath]\n"
+msgstr "       %s [-r|t] [-n num] [-s socketpath]\n"
+
+#: misc/uuidd.c:53
+#, c-format
+msgid "       %s -k\n"
+msgstr "       %s -k\n"
+
+#: misc/uuidd.c:155
+msgid "bad arguments"
+msgstr "maus argumentos"
+
+#: misc/uuidd.c:173
+msgid "connect"
+msgstr "ligar"
+
+#: misc/uuidd.c:192
+msgid "write"
+msgstr "escrever"
+
+#: misc/uuidd.c:200
+msgid "read count"
+msgstr "ler total"
+
+#: misc/uuidd.c:206
+msgid "bad response length"
+msgstr "mau tamanho de resposta"
+
+#: misc/uuidd.c:271
+#, c-format
+msgid "uuidd daemon already running at pid %s\n"
+msgstr "daemon uuidd já em execução em pid %s\n"
+
+#: misc/uuidd.c:279
+#, c-format
+msgid "Couldn't create unix stream socket: %s"
+msgstr "Impossível criar unix stream socket: %s"
+
+#: misc/uuidd.c:308
+#, c-format
+msgid "Couldn't bind unix socket %s: %s\n"
+msgstr "Impossível vincular unix socket %s: %s\n"
+
+#: misc/uuidd.c:316
+#, c-format
+msgid "Couldn't listen on unix socket %s: %s\n"
+msgstr "Impossível ouvir em unix socket %s: %s\n"
+
+#: misc/uuidd.c:354
+#, c-format
+msgid "Error reading from client, len = %d\n"
+msgstr "Erro ao ler do cliente, tam = %d\n"
+
+#: misc/uuidd.c:362
+#, c-format
+msgid "operation %d, incoming num = %d\n"
+msgstr "operação %d, núm entrada = %d\n"
+
+#: misc/uuidd.c:381
+#, c-format
+msgid "Generated time UUID: %s\n"
+msgstr "Hora UUID gerada: %s\n"
+
+#: misc/uuidd.c:391
+#, c-format
+msgid "Generated random UUID: %s\n"
+msgstr "UUID aleatória gerada: %s\n"
+
+#: misc/uuidd.c:400
+#, c-format
+msgid "Generated time UUID %s and subsequent UUID\n"
+msgid_plural "Generated time UUID %s and %d subsequent UUIDs\n"
+msgstr[0] "Hora UUID gerada %s e %d UUID subsequente\n"
+msgstr[1] "Hora UUID gerada %s e %d UUIDs subsequentes\n"
+
+#: misc/uuidd.c:421
+#, c-format
+msgid "Generated %d UUID's:\n"
+msgstr "Geradas %d UUIDs:\n"
+
+#: misc/uuidd.c:433
+#, c-format
+msgid "Invalid operation %d\n"
+msgstr "Operação %d inválida\n"
+
+#: misc/uuidd.c:477 misc/uuidd.c:499
+#, c-format
+msgid "Bad number: %s\n"
+msgstr "Mau número: %s\n"
+
+#: misc/uuidd.c:534 misc/uuidd.c:563
+#, c-format
+msgid "Error calling uuidd daemon (%s): %s\n"
+msgstr "Erro ao chamar o daemon uuidd (%s): %s\n"
+
+#: misc/uuidd.c:544
+#, c-format
+msgid "%s and subsequent UUID\n"
+msgid_plural "%s and subsequent %d UUIDs\n"
+msgstr[0] "%s e %d UUID subsequente\n"
+msgstr[1] "%s e %d UUIDs subsequentes\n"
+
+#: misc/uuidd.c:548
+msgid "List of UUID's:\n"
+msgstr "Lista de UUIDs:\n"
+
+#: misc/uuidd.c:569
+#, c-format
+msgid "Unexpected reply length from server %d\n"
+msgstr "Tamanho de resposta inesperado do servidor %d\n"
+
+#: misc/uuidd.c:586
+#, c-format
+msgid "Couldn't kill uuidd running at pid %d: %s\n"
+msgstr "Impossível matar uuidd em execução em pid %d: %s\n"
+
+#: misc/uuidd.c:592
+#, c-format
+msgid "Killed uuidd running at pid %d\n"
+msgstr "Matada uuidd em execução em pid %d\n"
+
+#: misc/uuidgen.c:32
+#, c-format
+msgid "Usage: %s [-r] [-t]\n"
+msgstr "Uso: %s [-r] [-t]\n"
+
+#: resize/extent.c:202
+msgid "# Extent dump:\n"
+msgstr "Despejo # Extent:\n"
+
+#: resize/extent.c:203
+#, c-format
+msgid "#\tNum=%llu, Size=%llu, Cursor=%llu, Sorted=%llu\n"
+msgstr "#\tNúm=%llu, Tamanho=%llu, Cursor=%llu, Ordenados=%llu\n"
+
+#: resize/main.c:49
+#, c-format
+msgid ""
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
+"\n"
+msgstr ""
+"Uso: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] dispositivo [-b|-s|new_size] [-S passo-RAID] [-z undo_file]\n"
+"\n"
+
+#: resize/main.c:73
+msgid "Extending the inode table"
+msgstr "A estender tabela de inodes"
+
+#: resize/main.c:76
+msgid "Relocating blocks"
+msgstr "A relocalizar blocos"
+
+#: resize/main.c:79
+msgid "Scanning inode table"
+msgstr "A analisar tabela de inodes"
+
+#: resize/main.c:82
+msgid "Updating inode references"
+msgstr "A actualizar referências de inodes"
+
+#: resize/main.c:85
+msgid "Moving inode table"
+msgstr "A mover tabela de inodes"
+
+#: resize/main.c:88
+msgid "Unknown pass?!?"
+msgstr "Passagem desconhecida!?"
+
+#: resize/main.c:91
+#, c-format
+msgid "Begin pass %d (max = %lu)\n"
+msgstr "Passagem inicial %d (máx = %lu)\n"
+
+#: resize/main.c:163
+msgid ""
+"\n"
+"Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
+"your own risk!  Use the force option if you want to go ahead anyway.\n"
+"\n"
+msgstr ""
+"\n"
+"O redimensionamento do sistema de ficheiros bigalloc não está completamente testado. Proceda\n"
+"por sua conta e risco! Use a opção de forçar se pretende continuar de qualquer forma.\n"
+"\n"
+
+#: resize/main.c:366
+#, c-format
+msgid "while opening %s"
+msgstr "ao abri %s"
+
+#: resize/main.c:374
+#, c-format
+msgid "while getting stat information for %s"
+msgstr "ao obter estatísticas para %s"
+
+#: resize/main.c:451
+#, c-format
+msgid ""
+"Please run 'e2fsck -f %s' first.\n"
+"\n"
+msgstr ""
+"Por favor, execute \"e2fsck -f %s\" primeiro.\n"
+"\n"
+
+#: resize/main.c:470
+#, c-format
+msgid "Estimated minimum size of the filesystem: %llu\n"
+msgstr "Tamanho mínimo estimado do sistema de ficheiros: %llu\n"
+
+#: resize/main.c:507
+#, c-format
+msgid "Invalid new size: %s\n"
+msgstr "Novo tamanho inválido: %s\n"
+
+#: resize/main.c:526
+msgid "New size too large to be expressed in 32 bits\n"
+msgstr "Novo tamanho muito grade para ser expressado em 32 bits\n"
+
+#: resize/main.c:534
+#, c-format
+msgid "New size smaller than minimum (%llu)\n"
+msgstr "Novo tamanho menor que o mínimo (%llu)\n"
+
+#: resize/main.c:540
+msgid "Invalid stride length"
+msgstr "Tamanho de passo inválido"
+
+#: resize/main.c:564
+#, 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 ""
+"A partição contentora (ou dispositivo) só tem %llu (%dk) blocos.\n"
+"Pediu um novo tamanho de %llu blocos.\n"
+"\n"
+
+#: resize/main.c:571
+#, c-format
+msgid "Cannot set and unset 64bit feature.\n"
+msgstr "Impossível definir e limpar a funcionalidade 64bit.\n"
+
+#: resize/main.c:575
+#, c-format
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
+msgstr "Impossível alterar a funcionalidade 64bit num sistema de ficheiros maior que 2^32 blocos.\n"
+
+#: resize/main.c:581
+#, c-format
+msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
+msgstr "Impossível alterar a funcionalidade 64bit enquanto o sistema de ficheiros estiver montado.\n"
+
+#: resize/main.c:587
+#, c-format
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
+msgstr "Por favor, active a funcionalidade de extensões com tune2fs antes de activar a funcionalidade 64bit.\n"
+
+#: resize/main.c:593
+#, c-format
+msgid ""
+"The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
+"\n"
+msgstr ""
+"O sistema de ficheiros já tem %llu (%dk) blocos. Nada a fazer!\n"
+"\n"
+
+#: resize/main.c:600
+#, c-format
+msgid "The filesystem is already 64-bit.\n"
+msgstr "O sistema de ficheiros já é 64-bit.\n"
+
+#: resize/main.c:605
+#, c-format
+msgid "The filesystem is already 32-bit.\n"
+msgstr "O sistema de ficheiros já é 32-bit.\n"
+
+#: resize/main.c:613
+#, c-format
+msgid "Converting the filesystem to 64-bit.\n"
+msgstr "A converter o sistema de ficheiros para 64-bit.\n"
+
+#: resize/main.c:615
+#, c-format
+msgid "Converting the filesystem to 32-bit.\n"
+msgstr "A converter o sistema de ficheiros para 32-bit.\n"
+
+#: resize/main.c:617
+#, c-format
+msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
+msgstr "A redimensionar o sistema de ficheiros em %s para %llu (%dk) blocos.\n"
+
+#: resize/main.c:626
+#, c-format
+msgid "while trying to resize %s"
+msgstr "ao tentar redimensionar %s"
+
+#: resize/main.c:629
+#, c-format
+msgid ""
+"Please run 'e2fsck -fy %s' to fix the filesystem\n"
+"after the aborted resize operation.\n"
+msgstr ""
+"Por favor, execute \"e2fsck -fy %s\" para reparar o sistema de ficheiros\n"
+"após a operação de redimensionamento abortada.\n"
+
+#: resize/main.c:635
+#, c-format
+msgid ""
+"The filesystem on %s is now %llu (%dk) blocks long.\n"
+"\n"
+msgstr ""
+"O sistema de ficheiros em %s tem agora %llu (%dk) blocos.\n"
+"\n"
+
+#: resize/main.c:650
+#, c-format
+msgid "while trying to truncate %s"
+msgstr "ao tentar truncar %s"
+
+#: resize/online.c:81
+msgid "kernel does not support online resize with sparse_super2"
+msgstr "o kernel não suporta redimensionamento em linha com sparse_super2"
+
+#: resize/online.c:86
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr "Sistema de ficheiros em %s está montado em %s; requerido redimensionamento em linha\n"
+
+#: resize/online.c:90
+msgid "On-line shrinking not supported"
+msgstr "Diminuição em linha não suportada"
+
+#: resize/online.c:114
+msgid "Filesystem does not support online resizing"
+msgstr "O sistema de ficheiros não suporta redimensionamento em linha"
+
+#: resize/online.c:122
+msgid "Not enough reserved gdt blocks for resizing"
+msgstr "Sem blocos gdt reservados suficientes para redimensionar"
+
+#: resize/online.c:129
+msgid "Kernel does not support resizing a file system this large"
+msgstr "O kernel não suporta redimensionar um sistema de ficheiros tão grande"
+
+#: resize/online.c:137
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr "ao tentar abrir ponto de montagem %s"
+
+#: resize/online.c:142
+#, c-format
+msgid "Old resize interface requested.\n"
+msgstr "Pedida uma interface de redimensionamento antiga.\n"
+
+#: resize/online.c:161 resize/online.c:178
+msgid "Permission denied to resize filesystem"
+msgstr "Permissão negada para redimensionar o sistema de ficheiros"
+
+#: resize/online.c:164 resize/online.c:184
+msgid "While checking for on-line resizing support"
+msgstr "Ao verificar suporte a redimensionamento em linha"
+
+#: resize/online.c:181
+msgid "Kernel does not support online resizing"
+msgstr "O kernel não suporta redimensionamento em linha"
+
+#: resize/online.c:220
+#, c-format
+msgid "Performing an on-line resize of %s to %llu (%dk) blocks.\n"
+msgstr "A realizar redimensionamento em linha de %s para %llu (%dk) blocos.\n"
+
+#: resize/online.c:230
+msgid "While trying to extend the last group"
+msgstr "Ao tentar estender o último grupo"
+
+#: resize/online.c:277
+#, c-format
+msgid "While trying to add group #%d"
+msgstr "Ao tentar adicionar o grupo nº %d"
+
+#: resize/online.c:288
+#, c-format
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Sistema de ficheiros em %s montado em %s e o redimensionamento em linha não é suportado neste sistema.\n"
+
+#: resize/resize2fs.c:759
+#, c-format
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "inodes (%llu) têm de ser menos de %u\n"
+
+#: resize/resize2fs.c:1038
+msgid "reserved blocks"
+msgstr "blocos reservados"
+
+#: resize/resize2fs.c:1282
+msgid "meta-data blocks"
+msgstr "blocos de meta-dados"
+
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
+msgid "new meta blocks"
+msgstr "novos meta-blocos"
+
+#: resize/resize2fs.c:2644
+msgid "Should never happen!  No sb in last super_sparse bg?\n"
+msgstr "Nunca devia acontecer! Sem sb no último super_sparse bg?\n"
+
+#: resize/resize2fs.c:2649
+msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
+msgstr "Nunca devia acontecer!  old_desc inesperado em super_sparse bg?\n"
+
+#: resize/resize2fs.c:2722
+msgid "Should never happen: resize inode corrupt!\n"
+msgstr "Nunca devia acontecer! inode de redimensionamento corrompido!\n"
+
+#: lib/ext2fs/ext2_err.c:11
+msgid "EXT2FS Library version 1.45.3"
+msgstr "EXT2FS Library versão 1.45.3"
+
+#: lib/ext2fs/ext2_err.c:12
+msgid "Wrong magic number for ext2_filsys structure"
+msgstr "Número mágico errado para estrutura ext2_filsys"
+
+#: lib/ext2fs/ext2_err.c:13
+msgid "Wrong magic number for badblocks_list structure"
+msgstr "Número mágico errado para estrutura badblocks_list"
+
+#: lib/ext2fs/ext2_err.c:14
+msgid "Wrong magic number for badblocks_iterate structure"
+msgstr "Número mágico errado para estrutura badblocks_iterate"
+
+#: lib/ext2fs/ext2_err.c:15
+msgid "Wrong magic number for inode_scan structure"
+msgstr "Número mágico errado para estrutura inode_scan"
+
+#: lib/ext2fs/ext2_err.c:16
+msgid "Wrong magic number for io_channel structure"
+msgstr "Número mágico errado para estrutura io_channel"
+
+#: lib/ext2fs/ext2_err.c:17
+msgid "Wrong magic number for unix io_channel structure"
+msgstr "Número mágico errado para estrutura unix io_channel"
+
+#: lib/ext2fs/ext2_err.c:18
+msgid "Wrong magic number for io_manager structure"
+msgstr "Número mágico errado para estrutura io_manager"
+
+#: lib/ext2fs/ext2_err.c:19
+msgid "Wrong magic number for block_bitmap structure"
+msgstr "Número mágico errado para estrutura block_bitmap"
+
+#: lib/ext2fs/ext2_err.c:20
+msgid "Wrong magic number for inode_bitmap structure"
+msgstr "Número mágico errado para estrutura inode_bitmap"
+
+#: lib/ext2fs/ext2_err.c:21
+msgid "Wrong magic number for generic_bitmap structure"
+msgstr "Número mágico errado para estrutura generic_bitmap"
+
+#: lib/ext2fs/ext2_err.c:22
+msgid "Wrong magic number for test io_channel structure"
+msgstr "Número mágico errado para estrutura test io_channel"
+
+#: lib/ext2fs/ext2_err.c:23
+msgid "Wrong magic number for directory block list structure"
+msgstr "Número mágico errado para estrutura directory block list"
+
+#: lib/ext2fs/ext2_err.c:24
+msgid "Wrong magic number for icount structure"
+msgstr "Número mágico errado para estrutura icount"
+
+#: lib/ext2fs/ext2_err.c:25
+msgid "Wrong magic number for Powerquest io_channel structure"
+msgstr "Número mágico errado para estrutura Powerquest io_channel"
+
+#: lib/ext2fs/ext2_err.c:26
+msgid "Wrong magic number for ext2 file structure"
+msgstr "Número mágico errado para estrutura ext2 file"
+
+#: lib/ext2fs/ext2_err.c:27
+msgid "Wrong magic number for Ext2 Image Header"
+msgstr "Número mágico errado para Ext2 Image Header"
+
+#: lib/ext2fs/ext2_err.c:28
+msgid "Wrong magic number for inode io_channel structure"
+msgstr "Número mágico errado para estrutura inode io_channel"
+
+#: lib/ext2fs/ext2_err.c:29
+msgid "Wrong magic number for ext4 extent handle"
+msgstr "Número mágico errado para gestor de extensão ext4"
+
+#: lib/ext2fs/ext2_err.c:30
+msgid "Bad magic number in super-block"
+msgstr "Mau número mágico em super-bloco"
+
+#: lib/ext2fs/ext2_err.c:31
+msgid "Filesystem revision too high"
+msgstr "Revisão do sistema de ficheiros muito alta"
+
+#: lib/ext2fs/ext2_err.c:32
+msgid "Attempt to write to filesystem opened read-only"
+msgstr "Tentativa de escrever num sistema de ficheiros só-de-leitura"
+
+#: lib/ext2fs/ext2_err.c:33
+msgid "Can't read group descriptors"
+msgstr "Impossível ler descritores de grupo"
+
+#: lib/ext2fs/ext2_err.c:34
+msgid "Can't write group descriptors"
+msgstr "Impossível escrever descritores de grupo"
+
+#: lib/ext2fs/ext2_err.c:35
+msgid "Corrupt group descriptor: bad block for block bitmap"
+msgstr "Descritor de grupo corrompido: mau bloco para bitmap de bloco"
+
+#: lib/ext2fs/ext2_err.c:36
+msgid "Corrupt group descriptor: bad block for inode bitmap"
+msgstr "Descritor de grupo corrompido: mau bloco para bitmap de inode"
+
+#: lib/ext2fs/ext2_err.c:37
+msgid "Corrupt group descriptor: bad block for inode table"
+msgstr "Descritor de grupo corrompido: mau bloco para tabela de inodes"
+
+#: lib/ext2fs/ext2_err.c:38
+msgid "Can't write an inode bitmap"
+msgstr "Impossível escrever um bitmap de inode"
+
+#: lib/ext2fs/ext2_err.c:39
+msgid "Can't read an inode bitmap"
+msgstr "Impossível ler um bitmap de inode"
+
+#: lib/ext2fs/ext2_err.c:40
+msgid "Can't write a block bitmap"
+msgstr "Impossível escrever um bitmap de bloco"
+
+#: lib/ext2fs/ext2_err.c:41
+msgid "Can't read a block bitmap"
+msgstr "Impossível ler um bitmap de bloco"
+
+#: lib/ext2fs/ext2_err.c:42
+msgid "Can't write an inode table"
+msgstr "Impossível escrever uma tabela de inodes"
+
+#: lib/ext2fs/ext2_err.c:43
+msgid "Can't read an inode table"
+msgstr "Impossível ler uma tabela de inodes"
+
+#: lib/ext2fs/ext2_err.c:44
+msgid "Can't read next inode"
+msgstr "Impossível ler inode seguinte"
+
+#: lib/ext2fs/ext2_err.c:45
+msgid "Filesystem has unexpected block size"
+msgstr "Sistema de ficheiros com tamanho de bloco inesperado"
+
+#: lib/ext2fs/ext2_err.c:46
+msgid "EXT2 directory corrupted"
+msgstr "Pasta EXT2 corrompida"
+
+#: lib/ext2fs/ext2_err.c:47
+msgid "Attempt to read block from filesystem resulted in short read"
+msgstr "Tentativa de ler bloco do sistema de ficheiros resultou em leitura curta"
+
+#: lib/ext2fs/ext2_err.c:48
+msgid "Attempt to write block to filesystem resulted in short write"
+msgstr "Tentativa de escrever bloco no sistema de ficheiros resultou em escrita curta"
+
+#: lib/ext2fs/ext2_err.c:49
+msgid "No free space in the directory"
+msgstr "Sem espaço livre na pasta"
+
+#: lib/ext2fs/ext2_err.c:50
+msgid "Inode bitmap not loaded"
+msgstr "Bitmap de inode não carregado"
+
+#: lib/ext2fs/ext2_err.c:51
+msgid "Block bitmap not loaded"
+msgstr "Bitmap de bloco não carregado"
+
+#: lib/ext2fs/ext2_err.c:52
+msgid "Illegal inode number"
+msgstr "Número de inode ilegal"
+
+#: lib/ext2fs/ext2_err.c:53
+msgid "Illegal block number"
+msgstr "Número de bloco ilegal"
+
+#: lib/ext2fs/ext2_err.c:54
+msgid "Internal error in ext2fs_expand_dir"
+msgstr "Erro interno em ext2fs_expand_dir"
+
+#: lib/ext2fs/ext2_err.c:55
+msgid "Not enough space to build proposed filesystem"
+msgstr "Sem espaço suficiente para construir o sistema de ficheiros proposto"
+
+#: lib/ext2fs/ext2_err.c:56
+msgid "Illegal block number passed to ext2fs_mark_block_bitmap"
+msgstr "Número de bloco ilegal passado a ext2fs_mark_block_bitmap"
+
+#: lib/ext2fs/ext2_err.c:57
+msgid "Illegal block number passed to ext2fs_unmark_block_bitmap"
+msgstr "Número de bloco ilegal passado a ext2fs_unmark_block_bitmap"
+
+#: lib/ext2fs/ext2_err.c:58
+msgid "Illegal block number passed to ext2fs_test_block_bitmap"
+msgstr "Número de bloco ilegal passado a ext2fs_test_block_bitmap"
+
+#: lib/ext2fs/ext2_err.c:59
+msgid "Illegal inode number passed to ext2fs_mark_inode_bitmap"
+msgstr "Número de inode ilegal passado a ext2fs_mark_inode_bitmap"
+
+#: lib/ext2fs/ext2_err.c:60
+msgid "Illegal inode number passed to ext2fs_unmark_inode_bitmap"
+msgstr "Número de inode ilegal passado a ext2fs_unmark_inode_bitmap"
+
+#: lib/ext2fs/ext2_err.c:61
+msgid "Illegal inode number passed to ext2fs_test_inode_bitmap"
+msgstr "Número de inode ilegal passado a ext2fs_test_inode_bitmap"
+
+#: lib/ext2fs/ext2_err.c:62
+msgid "Attempt to fudge end of block bitmap past the real end"
+msgstr "Tentativa de falsificar fim do bitmap de bloco além do fim real"
+
+#: lib/ext2fs/ext2_err.c:63
+msgid "Attempt to fudge end of inode bitmap past the real end"
+msgstr "Tentativa de falsificar fim do bitmap de inode além do fim real"
+
+#: lib/ext2fs/ext2_err.c:64
+msgid "Illegal indirect block found"
+msgstr "Encontrado bloco indirecto ilegal"
+
+#: lib/ext2fs/ext2_err.c:65
+msgid "Illegal doubly indirect block found"
+msgstr "Encontrado bloco indirecto ilegal duplo"
+
+#: lib/ext2fs/ext2_err.c:66
+msgid "Illegal triply indirect block found"
+msgstr "Encontrado bloco indirecto ilegal triplo"
+
+#: lib/ext2fs/ext2_err.c:67
+msgid "Block bitmaps are not the same"
+msgstr "Bitmaps de bloco não são os mesmos"
+
+#: lib/ext2fs/ext2_err.c:68
+msgid "Inode bitmaps are not the same"
+msgstr "Bitmaps de inode não são os mesmos"
+
+#: lib/ext2fs/ext2_err.c:69
+msgid "Illegal or malformed device name"
+msgstr "Nome de dispositivo ilegal ou mal formado"
+
+#: lib/ext2fs/ext2_err.c:70
+msgid "A block group is missing an inode table"
+msgstr "Um grupo de bloco tem tabela de inodes em falta"
+
+#: lib/ext2fs/ext2_err.c:71
+msgid "The ext2 superblock is corrupt"
+msgstr "O super-bloco ext2 está corrompido"
+
+#: lib/ext2fs/ext2_err.c:72
+msgid "Illegal generic bit number passed to ext2fs_mark_generic_bitmap"
+msgstr "Número de bit genérico ilegal passado a ext2fs_mark_generic_bitmap"
+
+#: lib/ext2fs/ext2_err.c:73
+msgid "Illegal generic bit number passed to ext2fs_unmark_generic_bitmap"
+msgstr "Número de bit genérico ilegal passado a ext2fs_unmark_generic_bitmap"
+
+#: lib/ext2fs/ext2_err.c:74
+msgid "Illegal generic bit number passed to ext2fs_test_generic_bitmap"
+msgstr "Número de bit genérico ilegal passado a ext2fs_test_generic_bitmap"
+
+#: lib/ext2fs/ext2_err.c:75
+msgid "Too many symbolic links encountered."
+msgstr "Encontradas demasiadas ligações simbólicas."
+
+#: lib/ext2fs/ext2_err.c:76
+msgid "The callback function will not handle this case"
+msgstr "A função de retorno de chamada não lidará com este caso"
+
+#: lib/ext2fs/ext2_err.c:77
+msgid "The inode is from a bad block in the inode table"
+msgstr "O inode é de um mau bloco na tabela de inodes"
+
+#: lib/ext2fs/ext2_err.c:78
+msgid "Filesystem has unsupported feature(s)"
+msgstr "O sistema de ficheiros tem funcionalidades não suportadas"
+
+#: lib/ext2fs/ext2_err.c:79
+msgid "Filesystem has unsupported read-only feature(s)"
+msgstr "O sistema de ficheiros tem funcionalidades só-de-leitura não suportadas"
+
+#: lib/ext2fs/ext2_err.c:80
+msgid "IO Channel failed to seek on read or write"
+msgstr "Canal IO falhou a procura ao ler ou escrever"
+
+#: lib/ext2fs/ext2_err.c:81
+msgid "Memory allocation failed"
+msgstr "Falha ao alocar memória"
+
+#: lib/ext2fs/ext2_err.c:82
+msgid "Invalid argument passed to ext2 library"
+msgstr "Argumento inválido passado a biblioteca ext2"
+
+#: lib/ext2fs/ext2_err.c:83
+msgid "Could not allocate block in ext2 filesystem"
+msgstr "Impossível alocar bloco em sistema de ficheiros ext2"
+
+#: lib/ext2fs/ext2_err.c:84
+msgid "Could not allocate inode in ext2 filesystem"
+msgstr "Impossível alocar inode em sistema de ficheiros ext2"
+
+#: lib/ext2fs/ext2_err.c:85
+msgid "Ext2 inode is not a directory"
+msgstr "Inode ext2 não é uma pasta"
+
+#: lib/ext2fs/ext2_err.c:86
+msgid "Too many references in table"
+msgstr "Demasiadas referências na tabela"
+
+#: lib/ext2fs/ext2_err.c:87
+msgid "File not found by ext2_lookup"
+msgstr "Ficheiro não encontrado por ext2_lookup"
+
+#: lib/ext2fs/ext2_err.c:88
+msgid "File open read-only"
+msgstr "Ficheiro aberto só-de-leitura"
+
+#: lib/ext2fs/ext2_err.c:89
+msgid "Ext2 directory block not found"
+msgstr "Bloco de pasta ext2 não encontrado"
+
+#: lib/ext2fs/ext2_err.c:90
+msgid "Ext2 directory already exists"
+msgstr "Pasta ext2 já existe"
+
+#: lib/ext2fs/ext2_err.c:91
+msgid "Unimplemented ext2 library function"
+msgstr "Função de biblioteca ext2 não implementada"
+
+#: lib/ext2fs/ext2_err.c:92
+msgid "User cancel requested"
+msgstr "Pedido cancelado pelo utilizador"
+
+#: lib/ext2fs/ext2_err.c:93
+msgid "Ext2 file too big"
+msgstr "Ficheiro ext2 muito grande"
+
+#: lib/ext2fs/ext2_err.c:94
+msgid "Supplied journal device not a block device"
+msgstr "Dispositivo de diário indicado não é dispositivo de bloco"
+
+#: lib/ext2fs/ext2_err.c:95
+msgid "Journal superblock not found"
+msgstr "Super-bloco de diário não encontrado"
+
+#: lib/ext2fs/ext2_err.c:96
+msgid "Journal must be at least 1024 blocks"
+msgstr "O diário tem de ter pelo menos 1024 blocos"
+
+#: lib/ext2fs/ext2_err.c:97
+msgid "Unsupported journal version"
+msgstr "Versão de diário não suportada"
+
+#: lib/ext2fs/ext2_err.c:98
+msgid "Error loading external journal"
+msgstr "Erro ao carregar diário externo"
+
+#: lib/ext2fs/ext2_err.c:99
+msgid "Journal not found"
+msgstr "Diário não encontrado"
+
+#: lib/ext2fs/ext2_err.c:100
+msgid "Directory hash unsupported"
+msgstr "Hash de pasta não suportada"
+
+#: lib/ext2fs/ext2_err.c:101
+msgid "Illegal extended attribute block number"
+msgstr "Número de bloco de atributo estendido ilegal"
+
+#: lib/ext2fs/ext2_err.c:102
+msgid "Cannot create filesystem with requested number of inodes"
+msgstr "Impossível criar sistema de ficheiros com o número de inodes pedido"
+
+#: lib/ext2fs/ext2_err.c:103
+msgid "E2image snapshot not in use"
+msgstr "Instantâneo E2image não está em uso"
+
+#: lib/ext2fs/ext2_err.c:104
+msgid "Too many reserved group descriptor blocks"
+msgstr "Demasiados blocos de descritores de grupo reservados"
+
+#: lib/ext2fs/ext2_err.c:105
+msgid "Resize inode is corrupt"
+msgstr "Inode redimensionado está corrompido"
+
+#: lib/ext2fs/ext2_err.c:106
+msgid "Tried to set block bmap with missing indirect block"
+msgstr "Tentativa de definir bitmap de bloco com bloco indirecto em falta"
+
+#: lib/ext2fs/ext2_err.c:107
+msgid "TDB: Success"
+msgstr "TDB: successo"
+
+#: lib/ext2fs/ext2_err.c:108
+msgid "TDB: Corrupt database"
+msgstr "TDB: base de dados corrompida"
+
+#: lib/ext2fs/ext2_err.c:109
+msgid "TDB: IO Error"
+msgstr "TDB: erro de E/S"
+
+#: lib/ext2fs/ext2_err.c:110
+msgid "TDB: Locking error"
+msgstr "TDB: erro de bloqueio"
+
+#: lib/ext2fs/ext2_err.c:111
+msgid "TDB: Out of memory"
+msgstr "TDB: memória esgotada"
+
+#: lib/ext2fs/ext2_err.c:112
+msgid "TDB: Record exists"
+msgstr "TDB: registo existe"
+
+#: lib/ext2fs/ext2_err.c:113
+msgid "TDB: Lock exists on other keys"
+msgstr "TDB: bloqueio existe noutras teclas"
+
+#: lib/ext2fs/ext2_err.c:114
+msgid "TDB: Invalid parameter"
+msgstr "TDB: parâmetro inválido"
+
+#: lib/ext2fs/ext2_err.c:115
+msgid "TDB: Record does not exist"
+msgstr "TDB: registo não existe"
+
+#: lib/ext2fs/ext2_err.c:116
+msgid "TDB: Write not permitted"
+msgstr "TDB: escrita não permitida"
+
+#: lib/ext2fs/ext2_err.c:117
+msgid "Ext2fs directory block list is empty"
+msgstr "Lista de blocos de pasta Ext2fs vazia"
+
+#: lib/ext2fs/ext2_err.c:118
+msgid "Attempt to modify a block mapping via a read-only block iterator"
+msgstr "Tentativa de modificar um mapeamento de bloco via iterador de bloco só-de-leitura"
+
+#: lib/ext2fs/ext2_err.c:119
+msgid "Wrong magic number for ext4 extent saved path"
+msgstr "Número mágico errado para caminho gravado de ext4 extent"
+
+#: lib/ext2fs/ext2_err.c:120
+msgid "Wrong magic number for 64-bit generic bitmap"
+msgstr "Número mágico errado para bitmap genérico de 64-bit"
+
+#: lib/ext2fs/ext2_err.c:121
+msgid "Wrong magic number for 64-bit block bitmap"
+msgstr "Número mágico errado para bitmap de bloco de 64-bit"
+
+#: lib/ext2fs/ext2_err.c:122
+msgid "Wrong magic number for 64-bit inode bitmap"
+msgstr "Número mágico errado para bitmap de inode de 64-bit"
+
+#: lib/ext2fs/ext2_err.c:123
+msgid "Wrong magic number --- RESERVED_13"
+msgstr "Número mágico errado --- RESERVED_13"
+
+#: lib/ext2fs/ext2_err.c:124
+msgid "Wrong magic number --- RESERVED_14"
+msgstr "Número mágico errado --- RESERVED_14"
+
+#: lib/ext2fs/ext2_err.c:125
+msgid "Wrong magic number --- RESERVED_15"
+msgstr "Número mágico errado --- RESERVED_15"
+
+#: lib/ext2fs/ext2_err.c:126
+msgid "Wrong magic number --- RESERVED_16"
+msgstr "Número mágico errado --- RESERVED_16"
+
+#: lib/ext2fs/ext2_err.c:127
+msgid "Wrong magic number --- RESERVED_17"
+msgstr "Número mágico errado --- RESERVED_17"
+
+#: lib/ext2fs/ext2_err.c:128
+msgid "Wrong magic number --- RESERVED_18"
+msgstr "Número mágico errado --- RESERVED_18"
+
+#: lib/ext2fs/ext2_err.c:129
+msgid "Wrong magic number --- RESERVED_19"
+msgstr "Número mágico errado --- RESERVED_19"
+
+#: lib/ext2fs/ext2_err.c:130
+msgid "Corrupt extent header"
+msgstr "Cabeçalho de extensão corrompido"
+
+#: lib/ext2fs/ext2_err.c:131
+msgid "Corrupt extent index"
+msgstr "Índice de extensão corrompido"
+
+#: lib/ext2fs/ext2_err.c:132
+msgid "Corrupt extent"
+msgstr "Extensão corrompida"
+
+#: lib/ext2fs/ext2_err.c:133
+msgid "No free space in extent map"
+msgstr "Sem espaço livre em mapa de extensão"
+
+#: lib/ext2fs/ext2_err.c:134
+msgid "Inode does not use extents"
+msgstr "Inode não usa extensões"
+
+#: lib/ext2fs/ext2_err.c:135
+msgid "No 'next' extent"
+msgstr "Sem extensão \"next\""
+
+#: lib/ext2fs/ext2_err.c:136
+msgid "No 'previous' extent"
+msgstr "Sem extensão \"previous\""
+
+#: lib/ext2fs/ext2_err.c:137
+msgid "No 'up' extent"
+msgstr "Sem extensão \"up\""
+
+#: lib/ext2fs/ext2_err.c:138
+msgid "No 'down' extent"
+msgstr "Sem extensão \"down\""
+
+#: lib/ext2fs/ext2_err.c:139
+msgid "No current node"
+msgstr "Sem nó actual"
+
+#: lib/ext2fs/ext2_err.c:140
+msgid "Ext2fs operation not supported"
+msgstr "Operação Ext2fs não suportada"
+
+#: lib/ext2fs/ext2_err.c:141
+msgid "No room to insert extent in node"
+msgstr "Sem espaço para inserir extensão no nó"
+
+#: lib/ext2fs/ext2_err.c:142
+msgid "Splitting would result in empty node"
+msgstr "A divisão resultaria num nó vazio"
+
+#: lib/ext2fs/ext2_err.c:143
+msgid "Extent not found"
+msgstr "Extensão não encontrada"
+
+#: lib/ext2fs/ext2_err.c:144
+msgid "Operation not supported for inodes containing extents"
+msgstr "Operação não suportada em inodes contendo extensões"
+
+#: lib/ext2fs/ext2_err.c:145
+msgid "Extent length is invalid"
+msgstr "Tamanho de extensão inválido"
+
+#: lib/ext2fs/ext2_err.c:146
+msgid "I/O Channel does not support 64-bit block numbers"
+msgstr "Canal de E/S não suporta números de bloco de 64-bit"
+
+#: lib/ext2fs/ext2_err.c:147
+msgid "Can't check if filesystem is mounted due to missing mtab file"
+msgstr "Impossível verificar se o sistema de ficheiros está montado devido a ficheiro mtab em falta"
+
+#: lib/ext2fs/ext2_err.c:148
+msgid "Filesystem too large to use legacy bitmaps"
+msgstr "Sistema de ficheiros muito grande para usar bitmaps antigos"
+
+#: lib/ext2fs/ext2_err.c:149
+msgid "MMP: invalid magic number"
+msgstr "MMP: número mágico inválido"
+
+#: lib/ext2fs/ext2_err.c:150
+msgid "MMP: device currently active"
+msgstr "MMP: dispositivo actualmente activo"
+
+#: lib/ext2fs/ext2_err.c:151
+msgid "MMP: e2fsck being run"
+msgstr "MMP: e2fsck em execução"
+
+#: lib/ext2fs/ext2_err.c:152
+msgid "MMP: block number beyond filesystem range"
+msgstr "MMP: número de bloco fora do intervalo do sistema de ficheiros"
+
+#: lib/ext2fs/ext2_err.c:153
+msgid "MMP: undergoing an unknown operation"
+msgstr "MMP: operação desconhecida em curso"
+
+#: lib/ext2fs/ext2_err.c:154
+msgid "MMP: filesystem still in use"
+msgstr "MMP: sistema de ficheiros ainda em uso"
+
+#: lib/ext2fs/ext2_err.c:155
+msgid "MMP: open with O_DIRECT failed"
+msgstr "MMP: falha ao abrir com O_DIRECT"
+
+#: lib/ext2fs/ext2_err.c:156
+msgid "Block group descriptor size incorrect"
+msgstr "Tamanho de descritor de grupo de blocos incorrecto"
+
+#: lib/ext2fs/ext2_err.c:157
+msgid "Inode checksum does not match inode"
+msgstr "Checksum de inode não corresponde ao inode"
+
+#: lib/ext2fs/ext2_err.c:158
+msgid "Inode bitmap checksum does not match bitmap"
+msgstr "Checksum de bitmap de inode não corresponde ao bitmap"
+
+#: lib/ext2fs/ext2_err.c:159
+msgid "Extent block checksum does not match extent block"
+msgstr "Checksum de bloco estendido não corresponde ao bloco estendido"
+
+#: lib/ext2fs/ext2_err.c:160
+msgid "Directory block does not have space for checksum"
+msgstr "Bloco de pasta não tem espaço para a checksum"
+
+#: lib/ext2fs/ext2_err.c:161
+msgid "Directory block checksum does not match directory block"
+msgstr "Checksum de bloco de pasta não corresponde ao bloco de pasta"
+
+#: lib/ext2fs/ext2_err.c:162
+msgid "Extended attribute block checksum does not match block"
+msgstr "Checksum de bloco de atributo estendido não corresponde ao bloco"
+
+#: lib/ext2fs/ext2_err.c:163
+msgid "Superblock checksum does not match superblock"
+msgstr "Checksum de super-bloco não corresponde ao super-bloco"
+
+#: lib/ext2fs/ext2_err.c:164
+msgid "Unknown checksum algorithm"
+msgstr "Algoritmo de checksum desconhecido"
+
+#: lib/ext2fs/ext2_err.c:165
+msgid "MMP block checksum does not match"
+msgstr "Checksum de bloco MMP não corresponde"
+
+#: lib/ext2fs/ext2_err.c:166
+msgid "Ext2 file already exists"
+msgstr "Ficheiro ext2 já existe"
+
+#: lib/ext2fs/ext2_err.c:167
+msgid "Block bitmap checksum does not match bitmap"
+msgstr "Checksum de bitmap de bloco não corresponde ao bitmap"
+
+#: lib/ext2fs/ext2_err.c:168
+msgid "Cannot iterate data blocks of an inode containing inline data"
+msgstr "Impossível iterar blocos de dados de um inode contendo dados em linha"
+
+#: lib/ext2fs/ext2_err.c:169
+msgid "Extended attribute has an invalid name length"
+msgstr "Atributo estendido tem um tamanho de nome inválido"
+
+#: lib/ext2fs/ext2_err.c:170
+msgid "Extended attribute has an invalid value length"
+msgstr "Atributo estendido tem um tamanho de valor inválido"
+
+#: lib/ext2fs/ext2_err.c:171
+msgid "Extended attribute has an incorrect hash"
+msgstr "Atributo estendido tem uma hash incorrecta"
+
+#: lib/ext2fs/ext2_err.c:172
+msgid "Extended attribute block has a bad header"
+msgstr "Bloco de atributo estendido tem um mau cabeçalho"
+
+#: lib/ext2fs/ext2_err.c:173
+msgid "Extended attribute key not found"
+msgstr "Chave de atributo estendido não encontrada"
+
+#: lib/ext2fs/ext2_err.c:174
+msgid "Insufficient space to store extended attribute data"
+msgstr "Espaço insuficiente para armazenar dados de atributo estendido"
+
+#: lib/ext2fs/ext2_err.c:175
+msgid "Filesystem is missing ext_attr or inline_data feature"
+msgstr "Sistema de ficheiros com funcionalidades ext_attr ou inline_data em falta"
+
+#: lib/ext2fs/ext2_err.c:176
+msgid "Inode doesn't have inline data"
+msgstr "O inode não tem dados em linha"
+
+#: lib/ext2fs/ext2_err.c:177
+msgid "No block for an inode with inline data"
+msgstr "Sem bloco para inode com dados em linha"
+
+#: lib/ext2fs/ext2_err.c:178
+msgid "No free space in inline data"
+msgstr "Sem espaço livre em dados em linha"
+
+#: lib/ext2fs/ext2_err.c:179
+msgid "Wrong magic number for extended attribute structure"
+msgstr "Número mágico errado para estrutura de atributo estendido"
+
+#: lib/ext2fs/ext2_err.c:180
+msgid "Inode seems to contain garbage"
+msgstr "O inode parece conter lixo"
+
+#: lib/ext2fs/ext2_err.c:181
+msgid "Extended attribute has an invalid value offset"
+msgstr "Atributo estendido com um desvio de valor inválido"
+
+#: lib/ext2fs/ext2_err.c:182
+msgid "Journal flags inconsistent"
+msgstr "Bandeiras de diário inconsistentes"
+
+#: lib/ext2fs/ext2_err.c:183
+msgid "Undo file corrupt"
+msgstr "Ficheiro de desfazer corrompido"
+
+#: lib/ext2fs/ext2_err.c:184
+msgid "Wrong undo file for this filesystem"
+msgstr "Ficheiro de desfazer errado para este sistema de ficheiros"
+
+#: lib/ext2fs/ext2_err.c:185
+msgid "File system is corrupted"
+msgstr "Sistema de ficheiros corrompido"
+
+#: lib/ext2fs/ext2_err.c:186
+msgid "Bad CRC detected in file system"
+msgstr "Mau CRC detectado no sistema de ficheiros"
+
+#: lib/ext2fs/ext2_err.c:187
+msgid "The journal superblock is corrupt"
+msgstr "Super-bloco de diário corrompido"
+
+#: lib/ext2fs/ext2_err.c:188
+msgid "Inode is corrupted"
+msgstr "Inode corrompido"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr "O inode contendo o valor do atributo estendido está corrompido"
+
+#: lib/support/prof_err.c:11
+msgid "Profile version 0.0"
+msgstr "Profile versão 0.0"
+
+#: lib/support/prof_err.c:12
+msgid "Bad magic value in profile_node"
+msgstr "Mau valor mágico em profile_node"
+
+#: lib/support/prof_err.c:13
+msgid "Profile section not found"
+msgstr "Secção de perfil não encontrada"
+
+#: lib/support/prof_err.c:14
+msgid "Profile relation not found"
+msgstr "Relação de perfil não encontrada"
+
+#: lib/support/prof_err.c:15
+msgid "Attempt to add a relation to node which is not a section"
+msgstr "Tentativa de adicionar uma relação a nó que não é uma secção"
+
+#: lib/support/prof_err.c:16
+msgid "A profile section header has a non-zero value"
+msgstr "Um cabeçalho de secção de perfil tem valor não-zero"
+
+#: lib/support/prof_err.c:17
+msgid "Bad linked list in profile structures"
+msgstr "Má lista ligada em estruturas de perfil"
+
+#: lib/support/prof_err.c:18
+msgid "Bad group level in profile structures"
+msgstr "Mau nível de grupo em estruturas de perfil"
+
+#: lib/support/prof_err.c:19
+msgid "Bad parent pointer in profile structures"
+msgstr "Mau ponteiro-mãe em estruturas de perfil"
+
+#: lib/support/prof_err.c:20
+msgid "Bad magic value in profile iterator"
+msgstr "Mau valor mágico em iterador de perfil"
+
+#: lib/support/prof_err.c:21
+msgid "Can't set value on section node"
+msgstr "Impossível definir valor em nó de secção"
+
+#: lib/support/prof_err.c:22
+msgid "Invalid argument passed to profile library"
+msgstr "Argumento inválido passado a biblioteca de perfil"
+
+#: lib/support/prof_err.c:23
+msgid "Attempt to modify read-only profile"
+msgstr "Tentativa de modificar perfil só-de-leitura"
+
+#: lib/support/prof_err.c:24
+msgid "Profile section header not at top level"
+msgstr "Cabeçalho de secção de perfil não está no nível de topo"
+
+#: lib/support/prof_err.c:25
+msgid "Syntax error in profile section header"
+msgstr "Erro de sintaxe em cabeçalho de secção de perfil"
+
+#: lib/support/prof_err.c:26
+msgid "Syntax error in profile relation"
+msgstr "Erro de sintaxe em relação de perfil"
+
+#: lib/support/prof_err.c:27
+msgid "Extra closing brace in profile"
+msgstr "Chaveta de fecho extra em perfil"
+
+#: lib/support/prof_err.c:28
+msgid "Missing open brace in profile"
+msgstr "Chaveta de abertura em falta em perfil"
+
+#: lib/support/prof_err.c:29
+msgid "Bad magic value in profile_t"
+msgstr "Mau valor mágico em profile_t"
+
+#: lib/support/prof_err.c:30
+msgid "Bad magic value in profile_section_t"
+msgstr "Mau valor mágico em profile_section_t"
+
+#: lib/support/prof_err.c:31
+msgid "Iteration through all top level section not supported"
+msgstr "Iteração em todas as secções de nível de topo não suportada"
+
+#: lib/support/prof_err.c:32
+msgid "Invalid profile_section object"
+msgstr "Objecto profile_section inválido"
+
+#: lib/support/prof_err.c:33
+msgid "No more sections"
+msgstr "Sem mais secções"
+
+#: lib/support/prof_err.c:34
+msgid "Bad nameset passed to query routine"
+msgstr "Mau nameset passado a rotina de consulta"
+
+#: lib/support/prof_err.c:35
+msgid "No profile file open"
+msgstr "Sem perfil aberto"
+
+#: lib/support/prof_err.c:36
+msgid "Bad magic value in profile_file_t"
+msgstr "Mau valor mágico em profile_file_t"
+
+#: lib/support/prof_err.c:37
+msgid "Couldn't open profile file"
+msgstr "Impossível abrir ficheiro de perfil"
+
+#: lib/support/prof_err.c:38
+msgid "Section already exists"
+msgstr "Secção já existente"
+
+#: lib/support/prof_err.c:39
+msgid "Invalid boolean value"
+msgstr "Valor booleano inválido"
+
+#: lib/support/prof_err.c:40
+msgid "Invalid integer value"
+msgstr "Valor inteiro inválido"
+
+#: lib/support/prof_err.c:41
+msgid "Bad magic value in profile_file_data_t"
+msgstr "Mau valor mágico em profile_file_data_t"
+
+#: lib/support/plausible.c:118
+#, c-format
+msgid "\tlast mounted on %s on %s"
+msgstr "\túltima montagem em %s em %s"
+
+#: lib/support/plausible.c:121
+#, c-format
+msgid "\tlast mounted on %s"
+msgstr "\túltima montagem em %s"
+
+#: lib/support/plausible.c:124
+#, c-format
+msgid "\tcreated on %s"
+msgstr "\tcriado em %s"
+
+#: lib/support/plausible.c:127
+#, c-format
+msgid "\tlast modified on %s"
+msgstr "\túltima modificação em %s"
+
+#: lib/support/plausible.c:161
+#, c-format
+msgid "Found a %s partition table in %s\n"
+msgstr "Encontrada uma tabela de partições %s em %s\n"
+
+#: lib/support/plausible.c:191
+#, c-format
+msgid "The file %s does not exist and no size was specified.\n"
+msgstr "O ficheiro %s não existe e não foi especificado um tamanho.\n"
+
+#: lib/support/plausible.c:199
+#, c-format
+msgid "Creating regular file %s\n"
+msgstr "A criar ficheiro normal %s\n"
+
+#: lib/support/plausible.c:202
+#, c-format
+msgid "Could not open %s: %s\n"
+msgstr "Impossível abrir %s: %s\n"
+
+#: lib/support/plausible.c:205
+msgid ""
+"\n"
+"The device apparently does not exist; did you specify it correctly?\n"
+msgstr ""
+"\n"
+"Aparentemente, o dispositivo não existe; especificou-o correctamente?\n"
+
+#: lib/support/plausible.c:227
+#, c-format
+msgid "%s is not a block special device.\n"
+msgstr "%s não é um dispositivo especial de bloco.\n"
+
+#: lib/support/plausible.c:249
+#, c-format
+msgid "%s contains a %s file system labelled '%s'\n"
+msgstr "%s contém um sistema de ficheiros %s rotulado \"%s\"\n"
+
+#: lib/support/plausible.c:252
+#, c-format
+msgid "%s contains a %s file system\n"
+msgstr "%s contém um sistema de ficheiros %s\n"
+
+#: lib/support/plausible.c:276
+#, c-format
+msgid "%s contains `%s' data\n"
+msgstr "%s contém dados \"%s\"\n"
+
+#~ msgid "while opening directory \"%s\""
+#~ msgstr "ao abrir a pasta \"%s\""
index 91ad15d..29918a3 100644 (file)
Binary files a/po/sr.gmo and b/po/sr.gmo differ
index 862ae52..f91c751 100644 (file)
--- a/po/sr.po
+++ b/po/sr.po
@@ -3,7 +3,7 @@
 # Translators:
 # Marko Uskokovic <uskokovic@etf.bg.ac.yu>, 2007—2008.
 # Алојз Јакоб <jakobyu@yahoo.com>, 2008.
-# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2016.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2016, 2017, 2020.
 #. 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,
 #. there is an @-expansion, where strings like "@i" are expanded to
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -48,7 +55,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU e2fsprogs 1.43.1\n"
+"Project-Id-Version: GNU e2fsprogs 1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2016-10-24 20:43+0200\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2020-04-01 12:44+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
 "Language: sr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Virtaal 0.7.1\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Лош блок „%u“ је ван опсега; занемарујем.\n"
@@ -95,11 +102,12 @@ msgstr "приликом провере исправности и-чвора л
 msgid "while reading the bad blocks inode"
 msgstr "приликом читања и-чвора лоших блокова"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "док сам покушавао да отворим „%s“"
@@ -109,7 +117,7 @@ msgstr "док сам покушавао да отворим „%s“"
 msgid "while trying popen '%s'"
 msgstr "док сам покушавао да п-отворим „%s“"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "приликом читања списка лоших блокова из датотеке"
 
@@ -120,8 +128,11 @@ msgstr "приликом освежавања и-чвора лоших блок
 #: e2fsck/badblocks.c:133
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
-msgstr ""
-"Упозорење: нађох недозвољени блок „%u“ у и-чвору лошег блока.  Очистих га.\n"
+msgstr "Упозорење: нађох недозвољени блок „%u“ у и-чвору лошег блока.  Очистих га.\n"
+
+#: e2fsck/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "приликом ослобађања „dir_info“ тбп датотеке"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -198,12 +209,12 @@ msgstr "„BLKFLSBUF ioctl“ није подржано!  Не могу да п
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Употреба: %s [-F] [-I међумеморија_блокова_и-чвора] уређај\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "приликом отварања „%s“ за пресипање"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "док сам покушавао да пресунем „%s“"
@@ -213,11 +224,11 @@ msgstr "док сам покушавао да пресунем „%s“"
 msgid "while trying to open '%s'"
 msgstr "док сам покушавао да отворим „%s“"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr "приликом отварања скенирања и-чвора"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr "приликом добављања следећег и-чвора"
 
@@ -226,358 +237,379 @@ msgstr "приликом добављања следећег и-чвора"
 msgid "%u inodes scanned.\n"
 msgstr "скенираних и-чворова: %u.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "читам супер блок дневника\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: нисам нашао исправан суперблок дневника\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: дневник је прекратак\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: опорављам дневник\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: нећу опоравити дневник док је само за читање\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "док сам покушавао поново да отворим „%s“"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "проширени атрибут"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "грешка доделе"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "блок"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "битмапа"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "сажми"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "се сукобљава са неким другим блоком система датотека"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "директоријум"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "обрисано"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "унос"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "унос „%Dn“ у „%p“ (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "систем датотека"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "систем датотека за и-чвор „%i“ (%Q) је"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "група"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "Х-СТАБЛО директоријума и-чвора"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "и-чвор"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "недозвољено"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "дневник"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "изгубљено+нађено"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "је веза"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "више пута затражено"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "неисправно"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "напуштено"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "проблем у"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "квота"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "корени и-чвор"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "треба бити"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "супер-блок"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "није закачен"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "уређај"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "распон"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "нулта дужина"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<НИШТАВАН и-чвор>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<и-чвор лоших блокова>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<и-чвор квоте корисника>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<и-чвор квоте групе>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<и-чвор учитавача система>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<Необрисан и-чвор директоријума>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<и-чвор описника групе>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<и-чвор дневника>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Резервисани и-чвор 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Резервисани и-чвор 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "обична датотека"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "директоријум"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "знаковни уређај"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "блок уређај"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "именована спојка"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "симболичка веза"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "прикључница"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "непозната врста датотеке са режимом „0%o“"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "индиректни блок"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "двоструко индиректни блок"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "троструко индиректни блок"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "блок преводиоца"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "бр. блока"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "корисник"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "група"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr "пројекат"
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "непозната врста квоте"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "више пута затражена мапа и-чворова"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "унутрашња грешка: не могу да нађем дупли_блок за „%llu“\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "враћено из блока_датотеке_клона"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr "унутрашња грешка: не могу да претражим запис ЕА блока за „%llu“"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "унутрашња грешка: не могу да претражим запис ЕА и-чвора за „%u“"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr "приликом хеширања уноса са „e_value_inum = %u“"
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 msgid "reading directory block"
 msgstr "читам блок директоријума"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 msgid "in-use inode map"
 msgstr "мапа и-чвора у употреби"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 msgid "directory inode map"
 msgstr "мапа и-чвора директоријума"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 msgid "regular file inode map"
 msgstr "мапа и-чвора обичне датотеке"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr "мапа блока у употреби"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1263
 msgid "metadata block map"
 msgstr "мапа блока метаподатака"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 msgid "opening inode scan"
 msgstr "отварам скенирање и-чворова"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr "добављам следећи и-чвор из скенираних"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 msgid "Pass 1"
 msgstr "1. пролаз"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "читам индиректне блокове и-чвора „%u“"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 msgid "bad inode map"
 msgstr "лоша мапа и-чвора"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 msgid "inode in bad block map"
 msgstr "и-чвор у мапи лошег блока"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 msgid "imagic inode map"
 msgstr "сликовна мапа и-чвора"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr "више пута затражена мапа блока"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr "мапа блокова спољних атрибута"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu(%c): очекивах „%6lu“ а добих физички „%6lu“ (бр. блокова: %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 msgid "block bitmap"
 msgstr "битмапа блока"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 msgid "inode bitmap"
 msgstr "битмапа и-чвора"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 msgid "inode table"
 msgstr "табела и-чвора"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "2. пролаз"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 msgid "Can not continue."
 msgstr "Не могу да наставим."
 
@@ -597,195 +629,203 @@ msgstr "3. пролаз"
 msgid "inode loop detection bitmap"
 msgstr "битмапа налажења петље и-чвора"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "4. пролаз"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "5. пролаз"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr "провера_суме_провере_битмапе_и-чвора: Грешка доделе меморије"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr "провера_суме_провере_битмапе_блока: Грешка доделе меморије"
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 msgid "(no prompt)"
 msgstr "(нема упита)"
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 msgid "Fix"
 msgstr "Исправи"
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:54
 msgid "Clear"
 msgstr "Очисти"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr "Премести"
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
 msgid "Allocate"
 msgstr "Додели"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 msgid "Expand"
 msgstr "Рашири"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 msgid "Connect to /lost+found"
 msgstr "Повежи се са „/изгубљено+нађено“"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 msgid "Create"
 msgstr "Направи"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr "Сачувај"
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
 msgid "Truncate"
 msgstr "Скрати"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 msgid "Clear inode"
 msgstr "Очисти и-чвор"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 msgid "Abort"
 msgstr "Прекини"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 msgid "Split"
 msgstr "Подели"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 msgid "Continue"
 msgstr "Настави"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr "Клонирај више пута затражене блокове"
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 msgid "Delete file"
 msgstr "Обриши датотеку"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 msgid "Suppress messages"
 msgstr "Потисни поруке"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
 msgid "Unlink"
 msgstr "Развежи"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 msgid "Clear HTree index"
 msgstr "Очисти индекс Х-стабла"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 msgid "Recreate"
 msgstr "Поново направи"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr "Прилагоди"
+
+#: e2fsck/problem.c:81
 msgid "(NONE)"
 msgstr "(НИШТА)"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 msgid "FIXED"
 msgstr "ИСПРАВЉЕНО"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 msgid "CLEARED"
 msgstr "ОЧИШЋЕНО"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr "ПРЕМЕШТЕНО"
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 msgid "ALLOCATED"
 msgstr "ДОДЕЉЕНО"
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr "РАШИРЕНО"
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr "ПОНОВО_ПОВЕЗАНО"
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 msgid "CREATED"
 msgstr "НАПРАВЉЕНО"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr "СПАШЕНО"
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
 msgid "TRUNCATED"
 msgstr "СКРАЋЕНО"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 msgid "INODE CLEARED"
 msgstr "ОБРИСАН И-ЧВОР"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 msgid "ABORTED"
 msgstr "ПРЕКИНУТО"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 msgid "SPLIT"
 msgstr "ПОДЕЉЕНО"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr "НАСТАВЉАМ"
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr "ВИШЕ ПУТА ЗАТРАЖЕНИ БЛОКОВИ СУ КЛОНИРАНИ"
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 msgid "FILE DELETED"
 msgstr "ОБРИСАНА ДАТОТЕКА"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr "ПОТИСНУТО"
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr "РАЗВЕЗАНО"
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 msgid "HTREE INDEX CLEARED"
 msgstr "ИНДЕКС Х-СТАБЛА ЈЕ ОЧИШЋЕН"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 msgid "WILL RECREATE"
 msgstr "НАПРАВИЋУ ПОНОВО"
 
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr "ПРИЛАГОДИЋУ"
+
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:115
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "Битмапа блока за групу „%g“ није у групи.  (%b. блок)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:119
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "Битмапа и-чвора за групу „%g“ није у групи.  (%b. блок)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -802,7 +842,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -815,11 +855,9 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Не могу да прочитам супер-блок или не описује исправан систем датотека "
-"„екст2/екст3/екст4“.\n"
+"Не могу да прочитам супер-блок или не описује исправан систем датотека „екст2/екст3/екст4“.\n"
 "Ако је уређај исправан и ако стварно садржи „екст2/екст3/екст4“\n"
-"систем датотека (а не разменску партицију или усд или нешто друго), онда је "
-"супер-блок\n"
+"систем датотека (а не разменску партицију или усд или нешто друго), онда је супер-блок\n"
 "оштећен, онда морате покренути „e2fsck“ са неким другим супер-блоком:\n"
 "    „e2fsck“ -b 8193 <уређај>\n"
 " или\n"
@@ -829,7 +867,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -842,7 +880,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -853,18 +891,18 @@ msgstr ""
 "од величине блока.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "Блокова_по_групи суперблока = %b, треба да буде %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "Први_блок_података суперблока = %b, треба да буде %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -872,8 +910,8 @@ msgstr ""
 "Систем датотека нема УУИД; стварам га.\n"
 "\n"
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -890,48 +928,48 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Нађох оштећење у супер-блоку.  (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:186
+#, no-c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Грешка одређивања величине физичког уређаја: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:191
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "Број и-чворова у суперблоку је %i, треба бити %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Хурд не подржава функцију врсте датотеке.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:201
+#, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "Суперблок има неисправан дневник (%i. и-чвор).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr "Спољни дневник има више корисника система датотека (није подржано).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:211
 msgid "Can't find external @j\n"
 msgstr "Не могу да нађем спољни дневник\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 msgid "External @j has bad @S\n"
 msgstr "Спољни дневник има лош суперблок\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 msgid "External @j does not support this @f\n"
 msgstr "Спољни дневник не подржава овај систем датотека\n"
 
@@ -939,104 +977,92 @@ msgstr "Спољни дневник не подржава овај систем
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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 ""
 "Суперблок дневника система датотека је непознате врсте „%N“ (неподржано).\n"
-"Највероватније да је ваш примерак „e2fsck“-а стар и/или не подржава овај "
-"запис дневника.\n"
+"Највероватније да је ваш примерак „e2fsck“-а стар и/или не подржава овај запис дневника.\n"
 "Такође може бити да је оштећен суперблок дневника.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:235
 msgid "@j @S is corrupt.\n"
 msgstr "Суперблок дневника је оштећен.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
-msgstr ""
-"Заставица суперблока „има_дневник“ је поништена, али је дневник присутан.\n"
+msgstr "Заставица суперблока „има_дневник“ је поништена, али је дневник присутан.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
-msgstr ""
-"Заставица суперблока „захтева_опоравак“ је постављена, али нема никаквог "
-"дневника.\n"
+msgstr "Заставица суперблока „захтева_опоравак“ је постављена, али нема никаквог дневника.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:250
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
-msgstr ""
-"Заставица суперблока „захтева_опоравак“ је поништена, али дневник садржи "
-"податке.\n"
+msgstr "Заставица суперблока „захтева_опоравак“ је поништена, али дневник садржи податке.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:255
 msgid "Clear @j"
 msgstr "Очисти дневник"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr ""
-"Систем датотека има постављену заставицу функције, али је ревизија 0 система "
-"датотека.  "
+msgstr "Систем датотека има постављену заставицу функције, али је ревизија 0 система датотека.  "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:265
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
-msgstr ""
-"%s напуштених и-чворова %i (уид=%Iu, гид=%Ig, режим=%Im, величина=%Is)\n"
+msgstr "%s напуштених и-чворова %i (уид=%Iu, гид=%Ig, режим=%Im, величина=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:270
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "Нађох недозвољени „%B“ (%b) у напуштеном и-чвору %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:275
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Нађох већ очишћени „%B“ (%b) у напуштеном и-чвору %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:281
+#, no-c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "Недозвољени напуштени и-чвор „%i“ у суперблоку.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:287
+#, no-c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "Недозвољени и-чвор „%i“ на списку напуштених и-чворова.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:292
 msgid "@j @S has an unknown read-only feature flag set.\n"
-msgstr ""
-"Суперблок дневника има постављену непознату заставицу функције само-читања.\n"
+msgstr "Суперблок дневника има постављену непознату заставицу функције само-читања.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:297
 msgid "@j @S has an unknown incompatible feature flag set.\n"
-msgstr ""
-"Суперблок дневника има постављену непознату несагласну заставицу функције.\n"
+msgstr "Суперблок дневника има постављену непознату несагласну заставицу функције.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Овај „e2fsck“ не подржава издање дневника.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:308
+#, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1046,8 +1072,8 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:314
+#, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1058,7 +1084,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1069,20 +1095,18 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 msgid "Run @j anyway"
 msgstr "Ипак покрени дневник"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
-msgstr ""
-"Заставица опоравка није постављена у суперблоку резерве, тако да ипак "
-"покрећем дневник.\n"
+msgstr "Заставица опоравка није постављена у суперблоку резерве, тако да ипак покрећем дневник.\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1092,30 +1116,27 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
 msgstr ""
-"На систему датотека није укључена промена величине и-чвора, али "
-"„с_резервисани_гдт_блокови“\n"
+"На систему датотека није укључена промена величине и-чвора, али „с_резервисани_гдт_блокови“\n"
 "је %N; треба бити нула.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
-msgstr ""
-"Није укључена промена величине и-чвора, али промена величине и-чвора није "
-"нула.  "
+msgstr "Није укључена промена величине и-чвора, али промена величине и-чвора није нула.  "
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:352
 msgid "Resize @i not valid.  "
 msgstr "Промена величине и-чвора није исправна.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1125,7 +1146,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1134,14 +1155,14 @@ msgstr ""
 "\tсада = %T) је у будућности.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:368
+#, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "Погодак суперблока за спољни суперблок треба бити %X.  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1150,273 +1171,274 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "Сума провере описника групе „%g“ је %04x, треба бити %04y.  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
-msgstr ""
-"Описник групе „%g“ је означен као непокренут без постављене функције.\n"
+msgstr "Описник групе „%g“ је означен као непокренут без постављене функције.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:389
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr "Описник групе „%g“ има неисправан број некоришћених и-чворова %b.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:394
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Није покренута битмапа последњег блока групе.  "
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "Пренос дневника „%i“ беше оштећен, одговор је прекинут.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:405
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "Заставица „испробај_сд“ је постављена (а и екст4 је доступан).  "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "Време последњег качења суперблока је у будућности.\n"
-"\t(мање од једног дана, вероватно услед погрешно подешеног хардверског "
-"сата)\n"
+"\t(мање од једног дана, вероватно услед погрешно подешеног хардверског сата)\n"
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "Време последњег писања суперблока је у будућности.\n"
-"\t(мање од једног дана, вероватно услед погрешно подешеног хардверског "
-"сата)\n"
+"\t(мање од једног дана, вероватно услед погрешно подешеног хардверског сата)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 msgid "One or more @b @g descriptor checksums are invalid.  "
-msgstr ""
-"Неисправна је једна или неколико сума провере описника групе блокова.  "
+msgstr "Неисправна је једна или неколико сума провере описника групе блокова.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Постављам број слободних и-чворова на %j (беше %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Постављам број слободних блокова на %c (беше %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr "Чиним Ñ\81кÑ\80ивеним Ð¸-Ñ\87воÑ\80 ÐºÐ²Ð¾Ñ\82е %i (%Q).\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "СкÑ\80ивам %U ÐºÐ²Ð¾Ñ\82Ñ\83 Ð¸-Ñ\87воÑ\80а %i (%Q).\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 msgid "@S has invalid MMP block.  "
 msgstr "Супер-блок има неисправан ММП блок.  "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
 msgid "@S has invalid MMP magic.  "
 msgstr "Супер-блок има неисправну ММП магију.  "
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:453
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "екст2сд_отвори2: %m\n"
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:459
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "екст2сд_провери_описник: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
-msgstr ""
-"„metadata_csum“ суперблока замењује „uninit_bg“; битови обе функције се не "
-"могу подесити истовремено."
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "„metadata_csum“ суперблока замењује „uninit_bg“; битови обе функције се не могу подесити истовремено."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "Сума провере ММП блока суперблока не одговара ММП блоку.  "
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+msgid "@S MMP @b checksum does not match.  "
+msgstr "Сума провере ММП блока суперблока не одговара.  "
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
-msgstr ""
-"Суперблоку 64-битног система датотека су потребни распони да би приступио "
-"читавом диску.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
+msgstr "Суперблоку 64-битног система датотека су потребни распони да би приступио читавом диску.  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "Први_мета_бг је превелик.  (%N, највећа вредност је %g).  "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:486
 msgid "External @j @S checksum does not match @S.  "
 msgstr "Сума провере суперблока спољног дневника не одговара суперблоку.  "
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr "„metadata_csum_seed“ суперблок није неопходан без „metadata_csum“."
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr "Грешка покретања контекста квоте у библиотеци подршке: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Лоша затражена додатна и-величина у суперблоку (%N).  "
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Лоша жељена додатна и-величина у суперблоку (%N).  "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "Неисправна %U квота и-чвора %i.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr "Супер блок ће имати превише и-чворова (%N).\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
+"Функције Промени_величину_и-чвора и мета_бг су укључене. Те функције\n"
+"нису сагласне. Треба да искључите промену_величине_и-чвора.  "
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "1. пролаз: Проверавам и-чворове, блокове, и величине\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 msgid "@r is not a @d.  "
 msgstr "корени и-чвор није директоријум.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 msgid "@r has dtime set (probably due to old mke2fs).  "
-msgstr ""
-"корени и-чвор има подешено д-време (вероватно због старог „mke2fs“-а).  "
+msgstr "корени и-чвор има подешено д-време (вероватно због старог „mke2fs“-а).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:544
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Резервисани и-чвор „%i“ (%Q) има неисправан режим.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:550
+#, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "обрисани и-чвор „%i“ има нулто д-време.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "и-чвор „%i“ је у употреби, али има постављено д-време.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:562
+#, no-c-format
 msgid "@i %i is a @z @d.  "
 msgstr "и-чвор „%i“ је директоријум нулте дужине.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:567
 msgid "@g %g's @b @B at %b @C.\n"
-msgstr ""
-"битмапа блокова групе „%g“ на „%b“ се сукобљава са неким другим блоком "
-"система датотека.\n"
+msgstr "битмапа блокова групе „%g“ на „%b“ се сукобљава са неким другим блоком система датотека.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:572
 msgid "@g %g's @i @B at %b @C.\n"
-msgstr ""
-"битмапа и-чворова групе „%g“ на „%b“ се сукобљава са неким другим блоком "
-"система датотека.\n"
+msgstr "битмапа и-чворова групе „%g“ на „%b“ се сукобљава са неким другим блоком система датотека.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:577
 msgid "@g %g's @i table at %b @C.\n"
-msgstr ""
-"табела и-чвора групе „%g“ на „%b“ се сукобљава са неким другим блоком "
-"система датотека.\n"
+msgstr "табела и-чвора групе „%g“ на „%b“ се сукобљава са неким другим блоком система датотека.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:582
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "битмапа блокова (%b) групе „%g“ је лоша.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "битмапа и-чвора (%b) групе „%g“ је лоша.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "и-чвор %i, и_величина је %Is, треба бити %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "и-чвор %i, и_блокова је %Ib, треба бити %N.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in @i %i.  "
 msgstr "недозвољено „%B“ (%b) у и-чвору %i.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "„%B“ (%b) преклапа метаподатке система датотека у и-чвору %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:613
+#, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "и-чвор „%i“ има недозвољен(е) блок(ове).  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Превише недозвољених блокова у и-чвору %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "Недозвољено „%B“ (%b) у и-чвору лошег блока.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "и-чвор лошег блока има недозвољен(е) блок(ове).  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Удвостручени или лош блок је у употреби!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "Лош блок „%b“ се користи као индиректни блок и-чвора лошег блока.  "
 
@@ -1424,7 +1446,7 @@ msgstr "Лош блок „%b“ се користи као индиректни
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1438,7 +1460,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1449,7 +1471,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1460,281 +1482,267 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Примарни супер-блок (%b) је на списку лоших блокова.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:667
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr "Блок „%b“ у описницима примарне групе је на списку лоших блокова\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:673
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Упозорење: Супер-блок (%b) групе „%g“ је лош.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:679
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr "Упозорење: Умножак групе „%g“ описника групе има лош блок (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:685
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr ""
-"Грешка програма? Блок бр. %b је затражен без разлога у "
-"обради_лоших_блокова.\n"
+msgstr "Грешка програма? Блок бр. %b је затражен без разлога у обради_лоших_блокова.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:691
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
-msgstr ""
-"Грешка доделе %N непрекидна(их) блока(ова) у групи блока „%g“ за „%s“: %m\n"
+msgstr "Грешка доделе %N непрекидна(их) блока(ова) у групи блока „%g“ за „%s“: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
-#, c-format
+#: e2fsck/problem.c:697
+#, no-c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "грешка доделе међумеморије блока за премештање „%s“\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:702
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Премештам „%g“ групе „%s“ из „%b“ у „%c“...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
-#, c-format
+#: e2fsck/problem.c:708
+#, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Премештам „%g“ групе „%s“ у „%c“...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Упозорење: не могу да прочитам блок „%b“ од „%s“: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:718
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Упозорење: не могу да упишем блок „%b“ од „%s“: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
 msgstr "грешка доделе битмапе и-чвора (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
 msgstr "грешка доделе битмапе блокова (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:734
+#, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "грешка доделе података везе и-броја: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:740
+#, no-c-format
 msgid "@A @d @b array: %m\n"
 msgstr "грешка доделе низа блокова директоријума: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:746
+#, no-c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Грешка приликом скенирања и-чворова (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Грешка приликом понављања на блоковима у и-чвору „%i“: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:757
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr "Грешка смештања података о броју и-чворова (и-чвор=%i, број=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:762
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr ""
-"Грешка смештања података блока директоријума (и-чвор=%i, блок=%b, број=%N): "
-"%m\n"
+msgstr "Грешка смештања података блока директоријума (и-чвор=%i, блок=%b, број=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
-#, c-format
+#: e2fsck/problem.c:769
+#, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Грешка читања и-чвора „%i“: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "и-чвор „%i“ има постављену и-магичну заставицу.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
 msgstr ""
-"Нарочита датотека (уређај/прикључница/пупи/симболичка_веза) (и-чвор „%i“) "
-"има непроменљиву\n"
+"Нарочита датотека (уређај/прикључница/пупи/симболичка_веза) (и-чвор „%i“) има непроменљиву\n"
 "или постављену заставицу прикачињања-само.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
-msgstr ""
-"Нарочити и-чвор „%i“ (уређај/прикључница/пупи) има не-нулту величину.  "
+msgstr "Нарочити и-чвор „%i“ (уређај/прикључница/пупи) има не-нулту величину.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
 msgid "@j @i is not in use, but contains data.  "
 msgstr "и-чвор дневника није у употреби, али садржи податке.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 msgid "@j is not regular file.  "
 msgstr "дневник није обична датотека.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:812
+#, no-c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "и-чвор „%i“ беше део списка напуштених и-чворова.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:818
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr ""
-"Нађох и-чворове који су били део оштећеног напуштеног свезаног списка.  "
+msgstr "Нађох и-чворове који су били део оштећеног напуштеног свезаног списка.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:823
 msgid "@A refcount structure (%N): %m\n"
 msgstr "грешка доделе структуре броја упуте (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:828
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Грешка читања блока „%b“ проширеног атрибута за и-чвор „%i“.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:833
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "и-чвор „%i“ има лош блок „%b“ проширеног атрибута.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Грешка читања блока „%b“ проширеног атрибута (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:843
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "блок „%b“ проширеног атрибута има број упуте %r, треба бити %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:848
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Грешка писања блока „%b“ проширеног атрибута (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:853
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "блок „%b“ проширеног атрибута има h_блокове > 1.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:858
 msgid "@A @a region allocation structure.  "
 msgstr "грешка доделе структуре доделе области проширеног атрибута.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "блок „%b“ проширеног атрибута је оштећен (сукоб доделе).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:868
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "блок „%b“ проширеног атрибута је оштећен (неисправан назив).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "блок „%b“ проширеног атрибута је оштећен (неисправна вредност).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:879
+#, no-c-format
 msgid "@i %i is too big.  "
 msgstr "и-чвор „%i“ је превелик.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "„%B“ (%b) доводи до тога да директоријум буде превелик.  "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr "„%B“ (%b) доводи до тога да датотека буде превелика.  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "„%B“ (%b) доводи до тога да симболичка веза буде превелика.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr ""
-"и-чвор „%i“ има постављену заставицу „INDEX_FL“ на систему датотека без "
-"подршке х-стабла.\n"
+msgstr "и-чвор „%i“ има постављену заставицу „INDEX_FL“ на систему датотека без подршке х-стабла.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
-msgstr ""
-"и-чвор „%i“ има постављену заставицу „INDEX_FL“ али није директоријум.\n"
+msgstr "и-чвор „%i“ има постављену заставицу „INDEX_FL“ али није директоријум.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:911
+#, no-c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "и-чвор „%i“ директоријума Х-СТАБЛА има неисправан корени чвор.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:916
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "и-чвор „%i“ директоријума Х-СТАБЛА има неподржано издање хеша (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
-msgstr ""
-"и-чвор „%i“ директоријума Х-СТАБЛА користи неодговарајућу заставицу кореног "
-"чвора х-стабла.\n"
+msgstr "и-чвор „%i“ директоријума Х-СТАБЛА користи неодговарајућу заставицу кореног чвора х-стабла.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:927
 msgid "@h %i has a tree depth (%N) which is too big\n"
-msgstr ""
-"и-чвор „%i“ директоријума Х-СТАБЛА има дубину стабла (%N) која је превелика\n"
+msgstr "и-чвор „%i“ директоријума Х-СТАБЛА има дубину стабла (%N) која је превелика\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1743,62 +1751,55 @@ msgstr ""
 "метаподацима система датотека.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Није успело (поновно)стварање промене величине и-чвора: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "и-чвор „%i“ има додатну величину (%IS) која је неисправна\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:950
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
-msgstr ""
-"проширени атрибут у и-чвору „%i“ има дужину назива (%N) која је неисправна\n"
+msgstr "проширени атрибут у и-чвору „%i“ има дужину назива (%N) која је неисправна\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:955
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
-msgstr ""
-"проширени атрибут у и-чвору „%i“ има померај вредности (%N) који је "
-"неисправан\n"
+msgstr "проширени атрибут у и-чвору „%i“ има померај вредности (%N) који је неисправан\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:960
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
-msgstr ""
-"проширени атрибут у и-чвору „%i“ има блок вредности (%N) који је неисправан "
-"(мора бити 0)\n"
+msgstr "проширени атрибут у и-чвору „%i“ има блок вредности (%N) који је неисправан (мора бити 0)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:965
 msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr ""
-"проширени атрибут у и-чвору „%i“ има величину вредности (%N) која је "
-"неисправна\n"
+msgstr "проширени атрибут у и-чвору „%i“ има величину вредности (%N) која је неисправна\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:970
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "проширени атрибут у и-чвору „%i“ има хеш (%N) који је неисправан\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:975
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "и-чвор „%i“ је %It али изгледа као да је стваран директоријум.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
-#, c-format
+#: e2fsck/problem.c:981
+#, no-c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Грешка приликом читања стабла распона у и-чвору „%i“: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1808,7 +1809,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1818,7 +1819,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1827,35 +1828,31 @@ msgstr ""
 "\t(логички блок „%c“, физички блок „%b“, неисправне дужине %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
-msgstr ""
-"и-чвор „%i“ има постављену заставицу „EXTENTS_FL“ на систему датотека без "
-"подршке распона.\n"
+msgstr "и-чвор „%i“ има постављену заставицу „EXTENTS_FL“ на систему датотека без подршке распона.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
-msgstr ""
-"и-чвор „%i“ је у запису распона, али супер-блоку недостаје функција "
-"„EXTENTS“\n"
+msgstr "и-чвор „%i“ је у запису распона, али супер-блоку недостаје функција „EXTENTS“\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "и-чвору „%i“ недостаје „EXTENT_FL“, али је у запису распона\n"
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "Брза симболичка веза „%i“ има постављено „EXTENT_FL“.  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1864,39 +1861,39 @@ msgstr ""
 "\t(неисправан логички блок „%c“, физички блок „%b“, дужина %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1030
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "и-чвор „%i“ има неисправан чвор распона (блок „%b“, лблк %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1036
+#, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Грешка претварања битмапе блока подкластера: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
-msgstr "и-Ñ\87воÑ\80 ÐºÐ²Ð¾Ñ\82е није обична датотека.  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not regular file.  "
+msgstr "квоÑ\82а Ð¸-Ñ\87воÑ\80а није обична датотека.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
 msgid "@q @i is not in use, but contains data.  "
 msgstr "и-чвор квоте није у употреби, али садржи податке.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 msgid "@q @i is visible to the user.  "
 msgstr "и-чвор квоте је видљив кориснику.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 msgid "The bad @b @i looks @n.  "
 msgstr "и-чвор лошег блока изгледа неисправно.  "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1905,44 +1902,41 @@ msgstr ""
 "\t(неисправан логички блок „%c“, физички блок „%b“)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, c-format
+#: e2fsck/problem.c:1067
+#, no-c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "и-чвор %i изгледа да садржи ђубре.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr "и-чвор %i пролази провере, али сума провере не одговара и-чвору.  "
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "проширени атрибута и-чвора %i је оштећен (сукоб доделе).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"блок распона и-чвора %i је прошао провере, али сума провере не одговара "
-"логичком\n"
+"блок распона и-чвора %i је прошао провере, али сума провере не одговара логичком\n"
 "\t(блоку распона „%c“, физичком блоку „%b“, дужини %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
-msgstr ""
-"и-чвор %i блока %b проширеног атрибута пролази провере, али сума провере не "
-"одговара и-чвору.  "
+msgstr "и-чвор %i блока %b проширеног атрибута пролази провере, али сума провере не одговара и-чвору.  "
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1952,7 +1946,7 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1961,64 +1955,54 @@ msgstr ""
 "\t(логички блок „%c“, физички блок „%b“, дужина %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
-msgstr ""
-"и-чвор %i има уграђене податке, али суперблоку недостаје функција "
-"„INLINE_DATA“\n"
+msgstr "и-чвор %i има уграђене податке, али суперблоку недостаје функција „INLINE_DATA“\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
-msgstr ""
-"и-чвор %i има постављену заставицу „INLINE_DATA_FL“ на систему датотека без "
-"подршке уграђених података.\n"
+msgstr "и-чвор %i има постављену заставицу „INLINE_DATA_FL“ на систему датотека без подршке уграђених података.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
-msgstr ""
-"и-чвор %i блока %b се сукобљава са критичним метаподацима, прескачем провере "
-"блока.\n"
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+msgstr "и-чвор %i блока %b се сукобљава са критичним метаподацима, прескачем провере блока.\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "блок „%b“ и-чвора „%i“ директоријума треба да буде на блоку „%c“.  "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1138
+#, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
-msgstr ""
-"и-чвор „%i“ директоријума има распон означен некоришћеним на блоку „%c“.  "
+msgstr "и-чвор „%i“ директоријума има распон означен некоришћеним на блоку „%c“.  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
-"и-чвор „%i“ логичког блока „%b“ (физички блок „%c“) нарушава правила доделе "
-"кластера.\n"
+"и-чвор „%i“ логичког блока „%b“ (физички блок „%c“) нарушава правила доделе кластера.\n"
 "Биће поправљен у пролазу 1B.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
-msgstr ""
-"и-чвор %i има постављену заставицу „INLINE_DATA_FL“ али нисам нашао "
-"проширени атрибут.  "
+msgstr "и-чвор %i има постављену заставицу „INLINE_DATA_FL“ али нисам нашао проширени атрибут.  "
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
@@ -2027,50 +2011,42 @@ msgstr ""
 "или постављену заставицу уграђених података.  "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
-msgstr ""
-"и-чвор %i има заглавље распона али је постављена заставица уграђених "
-"података.\n"
+msgstr "и-чвор %i има заглавље распона али је постављена заставица уграђених података.\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
-msgstr ""
-"и-чвор %i изгледа да има уграђене податке али је постављена заставица "
-"распона.\n"
+msgstr "и-чвор %i изгледа да има уграђене податке али је постављена заставица распона.\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
-msgstr ""
-"и-чвор %i изгледа да има мапу блока али су постављене заставице уграђених "
-"података и распона.\n"
+msgstr "и-чвор %i изгледа да има мапу блока али су постављене заставице уграђених података и распона.\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
-msgstr ""
-"и-чвор %i има постављене заставице уграђених података и распона али и_блок "
-"садржи ђубре.\n"
+msgstr "и-чвор %i има постављене заставице уграђених података и распона али и_блок садржи ђубре.\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr "Лош списак блока каже да је лош и-чвор лошег списка блока.  "
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1191
 msgid "@A @x region allocation structure.  "
 msgstr "грешка доделе структуре доделе области распона.  "
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -2079,95 +2055,107 @@ msgstr ""
 "\t(логички блок „%c“, неисправан физички блок „%b“, дужине %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
 msgid "@A memory for encrypted @d list\n"
 msgstr "грешка доделе меморије за шифровани списак директоријума\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
-msgstr ""
-"стабло распона и-чвора %i треба бити површније (%b; треба бити <= %c)\n"
+msgstr "стабло распона и-чвора %i треба бити површније (%b; треба бити <= %c)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
-msgstr ""
-"и-чвор %i на систему датотека велике доделе не може бити мапиран блоком.  "
+msgstr "и-чвор %i на систему датотека велике доделе не може бити мапиран блоком.  "
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, c-format
+#: e2fsck/problem.c:1218
+#, no-c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "и-чвор %i има оштећено заглавље распона.  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
+msgstr "Временска ознака на и-чвору %i после 04.04.2310. је вероватно пре-1970.\n"
+
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "и-чвор „%i“ има неисправн и-чвор проширеног атрибута вредности „%N“.\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "и-чвор „%i“ има неисправан проширени атрибут. ЕА и-чвору „%N“ недостаје обележје „EA_INODE“.\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
 msgstr ""
-"Временска ознака на и-чвору %i после 04.04.2310. је вероватно пре-1970.\n"
+"ЕА и-чвору „%N“ родитељског и-чвора „%i“ недостаје обележје „EA_INODE“.\n"
+" "
 
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 "\n"
-"Покрећем додатне пролазе да решим блокове које тражи више од једног и-"
-"чвора...\n"
+"Покрећем додатне пролазе да решим блокове које тражи више од једног и-чвора...\n"
 "Пролаз 1B: Поново прегледам има ли блокова који су неколико пута затражени\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
-#, c-format
+#: e2fsck/problem.c:1255
+#, no-c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "блок(ови) неколико пута затражени у и-чвору „%i“:"
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1271
+#, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Грешка приликом скенирања и-чворова (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "грешка доделе битмапе и-чвора (двострука_мапа_и_чвора): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Грешка приликом понављања на блоковима у и-чвору „%i“ (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
-msgstr ""
-"Грешка дотеривања броја упута за блок „%b“ проширеног атрибута (и-чвор "
-"„%i“): %m\n"
+msgstr "Грешка дотеривања броја упута за блок „%b“ проширеног атрибута (и-чвор „%i“): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1298
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
-msgstr ""
-"Пролаз 1C: Прегледам директоријуме за и-чворовима са неколико пута "
-"затраженим блоковима\n"
+msgstr "Пролаз 1C: Прегледам директоријуме за и-чворовима са неколико пута затраженим блоковима\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Пролаз 1D: Поново дотерујем неколико пута затражене блокове\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2176,18 +2164,18 @@ msgstr ""
 "  има %r неколико пута затражен(е) блок(ове), дељен(е) са %N датотеком(е):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (и-чвор „%i“, датум измене %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
 msgid "\t<@f metadata>\n"
 msgstr "\t<метаподаци система датотека>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2197,7 +2185,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2205,372 +2193,345 @@ msgstr ""
 "неколико пута затражени блокови су већ поново додељени или клонирани.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1344
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Не могу да клонирам датотеку: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1350
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Пролаз 1Е: Оптимизујем стабла распона\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, c-format
+#: e2fsck/problem.c:1356
+#, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Нисам успео да оптимизујем стабло распона „%p“ (%i): %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1361
 msgid "Optimizing @x trees: "
 msgstr "Оптимизујем стабла распона: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
-msgstr ""
-"Унутрашња грешка: навећа дубина стабла распона је превелика (%b; очекивано="
-"%c).\n"
+msgstr "Унутрашња грешка: навећа дубина стабла распона је превелика (%b; очекивано=%c).\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr "стабло распона и-чвора %i (на нивоу %b) треба бити краће.  "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr "стабло распона и-чвора %i (на нивоу %b) треба бити уже.  "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 msgid "Pass 2: Checking @d structure\n"
 msgstr "2. пролаз: Проверавам структуру директоријума\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1399
+#, no-c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "неисправан број и-чвора за „.“ у „%i“ и-чвору директоријума.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1404
 msgid "@E has @n @i #: %Di.\n"
 msgstr "унос „%Dn“ у „%p“ (%i) има неисправан и-чвор бр.: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1409
 msgid "@E has @D/unused @i %Di.  "
 msgstr "унос „%Dn“ у „%p“ (%i) има обрисан/некоришћени и-чвор %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1414
 msgid "@E @L to '.'  "
 msgstr "унос „%Dn“ у „%p“ (%i) је веза са „.“  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1419
 msgid "@E points to @i (%Di) located in a bad @b.\n"
-msgstr ""
-"унос „%Dn“ у „%p“ (%i) указује на и-чвор (%Di) који се налази у лошем "
-"блоку.\n"
+msgstr "унос „%Dn“ у „%p“ (%i) указује на и-чвор (%Di) који се налази у лошем блоку.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1424
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "унос „%Dn“ у „%p“ (%i) је веза ка директоријуму „%P“ (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1429
 msgid "@E @L to the @r.\n"
 msgstr "унос „%Dn“ у „%p“ (%i) је веза ка кореном и-чвору.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
 msgstr "унос „%Dn“ у „%p“ (%i) има недозвољени знак у називу.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, c-format
+#: e2fsck/problem.c:1440
+#, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Недостаје „.“ у „%i“ и-чвору директоријума.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1446
+#, no-c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Недостају „..“ у „%i“ и-чвору директоријума.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1451
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
-msgstr ""
-"Први унос „%Dn“ (и-чвор=%Di) у „%i“ и-чвору директоријума (%p) треба бити "
-"„.“\n"
+msgstr "Први унос „%Dn“ (и-чвор=%Di) у „%i“ и-чвору директоријума (%p) треба бити „.“\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1456
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
-msgstr ""
-"Други унос „%Dn“ (и-чвор=%Di) у „%i“ и-чвору директоријума треба бити „..“\n"
+msgstr "Други унос „%Dn“ (и-чвор=%Di) у „%i“ и-чвору директоријума треба бити „..“\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "„i_faddr“ за и-чвор „%i“ (%Q) је „%IF“, треба бити нула.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1466
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "„i_file_acl“ за и-чвор „%i“ (%Q) је „%If“, треба бити нула.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "„i_dir_acl“ за и-чвор „%i“ (%Q) је „%Id“, треба бити нула.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "„i_size_high“ за и-чвор „%i“ (%Q) је „%If“, треба бити нула.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "„i_frag“ за и-чвор „%i“ (%Q) је „%N“, треба бити нула.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "„i_fsize“ за и-чвор „%i“ (%Q) је „%N“, треба бити нула.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "и-чвор „%i“ (%Q) има неисправан режим (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1491
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "и-чвор „%i“ директоријума, %B, померај „%N“: директоријум је оштећен\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 msgid "@d @i %i, %B, offset %N: filename too long\n"
-msgstr ""
-"и-чвор „%i“ директоријума, %B, померај „%N“: назив датотеке је предуг\n"
+msgstr "и-чвор „%i“ директоријума, %B, померај „%N“: назив датотеке је предуг\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "и-чвор „%i“ директоријума има недодељен %B.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
-msgstr ""
-"унос директоријума „.“ у и-чвору „%i“ директоријума се не завршава на НИШТА\n"
+msgstr "унос директоријума „.“ у и-чвору „%i“ директоријума се не завршава на НИШТА\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
-msgstr ""
-"унос директоријума „..“ у и-чвору „%i“ директоријума се не завршава на "
-"НИШТА\n"
+msgstr "унос директоријума „..“ у и-чвору „%i“ директоријума се не завршава на НИШТА\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "и-чвор „%i“ (%Q) је недозвољени знаковни уређај.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "и-чвор „%i“ (%Q) је недозвољени блок уређај.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "унос „%Dn“ у „%p“ (%i) је удвостручени унос „.“.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "унос „%Dn“ у „%p“ (%i) је удвостручени унос „..“.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Унутрашња грешка: не могу да нађем податке_директоријума за „%i“.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "унос „%Dn“ у „%p“ (%i) има дужину_записа %Dr, треба бити %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, c-format
+#: e2fsck/problem.c:1550
+#, no-c-format
 msgid "@A icount structure: %m\n"
 msgstr "грешка доделе структуре и-броја: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Грешка понављања у блоковима директоријума: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Грешка читања блока „%b“ директоријума (и-чвор „%i“): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Грешка писања блока „%b“ директоријума (и-чвор „%i“): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "грешка доделе новог блока директоријума за и-чвор „%i“ (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Грешка размештања и-чвора „%i“: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1584
+#, no-c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "унос директоријума за „.“ у „%p“ (%i) је велик.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "и-чвор „%i“ (%Q) је недозвољени ПУПИ.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "и-чвор „%i“ (%Q) је недозвољена прикључница.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Постављам врсту датотеке за унос „%Dn“ у „%p“ (%i) на „%N“.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1604
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
-msgstr ""
-"унос „%Dn“ у „%p“ (%i) има неисправну врсту датотека (беше „%Dt“, треба бити "
-"„%N“).\n"
+msgstr "унос „%Dn“ у „%p“ (%i) има неисправну врсту датотека (беше „%Dt“, треба бити „%N“).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 msgstr "унос „%Dn“ у „%p“ (%i) има постављену врсту датотека.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "унос „%Dn“ у „%p“ (%i) има назив нулте дужине.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Симболичка веза „%Q“ (и-чвор „%i“) је неисправна.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1624
 msgid "@a @b @F @n (%If).\n"
 msgstr "блок проширеног атрибута за и-чвор „%i“ (%Q) је неисправан (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1629
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
-msgstr ""
-"систем датотека садржи велике датотеке, али му недостаје заставица "
-"„LARGE_FILE“ у супер-блоку.\n"
+msgstr "систем датотека садржи велике датотеке, али му недостаје заставица „LARGE_FILE“ у супер-блоку.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1634
 msgid "@p @h %d: %B not referenced\n"
 msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ нема упуту\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ је двоупутно\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1644
 msgid "@p @h %d: %B has bad min hash\n"
-msgstr ""
-"проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има лош најмањи хеш\n"
+msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има лош најмањи хеш\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1649
 msgid "@p @h %d: %B has bad max hash\n"
-msgstr ""
-"проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има лош највећи хеш\n"
+msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има лош највећи хеш\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
 msgstr "и-чвор „%d“ директоријума Х-СТАБЛА је неисправан (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
-msgstr ""
-"проблем у и-чвору „%d“ директоријума Х-СТАБЛА (%q): лош број блока %b.\n"
+msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА (%q): лош број блока %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
-msgstr ""
-"проблем у и-чвору „%d“ директоријума Х-СТАБЛА: корени чвор је неисправан\n"
+msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА: корени чвор је неисправан\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1674
 msgid "@p @h %d: %B has @n limit (%N)\n"
-msgstr ""
-"проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има неисправно "
-"ограничење (%N)\n"
+msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има неисправно ограничење (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1679
 msgid "@p @h %d: %B has @n count (%N)\n"
-msgstr ""
-"проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има неисправан број "
-"(%N)\n"
+msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има неисправан број (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1684
 msgid "@p @h %d: %B has an unordered hash table\n"
-msgstr ""
-"проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има неуређену хеш "
-"табелу\n"
+msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има неуређену хеш табелу\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1689
 msgid "@p @h %d: %B has @n depth (%N)\n"
-msgstr ""
-"проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има неисправну дубину "
-"(%N)\n"
+msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА: „%B“ има неисправну дубину (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
 msgstr "Нађох удвостручени унос „%Dn“ у „%p“ (%i).  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2582,7 +2543,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2593,177 +2554,156 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "„i_blocks_hi“ за и-чвор „%i“ (%Q) је „%N“, треба бити нула.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "Неочекивани блок у и-чвору „%d“ директоријума Х-СТАБЛА (%q).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1719
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
-msgstr ""
-"унос „%Dn“ у „%p“ (%i) упућује на и-чвор „%Di“ у групи „%g“ је постављено "
-"„_INODE_UNINIT“.\n"
+msgstr "унос „%Dn“ у „%p“ (%i) упућује на и-чвор „%Di“ у групи „%g“ је постављено „_INODE_UNINIT“.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1724
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
-msgstr ""
-"унос „%Dn“ у „%p“ (%i) упућује на и-чвор „%Di“ нађен у групи „%g“ "
-"некоришћене области и-чвора.\n"
+msgstr "унос „%Dn“ у „%p“ (%i) упућује на и-чвор „%Di“ нађен у групи „%g“ некоришћене области и-чвора.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1729
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "„i_file_acl_hi“ за и-чвор „%i“ (%Q) је „%N“, треба бити нула.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, c-format
+#: e2fsck/problem.c:1735
+#, no-c-format
 msgid "@p @h %d: root node fails checksum.\n"
-msgstr ""
-"проблем у и-чвору „%d“ директоријума Х-СТАБЛА: није успела сума провере на "
-"кореном чвору.\n"
+msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА: није успела сума провере на кореном чвору.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, c-format
+#: e2fsck/problem.c:1741
+#, no-c-format
 msgid "@p @h %d: internal node fails checksum.\n"
-msgstr ""
-"проблем у и-чвору „%d“ директоријума Х-СТАБЛА: није успела сума провере на "
-"унутрашњем чвору.\n"
+msgstr "проблем у и-чвору „%d“ директоријума Х-СТАБЛА: није успела сума провере на унутрашњем чвору.\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1746
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
-msgstr ""
-"и-чвор „%i“ директоријума, %B, померај „%N“: директоријум нема суму "
-"провере.\n"
+msgstr "и-чвор „%i“ директоријума, %B, померај „%N“: директоријум нема суму провере.\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
-msgstr ""
-"и-чвор директоријума %i, %B: директоријум пролази провере али му не успева "
-"сума провере.\n"
+msgstr "и-чвор директоријума %i, %B: директоријум пролази провере али му не успева сума провере.\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
-msgstr ""
-"Величина и-чвора уграђеног директоријума %i (%N) мора бити производ 4.\n"
+msgstr "Величина и-чвора уграђеног директоријума %i (%N) мора бити производ 4.\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr "Поправљање величине и-чвора уграђеног директоријума %i није успело.\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
 msgid "Encrypted @E is too short.\n"
 msgstr "Шифровани унос „%Dn“ у „%p“ (%i) је прекратак.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "3. пролаз: Проверавам повезивост директоријума\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
 msgstr "корени и-чвор није додељен.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "Нема места у директоријуму изгубљено+нађено.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1790
+#, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "и-чвор „%i“ (%p) директоријума није повезан\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
 msgstr "нисам нашао „/изгубљено+нађено“.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "„..“ у „%Q“ (%i) је „%P“ (%j), треба бити „%q“ (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
-msgstr ""
-"„/изгубљено+нађено“ је лош или не постоји.  Не могу поново да се повежем.\n"
+msgstr "„/изгубљено+нађено“ је лош или не постоји.  Не могу поново да се повежем.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Не могу да раширим „/изгубљено+нађено“: %m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Не могу поново да повежем „%i“: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Грешка када сам покушао да нађем „/изгубљено+нађено“: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
-msgstr ""
-"екст2сд_нови_блок: „%m“ када сам покушао да направим директоријум „/изгубљено"
-"+нађено“\n"
+msgstr "екст2сд_нови_блок: „%m“ када сам покушао да направим директоријум „/изгубљено+нађено“\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
-msgstr ""
-"екст2сд_нови_и-чвор: „%m“ када сам покушао да направим директоријум „/"
-"изгубљено+нађено“\n"
+msgstr "екст2сд_нови_и-чвор: „%m“ када сам покушао да направим директоријум „/изгубљено+нађено“\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
-msgstr ""
-"екст2сд_нови_дир_блок: „%m“ када сам покушао да направим нови блок "
-"директоријума\n"
+msgstr "екст2сд_нови_дир_блок: „%m“ када сам покушао да направим нови блок директоријума\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
-msgstr ""
-"екст2сд_пиши_дир_блок: „%m“ када сам писао блок директоријума за „/изгубљено"
-"+нађено“\n"
+msgstr "екст2сд_пиши_дир_блок: „%m“ када сам писао блок директоријума за „/изгубљено+нађено“\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Грешка приликом дотеривања броја и-чвора на и-чвору „%i“\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2773,52 +2713,51 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
 msgstr ""
-"Не могу да поправим полазиште и-чвора „%i“: Не могу да нађем унос полазног "
-"директоријума\n"
+"Не могу да поправим полазиште и-чвора „%i“: Не могу да нађем унос полазног директоријума\n"
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Грешка стварања кореног директоријума (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Грешка стварања директоријума „/изгубљено+нађено“ (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "корени и-чвор није директоријум; прекидам.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "Не могу да наставим без кореног и-чвора.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "„/изгубљено+нађено“ није директоријум (и-чвор=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
 msgid "/@l has inline data\n"
 msgstr "/изгубљено+нађено има уграђене податке\n"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2829,7 +2768,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2840,52 +2779,52 @@ msgstr ""
 "\n"
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1924
 msgid "/@l is encrypted\n"
 msgstr "„/изгубљено+нађено“ је шифровано\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Пролаз 3A: Оптимизујем директоријуме\n"
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Нисам успео да створим приступник „директоријуми_у_хеш“: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Нисам успео да оптимизујем директоријум „%q“ (%d): %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
 msgstr "Оптимизација директоријума: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Пролаз 4: Проверавам бројеве упута\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
 msgstr "не закачен и-чвор „%i“ нулте дужине.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
 msgstr "не закачен и-чвор „%i“\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "број упута и-чвора „%i“ је %Il, треба бити %N.  "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2893,153 +2832,153 @@ msgid ""
 msgstr ""
 "УПОЗОРЕЊЕ: ГРЕШКА ПРОГРАМИРАЊА У „E2FSCK“-у!\n"
 "\tИЛИ НЕКИ ТУПАВКО (МОЖДА ВИ) ПРОВЕРАВА ПРИКАЧЕНИ (ЖИВИ) СИСТЕМ ДАТОТЕКА\n"
-"податак_везе_и-чвора[%i] је %N,\t„и-чвор.број_и_везе“ је %Il. Требало би да "
-"буду исти!\n"
+"податак_везе_и-чвора[%i] је %N,\t„и-чвор.број_и_везе“ је %Il. Требало би да буду исти!\n"
+
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "број упута и-чвора „%i“ је %N, треба бити %n.  "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr "директоријум прелази максимум веза, али нема „DIR_NLINK“ функције у супер блоку.\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Пролаз 5: Проверавам податке сажетка групе\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
 msgstr "Попуњавање на крају битмапе и-чвора није постављено. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
 msgstr "Попуњавање на крају битмапе блока није постављено. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "разлике битмапе блокова: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "разлике битмапе и-чворова: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
-msgstr ""
-"Број слободних и-чворова је погрешан за групу бр. %g (%i, избројано=%j).\n"
+msgstr "Број слободних и-чворова је погрешан за групу бр. %g (%i, избројано=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:2068
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Број директоријума је погрешан за групу бр. %g (%i, избројано=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Број слободних и-чворова је погрешан (%i, избројано=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2078
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
-msgstr ""
-"Број слободних блокова је погрешан за групу бр. %g (%b, избројано=%c).\n"
+msgstr "Број слободних блокова је погрешан за групу бр. %g (%b, избројано=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Број слободних блокова је погрешан (%b, избројано=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
-msgstr ""
-"ГРЕШКА ПРОГРАМИРАЊА: крајње тачке (%b, %c) битмапе система датотека (бр. %N) "
-"не одговарају израчунатим крајњим тачкама битмапе (%i, %j)\n"
+#: e2fsck/problem.c:2088
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "ГРЕШКА ПРОГРАМИРАЊА: крајње тачке (%b, %c) битмапе система датотека (бр. %N) не одговарају израчунатим крајњим тачкама битмапе (%i, %j)\n"
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Унутрашња грешка: привидно дотерујем крај битмапе (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Грешка умножавања у битмапи замене и-чвора: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Грешка умножавања у битмапи замене блока: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
-msgstr ""
-"блок(ови) групе „%g“ је(су) у употреби али је група означена „BLOCK_UNINIT“\n"
+msgstr "блок(ови) групе „%g“ је(су) у употреби али је група означена „BLOCK_UNINIT“\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
-msgstr ""
-"и-чвор(ови) групе „%g“ је(су) у употреби али је група означена "
-"„INODE_UNINIT“\n"
+msgstr "и-чвор(ови) групе „%g“ је(су) у употреби али је група означена „INODE_UNINIT“\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr "битмапа и-чвора групе „%g“ не одговара суми провере.\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr "битмапа блока групе „%g“ не одговара суми провере.\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 msgid "Recreate @j"
 msgstr "Поново направи дневник"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr "Освежи податке квоте за врсту квоте „%N“"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2172
+#, no-c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "Грешка постављања података суме провере групе блока: %m\n"
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2178
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Грешка писања података система датотека: %m\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr "Грешка пресипања писања на складишни уређај: %m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2189
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "Грешка писања података квоте за врсту квоте „%N“: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Непозната грешка кода (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "ЗАНЕМАРЕНО"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr "у „move_quota_inode“"
 
@@ -3061,25 +3000,25 @@ msgstr "приликом покретања скенирања и-чвора"
 msgid "while doing inode scan"
 msgstr "приликом обављања скенирања и-чвора"
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "приликом позивања „ext2fs_block_iterate“ за и-чвор „%d“"
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "приликом позивања „ext2fs_block_iterate“ за и-чвор „%u“"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "приликом позивања „ext2fs_adjust_ea_refcount2“ за и-чвор „%d“"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "приликом позивања „ext2fs_adjust_ea_refcount2“ за и-чвор „%u“"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Скраћујем"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Чистим"
 
-#: e2fsck/unix.c:77
+#: e2fsck/unix.c:78
 #, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
@@ -3090,15 +3029,14 @@ msgstr ""
 "\t\t[-l|-L дттка_лоших_блокова] [-C описник_дттке] [-j спољни_дневник]\n"
 "\t\t[-E проширене-опције] [-z опозив_дттке] уређај\n"
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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"
@@ -3111,7 +3049,7 @@ msgstr ""
 " -f                   Приморава проверу чак и ако је систем\n"
 "\t\t\tдатотека означен као чист\n"
 
-#: e2fsck/unix.c:88
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -3129,12 +3067,12 @@ msgstr ""
 " -L дттка_лшх_блква   Поставља списак лоших блокова\n"
 " -z опозив_дттке      Ствара датотеку опозива\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %u/%u датотеке (%0d.%d%% са прекидима), %llu/%llu блока\n"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3152,7 +3090,7 @@ msgstr[2] ""
 "\n"
 "%12u и-чворова је коришћено (%2.2f%%, од %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
@@ -3160,7 +3098,7 @@ msgstr[0] "%12u датотека са прекидима (%0d.%d%%)\n"
 msgstr[1] "%12u датотеке са прекидима (%0d.%d%%)\n"
 msgstr[2] "%12u датотека са прекидима (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:172
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
@@ -3168,16 +3106,16 @@ msgstr[0] "%12u директоријум са прекидима (%0d.%d%%)\n"
 msgstr[1] "%12u директоријума са прекидима (%0d.%d%%)\n"
 msgstr[2] "%12u директоријума са прекидима (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:177
 #, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "             број и-чворова са „ind/dind/tind“ блокова: %u/%u/%u\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr "             Хистограм дубине распона: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
@@ -3185,7 +3123,7 @@ msgstr[0] "%12llu блок је коришћен (%2.2f%%, од %llu)\n"
 msgstr[1] "%12llu блока су коришћена (%2.2f%%, од %llu)\n"
 msgstr[2] "%12llu блокова је коришћено (%2.2f%%, од %llu)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:198
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
@@ -3193,7 +3131,7 @@ msgstr[0] "%12u лош блок\n"
 msgstr[1] "%12u лоша блока\n"
 msgstr[2] "%12u лоших блокова\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:200
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
@@ -3201,7 +3139,7 @@ msgstr[0] "%12u велика датотека\n"
 msgstr[1] "%12u велике датотеке\n"
 msgstr[2] "%12u великих датотека\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -3219,7 +3157,7 @@ msgstr[2] ""
 "\n"
 "%12u обичних датотека\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
@@ -3227,7 +3165,7 @@ msgstr[0] "%12u директоријум\n"
 msgstr[1] "%12u директоријума\n"
 msgstr[2] "%12u директоријума\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
@@ -3235,7 +3173,7 @@ msgstr[0] "%12u датотека знаковног уређаја\n"
 msgstr[1] "%12u датотеке знаковног уређаја\n"
 msgstr[2] "%12u датотека знаковног уређаја\n"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:209
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
@@ -3243,7 +3181,7 @@ msgstr[0] "%12u датотека блок уређаја\n"
 msgstr[1] "%12u датотеке блок уређаја\n"
 msgstr[2] "%12u датотека блок уређаја\n"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
@@ -3251,7 +3189,7 @@ msgstr[0] "%12u пупи\n"
 msgstr[1] "%12u пупи-ја\n"
 msgstr[2] "%12u пупи-ја\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
@@ -3259,7 +3197,7 @@ msgstr[0] "%12u веза\n"
 msgstr[1] "%12u везе\n"
 msgstr[2] "%12u веза\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
@@ -3267,7 +3205,7 @@ msgstr[0] "%12u симболичка веза"
 msgstr[1] "%12u симболичке везе"
 msgstr[2] "%12u симболичких веза"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
@@ -3275,7 +3213,7 @@ msgstr[0] " (%u брза симболичка веза)\n"
 msgstr[1] " (%u брзе симболичке везе)\n"
 msgstr[2] " (%u брзих симболичких веза)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
@@ -3283,7 +3221,7 @@ msgstr[0] "%12u прикључница\n"
 msgstr[1] "%12u прикључнице\n"
 msgstr[2] "%12u прикључница\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
@@ -3291,33 +3229,33 @@ msgstr[0] "%12u датотека\n"
 msgstr[1] "%12u датотеке\n"
 msgstr[2] "%12u датотека\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "приликом одређивања да ли је „%s“ прикачен."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Упозорење! „%s“ је прикачен.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Упозорење! „%s“ је у употреби.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "„%s“ је прикачен.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr "„%s“ је у употреби.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3325,7 +3263,7 @@ msgstr ""
 "Не могу да наставим, прекидам.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3339,81 +3277,105 @@ msgstr ""
 "***ОЗБИЉНО*** ћете ***ОШТЕТИТИ*** систем датотека.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "Да ли стварно желите да наставите"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "провера је прекинута.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr " садржи систем датотека са грешкама"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " није исправно откачен"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 msgid " primary superblock features different from backup"
 msgstr " функције примарног суперблока се разликују од резерве"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:383
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " је био прикачен %u пута а да није провераван"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:390
 msgid " has filesystem last checked time in the future"
 msgstr " има време провере система датотека у будућности"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " прошла су %u дана а да није провераван"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr "занемарујем период провере, подешено је „broken_system_clock“\n"
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ", провера је присилна.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: чист, %u/%u датотеке, %llu/%llu блока"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
 msgstr " (провера је одложена; ради на батерији)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr " (провера након следећег качења)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (провера након %ld качења)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ГРЕШКА: Не могу да отворим „/dev/null“ (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "Неисправно ЕА издање.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:702
 msgid "Invalid readahead buffer size.\n"
 msgstr "Неисправна величина међумеморије.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Непозната проширена опција: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Проширене опције су раздвојене зарезима, и могу имати аргумент\n"
+"\tкоји је подешен знаком једнакости (=). Исправне проширене опције су:\n"
+"\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr "\tea_ver=<еа_издање (1 или 2)>\n"
+
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "\treadahead_kb=<величина међумеморије>\n"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3422,55 +3384,55 @@ msgstr ""
 "Грешка синтаксе у датотеци подешавања „e2fsck“-а (%s, %d. ред)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Грешка потврђивања описника датотеке „%d“: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr "Неисправан описник датотеке података довршавања"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Може бити наведена само једна од опција „-p/-a“, „-n“ или „-y“."
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:903
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Опција „-t“ није подржана на овом издању „e2fsck“-а.\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Не могу да решим „%s“"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 msgid "The -n and -D options are incompatible."
 msgstr "Опције „-n“ и „-D“ нису сагласне."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 msgid "The -n and -c options are incompatible."
 msgstr "Опције „-n“ и „-c“ нису сагласне."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Опције „-n“ и „-l/-L“ нису сагласне."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Опције „-D“ и „-E fixes_only“ нису сагласне."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Опције „-E bmap2extent“ и „fixes_only“ нису сагласне."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Не можете користити у исто време опције „-c“ и „-l/-L“.\n"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3479,7 +3441,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG „%s“ није цео број\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3490,35 +3452,31 @@ msgstr ""
 "Неисправан не-бројевни аргумент за „-%c“ (%s)\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, c-format
-msgid ""
-"MMP interval is %u seconds and total wait time is %u seconds. Please "
-"wait...\n"
-msgstr ""
-"ММП период је %u секунде а укупно време чекања је %u секунде. Сачекајте "
-"малко...\n"
+msgid "MMP interval is %u seconds and total wait time is %u seconds. Please wait...\n"
+msgstr "ММП период је %u секунде а укупно време чекања је %u секунде. Сачекајте малко...\n"
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr "приликом провере ММП блока"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
-"Ако сте сигурни да систем датотека није у употреби ни на једном чвору, "
-"покрените:\n"
-"„tune2fs -f -E clear_mmp {уређај}“\n"
+"Ако сте сигурни да систем датотека није у употреби ни на једном чвору, покрените:\n"
+"„tune2fs -f -E clear_mmp %s“\n"
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
 msgstr "приликом читања ММП блока"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3529,57 +3487,57 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "приликом покушаја брисања „%s“"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "приликом покушаја постављања датотеке поништавања\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Грешка: издање библиотеке „ext2fs“ је застарело!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "када сам покушао да покренем програм"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tКористим „%s“, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr "потребан је терминал за међудејствене поправке"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: „%s“ покушавам да направим резерву блокова...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr "Суперблок је неисправан,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
 msgstr "Описник групе изгледа лоше..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: „%s“ приликом коришћења резерве блокова"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1546
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: враћам се на изворни суперблок\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3589,28 +3547,28 @@ msgstr ""
 "(Или је суперблок система датотека оштећен)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr "Да није ово партиција нулте дужине?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Морате имати право „%s“ на систему датотека или бити администратор\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1590
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Можда је непостојећи или разменски уређај?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1592
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr "Систем датотека је прикачен или отворен искључиво другим програмом?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr "Можда је непостојећи или уређај?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3618,71 +3576,77 @@ msgstr ""
 "Диск је заштићен од писања; користите опцију „-n“ да одрадите проверу\n"
 "само за читање уређаја.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr "%s: Покушавам да учитам суперблок упркос грешкама...\n"
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr "Набавите најновије издање „e2fsck“-а!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1749
 #, c-format
 msgid "while checking journal for %s"
 msgstr "приликом провере дневника за „%s“"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1752
 msgid "Cannot proceed with file system check"
 msgstr "Не могу наставити са провером система датотека"
 
-#: e2fsck/unix.c:1661
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
-msgstr ""
-"Упозорење: прескачем опоравак дневника зато што вршим проверу система "
-"датотека само за читање.\n"
+#: e2fsck/unix.c:1763
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
+msgstr "Упозорење: прескачем опоравак дневника зато што вршим проверу система датотека само за читање.\n"
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1775
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "не могу да поставим заставице суперблока на „%s“\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1781
 #, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Нађох грешку провере суме дневника у „%s“\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1785
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "Дневник је оштећен у „%s“\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1789
 #, c-format
 msgid "while recovering journal of %s"
 msgstr "приликом поправке дневника за „%s“"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "„%s“ има неподржану(е) функцију(е):"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1826
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "„%s“ има неподржано кодирање: %0x\n"
+
+#: e2fsck/unix.c:1876
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: „%s“ приликом читања и-чвора лоших блокова\n"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1879
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Ово не слути на добро, али ћемо покушати да наставимо...\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Правим дневник (%d блока): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr " Готово.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1931
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
@@ -3690,24 +3654,38 @@ msgstr ""
 "\n"
 "*** дневник је поново створен ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "прекинуто"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: „e2fsck“ је отказан.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Поново покрећем „e2fsck“ из почетка...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "приликом враћања поставки контекста"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** ГРЕШКЕ СИСТЕМА ДАТОТЕКА СУ ИСПРАВЉЕНЕ *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: Систем датотека је измењен.\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3716,12 +3694,12 @@ msgstr ""
 "\n"
 "%s: ***** СИСТЕМ ДАТОТЕКА ЈЕ ИЗМЕЊЕН *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:2040
 #, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** ПОНОВО ПОДИЖЕМ СИСТЕМ *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3732,51 +3710,51 @@ msgstr ""
 "%s: ********** УПОЗОРЕЊЕ: Систем датотека још увек има грешака **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "дД"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "нН"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr "аА"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr " („а“ укључује „да“ за све) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<д>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<н>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (д/н)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "отказано!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr "да за све\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "да\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "не\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3785,7 +3763,7 @@ msgstr ""
 "%s? не\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3794,38 +3772,38 @@ msgstr ""
 "%s? да\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "да"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "не"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: недозвољени блок(ови) битмапе за „%s“"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "читам битмапе и-чвора и блокова"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "док сам поново покушао да читам битмапе за „%s“"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "пишем битмапе блока и и-чвора"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "приликом преписивања битмапа блока и и-чвора за „%s“"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3838,64 +3816,58 @@ msgstr ""
 "%s: НЕОЧЕКИВАНА НЕДОСЛЕДНОСТ; ПОКРЕНИТЕ „fsck“ РУЧНО.\n"
 "\t(тј., без „-a“ или „-p“)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Коришћена меморија: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Коришћена меморија: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "време: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "протекло време: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "приликом читања и-чвора „%lu“ у „%s“"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "приликом писања и-чвора „%lu“ у „%s“"
 
-#: e2fsck/util.c:765
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
-msgstr ""
-"НЕОЧЕКИВАНА НЕДОСЛЕДНОСТ: систем датотека је измењен док је „fsck“ био "
-"покренут.\n"
+#: e2fsck/util.c:792
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "НЕОЧЕКИВАНА НЕДОСЛЕДНОСТ: систем датотека је измењен док је „fsck“ био покренут.\n"
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "готово                                                 \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, 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"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 величина_блока] [-i улазна_дттка] [-o излазна_дттка] [-svwnf]\n"
-"       [-c блокови_одједном] [-d чинилац_застоја_између_читања] [-e најв."
-"_лоших_блокова]\n"
+"Употреба: %s [-b величина_блока] [-i улазна_дттка] [-o излазна_дттка] [-svwnfBX]\n"
+"       [-c блокови_одједном] [-d чинилац_застоја_између_читања] [-e најв._лоших_блокова]\n"
 "       [-p бр._пролаза] [-t тест_шаблон [-t тест_шаблон [...]]]\n"
 "       уређај [последњи_блок [први_блок]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3904,81 +3876,80 @@ msgstr ""
 "%s: Опције „-n“ и „-w“ се узајамно искључују.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f%% урађено, %s протекло. (%d/%d/%d грешака)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Испробавам насумичним шаблоном: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Испробавам шаблоном 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "приликом тражења"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Чудна вредност (%ld) у „do_read“\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "приликом „ext2fs_sync_device“"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "приликом почињања понављања списка лоших блокова"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "приликом доделе међумеморија"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Проверавам блокове од %lu до %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Проверавам има ли лоших блокова у режиму само-за-читање\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Тражим лоше блокове (тест само-за-читање): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Превише лоших блокова, прекидам тест\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Проверавам има ли лоших блокова у режиму писања и читања\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Од блока %lu до %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Читам и упоређујем: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
-msgstr ""
-"Проверавам има ли лоших блокова у не-разарајућем режиму писања и читања\n"
+msgstr "Проверавам има ли лоших блокова у не-разарајућем режиму писања и читања\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Проверавам има ли лоших блокова (не-разарајући тест писања и читања)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3986,57 +3957,57 @@ msgstr ""
 "\n"
 "Дошло је до прекида, чистим\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "приликом писања података теста, блок %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr "„%s“ је прикачен; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "лоши блокови су ипак присиљени.  Надам се да је „/etc/mtab“ нетачан.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "није безбедно покренути лоше блокове!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "„%s“ се делимично користи на систему; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "лоши блокови су ипак присиљени.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "неисправано „%s“ — %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr "Највећи износ од %u лоша блока је превелик — највише је %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "не могу да доделим меморију за тест_шаблон — %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "Максимум једног тест_шаблона може бити наведен у режиму само за читање"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Насумични тест_шаблон није дозвољен у режиму само за читање"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -4044,271 +4015,268 @@ msgstr ""
 "Не могу да одредим величину уређаја; морате ручно\n"
 "навести величину\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "док сам покушавао да одредим величину уређаја"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "последњи блок"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "први блок"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "неисправан почетни блок (%llu): мора бити мање од %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "неисправан крајњи блок (%llu): мора бити 32-битна вредност"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "приликом стварања списка лоших блокова у-меморији"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "улазна датотека — лош запис"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "приликом додавања списка лоших блокова у-меморији"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Пролаз је обављен, нађених лоших блокова: %u. (грешака: %d/%d/%d)\n"
 
 #: misc/chattr.c:89
 #, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
-msgstr "Употреба: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v издање] датотеке...\n"
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "Употреба: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v издање] датотеке...\n"
 
-#: misc/chattr.c:159
+#: misc/chattr.c:160
 #, c-format
 msgid "bad project - %s\n"
 msgstr "лош пројекат — %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "лоше издање — %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "приликом покушаја да добавим податке „%s“"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "приликом читања заставица на „%s“"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Заставице за „%s“ су постављене као "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "приликом постављања заставица на „%s“"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Издање за „%s“ је постављено као %lu\n"
 
-#: misc/chattr.c:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "приликом постављања издања на „%s“"
 
-#: misc/chattr.c:271
+#: misc/chattr.c:272
 #, c-format
 msgid "Project of %s set as %lu\n"
 msgstr "Пројекат за „%s“ је постављено као %lu\n"
 
-#: misc/chattr.c:275
+#: misc/chattr.c:276
 #, c-format
 msgid "while setting project on %s"
 msgstr "приликом постављања пројекта на „%s“"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Не могу да доделим променљиву путање у „chattr_dir_proc“"
 
-#: misc/chattr.c:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "= није сагласно са - и +\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "Морате користити „-v“, =, - или +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:80 misc/create_inode.c:119
 #, c-format
 msgid "while reading inode %u"
 msgstr "приликом читања и-чвора „%u“"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 msgid "while expanding directory"
 msgstr "приликом ширења директоријума"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:97
 #, c-format
 msgid "while linking \"%s\""
 msgstr "приликом повезивања „%s“"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
 #, c-format
 msgid "while writing inode %u"
 msgstr "приликом писања и-чвора „%u“"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:152 misc/create_inode.c:176
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "приликом исписивања атрибута за „%s“"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:163
 #, c-format
 msgid "while opening inode %u"
 msgstr "приликом отварања и-чвора „%u“"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr "приликом доделе меморије"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:189 misc/create_inode.c:205
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "приликом читања атрибута „%s“ за „%s“"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:214
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "приликом писања атрибута „%s“ у и-чвор „%u“"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:224
 #, c-format
 msgid "while closing inode %u"
 msgstr "приликом затварања и-чвора „%u“"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:275
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr "приликом доделе и-чвора „%s“"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:294
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr "приликом стварања и-чвора „%s“"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:360
 #, c-format
 msgid "while creating symlink \"%s\""
 msgstr "приликом стварања симболичке везе „%s“"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:378 misc/create_inode.c:963
 #, c-format
 msgid "while looking up \"%s\""
 msgstr "приликом тражења „%s“"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:398
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr "приликом стварања директоријума „%s“"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:627
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "приликом отварања „%s“ за умножавање"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr "приликом промене радног директоријума у „%s“"
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:815
 #, c-format
-msgid "while opening directory \"%s\""
-msgstr "пÑ\80иликом Ð¾Ñ\82ваÑ\80аÑ\9aа директоријума „%s“"
+msgid "while scanning directory \"%s\""
+msgstr "пÑ\80иликом Ð¿Ñ\80егледа директоријума „%s“"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:825
 #, c-format
 msgid "while lstat \"%s\""
 msgstr "приликом покушаја да добавим податке за „%s“"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:875
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr "приликом стварања специјалне датотеке „%s“"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:884
 msgid "malloc failed"
 msgstr "није успела додела меморије"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:892
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr "приликом покушаја читања везе „%s“"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr "симболичкој вези се повећала величина између „lstat()“ и „readlink()“"
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:910
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr "приликом писања симболичке везе „%s“"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:921
 #, c-format
 msgid "while writing file \"%s\""
 msgstr "приликом писања датотеке „%s“"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:934
 #, c-format
 msgid "while making dir \"%s\""
 msgstr "приликом прављења директоријума „%s“"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:952
 msgid "while changing directory"
 msgstr "приликом промене директоријума"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:958
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr "занемарујем унос „%s“"
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:971
 #, c-format
 msgid "while setting inode for \"%s\""
 msgstr "приликом подешавања и-чвора за „%s“"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:978
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "приликом постављања х-атрибута за „%s“"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:1004
 msgid "while saving inode data"
 msgstr "приликом чувања података и-чвора"
 
 #: misc/dumpe2fs.c:56
 #, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Употреба: %s [-bfghixV] [-o суперблок=<бр.>] [-o величина_блока=<бр.>] "
-"уређај\n"
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "Употреба: %s [-bfghimxV] [-o суперблок=<бр.>] [-o величина_блока=<бр.>] уређај\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -4426,106 +4394,54 @@ msgstr "приликом штампања списка оштећених бло
 msgid "Bad blocks: %u"
 msgstr "Лоших блокова: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "приликом читања и-чвора дневника"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "приликом отварања и-чвора дневника"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "приликом читања суперблока дневника"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Чаробни број суперблока дневника је неисправан!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Функције дневника:        "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Величина дневника:             "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Дужина дневника:      %u\n"
-"Низ дневника:         0x%08x\n"
-"Почетак дневника:     %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr "Врста суме провере дневника:    crc32\n"
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-"Врста суме провере дневника:    %s\n"
-"Сума провере дневника:          0x%08x\n"
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Број грешке дневника:            %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "приликом читања суперблока дневника"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Не могу да нађем чаробне бројеве суперблока дневника"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Величина блока дневника:  %u\n"
-"Дужина дневника:          %u\n"
-"Први блок дневника:       %u\n"
-"Низ дневника:             0x%08x\n"
-"Почетак дневника:         %u\n"
-"Број корисника дневника:  %u\n"
+#: misc/dumpe2fs.c:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "нисам успео да доделим ММП међумеморију\n"
 
-#: misc/dumpe2fs.c:514
+#: misc/dumpe2fs.c:479
 #, c-format
-msgid "Journal users:            %s\n"
-msgstr "Корисници дневника:       %s\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "читам ММП блок %llu из „%s“\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Не могу да доделим меморију да бих обрадио опције!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Неисправан параметар суперблока: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Неисправан параметар величине блока: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4542,245 +4458,227 @@ msgstr ""
 "Наведене су лоше проширене опције: %s\n"
 "\n"
 "Проширене опције су раздвојене зарезима, и могу имати аргумент\n"
-"\tкоји је постављен знаком једнакости (=).\n"
+"\tкоји је подешен знаком једнакости (=).\n"
 "\n"
 "Исправне проширене опције су:\n"
 "\tsuperblock=<број суперблока>\n"
 "\tblocksize=<величина блока>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tКористим „%s“\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** Откривене су грешке суме провере у систему датотека!  Сада покрените "
-"„e2fsck“!\n"
-"\n"
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Не могу да нађем исправан суперблок система датотека.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** Откривене су грешке суме провере у битмапама!  Сада покрените „e2fsck“!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s: ММП функција није укључена.\n"
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:747
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "приликом покушаја читања битмапа „%s“\n"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"*** Покрећем „e2fsck“!\n"
 "\n"
-"%s: %s: грешка читања битмапа: %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
-msgstr "Употреба: %s [ -r|Q ] [ -fr ] уређај датотека_слике\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
+msgstr "Употреба: %s [ -r|Q ] [ -f ] [ -b супер блок ] [ -B величина блока][ -fr ] уређај датотека-слике\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "       %s -I уређај датотека_слике\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
-msgstr ""
-"       %s -ra  [  -cfnp  ] [ -o померај_извора ] [ -O померај_одредишта ] "
-"сд_извора [ сд_одредишта ]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+msgstr "       %s -ra  [  -cfnp  ] [ -o померај_извора ] [ -O померај_одредишта ] сд_извора [ сд_одредишта ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr "приликом доделе међумеморије"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "Пишем блок %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr "грешка писања блока %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr "грешка у функцији „generic_write()“"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Грешка: величина заглавља је већа од величине писања\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr "Не могу да доделим међумеморију заглавља\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "приликом писања суперблока"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "приликом писања табеле и-чвора"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "приликом писања битмапе блока"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "приликом писања битмапе и-чвора"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Оштећени блок директоријума %llu: лоша дужина_записа (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Оштећени блок директоријума %llu: лоша дужина_назива (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu блока (%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
 msgstr "Умножавам "
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
-msgstr ""
-"Заустављање ће оштетити систем датотека, прекините опет ако сте сигурни\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+msgstr "Заустављање ће оштетити систем датотека, прекините опет ако сте сигурни\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " преостаје %s при %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr "грешка читања блока %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "Умножих %llu / %llu блока (%d%%) у „%s“ "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "при %.2f MB/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
 msgstr "приликом додељивања табеле „l1“"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr "приликом додељивања оставе „l2“"
 
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
-msgstr ""
-"Упозорење: Још увек има табела у остави приликом стављања оставе, подаци ће "
-"бити изгубљени тако да слика можда неће бити исправна.\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
+msgstr "Упозорење: Још увек има табела у остави приликом стављања оставе, подаци ће бити изгубљени тако да слика можда неће бити исправна.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr "приликом доделе „ext2_qcow2_image“"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr "приликом покретања „ext2_qcow2_image“"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
-msgstr ""
-"Грешка програма: направљено је неколико секвентних блокова броја упута!\n"
+msgstr "Грешка програма: направљено је неколико секвентних блокова броја упута!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr "приликом доделе битмапе блока"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr "приликом доделе битмапе испремештаних блокова"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
 msgstr "Прегледам и-чворове...\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr "Не могу да доделим међумеморију блока"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "приликом понављања на и-чвору %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "Сирова и „qcow2“ слике не могу бити инсталиране"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr "грешка читања битмапа"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr "приликом отварања датотеке уређаја"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr "приликом враћања табеле слике"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "Опција „-a“ се може користити само са сировим или „QCOW2“ сликама."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "Опција „-b“ се може користити само са сировим или „QCOW2“ сликама."
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr "Помераји су дозвољени само са сировим сликама."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr "Режим премештања је дозвољен само са сировим сликама."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr "Режим премештања захтева све режиме података."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr "проверавам да ли је прикачен"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4788,52 +4686,55 @@ msgid ""
 "Use -f option if you really want to do that.\n"
 msgstr ""
 "\n"
-"Покретање „e2image“-а на системима датотека монтираним за читање/писање може "
-"довести до\n"
-"недоследности слике која потом неће бити корисна у сврхе исправљања "
-"грешака.\n"
+"Покретање „e2image“-а на системима датотека монтираним за читање/писање може довести до\n"
+"недоследности слике која потом неће бити корисна у сврхе исправљања грешака.\n"
 "Користите опцију „-f“ ако стварно желите ово.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "„QCOW2“ слика не може бити исписана на стандардном излазу!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr "Не могу да добавим податке излаза\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "Слика (%s) је сажета\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "Слика (%s) је шифрована\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Слика (%s) је оштећена\n"
+
+#: misc/e2image.c:1683
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr "приликом покушаја претварања „qcow2“ слике (%s) у сирову слику (%s)"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr "Опција „-c“ је подржана једино у сировом режиму\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "Опција „-c“ није подржана приликом писања на стандардном излазу\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr "приликом доделе међумеморије провере"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr "Опција „-p“ је подржана једино у сировом режиму\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d блока већ садрже податке за умножавање\n"
@@ -4863,7 +4764,7 @@ msgstr "e2label: грешка читања суперблока\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: није систем датотека екст2\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Упозорење: натпис је предуг, скраћујем.\n"
@@ -4878,162 +4779,161 @@ msgstr "e2label: не могу опет да пређем на супербло
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: грешка писања суперблока\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Употреба: e2label уређај [нови_натпис]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
-msgstr "Употреба: %s [-f] [-h] [-n] [-v] <дттка преноса> <систем_дттка>\n"
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
+msgstr "Употреба: %s [-f] [-h] [-n] [-o померај] [-v] [-z дттка_врати] <датотека преноса> <систем датотека>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr "Суперблок система датотека не одговара датотеци опозива.\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr "УУИД не одговара.\n"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr "Време последњег качења не одговара.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr "Време последњег писања не одговара.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr "Бројач времена писања не одговара.\n"
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr "приликом читања суперблока система датотека."
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr "приликом довлачења суперблока"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "Сума провере суперблока датотеке опозива не одговара.\n"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr "неисправан померај — %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr "Нећу писати у датотеку опозива приликом одговарања.\n"
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "проликом отварања датотеке опозива „%s“\n"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 msgid "while reading undo file"
 msgstr "приликом читања датотеке опозива"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: Није датотека опозива.\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "%s: Сума провере заглавља не одговара.\n"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "%s: Оштећено заглавље датотеке опозива.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr "%s: Величина блока опозива је превелика.\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "%s: Величина блока опозива је премала.\n"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr "%s: Непозната подешена функције датотеке опозива.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "Грешка приликом одређивања да ли је „%s“ прикачен."
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr "„e2undo“ треба покретати само на откаченим системима датотека"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, c-format
 msgid "while opening `%s'"
 msgstr "приликом отварања „%s“"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr "наведени померај је превелик"
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 msgid "while reading keys"
 msgstr "приликом читања кључева"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr "%s: погрешна магија кључа на %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr "%s: грешка суме провере блока кључа на %llu.\n"
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, c-format
 msgid "%s: block %llu is too long."
 msgstr "%s: блок %llu је предуг."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, c-format
 msgid "while fetching block %llu."
 msgstr "приликом довлачења блока %llu."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
-msgstr ""
-"грешка суме провере у блоку система датотека %llu (поништавам „blk %llu“)\n"
+msgstr "грешка суме провере у блоку система датотека %llu (поништавам „blk %llu“)\n"
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, c-format
 msgid "while writing block %llu."
 msgstr "приликом писања блока %llu."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr "Оштећење датотеке опозива; САДА покрените „e2fsck“!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr "УИ грешка приликом одговора; САДА покрените „e2fsck“!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr "Непотпун запис опозива; покрените „e2fsck“.\n"
@@ -5079,12 +4979,8 @@ msgstr ""
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
-msgstr ""
-"померај_бајта  почетак_бајта     крај_бајта  сд_блокови блквел  грп  mkfs/"
-"време_качења           цб_ууид натпис\n"
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+msgstr "померај_бајта  почетак_бајта     крај_бајта  сд_блокови блквел  грп  mkfs/време_качења           цб_ууид натпис\n"
 
 #: misc/findsuper.c:264
 #, c-format
@@ -5117,85 +5013,77 @@ msgstr ""
 "        поправите датотеку „/etc/fstab“ што пре будете могли.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: нисам нашао\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: тренутак: Нема више произашлих процеса?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Упозорење... „%s“ за уређај „%s“ је завршио сигналом %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: стање је „%x“, ово не би требало никада да се деси.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Завршено је са „%s“ (стање излаза %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Грешка „%d“ приликом извршавања „fsck.%s“ за „%s“\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
 msgstr ""
-"Или све или ниједна врста система датотека прослеђена за „-t“ мора имати "
-"префикс\n"
+"Или све или ниједна врста система датотека прослеђена за „-t“ мора имати префикс\n"
 "„no“ или „!“.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Не могу да доделим меморију за врсте система датотека\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
-msgstr ""
-"%s: прескачем лош ред у датотеци „/etc/fstab“: свезујем качење са не-нултим "
-"бројем пролаза „fsck“-а\n"
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgstr "%s: прескачем лош ред у датотеци „/etc/fstab“: свезујем качење са не-нултим бројем пролаза „fsck“-а\n"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: не могу да проверим „%s“: нисам нашао „fsck.%s“\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Проверавам све системе датотека.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "——чекам—— (%d. корак)\n"
 
-#: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
-msgstr ""
-"Употреба: fsck [-AMNPRTV] [ -C [ од ] ] [-t врста_сис_дат] [опције_сис_дат] "
-"[сис_дттка...]\n"
+#: misc/fsck.c:1085
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "Употреба: fsck [-AMNPRTV] [ -C [ од ] ] [-t врста_сис_дат] [опције_сис_дат] [сис_дттка...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: превише уређаја\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: превише аргумената\n"
@@ -5209,47 +5097,42 @@ msgstr "Качим само за читање.\n"
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr "%s: Омогућавам корисницима да доделе све блокове. Ово је опасно!\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
 msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr "Покрените „e2fsck -fy“ „%s“.\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
-msgstr ""
-"Дневнику је потребан опоравак; треба да покренете „e2fsck -E дневник_само“.\n"
+msgstr "Дневнику је потребан опоравак; треба да покренете „e2fsck -E дневник_само“.\n"
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3812
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "%s: Писање у дневник није подржано.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
-msgstr ""
-"Упозорење: Качим непроверени сис_дттка, покретање „e2fsck“ је препоручљиво.\n"
+msgstr "Упозорење: Качим непроверени сис_дттка, покретање „e2fsck“ је препоручљиво.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
-msgstr ""
-"Упозорење: Достигнут је највећи број качења, покретање „e2fsck“ је "
-"препоручљиво.\n"
+msgstr "Упозорење: Достигнут је највећи број качења, покретање „e2fsck“ је препоручљиво.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
-msgstr ""
-"Упозорење: Достигнуто је време провере, покретање „e2fsck“ је препоручљиво.\n"
+msgstr "Упозорење: Достигнуто је време провере, покретање „e2fsck“ је препоручљиво.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr "Откривени су сирочићи; покретање „e2fsck“ је препоручљиво.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr "Откривене су грешке; покретање „e2fsck“ је препоручљиво.\n"
 
@@ -5273,7 +5156,7 @@ msgstr "Приликом читања пројекта на „%s“"
 msgid "While reading version on %s"
 msgstr "За време читања издања на „%s“"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5282,52 +5165,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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
-"Употреба: %s [-c|-l назив_датотеке] [-b величина_блока] [-C "
-"величина_кластера]\n"
+"Употреба: %s [-c|-l назив_датотеке] [-b величина_блока] [-C величина_кластера]\n"
 "\t[-i бајтова_по_и-чвору] [-I величина_и-чвора] [-J опције_дневника]\n"
 "\t[-G величина_флекс_групе] [-N број_и-чворова] [-d корени_директоријум]\n"
 "\t[-m проценат_резервисаних_блокова] [-o ос_творца]\n"
-"\t[-g блокова_по_групи] [-L натпис_волумена] [-M "
-"последњи_прикачени_директоријум]\n"
+"\t[-g блокова_по_групи] [-L натпис_волумена] [-M последњи_прикачени_директоријум]\n"
 "\t[-O функција[,...]] [-r ревизија_сд-а] [-E проширена_опција[,...]]\n"
-"\t[-t fs-type] [-T врста_употребе ] [-U UUID] [-e понашање_грешака][-z "
-"датотека_опозива]\n"
+"\t[-t fs-type] [-T врста_употребе ] [-U UUID] [-e понашање_грешака][-z датотека_опозива]\n"
 "        [-jnqvDFSV] уређај [број_блокова]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Покрећем наредбу: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "док сам покушавао да покренем „%s“"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "приликом обраде списка лоших блокова из програма"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Блок %d у области описника примарног суперблока/групе је лош.\n"
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
-msgstr ""
-"Блокови од %u до %u морају бити добри да би се изградио систем датотека.\n"
+msgstr "Блокови од %u до %u морају бити добри да би се изградио систем датотека.\n"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Прекидам...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5338,15 +5216,19 @@ msgstr ""
 "\tлоше блокове.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "приликом обележавања лоших блокова коришћеним"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "приликом писања резервисаних и-чворова"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Пишем табеле и-чвора: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5355,76 +5237,76 @@ msgstr ""
 "\n"
 "Не могу да запишем %d блока у табели и-чвора са почетком %llu: %s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "готово                            \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "приликом стварања кореног директоријума"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "приликом читања кореног и-чвора"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "приликом постављања власништва кореног и-чвора"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "приликом стварања „/изгубљено+нађено“"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "приликом тражења „/изгубљено+нађено“"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "приликом ширења „/изгубљено+нађено“"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "приликом постављања и-чвора оштећених блокова"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Нестало је меморије током брисања сектора %d-%d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Упозорење: не могу да читам блок 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Упозорење: не могу да обришем сектор %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "приликом покретања суперблока дневника"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Постављам на нулу уређај дневника: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "приликом постављања на нулу уређаја дневника (блок %llu, укупно %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "приликом писања суперблока дневника"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "Стварам систем датотека са %llu %dk блока и %u и-чвора\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5433,157 +5315,164 @@ msgstr ""
 "упозорење: %llu блока се не користе.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Натпис система датотека=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Врста ОС-а: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Величина блока=%u (записник=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Величина кластера=%u (записник=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Величина фрагмента=%u (записник=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Искорак = %u блока, ширина траке = %u блока\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u и-чвора, %llu блока\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu блока (%2.2f%%) је резревисано за администратора\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Први блок података=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Власник кореног директоријума=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Највећи број блокова систем датотека=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u групе блокова\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u група блокова\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u блока по групи, %u кластера по групи\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u блока по групи, %u фрагмента по групи\n"
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u и-чвора по групи\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "УУИД система датотека: %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Резерве суперблока смештене на блоковима: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:822
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "„%s“ захтева „-O 64бита“\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "„%s“ мора бити пре „resize=%u“\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Неисправна величина описника: %s\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Неисправно семе хеша: %s\n"
+
+#: misc/mke2fs.c:867
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Неисправан померај: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Неисправан период освежавања ммп-а: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Неисправан број суперблокова резерве: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Неисправан параметар искорака: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Неисправан параметар ширине траке: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Неисправан параметар промене величине: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:965
 msgid "The resize maximum must be greater than the filesystem size.\n"
-msgstr ""
-"Највећа вредност промене величине мора бити већа од величине система "
-"датотека.\n"
+msgstr "Највећа вредност промене величине мора бити већа од величине система датотека.\n"
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:989
 msgid "On-line resizing not supported with revision 0 filesystems\n"
-msgstr ""
-"Промена величине на мрежи није подржана са системима датотека ревизије 0\n"
+msgstr "Промена величине на мрежи није подржана са системима датотека ревизије 0\n"
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Неисправан корени власник: %s\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1069
+#, c-format
+msgid "Invalid encoding: %s"
+msgstr "Неисправно кодирање: %s"
+
+#: misc/mke2fs.c:1087
 #, c-format
 msgid ""
 "\n"
@@ -5606,6 +5495,8 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
@@ -5613,7 +5504,7 @@ msgstr ""
 "Наведена је лоша опција: %s\n"
 "\n"
 "Проширене опције су раздвојене зарезима, и могу имати аргумент\n"
-"\tкоји је постављен знаком једнакости (=).\n"
+"\tкоји је подешен знаком једнакости (=).\n"
 "\n"
 "Исправне проширене опције су:\n"
 "\tmmp_update_interval=<период>\n"
@@ -5629,10 +5520,12 @@ msgstr ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<кодирање>\n"
+"\tencoding_flags=<заставице>\n"
 "\tquotatype=<врста квоте за укључивање>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5643,7 +5536,17 @@ msgstr ""
 "Упозорење: РАИД ширина траке %u није парни умножак искорака %u.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr "грешка: Неисправна заставица кодирања: %s\n"
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr "грешка: Кодирање мора изричито бити наведено приликом давања заставица кодирања\n"
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5652,17 +5555,17 @@ msgstr ""
 "Грешка синтаксе у датотеци подешавања „mke2fs“-а (%s, %d. ред)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Постављена је неисправна опција система датотека: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Постављена је неисправна опција качења: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
@@ -5671,7 +5574,7 @@ msgstr ""
 "\n"
 "Ваша датотека „mke2fs.conf“ не дефинише „%s“ врсту система датотека.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5679,11 +5582,11 @@ msgstr ""
 "Вероватно треба да инсталирате освежену датотеку „mke2fs.conf“.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 msgid "Aborting...\n"
 msgstr "Прекидам...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5691,87 +5594,82 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Упозорење: врста система датотека „%s“ није дефинисана у датотеци „mke2fs."
-"conf“\n"
+"Упозорење: врста система датотека „%s“ није дефинисана у датотеци „mke2fs.conf“\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Не могу да доделим меморију за нову ПУТАЊУ.\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1608
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Не могу успешно да покренем профил (грешка: %ld).\n"
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "неисправна величина блока — %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Упозорење: величина блока %d није употребљива на већини система.\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1661
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "неисправна величина кластера — %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "„-R“ је застарело, користите „-E“"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "лоше понашање грешке — %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr "Недозвољени број за блокове по групи"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 msgid "blocks per group must be multiple of 8"
 msgstr "блокова по групи мора бити умножак од 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "Недозвољени број за величину „flex_bg“"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
 msgstr "Величина „flex_bg“ мора бити степен 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "Величина „flex_bg“ (%lu) мора бити мање или једнака са 2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "неисправан опсег и-чвора %s (најм. %d/најв. %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1744
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "неисправна величина и-чвора — %s"
 
-#: misc/mke2fs.c:1684
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
-msgstr ""
-"Упозорење: Опција „-K“ је застарела и не треба више да се користи. Користите "
-"проширену опцију „-E nodiscard“!\n"
+#: misc/mke2fs.c:1757
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "Упозорење: Опција „-K“ је застарела и не треба више да се користи. Користите проширену опцију „-E nodiscard“!\n"
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1768
 msgid "in malloc for bad_blocks_filename"
 msgstr "у додели меморије за назив_датотеке_лоших_блокова"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1777
 #, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
@@ -5780,68 +5678,67 @@ msgstr ""
 "Упозорење: натпис је предуг; биће скраћен на „%s“\n"
 "\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "неисправан проценат резервисаних блокова — %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "лош број и-чворова — %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1814
 msgid "while allocating fs_feature string"
 msgstr "приликом доделе ниске функције система датотека"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1831
 #, c-format
 msgid "bad revision level - %s"
 msgstr "лош ниво ревизије — %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "приликом покушаја стварања ревизије %d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 msgid "The -t option may only be used once"
 msgstr "Опција „-t“ се може користити само једном"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1858
 msgid "The -T option may only be used once"
 msgstr "Опција „-T“ се може користити само једном"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "приликом покушаја отварања уређаја дневника „%s“\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1920
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
-msgstr ""
-"Величина блока уређаја дневника (%d) је мања од најмање величине блока %d\n"
+msgstr "Величина блока уређаја дневника (%d) је мања од најмање величине блока %d\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1926
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Користим величину блока уређаја дневника: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1937
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "неисправни блокови „%s“ на уређају „%s“"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "систем датотека"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "док сам покушавао да одредим величину система датотека"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5849,159 +5746,151 @@ msgstr ""
 "Не могу да одредим величину уређаја; морате навести\n"
 "величину система датотека\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
 "\ta modified partition being busy and in use.  You may need to reboot\n"
 "\tto re-read your partition table.\n"
 msgstr ""
-"Извештено је да је величина уређаја нула.  Наведена је неисправна партиција, "
-"или\n"
-"\tтабела партиција није поново прочитана након покретања „fdisk“-а, зато што "
-"је\n"
+"Извештено је да је величина уређаја нула.  Наведена је неисправна партиција, или\n"
+"\tтабела партиција није поново прочитана након покретања „fdisk“-а, зато што је\n"
 "\tизмењена партиција заузета и у употреби.  Морате поново да подигнете\n"
 "\tсистем да бисте поново прочитали табелу патриција.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:2015
 msgid "Filesystem larger than apparent device size."
 msgstr "Систем датотека је већи од привидне величине уређаја."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:2035
 msgid "Failed to parse fs types list\n"
 msgstr "Нисам успео да обрадим списак врста система датотека\n"
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2085
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "ХУРД не подржава функцију врсте датотеке.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2090
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "ХУРД не подржава функцију велике датотеке.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "ХУРД не подржава функцију суме провере метаподатака.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2100
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "ХУРД не подржава функцију „еа_чвор“.\n"
+
+#: misc/mke2fs.c:2110
 msgid "while trying to determine hardware sector size"
 msgstr "док сам покушавао да одредим величину хардверског сектора"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2116
 msgid "while trying to determine physical sector size"
 msgstr "док сам покушавао да одредим величину физичког сектора"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2148
 msgid "while setting blocksize; too small for device\n"
 msgstr "приликом постављања величине блока; премала је за уређај\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2153
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
-msgstr ""
-"Упозорење: наведена величина блока %d је мања од величине физичког сектора "
-"уређаја %d\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgstr "Упозорење: наведена величина блока %d је мања од величине физичког сектора уређаја %d\n"
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2177
 #, 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: Величина уређаја (0x%llx blocs) „%s“ је превише велика да би била "
-"изражена\n"
+"%s: Величина уређаја (0x%llx blocs) „%s“ је превише велика да би била изражена\n"
 "\tса 32 бита коришћењем величине блока од %d.\n"
 
-#: misc/mke2fs.c:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2191
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
-"%s: Величина уређаја (0x%llx blocs) „%s“ је превише велика да би била "
-"изражена\n"
-"\tса 32 бита коришћењем величине блока од %d.\n"
+"%s: Величина уређаја (0x%llx blocs) „%s“ је превише велика за прављење\n"
+"\tс истема датотека коришћењем величине блока од %d.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "врсте_сд-а за резолуцију „mke2fs.conf“-а: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 msgid "Filesystem features not supported with revision 0 filesystems\n"
-msgstr ""
-"Функције система датотека нису подржане са системима датотека ревизије 0\n"
+msgstr "Функције система датотека нису подржане са системима датотека ревизије 0\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2228
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr "Оскудни суперблокови нису подржани са системима датотека ревизије 0\n"
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2238
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Дневници нису подржани са системима датотека ревизије 0\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2251
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "неисправан проценат резервисаних блокова — %lf"
 
-#: misc/mke2fs.c:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
-msgstr ""
-"Распони МОРАЈУ бити укључени за 64-битни систем датотека. Проследите распоне "
-"„-O“ да исправите.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
+msgstr "Распони МОРАЈУ бити укључени за 64-битни систем датотека. Проследите распоне „-O“ да исправите.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "Величина кластера не може бити мања од величине блока.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "навођење величине кластера захтева функцију „bigalloc“"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "упозорење: Не могу да добавим геометрију уређаја за „%s“\n"
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2317
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "Поравнање „%s“ је померено за %lu бајта.\n"
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2319
 #, c-format
-msgid ""
-"This may result in very poor performance, (re)-partitioning suggested.\n"
-msgstr ""
-"Ово може довести до врло слабог учинка, предлаже вам се (поновно)-"
-"партиционисање.\n"
+msgid "This may result in very poor performance, (re)-partitioning suggested.\n"
+msgstr "Ово може довести до врло слабог учинка, предлаже вам се (поновно)-партиционисање.\n"
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2340
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "блокови од %d бајта су превелики за систем (најв. %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2344
 #, c-format
-msgid ""
-"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
-msgstr ""
-"Упозорење: блокови од %d бајта су превелики за систем (најв. %d), приморано "
-"је настављање\n"
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgstr "Упозорење: блокови од %d бајта су превелики за систем (најв. %d), приморано је настављање\n"
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
-msgstr ""
-"Предлог: КОристите језгро Линукса >= 3.18 због побољшане стабилности "
-"функција метаподатака и суме провере дневника.\n"
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "Предлог: КОристите језгро Линукса >= 3.18 због побољшане стабилности функција метаподатака и суме провере дневника.\n"
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
+msgstr "Непознато кодирање назива датотеке из профила: %s"
+
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr "Непознате заставице кодирања из профила: %s"
+
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -6016,11 +5905,24 @@ msgstr ""
 "оно што ви желите.\n"
 "\n"
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2449
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr "и-чворови од %d бајта су премали за квоту пројекта"
+
+#: misc/mke2fs.c:2465
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Функције кодирања и увијања слова нису сагласне.\n"
+"Не могу бити укључене истовремено.\n"
+
+#: misc/mke2fs.c:2480
 msgid "Can't support bigalloc feature without extents feature"
 msgstr "Не могу да подржим функцију „bigalloc“ без функције распона"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -6028,7 +5930,7 @@ msgstr ""
 "Функције „resize_inode“ и „meta_bg“ нису сагласне.\n"
 "Не могу бити укључене истовремено.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -6040,50 +5942,39 @@ msgstr ""
 "Видите „https://ext4.wiki.kernel.org/index.php/Bigalloc“ за више о томе\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
-msgstr ""
-"резервисани блокови промене величине на мрежи нису подржани на не-оскудном "
-"систему датотека"
+msgstr "резервисани блокови промене величине на мрежи нису подржани на не-оскудном систему датотека"
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2516
 msgid "blocks per group count out of range"
 msgstr "број блокова по групи је ван опсега"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2538
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
-msgstr ""
-"Функција „flex_bg“ није укључена, тако да величина „flex_bg“ не може бити "
-"наведена"
+msgstr "Функција „flex_bg“ није укључена, тако да величина „flex_bg“ не може бити наведена"
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2550
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "неисправна величина и-чвора %d (најм. %d/најв. %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
-msgstr ""
-"и-чворови од %d бајта су премали за уграђене податке; наведите већу величину"
-
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-"и-чворови од %d бајта су премали за квоту пројекта; наведите већу величину"
+msgstr "и-чворови од %d бајта су премали за уграђене податке; наведите већу величину"
 
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "превише и-чворова (%llu), да повећам опсег и-чвора?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2587
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "превише и-чворова (%llu), наведи < 2^32 и-чвора"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2601
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -6094,74 +5985,65 @@ msgstr ""
 "\tсистем датотека са %llu блок(ов)а, наведите већи опсег_и-чвора (-i)\n"
 "\tили смањите број_и-чворова (-N).\n"
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2788
 msgid "Discarding device blocks: "
 msgstr "Одбацујем блокове уређаја: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 msgid "failed - "
 msgstr "неуспех — "
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2863
 msgid "while initializing quota context"
 msgstr "приликом покретања контекста квоте"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2870
 msgid "while writing quota inodes"
 msgstr "приликом писања и-чвора квоте"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2895
 #, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "лоше понашање грешке у профилу — %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2971
+msgid "in malloc for android_sparse_params"
+msgstr "у додели меморије за „android_sparse_params“"
+
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "приликом постављања суперблока"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
-msgstr ""
-"Распони нису укључени.  Стаблу распона датотеке се може урадити сума "
-"провере, док мапама блокова не.  Не укључивање распона смањује покривање "
-"метаподатака током суме провере. Проследите „-O“ распонима да исправите.\n"
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
+msgstr "Распони нису укључени.  Стаблу распона датотеке се може урадити сума провере, док мапама блокова не.  Не укључивање распона смањује покривање метаподатака током суме провере. Проследите „-O“ распонима да исправите.\n"
 
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
-msgstr ""
-"Подршка 64-битног система датотека није укључена.  Већа поља обезбеђена овом "
-"функцијом укључују свеобухватну суму проевере.  Проследите „-O 64-бита“ да "
-"исправите.\n"
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+msgstr "Подршка 64-битног система датотека није укључена.  Већа поља обезбеђена овом функцијом укључују свеобухватну суму проевере.  Проследите „-O 64-бита“ да исправите.\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr "Функција „metadata_csum_seed“ захтеца функцију „metadata_csum“.\n"
+#: misc/mke2fs.c:3016
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "Функција „metadata_csum_seed“ захтева функцију „metadata_csum“.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
-msgstr ""
-"Одбацивање је успело а као резултат даће 0s — прескачем брисање табеле и-"
-"чвора\n"
+msgstr "Одбацивање је успело а као резултат даће 0s — прескачем брисање табеле и-чвора\n"
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "непознат ос — %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 msgid "Allocating group tables: "
 msgstr "Додељујем табеле групе: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr "приликом покушаја додељивања табела система датотека"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6169,30 +6051,30 @@ msgstr ""
 "\n"
 "\tприликом претварања битмапе подкластера"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr "„%s“ може бити и даље оштећено преписивањем суперблоком\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "приликом постављања на нулу блока %llu на крају система датотека"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3279
 msgid "while reserving blocks for online resize"
 msgstr "приликом резервисања блокова за промену величине на мрежи"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "дневник"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Додајем дневник уређају „%s“: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
@@ -6201,21 +6083,21 @@ msgstr ""
 "\n"
 "\tприликом покушаја додавања дневника уређају „%s“"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "готово\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Прескачем стварање дневника у режиму само-супер\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Правим дневник (%u блока): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6223,7 +6105,7 @@ msgstr ""
 "\n"
 "\tприликом покушаја стварања дневника"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
@@ -6231,35 +6113,28 @@ msgstr ""
 "\n"
 "Грешка приликом укључивања функције заштите од вишеструког качења."
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3357
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
-msgstr ""
-"Заштита од вишеструког качења је укључена са периодом освежавања од %d "
-"секунде.\n"
+msgstr "Заштита од вишеструког качења је укључена са периодом освежавања од %d секунде.\n"
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3373
 msgid "Copying files into the device: "
 msgstr "Умножавам датотеке на уређај: "
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3379
 msgid "while populating file system"
 msgstr "приликом попуњавања система датотека"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Записујем податке предрачуна суперблокова и система датотека: "
 
-#: misc/mke2fs.c:3230
-#, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Упозорење, имам проблема са писањем суперблокова."
+#: misc/mke2fs.c:3393
+msgid "while writing out and closing file system"
+msgstr "приликом писања и затварања система датотека"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6267,29 +6142,31 @@ msgstr ""
 "готово\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
-msgstr ""
-"Померај партиције од %llu (%uk) блока није сагласан са величином кластера "
-"%u.\n"
+msgid "while zeroing block %llu for hugefile"
+msgstr "приликом постављања на нулу блока %llu за велику датотеку"
+
+#: misc/mk_hugefiles.c:515
+#, c-format
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgstr "Померај партиције од %llu (%uk) блока није сагласан са величином кластера %u.\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
 msgstr "Огромне датотеке биће сведене на нулу\n"
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:584
 #, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "Стварам %lu огромну(е) датотеку(е) "
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:586
 #, c-format
 msgid "with %llu blocks each"
 msgstr "са %llu блока свака"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:595
 #, c-format
 msgid "while creating huge file %lu"
 msgstr "приликом стварања огромне датотеке %lu"
@@ -6334,55 +6211,69 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   почетак=%8d величина=%8lu крај=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "Покрените „e2fsck -D“ на систему датотека.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+"\n"
+"Ова операција захтева недавно проверени систем датотека.\n"
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Покрените „e2fsck -f“ на систему датотека.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "Покрените „e2fsck -D“ на систему датотека.\n"
+msgstr "Покрените „e2fsck -fD“ на систему датотека.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
 msgstr ""
 "Употреба: %s [-c највећи_број_качења] [-e понашање_грешака] [-f] [-g група]\n"
-"\t[-i период[д|м|в]] [-j] [-J опције_дневника] [-l]\n"
+"\t[-i период[d|m|w]] [-j] [-J опције_дневника] [-l]\n"
 "\t[-m проценат_резервисаних_блокова] [-o [^]опције_качења[,...]]\n"
-"        [-p период_ммп_освежавања] [-r број_резервисаних_блокова] [-u "
-"корисник]\n"
-"        [-C број_качења] [-L натпис_волумена] [-M последњи_прикачени_дир]\n"
-"        [-O [^]функција[,...]] [-Q опције_квоте]\n"
-"\t[-E проширена_опција[,...]] [-T време_последње_провере] [-U УУИД]\n"
-"\t[-I нова_величина_и-чвора] [-z датотека_опозива] уређај\n"
-
-#: misc/tune2fs.c:218
+"\t[-r број_резервисаних_блокова] [-u корисник] [-C број_качења]\n"
+"\t[-L натпис_волумена] [-M последњи_качени_дир]\n"
+"\t[-O [^]функција[,...]] [-Q опције_квоте]\n"
+"\t[-E проширена_опција[,...]] [-T последње_време_провере] [-U УУИД]\n"
+"\t[-I нова_величина_и-чвора] [-z датотека_поништења] уређај\n"
+
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Нисам нашао суперблок дневника!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "приликом покушаја отварања спољног дневника"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "„%s“ није уређај дневника.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr ""
+"Суперблок дневника је оштећен, бр_корисника\n"
+"је превисок (%d).\n"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "Нисам нашао УУИД система датотека на уређају дневника.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6390,52 +6281,52 @@ msgstr ""
 "Не могу да нађем уређај дневника. НИЈЕ уклоњен\n"
 "Користите опцију „-f“ да уклоните недостајући уређај дневника.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "Дневник је уклоњен\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "приликом читања битмапа"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
 msgstr "приликом брисања и-чвора дневника"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "приликом писања и-чвора дневника"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(и после поново подигните систем!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr "Након што покренете „e2fsck“, покрените „resize2fs %s %s“"
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:489
 #, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr "Покрените „resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
 msgstr " -z „%s“"
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:495
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr "“ да укључите 64-битни режим.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:497
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr "“ да искључите 64-битни режим.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
@@ -6443,17 +6334,17 @@ msgstr ""
 "УПОЗОРЕЊЕ: Не могу да потврдим подршку језгра за „metadata_csum_seed“.\n"
 "  Ово захтева Линукс >= v4.4.\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Брисање „%s“ функције система датотека није подржано.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Постављање „%s“ функције система датотека није подржано.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6461,7 +6352,7 @@ msgstr ""
 "Функција „has_journal“ може бити очишћена само када је систем датотека\n"
 "откачен или прикачен само за читање.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6469,7 +6360,7 @@ msgstr ""
 "Заставица „needs_recovery“ је постављена. Покрените „e2fsck“ пре\n"
 "брисања заставице „has_journal“.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
@@ -6477,7 +6368,7 @@ msgstr ""
 "Постављање „sparse_super“ функције система датотека није подржано\n"
 "за системе датотека са укљученом функцијом „meta_bg“.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6487,14 +6378,12 @@ msgstr ""
 "бити постављена ако је систем датотека прикачен\n"
 "или само за читање.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1143
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
-msgstr ""
-"Заштита од вишеструког качења је била укључена са периодом освежавања од %d "
-"сек.\n"
+msgstr "Заштита од вишеструког качења је била укључена са периодом освежавања од %d сек.\n"
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6502,20 +6391,20 @@ msgstr ""
 "Функција заштите од вишеструког качења не може бити\n"
 "искључена ако је систем датотека само за читање.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 msgid "Error while reading bitmaps\n"
 msgstr "Грешка приликом читања битмапа\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr "Магични број у ММП блоку не одговара. очекиван: %x, стваран: %x\n"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1174
 msgid "while reading MMP block."
 msgstr "приликом читања ММП блока."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
@@ -6523,7 +6412,7 @@ msgstr ""
 "Брисање заставице „flex_bg“ ће довести до недоследности\n"
 "система датотека.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6531,62 +6420,46 @@ msgstr ""
 "Функција „huge_file“ може бити очишћена само када је систем датотека\n"
 "откачен или прикачен само за читање.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
 msgstr "Укључивање сума провере може потрајати."
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr "Не могу да укључим „metadata_csum“ на прикаченом систему датотека!\n"
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
-msgstr ""
-"Распони нису укључени.  Стаблу распона датотеке се може урадити сума "
-"провере, док мапама блокова не.  Не укључивање распона смањује покривање "
-"метаподатака током суме провере.  Поново покрените са „-O“ распоном да "
-"исправите.\n"
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
+msgstr "Распони нису укључени.  Стаблу распона датотеке се може урадити сума провере, док мапама блокова не.  Не укључивање распона смањује покривање метаподатака током суме провере.  Поново покрените са „-O“ распоном да исправите.\n"
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
-msgstr ""
-"Подршка 64-битног система датотека није укључена.  Већа поља обезбеђена овом "
-"функцијом укључују свеобухватну суму проевере.  Покрените „resize2fs -b“ да "
-"исправите.\n"
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
+msgstr "Подршка 64-битног система датотека није укључена.  Већа поља обезбеђена овом функцијом укључују свеобухватну суму проевере.  Покрените „resize2fs -b“ да исправите.\n"
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
 msgstr "Искључивање сума провере може потрајати."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr "Не могу да искључим „metadata_csum“ на прикаченом систему датотека!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr "Не могу да укључим 64-битни режим док је прикачен!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr "Не могу да искључим 64-битни режим док је прикачен!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
-msgstr ""
-"\n"
-"Упозорење: укључен је пројекат без квоте\n"
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
+msgstr "Не могу да омогућим функцију пројекта; величина и-чвора је премала.\n"
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6594,7 +6467,11 @@ msgstr ""
 "\n"
 "Упозорење: Опција „^quota“ превазилази аргументе „-Q“.\n"
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr "Не могу да омогућим функцију шифровања на системима датотека са укљученом функцијом кодирања.\n"
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
@@ -6602,21 +6479,23 @@ msgstr ""
 "Постављање функције „metadata_csum_seed“ је подржано само\n"
 "на системима датотека са укљученом функцијом „metadata_csum“.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
-"УУИД је измењен од укључивања функције „metadata_csum“.  Систем датотека "
-"мора бити откачен \n"
+"УУИД је измењен од укључивања функције „metadata_csum“.  Систем датотека мора бити откачен \n"
 "да би се безбедно преписали сви метаподаци како би одговарали новом УУИД-у.\n"
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr "Поновно израчунавање сума провере може потрајати."
+
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "Систем датотека већ има дневник.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, c-format
 msgid ""
 "\n"
@@ -6625,21 +6504,21 @@ msgstr ""
 "\n"
 "\tприликом покушаја отварања дневника на „%s“\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Стварам дневник на уређају „%s“: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "приликом додавања система датотека дневнику на „%s“"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "Стварам и-чвор дневника: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6647,32 +6526,36 @@ msgstr ""
 "\n"
 "\tприликом покушаја стварања датотеке дневника"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr "Не могу да омогућим квоту пројекта; величина и-чвора је премала.\n"
+
+#: misc/tune2fs.c:1588
 msgid "while initializing quota context in support library"
 msgstr "приликом покретања контекста квоте у библиотеци подршке"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1603
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr "приликом освежавања ограничења квоте (%d)"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1611
 #, c-format
 msgid "while writing quota file (%d)"
 msgstr "приликом писања датотеке квоте (%d)"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "while removing quota file (%d)"
 msgstr "приликом уклањања датотеке квоте (%d)"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6682,105 +6565,105 @@ msgstr ""
 "\n"
 "Наведене су лоше опције квоте.\n"
 "\n"
-"Доступне су следеће исправне опције квоте (прослеђују се раздвојене "
-"зарезом):\n"
+"Доступне су следеће исправне опције квоте (прослеђују се раздвојене зарезом):\n"
 "\t[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Не могу да обрадим одредник датума/времена: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "лош број качења — %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "лош назив гид-а/групе — %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "лош период — %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "лош опсег резервисаног блока — %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
 msgid "-o may only be specified once"
 msgstr "„-o“ се може навести само једном"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
 msgid "-O may only be specified once"
 msgstr "„-O“ се може навести само једном"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "лош број резервисаних блокова — %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "лош назив уид-а/корисника — %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "лоша величина и-чвора — %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Величина и-чвора мора бити степен двојке — %s"
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "период_ммп_освежавања је превелик: %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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] ""
-"Постављам период освежавања заштите од вишеструког качења на %lu секунду\n"
-msgstr[1] ""
-"Постављам период освежавања заштите од вишеструког качења на %lu секунде\n"
-msgstr[2] ""
-"Постављам период освежавања заштите од вишеструког качења на %lu секунди\n"
+msgid_plural "Setting multiple mount protection update interval to %lu seconds\n"
+msgstr[0] "Постављам период освежавања заштите од вишеструког качења на %lu секунду\n"
+msgstr[1] "Постављам период освежавања заштите од вишеструког качења на %lu секунде\n"
+msgstr[2] "Постављам период освежавања заштите од вишеструког качења на %lu секунди\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2078
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "Постављам зставицу грешке система датотека на присилну проверу истог.\n"
+
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Неисправан РАИД искорак: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Неисправна РАИД ширина траке: %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2126
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Неисправан хеш алгоритам: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2132
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Постављам основни хеш алгоритам на „%s“ (%d)\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2151
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6792,8 +6675,10 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -6801,43 +6686,44 @@ msgstr ""
 "Наведене су лоше опције.\n"
 "\n"
 "Проширене опције су раздвојене зарезима, и могу имати аргумент\n"
-"\tкоји је постављен знаком једнакости (=).\n"
+"\tкоји је подешен знаком једнакости (=).\n"
 "\n"
 "Исправне проширене опције су:\n"
 "\tclear_mmp\n"
 "\thash_alg=<хеш алгоритам>\n"
 "\tmount_opts=<проширене подразумеване опције качења>\n"
+"\tmmp_update_interval=<ммп период освежавања у секундама>\n"
 "\tstride=<РАИД величина комада по диску у блоковима>\n"
 "\tstripe_width=<РАИД дискови искорак*подаци у блоковима>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 msgid "Failed to read inode bitmap\n"
 msgstr "Нисам успео да прочитам битмапу и-чвора\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 msgid "Failed to read block bitmap\n"
 msgstr "Нисам успео да прочитам битмапу блока\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "блокови за премештање"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 msgid "Failed to allocate block bitmap when increasing inode size\n"
-msgstr ""
-"Нисам успео да доделим битмау блока приликом повећања величине и-чвора\n"
+msgstr "Нисам успео да доделим битмау блока приликом повећања величине и-чвора\n"
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2653
 msgid "Not enough space to increase inode size \n"
 msgstr "Нема довољно простора за повећање величине и-чвора \n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2658
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "Нисам успео да преместим блокове приликом промене величине и-чвора \n"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6845,7 +6731,15 @@ msgstr ""
 "Грешка промене величине и-чвора.\n"
 "Покрените „e2undo“ да поништите измене система датотека. \n"
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2900
+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"
+"„tune2fs -f -E clear_mmp {уређај}“\n"
+
+#: misc/tune2fs.c:2907
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
@@ -6854,74 +6748,96 @@ msgstr ""
 "Магија ММП блока је лоша. Покушајте да је поправите покретањем:\n"
 "„e2fsck -f %s“\n"
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2919
 msgid "Cannot modify a journal device.\n"
 msgstr "Не могу да изменим уређај дневника.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Величина и-чвора је већ %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 msgid "Shrinking inode size is not supported\n"
 msgstr "Скупљање величине и-чвора није подржано\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "Неисправна величина и-чвора %lu (најв. %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
 msgstr "Промена величине и-чворова може потрајати мало дуже."
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+"Упозорење: Дневник је неуредан. Можете заменити дневник као:\n"
+"\n"
+"\te2fsck -E само_дневник %s\n"
+"\n"
+"затим поново покренути ову наредбу.  У супротном, све начињене измене могу бити преписане\n"
+"опоравком дневника.\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Опорављам дневник.\n"
+
+#: misc/tune2fs.c:3028
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Постављам највећи број качења на %d\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3034
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Постављам текући број качења на %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Постављам понашање грешке на %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Постављам гид резервисаних блокова на %lu\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3049
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "период између провера је превелик (%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3056
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Постављам период између провера на %lu секунде\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "Постављам проценат резервисаних блокова на %g%% (%llu блока)\n"
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "број резервисаних блокова је превелик (%llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3076
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Постављам брј резервисаних блокова на %llu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3081
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6929,7 +6845,7 @@ msgstr ""
 "\n"
 "Систем датотека већ има оскудне суперблокове.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6939,7 +6855,7 @@ msgstr ""
 "Постављање заставице оскудног суперблока није подржано\n"
 "за системе датотека са укљученом функцијом „meta_bg“.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
@@ -6948,7 +6864,7 @@ msgstr ""
 "\n"
 "Заставица оскудног суперблока је постављена.  %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6956,58 +6872,49 @@ msgstr ""
 "\n"
 "Брисање заставице оскудног суперблока није подржано.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Постављам време последње провере система датотека на %s\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3113
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Постављам уид резервисаних блокова на %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3145
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr "Грешка коришћења „clear_mmp“-а. Мора се користити са „-f“\n"
 
-#: misc/tune2fs.c:3024
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"Функција квоте се може изменити само када је систем датотека откачен.\n"
+#: misc/tune2fs.c:3163
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
+msgstr "Функција квоте се може изменити само када је систем датотека откачен.\n"
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3181
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "Подешавање УУИД-а на овом систему датотека може потрајати."
+
+#: misc/tune2fs.c:3196
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr "УУИД се може изменити само када је систем датотека откачен.\n"
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
-msgstr ""
-"Ако користите само језгра новија од v4.4, покрените „tune2fs -O "
-"metadata_csum_seed“ и поново је покрените.\n"
-
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr ""
-"Подешавање УУИД-а на систему датотека са сумом провере може потрајати мало "
-"дуже."
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
+msgstr "Ако користите само језгра новија од v4.4, покрените „tune2fs -O metadata_csum_seed“ и поново је покрените.\n"
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "Неисправан УУИД запис\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 msgid "Need to update journal superblock.\n"
 msgstr "Потребно је освежавање суперблока дневника.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"Величина и-чвора се може изменити само када је систем датотека откачен.\n"
+msgstr "Величина и-чвора се може изменити само када је систем датотека откачен.\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3274
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -7015,85 +6922,61 @@ msgstr ""
 "Промена величине и-чвора није подржана за системе датотека са укљученом\n"
 "функцијом „flex_bg“.\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Постављам величину и-чвора %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 msgid "Failed to change inode size\n"
 msgstr "Нисам успео да изменим величину и-чвора\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Постављам величину искорака на %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Постављам ширину траке на %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3322
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Постављам проширене основне опције качења на „%s“\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-"Упозорење: Дневник је неуредан. Можете заменити дневник као:\n"
-"\n"
-"\te2fsck -E само_дневник %s\n"
-"\n"
-"затим поново покренути ову наредбу.  У супротном, све начињене измене могу "
-"бити преписане\n"
-"опоравком дневника.\n"
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr "Опорављам дневник.\n"
-
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr "<настављам>\n"
 
-#: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Да наставим ипак (или да сачекам %d сек.) ? (д,н) "
+#: misc/util.c:105
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "Да наставим (или да сачекам %d сек.) ? (y,N = да,не) "
 
-#: misc/util.c:108
-#, fuzzy
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
-msgstr "Да наставим ипак? (д,н) "
+msgstr "Да наставим ипак? (y,N = да,не) "
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "„mke2fs“ је ипак присиљено.  Надам се да је „/etc/mtab“ неисправно.\n"
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr "неће овде направити „%s“!\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr "„mke2fs“ је ипак присиљено.\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr "Не могу да доделим меморију за обраду опција дневника!\n"
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
@@ -7102,7 +6985,7 @@ msgstr ""
 "\n"
 "Не могу да нађем уређај дневника који одговара „%s“\n"
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -7122,18 +7005,17 @@ msgstr ""
 "Наведене су лоше опције дневника.\n"
 "\n"
 "Опције дневника су раздвојене зарезима, и могу имати аргумент\n"
-"\tкоји је постављен знаком једнакости „=“.\n"
+"\tкоји је подешен знаком једнакости „=“.\n"
 "\n"
 "Исправне опције дневника су:\n"
 "\tsize=<величина дневника у мегабајтима>\n"
 "\tdevice=<уређај дневника>\n"
 "\tlocation=<место дневника>\n"
 "\n"
-"Величина дневника мора бити између 1024 и 10240000 блокова система "
-"датотека.\n"
+"Величина дневника мора бити између 1024 и 10240000 блокова система датотека.\n"
 "\n"
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
@@ -7141,7 +7023,7 @@ msgstr ""
 "\n"
 "Систем датотека је премали за дневник\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -7152,7 +7034,7 @@ msgstr ""
 "Затражена величина дневника је %d блока; мора бити\n"
 "између 1024 и 10240000 блокова.  Прекидам.\n"
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
@@ -7160,21 +7042,19 @@ msgstr ""
 "\n"
 "Величина дневника је превелика за систем датотека.\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
 "%g days, whichever comes first.  Use tune2fs -c or -i to override.\n"
 msgstr ""
-"Систем датотека ће бити самостално проверен након %d качења или након %g "
-"дана,\n"
+"Систем датотека ће бити самостално проверен након %d качења или након %g дана,\n"
 "до чега прво дође.  Користите „tune2fs -c“ или „-i“ за прескакање.\n"
 
 #: misc/uuidd.c:49
 #, c-format
 msgid "Usage: %s [-d] [-p pidfile] [-s socketpath] [-T timeout]\n"
-msgstr ""
-"Употреба: %s [-d] [-p датотека_пид-а] [-s путања_утичнице] [-T време]\n"
+msgstr "Употреба: %s [-d] [-p датотека_пид-а] [-s путања_утичнице] [-T време]\n"
 
 #: misc/uuidd.c:51
 #, c-format
@@ -7318,44 +7198,42 @@ msgstr "#\tБрој=%llu, Величина=%llu, Курзор=%llu, Поређа
 #: resize/main.c:49
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
-"Употреба: %s [-d заставице_прочишћавања] [-f] [-F] [-M] [-P] [-p] уређај [-"
-"b|-s|нова_величина] [-z датотека_опозива]\n"
+"Употреба: %s [-d заставице_прочишћавања] [-f] [-F] [-M] [-P] [-p] уређај [-b|-s|нова_величина] [-S RAID-stride] [-z датотека_опозива]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Проширујем табелу и-чвора"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Премештам блокове"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Прегледам табелу и-чворова"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Освежавам упуте и-чвора"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Премештам табелу и-чворова"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Непознат пролаз?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Почетни пролаз %d (најв. = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7363,23 +7241,21 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Промена величине „bigalloc“ система датотека није у потпуности испробана.  "
-"Наставите на\n"
-"сопствену одговорност!  Користите опцију „force“ ако ипак желите да "
-"наставите.\n"
+"Промена величине „bigalloc“ система датотека није у потпуности испробана.  Наставите на\n"
+"сопствену одговорност!  Користите опцију „force“ ако ипак желите да наставите.\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "приликом отварања „%s“"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "приликом добављања података стања за „%s“"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7388,30 +7264,30 @@ msgstr ""
 "Прво покрените „e2fsck -f %s“.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Процењена најмања величина система датотека: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Неисправна нова величина: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "Нова величина је превише велика да би била изражена са 32 бита\n"
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Нова величина је мања од најмање (%llu)\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Неисправна дужина искорака"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7422,37 +7298,28 @@ msgstr ""
 "Затражили сте нову величину од %llu блока.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr "Не могу да подесим и да поништим 64-битну функцију.\n"
 
-#: resize/main.c:569
-#, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
-msgstr ""
-"Не могу да изменим 64-битну функцију на систему датотека који је већи од "
-"2^32 блокова.\n"
-
 #: resize/main.c:575
 #, c-format
-msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
-msgstr ""
-"Не могу да изменим 64-битну функцију док је систем датотека прикачен.\n"
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
+msgstr "Не могу да изменим 64-битну функцију на систему датотека који је већи од 2^32 блокова.\n"
 
 #: resize/main.c:581
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
-msgstr ""
-"Укључите функцију распона са „tune2fs“ пре него што укључите 64-битну "
-"функцију.\n"
+msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
+msgstr "Не могу да изменим 64-битну функцију док је систем датотека прикачен.\n"
 
 #: resize/main.c:587
 #, c-format
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
+msgstr "Укључите функцију распона са „tune2fs“ пре него што укључите 64-битну функцију.\n"
+
+#: resize/main.c:593
+#, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
@@ -7460,37 +7327,37 @@ msgstr ""
 "Систем датотека је већ од %llu блока (%dk). Ништа за урадити!\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "Систем датотека је већ 64-битни.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "Систем датотека је већ 32-битни.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "Претварам систем датотека на 64-битни.\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "Претварам систем датотека на 32-битни.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr "Мењам величину система датотека „%s“-а на %llu (%dk) блока.\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "приликом покушаја промене величине „%s“"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7499,7 +7366,7 @@ msgstr ""
 "Покрените „e2fsck -fy %s“ да поправите систем датотека\n"
 "након прекинуте радње промене величине.\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7508,7 +7375,7 @@ msgstr ""
 "Систем датотека на „%s“ је сада величине %llu блока (%dk).\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "приликом покушаја скраћивања „%s“"
@@ -7520,9 +7387,7 @@ msgstr "језгро не подржава промену величине са
 #: resize/online.c:86
 #, c-format
 msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
-msgstr ""
-"Систем датотека „%s“ је прикачен на „%s“; потребна је промена величине на "
-"мрежи\n"
+msgstr "Систем датотека „%s“ је прикачен на „%s“; потребна је промена величине на мрежи\n"
 
 #: resize/online.c:90
 msgid "On-line shrinking not supported"
@@ -7571,57 +7436,48 @@ msgstr "Обављам промену величине на мрежи за „%
 msgid "While trying to extend the last group"
 msgstr "Када сам покушао да раширим последњу групу"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Када сам покушао да додам групу бр. %d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
-msgid ""
-"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
-"this system.\n"
-msgstr ""
-"Систем датотека за „%s“ је прикачен на „%s“, а промена величине није "
-"подржана на том систему.\n"
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Систем датотека за „%s“ је прикачен на „%s“, а промена величине није подржана на том систему.\n"
 
 #: resize/resize2fs.c:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "број и-чворова (%llu) мора бити мањи од %u"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "број и-чворова (%llu) мора бити мањи од %u\n"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "резервисани блокови"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "блокови метаподатака"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr "нови мета блокови"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
-msgstr ""
-"Ово није требало да се деси! Нема суперблока у последњој „super_sparse“ "
-"групи блока?\n"
+msgstr "Ово није требало да се деси! Нема суперблока у последњој „super_sparse“ групи блока?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
-msgstr ""
-"Ово није требало да се деси! Неочекивани стари описник (old_desc) у "
-"„super_sparse“ групи блока?\n"
+msgstr "Ово није требало да се деси! Неочекивани стари описник (old_desc) у „super_sparse“ групи блока?\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Ово није требало да се деси: промена величине и-чвора је оштећена!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.43.4-WIP"
-msgstr "„EXT2FS“ библиотека издања 1.43"
+msgid "EXT2FS Library version 1.45.3"
+msgstr "„EXT2FS“ библиотека издања 1.45.3"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -7825,13 +7681,11 @@ msgstr "Неисправан број блока је прослеђен „ext2
 
 #: lib/ext2fs/ext2_err.c:62
 msgid "Attempt to fudge end of block bitmap past the real end"
-msgstr ""
-"Покушај да привидно дотерам крај битмапе блокова је прошао стварни крај"
+msgstr "Покушај да привидно дотерам крај битмапе блокова је прошао стварни крај"
 
 #: lib/ext2fs/ext2_err.c:63
 msgid "Attempt to fudge end of inode bitmap past the real end"
-msgstr ""
-"Покушај да привидно дотерам крај битмапе и-чворова је прошао стварни крај"
+msgstr "Покушај да привидно дотерам крај битмапе и-чворова је прошао стварни крај"
 
 #: lib/ext2fs/ext2_err.c:64
 msgid "Illegal indirect block found"
@@ -7871,8 +7725,7 @@ msgstr "Неисправан општи број бита је прослеђе
 
 #: lib/ext2fs/ext2_err.c:73
 msgid "Illegal generic bit number passed to ext2fs_unmark_generic_bitmap"
-msgstr ""
-"Неисправан општи број бита је прослеђен „ext2fs_unmark_generic_bitmap“-и"
+msgstr "Неисправан општи број бита је прослеђен „ext2fs_unmark_generic_bitmap“-и"
 
 #: lib/ext2fs/ext2_err.c:74
 msgid "Illegal generic bit number passed to ext2fs_test_generic_bitmap"
@@ -8004,8 +7857,7 @@ msgstr "Промена величине и-чвора је оштећена"
 
 #: lib/ext2fs/ext2_err.c:106
 msgid "Tried to set block bmap with missing indirect block"
-msgstr ""
-"Покушао сам да поставим битмапу блока са недостајућим индиректним блоком"
+msgstr "Покушао сам да поставим битмапу блока са недостајућим индиректним блоком"
 
 #: lib/ext2fs/ext2_err.c:107
 msgid "TDB: Success"
@@ -8053,8 +7905,7 @@ msgstr "Списак блока директоријума „ext2fs“-а је
 
 #: lib/ext2fs/ext2_err.c:118
 msgid "Attempt to modify a block mapping via a read-only block iterator"
-msgstr ""
-"Покушавам да изменим мапирање блока путем приступника блока само за читање"
+msgstr "Покушавам да изменим мапирање блока путем приступника блока само за читање"
 
 #: lib/ext2fs/ext2_err.c:119
 msgid "Wrong magic number for ext4 extent saved path"
@@ -8170,9 +8021,7 @@ msgstr "УИ канал не подржава 64-битне бројеве бл
 
 #: lib/ext2fs/ext2_err.c:147
 msgid "Can't check if filesystem is mounted due to missing mtab file"
-msgstr ""
-"Не могу да проверим да ли је систем датотека прикачен зато што недостаје "
-"мтаб датотека"
+msgstr "Не могу да проверим да ли је систем датотека прикачен зато што недостаје мтаб датотека"
 
 #: lib/ext2fs/ext2_err.c:148
 msgid "Filesystem too large to use legacy bitmaps"
@@ -8187,8 +8036,8 @@ msgid "MMP: device currently active"
 msgstr "ММП: уређај је тренутно активан"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
-msgstr "ММП: „fsck“ је покренут"
+msgid "MMP: e2fsck being run"
+msgstr "ММП: „e2fsck“ је покренут"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
@@ -8243,8 +8092,8 @@ msgid "Unknown checksum algorithm"
 msgstr "Алгоритам суме провере није познат"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr "Сума провере ММП блока не одговара ММП блоку"
+msgid "MMP block checksum does not match"
+msgstr "Сума провере ММП блока не одговара"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
@@ -8256,8 +8105,7 @@ msgstr "Сума провере битмапе блока не одговара
 
 #: lib/ext2fs/ext2_err.c:168
 msgid "Cannot iterate data blocks of an inode containing inline data"
-msgstr ""
-"Не могу да понављам блокове података и-чвора који садржи уграђене податаке"
+msgstr "Не могу да понављам блокове података и-чвора који садржи уграђене податаке"
 
 #: lib/ext2fs/ext2_err.c:169
 msgid "Extended attribute has an invalid name length"
@@ -8336,9 +8184,12 @@ msgid "The journal superblock is corrupt"
 msgstr "Суперблок дневника је оштећен"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "Промена величине и-чвора је оштећена"
+msgstr "И-чвор је оштећен"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr "И-чвор који садржи вредност проширеног атрибута је оштећен"
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8532,13 +8383,104 @@ msgstr "„%s“ садржи „%s“ систем датотека\n"
 msgid "%s contains `%s' data\n"
 msgstr "„%s“ садржи податке „%s“\n"
 
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "„i_dir_acl“ за и-чвор „%i“ (%Q) је „%Id“, треба бити нула.\n"
+
+#~ msgid "while opening directory \"%s\""
+#~ msgstr "приликом отварања директоријума „%s“"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** Откривене су грешке суме провере у систему датотека!  Сада покрените „e2fsck“!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** Откривене су грешке суме провере у битмапама!  Сада покрените „e2fsck“!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %s: грешка читања битмапа: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Упозорење, имам проблема са писањем суперблокова.\n"
+
+#~ msgid "Journal features:        "
+#~ msgstr "Функције дневника:        "
+
+#~ msgid "Journal size:             "
+#~ msgstr "Величина дневника:             "
+
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "Дужина дневника:      %u\n"
+#~ "Низ дневника:         0x%08x\n"
+#~ "Почетак дневника:     %u\n"
+
+#~ msgid "Journal checksum type:    crc32\n"
+#~ msgstr "Врста суме провере дневника:    crc32\n"
+
+#~ msgid ""
+#~ "Journal checksum type:    %s\n"
+#~ "Journal checksum:         0x%08x\n"
+#~ msgstr ""
+#~ "Врста суме провере дневника:    %s\n"
+#~ "Сума провере дневника:          0x%08x\n"
+
+#~ msgid "Journal errno:            %d\n"
+#~ msgstr "Број грешке дневника:            %d\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Величина блока дневника:  %u\n"
+#~ "Дужина дневника:          %u\n"
+#~ "Први блок дневника:       %u\n"
+#~ "Низ дневника:             0x%08x\n"
+#~ "Почетак дневника:         %u\n"
+#~ "Број корисника дневника:  %u\n"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "Корисници дневника:       %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning: enabled project without quota together\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Упозорење: укључен је пројекат без квоте\n"
+
 #~ msgid "Please run e2fsck on the filesystem.\n"
 #~ msgstr "Покрените „e2fsck“ на систему датотека.\n"
 
 #~ msgid "@i %i has @cion flag set on @f without @cion support.  "
-#~ msgstr ""
-#~ "и-чвор „%i“ има постављену заставицу сажимања на систему датотека без "
-#~ "подршке сажимања.  "
+#~ msgstr "и-чвор „%i“ има постављену заставицу сажимања на систему датотека без подршке сажимања.  "
 
 #~ msgid "@A @a @b %b.  "
 #~ msgstr "грешка доделе блока „%b“ проширеног атрибута.  "
index 9735947..1e79a6d 100644 (file)
Binary files a/po/sv.gmo and b/po/sv.gmo differ
index 4eec251..d863113 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,10 +1,11 @@
 # Swedish messages for e2fsprogs.
-# Copyright © 2003, 2005, 2006, 2008, 2009, 2010, 2011, 2012, 2014, 2016 Theodore Tso (msgids)
+# Copyright © 2003, 2005, 2006, 2008, 2009, 2010, 2011, 2012, 2014, 2016, 2017, 2018, 2019 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, 2014, 2016.
+# Göran Uddeborg <goeran@uddeborg.se>, 2003, 2005, 2006, 2008, 2009, 2010, 2011, 2012, 2014, 2016, 2017, 2018, 2019.
+#
+# $Revision: 1.103 $
 #
-# $Revision: 1.87 $
 #. 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,
 #. there is an @-expansion, where strings like "@i" are expanded to
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -49,7 +57,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.43.1\n"
+"Project-Id-Version: e2fsprogs 1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2016-07-14 13:04+0200\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2019-07-20 16:33+0200\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=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Dåligt block %u utanför giltigt intervall; ignoreras.\n"
@@ -94,11 +103,12 @@ msgstr "vid rimlighetskontroll av inoden för dåliga block"
 msgid "while reading the bad blocks inode"
 msgstr "vid läsning av inoden för dåliga block"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "vid försök att öppna %s"
@@ -108,7 +118,7 @@ msgstr "vid försök att öppna %s"
 msgid "while trying popen '%s'"
 msgstr "vid försök att använda popen ”%s”"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "vid läsning i listan över dåliga block från fil"
 
@@ -121,6 +131,10 @@ msgstr "vid uppdatering av inoden för dåliga block"
 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"
 
+#: e2fsck/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "när dir_info-tdbfilen frigjordes"
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -196,12 +210,12 @@ msgstr "BLKFLSBUF-ioctl stöds inte!  Kan inte tömma buffertar.\n"
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Användning: %s [-F] [-I inodbuffertblock] enhet\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "vid öppning av %s för utskrivning"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "vid försök att skriva ut %s"
@@ -211,11 +225,11 @@ msgstr "vid försök att skriva ut %s"
 msgid "while trying to open '%s'"
 msgstr "vid försök att öppna ”%s”"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr "vid öppning av inodsökning"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr "när nästa inod hämtades"
 
@@ -224,31 +238,31 @@ msgstr "när nästa inod hämtades"
 msgid "%u inodes scanned.\n"
 msgstr "%u inoder genomsökta.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "läser journalsuperblock\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: inget giltigt journalsuperblock hittades\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: journalen för kort\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: återhämtar journalen\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: återhämtar inte journalen i skrivskyddat läge\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "vid försök att återöppna %s"
@@ -269,329 +283,350 @@ msgstr "vid försök att återöppna %s"
 # 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
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "autökat attribut"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Afel vid allokering"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bblock"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bbitkarta"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "ckomprimera"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Ckonflikt med något annat fs @b"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "dkatalog"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Draderad"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "epost"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "Epost ”%Dn” i %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "ffilsystem"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fför inod %i (%Q) är"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "ggrupp"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "hHTREE katalog-inod"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "iinod"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Iotillåten"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jjournal"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Lär en länk"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mflerfaldigt ianspråkstagna"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "nogiltig"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oföräldralös"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pproblem i"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qkvot"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "rrotinod"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "sskulle varit"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssuperblock"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "ulös"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "venhet"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xutsträckning"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "znollängds"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<Inod noll>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<Inoden för dåliga block>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<Inoden för användarkvoter>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<Inoden för gruppkvoter>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<Uppstartsprograminoden>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<Inoden för återhämtning av borttagna kataloger>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<Gruppidentifierarinoden>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<Journalinoden>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Reserverad inod 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Reserverad inod 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "normal fil"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "katalog"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "teckenenhet"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "blockenhet"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "namngivet rör"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "symbolisk länk"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "uttag (socket)"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "okänd filtyp med typ 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "indirekt block"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "dubbelt indirekt block"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "trippelt indirekt block"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "översättningsblock"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "block nr."
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "användare"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "grupp"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr "projekt"
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "okänd kvottyp"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "karta över flerfaldigt i anspråkstagna inoder"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, 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"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "återvände från clone_file_block"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, 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"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, 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"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr "vid hashning av post med e_value_inum = %u"
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 msgid "reading directory block"
 msgstr "läser katalogblock"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 msgid "in-use inode map"
 msgstr "karta över använda inoder"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 msgid "directory inode map"
 msgstr "kataloginodskarta"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 msgid "regular file inode map"
 msgstr "inodskarta över reguljära filer"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr "karta över använda block"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1263
 msgid "metadata block map"
 msgstr "blockkarta över metadata"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 msgid "opening inode scan"
 msgstr "öppnar inodsökning"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr "hämtar nästa inod från sökning"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 msgid "Pass 1"
 msgstr "Pass 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "läser indirektblock för inod %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 msgid "bad inode map"
 msgstr "karta över dåliga inoder"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 msgid "inode in bad block map"
 msgstr "inod i karta över dåliga block"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 msgid "imagic inode map"
 msgstr "imagic inodskarta"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr "karta över flerfaldigt i anspråkstagna block"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr "karta över block för utökade attribut"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, 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"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 msgid "block bitmap"
 msgstr "blockbitkarta"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 msgid "inode bitmap"
 msgstr "inodbitkarta"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 msgid "inode table"
 msgstr "inodstabell"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Pass 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 msgid "Can not continue."
 msgstr "Kan inte fortsätta."
 
@@ -611,195 +646,203 @@ msgstr "Pass 3"
 msgid "inode loop detection bitmap"
 msgstr "bitkarta för upptäckt av inodsslingor"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Pass 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Pass 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr "check_inode_bitmap_checksum: Minnesallokeringsfel"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr "check_block_bitmap_checksum: Minnesallokeringsfel"
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 msgid "(no prompt)"
 msgstr "(ingen prompt)"
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 msgid "Fix"
 msgstr "Fixa"
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:54
 msgid "Clear"
 msgstr "Töm"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr "Relokera"
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
 msgid "Allocate"
 msgstr "Allokera"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 msgid "Expand"
 msgstr "Expandera"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 msgid "Connect to /lost+found"
 msgstr "Koppla till /lost+found"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 msgid "Create"
 msgstr "Skapa"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr "Rädda"
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
 msgid "Truncate"
 msgstr "Kapa"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 msgid "Clear inode"
 msgstr "Töm inod"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 msgid "Abort"
 msgstr "Avbryt"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 msgid "Split"
 msgstr "Dela"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 msgid "Continue"
 msgstr "Fortsätt"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr "Klona flerfaldigt ianspråkstagna block"
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 msgid "Delete file"
 msgstr "Ta bort fil"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 msgid "Suppress messages"
 msgstr "Undertryck meddelanden"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
 msgid "Unlink"
 msgstr "Avlänka"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 msgid "Clear HTree index"
 msgstr "Töm HTree-index"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 msgid "Recreate"
 msgstr "Återskapa"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr "Optimera"
+
+#: e2fsck/problem.c:81
 msgid "(NONE)"
 msgstr "(INGET)"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 msgid "FIXED"
 msgstr "FIXAT"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 msgid "CLEARED"
 msgstr "TÖMD"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr "RELOKERAT"
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 msgid "ALLOCATED"
 msgstr "ALLOKERAT"
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr "EXPANDERAD"
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr "ÅTERKOPPLAD"
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 msgid "CREATED"
 msgstr "SKAPAD"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr "RÄDDAD"
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
 msgid "TRUNCATED"
 msgstr "KAPAT"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 msgid "INODE CLEARED"
 msgstr "INOD TÖMD"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 msgid "ABORTED"
 msgstr "AVBRUTET"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 msgid "SPLIT"
 msgstr "DELAD"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr "FORTSÄTTER"
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr "FLERFALDIG IANSPRÅKSTAGNA BLOCK KLONADE"
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 msgid "FILE DELETED"
 msgstr "FIL BORTTAGEN"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr "UNDERTRYCKT"
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr "AVLÄNKAD"
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 msgid "HTREE INDEX CLEARED"
 msgstr "HTREE-INDEX TÖMT"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 msgid "WILL RECREATE"
 msgstr "KOMMER ÅTERSKAPA"
 
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr "KOMMER OPTIMERA"
+
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:115
 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"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:119
 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"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -816,7 +859,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -830,10 +873,8 @@ msgid ""
 msgstr ""
 "\n"
 "Superblocket kunde inte läsas eller beskriver inte ett giltigt\n"
-"ext2/ext3/ext4-filsystem.  Om enheten är giltig och den verkligen innehåller "
-"ett\n"
-"ext2/ext3/ext4-filsystem (och inte växlingsutrymme eller ufs eller något "
-"annat)\n"
+"ext2/ext3/ext4-filsystem.  Om enheten är giltig och den verkligen innehåller ett\n"
+"ext2/ext3/ext4-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 8193 <enhet>\n"
@@ -844,7 +885,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -857,7 +898,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -868,18 +909,18 @@ msgstr ""
 "blockstorleken.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\n"
 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:155
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %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
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -887,8 +928,8 @@ msgstr ""
 "filsystemet hade ingen UUID; genererar en.\n"
 "\n"
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -904,48 +945,48 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Skada hittad i superblock.  (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:186
+#, no-c-format
 msgid "Error determining size of the physical @v: %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:184
+#: e2fsck/problem.c:191
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "inodsantal i superblock är %i, skall vara %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd stödjer inte funktionen filtyp.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:201
+#, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "Superblock har en ogiltig journal (inod %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr "Extern journal har flera filsystemsanvändare (stödjs ej).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:211
 msgid "Can't find external @j\n"
 msgstr "Kan inte hitta extern journal\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 msgid "External @j has bad @S\n"
 msgstr "Extern journal har dåligt superblock\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 msgid "External @j does not support this @f\n"
 msgstr "Extern journal stödjer inte detta filsystem\n"
 
@@ -953,11 +994,10 @@ msgstr "Extern journal stödjer inte detta filsystem\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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"
@@ -966,84 +1006,81 @@ msgstr ""
 "Det är också möjligt att journalsuperblocket är trasigt.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:235
 msgid "@j @S is corrupt.\n"
 msgstr "Journalsuperblock är trasigt.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "Superblocksflaggan has_journal är nollställd, men en journal finns.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 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"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:250
 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:246
+#: e2fsck/problem.c:255
 msgid "Clear @j"
 msgstr "Töm journal"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 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:256
+#: e2fsck/problem.c:265
 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:261
+#: e2fsck/problem.c:270
 msgid "@I %B (%b) found in @o @i %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:266
+#: e2fsck/problem.c:275
 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"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:281
+#, no-c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "Ogiltig föräldralös inod %i i superblock.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:287
+#, no-c-format
 msgid "@I @i %i in @o @i list.\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:281
+#: e2fsck/problem.c:292
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr "Journalsuperblock har okänd skrivskyddad funktionsflagga satt.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:297
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr "Journalsuperblock har okänd inkompatibel funktionsflagga satt.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Journalversion stöds inte av denna e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:308
+#, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1053,8 +1090,8 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:314
+#, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1065,7 +1102,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1076,18 +1113,18 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 msgid "Run @j anyway"
 msgstr "Kör journal ändå"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 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"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1097,7 +1134,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1106,19 +1143,18 @@ msgstr ""
 "är %N; skulle varit noll.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 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:338
+#: e2fsck/problem.c:352
 msgid "Resize @i not valid.  "
 msgstr "Storleksändringsinod är inte giltig.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1128,7 +1164,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1137,14 +1173,14 @@ msgstr ""
 "\tnu = %T) är i framtiden.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:368
+#, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "Superblocktips för externt superblock borde vara %X."
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1153,44 +1189,42 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 msgid "@g descriptor %g checksum is %04x, should be %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:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-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:372
+#: e2fsck/problem.c:389
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr "gruppbeskrivare %g har ogiltigt antal oanvända inoder %b.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:394
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Sista gruppblockbitkarta oinitierad.  "
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "Journaltransaktion %i var trasig, återuppspelningen avbröts.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:405
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "Flaggan test_fs är satt (och ext4 är tillgängligt).  "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "Superblockets senaste monteringstid ligger i framtiden.\n"
 "\t(med mindre än en dag, förmodligen för att hårdvaruklockan går fel)\n"
@@ -1198,234 +1232,239 @@ msgstr ""
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "Superblockets skrevs senast i framtiden.\n"
 "\t(med mindre än en dag, förmodligen för att hårdvaruklockan går fel)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr "Kontrollsumma för en eller flera blockgruppbeskrivare är ogiltig.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %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:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Sätter antalet fria block till %c (var %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr ""
-"Gör kvotinod %i (%Q) dold.\n"
-"\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "Döljer kvotinod %i för %U (%Q).\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 msgid "@S has invalid MMP block.  "
 msgstr "superblocket har ett felaktigt MMP-block.  "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
 msgid "@S has invalid MMP magic.  "
 msgstr "superblocket har ogiltigt MMP-magiskt tal.  "
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:453
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2: %m\n"
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:459
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
-msgstr ""
-"superblockets metadata_csum ersätter uninit_bg; båda funktionsbitarna kan "
-"inte vara satta samtidigt."
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "superblockets metadata_csum ersätter uninit_bg; båda funktionsbitarna kan inte vara satta samtidigt."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "Kontrollsumman för super-MMP-blocket stämmer inte med MMP-blocket.  "
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+msgid "@S MMP @b checksum does not match.  "
+msgstr "Kontrollsumman för super-MMP-blocket stämmer inte.  "
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
-msgstr ""
-"superblock på 64-bitars filsystem behöver utsträckningar för att komma åt "
-"hela disken.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
+msgstr "superblock på 64-bitars filsystem behöver utsträckningar för att komma åt hela disken.  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "First_meta_bg är för stort.  (%N, maxvärde %g).  "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:486
 msgid "External @j @S checksum does not match @S.  "
-msgstr ""
-"Extern kontrollsumma för journalsuperblock stämmer inte med superblocket.  "
+msgstr "Extern kontrollsumma för journalsuperblock stämmer inte med superblocket.  "
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
-msgstr ""
-"superblockets metadata_csum_seed är inte nödvändigt utan metadata_csum."
+msgstr "superblockets metadata_csum_seed är inte nödvändigt utan metadata_csum."
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr "Fel vid initiering av kvotkontext i stödbiblioteket: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Felaktig krävd extra isize i superblocket (%N).  "
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Felaktig önskad extra isize i superblocket (%N).  "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "Ogiltig kvotinod %i för %U.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr "Superblocket skulle ha för många inoder (%N).\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
+"Funktionerna resize_inode och meta_bg är aktiverade.  Dessa funktioner\n"
+"är inte kompatibla.  Storleksändingsinod skall avaktiveras.  "
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Pass 1: Kontrollerar inoder, block och storlekar\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 msgid "@r is not a @d.  "
 msgstr "Rotinod är inte en katalog.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "rotinod har dtid satt (förmodligen på grund av gammal mke2fs).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:544
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Reserverad inod %i (%Q) har ogiltiga rättigheter.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:550
+#, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "Raderad inod %i har dtid noll.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "Inod %i används, men har dtid satt.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:562
+#, no-c-format
 msgid "@i %i is a @z @d.  "
 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:528
+#: e2fsck/problem.c:567
 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:533
+#: e2fsck/problem.c:572
 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:538
+#: e2fsck/problem.c:577
 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:543
+#: e2fsck/problem.c:582
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "Grupp %g:s blockbitkarta (%b) år felaktig.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "Grupp %g:s inodbitkarta (%b) är felaktig.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "Inod %i, i_storlek är %Is, skulle varit %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "Inod %i, i_block är %Ib, skulle varit %N.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in @i %i.  "
 msgstr "Ogiltigt %B (%b) i inod %i.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B (%b) överlappar filsystemmetadata i inod %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:613
+#, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "Inod %i har ogiltiga block.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "För många ogiltiga block i inod %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "Ogiltigt %B (%b) i inod för felaktiga block.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "Inod för felaktiga block har ogiltiga block.  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Duplicerat eller felaktigt block används!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 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
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1439,7 +1478,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1450,7 +1489,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1461,129 +1500,122 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 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"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:667
 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:632
+#: e2fsck/problem.c:673
 msgid "Warning: Group %g's @S (%b) is bad.\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:637
+#: e2fsck/problem.c:679
 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:643
+#: e2fsck/problem.c:685
 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:649
+#: e2fsck/problem.c:691
 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:654
-#, c-format
+#: e2fsck/problem.c:697
+#, no-c-format
 msgid "@A @b buffer for relocating %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:659
+#: e2fsck/problem.c:702
 msgid "Relocating @g %g's %s from %b to %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:664
-#, c-format
+#: e2fsck/problem.c:708
+#, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Relokerar grupp %g:s %s till %c ...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 msgid "Warning: could not read @b %b of %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:674
+#: e2fsck/problem.c:718
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Varning: kunde inte skriva block %b av %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
 msgstr "Fel vid allokering av inodbitkarta (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
 msgstr "Fel vid allokering av blockbitkarta (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:734
+#, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "Fel vid allokering av icount-länkinformation: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:740
+#, no-c-format
 msgid "@A @d @b array: %m\n"
 msgstr "Fel vid allokering av katalogblockvektor: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:746
+#, no-c-format
 msgid "Error while scanning @is (%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:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %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:709
+#: e2fsck/problem.c:757
 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"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:762
 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:720
-#, c-format
+#: e2fsck/problem.c:769
+#, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Fel vid läsning av inod %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "Inod %i har flaggan imagic satt.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
@@ -1592,143 +1624,143 @@ msgstr ""
 "oföränderlig eller endast tillägg satt."
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Specialinod (enhet/uttag (socket)/fifo) %i har nollskild storlek.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
 msgid "@j @i is not in use, but contains data.  "
 msgstr "Journalinod används, men innehåller data.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 msgid "@j is not regular file.  "
 msgstr "Journal är inte en vanlig fil.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:812
+#, no-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.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:818
 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.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:823
 msgid "@A refcount structure (%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:775
+#: e2fsck/problem.c:828
 msgid "Error reading @a @b %b for @i %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:780
+#: e2fsck/problem.c:833
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "Inod %i har ett felaktigt utökade attribut-block %b.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 msgid "Error reading @a @b %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:790
+#: e2fsck/problem.c:843
 msgid "@a @b %b has reference count %r, @s %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:795
+#: e2fsck/problem.c:848
 msgid "Error writing @a @b %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:800
+#: e2fsck/problem.c:853
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "Utökade attribut-block %b har h_blocks > 1.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:858
 msgid "@A @a region allocation structure.  "
 msgstr "Fel vid allokering utökade attributs regionallokeringsstruktur.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "Utökade attribut-block %b är trasigt (allokeringskollision).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:868
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "Utökade attribut-block %b är trasigt (ogiltigt namn).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "Utökade attribut-block %b är trasigt (ogiltigt värde).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:879
+#, no-c-format
 msgid "@i %i is too big.  "
 msgstr "Inod %i är för stor.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B (%b) får katalog att bli för stor.  "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr "%B (%b) får fil att bli för stor.  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
 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:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-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"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-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"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:911
+#, no-c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "HTREE kataloginod %i har en ogiltig rotnod.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:916
 msgid "@h %i has an unsupported hash version (%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:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-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"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:927
 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"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1737,57 +1769,55 @@ msgstr ""
 "med filsystemsmetadata.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Misslyckades att återskapa storleksändringsinod: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\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:890
+#: e2fsck/problem.c:950
 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"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:955
 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"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:960
 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:905
+#: e2fsck/problem.c:965
 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"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:970
 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"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:975
 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"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
-#, c-format
+#: e2fsck/problem.c:981
+#, no-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"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1797,7 +1827,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1807,7 +1837,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1816,35 +1846,31 @@ msgstr ""
 "\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:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-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:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-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:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-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"
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 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
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1853,39 +1879,39 @@ msgstr ""
 "\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:965
+#: e2fsck/problem.c:1030
 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"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1036
+#, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Fel vid konvertering av blockbitkarta över subkluster: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not regular file.  "
 msgstr "Kvotinoden är inte en vanlig fil.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
 msgid "@q @i is not in use, but contains data.  "
 msgstr "Kvotinoden används inte, men innehåller data.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 msgid "@q @i is visible to the user.  "
 msgstr "Kvotinoden är synlig för användaren.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 msgid "The bad @b @i looks @n.  "
 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
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1894,45 +1920,41 @@ msgstr ""
 "\t(ogiltigt logiskt block %c, fysiskt block %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, c-format
+#: e2fsck/problem.c:1067
+#, no-c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "Inod %i verkar innehålla skräp.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
-msgstr ""
-"Inod %i klarar kontroller, men kontrollsumman stämmer inte med inoden.  "
+msgstr "Inod %i klarar kontroller, men kontrollsumman stämmer inte med inoden.  "
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "De utökade attributen för inod %i är trasiga (allokeringskollision).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"Utsträckningsblocken för inod %i klarar kontroller, men kontrollsumman "
-"stämmer inte med utsträckningarna\n"
+"Utsträckningsblocken för inod %i klarar kontroller, men kontrollsumman stämmer inte med utsträckningarna\n"
 "\t(logiskt block %c, fysiskt block %b, längd %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
-msgstr ""
-"inod %i:s utökade attributblock %b passerar kontrollerna, men kontrollsumman "
-"stämmer inte med blocket.  "
+msgstr "inod %i:s utökade attributblock %b passerar kontrollerna, men kontrollsumman stämmer inte med blocket.  "
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1942,7 +1964,7 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1951,61 +1973,54 @@ msgstr ""
 "\t(logiskt block %c, fysiskt block %b, längd %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
-msgstr ""
-"Inod %i har inline-data, men superblocket saknar egenskapen INLINE_DATA\n"
+msgstr "Inod %i har inline-data, men superblocket saknar egenskapen INLINE_DATA\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
-msgstr ""
-"Inod %i har flaggan INLINE_DATA_FL satt på filsystem utan stöd för inline-"
-"data.\n"
+msgstr "Inod %i har flaggan INLINE_DATA_FL satt på filsystem utan stöd för inline-data.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
-msgstr ""
-"inod %i block %b står i konflikt med kritisk metadata, hoppar över "
-"blockkontroller.\n"
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+msgstr "inod %i block %b står i konflikt med kritisk metadata, hoppar över blockkontroller.\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "Kataloginod %i block %b skulle varit vid %c.  "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1138
+#, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "Kataloginod %i en utsträckning markerad oinitierad vid block %c.  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
-"inod %i logiskt block %b (fysiskt block %c) bryter mot "
-"klusterallokeringsregler.\n"
+"inod %i logiskt block %b (fysiskt block %c) bryter mot klusterallokeringsregler.\n"
 "Kommer fixa i pass 1B.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
-msgstr ""
-"Inod %i har flaggan INLINE_DATA_FL satt men utökade attribut finns inte.  "
+msgstr "Inod %i har flaggan INLINE_DATA_FL satt men utökade attribut finns inte.  "
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
@@ -2014,48 +2029,42 @@ msgstr ""
 "eller inline-data-flaggan satt.  "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr "inod %i has utsträckningshuvud men inline-dataflaggan satt.\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr "inod %i verkar ha inline-data men utsträckningsflaggan är satt.\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
-msgstr ""
-"inod %i verkar ha blockkarta men inline-data och utsträckningsflaggor "
-"satta.\n"
+msgstr "inod %i verkar ha blockkarta men inline-data och utsträckningsflaggor satta.\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
-msgstr ""
-"inod %i har inline-data och utsträckningsflaggor satta men i_block "
-"innehåller skräp.\n"
+msgstr "inod %i har inline-data och utsträckningsflaggor satta men i_block innehåller skräp.\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
-msgstr ""
-"Trasig-block-lista säger att inoden för listan över trasiga block är "
-"trasig.  "
+msgstr "Trasig-block-lista säger att inoden för listan över trasiga block är trasig.  "
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1191
 msgid "@A @x region allocation structure.  "
 msgstr "Fel vid allokering utsträckningars regionallokeringsstruktur.  "
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -2064,92 +2073,107 @@ msgstr ""
 "\t(logiskt block %c, ogiltigt fysiskt block %b, längd %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
 msgid "@A memory for encrypted @d list\n"
 msgstr "fel vid allokering av minne för krypterad kataloglista\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
-msgstr ""
-"inod %i:s utsträckningsträd kunde vara grundare (%b; kunde vara ≤ %c)\n"
+msgstr "inod %i:s utsträckningsträd kunde vara grundare (%b; kunde vara ≤ %c)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr "inod %i på ett bigalloc-filsystem kan inte vara blockkartestyrd.  "
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, c-format
+#: e2fsck/problem.c:1218
+#, no-c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "Inod %i har trasigt utsträckningshuvud.  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr "Tidsstämplar på inod %i bortom 2310-04-04 är sannolikt före 1970.\n"
 
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "Inod %i har en otillåten värdeinod %N för utökade attribut.\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "Inod %i har ett otillåtet utökat attribut.  EA-inod %N saknar flaggan EA_INODE.\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+"EA-inod %N för föräldrainod %i saknar EA_INODE-flaggan.\n"
+" "
+
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 "\n"
-"Kör ytterligare pass för att lösa upp block som används av mer än en "
-"inod ...\n"
+"Kör ytterligare 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:1157
-#, c-format
+#: e2fsck/problem.c:1255
+#, no-c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "Flerfaldigt ianspråkstagna block i inod %i:"
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1271
+#, no-c-format
 msgid "Error while scanning inodes (%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:1177
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "Fel vid allokering av inodbitkarta (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-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"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 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:1197
+#: e2fsck/problem.c:1298
 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:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\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
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2158,18 +2182,18 @@ msgstr ""
 "  har %r flerfaldigt ianspråkstagna block, delade med %N filer:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (inod nr. %i, modifieringstid %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
 msgid "\t<@f metadata>\n"
 msgstr "\t<filsystemsmetadata>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2179,7 +2203,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2187,351 +2211,347 @@ msgstr ""
 "Flerfaldig ianspråkstagna block redan överlåtna eller klonade.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1344
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Kunde inte klona fil: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1350
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Pass 1E: Optimerar utsträckningsträd\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, c-format
+#: e2fsck/problem.c:1356
+#, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Misslyckades att optimera utsträckningsträd %p (%i): %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1361
 msgid "Optimizing @x trees: "
 msgstr "Optimerar utsträckningsträd: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
-msgstr ""
-"Internt fel: max djup på utsträckningsträd är för stort (%b; förväntat=%c).\n"
+msgstr "Internt fel: max djup på utsträckningsträd är för stort (%b; förväntat=%c).\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr "inod %i:s utsträckningsträd (på nivå %b) kunde vara kortare.  "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr "inod %i:s utsträckningsträd (på nivå %b) kunde vara smalare.  "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Pass 2: Kontrollerar katalogstruktur\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1399
+#, no-c-format
 msgid "@n @i number for '.' in @d @i %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:1300
+#: e2fsck/problem.c:1404
 msgid "@E has @n @i #: %Di.\n"
 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:1305
+#: e2fsck/problem.c:1409
 msgid "@E has @D/unused @i %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:1310
+#: e2fsck/problem.c:1414
 msgid "@E @L to '.'  "
 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:1315
+#: e2fsck/problem.c:1419
 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:1320
+#: e2fsck/problem.c:1424
 msgid "@E @L to @d %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:1325
+#: e2fsck/problem.c:1429
 msgid "@E @L to the @r.\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:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
 msgstr "Post ”%Dn” i %p (%i) har ogiltiga tecken i namnet.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, c-format
+#: e2fsck/problem.c:1440
+#, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "”.” saknas i kataloginod %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1446
+#, no-c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "”..” saknas i kataloginod %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1451
 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"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1456
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 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:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\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:1360
+#: e2fsck/problem.c:1466
 msgid "i_file_acl @F %If, @s zero.\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:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl för inod %i (%Q) är %Id, skulle varit noll.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_size_high 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:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\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:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\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:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%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:1385
+#: e2fsck/problem.c:1491
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "Kataloginod %i, %B, position %N: katalogen trasig\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "Kataloginod %i, %B, position %N: för långt filnamn\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "Kataloginod %i har ett oallokerat %B.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Katalogposten ”.” i kataloginod %i är inte nollterminerad\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Katalogposten ”..” i kataloginod %i är inte nollterminerad\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "Inod %i (%Q) är en ogiltig teckenenhet.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "Inod %i (TQ är en ogiltig blockenhet.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "Post ”%Dn” i %p (%i) är duplicerad ”.”-post.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "Post ”%Dn” i %p (%i) är duplicerad ”..”-post.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-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"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "Post ”%Dn” i %p (%i) har rec_len %Dr, skulle varit %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, c-format
+#: e2fsck/problem.c:1550
+#, no-c-format
 msgid "@A icount structure: %m\n"
 msgstr "Fel vid allokering av icount-struktur: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Fel vid iterering över katalogblock: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %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:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Fel vid skrivning av katalogblock %b (inod %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-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"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Fel vid deallokering av inod %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1584
+#, no-c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "Katalogpost för ”.” i %p (%i) är stor.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "Inod %i (%Q) är en ogiltig FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I 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:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %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:1490
+#: e2fsck/problem.c:1604
 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"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 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:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "Post ”%Dn” i %p (%i) har nollängdsnamn.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\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:1510
+#: e2fsck/problem.c:1624
 msgid "@a @b @F @n (%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:1515
+#: e2fsck/problem.c:1629
 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:1520
+#: e2fsck/problem.c:1634
 msgid "@p @h %d: %B not referenced\n"
 msgstr "Problem i HTREE-kataloginod %d: %B inte refererad\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 msgid "@p @h %d: %B referenced twice\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:1530
+#: e2fsck/problem.c:1644
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "Problem i HTREE-kataloginod %d: %B har felaktig min-hash\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1649
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "Problem i HTREE-kataloginod %d: %B har felaktig max-hash\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
 msgstr "Ogiltig HTREE-kataloginod %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "Problem i HTREE-kataloginod %d (%q): felaktigt blocknummer %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
 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:1559
+#: e2fsck/problem.c:1674
 msgid "@p @h %d: %B has @n limit (%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:1564
+#: e2fsck/problem.c:1679
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr ""
 "Problem i HTREE-kataloginod %d: %B har ogiltigt antal (%N)\n"
 "\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1684
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "Problem i HTREE-kataloginod %d: %B har en oordnad hash-tabell\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1689
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "Problem i HTREE-kataloginod %d: %B har ogiltigt djup (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
 msgstr "Duplicerad post ”%Dn” i %p (%i) hittad.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2543,7 +2563,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2554,164 +2574,156 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\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:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %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:1603
+#: e2fsck/problem.c:1719
 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:1608
+#: e2fsck/problem.c:1724
 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:1613
+#: e2fsck/problem.c:1729
 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"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, c-format
+#: e2fsck/problem.c:1735
+#, no-c-format
 msgid "@p @h %d: root node fails checksum.\n"
-msgstr ""
-"Problem i HTREE-kataloginod %d: rotnoden stämmer inte med kontrollsumman.\n"
+msgstr "Problem i HTREE-kataloginod %d: rotnoden stämmer inte med kontrollsumman.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, c-format
+#: e2fsck/problem.c:1741
+#, no-c-format
 msgid "@p @h %d: internal node fails checksum.\n"
-msgstr ""
-"Problem i HTREE-kataloginod %d: intern nod har inte rätt kontrollsumma.\n"
+msgstr "Problem i HTREE-kataloginod %d: intern nod har inte rätt kontrollsumma.\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1746
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "Kataloginod %i, %B, position %N: katalogen har ingen kontrollsumma.\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
-msgstr ""
-"kataloginod %i, %B: katalogen passerar kontrollerna men kontrollsumman "
-"stämmer inte.\n"
+msgstr "kataloginod %i, %B: katalogen passerar kontrollerna men kontrollsumman stämmer inte.\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr "Inline-kataloginod %i:s storlek (%N) måste vara en multipel av 4.\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr "Att rätta storleken på inline-kataloginod %i misslyckades.\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
 msgid "Encrypted @E is too short.\n"
 msgstr "Krypterad post ”%Dn” i %p (%i) är för kort.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Pass 3: Kontrollerar katalogförbindelser\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
 msgstr "Rotinod inte allokerad.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "Ingen plats i lost+found-katalog.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1790
+#, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Oförbunden kataloginod %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
 msgstr "/lost+found inte funnen.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %P (%j), @s %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:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "Felaktig eller ej existerande /lost+found.  Kan inte återansluta.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Kunde inte expandera /lost+found: %m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Kunde inte återförbinda %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %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:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-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"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-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"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-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"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-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:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %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
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2721,52 +2733,51 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 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äldrakatalogpost\n"
+"Kunde inte rätta förälder till inod %i: Kunde inte hitta föräldrakatalogpost\n"
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Fel vid skapande av rotkatalog (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Fel vid skapande av /lost+found-katalog (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "Rotinod är inte en katalog; avbryter.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "Kan inte fortsätta utan en rotinod.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/lost+found är inte en katalog (ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
 msgid "/@l has inline data\n"
 msgstr "/lost+found har inline-data\n"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2777,7 +2788,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2788,201 +2799,208 @@ msgstr ""
 "\n"
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1924
 msgid "/@l is encrypted\n"
 msgstr "/lost+found är krypterad\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Pass 3A: Optimerar kataloger\n"
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Misslyckades att skapa dirs_to_hash-iterator: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Misslyckades att optimera katalog %q (%d): %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
 msgstr "Optimerar kataloger: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Pass 4: Kontrollerar referensräknare\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
 msgstr "Lös nollängdsinod %i.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
 msgstr "lös inod %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %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
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
 "VARNING: PROGRAMMERINGSFEL I E2FSCK!\n"
-"\tELLER NÅGON KLANTSKALLE (DU) KONTROLLERAR ETT MONTERAT (AKTIVT) "
-"FILSYSTEM.\n"
+"\tELLER 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: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "Inod %i för utökade attribut har referensräknare som är %N, skulle varit %n. "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr "Katalogen överskrider maximala antalet länkar, men DIR_NLINK-funktionen finns inte i superblocket.\n"
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Pass 5: Kontrollerar gruppsammanfattningsinformation\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
 msgstr "Utfyllnad vid slutet av inodsbitkarta är inte satt. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
 msgstr "Utfyllnad vid slutet av blockbitkarta är inte satt. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "Blockbitkarteskillnader: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "Inodsbitkarteskillnader: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 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"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:2068
 msgid "Directories count wrong for @g #%g (%i, counted=%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:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%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:1928
+#: e2fsck/problem.c:2078
 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"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%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:1938
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
+#: e2fsck/problem.c:2088
+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"
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Internt fel: fuskar till slut på bitkarta (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Fel vid kopiering av ersättningsinodskarta: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @b @B: %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:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-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"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-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"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr "grupp %g:s inodsbitkarta stämmer inte med kontrollsumman.\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr "grupp %g:s blockbitkarta stämmer inte med kontrollsumman.\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 msgid "Recreate @j"
 msgstr "Återskapa journal"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr "Uppdatera kvotinformation för kvottyp %N"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2172
+#, no-c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "Fel när kontrollsummeinformation för blockgrupp sattes: %m\n"
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2178
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Fel vid skrivning av filsystemsinformation: %m\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr "Fel när skrivningar tömdes till lagringsenheten: %m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2189
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "Fel när kvotinformation skrevs för kvottyp %N: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Ej hanterad felkod (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "IGNORERAT"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr "i move_quota_inode"
 
@@ -3004,25 +3022,25 @@ msgstr "vid start av inodsgenomsökning"
 msgid "while doing inode scan"
 msgstr "vid inodsgenomsökning"
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "vid anrop av ext2fs_block_iterate för inod %d"
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "vid anrop av ext2fs_block_iterate för inod %u"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "vid anrop av ext2fs_adjust_ea_refcount2 för inod %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "vid anrop av ext2fs_adjust_ea_refcount2 för inod %u"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Kapar"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Tömmer"
 
-#: e2fsck/unix.c:77
+#: e2fsck/unix.c:78
 #, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
@@ -3033,15 +3051,14 @@ msgstr ""
 "\t\t[-l|-L dåliga_block_fil] [-C fd] [-j extern_journal]\n"
 "\t\t[-E utökade-flaggor] [-z gör_ogjort_fil] enhet\n"
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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"
@@ -3050,10 +3067,9 @@ msgstr ""
 " -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"
+" -f                   Framtvinga kontroll även om filsystemet är markerat rent\n"
 
-#: e2fsck/unix.c:88
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -3071,12 +3087,12 @@ msgstr ""
 " -L dåliga_block_fil  Ange lista över dåliga block\n"
 " -z gör_ogjort_fil    Skapa en gör-ogjort-fil\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, 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"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3091,51 +3107,51 @@ msgstr[1] ""
 "\n"
 "%12u inoder använda (%2.2f %%, av %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 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:169
+#: e2fsck/unix.c:172
 #, c-format
 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:174
+#: e2fsck/unix.c:177
 #, 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"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr "             Histogram över utsträckningars djup: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 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:195
+#: e2fsck/unix.c:198
 #, c-format
 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:197
+#: e2fsck/unix.c:200
 #, c-format
 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:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -3150,96 +3166,96 @@ msgstr[1] ""
 "\n"
 "%12u normala filer\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u katalog\n"
 msgstr[1] "%12u kataloger\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 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:206
+#: e2fsck/unix.c:209
 #, c-format
 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:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u fifo\n"
 msgstr[1] "%12u fifon\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u länk\n"
 msgstr[1] "%12u länkar\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u symbolisk länk"
 msgstr[1] "%12u symboliska länkar"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, 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 snabba symboliska länkar)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u uttag (socket)\n"
 msgstr[1] "%12u uttag (sockets)\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u fil\n"
 msgstr[1] "%12u filer\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "när det avgjordes om %s är monterat."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Varning!  %s är monterat.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Varning!  %s används.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s är monterat.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s används.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3247,7 +3263,7 @@ msgstr ""
 "Kan inte fortsätta, avbryter.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3261,81 +3277,105 @@ msgstr ""
 "du att orsaka ***ALLVARLIG*** skada på filsystemet.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "Vill du verkligen fortsätta"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "kontroll avbruten.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr " innehåller ett filsystem med fel"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " var inte fläckfritt avmonterat"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 msgid " primary superblock features different from backup"
 msgstr " det primära superblockets egenskaper skiljer från reservens"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:383
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " har monterats %u gånger utan att kontrolleras"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:390
 msgid " has filesystem last checked time in the future"
 msgstr " har tidpunkten för senaste filsystemskontroll i framtiden"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " har inte kontrollerats på %u dagar"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr "ignorerar kontrollintervallet, broken_system_clock är satt\n"
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ", kontroll framtvingad.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: rent, %u/%u filer, %llu/%llu block"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
 msgstr " (kontroll senarelagd; på batteri)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr " (kontrollera efter nästa montering)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (kontrollera om %ld monteringar)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "FEL: Kunde inte öppna /dev/null (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "Ogiltig EA-version.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:702
 msgid "Invalid readahead buffer size.\n"
 msgstr "Ogiltig buffertstorlek för förhandsläsning.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Okänd utökad flagga: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Utökade flaggor separeras med komman, och kan ta ett argument som avdelas\n"
+"med ett likhetstecken (”=”).  Giltiga utökade flaggor är:\n"
+"\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr "\tea_ver=<ea_version (1 eller 2)>\n"
+
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "\treadahead_kb=<buffertstorlek>\n"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3344,55 +3384,55 @@ msgstr ""
 "Syntaxfel i e2fsck:s konfigurationsfil (%s, rad nr %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Fel vid validering av filidentifierare %d: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr "Ogiltig filidentifierare för förloppsinformation"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 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:865
+#: e2fsck/unix.c:903
 #, 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"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Kan inte hitta ”%s”"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 msgid "The -n and -D options are incompatible."
 msgstr "Flaggorna -n och -D är inkompatibla."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 msgid "The -n and -c options are incompatible."
 msgstr "Flaggorna -n och -c är inkompatibla."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Flaggorna -n och -l/-L är inkompatibla."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Flaggorna -D och -E fixes_only är inkompatibla."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Flaggorna -E bmap2extent och fixes_only är inkompatibla."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 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"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3401,7 +3441,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG ”%s” är inte ett heltal\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3412,34 +3452,31 @@ msgstr ""
 "Ogiltigt ickenumeriskt argument till -%c (”%s”)\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, 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:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr "vid uppsättning av MMP-block"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 "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"
+"”tune2fs -f -E clear_mmp %s”\n"
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
 msgstr "vid läsning av MMP-block"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3450,57 +3487,57 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "vid försök att ta bort %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "vid försök att skapa en gör-ogjort-fil\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Fel: ext2fs-biblioteksversion inaktuell!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "vid försök att initiera program"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tAnvänder %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr "behöver terminal för interaktiva reparationer"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s försöker med reservblock ...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr "Superblocket är ogiltigt,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
 msgstr "Gruppbeskrivarna ser trasiga ut ..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s när reservblocken användes"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1546
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: går tillbaka till originalsuperblock\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3510,28 +3547,28 @@ msgstr ""
 "(Eller så är filsystemets superblock trasigt)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr "Kan detta vara en nollängdspartition?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, 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"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1590
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Kanske inte existerar eller växlingsenhet?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1592
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr "Filsystemet monterat eller öppnat exklusivt av ett annat program?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr "Kanske en enhet som inte existerar?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3539,71 +3576,77 @@ msgstr ""
 "Skrivskyddad disk; använd flaggan -n för att göra en läsningskontroll\n"
 "av enheten.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr "%s: Försöker läsa in superblocket trots fel …\n"
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr "Hämta en nyare version av e2fsck!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1749
 #, c-format
 msgid "while checking journal for %s"
 msgstr "vid kontroll av journal för %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1752
 msgid "Cannot proceed with file system check"
 msgstr "Kan inte fortsätta med filsystemskontrollen"
 
-#: e2fsck/unix.c:1661
-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:1763
+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:1673
+#: e2fsck/unix.c:1775
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "kan inte sätta superblocksflaggor på %s\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1781
 #, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Fel i journalkontrollsumman funnet i %s\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1785
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "Journalen trasig i %s\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1789
 #, c-format
 msgid "while recovering journal of %s"
 msgstr "vid återhämtning av journalen för %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s har funktioner som inte stöds:"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1826
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "%s har kodning som inte stöds: %0x\n"
+
+#: e2fsck/unix.c:1876
 #, 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"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1879
 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"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Skapar journal (%d block): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr " Klar.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1931
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
@@ -3611,24 +3654,38 @@ msgstr ""
 "\n"
 "*** journalen har genererats om ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "avbruten"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck inställd.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Startar om e2fsck från början ...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "vid återställning av omgivning"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** FEL I FILSYSTEMET RÄTTADE *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: Filsystemet modifierades.\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3637,12 +3694,12 @@ msgstr ""
 "\n"
 "%s: ***** FILSYSTEMET MODIFIERADES *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:2040
 #, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** STARTA OM SYSTEMET *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3653,51 +3710,51 @@ msgstr ""
 "%s: ********** VARNING: Filsystemet har fortfarande fel **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "yYjJ"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr "aA"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr " (”a”  aktiverar ”ja” för alla) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<j>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (j/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "inställd!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr "ja för alla\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "ja\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "nej\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3706,7 +3763,7 @@ msgstr ""
 "%s? nej\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3715,38 +3772,38 @@ msgstr ""
 "%s? ja\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "ja"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "nej"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: ogiltiga bitkarteblock för %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "läser inod- och blockbitkartor"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "vid upprepat försök att läsa bitkarta för %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "skriver block- och inodsbitkartor"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "vid omskrivning av block- och inodsbitkartor för %s"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3759,62 +3816,59 @@ msgstr ""
 "%s: OVÄNTAD INKONSEKVENS; KÖR fsck MANUELLT.\n"
 "\t(d.v.s., utan flaggorna -a eller -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Använt minne: %lu k/%lu k (%lu k/%lu k), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Använt minne: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "tid: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "förfluten tid: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "när inod %lu i %s lästes"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "när inod %lu i %s skrevs"
 
-#: e2fsck/util.c:765
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
+#: e2fsck/util.c:792
+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:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "klar                                                 \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, 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"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 utfil] [-svwnf]\n"
+"Användning: %s [-b blockstorlek] [-i infil] [-o utfil] [-svwnfBX]\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:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3823,80 +3877,80 @@ msgstr ""
 "%s: Flaggorna -n och -w är ömsesidigt uteslutande.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f %% klar, %s har gått. (%d/%d/%d fel)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Testar med slumpmönster: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Testar med mönster 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "vid sökning"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Underligt värde (%ld) i do_read\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "vid ext2fs_sync_device"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "vid början av iteration över lista av dåliga block"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "vid allokering av buffertar"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Kontrollerar block %lu till %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Letar efter dåliga block i skrivskyddat läge\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Letar efter dåliga block (skrivskyddad test): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "För många dåliga block, avbryter testet\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Letar efter dåliga block i läs-skriv-läge\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Från block %lu till %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Läser och jämför: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 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"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 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"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3904,57 +3958,57 @@ msgstr ""
 "\n"
 "Avbrott fångat, rensar upp\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "vid testdataskrivning, block %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s är monterat, "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "badblocks framtvingat ändå.  Hoppas /etc/mtab är felaktig.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "det är inte säkert att köra badblocks!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s används uppenbarligen av systemet; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "badblocks framtvingat ändå.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "ogiltig %s - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr "För stort maximalt antal dåliga block %u — maximum är %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "kunde inte allokera minne för testmönster - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 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"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Slumpvis testmönster är inte tillåtet i skrivskyddat läge"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3962,270 +4016,268 @@ msgstr ""
 "Kunde inte avgöra enhetsstorlek; du måste ange\n"
 "storleken manuellt\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "vid försök att avgöra enhetsstorlek"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "sista block"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "första block"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "felaktigt startblock (%llu): måste vara mindre än %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "felaktigt startblock (%llu): måste vara ett 32-bitars värde"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "när lista över dåliga block i minnet skapades"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "indatafil — felaktigt format"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "när tillägg gjordes till lista i minnet över dåliga block gjordes"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, 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"
 
 #: misc/chattr.c:89
 #, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
-msgstr "Användning: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] filer…\n"
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "Användning: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] filer…\n"
 
-#: misc/chattr.c:159
+#: misc/chattr.c:160
 #, c-format
 msgid "bad project - %s\n"
 msgstr "felaktigt projekt - %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "felaktig version - %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "vid försök att ta status på %s"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "vid läsning av flaggor på %s"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Flaggor på %s satta som "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "vid sättning av flaggor på %s"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Version av %s satt som %lu\n"
 
-#: misc/chattr.c:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "vid sättning av version på %s"
 
-#: misc/chattr.c:271
+#: misc/chattr.c:272
 #, c-format
 msgid "Project of %s set as %lu\n"
 msgstr "Projektet för %s satt som %lu\n"
 
-#: misc/chattr.c:275
+#: misc/chattr.c:276
 #, c-format
 msgid "while setting project on %s"
 msgstr "när projektet sattes på %s"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Kunde inte allokera sökvägsvariabel i chattr_dir_proc"
 
-#: misc/chattr.c:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "= är inkompatibelt med - och +\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "Måste använda ”-v”, =, - eller +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:80 misc/create_inode.c:119
 #, c-format
 msgid "while reading inode %u"
 msgstr "när inod %u lästes"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 msgid "while expanding directory"
 msgstr "vid utvidgning av katalogen"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:97
 #, c-format
 msgid "while linking \"%s\""
 msgstr "när ”%s” länkades"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
 #, c-format
 msgid "while writing inode %u"
 msgstr "när inod %u skrevs"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:152 misc/create_inode.c:176
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "när attributen på ”%s” listades"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:163
 #, c-format
 msgid "while opening inode %u"
 msgstr "när inod %u öppnades"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr "vid allokering av minne"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:189 misc/create_inode.c:205
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "när attributet ”%s” på ”%s” lästes"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:214
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "när attributet ”%s” skrevs till inod %u"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:224
 #, c-format
 msgid "while closing inode %u"
 msgstr "när inod %u stängdes"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:275
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr "när inod ”%s” allokerades"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:294
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr "när inod ”%s” skapades"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:360
 #, c-format
 msgid "while creating symlink \"%s\""
 msgstr "när symlänk ”%s” skapades"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:378 misc/create_inode.c:963
 #, c-format
 msgid "while looking up \"%s\""
 msgstr "när ”%s” slogs upp"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:398
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr "när katalogen ”%s” skapades"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:627
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "när ”%s” öppnades för att kopieras"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr "när arbetskatalog byttes till ”%s”"
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:815
 #, c-format
-msgid "while opening directory \"%s\""
-msgstr "när katalogen ”%s” öppnades"
+msgid "while scanning directory \"%s\""
+msgstr "när katalogen ”%s” skannades"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:825
 #, c-format
 msgid "while lstat \"%s\""
 msgstr "vid lstat ”%s”"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:875
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr "när specialfilen ”%s” skapades"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:884
 msgid "malloc failed"
 msgstr "malloc misslyckades"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:892
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr "vid försök att läsa länken ”%s”"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr "symlänk ökade i storlek mellan lstat() och readlink()"
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:910
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr "när symlänken ”%s” skrevs"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:921
 #, c-format
 msgid "while writing file \"%s\""
 msgstr "när filen ”%s” skrevs"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:934
 #, c-format
 msgid "while making dir \"%s\""
 msgstr "när katalogen ”%s” skapades"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:952
 msgid "while changing directory"
 msgstr "vid byte av katalog"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:958
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr "ignorerar posten ”%s”"
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:971
 #, c-format
 msgid "while setting inode for \"%s\""
 msgstr "när inoden för ”%s” sattes"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:978
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "när xattrs för ”%s” sattes"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:1004
 msgid "while saving inode data"
 msgstr "när inodsdata sparades"
 
 #: misc/dumpe2fs.c:56
 #, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Användning: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] enhet\n"
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "Användning: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] enhet\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -4343,106 +4395,54 @@ msgstr "vid utskrift av lista över dåliga block"
 msgid "Bad blocks: %u"
 msgstr "Dåliga block: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "vid läsning av journalinod"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "när journalinoden öppnades"
 
-#: misc/dumpe2fs.c:397
-msgid "while reading journal super block"
-msgstr "när journalsuperblocket lästes"
-
-#: misc/dumpe2fs.c:404
-msgid "Journal superblock magic number invalid!\n"
-msgstr "Journalsuperblockets magiska tal felaktigt!\n"
-
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Journalfunktioner:       "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Journalstorlek:           "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Journallängd:             %u\n"
-"Journalsekvens:           0x%08x\n"
-"Journalstart:             %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr "Journalkontrollsummetyp:  crc32\n"
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-"Journalkontrollsummetyp:  %s\n"
-"Journalkontrollsumma:     0x%08x\n"
+#: misc/dumpe2fs.c:385
+msgid "while reading journal super block"
+msgstr "när journalsuperblocket lästes"
 
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Journalfelnummer:         %d\n"
+#: misc/dumpe2fs.c:392
+msgid "Journal superblock magic number invalid!\n"
+msgstr "Journalsuperblockets magiska tal felaktigt!\n"
 
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "vid läsning av journalsuperblock"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Kunde inte hitta journalsuperblockets magiska tal"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Journalblockstorlek:      %u\n"
-"Journallängd:             %u\n"
-"Journalens första block:  %u\n"
-"Journalsekvens:           0x%08x\n"
-"Journalstart:             %u\n"
-"Journalens användarantal: %u\n"
+#: misc/dumpe2fs.c:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "misslyckades att allokera en MMP-buffert\n"
 
-#: misc/dumpe2fs.c:514
+#: misc/dumpe2fs.c:479
 #, c-format
-msgid "Journal users:            %s\n"
-msgstr "Journalanvändare:         %s\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "läser MMP-block %llu från ”%s”\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Kunde inte allokera minne för att tolka flaggor!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Ogiltig superblockparameter: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Ogiltig blockstorleksparameter: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4458,245 +4458,228 @@ msgstr ""
 "\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"
 "\tsuperblock=<superblocknummer>\n"
 "\tblocksize=<blockstorlek>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tAnvänder %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** Kontrollsummefel upptäckt i filsystemet!  Kör e2fsck nu!\n"
-"\n"
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Kunde inte hitta giltigt filsystemssuperblock.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** Kontrollsummefel upptäckt i bitkartor!  Kör e2fsck nu!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s: funktionen MMP är inte aktiverad.\n"
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:747
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "vid försök att läsa ”%s”-bitkartor\n"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"*** Kör e2fsck nu!\n"
 "\n"
-"%s: %s: fel vid läsning av bitkartor: %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
-msgstr "Användning: %s [ -r|Q ] [ -fr ] enhet avbildsfil\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
+msgstr "Användning: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blockstorlek ] [ -fr ] enhet avbildsfil\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "            %s -I enhet avbildsfil\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
-msgstr ""
-"       %s -ra  [  -cfnp  ] [ -o källavstånd ] [ -O målavstånd ] käll-fs "
-"[ mål-fs ]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+msgstr "       %s -ra  [  -cfnp  ] [ -o källavstånd ] [ -O målavstånd ] käll-fs [ mål-fs ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr "vid allokering av buffert"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "När block %llu skrevs\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr "fel när block %llu skrevs"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr "fel i generic_write()"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Fel: huvudstorlek är större än wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr "Kunde inte allokera huvudbuffert\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "vid skrivning av superblock"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "vid skrivning av inodtabell"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "vid skrivning av blockbitkarta"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "vid skrivning av inodbitkarta"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Trasigt katalogblock %llu: felaktig rec_len (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Trasigt katalogblock %llu: felaktig name_len (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu block (%d %%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
 msgstr "Kopierar "
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr "Att sluta nu kommer förstöra filsystemet, avbryt igen om du är säker\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " %s återstår med %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr "fel när block %llu lästes"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "Kopierade %llu / %llu block (%d %%) på %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "med %.2f MB/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
 msgstr "när l1-tabell allokerades"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr "när l2-cache allokerades"
 
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
-msgstr ""
-"Varning: det finns fortfarande tabeller i cachen medan cachen skrivs, data "
-"kommer gå förlorade så avbilden kommer kanske inte vara korrekt.\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
+msgstr "Varning: det finns fortfarande tabeller i cachen medan cachen skrivs, data kommer gå förlorade så avbilden kommer kanske inte vara korrekt.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr "när ext2_qcow2_image allokerades"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr "när ext2_qcow2_image initierades"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
-msgstr ""
-"Programmeringsfel: multipla sekventiella referensräknarblock skapade!\n"
+msgstr "Programmeringsfel: multipla sekventiella referensräknarblock skapade!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr "när blockbitkarta allokerades"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr "när förvrängd blockbitkarta allokerades"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
 msgstr "Söker igenom inoder …\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr "Kan inte allokera en blockbuffert"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "vid iteration över inod %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "Raw- och qcow2-avbilder kan inte installeras"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr "fel när bitkartor lästes"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr "när enhetsfil öppnades"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr "när avbildstabellen återställdes"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "flaggan -a kan endast användas med raw- eller QCOW2-avbilder."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "flaggan -b kan endast användas med raw- eller QCOW2-avbilder."
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr "Avstånd är endast tillåtna med raw-avbilder."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr "Flyttningsläge är endast tillåtet med raw-avbilder."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr "Flyttningsläge behöver läget all data."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr "kontrollerar om monterad"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4708,46 +4691,51 @@ msgstr ""
 "kan resultera i en inkonsistent avbild som inte kommer vara användbar för\n"
 "felsökningsändamål.  Använd flaggan -f om du verkligen vill göra det.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "En QCOW2-avbild kan inte skrivas till standard ut!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr "Kan inte ta status på utdata\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "Avbilden (%s) är komprimerad\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "Avbilden (%s) är krypterad\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Avbilden (%s) är trasig\n"
+
+#: misc/e2image.c:1683
 #, 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)"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr "Flaggan -c stödjs endast i raw-läge\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "Flaggan -c stödjs inte vid skrivning till standard ut\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr "när check_buf allokerades"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr "Flaggan -p stödjs endast i raw-läge\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d block innehöll redan de data som skulle kopieras\n"
@@ -4777,7 +4765,7 @@ msgstr "e2label: fel vid läsning av superblock\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: inte ett ext2-filsystem\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Varning: etikett för lång, avkortar.\n"
@@ -4792,162 +4780,161 @@ msgstr "e2label: kan inte söka till superblock igen\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: fel vid skrivning av superblock\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Användning: e2label enhet [ny-etikett]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
-msgstr "Användning: %s [-f] [-h] [-n] [-v] <transaktionsfil> <filsystem>\n"
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
+msgstr "Användning: %s [-f] [-h] [-n] [-o avstånd] [-v] [-z gör-ogjort-fil] <transaktionsfil> <filsystem>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr "Filsystemets superblock stämmer inte med gör-ogjort-filen.\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr "UUID stämmer inte.\n"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr "Senaste monteringstid stämmer inte.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr "Sista skrivningstiden stämmer inte.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr "Livstidsskrivningsräknaren stämmer inte.\n"
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr "när filsystemets superblock lästes."
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr "när superblocket skrevs"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "Gör-ogjort-superblockets kontrollsumma stämmer inte.\n"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr "felaktigt avstånd - %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
-msgstr ""
-"Kommer inte skriva till en gör-ogjort-fil under återuppspelning av den.\n"
+msgstr "Kommer inte skriva till en gör-ogjort-fil under återuppspelning av den.\n"
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "när gör-ogjort-filen ”%s” öppnades\n"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 msgid "while reading undo file"
 msgstr "när gör-ogjort-filen lästes"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: Inte en gör-ogjort-fil.\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "%s: Huvudets kontrollsumma stämmer inte.\n"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "%s: Trasig huvud i gör-ogjort-filen.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr "%s: Gör-ogjort-blockstorleken är för stor.\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "%s: Gör-ogjort-blockstorleken är för liten.\n"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr "%s: Okänd funktionsuppsättning i gör-ogjort-fil.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "Fel när det avgjordes om %s är monterat."
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr "e2undo skall endast köras på omonterade filsystem"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, c-format
 msgid "while opening `%s'"
 msgstr "när ”%s” öppnades"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr "angivet avstånd är för stort"
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 msgid "while reading keys"
 msgstr "när nycklar lästes"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr "%s: fel nyckelmagi vid %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr "%s: kontrollsumman för nyckelblock är fel vid %llu.\n"
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, c-format
 msgid "%s: block %llu is too long."
 msgstr "%s: block %llu är för långt."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, c-format
 msgid "while fetching block %llu."
 msgstr "när block %llu hämtades."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr "kontrollsumman i filsystemblock %llu (gör-ogjort-block %llu)\n"
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, c-format
 msgid "while writing block %llu."
 msgstr "fel när block %llu skrevs."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr "Gör-ogjort-filen trasig; kör e2fsck NU!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr "IO-fel vid återuppspelning; kör e2fsck NU!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr "Ofullständig gör-ogjort-post; kör e2fsck.\n"
@@ -4993,12 +4980,8 @@ msgstr ""
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
-msgstr ""
-"byteavstånd  bytestart      byteslut  fs_block  blkst  grp  mkfs/"
-"monteringstid        sb_uuid etikett\n"
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+msgstr "byteavstånd  bytestart      byteslut  fs_block  blkst  grp  mkfs/monteringstid        sb_uuid etikett\n"
 
 #: misc/findsuper.c:264
 #, c-format
@@ -5031,37 +5014,37 @@ msgstr ""
 "\tbör rätta din /etc/fstab-fil så snart du kan.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: inte funnen\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: Inga fler barnprocesser?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, 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"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: status är %x, skulle aldrig inträffa.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Avslutade med %s (slutstatus %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, 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"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5069,46 +5052,39 @@ msgstr ""
 "Antingen alla eller inga av filsystemstyperna som ges till -t måste ha\n"
 "prefix ”no” eller ”!”.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Kunde inte allokera minne för filsystemtyper\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, 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
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: kan inte kontrollera %s: fsck.%s finns inte\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Kontrollerar alla filsystem.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (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"
+#: misc/fsck.c:1085
+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
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: för många enheter\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: för många argument\n"
@@ -5122,44 +5098,42 @@ msgstr "Monterar endast läsbart.\n"
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr "%s: Låter användare allokera alla block.  Detta är farligt!\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
 msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr "Kör e2fsck -fy %s.\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
-msgstr ""
-"Journalen behöver återhämtas; ”e2fsck -E journal_only” behöver köras.\n"
+msgstr "Journalen behöver återhämtas; ”e2fsck -E journal_only” behöver köras.\n"
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3812
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "%s: Att skriva till journalfilen stödjs inte.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr "Varning: monterar okontrollerat fs, att köra e2fsck rekommenderas.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
-msgstr ""
-"Varning: maximalt antal monteringar uppnått, att köra e2fsck rekommenderas.\n"
+msgstr "Varning: maximalt antal monteringar uppnått, att köra e2fsck rekommenderas.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr "Varning: kontrolltiden uppnådd; att köra e2fsck rekommenderas.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr "Föräldralösa hittade; att köra e2fsck rekommenderas.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr "Fel upptäckta; att köra e2fsck rekommenderas.\n"
 
@@ -5183,7 +5157,7 @@ msgstr "När projektet på %s lästes"
 msgid "While reading version on %s"
 msgstr "Vid läsning av version på %s"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5192,8 +5166,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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 "Användning: %s [-c|-l filnamn] [-b blockstorlek] [-C klusterstorlek]\n"
@@ -5203,37 +5176,37 @@ msgstr ""
 "\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] [-e felbeteende]\n"
-"        [-z gör-ogjort-fil] [-jnqvDFSV] enhet [blockantal]\n"
+"\t[-z gör-ogjort-fil] [-jnqvDFSV] enhet [blockantal]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Kör kommando: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "vid försök att köra ”%s”"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "vid bearbetning av lista över dåliga block från program"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Block %d i primär superblock-/gruppbeskrivare är felaktigt.\n"
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, 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"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Avbryter...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5244,15 +5217,19 @@ msgstr ""
 "\tdåliga block.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "vid markering av dåliga block som använda"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "när reserverade inoder skrevs"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Skriver inodstabeller: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5261,76 +5238,76 @@ msgstr ""
 "\n"
 "Kunde inte skriva %d block i inodstabell som börjar vid %llu: %s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "klar                            \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "vid skapande av rotkatalog"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "vid läsning av rotinod"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "vid inställning av rotinodens ägarskap"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "vid skapande av /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "vid sökning efter /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "vid utvidgning av /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "vid inställning av inod för dåliga block"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Slut på minne vid radering av sektorer %d-%d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Varning: kunde inte läsa block 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Varning: kunde inte radera sektor %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "vid initiering av journalsuperblock"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Nollställer journalenhet: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "vid nollställning av journalenhet (block %llu, antal %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "vid skrivning av journalsuperblock"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "Skapar ett filsystem med %llu %d k-block och %u inoder\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5339,155 +5316,164 @@ msgstr ""
 "varning: %llu block oanvända.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Filsystemsetikett=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "OS-typ: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blockstorlek=%u (log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Klusterstorlek=%u (log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Fragmentstorlek=%u (log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Kliv=%u block, remsvidd=%u block\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u inoder, %llu block\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu block (%2.2f%%) reserverade för superanvändaren\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Första datablock=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Rotkatalogägare=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximalt antal filsystemsblock=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u blockgrupper\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u blockgrupp\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, 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:702
+#: misc/mke2fs.c:714
 #, 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:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inoder per grupp\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "Filsystems-UUID: %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Superblockkopior lagrade på block: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:822
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s förutsätter ”-O 64bit”\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "”%s” måste komma före ”resize=%u”\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Ogiltig desc_size: ”%s”\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Ogiltigt hashfrö: %s\n"
+
+#: misc/mke2fs.c:867
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Ogiltigt avstånd: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Ogiltigt mmp_update_interval: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Ogiltigt antal superblockskopior: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Ogiltig klivparameter: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Ogiltig remsbreddsparameter: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Ogiltig storleksändringsparameter: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:965
 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:959
+#: misc/mke2fs.c:989
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr "Storleksändring under drift stöds inte med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Ogiltig rotägare: ”%s”\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1069
+#, c-format
+msgid "Invalid encoding: %s"
+msgstr "Felaktig kodning: %s"
+
+#: misc/mke2fs.c:1087
 #, c-format
 msgid ""
 "\n"
@@ -5510,14 +5496,15 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 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"
@@ -5534,10 +5521,12 @@ msgstr ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=kodning\n"
+"\tencoding_flags=flaggor\n"
 "\tquotatype=<kvottyper att aktivera>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5548,7 +5537,17 @@ msgstr ""
 "Varning: RAID-remsbredd %u är inte en jämn multipel av klivet %u.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr "fel: felaktig kodningsflagga: %s\n"
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr "fel: en kodning måste specificeras explicit när kodningsflaggor skickas\n"
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5557,17 +5556,17 @@ msgstr ""
 "Syntaxfel i mke2fs konfigurationsfil (%s, rad nr %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Ogiltig filsystemsflagga satt: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ogiltig monteringsflagga satt: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
@@ -5576,7 +5575,7 @@ msgstr ""
 "\n"
 "Din mke2fs.conf-fil definierar inte filsystemstypen %s.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5584,11 +5583,11 @@ msgstr ""
 "Du behöver förmodligen installera en uppdaterad mke2fs.conf-fil.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 msgid "Aborting...\n"
 msgstr "Avbryter...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5599,83 +5598,79 @@ msgstr ""
 "Varning: fs_type %s är inte definierad i mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Kunde inte allokera minne för ny SÖKVÄG.\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1608
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Kunde inte initiera profilen (fel: %ld).\n"
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "felaktig blockstorlek - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, 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"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1661
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "felaktig klusterstorlek - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "”-R” undanbedes, använd ”-E” istället"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "felaktigt felbeteende - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr "Ogiltigt antal för block per grupp"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 msgid "blocks per group must be multiple of 8"
 msgstr "block per grupp måste vara en multipel av 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "Felaktigt tal för flex_bg-storlek"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
 msgstr "storlek på flex_bg måste vara en multipel av 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "storlek på flex_bg (%lu) måste vara mindre än eller lika med 2³¹"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "ogiltig inodsförhållande %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1744
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "ogiltig inodsstorlek - %s"
 
-#: misc/mke2fs.c:1684
-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:1757
+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:1695
+#: misc/mke2fs.c:1768
 msgid "in malloc for bad_blocks_filename"
 msgstr "i malloc för bad_blocks_filename"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1777
 #, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
@@ -5684,69 +5679,69 @@ msgstr ""
 "Varning: etiketten för lång, kommer avkortas till ”%s”.\n"
 "\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "ogiltig procentandel reserverade block - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "felaktigt antal inoder - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1814
 msgid "while allocating fs_feature string"
 msgstr "vid allokering av fs_feature-sträng"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1831
 #, c-format
 msgid "bad revision level - %s"
 msgstr "felaktig versionsnivå - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "vid försök att skapa revision %d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 msgid "The -t option may only be used once"
 msgstr "Flaggan -t får endast anges en gång"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1858
 msgid "The -T option may only be used once"
 msgstr "Flaggan -T får endast anges en gång"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "vid försök att öppna journalenhet %s\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1920
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "Journalenhetens blockstorlek (%d) mindre än minsta blockstorlek %d\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1926
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Använder journalenhetens blockstorlek: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1937
 #, c-format
 msgid "invalid blocks '%s' on device '%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:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "ett filsystem"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "vid försök att avgöra filsystemstorlek"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5754,7 +5749,7 @@ msgstr ""
 "Kunde inte avgöra enhetsstorlek; du måste ange\n"
 "storleken på filsystemet\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5766,47 +5761,48 @@ msgstr ""
 "\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:1931
+#: misc/mke2fs.c:2015
 msgid "Filesystem larger than apparent device size."
 msgstr "Filsystem större än synbar enhetsstorlek."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:2035
 msgid "Failed to parse fs types list\n"
 msgstr "Misslyckades tolka fs-typlista\n"
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2085
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "HURD stödjer inte funktionen filtype.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2090
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "HURD stödjer inte funktionen huge_file.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "HURD stödjer inte funktionen metadata_csum.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2100
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "HURD stödjer inte funktionen ea_inode.\n"
+
+#: misc/mke2fs.c:2110
 msgid "while trying to determine hardware sector size"
 msgstr "vid försök att avgöra hårdvarusektorstorlek"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2116
 msgid "while trying to determine physical sector size"
 msgstr "vid försök att avgöra fysisk sektorstorlek"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2148
 msgid "while setting blocksize; too small for device\n"
 msgstr "när blockstorlek sattes; för liten för enheten\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2153
 #, 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:2086
+#: misc/mke2fs.c:2177
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5815,91 +5811,89 @@ 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"
 
-#: misc/mke2fs.c:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2191
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem 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 skapa\n"
+"\tett filsystem som använder en blockstorlek på %d.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "upplösning av fs_types för mke2fs.conf: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr "Filsystemsfunktioner som inte stöds med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2228
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr "Glesa superblock stöds inte med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2238
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Journaler stöds inte med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2251
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "ogiltig procentandel reserverade block - %lf"
 
-#: misc/mke2fs.c:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
-msgstr ""
-"Utsträckningar MÅSTE vara aktiverade på ett 64-bitars filsystem.  Skicka -O "
-"extents för att rätta.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
+msgstr "Utsträckningar MÅSTE vara aktiverade på ett 64-bitars filsystem.  Skicka -O extents för att rätta.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "Klusterstorleken får inte vara mindre än blockstorleken.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "att ange en klusterstorlek förutsätter funktionen bigalloc"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, 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"
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2317
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "%s justering är förskjuten med %lu byte.\n"
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2319
 #, 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:2247
+#: misc/mke2fs.c:2340
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d-byteblock för stort för systemet (max %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2344
 #, 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:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
-msgstr ""
-"Förslag: använd en Linuxkärna ≥ 3.18 för förbättrad stabilitet av metadatan "
-"och funktionerna för journalkontrollsumma.\n"
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "Förslag: använd en Linuxkärna ≥ 3.18 för förbättrad stabilitet av metadatan och funktionerna för journalkontrollsumma.\n"
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
+msgstr "Okänd filnamnskodning från profilen: %s"
+
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr "Okända kodningsflaggor från profilen: %s"
+
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -5914,11 +5908,24 @@ msgstr ""
 "är vad du vill.\n"
 "\n"
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2449
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr "%d-byteinoder är för små för projektkvoter"
+
+#: misc/mke2fs.c:2465
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Funktionerna encrypt och casefold är inte kompatibla.\n"
+"De kan inte båda aktiveras samtidigt.\n"
+
+#: misc/mke2fs.c:2480
 msgid "Can't support bigalloc feature without extents feature"
 msgstr "Kan inte stödja funktionen bigalloc utan funktionen utsträckningar"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -5926,7 +5933,7 @@ msgstr ""
 "Egenskaperna resize_inode och meta_bg är inte kompatibla\n"
 "De kan inte båda aktiveras samtidigt.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5938,47 +5945,39 @@ msgstr ""
 "Se https://ext4.wiki.kernel.org/index.php/Bigalloc för mer information\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 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:2367
+#: misc/mke2fs.c:2516
 msgid "blocks per group count out of range"
 msgstr "antal block per grupp utanför giltigt intervall"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2538
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
-msgstr ""
-"Funktionen flex_bg är inte aktiverad, så fleg_bg-storlek kan inte anges"
+msgstr "Funktionen flex_bg är inte aktiverad, så fleg_bg-storlek kan inte anges"
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2550
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "ogiltig inodstorlek %d (min %d/max %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr "%d-byteinoder är för små för inline-data; ange en större storlek"
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr "%d-byteinoder är för små för projektkvoter; ange en större storlek"
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "för många inoder (%llu), öka inodsförhållandet?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2587
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "för många inoder (%llu), ange < 2³² inoder"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2601
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5989,75 +5988,65 @@ msgstr ""
 "\tfilsystem med %llu block, ange högre inodsförhållande (-i)\n"
 "\teller lägre inodantal (-N).\n"
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2788
 msgid "Discarding device blocks: "
 msgstr "Utrangerar enhetsblock: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 msgid "failed - "
 msgstr "misslyckades - "
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2863
 msgid "while initializing quota context"
 msgstr "när kvotkontexten initierades"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2870
 msgid "while writing quota inodes"
 msgstr "när kvotinoder skrevs"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2895
 #, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "felaktigt felbeteende i profilen - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2971
+msgid "in malloc for android_sparse_params"
+msgstr "i malloc för android_sparse_params"
+
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "vid uppsättning av superblock"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
-msgstr ""
-"Utsträckningar är inte aktiverade.  I trädet med filutsträckningar kan "
-"blocksummor beräknas, medan blockkartor inte kan det.  Att inte aktivera "
-"utsträckningar reducerar täckningen av kontrollsummor för metadata.  Skicka -"
-"O extents för att rätta.\n"
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
+msgstr "Utsträckningar är inte aktiverade.  I trädet med filutsträckningar kan blocksummor beräknas, medan blockkartor inte kan det.  Att inte aktivera utsträckningar reducerar täckningen av kontrollsummor för metadata.  Skicka -O extents för att rätta.\n"
 
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
-msgstr ""
-"Stöd för 64-bitars filsystem är inte aktiverat.  De större fälten som denna "
-"funktion erbjuder gör kontrollsummor med full styrka möjliga.  Skicka -O "
-"64bit för att rätta.\n"
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+msgstr "Stöd för 64-bitars filsystem är inte aktiverat.  De större fälten som denna funktion erbjuder gör kontrollsummor med full styrka möjliga.  Skicka -O 64bit för att rätta.\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
+#: misc/mke2fs.c:3016
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
 msgstr "Funktionen metadata_csum_seed förutsätter funktionen metadata_csum.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 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:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "okänt os - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 msgid "Allocating group tables: "
 msgstr "Allokerar grupptabeller: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr "vid försök att allokera filsystemstabeller"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6065,32 +6054,32 @@ msgstr ""
 "\n"
 "\tvid konvertering av underklustrets bitkarta"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr "%s kan göras ännu trasigare av omskrivning av superblock\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "vid nollställning av block %llu vid slutet av filsystemet"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3279
 msgid "while reserving blocks for online resize"
 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:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "en journal"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Lägger till journal till enhet %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
@@ -6099,21 +6088,21 @@ msgstr ""
 "\n"
 "\tvid försök att lägga till journal till enhet %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "klar\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Hoppar över att skapa journal i läget endast super\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Skapar journal (%u block): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6121,7 +6110,7 @@ msgstr ""
 "\n"
 "\tvid försök att skapa journal"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
@@ -6129,35 +6118,28 @@ msgstr ""
 "\n"
 "Fel vid aktivering av funktionen för skydd mot flerfaldig montering."
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3357
 #, 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:3210
+#: misc/mke2fs.c:3373
 msgid "Copying files into the device: "
 msgstr "Kopierar filer till enheten: "
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3379
 msgid "while populating file system"
 msgstr "när filsystemet populerades"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Skriver superblock och bokföringsinformation för filsystemet: "
 
-#: misc/mke2fs.c:3230
-#, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Varning, hade problem att skriva ut superblock."
+#: misc/mke2fs.c:3393
+msgid "while writing out and closing file system"
+msgstr "när filsystemet skrevs ut och stängdes"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6165,29 +6147,31 @@ msgstr ""
 "klar\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
-msgstr ""
-"Ett partitionsavstånd på %llu (%u k) block är inte kompatibelt med "
-"klusterstorleken %u.\n"
+msgid "while zeroing block %llu for hugefile"
+msgstr "vid nollställning av block %llu för jättefil"
+
+#: misc/mk_hugefiles.c:515
+#, c-format
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgstr "Ett partitionsavstånd på %llu (%u k) block är inte kompatibelt med klusterstorleken %u.\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
 msgstr "Stora filer kommer att nollställas\n"
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:584
 #, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "Skapar %lu stora filer "
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:586
 #, c-format
 msgid "with %llu blocks each"
 msgstr "med %llu block var"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:595
 #, c-format
 msgid "while creating huge file %lu"
 msgstr "när den stora filen %lu skapades"
@@ -6232,23 +6216,29 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   start=%8d storlek=%8lu slut=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "Kör e2fsck -D på filsystemet.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+"\n"
+"Denna åtgärd kräver en nykontrollerat filsystem.\n"
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Kör e2fsck -f på filsystemet.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "Kör e2fsck -D på filsystemet.\n"
+msgstr "Kör e2fsck -fD på filsystemet.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
@@ -6256,30 +6246,39 @@ msgstr ""
 "Användning: %s [-c max_antal_monteringar] [-e felbeteende] [-f] [-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[-M senast_monterad_katalog] [-O [^]funktion[,…]] [-Q kvotflaggor]\n"
+"\t[-r antal_reserverade_block] [-u användare] [-C antal_monteringar]\n"
+"\t[-L volymetikett] [-M senast_monterad_katalog]\n"
+"\t[-O [^]funktion[,…]] [-Q kvotflaggor]\n"
 "\t[-E utökad-flagga[,…]] [-T senaste_kontrolltid] [-U UUID]\n"
 "\t[-I ny_inodstorlek] [-z gör-ogjort-fil] enhet\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Journalsuperblock inte funnet!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "vid försök att öppna extern journal"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s är inte en journalenhet.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr ""
+"Journalsuperblocket är trasigt, nr_users\n"
+"är för hög (%d).\n"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "Filsystems UUID inte funnet på journalenhet.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6287,52 +6286,52 @@ msgstr ""
 "Kan inte hitta journalenheten.   Den togs INTE bort.\n"
 "Använd flaggan -f för att ta bort en saknad journalenhet.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "Journal borttagen\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "vid läsning av bitkartor"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
 msgstr "vid nollställning av journalinod"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "vid skrivning av journalinod"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(och starta om efteråt!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr "Efter att ha kört e2fsck, kör ”resize2fs %s %s"
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:489
 #, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr "Kör ”resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
 msgstr " -z \"%s\""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:495
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr "” för att aktivera 64-bitarsläge.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:497
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr "” för att avaktivera 64-bitarsläge.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
@@ -6340,17 +6339,17 @@ msgstr ""
 "VARNING: Kunde inte bekräfta stöd i kärnan för metadata_csum_seed.\n"
 "  Detta kräver Linux ≥ v4.4.\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Nollställning av filsystemsfunktion ”%s” stöds inte.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Att sätta filsystemsfunktion ”%s” stöds inte.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6358,7 +6357,7 @@ msgstr ""
 "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:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6366,7 +6365,7 @@ msgstr ""
 "Flaggan needs_recovery är satt.  Kör e2fsck före flaggan has_journal\n"
 "nollställs.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
@@ -6374,7 +6373,7 @@ msgstr ""
 "Att sätta filsystemsfunktionen ”sparse_super” stödjs inte\n"
 "för filsystem med funktionen meta_bg aktiverad.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6384,14 +6383,12 @@ msgstr ""
 "kan inte sättas på om filsystemet är monterat\n"
 "eller skrivskyddat.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1143
 #, 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:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6399,20 +6396,20 @@ msgstr ""
 "Funktionen för skydd mot flerfaldig montering kan inte\n"
 "avaktiveras om filsystemet är skrivskyddat.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 msgid "Error while reading bitmaps\n"
 msgstr "Fel vid läsning av bitkartor\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, 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"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1174
 msgid "while reading MMP block."
 msgstr "vid läsning av MMP-block."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
@@ -6420,7 +6417,7 @@ msgstr ""
 "Att nollställa flaggan flex_bg skulle få filsystemet att bli\n"
 "inkonsistent.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6428,62 +6425,46 @@ msgstr ""
 "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:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
 msgstr "Att aktivera kontrollsummor kan ta ett tag."
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr "Kan inte aktivera metadata_csum på ett monterat filsystem!\n"
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
-msgstr ""
-"Utsträckningar är inte aktiverade.  I trädet med filutsträckningar kan "
-"blocksummor beräknas, medan blockkartor inte kan det.  Att inte aktivera "
-"utsträckningar reducerar täckningen av kontrollsummor för metadata.  Kör om "
-"med -O extents för att rätta.\n"
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
+msgstr "Utsträckningar är inte aktiverade.  I trädet med filutsträckningar kan blocksummor beräknas, medan blockkartor inte kan det.  Att inte aktivera utsträckningar reducerar täckningen av kontrollsummor för metadata.  Kör om med -O extents för att rätta.\n"
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
-msgstr ""
-"Stöd för 64-bitars filsystem är inte aktiverat.  De större fälten som denna "
-"funktion erbjuder gör kontrollsummor med full styrka möjliga.  Kör resize2fs "
-"-b för att rätta.\n"
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
+msgstr "Stöd för 64-bitars filsystem är inte aktiverat.  De större fälten som denna funktion erbjuder gör kontrollsummor med full styrka möjliga.  Kör resize2fs -b för att rätta.\n"
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
 msgstr "Att avaktivera kontrollsummor kan ta ett tag."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr "Kan inte avaktivera metadata_csum på ett monterat filsystem!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr "Kan inte aktivera 64-bitarsläge när det är monterat!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr "Kan inte avaktivera 64-bitarsläge när det är monterat!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
-msgstr ""
-"\n"
-"Varning: aktiverat projekt utan kvot tillsammans\n"
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
+msgstr "Kan inte aktivera projektfunktionen; inodstorleken är för liten.\n"
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6491,7 +6472,11 @@ msgstr ""
 "\n"
 "Varning: flaggan ”^quota” åsidosätter ”-Q”-argument.\n"
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr "Det går inte att aktivera funktionen encrypt på filsystem med funktionen encoding aktiverad.\n"
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
@@ -6499,21 +6484,21 @@ msgstr ""
 "Att sätta funktionen ”metadata_csum_seed” stödjs bara\n"
 "för filsystem med funktionen metadata_csum aktiverad.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
-msgstr ""
-"UUID har ändrats sedan metadata_csum aktiverades.  Filsystem måste vara "
-"omonterade för att säkert skriva om alla metadata till att matcha det nya "
-"UUID:t.\n"
+msgstr "UUID har ändrats sedan metadata_csum aktiverades.  Filsystem måste vara omonterade för att säkert skriva om alla metadata till att matcha det nya UUID:t.\n"
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr "Att beräkna om kontrollsummor kan ta ett tag."
+
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "Filsystemet har redan en journal.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, c-format
 msgid ""
 "\n"
@@ -6522,21 +6507,21 @@ msgstr ""
 "\n"
 "\tvid försök att öppna journal på %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Skapar journal på enhet %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "vid tillägg av filsystem till journal på %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "Skapar journalinod: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6544,32 +6529,36 @@ msgstr ""
 "\n"
 "\tvid försök att skapa journalfil"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr "Kan inte aktivera projektkvoter; inodstorleken är för liten.\n"
+
+#: misc/tune2fs.c:1588
 msgid "while initializing quota context in support library"
 msgstr "när kvotkontexten i stödbiblioteket initierades"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1603
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr "när kvotgränser (%d) uppdaterades"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1611
 #, c-format
 msgid "while writing quota file (%d)"
 msgstr "när kvotfil (%d) skrevs"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "while removing quota file (%d)"
 msgstr "när kvotfil (%d) togs bort"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6579,105 +6568,104 @@ 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Kunde inte tolka datum-/tidsangivelse: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "felaktigt antal monteringar - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "felaktigt gid/gruppnamn - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "felaktigt intervall - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "felaktig andel reserverade block - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
 msgid "-o may only be specified once"
 msgstr "-o får endast anges en gång"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
 msgid "-O may only be specified once"
 msgstr "-O får endast anges en gång"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "felaktigt antal reserverade block - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "felaktigt uid/användarnamn - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "felaktig inodsstorlek - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Inodsstorlek måste vara en multipel av två- %s"
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "mmp_update_interval är för stort: %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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:1995
+#: misc/tune2fs.c:2078
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "Sätter filsystemets felflagga för att framtvinga fsck.\n"
+
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Ogiltig RAID-kliv: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Ogiltig RAID-remsbredd: %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2126
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Ogiltig hash-algoritm: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2132
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Sätter standardhashalgoritm till %s (%d)\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2151
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6689,52 +6677,55 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 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"
 "\tclear_mmp\n"
 "\thash_alg=<hash-algoritm>\n"
 "\tmount_opts=<utökade standardmonteringsflaggor>\n"
+"\tmmp_update_interval=<mmp-uppdateringsintervall i sekunder>\n"
 "\tstride=<RAID-styckestorlek per disk i block>\n"
 "\tstripe_width=<RAID-kliv·datadiskar i block>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 msgid "Failed to read inode bitmap\n"
 msgstr "Misslyckades att läsa inodsbitkarta\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 msgid "Failed to read block bitmap\n"
 msgstr "Misslyckades att läsa blockbitkarta\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "block att flytta"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr "Kunde inte allokera blockbitkarta när inodsstorleken ökades\n"
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2653
 msgid "Not enough space to increase inode size \n"
 msgstr "Inte tillräckligt med utrymme för att öka inodsstorleken \n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2658
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "Misslyckades omlokalisera block under storleksändring av inoder \n"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6742,84 +6733,113 @@ msgstr ""
 "Fel när storleken på inoder ändrades.\n"
 "Kör e2undo för att göra filsystemsändringarna ogjorda. \n"
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2900
+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"
+"”tune2fs -f -E clear_mmp {enhet}”\n"
+
+#: misc/tune2fs.c:2907
 #, 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:2811
+#: misc/tune2fs.c:2919
 msgid "Cannot modify a journal device.\n"
 msgstr "Kan inte modifiera en journalenhet.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Inodsstorleken är redan %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 msgid "Shrinking inode size is not supported\n"
 msgstr "Att krympa inodsstorleken stödjs inte\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "Ogiltig inodstorlek %lu (max %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
 msgstr "Att ändra storlek på inoder kan ta ett tag."
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+"Varning: journalen är smutsig.  Du kanske vill köra om journalen så här:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"kör sedan om detta kommando.  Annars kan eventuella ändringar skrivas över\n"
+"när journalen återhämtas.\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Återhämtar journalen.\n"
+
+#: misc/tune2fs.c:3028
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Sätter max antal monteringar till %d\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3034
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Sätter aktuellt antal monteringar till %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Sätter felbeteende till %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Sätter gid för reserverade block till %lu\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3049
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "intervall mellan kontroller är för stort (%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3056
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Sätter intervall mellan kontroller till %lu sekunder\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "Sätter procent reserverade block till %g %% (%llu block)\n"
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "antal reserverade block för stort (%llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3076
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Sätter antal reserverade block till %llu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3081
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6827,7 +6847,7 @@ msgstr ""
 "\n"
 "Filsystemet har redan glesa superblock.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6837,7 +6857,7 @@ msgstr ""
 "Att sätta superblockflaggan gles stödjs inte\n"
 "för filsystem med funktionen meta_bg aktiverad.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
@@ -6846,7 +6866,7 @@ msgstr ""
 "\n"
 "Flaggan för glesa superblock satt.  %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6854,54 +6874,49 @@ msgstr ""
 "\n"
 "Nollställning av superblocksflaggan gles stödjs inte.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Sätter tidpunkt för senaste filsystemskontroll till %s\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3113
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Sätter uid för reserverade block till %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3145
 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"
 
-#: misc/tune2fs.c:3024
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
+#: misc/tune2fs.c:3163
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr "Kvotfunktionen kan endast ändras när filsystemet är omonterat.\n"
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3181
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "Att sätta UUID:n på detta filsystem kan ta ett tag."
+
+#: misc/tune2fs.c:3196
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr "UUID:n får endast ändras när filsystemet är omonterat.\n"
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
-msgstr ""
-"Om du bara använder kärnor nyare än v4.4, kör ”tune2fs -O "
-"metadata_csum_seed” och kör om detta kommando.\n"
-
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr "Att sätta UUID på ett kontrollsummerat filsystem kan ta ett tag."
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
+msgstr "Om du bara använder kärnor nyare än v4.4, kör ”tune2fs -O metadata_csum_seed” och kör om detta kommando.\n"
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "Ogiltigt UUID-format\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 msgid "Need to update journal superblock.\n"
 msgstr "Behöver uppdatera journalsuperblock.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 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"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3274
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -6909,87 +6924,64 @@ msgstr ""
 "Att ändra inodsstorlek stöds inte för filsystem med funktionen flex_bg\n"
 "aktiverad.\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Sätter inodsstorlek till %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 msgid "Failed to change inode size\n"
 msgstr "Misslyckades att ändra inodsstorlek\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Sätter klivstorlek till %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Sätter remsbredd till %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3322
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Sätter utökade standardmonteringsflaggor till ”%s”\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-"Varning: journalen är smutsig.  Du kanske vill köra om journalen så här:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"kör sedan om detta kommando.  Annars kan eventuella ändringar skrivas över\n"
-"när journalen återhämtas.\n"
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr "Återhämtar journalen.\n"
-
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr "<fortsätter>\n"
 
-#: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Fortsätt ändå (eller vänta %d sekunder)? (j,n) "
+#: misc/util.c:105
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "Fortsätt ändå (eller vänta %d sekunder för att fortsätta)? (j,N) "
 
-#: misc/util.c:108
-#, fuzzy
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
-msgstr "Fortsätt ändå? (j,n) "
+msgstr "Fortsätt ändå? (j,N) "
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\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.
 # Felrapporterat.
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr "skapar inte %s här!\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr "mke2fs framtvingad ändå.\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr "Kunde inte allokera minne för att tolka journalflaggor!\n"
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
@@ -6998,7 +6990,7 @@ msgstr ""
 "\n"
 "Kunde inte hitta journalenhet som matchar %s\n"
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -7028,7 +7020,7 @@ msgstr ""
 "Journalstorleken måste vara mellan 1024 och 10240000 filsystemsblock.\n"
 "\n"
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
@@ -7036,7 +7028,7 @@ msgstr ""
 "\n"
 "Filsystem för litet för en journal\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -7047,7 +7039,7 @@ msgstr ""
 "Den begärda journalstorleken är %d block; den måste vara\n"
 "mellan 1024 och 10240000 block.  Avbryter.\n"
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
@@ -7055,7 +7047,7 @@ msgstr ""
 "\n"
 "Journalstorleken för stor för filsystem.\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
@@ -7209,44 +7201,42 @@ msgstr "#\tAntal=%llu, Storlek=%llu, Markör=%llu, Sorterad=%llu\n"
 #: resize/main.c:49
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
-"Användning: %s [-d felsökningflaggor] [-f] [-F] [-M] [-P] [-p] enhet [-b|-s|"
-"ny_storlek] [-z gör_ogjort_fil]\n"
+"Användning: %s [-d felsökningflaggor] [-f] [-F] [-M] [-P] [-p] enhet [-b|-s|ny_storlek] [-S RAID-kliv] [-z gör-ogjort-fil]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Utökar inodstabellen"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Flyttar om block"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Söker igenom inodstabell"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Uppdaterar inodsreferenser"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Flyttar inodstabell"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Okänt pass?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Börja pass %d (max = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7259,17 +7249,17 @@ msgstr ""
 "det ändå.\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "när %s öppnades"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "när statusinformation för %s hämtades"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7278,30 +7268,30 @@ msgstr ""
 "Kör ”e2fsck -f %s” först.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Uppskattad minsta storlek på filsystemet: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Ogiltig ny storlek: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 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"
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Ny storlek mindre än minimum (%llu)\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Ogiltig klivlängd"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7312,35 +7302,27 @@ msgstr ""
 "Du begärde en ny storlek på %llu block.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr "Kan inte slå på och av 64-bitarsfunktionen.\n"
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
-msgstr ""
-"Kan inte ändra 64-bitarsfunktionen på ett filsystem som är större än 2³² "
-"block.\n"
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
+msgstr "Kan inte ändra 64-bitarsfunktionen på ett filsystem som är större än 2³² block.\n"
 
-#: resize/main.c:575
+#: resize/main.c:581
 #, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr "Kan inte ändra 64-bitarsfunktionen när filsystemet är monterat.\n"
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
-msgstr ""
-"Aktivera utsträckningsfunktionen med tune2fs före aktivering av 64-"
-"bitarsfunktionen.\n"
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
+msgstr "Aktivera utsträckningsfunktionen med tune2fs före aktivering av 64-bitarsfunktionen.\n"
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
@@ -7349,37 +7331,37 @@ msgstr ""
 "Filsystemet är redan %llu (%d k) block långt.  Inget behöver göras!\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "Filsystemet är redan 64-bitars.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "Filsystemet är redan 32-bitars.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "Konverterar filsystemet till 64-bitars.\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "Konverterar filsystemet till 32-bitars.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, 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"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "vid försök att ändra storlek på %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7388,7 +7370,7 @@ msgstr ""
 "Kör ”e2fsck -fy %s” för att laga filsystemet\n"
 "efter den avbrutna storleksändringen.\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7397,7 +7379,7 @@ msgstr ""
 "Filsystemet på %s är nu %llu (%d k) block långt.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "vid försök att korta av %s"
@@ -7458,53 +7440,48 @@ msgstr "Utför en storleksändring on-line av %s till %llu (%d k) block.\n"
 msgid "While trying to extend the last group"
 msgstr "Vid försök att utöka den sista gruppen"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Vid försök att öppna grupp nr. %d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, 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:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "inoder (%llu) måste vara mindre än %u"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "inoder (%llu) måste vara mindre än %u\n"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "reserverade block"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "metadatablock"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr "nya metablock"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr "Borde aldrig hända!  Ingen sb i sista super_sparse bg?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr "Borde aldrig hända!  Oväntad old_desc i super_sparse bg?\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Skulle aldrig inträffa: storleksändringsinoden trasig!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.43.4-WIP"
-msgstr "EXT2FS-bibliotek version 1.43"
+msgid "EXT2FS Library version 1.45.3"
+msgstr "EXT2FS-bibliotek version 1.45.3"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -7652,8 +7629,7 @@ msgstr "Försök att läsa block från filsystemet resulterade i en kort läsnin
 
 #: 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"
@@ -7709,13 +7685,11 @@ 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"
@@ -8051,8 +8025,7 @@ 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 mtab-filen saknas"
+msgstr "Kan inte kontrollera om filsystem är monterade för att mtab-filen saknas"
 
 #: lib/ext2fs/ext2_err.c:148
 msgid "Filesystem too large to use legacy bitmaps"
@@ -8067,8 +8040,8 @@ msgid "MMP: device currently active"
 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"
+msgid "MMP: e2fsck being run"
+msgstr "MMP: e2fsck körs"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
@@ -8112,8 +8085,7 @@ msgstr "Katalogblocksumman stämmer inte med katalogblocket"
 
 #: lib/ext2fs/ext2_err.c:162
 msgid "Extended attribute block checksum does not match block"
-msgstr ""
-"Kontrollsumman för blocket för utökade attribut stämmer inte med blocket"
+msgstr "Kontrollsumman för blocket för utökade attribut stämmer inte med blocket"
 
 #: lib/ext2fs/ext2_err.c:163
 msgid "Superblock checksum does not match superblock"
@@ -8124,8 +8096,8 @@ msgid "Unknown checksum algorithm"
 msgstr "Okänd kontrollsummealgoritm"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr "Kontrollsumman för MMP-blocket stämmer inte med MMP-blocket"
+msgid "MMP block checksum does not match"
+msgstr "Kontrollsumman för MMP-blocket stämmer inte"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
@@ -8216,9 +8188,12 @@ msgid "The journal superblock is corrupt"
 msgstr "Journalsuperblocket är trasigt"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "Storleksändringsinoden är trasig"
+msgstr "Inoden är trasig"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr "Inod som innehåller ett utökat attributvärde är trasig"
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8411,6 +8386,3 @@ msgstr "%s innehåller ett %s-filsystem\n"
 #, c-format
 msgid "%s contains `%s' data\n"
 msgstr "%s innehåller ”%s”-data\n"
-
-#~ msgid "Please run e2fsck on the filesystem.\n"
-#~ msgstr "Kör e2fsck på filsystemet.\n"
index f643759..9953902 100644 (file)
Binary files a/po/tr.gmo and b/po/tr.gmo differ
index 67ac25b..d66cede 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -48,7 +48,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
@@ -70,7 +70,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: e2fsprogs 1.42.8\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
+"POT-Creation-Date: 2018-08-18 21:03-0400\n"
 "PO-Revision-Date: 2013-11-01 22:49+0100\n"
 "Last-Translator: Volkan Gezer <vlkngzr@gmail.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -78,10 +78,11 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Lokalize 1.5\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Hatalı blok %u kapsamdışı; yoksayıldı.\n"
@@ -94,11 +95,12 @@ msgstr "- hatalı bloklar düğümünde doğruluk denetlenirken hata oluştu"
 msgid "while reading the bad blocks inode"
 msgstr "- hatalı bloklar düğümü okunurken hata oluştu"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1550
+#: e2fsck/unix.c:1664 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1404
+#: misc/e2image.c:1588 misc/e2image.c:1609 misc/mke2fs.c:236
+#: misc/tune2fs.c:2837 misc/tune2fs.c:2931 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "- %s açılmaya çalışılırken hata oluştu"
@@ -108,7 +110,7 @@ msgstr "- %s açılmaya çalışılırken hata oluştu"
 msgid "while trying popen '%s'"
 msgstr "- '%s' veri yolu açılmaya çalışılırken hata oluştu"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "- dosyadan hatalı bloklar listesinin okunması sırasında hata oluştu"
 
@@ -121,6 +123,11 @@ msgstr "- hatalı bloklar düğümü güncellenirken hata oluştu"
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr "Uyarı: Hatalı blok düğümünde %u. blok kuraldışı; temizlendi.\n"
 
+#: e2fsck/dirinfo.c:331
+#, fuzzy
+msgid "while freeing dir_info tdb file"
+msgstr "- kök düğümü okunurken hata oluştu"
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -197,12 +204,12 @@ msgstr "BLKFLSBUF ioctl desteklenmiyor!  Tamponlar boşaltılamadı.\n"
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Kullanımı: %s [-F] [-I düğüm_tampon_blokları] aygıt\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1075
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "%s temizlik için açılırken hata oluştu"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1081 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "%s boşaltılmaya çalışılırken hata oluştu"
@@ -212,11 +219,11 @@ msgstr "%s boşaltılmaya çalışılırken hata oluştu"
 msgid "while trying to open '%s'"
 msgstr "- %s açılmaya çalışılırken hata oluştu"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1297
 msgid "while opening inode scan"
 msgstr "düğüm taraması başlatılırken hata oluştu"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1316
 msgid "while getting next inode"
 msgstr "sonraki düğüme geçilirken hata oluştu"
 
@@ -225,365 +232,388 @@ msgstr "sonraki düğüme geçilirken hata oluştu"
 msgid "%u inodes scanned.\n"
 msgstr "%u düğüm tarandı.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "günlük dosyası super bloğu okunuyor\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: geçerli gümlük dosyası super bloğu yok\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: gümlük dosyası çok kısa\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3786
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: günlük dosyasına göre kurtarılıyor\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: salt-okunur durumdayken günlük dosyasına göre kurtarma yapılamaz\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "%s yeniden açılmaya çalışılırken hata oluştu"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "aek özellik"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Aayrılırken hata oluştu"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bblok"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bbiteşlem"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "csıkıştırma"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Cbazı dosya sistemi blokları ile çelişiyor"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "ddizin"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Dsilinen"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "egirdi"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@E"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "fdosya sistemi"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "F%i (%Q) düğümü için"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "ggrup"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "hHTREE dizin düğüm"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "idüğüm"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Ikuraldışı"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jgünlük"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Lbir bağdır"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mçok düğümlü"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "ngeçersiz"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oartık"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "psorun"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr ""
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "rkök düğümü"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "solmalıydı"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssüper blok"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "ubağlantısız"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vaygıt"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr ""
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "zsıfır uzunluklu"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<NULL düğüm>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<Hatalı bloklar düğümü>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 #, fuzzy
 msgid "<The user quota inode>"
 msgstr "<günlük düğümü>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 #, fuzzy
 msgid "<The group quota inode>"
 msgstr "<Grup tanımlayıcı düğümü>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<Önyükleyici düğümü>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<Kurtarılan dizinin düğümü>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<Grup tanımlayıcı düğümü>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<günlük düğümü>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Yedek düğüm 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Yedek düğüm 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "olağan dosya"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "dizin"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "karakter aygıtı"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "aygıtı engelle"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "isimli veri yolu"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "sembolik bağ"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "yuva"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "0%o kipinde bilinmeyen dosya türü"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 #, fuzzy
 msgid "indirect block"
 msgstr "kullanımdaki blok eşlemi"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr ""
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 #, fuzzy
 msgid "triple indirect block"
 msgstr "%u düğümünün dolaylı blokları okunuyor"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 #, fuzzy
 msgid "translator block"
 msgstr "meta-veri blokları"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 #, fuzzy
 msgid "block #"
 msgstr "bblok"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr ""
+
+#: e2fsck/message.c:485
+#, fuzzy
+msgid "group"
+msgstr "ggrup"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr ""
+
+#: e2fsck/message.c:491
+#, fuzzy
+msgid "unknown quota type"
+msgstr "bilinmeyen işletim sistemi - %s"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "tekrarlanan blokların düğüm eşlemi"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, fuzzy, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "iç hata; %u için dup_blk bulunamıyor\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "clone_file_block işlevinden döndürüldü"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, fuzzy, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr "iç hata; %u için dup_blk bulunamıyor\n"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "İç hata: %u için dizin bilgileri bulunamıyor."
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:356
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr ""
+
+#: e2fsck/pass1.c:774 e2fsck/pass2.c:1005
 msgid "reading directory block"
 msgstr "blok dizini okunuyor"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1223
 msgid "in-use inode map"
 msgstr "kullanımdaki düğüm eşlemi"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1234
 msgid "directory inode map"
 msgstr "dizin düğümü eşlemi"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1244
 msgid "regular file inode map"
 msgstr "normal dosya düğümü eşlemi"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1253 misc/e2image.c:1272
 msgid "in-use block map"
 msgstr "kullanımdaki blok eşlemi"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1262
 #, fuzzy
 msgid "metadata block map"
 msgstr "meta-veri blokları"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1324
 msgid "opening inode scan"
 msgstr "düğüm tarama açılıyor"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1362
 msgid "getting next inode from scan"
 msgstr ""
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2066
 msgid "Pass 1"
 msgstr "1. geçiş"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2127
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "%u düğümünün dolaylı blokları okunuyor"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2178
 msgid "bad inode map"
 msgstr "hatalı düğüm eşlemi"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2218
 msgid "inode in bad block map"
 msgstr "hatalı blok eşlemindeki düğüm"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2238
 msgid "imagic inode map"
 msgstr "imagic düğüm eşlemi"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2269
 msgid "multiply claimed block map"
 msgstr "tekrarlanan blokların eşlemi"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2394
 msgid "ext attr block map"
 msgstr "ek özellik bloğu eşlemi"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3637
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr ""
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4054
 msgid "block bitmap"
 msgstr "blok biteşlemi"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4060
 msgid "inode bitmap"
 msgstr "düğüm biteşlemi"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4066
 msgid "inode table"
 msgstr "düğüm tablosu"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "2. geçiş"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1077 e2fsck/pass2.c:1244
 msgid "Can not continue."
 msgstr "Devam edilemiyor."
 
@@ -603,19 +633,19 @@ msgstr "3. geçiş"
 msgid "inode loop detection bitmap"
 msgstr "düğüm döngüsü saptama biteşlemi"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "4. geçiş"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "5. geçiş"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr ""
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr ""
 
@@ -780,18 +810,18 @@ msgid "WILL RECREATE"
 msgstr "TEKRAR OLUŞTURULACAK"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:112
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "%g grubunun blok biteşlemi grup içinde değil. (blok %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:116
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "%g grubunun düğüm biteşlemi grup içinde değil. (blok %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:121
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -808,7 +838,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:127
 #, fuzzy
 msgid ""
 "\n"
@@ -833,7 +863,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:138
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -846,7 +876,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:145
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -857,18 +887,18 @@ msgstr ""
 "farklı olması desteklenmiyor.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:152
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "Süperblok grup_başına_blok_sayısı = %b; %c olmalıydı\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:157
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "Süper blok ilk_veri_bloğu = %b; %c olmalıydı\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:162
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -876,7 +906,7 @@ msgstr ""
 "Dosya sistemi bir UUID içermiyor; bir tane üretiliyor.\n"
 "\n"
 
-#: e2fsck/problem.c:165
+#: e2fsck/problem.c:167
 #, c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
@@ -895,49 +925,49 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:176
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Süperblok içinde bozukluk saptandı. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
+#: e2fsck/problem.c:181
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Aygıtın fiziksel uzunluğu saptanırken hata oluştu: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:186
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "Süperblok içindeki düğüm sayısı %i; %j olmalıydı.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:190
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd, dosya türü özelliğini desteklemez.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
+#: e2fsck/problem.c:195
 #, fuzzy, c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "Süperblok hatalı ext3 günlüğü içeriyor (düğüm %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:200
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr ""
 "Dış günlük çok sayıda dosya sistemi kullanıcısı içeriyor. (desteklenmiyor)\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:205
 msgid "Can't find external @j\n"
 msgstr "Dış günlük bulunamıyor\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:210
 msgid "External @j has bad @S\n"
 msgstr "Dış günlük hatalı süperblok içeriyor\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:215
 msgid "External @j does not support this @f\n"
 msgstr "Dış günlük bu dosya sistemini desteklemiyor\n"
 
@@ -945,7 +975,7 @@ msgstr "Dış günlük bu dosya sistemini desteklemiyor\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:220
 #, fuzzy
 msgid ""
 "@f @j @S is unknown type %N (unsupported).\n"
@@ -959,70 +989,70 @@ msgstr ""
 "Ayrıca, günlük süperblokunun bozuk olması da mümkün.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:228
 #, fuzzy
 msgid "@j @S is corrupt.\n"
 msgstr "Ext3 günlüğü süperbloku bozuk.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:233
 #, fuzzy
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "ext3 kurtarma bayrağı temiz ama günlük veri içeriyor.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:238
 #, fuzzy
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr "Süperblok ext3 needs_recovery bayrağı içeriyor ama günlük yok.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:243
 #, fuzzy
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "ext3 kurtarma bayrağı temiz ama günlük veri içeriyor.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:248
 msgid "Clear @j"
 msgstr "Günlüğü Temizle"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:253 e2fsck/problem.c:764
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr "dosyasisteminin özellik bayrakları etkin ama dosyasisteminin sürümü 0."
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:258
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s artık düğüm %i (kull_kiml=%Iu, grup_kiml=%Ig, kip=%Im, boy=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:263
 #, fuzzy
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "düğüm %i içindeki blok #%B (%b) kuraldışı.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:268
 #, fuzzy
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "artık düğüm %i içindeki blok #%B (%b) zaten temizlenmiş.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
+#: e2fsck/problem.c:273
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "süper blok içindeki artık düğüm %i kuraldışı.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
+#: e2fsck/problem.c:278
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "artık düğüm listesindeki düğüm %i kuraldışı\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:283
 #, fuzzy
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
@@ -1030,7 +1060,7 @@ msgstr ""
 "içeriyor.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:288
 #, fuzzy
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
@@ -1038,13 +1068,13 @@ msgstr ""
 "içeriyor.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:293
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "günlük sürümü bu e2fsck tarafından desteklenmiyor.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
+#: e2fsck/problem.c:298
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -1055,7 +1085,7 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
+#: e2fsck/problem.c:303
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -1067,7 +1097,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:308
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1078,12 +1108,12 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:314
 msgid "Run @j anyway"
 msgstr "Günlüğü yine de çalıştır"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:319
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
 "Yedek süper blokda kurtarma bayrağı temiz olduğundan günlük herşeye rağmen "
@@ -1091,7 +1121,7 @@ msgstr ""
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:324
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1101,7 +1131,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:330
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1110,18 +1140,18 @@ msgstr ""
 "%N değeri var; sıfır olmalıydı.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:336
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr "Resize_inode etkin değil, ama düğüm boyutlandırma sıfırdan farklı.  "
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:341
 msgid "Resize @i not valid.  "
 msgstr "Düğüm boyutlandırma geçersiz.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:346
 #, fuzzy
 msgid ""
 "@S last mount time (%t,\n"
@@ -1130,7 +1160,7 @@ msgstr "Süperbloğun son bağlama zamanı gelecekte.  "
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:351
 #, fuzzy
 msgid ""
 "@S last write time (%t,\n"
@@ -1138,53 +1168,53 @@ msgid ""
 msgstr "Süperblokun son yazma zamanı gelecekte.  "
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
+#: e2fsck/problem.c:356
 #, c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "harici süperbloku %X olması gereken dosyasistemi için süperblok iması"
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:361
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
 msgstr ""
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:366
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr ""
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:371
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr ""
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:376
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr ""
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:381
 msgid "Last @g @b @B uninitialized.  "
 msgstr ""
 
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:386
 #, c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr ""
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:391
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr ""
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:396
 msgid ""
 "@S last mount time is in the future.\n"
 "\t(by less than a day, probably due to the hardware clock being incorrectly "
@@ -1194,7 +1224,7 @@ msgstr ""
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:402
 msgid ""
 "@S last write time is in the future.\n"
 "\t(by less than a day, probably due to the hardware clock being incorrectly "
@@ -1202,187 +1232,206 @@ msgid ""
 msgstr ""
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:408
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr ""
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:413
 #, fuzzy
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Yedek blok sayısı %lu olarak belirleniyor\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:418
 #, fuzzy
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Yedek blok sayısı %lu olarak belirleniyor\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:423
 #, fuzzy
-msgid "Making @q @i %i (%Q) hidden.\n"
+msgid "Hiding %U @q @i %i (%Q).\n"
 msgstr ""
 "Günlük /%s den gizli düğüme taşınıyor.\n"
 "\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:428
 #, fuzzy
 msgid "@S has invalid MMP block.  "
 msgstr "blok uzunluğu hatalı - %s"
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:433
 msgid "@S has invalid MMP magic.  "
 msgstr ""
 
-#: e2fsck/problem.c:433
+#: e2fsck/problem.c:438
 #, c-format
 msgid "ext2fs_open2: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:438
+#: e2fsck/problem.c:443
 #, c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr ""
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
+#: e2fsck/problem.c:449
 msgid ""
 "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
 "simultaneously."
 msgstr ""
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:455
 #, fuzzy
-msgid "@S MMP block checksum does not match MMP block.  "
+msgid "@S MMP @b checksum does not match.  "
 msgstr "Süperblokların bulunduğu bloklar:"
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:460
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr ""
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:465
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr ""
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:470
 #, fuzzy
 msgid "External @j @S checksum does not match @S.  "
 msgstr "Süperblokların bulunduğu bloklar:"
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:475
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr ""
 
-#: e2fsck/problem.c:477
+#: e2fsck/problem.c:480
 #, c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr ""
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:485
 msgid "Bad required extra isize in @S (%N).  "
 msgstr ""
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:490
 msgid "Bad desired extra isize in @S (%N).  "
 msgstr ""
 
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:495
+#, fuzzy
+msgid "Invalid %U @q @i %i.  "
+msgstr "artık düğüm %i sıfır uzunlukta.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:500
+msgid "@S would have too many inodes (%N).\n"
+msgstr ""
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:505
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
+msgstr ""
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:513
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "1. geçiş: düğümler, bloklar ve uzunluklar denetleniyor\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:517
 msgid "@r is not a @d.  "
 msgstr "Kök düğümü bir dizin değil.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:522
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "Kök düğümü için dtime belirtilmiş (eski mke2fs'den dolayı olabilir).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:527
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Yedek düğüm %i (%Q) hatalı kip içeriyor.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:532
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "Silinen düğüm %i sıfır dtime içeriyor.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:537
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "Düğüm %i kullanımda, ama dtime belirtilmiş.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:542
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "Düğüm %i bir sıfır uzunluklu dizindir.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:547
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr ""
 "%g grubunun %b deki blok biteşlemi diğer dosya sistemi blokları ile "
 "çelişiyor.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:552
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr ""
 "%g grubunun %b deki düğüm biteşlemi diğer dosya sistemi blokları ile "
 "çelişiyor.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:557
 msgid "@g %g's @i table at %b @C.\n"
 msgstr ""
 "%g grubunun %b deki düğüm tablosu diğer dosya sistemi blokları ile "
 "çelişiyor.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:562
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "%g grubunun blok biteşlemi (%b) hatalı.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:567
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "%g grubunun düğüm biteşlemi (%b) hatalı.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:572
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "Düğüm %i düğüm uzunluğu %Is, %N olmalıydı.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:577
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "Dosya düğüm %i, blok düğümü %Ib, %N olmalıydı.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:582
 #, fuzzy
 msgid "@I %B (%b) in @i %i.  "
 msgstr "Düğüm %i içindeki blok #%B (%b) kuraldışı.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:587
 #, fuzzy
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr ""
@@ -1390,35 +1439,35 @@ msgstr ""
 "taşıyor.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "Düğüm %i kuraldışı blok(lar) içeriyor.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Düğüm %i içinde çok fazla kuraldışı blok.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:602
 #, fuzzy
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "Hatalı blok düğümü içindeki blok %B (%b) kuraldışı.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:607
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "Hatalı blok düğümü kuraldışı blok(lar) içeriyor.  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:612
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Tekrarlanmış ya da hatalı blok kullanımda!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:617
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "Hatalı blok %b, hatalı blok düğümü dolaylı bloğu olarak kullanılmış."
 
@@ -1426,7 +1475,7 @@ msgstr "Hatalı blok %b, hatalı blok düğümü dolaylı bloğu olarak kullanı
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:622
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1440,7 +1489,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:629
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1451,7 +1500,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:634
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1462,131 +1511,131 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:640
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Birincil dosya sistemi (%b) hatalı bloklar listesinde kayıtlı.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:645
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 "Birincil grup tanımlarındaki blok %b, hatalı bloklar listesinde kayıtlı\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:651
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Uyarı: %g grubunun superbloğu (%b) hatalı.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:657
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 "Uyarı %g grubunun grup tanımları kopyası bir hatalı blok içeriyor (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:663
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 "Programlama hatası?  blok %b, hatalı blok işleminde sebepsiz olarak talep "
 "edildi.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:669
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr ""
 "%s için %g blok grubunda %N bitişik bloğa yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:674
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "%s tekrar konumlaması için blok tamponuna yer ayrılırken hata oluştu\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:679
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "%g grubunun %s %b den %c ye aktarılıyor...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:684
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "%g grubunun %s %c ye aktarılıyor...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:689
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Uyarı: %snin %b bloğu okunamadı: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:694
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Uyarı: %snin %b bloğu yazılamadı: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:699 e2fsck/problem.c:1776
 msgid "@A @i @B (%N): %m\n"
 msgstr "Düğüm biteşlemi (%N) ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:704
 msgid "@A @b @B (%N): %m\n"
 msgstr "Düğüm biteşlemi (%N) ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:709
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "Düğüm sayısı bağ bilgisine yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:714
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "Dizin bloğu dizisine yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
+#: e2fsck/problem.c:719
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Düğümler (%i) taranırken hata oluştu: %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
+#: e2fsck/problem.c:724
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr ""
 "Düğüm %i içindeki bloklar üzerinde işlemler tekrarlanırken hata oluştu: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:729
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 "Düğüm sayısı bilgisi (düğüm = %i, sayısı = %N)\n"
 "saklanırken hata oluştu: %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:734
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 "Dizin bloğu bilgisi (düğüm = %i, blok = %b, num = %N)\n"
 "saklanırken hata oluştu: %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
+#: e2fsck/problem.c:740
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Düğüm %i okunurken hata oluştu: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:748
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "Düğüm %i imagic bayrağı içeriyor.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:753
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1596,113 +1645,113 @@ msgstr ""
 "salt-eklenir ya da değişmez bayrağı içeriyor.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
+#: e2fsck/problem.c:759
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Özel (aygıt/soket/fifo) düğüm %i sıfırdan farklı boyutta.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:769
 msgid "@j @i is not in use, but contains data.  "
 msgstr "Günlük düğümü kullanımda değil ama veri içeriyor.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:774
 msgid "@j is not regular file.  "
 msgstr "Günlük dosyası normal bir dosya değil.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:779
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "Düğüm %i öksüz düğüm listesinin parçasıydı.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:785
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr "Bozuk bir artık bağlı listenin bir parçasını bulunduran düğümler.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:790
 msgid "@A refcount structure (%N): %m\n"
 msgstr "refcount veri yapısı için yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:795
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Düğüm %i için ek özellik bloğu %b okunurken hata oluştu.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:800
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "Düğüm %i %b hatalı ek özellik bloğunu içeriyor.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:805
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Ek özellik bloğu %b okunurken hata oluştu (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:810
 #, fuzzy
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "Ek özellikler bloğu %b %B başvuru sayısına sahip, %N olmalıydı.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:815
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Ek özellik bloğu %b yazılırken hata oluştu (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:820
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "Ek özellikler bloğu %b için  h_blocks > 1.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:825
 #, fuzzy
 msgid "@A @a region allocation structure.  "
 msgstr "icount veri yapısı için yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:830
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "Ek özellik bloğu %b bozuk (tahsis çatışması).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:835
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "Ek özellikler bloğu %b bozuk (geçersiz isim).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:840
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "Ek özellikler bloğu %b bozuk (geçersiz değer).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
+#: e2fsck/problem.c:845
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "düğüm %i çok büyük.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:849
 #, fuzzy
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "Blok #%B (%b) çok büyük dizin oluşturuyor.  "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:854
 #, fuzzy
 msgid "%B (%b) causes file to be too big.  "
 msgstr "Blok #%B (%b) çok büyük dosya oluşturuyor.  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:859
 #, fuzzy
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "Blok #%B (%b) çok büyük sembolik bağ oluşturuyor.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:864
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
@@ -1710,37 +1759,37 @@ msgstr ""
 "içeriyor.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
+#: e2fsck/problem.c:869
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "Düğüm %i INDEX_FL bayrağı içeriyor ama o bir dizin değil.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
+#: e2fsck/problem.c:874
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "HTREE dizin düğümü %i geçersiz bir kök düğümü içeriyor.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:879
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "HTREE dizin düğümü %i desteklenmeyen bir hash sürümü (%N) içeriyor.\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
+#: e2fsck/problem.c:884
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr ""
 "HTREE dizin düğümü %i uyumsuz bir htree kök düğümü bayrağı kullanıyor.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:889
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "HTREE dizin düğümü %i çok büyük bir ağaç derinliğine (%N) sahip\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:895
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1749,50 +1798,50 @@ msgstr ""
 "bir dolaylı blok (%b) içeriyor."
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
+#: e2fsck/problem.c:901
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Düğümü boyutlandırmak için (tekrar) oluşturma başarısız: %m"
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:906
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "%i. düğüm geçersiz bir ek boyut içeriyor (%IS)\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:911
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "%i. düğümdeki ek özellik geçersiz bir isim alanı içeriyor (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:916
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "%i. düğümdeki ek özellik geçersiz bir değer başlangıcı içeriyor (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:921
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr ""
 "%i. düğümdeki ek özellik geçersiz bir değer bloğu içeriyor (%N), 0 olmalı\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:926
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "%i. düğümdeki ek özellik geçersiz bir değer içeriyor (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:931
 #, fuzzy
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "%i. düğümdeki ek özellik geçersiz bir isim alanı içeriyor (%N)\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:936
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "@i %i bir %It ancak gerçekten bir dizin gibi görünüyor.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
+#: e2fsck/problem.c:941
 #, fuzzy, c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr ""
@@ -1800,7 +1849,7 @@ msgstr ""
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:946
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1808,7 +1857,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:952
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1816,14 +1865,14 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:957
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
+#: e2fsck/problem.c:962
 #, fuzzy, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr ""
@@ -1831,107 +1880,107 @@ msgstr ""
 "içeriyor.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
+#: e2fsck/problem.c:967
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr ""
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
+#: e2fsck/problem.c:972
 #, c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr ""
 
-#: e2fsck/problem.c:956
+#: e2fsck/problem.c:977
 #, c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr ""
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:982
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:986
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr ""
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
+#: e2fsck/problem.c:991
 #, fuzzy, c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Dizin blokları yinelenirken hata: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:996
 #, fuzzy
-msgid "@q @i is not regular file.  "
+msgid "@q @i is not regular file.  "
 msgstr "Günlük dosyası normal bir dosya değil.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1001
 #, fuzzy
 msgid "@q @i is not in use, but contains data.  "
 msgstr "Günlük düğümü kullanımda değil ama veri içeriyor.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1006
 #, fuzzy
 msgid "@q @i is visible to the user.  "
 msgstr "Düğüm %i kullanımda, ama dtime belirtilmiş.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1011
 #, fuzzy
 msgid "The bad @b @i looks @n.  "
 msgstr "<Hatalı bloklar düğümü>"
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1016
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
+#: e2fsck/problem.c:1021
 #, fuzzy, c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "düğüm %i çok büyük.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
+#: e2fsck/problem.c:1026
 #, c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr ""
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
+#: e2fsck/problem.c:1031
 #, fuzzy, c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "Ek özellik bloğu %b bozuk (tahsis çatışması).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1039
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1048
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
 msgstr ""
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1053
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1939,20 +1988,20 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1059
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
+#: e2fsck/problem.c:1064
 #, c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
+#: e2fsck/problem.c:1069
 #, fuzzy, c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
 msgstr ""
@@ -1960,40 +2009,40 @@ msgstr ""
 "içeriyor.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
+#: e2fsck/problem.c:1076
 msgid ""
 "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
 msgstr ""
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1081
 #, fuzzy
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "Düğüm %i %b hatalı ek özellik bloğunu içeriyor.  "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
+#: e2fsck/problem.c:1086
 #, fuzzy, c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "Dizin düğümü %i bir ayrılmayan blok #%B içeriyor.  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1091
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
+#: e2fsck/problem.c:1096
 #, fuzzy, c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
 msgstr "Düğüm %i INDEX_FL bayrağı içeriyor ama o bir dizin değil.\n"
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
+#: e2fsck/problem.c:1102
 #, fuzzy, c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
@@ -2003,80 +2052,99 @@ msgstr ""
 "salt-eklenir ya da değişmez bayrağı içeriyor.  "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1108
 #, c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1113
 #, c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr ""
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
 msgstr ""
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
 msgstr ""
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1128
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr ""
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1133
 #, fuzzy
 msgid "@A @x region allocation structure.  "
 msgstr "icount veri yapısı için yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1138
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1143
 msgid "@A memory for encrypted @d list\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1148
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr ""
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1153
 #, c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr ""
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
+#: e2fsck/problem.c:1158
 #, fuzzy, c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "Ek özellikler bloğu %b bozuk (geçersiz isim).  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
+#: e2fsck/problem.c:1163
 #, c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr ""
 
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1168
+#, fuzzy
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "Düğüm %i %b hatalı ek özellik bloğunu içeriyor.  "
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1174
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr ""
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1179
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1187
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2088,24 +2156,24 @@ msgstr ""
 "Geçiş 1B: Çok düğümlü bloklar yeniden taranıyor\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
+#: e2fsck/problem.c:1193
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "Düğüm %i içinde çok düğümlü bloklar var:"
 
-#: e2fsck/problem.c:1172
+#: e2fsck/problem.c:1208
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Düğümler (%i) taranırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
+#: e2fsck/problem.c:1213
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "Düğüm biteşlemi (inode_dup_map) için yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
+#: e2fsck/problem.c:1218
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr ""
@@ -2113,25 +2181,25 @@ msgstr ""
 "hata oluştu (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1223 e2fsck/problem.c:1585
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 "Ek özellikler bloğu %b (düğüm %i) için refcount ayarlanırken hata oluştu: "
 "%m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1233
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Geçiş 1C: Tekrarlanan blokların düğümleri için dizinler taranıyor.\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1239
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Geçiş 1D: Çok düğümlü bloklar yeniden hallediliyor\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1244
 #, fuzzy
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
@@ -2141,18 +2209,18 @@ msgstr ""
 "  %N dosya ile paylaşımlı, çok düğümlü %B blok içeriyor:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1250
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (düğüm %i, değişiklik zamanı %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1255
 msgid "\t<@f metadata>\n"
 msgstr "\t<dosya sistemi metaverisi>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1260
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2162,7 +2230,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1265
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2170,348 +2238,349 @@ msgstr ""
 "Çok düğümlü bloklar zaten yeniden atanmış ya da kopyalanmıştı.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
+#: e2fsck/problem.c:1278
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Dosya kopyalanamadı: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1284
 #, fuzzy
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Pass 3A: Dizinler eniyileniyor\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
+#: e2fsck/problem.c:1289
 #, fuzzy, c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Dizin %q (%d) eniyilenemedi: %m"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1294
 #, fuzzy
 msgid "Optimizing @x trees: "
 msgstr "Eniyilenen dizinler: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1309
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1314
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr ""
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1319
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr ""
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1326
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Geçiş 2: Dizin yapısı denetleniyor\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1331
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Dizin düğümü %i içindeki '.' için düğüm numarası geçersiz.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1336
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E hatalı düğüm numarası içeriyor: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1341
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E silinmiş/kullanılmayan düğüm %Di içeriyor.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1346
 msgid "@E @L to '.'  "
 msgstr "@E '.' ya bir bağdır.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1351
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E bir hatalı blok içindeki düğümü (%Di) gösteriyor.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1356
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E dizin %P (%Di) için bir bağdır.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1361
 msgid "@E @L to the @r.\n"
 msgstr "@E kök düğümüne bir bağdır.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1366
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E isminde kuraldışı karakterler içeriyor.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
+#: e2fsck/problem.c:1371
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Dizin düğümü %i içinde '.' eksik.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
+#: e2fsck/problem.c:1376
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Dizin düğümü %i içinde '..' eksik.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1381
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr ""
 "Dizin düğümü %i (%p) içindeki ilk girdi '%Dn' (düğüm=%Di) '.' olmalıydı.\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1386
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr ""
 "Dizin düğümü %i içindeki ikinci girdi '%Dn' (düğüm=%Di) '..' olmalıydı.\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1391
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "düğüm %i (%Q) %IF için i_faddr, sıfır olmalı.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1396
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "düğüm %i (%Q) %If için i_file_acl, sıfır olmalı.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "düğüm %i (%Q) %Id için i_dir_acl, sıfır olmalı.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1401
+#, fuzzy
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "düğüm %i (%Q)  %N için i_fsize, sıfır olmalı.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1406
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "düğüm %i (%Q) %N için i_frag, sıfır olmalı.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1411
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "düğüm %i (%Q)  %N için i_fsize, sıfır olmalı.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1416
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "Düğüm %i (%Q) bir hatalı kip (%Im) içeriyor.\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1421
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "Dizin düğümü %i, blok %B, konum %N: dizin bozuk\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1426
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "Dizin düğümü %i, blok %B, konum %N: dosya ismi çok uzun\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1431
 #, fuzzy
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "Dizin düğümü %i bir ayrılmayan blok #%B içeriyor.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
+#: e2fsck/problem.c:1436
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Dizin düğümü %i deki '.' dizin girdisi NULL sonlandırmalı değil\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
+#: e2fsck/problem.c:1441
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Dizin düğümü %i deki '..' dizin girdisi NULL sonlandırmalı değil\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1446
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "Düğüm %i (%Q) bir kuraldışı karakter aygıtı.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1451
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "Düğüm %i (%Q) bir kuraldışı blok aygıtı.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1456
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E tekrarlayan '.' girdisi içeriyor.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1461
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E tekrarlayan '..' girdisi içeriyor.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
+#: e2fsck/problem.c:1466 e2fsck/problem.c:1801
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "İç hata: %i için dizin bilgileri bulunamıyor.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1471
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E %Dr kayıt uzunluğunda, %N olmalıydı.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
+#: e2fsck/problem.c:1476
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "icount veri yapısı için yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
+#: e2fsck/problem.c:1481
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Dizin blokları yinelenirken hata: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1486
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Dizin bloğu %b (düğüm %i) okunurken hata oluştu: %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1491
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Dizin bloğu %b (düğüm %i) yazılırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
+#: e2fsck/problem.c:1496
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "Düğüm %i için yeni dizin bloku ayrılırken hata oluştu (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
+#: e2fsck/problem.c:1501
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Düğüm %i bırakılırken hata: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
+#: e2fsck/problem.c:1506
 #, fuzzy, c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "'.' için dizin girdisi büyük.  "
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1511
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "Düğüm %i (%Q) bir kuraldışı FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1516
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "Düğüm %i (%Q) bir kuraldışı soket.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1521
 msgid "Setting filetype for @E to %N.\n"
 msgstr "@E için dosya türü %N olarak belirleniyor.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1526
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E yanlış dosya türünde (%Dt idi, %N olmalıydı).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1531
 msgid "@E has filetype set.\n"
 msgstr "@E için dosya türü belirtilmiş.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1536
 msgid "@E has a @z name.\n"
 msgstr "@Enin ismi sıfır uzunlukta.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1541
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "%Q sembolik bağı (düğüm %i) geçersiz.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1546
 msgid "@a @b @F @n (%If).\n"
 msgstr "@F ek özellik bloğu geçersiz (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1551
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 "Dosya sistemi çok büyük dosyalar içeriyor, ama süperblokta LARGE_FILE "
 "bayrağı yok\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1556
 #, fuzzy
 msgid "@p @h %d: %B not referenced\n"
 msgstr "HTREE dizin düğümü %d içinde sorun: düğüm (%B) referanssız\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1561
 #, fuzzy
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "HTREE dizin düğümü %d içinde sorun: düğüm (%B) iki kere referanslı\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1566
 #, fuzzy
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr ""
 "HTREE dizin düğümü %d içinde sorun: düğüm (%B) hatali asgari hash içeriyor\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1571
 #, fuzzy
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr ""
 "HTREE dizin düğümü %d içinde sorun: düğüm (%B)  hatali azami hash içeriyor\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1576
 msgid "@n @h %d (%q).  "
 msgstr "HTREE dizin düğümü %d (%q) geçersiz.  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1580
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "HTREE dizin düğümü %d içinde sorun: blok numarası %b hatalı.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
+#: e2fsck/problem.c:1590
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "HTREE dizin düğümü %d içinde sorun: kök düğümü geçersiz\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1595
 #, fuzzy
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr ""
 "HTREE dizin düğümü %d içinde sorun: düğüm (%B) hatalı sınır (%N) içeriyor\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1600
 #, fuzzy
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr ""
 "HTREE dizin düğümü %d içinde sorun: düğüm (%B) hatalı sayım (%N) içeriyor.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1605
 #, fuzzy
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr ""
@@ -2519,20 +2588,20 @@ msgstr ""
 "içeriyor\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1610
 #, fuzzy
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr ""
 "HTREE dizin düğümü %d içinde sorun: düğüm (%B) geçersiz derinlik içeriyor\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1615
 msgid "Duplicate @E found.  "
 msgstr "Yinelenmiş @E bulundu.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1620
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2544,7 +2613,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1625
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2555,125 +2624,125 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1630
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi @F %N, @s sıfır.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1635
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "Beklenmeyen @b, @h içinde %d (%q).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1639
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1644
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr ""
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1649
 #, fuzzy
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "düğüm %i (%Q) %If için i_file_acl, sıfır olmalı.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
+#: e2fsck/problem.c:1654
 #, fuzzy, c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr "HTREE dizin düğümü %d içinde sorun: kök düğümü geçersiz\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
+#: e2fsck/problem.c:1659
 #, fuzzy, c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr "HTREE dizin düğümü %d içinde sorun: kök düğümü geçersiz\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1664
 #, fuzzy
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "Dizin düğümü %i, blok %B, konum %N: dizin bozuk\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1669
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr ""
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1674
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr ""
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
+#: e2fsck/problem.c:1679
 #, c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr ""
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1684
 msgid "Encrypted @E is too short.\n"
 msgstr ""
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1691
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Geçiş 3: Dizin bağlanabilirliği denetleniyor\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1696
 msgid "@r not allocated.  "
 msgstr "Kök düğümü tahsisli değil.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1701
 msgid "No room in @l @d.  "
 msgstr "lost+found dizininde yer yok.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
+#: e2fsck/problem.c:1706
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Dizin düğümü %i (%p) bağlantısız\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1711
 msgid "/@l not found.  "
 msgstr "/lost+found dizini yok.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1716
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "%Q (%i) daki '..' %P (%j), süperblok %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1721
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "/lost+found dizini ya yok ya da hatalı. tekrar bağlanılamıyor.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
+#: e2fsck/problem.c:1726
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "/lost+found dizini genişletilemiyor: %m\n"
 
-#: e2fsck/problem.c:1695
+#: e2fsck/problem.c:1731
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "%i ye tekrar bağlanılamıyor: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
+#: e2fsck/problem.c:1736
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "/lost+found dizini bulunmaya çalışılırkan hata oluştu: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
+#: e2fsck/problem.c:1741
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr ""
@@ -2681,7 +2750,7 @@ msgstr ""
 "/lost+found dizini oluşturulmaya çalışılırkan hata oluştu.\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
+#: e2fsck/problem.c:1746
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr ""
@@ -2689,7 +2758,7 @@ msgstr ""
 "/lost+found dizini oluşturulmaya çalışılırkan hata oluştu.\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
+#: e2fsck/problem.c:1751
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr ""
@@ -2697,7 +2766,7 @@ msgstr ""
 "yeni dizin bloğu oluşturulurken hata.\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
+#: e2fsck/problem.c:1756
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr ""
@@ -2705,14 +2774,14 @@ msgstr ""
 "/lost+found için dizin bloğu yazılırken hata oluştu.\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
+#: e2fsck/problem.c:1761
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Düğüm %i üzerinde düğüm sayısı ayarlanırken hata oluştu\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
+#: e2fsck/problem.c:1766
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2723,7 +2792,7 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
+#: e2fsck/problem.c:1771
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2733,41 +2802,41 @@ msgstr ""
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
+#: e2fsck/problem.c:1781
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Kök dizini oluşturulurken hata (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
+#: e2fsck/problem.c:1786
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "/lost+found dizini oluşturulurken hata (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1791
 msgid "@r is not a @d; aborting.\n"
 msgstr "Kök düğümü bir dizin değil; çıkılıyor.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1796
 msgid "Cannot proceed without a @r.\n"
 msgstr "Bir kök düğümü olmaksızın işlenemez.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
+#: e2fsck/problem.c:1806
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/lost+found bir dizin değil (düğüm = %i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1811
 msgid "/@l has inline data\n"
 msgstr ""
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1816
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2776,7 +2845,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1821
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2784,53 +2853,53 @@ msgid ""
 msgstr ""
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1826
 msgid "/@l is encrypted\n"
 msgstr ""
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1833
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Pass 3A: Dizinler eniyileniyor\n"
 
-#: e2fsck/problem.c:1802
+#: e2fsck/problem.c:1838
 #, fuzzy, c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "dirs_to_hash yineleyici oluşturulamadı: %m"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1843
 #, fuzzy
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Dizin %q (%d) eniyilenemedi: %m"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1848
 msgid "Optimizing directories: "
 msgstr "Eniyilenen dizinler: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1865
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Geçiş 4: Başvuru sayısı denetleniyor\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
+#: e2fsck/problem.c:1870
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "artık düğüm %i sıfır uzunlukta.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
+#: e2fsck/problem.c:1875
 #, c-format
 msgid "@u @i %i\n"
 msgstr "artık düğüm %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1880
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "Düğüm %i için başvuru sayısı %Il, %N olmalıydı.  "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1884
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2842,59 +2911,70 @@ msgstr ""
 "inode_link_info[%i] = %N, inode.inode_links_count = %Il.\n"
 "Bunlar aynı olmalıydı!\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1891
+#, fuzzy
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "Düğüm %i için başvuru sayısı %Il, %N olmalıydı.  "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1896
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:1903
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "5. Geçiş: grup özet bilgileri denetleniyor\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:1908
 msgid "Padding at end of @i @B is not set. "
 msgstr "Düğüm biteşleminin sonundaki alan belirlenmemiş. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:1913
 msgid "Padding at end of @b @B is not set. "
 msgstr "Blok biteşleminin sonundaki alan belirlenmemiş. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:1918
 msgid "@b @B differences: "
 msgstr "blok biteşlemi farkları: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:1938
 msgid "@i @B differences: "
 msgstr "düğüm biteşlemi farkları: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:1958
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "%g. grup için serbest düğüm sayısı yanlış (%i, sayılan = %j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:1963
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "%g. grup için dizin sayısı yanlış (%i, sayılan = %j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:1968
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Serbest düğüm sayısı yanlış (%i, sayılan = %j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:1973
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "%g. grup için serbest blok sayısı yanlış (%b, sayılan = %c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:1978
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Serbest blok sayısı yanlış (%b, sayılan = %c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
+#: e2fsck/problem.c:1983
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
@@ -2902,87 +2982,86 @@ msgstr ""
 "PROGRAMLAMA HATASI: dosya sistemi (#%N) biteşlem sınırları (%b, %c)\n"
 "ile hesaplanan biteşlem sınırları (%i, %j) uyuşmuyor\n"
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:1989
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "İç hata: biteşlemin sonunda bozulma (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
+#: e2fsck/problem.c:1994
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Yedek düğüm biteşleminde kopyalama hatası: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
+#: e2fsck/problem.c:1999
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Yedek blok biteşleminde kopyalama hatası: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
+#: e2fsck/problem.c:2024
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
+#: e2fsck/problem.c:2029
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr ""
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
+#: e2fsck/problem.c:2034
 #, c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
+#: e2fsck/problem.c:2039
 #, c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr ""
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2046
 #, fuzzy
 msgid "Recreate @j"
 msgstr "Yeniden oluştur"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2051
 msgid "Update quota info for quota type %N"
 msgstr ""
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
+#: e2fsck/problem.c:2056
 #, fuzzy, c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "- hatalı blok düğümü belirlenirken hata oluştu"
 
-#: e2fsck/problem.c:2016
+#: e2fsck/problem.c:2061
 #, fuzzy, c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Düğüm %i okunurken hata oluştu: %m\n"
 
-#: e2fsck/problem.c:2021
+#: e2fsck/problem.c:2066
 #, c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:2026
-#, fuzzy
+#: e2fsck/problem.c:2071
 msgid "Error writing quota info for quota type %N: %m\n"
-msgstr "Düğüm %i okunurken hata oluştu: %m\n"
+msgstr ""
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2194
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Elde edilemeyen hata kodu ((0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2320 e2fsck/problem.c:2324
 msgid "IGNORED"
 msgstr "YOKSAYILDI"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr ""
 
@@ -3004,21 +3083,21 @@ msgstr "- düğüm taraması başlatılırken hata oluştu"
 msgid "while doing inode scan"
 msgstr "- düğüm taraması yapılırken hata oluştu"
 
-#: e2fsck/super.c:190
-#, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
+#: e2fsck/super.c:224
+#, fuzzy, c-format
+msgid "while calling ext2fs_block_iterate for inode %u"
 msgstr "Düğüm %d için ext2fs_block_iterate işlevi çağrılırken hata oluştu"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, fuzzy, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
 msgstr "Düğüm %d için ext2fs_block_iterate işlevi çağrılırken hata oluştu"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Kırpılıyor"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Temizleniyor"
 
@@ -3099,12 +3178,12 @@ msgstr ""
 "   -L hatalı_bloklar_dosyası hatalı bloklar listesi belirtilen dosyadakiler\n"
 "                             ile oluşturulur\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:136
 #, fuzzy, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %d/%d dosya (%%%0d.%d yanyana olmayan düğüm), %u/%u blok\n"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:162
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3119,51 +3198,51 @@ msgstr[1] ""
 "\n"
 "%8d düğüm kullanıldı (%%%d)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:166
 #, fuzzy, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
 msgstr[0] "%8d bitişik olmayan düğüm (%%%0d.%d)\n"
 msgstr[1] "%8d bitişik olmayan düğüm (%%%0d.%d)\n"
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:171
 #, fuzzy, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
 msgstr[0] "%8d bitişik olmayan düğüm (%%%0d.%d)\n"
 msgstr[1] "%8d bitişik olmayan düğüm (%%%0d.%d)\n"
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:176
 #, fuzzy, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "         ind/dind/tind bloklarının düğüm sayıları: %d/%d/%d\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:184
 msgid "             Extent depth histogram: "
 msgstr ""
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:193
 #, fuzzy, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
 msgstr[0] "%8d blok kullanıldı (%%%d)\n"
 msgstr[1] "%8d blok kullanıldı (%%%d)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:197
 #, fuzzy, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%8d hatalı blok\n"
 msgstr[1] "%8d hatalı blok\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:199
 #, fuzzy, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] "%8d büyük dosya\n"
 msgstr[1] "%8d büyük dosya\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:201
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3178,96 +3257,96 @@ msgstr[1] ""
 "\n"
 "%8d normal dosya\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:203
 #, fuzzy, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%8d dizin\n"
 msgstr[1] "%8d dizin\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:205
 #, fuzzy, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
 msgstr[0] "%8d karakter aygıtı dosyası\n"
 msgstr[1] "%8d karakter aygıtı dosyası\n"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:208
 #, fuzzy, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
 msgstr[0] "%8d blok aygıtı dosyası\n"
 msgstr[1] "%8d blok aygıtı dosyası\n"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:210
 #, fuzzy, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%8d fifo\n"
 msgstr[1] "%8d fifo\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:212
 #, fuzzy, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%8d bağ\n"
 msgstr[1] "%8d bağ\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:214
 #, fuzzy, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%8d sembolik bağ"
 msgstr[1] "%8d sembolik bağ"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:216
 #, fuzzy, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%d hızlı sembolik bağ)\n"
 msgstr[1] " (%d hızlı sembolik bağ)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:220
 #, fuzzy, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%8d soket\n"
 msgstr[1] "%8d soket\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:224
 #, fuzzy, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%8d dosya\n"
 msgstr[1] "%8d dosya\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:237 misc/badblocks.c:1002 misc/tune2fs.c:3022 misc/util.c:126
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "- %s'in bağlı olup olmadığı saptanmaya çalışılırken hata oluştu."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:258
 #, fuzzy, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Uyarı!  %s bağlı.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:261
 #, fuzzy, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Uyarı!  %s bağlı.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:267
 #, fuzzy, c-format
 msgid "%s is mounted.\n"
 msgstr "%s bağlandı.  "
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:269
 #, fuzzy, c-format
 msgid "%s is in use.\n"
 msgstr "%s bağlandı.  "
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:271
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3275,7 +3354,7 @@ msgstr ""
 "Devam edilemiyor. çıkılıyor.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:273
 #, fuzzy
 msgid ""
 "\n"
@@ -3290,83 +3369,108 @@ msgstr ""
 "ÇOK CİDDİ hasarlara sebep olabilir.****\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:278
 msgid "Do you really want to continue"
 msgstr "Gerçekten devam etmek istiyor musunuz?"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:280
 msgid "check aborted.\n"
 msgstr "denetim durdu.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:374
 msgid " contains a file system with errors"
 msgstr " hatalı bir dosya sistemi içeriyor"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:376
 msgid " was not cleanly unmounted"
 msgstr " usulünce sistemden ayrılmamış"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:378
 msgid " primary superblock features different from backup"
 msgstr " birincil süperblok özellikleri yedeklemeden farklı"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:382
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " denetlenmeksizin %u kere bağlandı"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:389
 #, fuzzy
 msgid " has filesystem last checked time in the future"
 msgstr "Dosya sisteminin son denetim zamanı %s yapılıyor\n"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:395
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " denetlenmeksizin %u gün geçti"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:403
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:409
 msgid ", check forced.\n"
 msgstr ", denetim başlatılacak.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:442
 #, fuzzy, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: temiz, %d/%d dosya, %u/%u blok"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:462
 msgid " (check deferred; on battery)"
 msgstr " (denetleme ertelendi; batarya)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:465
 msgid " (check after next mount)"
 msgstr " (sistem bağlandıktan sonra denetle)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:467
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (sistem %ld kere bağlandığında denetle)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:617
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "HATA: /dev/null açılamadı (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:688
 msgid "Invalid EA version.\n"
 msgstr "Ek özellik sürümü geçersiz.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:701
 #, fuzzy
 msgid "Invalid readahead buffer size.\n"
 msgstr "Yeniden boyutlama parametresi geçersiz: %s\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:750
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Bilinmeyen ek seçenek: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:758
+#, fuzzy
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"Belirtilen ek seçenekler hatalı. Ek seçenekler '=' işaretli çiftler\n"
+"virgüllerle ayrılarak verilir. Geçerli raid seçenekleri:\n"
+"\tea_ver=<ek_özellik_sürümü> (1 ya da 2)\n"
+"\n"
+
+#: e2fsck/unix.c:762
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr ""
+
+#: e2fsck/unix.c:771
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr ""
+
+#: e2fsck/unix.c:783
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3375,62 +3479,62 @@ msgstr ""
 "e2fsck yapılandırma dosyasında (%s, %d.satırda) sözdizimi hatası\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:856
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Dosya tanımlayıcı %d değerlendirilirken hata: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:860
 msgid "Invalid completion information file descriptor"
 msgstr "Tamamlama bilgisi dosya tanımlayıcısı geçersiz"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:875
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Sadece -p/-a, -n veya -y seçeneklerinden sadece biri belirtilebilir."
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:896
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr " -t seçeneği e2fsck'nın bu sürümünde desteklenmiyor.\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:927 e2fsck/unix.c:1005 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1741 misc/tune2fs.c:2036 misc/tune2fs.c:2054
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "'%s' çözümlenemiyor"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:984
 msgid "The -n and -D options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:989
 msgid "The -n and -c options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:994
 #, fuzzy
 msgid "The -n and -l/-L options are incompatible."
 msgstr ""
 " -c seçeneği ile -l ve -L seçenekleri aynı anda birlikte kullanılamaz.\n"
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1018
 #, fuzzy
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr ""
 " -c seçeneği ile -l ve -L seçenekleri aynı anda birlikte kullanılamaz.\n"
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1024
 #, fuzzy
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr ""
 " -c seçeneği ile -l ve -L seçenekleri aynı anda birlikte kullanılamaz.\n"
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1088
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr ""
 " -c seçeneği ile -l ve -L seçenekleri aynı anda birlikte kullanılamaz.\n"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1135
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3439,7 +3543,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG \"%s\" bir tamsayı değil\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1144
 #, c-format
 msgid ""
 "\n"
@@ -3450,32 +3554,33 @@ msgstr ""
 "Sayısal olmayan geçersiz bağımsız değişken, -%c (\"%s\")\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1235
 #, c-format
 msgid ""
 "MMP interval is %u seconds and total wait time is %u seconds. Please "
 "wait...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1252 e2fsck/unix.c:1257
 #, fuzzy
 msgid "while checking MMP block"
 msgstr "- süperblok ayarlanırken hata oluştu"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1259
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1275
 #, fuzzy
 msgid "while reading MMP block"
 msgstr "- hatalı bloklar düğümü okunmaya çalışılırken hata oluştu"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1295 e2fsck/unix.c:1347 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2613 misc/mke2fs.c:2664 misc/tune2fs.c:2754
+#: misc/tune2fs.c:2799 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3483,60 +3588,60 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1336 misc/e2undo.c:270 misc/mke2fs.c:2653 misc/tune2fs.c:2788
+#: resize/main.c:222
 #, fuzzy, c-format
 msgid "while trying to delete %s"
 msgstr "- %s yeniden boyutlandırılırken hata oluştu"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1362 misc/mke2fs.c:2679 resize/main.c:243
 #, fuzzy
 msgid "while trying to setup undo file\n"
 msgstr ""
 "\n"
 "\tgünlük dosyası oluşturulmaya çalışılırken hata oluştu"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1405
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Hata: ext2fs kitaplık sürümü uygun değil!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1412
 msgid "while trying to initialize program"
 msgstr "- uygulama başlatılmaya çelışılırken hata oluştu"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1435
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\t%s, %s kullanılıyor\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1447
 msgid "need terminal for interactive repairs"
 msgstr "etkileşimli onarım için uçbirim gerekli"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1508
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s blokları yedeklemeye çalışıyor...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1510
 msgid "Superblock invalid,"
 msgstr "Süperblok geçersiz,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1511
 msgid "Group descriptors look bad..."
 msgstr "Grup tanımlayıcılar hatalı görünüyor..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1521
 #, fuzzy, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "- hatalı bloklar düğümü okunurken hata oluştu"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1525
 #, fuzzy, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: geçerli gümlük dosyası super bloğu yok\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1554
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3546,31 +3651,31 @@ msgstr ""
 "destekliyor gibi. (Ya da dosya sisteminin süperbloğu bozuk olabilir)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1561
 msgid "Could this be a zero-length partition?\n"
 msgstr "Bu sıfır uzunluklu bir disk bölümü olabilir mi?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1563
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Dosya sistemine %s erişiminiz olmalı ya da root olmalısınız\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1569
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Bu mevcut olmayan bir aygıt ya da bir takas aygıtı mı acaba?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1571
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 "Dosyasistemi başka bir uygulama tarafından özellikle bağlanmış veya açılmış\n"
 "olabilir mi?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1575
 #, fuzzy
 msgid "Possibly non-existent device?\n"
 msgstr "Bu mevcut olmayan bir aygıt ya da bir takas aygıtı mı acaba?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1578
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3578,21 +3683,26 @@ msgstr ""
 "Disk yazma korumalı; -n seçeneğini kullanarak salt-oku kipinde\n"
 "denetim yapınız.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1592
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1667
 msgid "Get a newer version of e2fsck!"
 msgstr "e2fsck'nın daha yeni bir sürümünü alın!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1711
 #, fuzzy, c-format
 msgid "while checking journal for %s"
 msgstr "- %s için ext3 günlüğü denetlenirken hata oluştu"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1714
 #, fuzzy
 msgid "Cannot proceed with file system check"
 msgstr "Bir kök düğümü olmaksızın işlenemez.\n"
 
-#: e2fsck/unix.c:1661
+#: e2fsck/unix.c:1725
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
@@ -3600,50 +3710,50 @@ msgstr ""
 "Uyarı: Dosya sistemi salt-oku kipinde denetlendiğinden\n"
 "günlük dosyasına göre kurtarma atlanıyor.\n"
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1737
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "%s üzerine süperblok bayrakları konulamadı\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1743
 #, fuzzy, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Günlük süperbloğu yok!\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1747
 #, fuzzy, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "Günlük silindi\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1751
 #, fuzzy, c-format
 msgid "while recovering journal of %s"
 msgstr "- %s ext3 günlük dosyası kurtarılmaya çalışılırken hata oluştu"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1773
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s desteklenmeyen özellik(leri):"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1832
 #, fuzzy, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "- hatalı bloklar düğümü okunmaya çalışılırken hata oluştu"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1835
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Bu pek hayra alamet değil, ama üstüne gidilecek...\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1875
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Günlük oluşturuluyor (%d blok): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1885
 msgid " Done.\n"
 msgstr " Tamamlandı.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1887
 #, fuzzy
 msgid ""
 "\n"
@@ -3652,24 +3762,38 @@ msgstr ""
 "\n"
 "*** günlük yeniden oluşturuldu - dosya sistemi yeniden ext3 ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1893
 msgid "aborted"
 msgstr "çıktı"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1895
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck durduruldu.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1922
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "e2fsck baştan başlıyor...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1926
 msgid "while resetting context"
 msgstr "- bağlam sıfırlanırken hata oluştu"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:1985
+#, fuzzy, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** DOSYA SİSTEMİ DEĞİŞTİRİLDİ *****\n"
+
+#: e2fsck/unix.c:1987
+#, fuzzy, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s Dosya sisteminde baytlar zaten normal.\n"
+
+#: e2fsck/unix.c:1991 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3678,12 +3802,12 @@ msgstr ""
 "\n"
 "%s: ***** DOSYA SİSTEMİ DEĞİŞTİRİLDİ *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:1996
 #, fuzzy, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** MAKİNAYI YENİDEN BAŞLATIN *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2006 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3694,51 +3818,51 @@ msgstr ""
 "%s: ********** UYARI: Dosya sistemi hala hatalı **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "eE"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197
 msgid "nN"
 msgstr "hH"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr ""
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr ""
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<e>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<h>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (e/h)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "durduruldu!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr ""
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "evet\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "hayır\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3747,7 +3871,7 @@ msgstr ""
 "%s? hayır\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3756,39 +3880,39 @@ msgstr ""
 "%s? evet\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "evet"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "hayır"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: %s için biteşlem blokları kuraldışı"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "düğüm ve blok biteşlemleri okunuyor"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "- %s için biteşlemlerin okunması yinelenirken hata oluştu"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 #, fuzzy
 msgid "writing block and inode bitmaps"
 msgstr "blok biteşlemleri yazılıyor"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, fuzzy, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "- %s için düğüm biteşlemlerinin yazılması yinelenirken hata oluştu"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3801,51 +3925,51 @@ msgstr ""
 "%s: BEKLENMEYEN UYGUNSUZLUK; fsck ÇALIŞTIRMALISINIZ.\n"
 "\t(-a ve -p seçeneklerini kullanmadan)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, fuzzy, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Kullanılan bellek: %dk/%dk (%dk/%dk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, fuzzy, c-format
 msgid "Memory used: %lu, "
 msgstr "Kullanılan bellek: %d, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "zaman: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "geçen süre: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, fuzzy, c-format
 msgid "while reading inode %lu in %s"
 msgstr "- %ld düğümü %s den okunurken hata oluştu"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, fuzzy, c-format
 msgid "while writing inode %lu in %s"
 msgstr "- %ld düğümü %s e yazılırken hata oluştu"
 
-#: e2fsck/util.c:765
+#: e2fsck/util.c:792
 msgid ""
 "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
 "running.\n"
 msgstr ""
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 #, fuzzy
 msgid "done                                                 \n"
 msgstr "bitti                           .\n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, fuzzy, c-format
 msgid ""
-"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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"
@@ -3857,7 +3981,7 @@ msgstr ""
 " [...]]]\n"
 "          aygıt [son_blok [ilk_blok]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3866,80 +3990,80 @@ msgstr ""
 "%s: -n ve -w seçenekleri birbirinden bağımsızdır.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr ""
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Rasgele şablon ile sınanıyor: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Sınama şablonu: 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "erişim sırasında"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "do_read için tuhaf değer (%ld)\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "ext2fs_sync_device sırasında"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "- hatalı blok listesi yinelemesine başlanırken hata oluştu"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "- tampon bellek ayrılırken hata oluştu"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "%lu ile %lu arasındaki bloklar denetleniyor\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Hatalı bloklar salt-okunur kipte denetleniyor\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Hatalı bloklar için denetleniyor (salt-oku testi): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr ""
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Hatalı bloklar oku-yaz kipinde denetleniyor\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Blok %lu dan %lu ya kadar\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Okunuyor ve karşılaştırılıyor: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Hatalı bloklar veri bozmayan oku-yaz kipinde denetleniyor\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Hatalı bloklar denetleniyor (yıkıcı olmayan oku-yaz sınaması)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3947,100 +4071,100 @@ msgstr ""
 "\n"
 "Kesme yakalandı, kaldırılıyor\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "veri yazma denemesi sırasında, blok %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:131
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s bağlandı; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 "badblocks n'olursa olsun çalıştırılacak. İnşallah /etc/mtab yanlıştır.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "'badblocks' çalıştırmak güvenli değil!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:142
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s görünüşe göre sistem tarafından kullanılıyor; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "badblocks n'olursa olsun çalıştırılacak.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, fuzzy, c-format
 msgid "invalid %s - %s"
 msgstr "blok uzunluğu hatalı - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr ""
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "sınama şablonu - %s için bellek ayrılamadı"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "Salt okunur kipte en çok bir sınama şablonu belirtilebilir"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Salt okunur kipte rasgele sınama şablonu kullanımına izin verilmez"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr "Aygıt alanı saptanamadı; Elle bir değer girmelisiniz\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "- aygıt alanı saptanmaya çalışılırken hata oluştu"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 #, fuzzy
 msgid "last block"
 msgstr "Bloklar yeniden konumlandırılıyor"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 #, fuzzy
 msgid "first block"
 msgstr "İlk veri bloğu = %u\n"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, fuzzy, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "başlangıç bloğu hatalı - %s"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, fuzzy, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "başlangıç bloğu hatalı - %s"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "hatalı bloklar listesi bellekte oluşturulurken"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr ""
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "bellekteki hatalı bloklar listesine eklenirken"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, fuzzy, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Geçiş tamamlandı, %u hatalı blok bulundu.\n"
@@ -4150,159 +4274,159 @@ msgstr "= ile + ve - uyumsuz\n"
 msgid "Must use '-v', =, - or +\n"
 msgstr "'-v', =, - veya + kullanılmalı\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:79 misc/create_inode.c:118
 #, fuzzy, c-format
 msgid "while reading inode %u"
 msgstr "- %ld düğümü %s den okunurken hata oluştu"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:89 misc/create_inode.c:287 misc/create_inode.c:352
+#: misc/create_inode.c:390
 #, fuzzy
 msgid "while expanding directory"
 msgstr "- /lost+found dizini genişletilirken hata oluştu"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:96
 #, fuzzy, c-format
 msgid "while linking \"%s\""
 msgstr "%s açılırken"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:104 misc/create_inode.c:131 misc/create_inode.c:321
 #, fuzzy, c-format
 msgid "while writing inode %u"
 msgstr "- %ld düğümü %s e yazılırken hata oluştu"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:151 misc/create_inode.c:175
 #, fuzzy, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "- stat %s yapılmaya çalışılırken hata oluştu"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:162
 #, fuzzy, c-format
 msgid "while opening inode %u"
 msgstr "düğüm taraması başlatılırken hata oluştu"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:168 misc/create_inode.c:195 misc/create_inode.c:975
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 #, fuzzy
 msgid "while allocating memory"
 msgstr "- tampon bellek ayrılırken hata oluştu"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:188 misc/create_inode.c:204
 #, fuzzy, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "- %s üzerinde bayraklar okunurken hata oluştu"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:213
 #, fuzzy, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "- %ld düğümü %s e yazılırken hata oluştu"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:223
 #, fuzzy, c-format
 msgid "while closing inode %u"
 msgstr "- düğüm taraması yapılırken hata oluştu"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:274
 #, fuzzy, c-format
 msgid "while allocating inode \"%s\""
 msgstr "- düğüm tampon belleği ayrılırken hata oluştu"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:293
 #, fuzzy, c-format
 msgid "while creating inode \"%s\""
 msgstr "- %ld düğümü %s den okunurken hata oluştu"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:359
 #, fuzzy, c-format
 msgid "while creating symlink \"%s\""
 msgstr "- %s üzerinde bayraklar okunurken hata oluştu"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:377 misc/create_inode.c:896
 #, fuzzy, c-format
 msgid "while looking up \"%s\""
 msgstr "- /lost+found dizine bakılırken hata oluştu"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:397
 #, fuzzy, c-format
 msgid "while creating directory \"%s\""
 msgstr "- kök dizin oluşturulurken hata"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:625
 #, fuzzy, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "%s açılırken"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:739
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:747
 #, fuzzy, c-format
 msgid "while opening directory \"%s\""
 msgstr "%s açılırken"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:757
 #, fuzzy, c-format
 msgid "while lstat \"%s\""
 msgstr "- stat %s yapılmaya çalışılırken hata oluştu"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:808
 #, fuzzy, c-format
 msgid "while creating special file \"%s\""
 msgstr "- %ld düğümü %s den okunurken hata oluştu"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:817
 #, fuzzy
 msgid "malloc failed"
 msgstr "Aayrılırken hata oluştu"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:825
 #, fuzzy, c-format
 msgid "while trying to read link \"%s\""
 msgstr "- %s yeniden boyutlandırılırken hata oluştu"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:832
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr ""
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:843
 #, fuzzy, c-format
 msgid "while writing symlink\"%s\""
 msgstr "- %ld düğümü %s e yazılırken hata oluştu"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:854
 #, fuzzy, c-format
 msgid "while writing file \"%s\""
 msgstr "- %ld düğümü %s e yazılırken hata oluştu"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:867
 #, fuzzy, c-format
 msgid "while making dir \"%s\""
 msgstr "%s açılırken"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:885
 #, fuzzy
 msgid "while changing directory"
 msgstr "blok dizini okunuyor"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:891
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr ""
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:904
 #, fuzzy, c-format
 msgid "while setting inode for \"%s\""
 msgstr "- %s üzerinde sürüm belirlenirken hata oluştu"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:911
 #, fuzzy, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "- %s üzerinde bayraklar belirlenirken hata oluştu"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:937
 #, fuzzy
 msgid "while saving inode data"
 msgstr "- düğüm taraması başlatılırken hata oluştu"
@@ -4310,7 +4434,7 @@ msgstr "- düğüm taraması başlatılırken hata oluştu"
 #: misc/dumpe2fs.c:56
 #, fuzzy, c-format
 msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+"Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
 msgstr ""
 "Kullanımı: %s [-bfhixV] [-ob süperblok] [-oB blokboyu] aygıt\n"
 "\n"
@@ -4456,112 +4580,58 @@ msgstr "- hatalı bloklar listesi basılırken hata oluştu"
 msgid "Bad blocks: %u"
 msgstr "Hatalı bloklar: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:367
 msgid "while reading journal inode"
 msgstr "- günlük düğümü okunurken hata oluştu"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 #, fuzzy
 msgid "while opening journal inode"
 msgstr "- günlük düğümü okunurken hata oluştu"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 #, fuzzy
 msgid "while reading journal super block"
 msgstr "- günlük dosyası süperbloğu okunurken hata oluştu"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 #, fuzzy
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Günlük süperbloğu yok!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-#, fuzzy
-msgid "Journal features:        "
-msgstr "Günlük kullanıcıları:     %s\n"
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Günlük boyutu:            "
-
-#: misc/dumpe2fs.c:430
-#, fuzzy, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"\n"
-"Günlük bloğu boyu:        %u\n"
-"Günlük uzunluğu:          %u\n"
-"Günlük ilk bloğu:         %u\n"
-"Günlük sıralaması:        0x%08x\n"
-"Günlük başlangıcı:        %u\n"
-"Günlük kullanıcı sayısı:  %lu\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:448
-#, fuzzy, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Günlük kullanıcıları:     %s\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "- günlük dosyası süperbloğu okunurken hata oluştu"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Günlük dosyası süperbloğu tanım numarası bulunamadı"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Günlük bloğu boyu:        %u\n"
-"Günlük uzunluğu:          %u\n"
-"Günlük ilk bloğu:         %u\n"
-"Günlük sıralaması:        0x%08x\n"
-"Günlük başlangıcı:        %u\n"
-"Günlük kullanıcı sayısı:  %u\n"
+#: misc/dumpe2fs.c:468
+#, fuzzy
+msgid "failed to alloc MMP buffer\n"
+msgstr "- tampon bellek ayrılırken hata oluştu"
 
-#: misc/dumpe2fs.c:514
-#, c-format
-msgid "Journal users:            %s\n"
-msgstr "Günlük kullanıcıları:     %s\n"
+#: misc/dumpe2fs.c:479
+#, fuzzy, c-format
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "%lu ile %lu arasındaki bloklar denetleniyor\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:798 misc/tune2fs.c:2073
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Seçenekleri çözümlemek için bellek ayrılamadı!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Geçersiz süper blok parametresi: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Ge.ers,z blok boyut parametresi: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4585,42 +4655,35 @@ msgstr ""
 "\tsuperblock=<süperblok sayısı>\n"
 "\tblocksize=<blok boyutu>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1845
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\t%s kullanılıyor\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1590 misc/tune2fs.c:2949
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Geçerli süperblok bulunamadı.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:730
-#, c-format
+#: misc/dumpe2fs.c:747
+#, fuzzy, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "- %s için biteşlemlerin okunması yinelenirken hata oluştu"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
-"\n"
-"%s: %s: biteşlemler okunurken hata oluştu: %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, fuzzy, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] device image-file\n"
 msgstr ""
 "Kullanımı: %s [-rsI] AYGIT DOSYA\n"
 "\n"
@@ -4633,7 +4696,7 @@ msgstr ""
 "olacağından önerilmez. DOSYA yerine - verilirse dosya standart çıktıya\n"
 "yazılır.\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:109
 #, fuzzy, c-format
 msgid "       %s -I device image-file\n"
 msgstr ""
@@ -4648,196 +4711,196 @@ msgstr ""
 "olacağından önerilmez. DOSYA yerine - verilirse dosya standart çıktıya\n"
 "yazılır.\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:110
 #, c-format
 msgid ""
 "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
 "[ dest_fs ]\n"
 msgstr ""
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:175 misc/e2image.c:580 misc/e2image.c:586 misc/e2image.c:1185
 #, fuzzy
 msgid "while allocating buffer"
 msgstr "- tampon bellek ayrılırken hata oluştu"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:180
 #, fuzzy, c-format
 msgid "Writing block %llu\n"
 msgstr "%lu ile %lu arasındaki bloklar denetleniyor\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:194
 #, fuzzy, c-format
 msgid "error writing block %llu"
 msgstr "%lu bloğu yazılırken hata: %s.  "
 
-#: misc/e2image.c:196
+#: misc/e2image.c:197
 msgid "error in generic_write()"
 msgstr ""
 
-#: misc/e2image.c:213
+#: misc/e2image.c:214
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr ""
 
-#: misc/e2image.c:218
+#: misc/e2image.c:219
 msgid "Couldn't allocate header buffer\n"
 msgstr "Başlık için tampon bellek ayrılamadı\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:247
 msgid "while writing superblock"
 msgstr "- süperbloğa yazılırken hata oluştu"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:256
 msgid "while writing inode table"
 msgstr "- düğüm tablosuna yazılırken hata oluştu"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:264
 msgid "while writing block bitmap"
 msgstr "- blok biteşlemi yazılırken hata oluştu"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:272
 msgid "while writing inode bitmap"
 msgstr "- düğüm biteşlemi yazılırken hata oluştu"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:506
 #, fuzzy, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Empty directory block %u (#%d) in inode %u\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:518
 #, fuzzy, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Empty directory block %u (#%d) in inode %u\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:559
 #, fuzzy, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%u düğüm, %u blok\n"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:590 misc/e2image.c:630
 msgid "Copying "
 msgstr ""
 
-#: misc/e2image.c:626
+#: misc/e2image.c:627
 msgid ""
 "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr ""
 
-#: misc/e2image.c:652
+#: misc/e2image.c:653
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr ""
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:665 misc/e2image.c:1195
 #, fuzzy, c-format
 msgid "error reading block %llu"
 msgstr "blok %lu okunurken hata oluştu (%s).  "
 
-#: misc/e2image.c:718
+#: misc/e2image.c:719
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr ""
 
-#: misc/e2image.c:722
+#: misc/e2image.c:723
 #, c-format
 msgid "at %.2f MB/s"
 msgstr ""
 
-#: misc/e2image.c:758
+#: misc/e2image.c:759
 #, fuzzy
 msgid "while allocating l1 table"
 msgstr "- tampon bellek ayrılırken hata oluştu"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:804
 #, fuzzy
 msgid "while allocating l2 cache"
 msgstr "- tampon bellek ayrılırken hata oluştu"
 
-#: misc/e2image.c:826
+#: misc/e2image.c:827
 msgid ""
 "Warning: There are still tables in the cache while putting the cache, data "
 "will be lost so the image may not be valid.\n"
 msgstr ""
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1152
 #, fuzzy
 msgid "while allocating ext2_qcow2_image"
 msgstr "ext2fs_block_iterate işlevi çağrılırken hata oluştu"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1159
 #, fuzzy
 msgid "while initializing ext2_qcow2_image"
 msgstr "ext2fs_block_iterate işlevi çağrılırken hata oluştu"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1218 misc/e2image.c:1236
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr ""
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1276
 #, fuzzy
 msgid "while allocating block bitmap"
 msgstr "- blok biteşlemi yazılırken hata oluştu"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1285
 #, fuzzy
 msgid "while allocating scramble block bitmap"
 msgstr "- blok biteşlemi yazılırken hata oluştu"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1292
 #, fuzzy
 msgid "Scanning inodes...\n"
 msgstr "Dosya indeksi tablosu taranıyor"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1304
 #, fuzzy
 msgid "Can't allocate block buffer"
 msgstr "Blok tamponu ayrılamadı (boyu=%d)\n"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1343 misc/e2image.c:1357
 #, fuzzy, c-format
 msgid "while iterating over inode %u"
 msgstr "sonraki düğüme geçilirken hata oluştu"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1389
 msgid "Raw and qcow2 images cannot be installed"
 msgstr ""
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1411
 #, fuzzy
 msgid "error reading bitmaps"
 msgstr "- biteşlemler okunurken hata oluştu"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1423
 #, fuzzy
 msgid "while opening device file"
 msgstr "düğüm taraması başlatılırken hata oluştu"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1434
 #, fuzzy
 msgid "while restoring the image table"
 msgstr "- düğüm tablosuna yazılırken hata oluştu"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1531
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr ""
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1537
 msgid "Offsets are only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1542
 msgid "Move mode is only allowed with raw images."
 msgstr ""
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1547
 msgid "Move mode requires all data mode."
 msgstr ""
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1557
 #, fuzzy
 msgid "checking if mounted"
 msgstr " (sistem %ld kere bağlandığında denetle)"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1564
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4845,50 +4908,55 @@ msgid ""
 "Use -f option if you really want to do that.\n"
 msgstr ""
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1618
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr ""
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1624
 msgid "Can not stat output\n"
 msgstr ""
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1634
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr ""
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1637
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr ""
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1640
+#, fuzzy, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Ext3 günlüğü süperbloku bozuk.\n"
+
+#: misc/e2image.c:1644
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr ""
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1654
 #, fuzzy
 msgid "The -c option only supported in raw mode\n"
 msgstr " -t seçeneği e2fsck'nın bu sürümünde desteklenmiyor.\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1659
 #, fuzzy
 msgid "The -c option not supported when writing to stdout\n"
 msgstr " -t seçeneği e2fsck'nın bu sürümünde desteklenmiyor.\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1666
 #, fuzzy
 msgid "while allocating check_buf"
 msgstr "- tampon bellek ayrılırken hata oluştu"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1672
 #, fuzzy
 msgid "The -p option only supported in raw mode\n"
 msgstr " -t seçeneği e2fsck'nın bu sürümünde desteklenmiyor.\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1682
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr ""
@@ -4918,7 +4986,7 @@ msgstr "e2label: süperblok okunurken hata oluştu\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: bir ext2 dosya sistemi değil\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3152
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Uyarı: etiket çok uzun, kırpılıyor.\n"
@@ -4933,7 +5001,7 @@ msgstr "e2label: süperbloğa yine erişilemedi\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: süperbloğa yazılırken hata oluştu\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1733
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr ""
@@ -4942,162 +5010,164 @@ msgstr ""
 "AYGIT bölüm ismini atamak/okumak için kullanılır.\n"
 "\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
+msgid ""
+"Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> "
+"<filesystem>\n"
 msgstr ""
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr ""
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr ""
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 #, fuzzy
 msgid "while reading filesystem superblock."
 msgstr "- günlük dosyası süperbloğu okunurken hata oluştu"
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 #, fuzzy
 msgid "while fetching superblock"
 msgstr "- süperbloğa yazılırken hata oluştu"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, fuzzy, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "Süperblokların bulunduğu bloklar:"
 
-#: misc/e2undo.c:334
-#, fuzzy, c-format
+#: misc/e2undo.c:340
+#, c-format
 msgid "illegal offset - %s"
-msgstr "düğüm uzunluğu hatalı - %s"
+msgstr ""
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr ""
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, fuzzy, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "düğüm taraması başlatılırken hata oluştu"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 #, fuzzy
 msgid "while reading undo file"
 msgstr "- kök düğümü okunurken hata oluştu"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, fuzzy, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: aygıt sayısı çok fazla\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, fuzzy, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "Süperblokların bulunduğu bloklar:"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr ""
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr ""
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, fuzzy, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "blok uzunluğu hatalı - %s"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, fuzzy, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr ""
 "Ext3 günlüğünün süper bloğu bilinmeyen uyumsuz özellikli bir bayrak "
 "içeriyor.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, fuzzy, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "- %s'in bağlı olup olmadığı saptanmaya çalışılırken hata oluştu."
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr ""
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, fuzzy, c-format
 msgid "while opening `%s'"
 msgstr "%s açılırken"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr ""
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 #, fuzzy
 msgid "while reading keys"
 msgstr "- biteşlemler okunurken hata oluştu"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr ""
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr ""
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, fuzzy, c-format
 msgid "%s: block %llu is too long."
 msgstr "Blok %lu dan %lu ya kadar\n"
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, fuzzy, c-format
 msgid "while fetching block %llu."
-msgstr "%lu ile %lu arasındaki bloklar denetleniyor\n"
+msgstr "- süperblok ayarlanırken hata oluştu"
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr ""
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, fuzzy, c-format
 msgid "while writing block %llu."
-msgstr "%lu bloğu yazılırken hata: %s.  "
+msgstr "- blok biteşlemi yazılırken hata oluştu"
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr ""
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr ""
@@ -5179,37 +5249,37 @@ msgstr ""
 "            düzeltmelisiniz.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: yok\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: bekliyor: Başka ast süreç yok?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Uyarı... %s %s aygıtı için %d sinyali ile çıktı.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: durum %x, asla olmamalıydı.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "%s ile bitti (çıkış durumu: %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Hata %d: fsck.%s %s için çalıtırılırken oluştu.\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5217,11 +5287,11 @@ msgstr ""
 "-t ile ister tüm dosya sistemi türleri belirtilsin ister bir dosya sistemi\n"
 "türü belirtilmesin, ya 'no' ya da '!' öneki kullanılmalıdır.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Dosya sistemi türleri için bellek ayrılamadı\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
@@ -5230,84 +5300,84 @@ msgstr ""
 "%s: /etc/fstab içerisindeki bozuk satır atlanıyor: sıfır olmayan fsck geçiş "
 "sayısı ile bağlama ataması\n"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: %s denetlenemiyor: fsck.%s yok\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Tüm dosya sistemleri denetleniyor.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--beklemede-- (%d. geçiş)\n"
 
-#: misc/fsck.c:1078
+#: misc/fsck.c:1085
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Kullanımı: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] "
 "[filesys ...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: aygıt sayısı çok fazla\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: argüman sayısı fazla\n"
 
-#: misc/fuse2fs.c:3745
+#: misc/fuse2fs.c:3739
 msgid "Mounting read-only.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3769
+#: misc/fuse2fs.c:3763
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3775 misc/fuse2fs.c:3789
 #, c-format
 msgid "%s: %s.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3776 misc/fuse2fs.c:3791 misc/tune2fs.c:3049
 #, fuzzy, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr ""
 "Lütfen önce 'e2fsck -f %s' komutunu çalıştırın.\n"
 "\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3798
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3806
 #, fuzzy, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "'%s' dosya sistemi özelliğini temizleme desteklenmiyor.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3821
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3825
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3830
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3834
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr ""
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3838
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr ""
 
@@ -5345,7 +5415,7 @@ msgstr "- %s üzerinde sürüm okunurken hata oluştu"
 msgid "While reading version on %s"
 msgstr "- %s üzerinde sürüm okunurken hata oluştu"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5411,37 +5481,37 @@ msgstr ""
 "Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 "\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Çalışan komut: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "- '%s' çalıştırılırken oldu"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "- hatalı bloklar listesi işlenirken hata oluştu"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Birincil süperblok/grup tanımı alanındaki blok %d hatalı\n"
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "Bir dosya sistemi oluşturulurken %u den %u ye kadar olan\n"
 "bloklar hatasız olmak zorundadır.\n"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Çıkılıyor...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5452,15 +5522,20 @@ msgstr ""
 "\thatalı bloklar içeriyor.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "- hatalı bloklar kullanılmış olarak imlenirken hata oluştu"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+#, fuzzy
+msgid "while writing reserved inodes"
+msgstr "- günlük düğümü yazılırken hata oluştu"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Düğüm tabloları yazılıyor: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -5469,78 +5544,78 @@ msgstr ""
 "\n"
 "%2$u de başlayan düğüm tablosundaki %1$d blok yazılamadı: %3$s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2726 misc/mke2fs.c:3131
 msgid "done                            \n"
 msgstr "bitti                           \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "- kök dizin oluşturulurken hata"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "- kök düğümü okunurken hata oluştu"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "- kök düğümünün sahibi belirlenirken hata oluştu"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "- /lost+found dizini oluşturulurken hata oluştu"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "- /lost+found dizine bakılırken hata oluştu"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "- /lost+found dizini genişletilirken hata oluştu"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "- hatalı blok düğümü belirlenirken hata oluştu"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "%d-%d arasındaki sektörler silinirken bellek yetmedi\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Uyarı: blok 0 okunamadı: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Uyarı: %d. sektör silinemedi: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "- gümlük superbloğu ilklendirilirken hata oluştu"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Günlük aygıtı temizleniyor: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, fuzzy, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "- günlük aygıtı temizlenirken (blok %u, %d blok) hata oluştu"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "- günlük süperbloğu yazılırken hata oluştu"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, fuzzy, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr ""
 "%s üzerindeki dosya sistemi şimdi %u blok uzunlukta.\n"
 "\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, fuzzy, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5549,157 +5624,162 @@ msgstr ""
 "uyarı: %u blok kullanılmamış.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Dosya sistemi ismi = %s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, fuzzy, c-format
 msgid "OS type: %s\n"
 msgstr "İşl. Sist. türü: "
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blok boyu = %u (günlük kaydı = %u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, fuzzy, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Blok boyu = %u (günlük kaydı = %u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Adımlama boyu = %u (günlük kaydı = %u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr ""
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, fuzzy, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u düğüm, %u blok\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, fuzzy, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u blok (%%%2.2f) süper kullanıcı için ayrıldı\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "İlk veri bloğu = %u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr ""
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Azami dosyasistemi bloğu sayısı = %lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u blok grubu\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u blok grubu\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, fuzzy, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "Grup başına %u blok ve %u sekme\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "Grup başına %u blok ve %u sekme\n"
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "grup başına %u düğüm\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, fuzzy, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "Dosya sistemi ismi = %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Süperblokların bulunduğu bloklar:"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:820
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr ""
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:826
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr ""
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:839
 #, fuzzy, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "düğüm uzunluğu hatalı - %s"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:853
+#, fuzzy, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "düğüm uzunluğu hatalı - %s"
+
+#: misc/mke2fs.c:865
 #, fuzzy, c-format
 msgid "Invalid offset: %s\n"
 msgstr "düğüm uzunluğu hatalı - %s"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:879 misc/tune2fs.c:2101
 #, fuzzy, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "sınama şablonu geçersiz: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:896
 #, fuzzy, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Geçersiz süper blok parametresi: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:918
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "'stride' parametresi geçersiz: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:933
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Geçersiz çizgi genişlik parametresi: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:956
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Yeniden boyutlama parametresi geçersiz: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:963
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 "Azami yeniden boyutlama değeri dosya sistemi boyutundan büyük olmalıdır.\n"
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:987
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 "Satırda boyutlandırma, 0. gözden geçirmedeki dosya sistemlerinde "
 "desteklenmemektedir\n"
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1013 misc/mke2fs.c:1022
 #, fuzzy, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Geçersiz dosya sistemi seçeneği belirtidi: %s\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1065
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -5736,7 +5816,7 @@ msgstr ""
 "\tresize=<yeniden boyutlanacağı blok sayısı>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1090
 #, c-format
 msgid ""
 "\n"
@@ -5744,7 +5824,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1135
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5753,35 +5833,35 @@ msgstr ""
 "mke2fs yapılandırma dosyasında (%s, %d.satırda) sözdizimi hatası\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1148 misc/tune2fs.c:1120
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Geçersiz dosya sistemi seçeneği: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1160 misc/tune2fs.c:411
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Geçersiz dosya sistemi seçeneği belirtidi: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1296
 #, c-format
 msgid ""
 "\n"
 "Your mke2fs.conf file does not define the %s filesystem type.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1300
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1304
 #, fuzzy
 msgid "Aborting...\n"
 msgstr "Çıkılıyor...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1345
 #, c-format
 msgid ""
 "\n"
@@ -5789,155 +5869,155 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1527
 #, fuzzy
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Dosya sistemi türleri için bellek ayrılamadı\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1564
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1597
 #, c-format
 msgid "invalid block size - %s"
 msgstr "blok uzunluğu hatalı - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1601
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Uyarı: blok uzunluğu %d birçok sistemde kullanımdışıdır.\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1617
 #, fuzzy, c-format
 msgid "invalid cluster size - %s"
 msgstr "blok uzunluğu hatalı - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1630
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr ""
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1644 misc/tune2fs.c:1830
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "hata davranışı hatalı - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1656
 msgid "Illegal number for blocks per group"
 msgstr "Grup başına blok sayısı kuraldışı"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1661
 msgid "blocks per group must be multiple of 8"
 msgstr "grup başına blok sayısı 8'in katları olmalıdır"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1669
 #, fuzzy
 msgid "Illegal number for flex_bg size"
 msgstr "Grup başına blok sayısı kuraldışı"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1675
 msgid "flex_bg size must be a power of 2"
 msgstr ""
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1680
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr ""
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1690
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "düğüm oranı %s hatalı (en az %d/en çok %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1700
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "düğüm uzunluğu hatalı - %s"
 
-#: misc/mke2fs.c:1684
+#: misc/mke2fs.c:1713
 msgid ""
 "Warning: -K option is deprecated and should not be used anymore. Use '-E "
 "nodiscard' extended option instead!\n"
 msgstr ""
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1724
 msgid "in malloc for bad_blocks_filename"
 msgstr "- bad_blocks_filename için bellek ayrılırken"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1733
 #, fuzzy, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr "Uyarı: etiket çok uzun, kırpılıyor.\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1742
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "yedek blok yüzdesi hatalı - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1757
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "düğüm sayısı hatalı - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1770
 #, fuzzy
 msgid "while allocating fs_feature string"
 msgstr "- tampon bellek ayrılırken hata oluştu"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1787
 #, c-format
 msgid "bad revision level - %s"
 msgstr "değişiklik seviyesi hatalı - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1792
 #, fuzzy, c-format
 msgid "while trying to create revision %d"
 msgstr ""
 "\n"
 "\tgünlük oluşturulmaya çalışılırken hata oluştu"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1806
 #, fuzzy
 msgid "The -t option may only be used once"
 msgstr "-o yalnız bir kere kullanılabilir"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1814
 #, fuzzy
 msgid "The -T option may only be used once"
 msgstr "-o yalnız bir kere kullanılabilir"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1870 misc/mke2fs.c:3215
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "- %s günlük aygıtı açılmaya çalışılırken hata\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1876
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "Günlük aygıtının blok boyu (%d) asgari blok boyundan (%d) küçük\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1882
 #, fuzzy, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "%s'e günlük ekleniyor: "
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1893
 #, fuzzy, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "blok sayısı hatalı - %s"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1923
 msgid "filesystem"
 msgstr "dosya sistemi"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1941 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "- dosya sistemi uzunluğu saptanmaya çalışılırken hata oluştu"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1947
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5945,7 +6025,7 @@ msgstr ""
 "Aygıt alanı saptanamadı; dosya sistemi için\n"
 "bir uzunluk belirtmelisiniz\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1954
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5958,123 +6038,128 @@ msgstr ""
 "Disk bölümleme tablosunun yeniden okunması için sisteminizi yeniden\n"
 "başlatmalısınız.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:1971
 msgid "Filesystem larger than apparent device size."
 msgstr "Dosya sisteminin uzunluğu görünürdeki uzunluktan büyük."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:1991
 msgid "Failed to parse fs types list\n"
 msgstr ""
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2040
 #, fuzzy
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "Hurd, dosya türü özelliğini desteklemez.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2045
 #, fuzzy
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "Hurd, dosya türü özelliğini desteklemez.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2050
 #, fuzzy
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "Hurd, dosya türü özelliğini desteklemez.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2055
+#, fuzzy
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "Hurd, dosya türü özelliğini desteklemez.\n"
+
+#: misc/mke2fs.c:2065
 msgid "while trying to determine hardware sector size"
 msgstr "- donanımsal sektör boyu saptanmaya çalışılırken"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2071
 #, fuzzy
 msgid "while trying to determine physical sector size"
 msgstr "- donanımsal sektör boyu saptanmaya çalışılırken"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2103
 #, fuzzy
 msgid "while setting blocksize; too small for device\n"
 msgstr "- yeniden boyutlama için bloklar yedeklenirken hata oluştu"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2132
 #, 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:2098
+#: misc/mke2fs.c:2144
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2166
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr ""
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2173
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 "Dosyasistemi özellikleri 0 revizyonlu dosyasistemlerinde desteklenmiyor\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2181
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2191
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2204
 #, fuzzy, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "yedek blok yüzdesi hatalı - %s"
 
-#: misc/mke2fs.c:2175
+#: misc/mke2fs.c:2221
 msgid ""
 "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
 "rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2241
 #, fuzzy
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr ""
 "Azami yeniden boyutlama değeri dosya sistemi boyutundan büyük olmalıdır.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2247
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr ""
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2267
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2270
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2272
 #, c-format
 msgid ""
 "This may result in very poor performance, (re)-partitioning suggested.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2293
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d baytlık bloklar sistem için çok büyük (en çok %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2297
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
@@ -6082,14 +6167,14 @@ msgstr ""
 "Uyarı: %d baytlık bloklar sistem için çok büyük (en çok %d), ama devam "
 "ediliyor\n"
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2305
 #, c-format
 msgid ""
 "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
 "and journal checksum features.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2360
 #, c-format
 msgid ""
 "\n"
@@ -6099,17 +6184,22 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2375
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr ""
+
+#: misc/mke2fs.c:2397
 msgid "Can't support bigalloc feature without extents feature"
 msgstr ""
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2404
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2412
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -6117,46 +6207,41 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2424
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "süperblok azaltması uygulanmamış dosya sisteminde\n"
 "yedek bloklar kullanılarak yeniden boyutlama desteklenmiyor."
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2433
 msgid "blocks per group count out of range"
 msgstr "Grup başına blok sayısı kapsamdışı"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2455
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2467
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "düğüm uzunluğu %d hatalı (en az %d/en çok %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2482
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr ""
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2497
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr ""
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2504
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr ""
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2518
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -6164,99 +6249,105 @@ msgid ""
 "\tor lower inode count (-N).\n"
 msgstr ""
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2705
 msgid "Discarding device blocks: "
 msgstr ""
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2721
 msgid "failed - "
 msgstr ""
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2780
 #, fuzzy
 msgid "while initializing quota context"
-msgstr "ext2fs_block_iterate işlevi çağrılırken hata oluştu"
+msgstr "- gümlük superbloğu ilklendirilirken hata oluştu"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2787
 #, fuzzy
 msgid "while writing quota inodes"
 msgstr "- günlük düğümü yazılırken hata oluştu"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2812
 #, fuzzy, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "hata davranışı hatalı - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2888
+#, fuzzy
+msgid "in malloc for android_sparse_params"
+msgstr "- bad_blocks_filename için bellek ayrılırken"
+
+#: misc/mke2fs.c:2902
 msgid "while setting up superblock"
 msgstr "- süperblok ayarlanırken hata oluştu"
 
-#: misc/mke2fs.c:2849
+#: misc/mke2fs.c:2918
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Pass -O extents to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2856
+#: misc/mke2fs.c:2925
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr ""
+#: misc/mke2fs.c:2933
+#, fuzzy
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "Hurd, dosya türü özelliğini desteklemez.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:2957
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr ""
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3056
 #, c-format
 msgid "unknown os - %s"
 msgstr "bilinmeyen işletim sistemi - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3119
 #, fuzzy
 msgid "Allocating group tables: "
 msgstr "Düğüm tabloları yazılıyor: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3127
 msgid "while trying to allocate filesystem tables"
 msgstr "- dosya sistemi tabloları ayrılmaya çalışılırken hata oluştu"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3136
 #, fuzzy
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
 msgstr "- blok biteşlemi yazılırken hata oluştu"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3142
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr ""
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3183
 #, fuzzy, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "- dosya sisteminin sonunda blok %u sıfırlanırken hata oluştu"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3196
 msgid "while reserving blocks for online resize"
 msgstr "- yeniden boyutlama için bloklar yedeklenirken hata oluştu"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3208 misc/tune2fs.c:1538
 msgid "journal"
 msgstr "günlük"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3220
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "%s'e günlük ekleniyor: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3227
 #, c-format
 msgid ""
 "\n"
@@ -6265,21 +6356,21 @@ msgstr ""
 "\n"
 "\tgünlük %s e eklenmeye çalışılırken hata oluştu"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3232 misc/mke2fs.c:3261 misc/mke2fs.c:3299
+#: misc/mk_hugefiles.c:598 misc/tune2fs.c:1567 misc/tune2fs.c:1586
 msgid "done\n"
 msgstr "tamam\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3238
 msgid "Skipping journal creation in super-only mode\n"
 msgstr ""
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3248
 #, fuzzy, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Günlük oluşturuluyor (%d blok): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3257
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6287,40 +6378,36 @@ msgstr ""
 "\n"
 "\tgünlük oluşturulmaya çalışılırken hata oluştu"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3269 misc/tune2fs.c:1185
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3274
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3290
 msgid "Copying files into the device: "
 msgstr ""
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3296
 #, fuzzy
 msgid "while populating file system"
-msgstr "- tampon bellek ayrılırken hata oluştu"
+msgstr "Tüm dosya sistemleri denetleniyor.\n"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3303
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Süperblokların ve dosya sisteminin hesap bilgileri yazılıyor: "
 
-#: misc/mke2fs.c:3230
+#: misc/mke2fs.c:3310
 #, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Uyarı, süperblokların tamamına yazma sorunu var."
+msgid "while writing out and closing file system"
+msgstr "- dosya sisteminin sonunda blok %u sıfırlanırken hata oluştu"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3313
 msgid ""
 "done\n"
 "\n"
@@ -6328,32 +6415,37 @@ msgstr ""
 "bitti\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
+#, fuzzy, c-format
+msgid "while zeroing block %llu for hugefile"
+msgstr "- dosya sisteminin sonunda blok %u sıfırlanırken hata oluştu"
+
+#: misc/mk_hugefiles.c:514
 #, c-format
 msgid ""
 "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:581
 msgid "Huge files will be zero'ed\n"
 msgstr ""
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:582
 #, fuzzy, c-format
 msgid "Creating %lu huge file(s) "
-msgstr "olağan dosya"
+msgstr "Günlük oluşturuluyor (%d blok): "
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:584
 #, fuzzy, c-format
 msgid "with %llu blocks each"
 msgstr ""
 "uyarı: %u blok kullanılmamış.\n"
 "\n"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:593
 #, fuzzy, c-format
 msgid "while creating huge file %lu"
-msgstr "sonraki düğüme geçilirken hata oluştu"
+msgstr "- kök dizin oluşturulurken hata"
 
 #: misc/mklost+found.c:50
 msgid "Usage: mklost+found\n"
@@ -6397,23 +6489,29 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr ""
 
 #: misc/tune2fs.c:119
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+
+#: misc/tune2fs.c:121
 #, fuzzy
 msgid "Please run e2fsck -f on the filesystem.\n"
 msgstr "Lütfen dosya sisteminde e2fsck çalıştırın.\n"
 
-#: misc/tune2fs.c:121
+#: misc/tune2fs.c:123
 #, fuzzy
 msgid "Please run e2fsck -fD on the filesystem.\n"
 msgstr "Lütfen dosya sisteminde e2fsck çalıştırın.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
@@ -6481,92 +6579,92 @@ msgstr ""
 "Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 "\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Günlük süperbloğu yok!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "- dış günlük açılmaya çalışılırken hata oluştu"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2845
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s bir günlükleme aygıtı değil.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:297 misc/tune2fs.c:2856
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
 "Günlükleme aygıtında dosya sisteminin evrensel tek kimliği (UUID) yok.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:321
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:330
 msgid "Journal removed\n"
 msgstr "Günlük silindi\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:374
 msgid "while reading bitmaps"
 msgstr "- biteşlemler okunurken hata oluştu"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:382
 msgid "while clearing journal inode"
 msgstr "- günlük düğümü temizlenirken hata oluştu"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:393
 msgid "while writing journal inode"
 msgstr "- günlük düğümü yazılırken hata oluştu"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:429 misc/tune2fs.c:452 misc/tune2fs.c:465
 msgid "(and reboot afterwards!)\n"
 msgstr ""
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:480
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr ""
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:483
 #, fuzzy, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr "resize2fs %s (%s)\n"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:487
 #, c-format
 msgid " -z \"%s\""
 msgstr ""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:489
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:491
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr ""
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1087
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1123
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "'%s' dosya sistemi özelliğini temizleme desteklenmiyor.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1129
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1138
 #, fuzzy
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
@@ -6575,7 +6673,7 @@ msgstr ""
 "has_journal bayrağı sadece dosya sistemi bağlı değilken ya da salt-okunur\n"
 "bağlıyken temizlenebilir.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1146
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6583,13 +6681,13 @@ msgstr ""
 "needs_recovery bayrağı gerekiyor. Lütfen has_journal bayrağı\n"
 "temizlenmeden önce e2fsck çalıştırın.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1164
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1177
 #, fuzzy
 msgid ""
 "The multiple mount protection feature can't\n"
@@ -6599,39 +6697,39 @@ msgstr ""
 "has_journal bayrağı sadece dosya sistemi bağlı değilken ya da salt-okunur\n"
 "bağlıyken temizlenebilir.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1195
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1204
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1212
 #, fuzzy
 msgid "Error while reading bitmaps\n"
 msgstr "- biteşlemler okunurken hata oluştu"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1221
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr ""
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1226
 #, fuzzy
 msgid "while reading MMP block."
 msgstr "- hatalı bloklar düğümü okunmaya çalışılırken hata oluştu"
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1258
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1269
 #, fuzzy
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
@@ -6640,77 +6738,80 @@ msgstr ""
 "has_journal bayrağı sadece dosya sistemi bağlı değilken ya da salt-okunur\n"
 "bağlıyken temizlenebilir.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1280
 msgid "Enabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1282
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1175
+#: misc/tune2fs.c:1288
 msgid ""
 "Extents are not enabled.  The file extent tree can be checksummed, whereas "
 "block maps cannot.  Not enabling extents reduces the coverage of metadata "
 "checksumming.  Re-run with -O extent to rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1182
+#: misc/tune2fs.c:1295
 msgid ""
 "64-bit filesystem support is not enabled.  The larger fields afforded by "
 "this feature enable full-strength checksumming.  Run resize2fs -b to "
 "rectify.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1321
 msgid "Disabling checksums could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1323
 #, fuzzy
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr "%s bağlı; bağlı bir dosya sistemi yeniden boyutlandırılamaz!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1386
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1396
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr ""
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1426
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1447
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1465
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1483
 msgid ""
 "UUID has changed since enabling metadata_csum.  Filesystem must be "
 "unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1489
+msgid "Recalculating checksums could take some time."
+msgstr ""
+
+#: misc/tune2fs.c:1531
 msgid "The filesystem already has a journal.\n"
 msgstr "Dosya sisteminde bir günlük dosyası zaten var.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1551
 #, c-format
 msgid ""
 "\n"
@@ -6719,21 +6820,21 @@ msgstr ""
 "\n"
 "\t%s üzerindeki günlük açılmaya çalışılırken hata oluştu\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1555
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "%s üzerinde günlük dosyası oluşturuluyor: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1563
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "- %s üzerindeki günlük dosyasına dosya sistemi eklenirken hata oluştu"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1569
 msgid "Creating journal inode: "
 msgstr "Günlük düğümü oluşturuluyor: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1583
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6741,27 +6842,32 @@ msgstr ""
 "\n"
 "\tgünlük dosyası oluşturulmaya çalışılırken hata oluştu"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1621
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1634
 #, fuzzy
 msgid "while initializing quota context in support library"
 msgstr "- gümlük superbloğu ilklendirilirken hata oluştu"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1649
 #, fuzzy, c-format
 msgid "while updating quota limits (%d)"
 msgstr "- hatalı bloklar düğümü güncellenirken hata oluştu"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1657
 #, fuzzy, c-format
 msgid "while writing quota file (%d)"
-msgstr "- %ld düğümü %s e yazılırken hata oluştu"
+msgstr "- düğüm tablosu yazılırken hata oluştu (grup %d)"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1675
 #, fuzzy, c-format
 msgid "while removing quota file (%d)"
-msgstr "- kök düğümü okunurken hata oluştu"
+msgstr "- düğüm tablosu okunurken hata oluştu (grup %d)"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1718
 msgid ""
 "\n"
 "Bad quota options specified.\n"
@@ -6775,65 +6881,65 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1776
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Tarih/zaman belirteci çözümlenemedi: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1801 misc/tune2fs.c:1814
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "bağlama sayısı hatalı - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1857
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "grup ismi/numarası hatalı -%s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1890
 #, c-format
 msgid "bad interval - %s"
 msgstr "süre hatalı - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1919
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "yedek blok oranı hatalı - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1934
 msgid "-o may only be specified once"
 msgstr "-o yalnız bir kere kullanılabilir"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1943
 msgid "-O may only be specified once"
 msgstr "-O yalnız bir kere kullanılabilir"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "yedek blok sayısı hatalı - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1989
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "kullanıcı ismi/numarası hatalı - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:2006
 #, fuzzy, c-format
 msgid "bad inode size - %s"
 msgstr "düğüm uzunluğu hatalı - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:2013
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr ""
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2110
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2115
 #, fuzzy, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
 msgid_plural ""
@@ -6841,27 +6947,27 @@ msgid_plural ""
 msgstr[0] "En fazla bağlama sayısı %d olarak belirleniyor\n"
 msgstr[1] "En fazla bağlama sayısı %d olarak belirleniyor\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2138
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2153
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2168
 #, fuzzy, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "'stride' parametresi geçersiz: %s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2174
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2193
 #, fuzzy
 msgid ""
 "\n"
@@ -6874,6 +6980,7 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
 "\ttest_fs\n"
@@ -6890,116 +6997,138 @@ msgstr ""
 "\tresize=<yeniden boyutlanacağı blok sayısı>\n"
 "\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2663
 #, fuzzy
 msgid "Failed to read inode bitmap\n"
 msgstr "- biteşlemler okunurken hata oluştu"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2668
 #, fuzzy
 msgid "Failed to read block bitmap\n"
 msgstr "düğüm ve blok biteşlemleri okunuyor"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2685 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "taşınacak bloklar"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2688
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr ""
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2694
 msgid "Not enough space to increase inode size \n"
 msgstr ""
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2699
 #, fuzzy
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "- yeniden boyutlama için bloklar yedeklenirken hata oluştu"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2731
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
 msgstr ""
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2936
+msgid ""
+"If you are sure the filesystem is not in use on any node, run:\n"
+"'tune2fs -f -E clear_mmp {device}'\n"
+msgstr ""
+
+#: misc/tune2fs.c:2943
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2955
 #, fuzzy
 msgid "Cannot modify a journal device.\n"
 msgstr "%s bir günlükleme aygıtı değil.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2968
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2975
 #, fuzzy
 msgid "Shrinking inode size is not supported\n"
 msgstr "'%s' dosya sistemi özelliğini temizleme desteklenmiyor.\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2980
 #, fuzzy, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "düğüm uzunluğu %d hatalı (en az %d/en çok %d)"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2986
 msgid "Resizing inodes could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3034
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+
+#: misc/tune2fs.c:3045
+#, fuzzy, c-format
+msgid "Recovering journal.\n"
+msgstr "%s: günlük dosyasına göre kurtarılıyor\n"
+
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "En fazla bağlama sayısı %d olarak belirleniyor\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Şimdiki bağlama sayısı %d olarak belirleniyor\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3074
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Hata davranışı %d olarak belirleniyor\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3079
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Yedek blokların grup numarası %lu olarak belirleniyor\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3084
 #, fuzzy, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "Denetimler arasındaki süre %lu saniye olarak belirleniyor\n"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3091
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Denetimler arasındaki süre %lu saniye olarak belirleniyor\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3098
 #, fuzzy, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "Yedek blokların yüzdesi %%%g (%u blok) olarak belirleniyor\n"
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3104
 #, fuzzy, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "yedek ayrılmış blok sayısı çok büyük (%lu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3111
 #, fuzzy, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Yedek blok sayısı %lu olarak belirleniyor\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3116
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -7007,14 +7136,14 @@ msgstr ""
 "\n"
 "Dosya sistemindeki süperbloklar zaten azaltılmış.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3119
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3129
 #, c-format
 msgid ""
 "\n"
@@ -7023,28 +7152,28 @@ msgstr ""
 "\n"
 "Süperblok azaltma bayrağı konuldu.  %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3134
 #, fuzzy
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
 msgstr "'%s' dosya sistemi özelliğini temizleme desteklenmiyor.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3142
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Dosya sisteminin son denetim zamanı %s yapılıyor\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3148
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Ayrılan blokların kullanıcı numarası %lu olarak ayarlanıyor\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3180
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr ""
 
-#: misc/tune2fs.c:3024
+#: misc/tune2fs.c:3198
 #, fuzzy
 msgid ""
 "The quota feature may only be changed when the filesystem is unmounted.\n"
@@ -7052,94 +7181,78 @@ msgstr ""
 "has_journal bayrağı sadece dosya sistemi bağlı değilken ya da salt-okunur\n"
 "bağlıyken temizlenebilir.\n"
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3222
 #, fuzzy
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "has_journal bayrağı sadece dosya sistemi bağlı değilken ya da salt-okunur\n"
 "bağlıyken temizlenebilir.\n"
 
-#: misc/tune2fs.c:3051
+#: misc/tune2fs.c:3225
 msgid ""
 "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
 "and re-run this command.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3060
+#: misc/tune2fs.c:3234
 msgid "Setting UUID on a checksummed filesystem could take some time."
 msgstr ""
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3259
 msgid "Invalid UUID format\n"
 msgstr "Geçersiz UUID biçemi\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3275
 #, fuzzy
 msgid "Need to update journal superblock.\n"
 msgstr "günlük dosyası super bloğu okunuyor\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3301
 #, fuzzy
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "has_journal bayrağı sadece dosya sistemi bağlı değilken ya da salt-okunur\n"
 "bağlıyken temizlenebilir.\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3308
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3326
 #, fuzzy, c-format
 msgid "Setting inode size %lu\n"
 msgstr "düğüm uzunluğu hatalı - %s"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3330
 #, fuzzy
 msgid "Failed to change inode size\n"
 msgstr "- düğüm taraması başlatılırken hata oluştu"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3344
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3349
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3356
 #, fuzzy, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Şimdiki bağlama sayısı %d olarak belirleniyor\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, fuzzy, c-format
-msgid "Recovering journal.\n"
-msgstr "%s: günlük dosyasına göre kurtarılıyor\n"
-
 #: misc/util.c:100
 msgid "<proceeding>\n"
 msgstr ""
 
 #: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Yine de devam edilsin mi? (e/h) "
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr ""
 
 #: misc/util.c:108
 #, fuzzy
@@ -7391,7 +7504,7 @@ msgstr "#\tNum = %d, Boy = %d, İmleç = %d, Sıralı = %d\n"
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"[-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
 "Kullanımı: %s [seçenekler] aygıt [yeni-boyut]\n"
@@ -7410,36 +7523,36 @@ msgstr ""
 "Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Dosya indeksi tablosu genişletiliyor"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Bloklar yeniden konumlandırılıyor"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Dosya indeksi tablosu taranıyor"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Dosya indeksi başvuruları güncelleniyor"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Dosya indeksi tablosu taşınıyor"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "bilinmeyen geçiş?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Geçiş %d başlıyor (en çok = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7447,17 +7560,17 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "%s açılırken"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "%s için durum bilgisi alınırken"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7466,30 +7579,30 @@ msgstr ""
 "Lütfen önce 'e2fsck -f %s' komutunu çalıştırın.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr ""
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, fuzzy, c-format
 msgid "Invalid new size: %s\n"
 msgstr "düğüm uzunluğu hatalı - %s"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr ""
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, fuzzy, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Günlük aygıtının blok boyu (%d) asgari blok boyundan (%d) küçük\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr ""
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, fuzzy, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7500,33 +7613,33 @@ msgstr ""
 "Siz ise %u blokluk bir boyut istediniz.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr ""
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
 msgid ""
 "Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
 "blocks.\n"
 msgstr ""
 
-#: resize/main.c:575
+#: resize/main.c:581
 #, fuzzy, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr ""
 "has_journal bayrağı sadece dosya sistemi bağlı değilken ya da salt-okunur\n"
 "bağlıyken temizlenebilir.\n"
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
 msgid ""
 "Please enable the extents feature with tune2fs before enabling the 64bit "
 "feature.\n"
 msgstr ""
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, fuzzy, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
@@ -7535,46 +7648,46 @@ msgstr ""
 "Dosya sistemi zaten %u blok uzunlukta.  Hiçbir şey yapılmadı!\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, fuzzy, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "Dosya sisteminde bir günlük dosyası zaten var.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, fuzzy, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "Dosya sisteminde bir günlük dosyası zaten var.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, fuzzy, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "Dosya sisteminin son denetim zamanı %s yapılıyor\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, fuzzy, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "Dosya sisteminin son denetim zamanı %s yapılıyor\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, fuzzy, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr ""
 "%s üzerindeki dosya sistemi şimdi %u blok uzunlukta.\n"
 "\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "- %s yeniden boyutlandırılırken hata oluştu"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
 "after the aborted resize operation.\n"
 msgstr ""
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, fuzzy, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7583,7 +7696,7 @@ msgstr ""
 "%s üzerindeki dosya sistemi şimdi %u blok uzunlukta.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, fuzzy, c-format
 msgid "while trying to truncate %s"
 msgstr "- stat %s yapılmaya çalışılırken hata oluştu"
@@ -7654,12 +7767,12 @@ msgstr ""
 msgid "While trying to extend the last group"
 msgstr "- dış günlük açılmaya çalışılırken hata oluştu"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, fuzzy, c-format
 msgid "While trying to add group #%d"
 msgstr "- %s açılmaya çalışılırken hata oluştu"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
 msgid ""
 "Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
@@ -7667,37 +7780,37 @@ msgid ""
 msgstr ""
 
 #: resize/resize2fs.c:759
-#, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr ""
+#, fuzzy, c-format
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "başlangıç bloğu hatalı - %s"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "yedek bloklar"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "meta-veri blokları"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2475
 #, fuzzy
 msgid "new meta blocks"
 msgstr "meta-veri blokları"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2698
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2703
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr ""
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2776
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Bu olmamalıydı: boyutlandırırken düğümü kaybettik!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-msgid "EXT2FS Library version 1.43.4-WIP"
+msgid "EXT2FS Library version 1.44.4"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:12
@@ -8299,7 +8412,7 @@ msgid "MMP: device currently active"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
+msgid "MMP: e2fsck being run"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:152
@@ -8358,8 +8471,9 @@ msgid "Unknown checksum algorithm"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr ""
+#, fuzzy
+msgid "MMP block checksum does not match"
+msgstr "Süperblokların bulunduğu bloklar:"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
@@ -8457,7 +8571,11 @@ msgstr "Günlük süperbloğu yok!\n"
 #: lib/ext2fs/ext2_err.c:188
 #, fuzzy
 msgid "Inode is corrupted"
-msgstr "Dosya sisteminin uzunluğu görünürdeki uzunluktan büyük."
+msgstr "Ext3 günlüğü süperbloku bozuk.\n"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8651,16 +8769,27 @@ msgid "%s contains a %s file system\n"
 msgstr " hatalı bir dosya sistemi içeriyor"
 
 #: lib/support/plausible.c:276
-#, fuzzy, c-format
+#, c-format
 msgid "%s contains `%s' data\n"
-msgstr " hatalı bir dosya sistemi içeriyor"
+msgstr ""
 
-#~ msgid "Please run e2fsck on the filesystem.\n"
-#~ msgstr "Lütfen dosya sisteminde e2fsck çalıştırın.\n"
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %s: biteşlemler okunurken hata oluştu: %s\n"
 
 #, fuzzy
-#~ msgid "Invalid quotatype parameter: %s\n"
-#~ msgstr "'stride' parametresi geçersiz: %s\n"
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Uyarı, süperblokların tamamına yazma sorunu var."
+
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "düğüm %i (%Q) %Id için i_dir_acl, sıfır olmalı.\n"
 
 #~ msgid "@i %i has @cion flag set on @f without @cion support.  "
 #~ msgstr ""
@@ -8690,6 +8819,51 @@ msgstr " hatalı bir dosya sistemi içeriyor"
 #~ msgstr "düğüm sayısı hatalı - %s"
 
 #, fuzzy
+#~ msgid "Journal features:        "
+#~ msgstr "Günlük kullanıcıları:     %s\n"
+
+#~ msgid "Journal size:             "
+#~ msgstr "Günlük boyutu:            "
+
+#, fuzzy
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Günlük bloğu boyu:        %u\n"
+#~ "Günlük uzunluğu:          %u\n"
+#~ "Günlük ilk bloğu:         %u\n"
+#~ "Günlük sıralaması:        0x%08x\n"
+#~ "Günlük başlangıcı:        %u\n"
+#~ "Günlük kullanıcı sayısı:  %lu\n"
+
+#, fuzzy
+#~ msgid "Journal errno:            %d\n"
+#~ msgstr "Günlük kullanıcıları:     %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Günlük bloğu boyu:        %u\n"
+#~ "Günlük uzunluğu:          %u\n"
+#~ "Günlük ilk bloğu:         %u\n"
+#~ "Günlük sıralaması:        0x%08x\n"
+#~ "Günlük başlangıcı:        %u\n"
+#~ "Günlük kullanıcı sayısı:  %u\n"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "Günlük kullanıcıları:     %s\n"
+
+#, fuzzy
 #~ msgid "Failed to read the file system data \n"
 #~ msgstr "- dosya sistemi tabloları ayrılmaya çalışılırken hata oluştu"
 
@@ -8702,6 +8876,10 @@ msgstr " hatalı bir dosya sistemi içeriyor"
 #~ msgstr "- %s açılmaya çalışılırken hata oluştu"
 
 #, fuzzy
+#~ msgid "Invalid quotatype parameter: %s\n"
+#~ msgstr "'stride' parametresi geçersiz: %s\n"
+
+#, fuzzy
 #~ msgid "Couldn't allocate memory to parse quota options!\n"
 #~ msgstr "Seçenekleri çözümlemek için bellek ayrılamadı!\n"
 
@@ -8709,12 +8887,12 @@ msgstr " hatalı bir dosya sistemi içeriyor"
 #~ msgid "Couldn't allocate memory for tdb filename\n"
 #~ msgstr "Dosya sistemi türleri için bellek ayrılamadı\n"
 
-#~ msgid "%s is entire device, not just one partition!\n"
-#~ msgstr "%s diskin tamamı! Bir disk bölümü değil!\n"
-
 #~ msgid "Could not stat %s --- %s\n"
 #~ msgstr "stat %s yapılamadı --- %s\n"
 
+#~ msgid "%s is entire device, not just one partition!\n"
+#~ msgstr "%s diskin tamamı! Bir disk bölümü değil!\n"
+
 #~ msgid "<The ACL index inode>"
 #~ msgstr "<ACL indeksinin düğümü>"
 
@@ -8733,12 +8911,6 @@ msgstr " hatalı bir dosya sistemi içeriyor"
 #~ msgid "while calling iterator function"
 #~ msgstr "- yineleme işlevi çağrılırken hata oluştu"
 
-#~ msgid "while reading inode table (group %d)"
-#~ msgstr "- düğüm tablosu okunurken hata oluştu (grup %d)"
-
-#~ msgid "while writing inode table (group %d)"
-#~ msgstr "- düğüm tablosu yazılırken hata oluştu (grup %d)"
-
 #~ msgid "Pass 0: Doing byte-swap of filesystem\n"
 #~ msgstr "Geçiş 0: dosya sisteminin bayt sıralaması düzeltiliyor\n"
 
@@ -8758,9 +8930,6 @@ msgstr " hatalı bir dosya sistemi içeriyor"
 #~ msgid "Incompatible options not allowed when byte-swapping.\n"
 #~ msgstr "Ters baytlar düzeltilirken uyumsuz seçeneklere izin verilmez.\n"
 
-#~ msgid "%s: Filesystem byte order already normalized.\n"
-#~ msgstr "%s Dosya sisteminde baytlar zaten normal.\n"
-
 #~ msgid "while retrying to write block bitmaps for %s"
 #~ msgstr "- %s için blok biteşlemlerinin yazılması yinelenirken hata oluştu"
 
@@ -8839,17 +9008,6 @@ msgstr " hatalı bir dosya sistemi içeriyor"
 #~ msgid "Duplicate/bad @b(s) in @i %i:"
 #~ msgstr "Düğüm %i içindeki tekrarlanmış/hatalı blok(lar):"
 
-#~ msgid ""
-#~ "Extended options are separated by commas, and may take an argument which\n"
-#~ "is set off by an equals ('=') sign.  Valid raid options are:\n"
-#~ "\tea_ver=<ea_version (1 or 2)\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Belirtilen ek seçenekler hatalı. Ek seçenekler '=' işaretli çiftler\n"
-#~ "virgüllerle ayrılarak verilir. Geçerli raid seçenekleri:\n"
-#~ "\tea_ver=<ek_özellik_sürümü> (1 ya da 2)\n"
-#~ "\n"
-
 #~ msgid "       thisoff     block fs_blk_sz  blksz grp last_mount\n"
 #~ msgstr "       thisoff     blok ds_blok_boyu  blokboyu grup son_bağlama\n"
 
index b372285..59158d2 100644 (file)
Binary files a/po/uk.gmo and b/po/uk.gmo differ
index 759a37f..1fc50c1 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -5,7 +5,7 @@
 #
 #     2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,.
 # Theodore Ts'o <tytso@mit.edu>, 2013.
-# Yuri Chornoivan <yurchor@ukr.net>, 2013, 2014, 2016.
+# Yuri Chornoivan <yurchor@ukr.net>, 2013, 2014, 2016, 2017, 2018, 2019.
 #. 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,
 #. there is an @-expansion, where strings like "@i" are expanded to
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -50,7 +57,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.43.1\n"
+"Project-Id-Version: e2fsprogs 1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2016-06-12 09:06+0300\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2019-07-20 17:17+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
-"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
 "Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 1.5\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 19.03.70\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Помилковий блок %u поза доступним діапазоном; проігноровано.\n"
@@ -97,11 +104,12 @@ msgstr "при перевірці правильності inode пошкодж
 msgid "while reading the bad blocks inode"
 msgstr "при читанні inode пошкоджених блоків"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "під час спроби відкрити %s"
@@ -111,7 +119,7 @@ msgstr "під час спроби відкрити %s"
 msgid "while trying popen '%s'"
 msgstr "при спробі відкрити '%s'"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "при читанні списку пошкоджених блоків з файла"
 
@@ -122,9 +130,11 @@ msgstr "при оновленні inode пошкоджених блоків"
 #: e2fsck/badblocks.c:133
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
-msgstr ""
-"Попередження: в inode пошкоджених блоків знайдено недопустимий блок %u. "
-"Очищено.\n"
+msgstr "Попередження: в inode пошкоджених блоків знайдено недопустимий блок %u. Очищено.\n"
+
+#: e2fsck/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "під час вивільнення файла tdb dir_info"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -194,20 +204,19 @@ msgstr "Користування: %s диск\n"
 #: e2fsck/flushb.c:64
 #, c-format
 msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
-msgstr ""
-"Підтримки ioctl BLKFLSBUF не передбачено! Скидання буферів неможливе.\n"
+msgstr "Підтримки ioctl BLKFLSBUF не передбачено! Скидання буферів неможливе.\n"
 
 #: e2fsck/iscan.c:44
 #, c-format
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Використання: %s [-F] [-I inode_buffer_blocks] пристрій\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "під час спроби відкриття %s для спорожнення"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "під час спроби спорожнення %s"
@@ -217,11 +226,11 @@ msgstr "під час спроби спорожнення %s"
 msgid "while trying to open '%s'"
 msgstr "під час спроби відкрити «%s»"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr "під час початкового сканування inode"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr "під час отримання наступного inode"
 
@@ -230,363 +239,379 @@ msgstr "під час отримання наступного inode"
 msgid "%u inodes scanned.\n"
 msgstr "Виконано сканування %u inode.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "читання суперблоку журналу\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: не знайдено коректного суперблоку журналу\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: журнал є надто коротким\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: відновлюємо журнал\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
-msgstr ""
-"%s: відновлення журналу не буде виконано до виходу з режиму лише читання\n"
+msgstr "%s: відновлення журналу не буде виконано до виходу з режиму лише читання\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "під час спроби повторно відкрити %s"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "aрозширений атрибут"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Aпомилка під час розподілу"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bблок"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bбітова карта"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "cстискання"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Cконфліктує з якоюсь іншою файловою системою @b"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "dкаталог"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "Dвилучено"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "eзапис"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "Eзапис «%Dn» у %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "fфайлова система"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fдля @i %i (%Q) є"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "gгрупа"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "hinode каталогу HTREE"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "iinode"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Iзаборонений"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jжурнал"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "lзагублені+знайдені"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Lє посиланням"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mкратне використання"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "nнекоректний"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "oосиротілий"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pпроблема у"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qквота"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "rкореневий inode"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "sмає бути"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ссупер@b"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "uнеприєднаний"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vпристрій"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xрозширення"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "zнульової довжини"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<Порожній inode>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<inode пошкоджених блоків>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<inode квоти користувача>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<inode квоти групи>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<inode завантажувача>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<inode відновлюваного каталогу>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<inode дескриптора групи>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<inode журналу>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Зарезервований inode 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<Зарезервований inode 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "звичайний файл"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "каталог"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "символьний пристрій"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "блоковий пристрій"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "іменований канал"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "символічне посилання"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "сокет"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "файл невідомого типу з режимом доступу 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "опосередкований блок"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "двічі опосередкований блок"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "тричі опосередкований блок"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "блок перенесення"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "№ блоку"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "користувач"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "група"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr "проект"
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "невідомий тип квоти"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "карта inode кратного використання"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "внутрішня помилка: не вдалося знайти dup_blk для %llu\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "повернуто з clone_file_block"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
-msgstr ""
-"внутрішня помилка: не вдалося виконати пошук запису блоку з розширеним "
-"атрибутом для %llu"
+msgstr "внутрішня помилка: не вдалося виконати пошук запису блоку з розширеним атрибутом для %llu"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
-msgstr ""
-"внутрішня помилка: не вдалося виконати пошук запису inode з розширеним "
-"атрибутом для %u"
+msgstr "внутрішня помилка: не вдалося виконати пошук запису inode з розширеним атрибутом для %u"
+
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr "під час хешування запису з e_value_inum = %u"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 msgid "reading directory block"
 msgstr "читання блоку каталогу"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 msgid "in-use inode map"
 msgstr "карта використовуваних inode"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 msgid "directory inode map"
 msgstr "карта inode каталогів"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 msgid "regular file inode map"
 msgstr "карта inode звичайних файлів"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr "карта використовуваних блоків"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1263
 msgid "metadata block map"
 msgstr "карта блоків метаданих"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 msgid "opening inode scan"
 msgstr "розпочинаємо сканування inode"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr "отримуємо наступний inode від засобу сканування"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 msgid "Pass 1"
 msgstr "Прохід 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "читаємо опосередковані блоки inode %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 msgid "bad inode map"
 msgstr "картка пошкоджених inode"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 msgid "inode in bad block map"
 msgstr "inode у карті пошкоджених блоків"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 msgid "imagic inode map"
 msgstr "карта inode imagic"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr "карта блоків кратного використання"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr "карта блоків з розширеним атрибутом"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu(%c): мало бути %6lu маємо фізичних %6lu (к-ть блоків %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 msgid "block bitmap"
 msgstr "карта бітів блоку"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 msgid "inode bitmap"
 msgstr "бітова карта inode"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 msgid "inode table"
 msgstr "таблиця inode"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Прохід 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 msgid "Can not continue."
 msgstr "Продовження неможливе."
 
@@ -606,196 +631,203 @@ msgstr "Прохід 3"
 msgid "inode loop detection bitmap"
 msgstr "бітова карта виявлення циклів inode"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Прохід 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Прохід 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
-msgstr ""
-"check_inode_bitmap_checksum: помилка під час спроби розподілити пам’ять"
+msgstr "check_inode_bitmap_checksum: помилка під час спроби розподілити пам’ять"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr "check_block_bitmap_checksum: помилка розміщення у пам’яті"
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 msgid "(no prompt)"
 msgstr "(без запиту)"
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 msgid "Fix"
 msgstr "Виправити"
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:54
 msgid "Clear"
 msgstr "Очистити"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr "Змінити розташування"
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
 msgid "Allocate"
 msgstr "Розподілити"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 msgid "Expand"
 msgstr "Розгорнути"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 msgid "Connect to /lost+found"
 msgstr "З’єднати з /lost+found"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 msgid "Create"
 msgstr "Створити"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr "Врятувати"
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
 msgid "Truncate"
 msgstr "Вкоротити"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 msgid "Clear inode"
 msgstr "Спорожнити inode"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 msgid "Abort"
 msgstr "Перервати"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 msgid "Split"
 msgstr "Розділити"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 msgid "Continue"
 msgstr "Продовжити"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr "Клонувати блоки кратного використання"
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 msgid "Delete file"
 msgstr "Вилучити файл"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 msgid "Suppress messages"
 msgstr "Придушити виведення повідомлень"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
 msgid "Unlink"
 msgstr "Від’єднати"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 msgid "Clear HTree index"
 msgstr "Спорожнити покажчик HTree"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 msgid "Recreate"
 msgstr "Створити заново"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr "Оптимізувати"
+
+#: e2fsck/problem.c:81
 msgid "(NONE)"
 msgstr "(НЕМАЄ)"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 msgid "FIXED"
 msgstr "ВИПРАВЛЕНО"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 msgid "CLEARED"
 msgstr "ОЧИЩЕНО"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr "ЗМІНЕНО РОЗТАШУВАННЯ"
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 msgid "ALLOCATED"
 msgstr "РОЗМІЩЕНО"
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr "РОЗШИРЕНО"
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr "ПОВТОРНО З’ЄДНАНО"
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 msgid "CREATED"
 msgstr "СТВОРЕНО"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr "ВРЯТОВАНО"
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
 msgid "TRUNCATED"
 msgstr "ОБРІЗАНО"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 msgid "INODE CLEARED"
 msgstr "INODE СПОРОЖНЕНО"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 msgid "ABORTED"
 msgstr "ПЕРЕРВАНО"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 msgid "SPLIT"
 msgstr "РОЗДІЛЕНО"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr "ПРОДОВЖЕНО"
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr "КЛОНОВАНО БЛОКИ КРАТНОГО ВИКОРИСТАННЯ"
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 msgid "FILE DELETED"
 msgstr "ФАЙЛ ВИЛУЧЕНО"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr "ПРИДУШЕНО"
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr "ВІД’ЄДНАНО"
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 msgid "HTREE INDEX CLEARED"
 msgstr "ІНДЕКС HTREE ОЧИЩЕНО"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 msgid "WILL RECREATE"
 msgstr "ПЕРЕСТВОРИТЬ"
 
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr "ОПТИМІЗУЄ"
+
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:115
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "бітова карта блоків для групи %g не перебуває у групі. (блок %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:119
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "бітова карта inode для групи %g не перебуває у групі. (блок %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -812,7 +844,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -838,7 +870,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -851,30 +883,29 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
 "from the @b size.\n"
 msgstr ""
 "Розмір блоку супреблоку = %b, розмір фрагмента = %c.\n"
-"У цій версії e2fsck не передбачено варіанта, коли розміри фрагмента "
-"відрізняються\n"
+"У цій версії e2fsck не передбачено варіанта, коли розміри фрагмента відрізняються\n"
 "від розмірів блоку.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "кількість блоків на групу у суперблоці = %b, мало б бути %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "перший блок даних у супрерблоці = %b, мав би бути %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -882,8 +913,8 @@ msgstr ""
 "файлова система не мала UUID; створюємо відповідний UUID.\n"
 "\n"
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -901,157 +932,141 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Виявлено пошкодження у @S.  (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:186
+#, no-c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Помилка під час визначення розміру фізичного тому: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:191
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "Кількість @i у суперблоці дорівнює, має бути %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "У Hurd не передбачено підтримки можливості визначення типу файлів.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:201
+#, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "Журна суперблоку є некоректним (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 msgid "External @j has multiple @f users (unsupported).\n"
-msgstr ""
-"У зовнішньому журналі визначено декілька користувачів файлової системи (така "
-"конфігурація не підтримується).\n"
+msgstr "У зовнішньому журналі визначено декілька користувачів файлової системи (така конфігурація не підтримується).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:211
 msgid "Can't find external @j\n"
 msgstr "Не вдалося знайти зовнішнього @j\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 msgid "External @j has bad @S\n"
 msgstr "У зовнішнього журналу пошкоджено суперблок\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 msgid "External @j does not support this @f\n"
-msgstr ""
-"Для зовнішнього журналу не передбачено підтримки цієї файлової системи\n"
+msgstr "Для зовнішнього журналу не передбачено підтримки цієї файлової системи\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 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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 ""
-"суперблок журналу файлової системи належить до невідомого типу %N (не "
-"підтримується).\n"
-"Ймовірно, ваша копія e2fsck є застарілою і/або не підтримує цього формату "
-"журналу.\n"
+"суперблок журналу файлової системи належить до невідомого типу %N (не підтримується).\n"
+"Ймовірно, ваша копія e2fsck є застарілою і/або не підтримує цього формату журналу.\n"
 "Ймовірно, суперблок журналу пошкоджено.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:235
 msgid "@j @S is corrupt.\n"
 msgstr "суперблок журналу пошкоджено.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "прапорець суперблоку has_journal скинуто, але наявним є журнал.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
-msgstr ""
-"Встановлено прапорець needs_recovery для суперблоку, але не виявлено "
-"журналу.\n"
+msgstr "Встановлено прапорець needs_recovery для суперблоку, але не виявлено журналу.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:250
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
-msgstr ""
-"Знято прапорець needs_recovery для суперблоку, але у журналі немає даних.\n"
+msgstr "Знято прапорець needs_recovery для суперблоку, але у журналі немає даних.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:255
 msgid "Clear @j"
 msgstr "Очистити журнал"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr ""
-"Для файлової системи встановлено прапорці можливостей, але ця файлова "
-"система має версію 0.  "
+msgstr "Для файлової системи встановлено прапорці можливостей, але ця файлова система має версію 0.  "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:265
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "осиротілий inode %s %i (uid=%Iu, gid=%Ig, режим=%Im, розмір=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:270
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "знайдено некоректний %B (%b) у осиротілому inode %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:275
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "Вже спрожнено знайдені %B (%b) у осиротілому inode %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:281
+#, no-c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "некоректний осиротілий @i %i у суперблоці.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:287
+#, no-c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "некоректний @i %i у списку осиротілих @i.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:292
 msgid "@j @S has an unknown read-only feature flag set.\n"
-msgstr ""
-"Для суперблоку журналу встановлено невідомий придатний лише до читання "
-"прапорець можливості.\n"
+msgstr "Для суперблоку журналу встановлено невідомий придатний лише до читання прапорець можливості.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:297
 msgid "@j @S has an unknown incompatible feature flag set.\n"
-msgstr ""
-"Для суперблоку журналу встановлено невідомий і несумісний прапорець "
-"можливості.\n"
+msgstr "Для суперблоку журналу встановлено невідомий і несумісний прапорець можливості.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
-msgstr ""
-"Підтримки цієї версії журналу у поточній версії e2fsck не передбачено.\n"
+msgstr "Підтримки цієї версії журналу у поточній версії e2fsck не передбачено.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:308
+#, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1061,8 +1076,8 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:314
+#, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1073,7 +1088,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1084,20 +1099,18 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 msgid "Run @j anyway"
 msgstr "Запустити журналювання попри це"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
-msgstr ""
-"У резервному суперблоці не встановлено прапорець відновлення, отже, попри "
-"все запускаємо журнал.\n"
+msgstr "У резервному суперблоці не встановлено прапорець відновлення, отже, попри все запускаємо журнал.\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1107,7 +1120,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1116,18 +1129,18 @@ msgstr ""
 "має значення %N; має бути нульовим.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr "Resize_@i не увімкнено, але зміна розміру @i є ненульовою.  "
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:352
 msgid "Resize @i not valid.  "
 msgstr "Зміна розміру @i є некоректною.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1137,7 +1150,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1146,14 +1159,14 @@ msgstr ""
 "\tтепер = %T) лежить у майбутньому.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:368
+#, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "підказкою суперблоку для зовнішнього суперблоку має бути %X.  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1162,291 +1175,282 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "контрольна сума дескриптора групи %g дорівнює %04x, а має бути %04y.  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
-msgstr ""
-"дескриптор групи %g позначено неініціалізованим без встановлення відповідної "
-"можливості.\n"
+msgstr "дескриптор групи %g позначено неініціалізованим без встановлення відповідної можливості.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:389
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
-msgstr ""
-"дескриптор групи %g містить дані щодо некоректної кількості невикористаних "
-"inode %b.  "
+msgstr "дескриптор групи %g містить дані щодо некоректної кількості невикористаних inode %b.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:394
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Бітову карту останнього блоку групи не ініціалізовано.  "
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "Запис дії журналу %i пошкоджено, повторне виконання перервано.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:405
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "Встановлено прапорець test_fs (і доступна ext4).  "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "Час останнього монтування суперблоку лежить у майбутньому.\n"
-"\t(менше ніж на день, ймовірно через помилковий час на апаратному "
-"годиннику)\n"
+"\t(менше ніж на день, ймовірно через помилковий час на апаратному годиннику)\n"
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "Час останнього запису суперблоку лежить у майбутньому.\n"
-"\t(менше ніж на день, ймовірно через помилковий час на апаратному "
-"годиннику)\n"
+"\t(менше ніж на день, ймовірно через помилковий час на апаратному годиннику)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 msgid "One or more @b @g descriptor checksums are invalid.  "
-msgstr ""
-"Одна або декілька контрольних сум дескрипторів груп блоків є некоректними.  "
+msgstr "Одна або декілька контрольних сум дескрипторів груп блоків є некоректними.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Встановлюємо для кількості вільних @inode значення %j (було %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Встановлюємо для кількості вільних блоків значення %c (було %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr "Робимо @i ÐºÐ²Ð¾Ñ\82и %i (%Q) Ð¿Ñ\80иÑ\85ованим.\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "Ð\9fÑ\80иÑ\85овÑ\83Ñ\94мо ÐºÐ²Ð¾Ñ\82и %U, @i %i (%Q).\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 msgid "@S has invalid MMP block.  "
 msgstr "Блок MMP суперблоку є некоректним.  "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
 msgid "@S has invalid MMP magic.  "
 msgstr "Контрольна сума MMP суперблоку є некоректною.  "
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:453
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2: %m\n"
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:459
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
-msgstr ""
-"metadata_csum суперблоку заміщує uninit_bg; не можна встановлювати обидва "
-"біти властивостей одночасно."
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "metadata_csum суперблоку заміщує uninit_bg; не можна встановлювати обидва біти властивостей одночасно."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "Ð\9aонÑ\82Ñ\80олÑ\8cна Ñ\81Ñ\83ма Ð±Ð»Ð¾ÐºÑ\83 MMP Ñ\81Ñ\83пеÑ\80блокÑ\83 Ð½Ðµ Ð²Ñ\96дповÑ\96даÑ\94 Ð±Ð»Ð¾ÐºÑ\83 MMP."
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+msgid "@S MMP @b checksum does not match.  "
+msgstr "Ð\9aонÑ\82Ñ\80олÑ\8cна Ñ\81Ñ\83ма Ð±Ð»Ð¾ÐºÑ\83 MMP Ñ\81Ñ\83пеÑ\80блокÑ\83 Ð½Ðµ Ð·Ð±Ñ\96гаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ñ\96з ÐµÑ\82алонноÑ\8e"
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
-msgstr ""
-"64-бітові файлові системи суперблоку потребують розширень для доступу до "
-"усього диска.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
+msgstr "64-бітові файлові системи суперблоку потребують розширень для доступу до усього диска.  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
-msgstr ""
-"Значення First_meta_bg є надто великим. (%N, максимальним є значення %g).  "
+msgstr "Значення First_meta_bg є надто великим. (%N, максимальним є значення %g).  "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:486
 msgid "External @j @S checksum does not match @S.  "
-msgstr ""
-"Контрольна сума суперблоку зовнішнього журналу не відповідає суперблоку.  "
+msgstr "Контрольна сума суперблоку зовнішнього журналу не відповідає суперблоку.  "
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
 msgstr "metadata_csum_seed суперблоку необов’язково без metadata_csum."
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
-msgstr ""
-"Помилка під час спроби ініціалізувати контекст квот у бібліотеці підтримки: "
-"%m\n"
+msgstr "Помилка під час спроби ініціалізувати контекст квот у бібліотеці підтримки: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Помилкове значення потрібного додаткового розміру у @S (%N).  "
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Помилкове значення бажаного додаткового розміру у @S (%N).  "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "Некоректна квота %U, @i %i.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr "@S мав би забагато inode (%N).\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
+"Увімкнено можливості Resize_@i та meta_bg features. Ці можливості є несумісними.\n"
+"Слід вимкнути можливість Resize_@i.  "
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Прохід 1: перевіряємо @i, блоки та розміри\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 msgid "@r is not a @d.  "
 msgstr "кореневий inode не є каталогом.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 msgid "@r has dtime set (probably due to old mke2fs).  "
-msgstr ""
-"для кореневого inode встановлено dtime (ймовірно, через застарілу програму "
-"mke2fs).  "
+msgstr "для кореневого inode встановлено dtime (ймовірно, через застарілу програму mke2fs).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:544
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Для зарезервованого @i %i (%Q) визначено некоректний режим.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:550
+#, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "для вилученого @i %i визначено нульове значення dtime.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "@i %i використовується, але для нього встановлено dtime.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:562
+#, no-c-format
 msgid "@i %i is a @z @d.  "
 msgstr "@i %i є каталогом нульової довжини.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:567
 msgid "@g %g's @b @B at %b @C.\n"
-msgstr ""
-"бітова карта блоків групи %g за адресою %b конфліктує з іншим блоком "
-"файлової системи.\n"
+msgstr "бітова карта блоків групи %g за адресою %b конфліктує з іншим блоком файлової системи.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:572
 msgid "@g %g's @i @B at %b @C.\n"
-msgstr ""
-"бітова карта inode групи %g у %b конфліктує з якимось іншим блоком файлової "
-"системи.\n"
+msgstr "бітова карта inode групи %g у %b конфліктує з якимось іншим блоком файлової системи.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:577
 msgid "@g %g's @i table at %b @C.\n"
-msgstr ""
-"таблиця inode групи %g у %b конфліктує з певним блоком іншої файлової "
-"системи.\n"
+msgstr "таблиця inode групи %g у %b конфліктує з певним блоком іншої файлової системи.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:582
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "бітову карту блоків групи %g (%b) пошкоджено.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "карту inode групи %g (%b) пошкоджено.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size дорівнює %Is, має бути %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_blocks — %Ib, має бути %N.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in @i %i.  "
 msgstr "некоректне значення %B (%b) у @i %i.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B (%b) перекриває метадані файлової системи у @i %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:613
+#, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "@i %i містить некоректні блоки.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "У @i %i забагато неприпустимих блоків.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "некоректне %B (%b) у помилковому блоковому @i.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "Помилковий @i блоку містить некоректні блоки.  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Використовується дублікат або помилковий блок!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
-msgstr ""
-"Пошкоджений блок %b використано як опосередкований блок @i пошкодженого "
-"блоку.  "
+msgstr "Пошкоджений блок %b використано як опосередкований блок @i пошкодженого блоку.  "
 
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1460,7 +1464,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1471,144 +1475,133 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
 "\n"
 msgstr ""
-"Ви можете вилучити цей блок зі списку пошкоджених блоків і сподіватися на "
-"те,\n"
+"Ви можете вилучити цей блок зі списку пошкоджених блоків і сподіватися на те,\n"
 "що блок насправді не пошкоджено. Втім, гарантувати це неможливо.\n"
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Основний суперблок (%b) перебуває у списку помилкових блоків.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:667
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
-msgstr ""
-"Блок %b у основних дескрипторах груп перебуває у списку помилкових блоків\n"
+msgstr "Блок %b у основних дескрипторах груп перебуває у списку помилкових блоків\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:673
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Попередження: суперблок групи %g (%b) є помилковим.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:679
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
-msgstr ""
-"Попередження: копія дескрипторів груп групи %g містить пошкоджений блок "
-"(%b).\n"
+msgstr "Попередження: копія дескрипторів груп групи %g містить пошкоджений блок (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:685
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr ""
-"Помилка у програмі? Блок №%b витребувано без причини у process_bad_block.\n"
+msgstr "Помилка у програмі? Блок №%b витребувано без причини у process_bad_block.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:691
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
-msgstr ""
-"помилка під час отримання %N неперервних блоків у групі блоків %g для %s: "
-"%m\n"
+msgstr "помилка під час отримання %N неперервних блоків у групі блоків %g для %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
-#, c-format
+#: e2fsck/problem.c:697
+#, no-c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "помилка під час отримання буфера блоків для пересування %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:702
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Пересування %g групи %s з %b до %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
-#, c-format
+#: e2fsck/problem.c:708
+#, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Пересування %g групи %s до %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Попередження: не вдалося прочитати блок %b з %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:718
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Попередження: не вдалося записати блок %b для %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
 msgstr "помилка під час отримання бітової кари @i (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
 msgstr "помилка під час отримання карти блоків (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:734
+#, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "помилка під час отримання даних щодо посилання icount: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:740
+#, no-c-format
 msgid "@A @d @b array: %m\n"
 msgstr "помилка під час отримання масиву блоків каталогів: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:746
+#, no-c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Помилка під час сканування @i (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Помилка під час виконання ітерації над блоками у @i %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:757
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
-msgstr ""
-"Помилка під час спроби зберегти дані щодо кількості @i (@i=%i, кількість="
-"%N): %m\n"
+msgstr "Помилка під час спроби зберегти дані щодо кількості @i (@i=%i, кількість=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:762
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr ""
-"Помилка під час спроби зберегти дані щодо блоків каталогу (@i=%i, блок=%b, к-"
-"ть=%N): %m\n"
+msgstr "Помилка під час спроби зберегти дані щодо блоків каталогу (@i=%i, блок=%b, к-ть=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
-#, c-format
+#: e2fsck/problem.c:769
+#, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Помилка під час читання @i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "Для @i %i встановлено прапорець imagic.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
@@ -1617,155 +1610,143 @@ msgstr ""
 "встановлено прапорець незмінності або лише дописування.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Спеціальний @i (пристрій/сокет/fifo) %i має ненульовий розмір.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
 msgid "@j @i is not in use, but contains data.  "
 msgstr "@i журналу не використовується, але містить дані.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 msgid "@j is not regular file.  "
 msgstr "журнал не є звичайним файлом.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:812
+#, no-c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "@i %i є частиною списку осиротілих @i.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:818
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr ""
-"виявлено @i, які були частиною пов’язаного списку пошкоджених осиротілих "
-"блоків.  "
+msgstr "виявлено @i, які були частиною пов’язаного списку пошкоджених осиротілих блоків.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:823
 msgid "@A refcount structure (%N): %m\n"
 msgstr "помилка під час розміщення структури кількості посилань (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:828
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Помилка під час читання блоку атрибутів %b для @i %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:833
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "@i %i містить пошкоджений блок розширеного атрибута %b.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Помилка під час читання блоку розширених атрибутів %b (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:843
 msgid "@a @b %b has reference count %r, @s %N.  "
-msgstr ""
-"у блоку розширеного атрибута %b кількість посилань дорівнює %r, а має бути "
-"%N.  "
+msgstr "у блоку розширеного атрибута %b кількість посилань дорівнює %r, а має бути %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:848
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Помилка під час записування блоку розширених атрибутів %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:853
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "блок розширеного атрибута %b має h_blocks > 1.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:858
 msgid "@A @a region allocation structure.  "
-msgstr ""
-"помилка під час спроби розмістити структуру розміщення регіонів розширених "
-"атрибутів.  "
+msgstr "помилка під час спроби розмістити структуру розміщення регіонів розширених атрибутів.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "блок розширеного атрибута %b пошкодженого (конфлікт розміщення).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:868
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "блок розширених атрибутів %b пошкоджено (некоректна назва).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "блок розширених атрибутів %b пошкоджено (некоректне значення).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:879
+#, no-c-format
 msgid "@i %i is too big.  "
 msgstr "@i %i є надто великим.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B (%b) робить каталог надто великим.  "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr "%B (%b) робить файл надто великим.  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "%B (%b) робить символічне посилання надто великим.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr ""
-"для @i %i встановлено прапорець INDEX_FL у файловій системі, де підтримки "
-"htree не передбачено.\n"
+msgstr "для @i %i встановлено прапорець INDEX_FL у файловій системі, де підтримки htree не передбачено.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "для @i %i встановлено прапорець INDEX_FL, але він не є каталогом.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:911
+#, no-c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "inode каталогу HTREE %i має некоректний кореневий вузол.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:916
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "@h %i належить до непідтримуваної версії хешу (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
-msgstr ""
-"inode каталогу HTREE %i використовує несумісний прапорець кореневого вузла "
-"htree.\n"
+msgstr "inode каталогу HTREE %i використовує несумісний прапорець кореневого вузла htree.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:927
 msgid "@h %i has a tree depth (%N) which is too big\n"
-msgstr ""
-"inode каталогу HTREE %i має рівень вкладеності у ієрархії (%N), який є надто "
-"великим\n"
+msgstr "inode каталогу HTREE %i має рівень вкладеності у ієрархії (%N), який є надто великим\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1774,56 +1755,55 @@ msgstr ""
 "метаданими файлової системи.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Помилка (повторного) створення @i зміни розмірів: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "@i %i має надмірний розмір (%IS), це некоректно\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:950
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "розширений атрибут у @i %i має некоректне значення namelen (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:955
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "розширений атрибут у @i %i має некоректний відступ значення (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:960
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
-msgstr ""
-"розширений атрибут у @i %i має некоректний блок значення (%N), має бути 0\n"
+msgstr "розширений атрибут у @i %i має некоректний блок значення (%N), має бути 0\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:965
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "розширений атрибут у @i %i має некоректний розмір значення (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:970
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "розширений атрибут у @i %i має некоректний хеш (%N)\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:975
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "@i %i є %It, але, здається, він насправді є каталогом.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
-#, c-format
+#: e2fsck/problem.c:981
+#, no-c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Помилка під час читання розширеної ієрархії у inode %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1833,7 +1813,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1843,7 +1823,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1852,35 +1832,31 @@ msgstr ""
 "\t(логічний блок %c, фізичний блок %b, некоректна довжина %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
-msgstr ""
-"для @i %i встановлено прапорець EXTENTS_FL на файловій системі без підтримки "
-"розширень.\n"
+msgstr "для @i %i встановлено прапорець EXTENTS_FL на файловій системі без підтримки розширень.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
-msgstr ""
-"@i %i записано у форматі розширення, але у суперблоці немає можливості "
-"EXTENTS\n"
+msgstr "@i %i записано у форматі розширення, але у суперблоці немає можливості EXTENTS\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "@i %i не має EXTENT_FL, але його записано у форматі розширення\n"
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "Для швидкого символічного посилання %i встановлено EXTENT_FL.  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1889,39 +1865,39 @@ msgstr ""
 "\t(некоректний логічний блок %c, фізичний блок %b, довжина %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1030
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "@i %i містить некоректний вузол розширення (blk %b, lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1036
+#, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Помилка під час перетворення бітової карти блоків підкластера: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not regular file.  "
 msgstr "@i квоти не є звичайним файлом.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
 msgid "@q @i is not in use, but contains data.  "
 msgstr "@i квоти не використовується, але містить дані.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 msgid "@q @i is visible to the user.  "
 msgstr "@i квоти є видимим користувачеві.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 msgid "The bad @b @i looks @n.  "
 msgstr "Помилковий @i блоку виглядає некоректним.  "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1930,44 +1906,41 @@ msgstr ""
 "\t(некоректний логічний блок %c, фізичний блок %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, c-format
+#: e2fsck/problem.c:1067
+#, no-c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "здається, @i %i містить мотлох.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr "@i %i пройшов перевірку, але контрольна сума не відповідає @i.  "
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "розширений атрибут @i %i пошкоджено (конфлікт розміщення).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"блок розширення @i %i пройшов перевірку, але контрольна сума не відповідає "
-"розширенню\n"
+"блок розширення @i %i пройшов перевірку, але контрольна сума не відповідає розширенню\n"
 "\t(логічний блок %c, фізичний блок %b, довжина %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
-msgstr ""
-"блок розширеного атрибута @i %i %b пройшов перевірку, але контрольна сума не "
-"відповідає блокові.  "
+msgstr "блок розширеного атрибута @i %i %b пройшов перевірку, але контрольна сума не відповідає блокові.  "
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1977,7 +1950,7 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1986,63 +1959,54 @@ msgstr ""
 "\t(логічний блок %c, фізичний блок %b, довжина %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
-msgstr ""
-"@i %i містить вбудовані дані, але у суперблоку немає властивості "
-"INLINE_DATA\n"
+msgstr "@i %i містить вбудовані дані, але у суперблоку немає властивості INLINE_DATA\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
-msgstr ""
-"для @i %i встановлено прапорець INLINE_DATA_FL на файловій системі без "
-"підтримки вбудованих даних.\n"
+msgstr "для @i %i встановлено прапорець INLINE_DATA_FL на файловій системі без підтримки вбудованих даних.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
-msgstr ""
-"@i %i, блок %b конфліктує із критичними метаданими, пропускаємо перевірки "
-"блоків.\n"
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+msgstr "@i %i, блок %b конфліктує із критичними метаданими, пропускаємо перевірки блоків.\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "@i каталогу %i, блок %b, має бути у блоці %c.  "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1138
+#, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "@i каталогу %i позначено як неініціалізований у блоці %c.  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
 msgstr ""
-"логічний блок @i %i %b (фізичний блок %c) порушує правила розподілу "
-"кластерів.\n"
+"логічний блок @i %i %b (фізичний блок %c) порушує правила розподілу кластерів.\n"
 "Буде виправлено на кроці 1B.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
-msgstr ""
-"для @i %i встановлено прапорець INLINE_DATA_FL, але відповідного атрибута не "
-"знайдено.  "
+msgstr "для @i %i встановлено прапорець INLINE_DATA_FL, але відповідного атрибута не знайдено.  "
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
@@ -2051,52 +2015,42 @@ msgstr ""
 "встановлено розширення або прапорець вбудованих даних.  "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
-msgstr ""
-"@i %i має розширений заголовок, але встановлено прапорець вбудованих даних.\n"
+msgstr "@i %i має розширений заголовок, але встановлено прапорець вбудованих даних.\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
-msgstr ""
-"здається, @i %i містить вбудовані дані, але для нього встановлено прапорець "
-"розширення.\n"
+msgstr "здається, @i %i містить вбудовані дані, але для нього встановлено прапорець розширення.\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
-msgstr ""
-"здається, @i %i містить карту блоків, але встановлено прапорці вбудованих "
-"даних і розширення.\n"
+msgstr "здається, @i %i містить карту блоків, але встановлено прапорці вбудованих даних і розширення.\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
-msgstr ""
-"@i %i містить вбудовані дані і встановлено прапорці розширення, але у "
-"i_block міститься мотлох.\n"
+msgstr "@i %i містить вбудовані дані і встановлено прапорці розширення, але у i_block міститься мотлох.\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
-msgstr ""
-"У списку пошкоджених блоків повідомляється, що @i списку пошкоджених блоків "
-"пошкоджено.  "
+msgstr "У списку пошкоджених блоків повідомляється, що @i списку пошкоджених блоків пошкоджено.  "
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1191
 msgid "@A @x region allocation structure.  "
-msgstr ""
-"помилка під час спроби розмістити структуру розміщення регіонів розширення.  "
+msgstr "помилка під час спроби розмістити структуру розміщення регіонів розширення.  "
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -2105,92 +2059,107 @@ msgstr ""
 "\t(логічний блок %c, некоректний фізичний блок %b, довжина %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
 msgid "@A memory for encrypted @d list\n"
 msgstr "помилка розміщення у пам’яті списку зашифрованих каталогів\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr "дерево розширень @i %i могло б бути вужчим (%b; могло бути <= %c)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr "@i %i на файловій системі bigalloc не може бути пов’язане із блоком.  "
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, c-format
+#: e2fsck/problem.c:1218
+#, no-c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "@i %i має пошкоджений заголовок розширень.  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
+msgstr "Часові позначки на @i %i після 4 квітня 2310 року ймовірно є часовими позначками періоду часу до 1970 року.\n"
+
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "@i %i містить @I @a значення @i %N.\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "@i %i містить @n @a. EA @i %N не містить прапорця EA_INODE.\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
 msgstr ""
-"Часові позначки на @i %i після 4 квітня 2310 року ймовірно є часовими "
-"позначками періоду часу до 1970 року.\n"
+"EA @i %N для батьківського @i %i не містить прапорця EA_INODE.\n"
+" "
 
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 "\n"
-"Виконуємо додаткові проходи для усування блоків, які використано понад одним "
-"@i...\n"
+"Виконуємо додаткові проходи для усування блоків, які використано понад одним @i...\n"
 "Прохід 1B: повторюємо сканування для блоків кратного використання\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
-#, c-format
+#: e2fsck/problem.c:1255
+#, no-c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "блок(и) кратного використання у @i %i:"
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1271
+#, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Помилка під час сканування inode (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "помилка під час спроби розміщення @i (@i_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Помилка під час виконання ітерації над блоками у @i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
-msgstr ""
-"Помилка під час спроби коригування кількості посилань для блоку розширеного "
-"атрибута %b (@i %i): %m\n"
+msgstr "Помилка під час спроби коригування кількості посилань для блоку розширеного атрибута %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1298
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Прохід 1C: шукаємо у каталогах @i з кратним використанням блоків\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Прохід 1D: узгоджуємо блоки кратного використання\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2199,18 +2168,18 @@ msgstr ""
 "  має %r блоків кратного використання, які є спільними з %N файлами:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i %i, час внесення змін: %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
 msgid "\t<@f metadata>\n"
 msgstr "\t<метадані файлової системи>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2220,7 +2189,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2228,353 +2197,345 @@ msgstr ""
 "блоки кратного використання вже повторно призначено або клоновано.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1344
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Не вдалося клонувати файл: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1350
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "Прохід 1A: оптимізуємо ієрархії розширень\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, c-format
+#: e2fsck/problem.c:1356
+#, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "Не вдалося оптимізувати ієрархію розширень %p (%i): %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1361
 msgid "Optimizing @x trees: "
 msgstr "Оптимізуємо ієрархії розширень: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
-msgstr ""
-"Внутрішня помилка: дерево максимального розширення є надто великим (%b; мало "
-"бути=%c).\n"
+msgstr "Внутрішня помилка: дерево максимального розширення є надто великим (%b; мало бути=%c).\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr "дерево розширень @i %i (на рівні %b) мало б бути коротшим.  "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr "дерево розширень @i %i (на рівні %b) мало б бути вужчим.  "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Прохід 2: перевіряємо структуру каталогів\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1399
+#, no-c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "некоректний номер @i для «.» у @i каталогу %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1404
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E містить некоректний @i з номером %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1409
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E містить вилучений або невикористаний @i %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1414
 msgid "@E @L to '.'  "
 msgstr "@E @L на «.»  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1419
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E вказує на @i (%Di), розташований у помилковому блоці.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1424
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E @L на каталог %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1429
 msgid "@E @L to the @r.\n"
 msgstr "@E @L на @r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E містить некоректні символи у назві.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, c-format
+#: e2fsck/problem.c:1440
+#, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Пропущено «.» у inode каталогу %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1446
+#, no-c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Не вистачає «..» у @i каталогу %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1451
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Першим записом «%Dn» (@i=%Di) у @i каталогу %i (%p) має бути «.»\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1456
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Другим записом «%Dn» (@i=%Di) у @i каталогу %i має бути «..»\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr для inode дорівнює %IF, має бути нульовим.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1466
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl @F %If, а має бути нуль.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl @F %Id, а має бути нуль.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_size_high для %Id, має бути нулем.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N, а має бути нуль.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N, а має бути нуль.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "@i %i (%Q) має некоректний режим (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1491
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "@i каталогу %i, %B, відступ %N: каталог пошкоджено\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "inode каталогу %i, %B, відступ %N: назва файла є надто довгою\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "@i каталогу %i містить нерозподілений %B.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "запис каталогу «.» у @i каталогу %i не завершено символом NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "запис каталогу «..» у @i каталогу %i не завершено символом NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "@i %i (%Q) є некоректним символьним пристроєм.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "@i %i (%Q) є некоректним блоковим пристроєм.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E є дублікатом запису «.».\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E є дублікатом запису «..».\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Внутрішня помилка: не вдалося знайти dir_info для %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E має rec_len %Dr, має бути %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, c-format
+#: e2fsck/problem.c:1550
+#, no-c-format
 msgid "@A icount structure: %m\n"
 msgstr "помилка під час спроби розмістити структуру icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Помилка під час виконання ітерації списком блоків каталогів: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Помилка під час спроби читання блоку каталогу %b (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Помилка під час спроби записати блок каталогу %b (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
-msgstr ""
-"помилка під час спроби розмістити новий блок каталогу для @i %i (%s): %m\n"
+msgstr "помилка під час спроби розмістити новий блок каталогу для @i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Помилка під час спроби скасування розміщення @i %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1584
+#, no-c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "запис каталогу для «.» у %p (%i) є великим.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "@i %i (%Q) є некоректним FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "@i %i (%Q) є некоректним сокетом.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Встановлюємо тип файла для @E у значення %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1604
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E належить до некоректного типу файлів (було %Dt, має бути %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 msgstr "@E має установлений тип файла.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "@E має назву нульової довжини.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Символічне посилання %Q (@i #%i) є некоректним.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1624
 msgid "@a @b @F @n (%If).\n"
 msgstr "блок розширеного атрибута @F некоректним (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1629
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
-msgstr ""
-"файлова система містить великі файли, але не має прапорця LARGE_FILE у "
-"суперблоці.\n"
+msgstr "файлова система містить великі файли, але не має прапорця LARGE_FILE у суперблоці.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1634
 msgid "@p @h %d: %B not referenced\n"
 msgstr "проблема у inode каталогу HTREE %d: немає посилання\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "проблема у inode каталогу HTREE %d: подвійне посилання на %B\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1644
 msgid "@p @h %d: %B has bad min hash\n"
-msgstr ""
-"проблема у @i каталогу HTREE %d: %B має помилкову мінімальну хеш-суму\n"
+msgstr "проблема у @i каталогу HTREE %d: %B має помилкову мінімальну хеш-суму\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1649
 msgid "@p @h %d: %B has bad max hash\n"
-msgstr ""
-"проблема у @i каталогу HTREE %d: %B має помилкову максимальну хеш-суму\n"
+msgstr "проблема у @i каталогу HTREE %d: %B має помилкову максимальну хеш-суму\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
 msgstr "некоректний inode каталогу HTREE %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "проблема у @i каталогу HTREE %d (%q): помилковий номер блоку %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "проблема у @i каталогу HTREE %d: кореневий вузол є некоректним\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1674
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "проблема у @i каталогу HTREE %d: %B має некоректне обмеження (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1679
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "проблема у @i каталогу HTREE %d: %B має некоректну кількість (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1684
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "проблема у @i каталогу HTREE %d: %B має невпорядковану таблицю хешів\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1689
 msgid "@p @h %d: %B has @n depth (%N)\n"
-msgstr ""
-"проблема у @i каталогу HTREE %d: %B має некоректний рівень вкладеності (%N)\n"
+msgstr "проблема у @i каталогу HTREE %d: %B має некоректний рівень вкладеності (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
 msgstr "Виявлено дублікат запису.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2586,7 +2547,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2597,166 +2558,156 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi @F %N, має бути нуль.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "Неочікуваний блок у @i каталогу HTREE %d (%q).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1719
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr "@E посилається на @i %Di у групі %g, де встановлено _INODE_UNINIT.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1724
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
-msgstr ""
-"@E посилається на @i %Di, який знайдено у області невикористаних @i групи "
-"%g.\n"
+msgstr "@E посилається на @i %Di, який знайдено у області невикористаних @i групи %g.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1729
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "i_file_acl_hi @F %N, має бути нуль.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, c-format
+#: e2fsck/problem.c:1735
+#, no-c-format
 msgid "@p @h %d: root node fails checksum.\n"
-msgstr ""
-"проблема у @i каталогу HTREE %d: кореневий вузол не пройшов перевірки "
-"контрольною сумою\n"
+msgstr "проблема у @i каталогу HTREE %d: кореневий вузол не пройшов перевірки контрольною сумою\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, c-format
+#: e2fsck/problem.c:1741
+#, no-c-format
 msgid "@p @h %d: internal node fails checksum.\n"
-msgstr ""
-"проблема у @i каталогу HTREE %d: внутрішній вузол не пройшов перевірки "
-"контрольною сумою\n"
+msgstr "проблема у @i каталогу HTREE %d: внутрішній вузол не пройшов перевірки контрольною сумою\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1746
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "@i каталогу %i, %B, відступ %N: каталог не має контрольної суми.\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
-msgstr ""
-"@i %i каталогу, %B: каталог пройшов перевірку, але має невідповідну "
-"контрольну суму.\n"
+msgstr "@i %i каталогу, %B: каталог пройшов перевірку, але має невідповідну контрольну суму.\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr "Розмір @i %i вбудованого каталогу (%N) має бути кратним до 4.\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
-msgstr ""
-"Спроба виправлення розміру @i %i вбудованого каталогу зазнала невдачі.\n"
+msgstr "Спроба виправлення розміру @i %i вбудованого каталогу зазнала невдачі.\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
 msgid "Encrypted @E is too short.\n"
 msgstr "Зашифрований @E є надто коротким.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Прохід 3: перевіряємо можливість з’єднання каталогу\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
 msgstr "кореневий inode не розміщено.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "Недостатньо місця для каталогу @l.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1790
+#, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Нез’єднаний @i каталогу %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
 msgstr "/@l не знайдено.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "«..» у %Q (%i) дорівнює %P (%j), має бути %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
-msgstr ""
-"Помилковий каталог /@l або каталогу не існує. Повторне приєднання "
-"неможливе.\n"
+msgstr "Помилковий каталог /@l або каталогу не існує. Повторне приєднання неможливе.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Не вдалося розгорнути /@l: %m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Не вдалося повторно приєднати %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Помилка під час спроби знайти /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@b: повідомлення %m під час спроби створити каталогу /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@i: повідомлення %m під час спроби створити каталогу /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block: %m під час створення блоку каталогу\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_block: %m під час запису блоку каталогу для /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Помилка під час спроби коригування кількості @i на @i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2766,52 +2717,51 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
 msgstr ""
-"Не вдалося виправити батьківський каталог @i %i: не вдалося знайти запис "
-"батьківського каталогу\n"
+"Не вдалося виправити батьківський каталог @i %i: не вдалося знайти запис батьківського каталогу\n"
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Помилка під час створення кореневого каталогу (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Помилка під час створення каталогу /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "кореневий @i не є каталогом; перериваємо обробку.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "Продовження обробки без кореневого @i неможливе.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l не є каталогом (ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
 msgid "/@l has inline data\n"
 msgstr "/@l містить вбудовані дані\n"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2822,7 +2772,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2833,52 +2783,52 @@ msgstr ""
 "\n"
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1924
 msgid "/@l is encrypted\n"
 msgstr "/@l зашифровано\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Прохід 3A: оптимізуємо каталоги\n"
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Не вдалося створити ітератор dirs_to_hash: %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Не вдалося оптимізувати каталог %q (%d): %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
 msgstr "Оптимізуємо каталоги: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Прохід 4: перевіряємо кількості посилань\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
 msgstr "нез’єднаний @i нульової довжини %i.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
 msgstr "нез’єднаний @i %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "кількість посилань @i %i дорівнює %Il, а має бути %N.  "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2886,150 +2836,153 @@ msgid ""
 msgstr ""
 "УВАГА: ПОМИЛКА У КОДІ E2FSCK!\n"
 "\tАБО ХТОСЬ (ВИ) ПЕРЕВІРЯЄ ЗМОНТОВАНУ (РОБОЧУ) ФАЙЛОВУ СИСТЕМУ.\n"
-"@i_link_info[%i] дорівнює %N, а @i.i_links_count дорівнює %Il. Ці значення "
-"мають бути однаковими!\n"
+"@i_link_info[%i] дорівнює %N, а @i.i_links_count дорівнює %Il. Ці значення мають бути однаковими!\n"
+
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "кількість посилань @i %i дорівнює %N, а має бути %n. "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr "@d містить забагато посилань, але у суперблоці немає можливості DIR_NLINK.\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Прохід 5: перевіряємо інформацію резюме щодо груп\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
 msgstr "Не встановлено доповнення наприкінці бітової карти inode. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
 msgstr "Не встановлено доповнення наприкінці бітової карти блоків. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "відмінності у бітовій карті блоків: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "відмінності у бітовій карті @i: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Кількість вільних @i у групі %g є помилковою (%i, нараховано=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:2068
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Помилкова кількість каталогів для групи %g (%i, пораховано=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Помилкова кількість @i (%i, обчислено=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2078
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Помилкова кількість вільних блоків для групи %g (%b, нараховано=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Помилкова кількість вільних блоків (%b, нараховано=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
-msgstr ""
-"ПОМИЛКА У КОДІ: кінцеві точки бітової картки файлової системи (%N) (%b, %c) "
-"не збігаються із обчисленими кінцевими точками бітової карти (%i, %j)\n"
+#: e2fsck/problem.c:2088
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "ПОМИЛКА У КОДІ: кінцеві точки бітової картки файлової системи (%N) (%b, %c) не збігаються із обчисленими кінцевими точками бітової карти (%i, %j)\n"
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Внутрішня помилка: помилкове завершення бітової карти (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Помилка під час копіювання замінника бітової карти @i: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Помилка під час копіювання бітової карти блоків: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr "блоки групи %g використовуються, але групу позначено як BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr "inode групи %g використовуються, але групу позначено як INODE_UNINIT\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr "група %g, бітова карта @i не відповідає контрольній сумі.\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr "група %g, бітова карта блоків не відповідає контрольній сумі.\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 msgid "Recreate @j"
 msgstr "Повторно створюємо журнал"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr "Оновити дані щодо квоти для типу квоти %N"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2172
+#, no-c-format
 msgid "Error setting @b @g checksum info: %m\n"
-msgstr ""
-"Помилка під час встановлення даних щодо контрольної суми групи блоків: %m\n"
+msgstr "Помилка під час встановлення даних щодо контрольної суми групи блоків: %m\n"
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2178
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Помилка під час запису даних щодо файлової системи: %m\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
-msgstr ""
-"Помилка під час запису для витирання на пристрій зберігання даних: %m\n"
+msgstr "Помилка під час запису для витирання на пристрій зберігання даних: %m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2189
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "Помилка під час спроби записати дані щодо квот для типу квоти %N: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Код непридатної до обробки помилки (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "ПРОІГНОРОВАНО"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr "у move_quota_inode"
 
@@ -3051,25 +3004,25 @@ msgstr "на початку сканування inode"
 msgid "while doing inode scan"
 msgstr "під час виконання сканування inode"
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "під час виклику ext2fs_block_iterate для inode %d"
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "під час виклику ext2fs_block_iterate для inode %u"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "під час виклику ext2fs_adjust_ea_refcount2 для inode %d"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "під час виклику ext2fs_adjust_ea_refcount2 для inode %u"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Обрізаємо"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "Чищення"
 
-#: e2fsck/unix.c:77
+#: e2fsck/unix.c:78
 #, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
@@ -3080,15 +3033,14 @@ msgstr ""
 "\t\t[-l|-L файл пошкоджених блоків] [-C fd] [-j зовнішній журнал]\n"
 "\t\t[-E додаткові параметри] [-z файл скасування дій] пристрій\n"
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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"
@@ -3097,10 +3049,9 @@ msgstr ""
 " -n                   не вносити змін до файлової системи\n"
 " -y                   відповісти на усі питання «так»\n"
 " -c                   знайти пошкоджені блоки і додати їх до списку\n"
-" -f                   примусова перевірка, навіть якщо систему позначено як "
-"непошкоджену\n"
+" -f                   примусова перевірка, навіть якщо систему позначено як непошкоджену\n"
 
-#: e2fsck/unix.c:88
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -3118,12 +3069,12 @@ msgstr ""
 " -L файл_пом_блоків   вказати список помилкових блоків\n"
 " -z файл_скас         створити файл скасування дій\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %u/%u файлів (%0d.%d%% розривних), %llu/%llu блоків\n"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3141,7 +3092,7 @@ msgstr[2] ""
 "\n"
 "Використано %12u inode (%2.2f%% з %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
@@ -3149,7 +3100,7 @@ msgstr[0] "%12u розривний файл (%0d.%d%%)\n"
 msgstr[1] "%12u розривних файла (%0d.%d%%)\n"
 msgstr[2] "%12u розривних файлів (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:172
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
@@ -3157,16 +3108,16 @@ msgstr[0] "%12u розривний каталог (%0d.%d%%)\n"
 msgstr[1] "%12u розривних каталоги (%0d.%d%%)\n"
 msgstr[2] "%12u розривних каталогів (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:177
 #, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "             К-ть inode з блоками ind/dind/tind: %u/%u/%u\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr "             Гістограма глибини розширення: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
@@ -3174,7 +3125,7 @@ msgstr[0] "використано %12llu блок (%2.2f%% з %llu)\n"
 msgstr[1] "використано %12llu блоки (%2.2f%% з %llu)\n"
 msgstr[2] "використано %12llu блоків (%2.2f%% з %llu)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:198
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
@@ -3182,7 +3133,7 @@ msgstr[0] "%12u помилковий блок\n"
 msgstr[1] "%12u помилкові блоки\n"
 msgstr[2] "%12u помилкових блоків\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:200
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
@@ -3190,7 +3141,7 @@ msgstr[0] "%12u великий файл\n"
 msgstr[1] "%12u великих файла\n"
 msgstr[2] "%12u великих файлів\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -3208,7 +3159,7 @@ msgstr[2] ""
 "\n"
 "%12u звичайних файлів\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
@@ -3216,7 +3167,7 @@ msgstr[0] "%12u каталог\n"
 msgstr[1] "%12u каталоги\n"
 msgstr[2] "%12u каталогів\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
@@ -3224,7 +3175,7 @@ msgstr[0] "%12u файл символьних пристроїв\n"
 msgstr[1] "%12u файли символьних пристроїв\n"
 msgstr[2] "%12u файлів символьних пристроїв\n"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:209
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
@@ -3232,7 +3183,7 @@ msgstr[0] "%12u файл блокових пристроїв\n"
 msgstr[1] "%12u файли блокових пристроїв\n"
 msgstr[2] "%12u файлів блокових пристроїв\n"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
@@ -3240,7 +3191,7 @@ msgstr[0] "%12u fifo\n"
 msgstr[1] "%12u fifo\n"
 msgstr[2] "%12u fifo\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
@@ -3248,7 +3199,7 @@ msgstr[0] "%12u посилання\n"
 msgstr[1] "%12u посилання\n"
 msgstr[2] "%12u посилань\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
@@ -3256,7 +3207,7 @@ msgstr[0] "%12u символічне посилання"
 msgstr[1] "%12u символічних посилання"
 msgstr[2] "%12u символічних посилань"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
@@ -3264,7 +3215,7 @@ msgstr[0] " (%u швидке символічне посилання)\n"
 msgstr[1] " (%u швидких символічних посилання)\n"
 msgstr[2] " (%u швидких символічних посилань)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
@@ -3272,7 +3223,7 @@ msgstr[0] "%12u сокет\n"
 msgstr[1] "%12u сокети\n"
 msgstr[2] "%12u сокетів\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
@@ -3280,33 +3231,33 @@ msgstr[0] "%12u файл\n"
 msgstr[1] "%12u файли\n"
 msgstr[2] "%12u файлів\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "під час спроби визначити, чи змонтовано %s."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Увага! %s змонтовано.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Увага! %s використовується.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s змонтовано.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s використовується.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3314,7 +3265,7 @@ msgstr ""
 "Продовження неможливе, перериваємо роботу.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3328,85 +3279,106 @@ msgstr ""
 "можливі ***ЗНАЧНІ*** ушкодження файлової системи.\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "Ви дійсно бажаєте продовжити"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "перевірку перервано.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr " містить файлову систему з помилками"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " не було демонтовано у штатному режимі"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 msgid " primary superblock features different from backup"
-msgstr ""
-" можливості основного суперблоку відрізняється від можливостей у резервній "
-"копії"
+msgstr " можливості основного суперблоку відрізняється від можливостей у резервній копії"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:383
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " змонтовано %u разів без перевірки"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:390
 msgid " has filesystem last checked time in the future"
-msgstr ""
-" містить файлову систему, час останньої перевірки якої перебуває у "
-"майбутньому"
+msgstr " містить файлову систему, час останньої перевірки якої перебуває у майбутньому"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " пройшло %u днів без перевірки"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr "ігноруємо інтервал перевірки, встановлено broken_system_clock\n"
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ", примусова перевірка.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: без помилок, %u/%u файлів, %llu/%llu блоків"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
 msgstr " (перевірку відкладено, працюємо від акумулятора)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr " (перевірка після наступного монтування)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (перевірка за %ld монтувань)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ПОМИЛКА: не вдалося відкрити /dev/null (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "Некоректна версія розширеного атрибута.\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:702
 msgid "Invalid readahead buffer size.\n"
 msgstr "Некоректний розмір буфера випереджального читання.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Невідомий розширений параметр: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Додаткові параметри слід відокремлювати комами. Додаткові параметри можуть\n"
+"приймати аргументи, значення яких встановлюються за допомогою знаку рівності (=).\n"
+"Коректні додаткові параметри:\n"
+"\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr "\tea_ver=<ea_version (1 або 2)>\n"
+
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "\treadahead_kb=<розмір буфера>\n"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3415,55 +3387,55 @@ msgstr ""
 "Синтаксична помилка у файлі налаштувань e2fsck (%s, рядок %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Помилка під час спроби виконати перевірку дескриптора файла %d: %s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr "Некоректний дескриптор файла даних для автоматичного доповнення"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Можна використовувати лише один з набору параметрів -p/-a, -n та -y."
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:903
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Підтримки параметра -t у цій версії e2fsck не передбачено.\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Не вдалося виконати визначення «%s»"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 msgid "The -n and -D options are incompatible."
 msgstr "Параметри -n і -D є взаємно несумісними."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 msgid "The -n and -c options are incompatible."
 msgstr "Параметри -n і -c є взаємно несумісними."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Параметри -n і -l/-L є взаємно несумісними."
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "Параметри -D і -E fixes_only є несумісними."
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "Параметри -E bmap2extent і fixes_only є несумісними."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Параметри -c і -l/-L не можна використовувати одночасно.\n"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3472,7 +3444,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG «%s» не є цілими числом\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3483,97 +3455,92 @@ msgstr ""
 "Некоректний нечисловий аргумент параметра -%c (\"%s\")\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, c-format
-msgid ""
-"MMP interval is %u seconds and total wait time is %u seconds. Please "
-"wait...\n"
-msgstr ""
-"Інтервал MMP дорівнює %u секунд, а загальний час очікування дорівнює %u "
-"секунд. Будь ласка, зачекайте...\n"
+msgid "MMP interval is %u seconds and total wait time is %u seconds. Please wait...\n"
+msgstr "Інтервал MMP дорівнює %u секунд, а загальний час очікування дорівнює %u секунд. Будь ласка, зачекайте...\n"
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr "під час перевірки блоку MMP"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
-"Якщо ви впевнені, що файлова система не використовується жодним вузлом. "
-"Віддайте команду:\n"
-"«tune2fs -f -E clear_mmp {пристрій}»\n"
+"Якщо ви впевнені, що файлова система не використовується жодним вузлом. Віддайте команду:\n"
+"«tune2fs -f -E clear_mmp %s»\n"
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
 msgstr "під час читання блоку MMP"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
 "    e2undo %s %s\n"
 "\n"
 msgstr ""
-"Перезаписуємо наявну файлову систему; скасувати перезаписування можна за "
-"допомогою команди:\n"
+"Перезаписуємо наявну файлову систему; скасувати перезаписування можна за допомогою команди:\n"
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "під час спроби вилучити %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "під час спроби налаштовування файла даних для скасування дій\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Помилка: застаріла версія бібліотеки ext2fs!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "під час спроби ініціалізувати програму"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tВикористовуємо %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr "для інтерактивного відновлення необхідний термінал"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s, намагаємося створити резервні копії блоків...\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr "Некоректний суперблок,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
 msgstr "Ймовірно, дескриптори груп є помилковими…"
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s під час використання блоків резервної копії"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1546
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: повертаємося до початкового суперблоку\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3583,33 +3550,28 @@ msgstr ""
 "(або суперблок файлової системи пошкоджено)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr "Можливо, це розділ з нульовою довжиною?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
-msgstr ""
-"Вам потрібен доступ %s до файлової системи або адміністративний доступ "
-"(root)\n"
+msgstr "Вам потрібен доступ %s до файлової системи або адміністративний доступ (root)\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1590
 msgid "Possibly non-existent or swap device?\n"
-msgstr ""
-"Можливо, пристрою не існує або це пристрій резервної пам’яті (свопінгу)?\n"
+msgstr "Можливо, пристрою не існує або це пристрій резервної пам’яті (свопінгу)?\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1592
 msgid "Filesystem mounted or opened exclusively by another program?\n"
-msgstr ""
-"Файлову систему змонтовано або відкрито іншою програмою у режимі, що "
-"виключає доступ сторонніх програм?\n"
+msgstr "Файлову систему змонтовано або відкрито іншою програмою у режимі, що виключає доступ сторонніх програм?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr "Можливо, пристрою не існує?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3617,72 +3579,77 @@ msgstr ""
 "Диск захищено від запису; скористайтеся параметром -n для\n"
 "виконання перевірки диска читанням.\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr "%s: намагаємося завантажити суперблок, незважаючи на помилки...\n"
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr "Встановіть новішу версію e2fsck!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1749
 #, c-format
 msgid "while checking journal for %s"
 msgstr "під час перевірки журналу %s"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1752
 msgid "Cannot proceed with file system check"
 msgstr "Продовження перевірки файлової системи неможливе"
 
-#: e2fsck/unix.c:1661
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
-msgstr ""
-"Попередження: не виконуємо відновлення журналу, оскільки перевірка "
-"виконується для файлової системи, доступ до якої здійснюється у режимі лише "
-"читання.\n"
+#: e2fsck/unix.c:1763
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
+msgstr "Попередження: не виконуємо відновлення журналу, оскільки перевірка виконується для файлової системи, доступ до якої здійснюється у режимі лише читання.\n"
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1775
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "не вдалося встановити прапорці суперблоку на %s\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1781
 #, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "Виявлено помилку контрольної суми у %s\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1785
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "У %s пошкоджено журнал\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1789
 #, c-format
 msgid "while recovering journal of %s"
 msgstr "під час відновлення журналу %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s має непідтримувані можливості:"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1826
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "%s містить непідтримувані дані щодо кодування: %0x\n"
+
+#: e2fsck/unix.c:1876
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s під час читання inode пошкоджених блоків\n"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1879
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Прогнозуванню не піддається, але ми спробуємо щось зробити...\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Створюємо журнал (%d блоків): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr " Виконано.\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1931
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
@@ -3690,24 +3657,38 @@ msgstr ""
 "\n"
 "*** журнал було створено повторно ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "перервано"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: обробку за допомогою e2fsck скасовано.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Перезапускаємо e2fsck з початку...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "під час скидання контексту"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** ВИПРАВЛЕНО ПОМИЛКИ ФАЙЛОВОЇ СИСТЕМИ *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: внесено зміни до файлової системи.\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3716,12 +3697,12 @@ msgstr ""
 "\n"
 "%s: ***** ДО ФАЙЛОВОЇ СИСТЕМИ БУЛО ВНЕСЕНО ЗМІНИ *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:2040
 #, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s: ***** ПЕРЕЗАВАНТАЖТЕ СИСТЕМУ *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3732,51 +3713,51 @@ msgstr ""
 "%s: ********** ПОПЕРЕДЖЕННЯ: у файловій системі усе ще є помилки **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "yYтТ"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "nNнН"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr "aAуУ"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr " («a» вмикає «yes/так» для усіх) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<y>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (y/n або т/н)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "скасовано.\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr "«так» для усіх\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "так\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "ні\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3785,7 +3766,7 @@ msgstr ""
 "%s? ні\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3794,38 +3775,38 @@ msgstr ""
 "%s? так\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "так"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "ні"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: некоректні блоки бітової карти для %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "читання бітових карт inode та блоків"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
-msgstr "під час повторення спробу читання бітових карт для %s"
+msgstr "під час повторення спроби читання бітових карт для %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "записуємо бітові карти блоків та inode"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "під час перезапису блоку та бітових карт inode для %s"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3838,65 +3819,58 @@ msgstr ""
 "%s: НЕОЧІКУВАНА ВТРАТА ЦІЛІСНОСТІ; ЗАПУСТІТЬ fsck ВРУЧНУ.\n"
 "\t(тобто без параметрів -a та -p)\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Використано пам’яті: %lu кБ/%lu кБ (%lu кБ/%lu кБ), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Використано пам’яті: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "час: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "витрачено часу: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "під час читання inode %lu у %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "під час запису inode %lu до %s"
 
-#: e2fsck/util.c:765
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
-msgstr ""
-"НЕОЧІКУВАНА ВТРАТА ЦІЛІСНОСТІ: під час виконання fsck до файлової системи "
-"було внесено зміни.\n"
+#: e2fsck/util.c:792
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "НЕОЧІКУВАНА ВТРАТА ЦІЛІСНОСТІ: під час виконання fsck до файлової системи було внесено зміни.\n"
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "виконано                                             \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, 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"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 [-b розмір_блоку] [-i вхідний_файл] [-o файл_виведення] [-"
-"svwnf]\n"
-"       [-c блоків_одночасно] [-d коеф_затримки_між_читаннями] [-e "
-"макс_пошк_блоків]\n"
+"Користування: %s [-b розмір_блоку] [-i вхідний_файл] [-o файл_виведення] [-svwnfBX]\n"
+"       [-c блоків_одночасно] [-d коеф_затримки_між_читаннями] [-e макс_пошк_блоків]\n"
 "       [-p к-ть_проходів] [-t тест_зразок [-t тест_зразок [...]]]\n"
 "       пристрій [останній_блок [перший_блок]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3905,82 +3879,80 @@ msgstr ""
 "%s: параметри -n і -w не можна використовувати одночасно.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "Виконано на %6.2f%%, лишилося %s. (помилки: %d/%d/%d)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Тестування з випадковим взірцем: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Тестування зі взірцем 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "під час позиціювання"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Дивне значення (%ld) у do_read\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "під час виконання ext2fs_sync_device"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "на початку ітерації списком помилкових блоків"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "під час розміщення буферів у пам’яті"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Перевіряємо блоки з %lu до %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Шукаємо помилкові блоки у режимі лише читання\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Перевіряємо наявність помилкових блоків (перевірка лише читанням): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Занадто багато помилкових блоків, перериваємо перевірку\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Шукаємо помилкові блоки у режимі читання-запису\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Від блоку %lu до блоку %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Читання і порівняння: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Шукаємо помилкові блоки у режимі читання-запису без руйнування даних\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
-msgstr ""
-"Перевіряємо на пошкоджені блоки (перевірка читанням-записом без руйнування "
-"даних)\n"
+msgstr "Перевіряємо на пошкоджені блоки (перевірка читанням-записом без руйнування даних)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3988,60 +3960,57 @@ msgstr ""
 "\n"
 "Переривання, спорожнюємо дані\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "під час тестового запису даних, блок %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s змонтовано; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
-msgstr ""
-"Примусове виконання badblocks. Сподіваємося, що /etc/mtab містить помилки.\n"
+msgstr "Примусове виконання badblocks. Сподіваємося, що /etc/mtab містить помилки.\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "запускати badblocks небезпечно!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s, ймовірно, використовується системою; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "badblocks буде примусово додано попри це.\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "некоректний %s - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
-msgstr ""
-"Завелика максимальна кількість пошкоджених блоків, %u — не може бути більшою "
-"за %u"
+msgstr "Завелика максимальна кількість пошкоджених блоків, %u — не може бути більшою за %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "не вдалося розмістити у пам’яті test_pattern - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "У режим лише читання може бути вказано максимум одного test_pattern"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Випадкове значення test_pattern у режимі лише читання"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -4049,271 +4018,268 @@ msgstr ""
 "Не вдалося визначити розмір пристрою; вам слід вказати\n"
 "розмір вручну\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "під час спроби визначення місткості пристрою"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "останній блок"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "перший блок"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "некоректний початковий блок (%llu): номер має бути меншим за %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "некоректний завершальний блок (%llu): має бути 32-бітове значення"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "під час спроби створення списку помилкових блоків у пам’яті"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "файл вхідних даних — помилковий формат"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "під час додавання до списку пошкоджених блоків у пам’яті"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Прохід завершено, знайдено %u пошкоджених блоків. (%d/%d/%d помилок)\n"
 
 #: misc/chattr.c:89
 #, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
-msgstr "Користування: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v версія] файли...\n"
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "Користування: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v версія] файли...\n"
 
-#: misc/chattr.c:159
+#: misc/chattr.c:160
 #, c-format
 msgid "bad project - %s\n"
 msgstr "помилковий проект - %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "помилкова версія - %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "під час спроби отримання статистичних даних щодо %s"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "під час читання прапорців на %s"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Прапорці %s встановлено як "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "під час встановлення прапорців на %s"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Версію %s встановлено у значення %lu\n"
 
-#: misc/chattr.c:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "під час встановлення версії на %s"
 
-#: misc/chattr.c:271
+#: misc/chattr.c:272
 #, c-format
 msgid "Project of %s set as %lu\n"
 msgstr "Проект %s встановлено як %lu\n"
 
-#: misc/chattr.c:275
+#: misc/chattr.c:276
 #, c-format
 msgid "while setting project on %s"
 msgstr "під час встановлення проекту на %s"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Не вдалося розмістити змінну шляху у chattr_dir_proc"
 
-#: misc/chattr.c:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "= є несумісним з - і +\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "Слід використовувати «-v», =, - або +\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:80 misc/create_inode.c:119
 #, c-format
 msgid "while reading inode %u"
 msgstr "під час читання inode %u"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 msgid "while expanding directory"
 msgstr "під час розгортання каталогу"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:97
 #, c-format
 msgid "while linking \"%s\""
 msgstr "під час спроби компонування «%s»"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
 #, c-format
 msgid "while writing inode %u"
 msgstr "під час запису inode %u"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:152 misc/create_inode.c:176
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "під час створення списку атрибутів «%s»"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:163
 #, c-format
 msgid "while opening inode %u"
 msgstr "під час спроби відкрити inode %u"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr "під час розміщення у пам’яті"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:189 misc/create_inode.c:205
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "під час читання атрибута «%s» «%s»"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:214
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "під час запису атрибута «%s» до inode %u"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:224
 #, c-format
 msgid "while closing inode %u"
 msgstr "під час закриття inode %u"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:275
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr "під час розміщення inode «%s»"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:294
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr "під час спроби створення inode «%s»"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:360
 #, c-format
 msgid "while creating symlink \"%s\""
 msgstr "під час спроби створення символічного посилання «%s»"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:378 misc/create_inode.c:963
 #, c-format
 msgid "while looking up \"%s\""
 msgstr "під час пошуку «%s»"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:398
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr "під час спроби створення каталогу «%s»"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:627
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "під час спроби відкриття «%s» для копіювання"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr "під час спроби змінити робочий каталог на «%s»"
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:815
 #, c-format
-msgid "while opening directory \"%s\""
-msgstr "під час відкриття каталогу «%s»"
+msgid "while scanning directory \"%s\""
+msgstr "під час сканування каталогу «%s»"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:825
 #, c-format
 msgid "while lstat \"%s\""
 msgstr "під час спроби виконати lstat для «%s»"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:875
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr "під час спроби створення спеціального файла «%s»"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:884
 msgid "malloc failed"
 msgstr "невдала спроба виконати malloc"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:892
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr "під час спроби прочитати посилання «%s»"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr "символічне посилання зросло у розмірі між lstat() і readlink()"
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:910
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr "під час спроби записати символічне посилання «%s»"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:921
 #, c-format
 msgid "while writing file \"%s\""
 msgstr "під час спроби записати файл «%s»"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:934
 #, c-format
 msgid "while making dir \"%s\""
 msgstr "під час спроби створення каталогу «%s»"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:952
 msgid "while changing directory"
 msgstr "під час спроби змінити каталог"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:958
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr "ігноруємо запис «%s»"
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:971
 #, c-format
 msgid "while setting inode for \"%s\""
 msgstr "під час спроби встановлення inode для «%s»"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:978
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "під час спроби встановлення розширених атрибутів (xattr) для «%s»"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:1004
 msgid "while saving inode data"
 msgstr "під час спроби зберегти дані inode"
 
 #: misc/dumpe2fs.c:56
 #, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Користування: %s [-bfghixV] [-o superblock=<номер>] [-o blocksize=<номер>] "
-"пристрій\n"
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "Користування: %s [-bfghimxV] [-o superblock=<номер>] [-o blocksize=<номер>] пристрій\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -4431,106 +4397,54 @@ msgstr "під час виведення списку помилкових бл
 msgid "Bad blocks: %u"
 msgstr "Помилкових блоків: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "під час читання inode журналу"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "під час спроби відкрити inode журналу"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "під час читання суперблоку журналу"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Контрольна сума суперблоку журналу є некоректною!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Можливості журналу:        "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Розмір журналу:             "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"Довжина журналу:          %u\n"
-"Послідовність журналу:    0x%08x\n"
-"Початок журналу:          %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr "Тип контрольної суми журналу: crc32\n"
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-"Тип контрольної суми журналу: %s\n"
-"Контрольна сума журналу:      0x%08x\n"
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Кількість помилок журналу: %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "під час читання суперблоку журналу"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Не вдалося знайти контрольні суми суперблоку журналу"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"Розмір блоку журналу:     %u\n"
-"Довжина журналу:          %u\n"
-"Перший блок журналу:      %u\n"
-"Послідовність журналу:    0x%08x\n"
-"Початок журналу:          %u\n"
-"К-ть користувачів журналу: %u\n"
+#: misc/dumpe2fs.c:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "не вдалося розмістити буфер MMP у пам'яті\n"
 
-#: misc/dumpe2fs.c:514
+#: misc/dumpe2fs.c:479
 #, c-format
-msgid "Journal users:            %s\n"
-msgstr "Користувачі журналу:      %s\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "читаємо блок MMP %llu з «%s»\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Не вдалося отримати область пам’яті для обробки параметрів!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Некоректний параметр суперблоку: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Некоректний параметр розміру блоку: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4547,249 +4461,227 @@ msgstr ""
 "Вказано помилкові додаткові параметри: %s\n"
 "\n"
 "Додаткові параметри слід відокремлювати комами. Додаткові параметри можуть\n"
-"\tприймати аргументи, значення яких встановлюються за допомогою знаку "
-"рівності (=).\n"
+"\tприймати аргументи, значення яких встановлюються за допомогою знаку рівності (=).\n"
 "\n"
 "Коректні додаткові параметри:\n"
 "\tsuperblock=<номер суперблоку>\n"
 "\tblocksize=<розмір блоку>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tВикористовуємо %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** У файловій системі виявлено помилки у контрольних сумах! Запустіть "
-"e2fsck зараз же!\n"
-"\n"
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Не вдалося знайти коректний суперблок файлової системи.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** У бітових картка виявлено помилки у контрольних сумах! Запустіть e2fsck "
-"зараз же!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s: можливість MMP не увімкнено.\n"
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:747
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "під час спроби читання бітових карт для %s\n"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"*** Запустіть e2fsck зараз!\n"
 "\n"
-"%s: %s: помилка під час читання бітових карт: %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
-msgstr "Користування: %s [ -r|Q ] [ -fr ] пристрій файл-образу\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
+msgstr "Користування: %s [ -r|Q ] [ -f ] [ -b суперблок ] [ -B розмір_блоку][ -fr ] пристрій файл-образу\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "       %s -I пристрій файл-образу\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
-msgstr ""
-"       %s -ra  [  -cfnp  ] [ -o відступ джерела ] [ -O відступ призначення ] "
-"ФС_джерела [ ФС_призначення ]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+msgstr "       %s -ra  [  -cfnp  ] [ -o відступ джерела ] [ -O відступ призначення ] ФС_джерела [ ФС_призначення ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr "під час розміщення буфера у пам’яті"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "Записуємо блок %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr "помилка під час спроби записати блок %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr "помилка у generic_write()"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Помилка: розмір заголовка перевищує розмір_запису\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr "Не вдалося розмістити буфер заголовка у пам’яті\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "під час спроби записати суперблок"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "під час спроби записати таблицю inode"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "під час запису бітової карти блоків"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "під час запису бітової карти inode"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Пошкоджено блок каталогу %llu: помилкове значення rec_len (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Пошкоджено блок каталогу %llu: помилкове значення name_len (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu з %llu блоків (%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
 msgstr "Копіюємо "
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
-msgstr ""
-"Якщо зараз зупинити обробку, файлову систему буде зруйновано. Перервіть "
-"обробку ще раз, якщо це саме те, що потрібно.\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+msgstr "Якщо зараз зупинити обробку, файлову систему буде зруйновано. Перервіть обробку ще раз, якщо це саме те, що потрібно.\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " %s тримається на швидкості %.2f МБ/с"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr "помилка під час читання блоку %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "Скопійовано %llu / %llu блоків (%d%%) у %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "на швидкості %.2f МБ/с"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
 msgstr "помилка під час спроби розмістити у пам’яті таблицю l1"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr "під час розміщення кешу l2 у пам’яті"
 
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
-msgstr ""
-"Попередження: під час розміщення кешу у ньому залишилися таблиці. "
-"Неможливість розмістити ці таблиці призведе до втрати даних, отже образ може "
-"виявитися некоректним.\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
+msgstr "Попередження: під час розміщення кешу у ньому залишилися таблиці. Неможливість розмістити ці таблиці призведе до втрати даних, отже образ може виявитися некоректним.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr "під час розміщення у пам’яті ext2_qcow2_image"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr "під час спроби ініціалізувати ext2_qcow2_image"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
-msgstr ""
-"Помилка у коді: створено декілька послідовних блоків підрахунку посилань!\n"
+msgstr "Помилка у коді: створено декілька послідовних блоків підрахунку посилань!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr "під час розміщення у пам’яті бітової карти блоків"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr "під час розміщення у пам’яті бітової карти шифрованих блоків"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
 msgstr "Скануємо inode...\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr "Не вдалося отримати пам’ять під буфер блоків"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "під час ітеративної обробки inode %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "Встановлення образів Raw і qcow2 неможливе"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr "помилка під час читання бітових карт"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr "під час спроби відкрити файл пристрою"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr "під час спроби відновлення таблиці образу"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "Параметр -a можна використовувати лише для образів raw і QCOW2."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "Параметр -b можна використовувати лише для образів raw і QCOW2."
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr "Відступи можна використовувати лише для образів raw."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr "Режим пересування можна використовувати лише для образів raw."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr "Режим пересування потребує режиму всіх даних."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr "перевірка змонтованості"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4802,48 +4694,51 @@ msgstr ""
 "на можливості його використання для діагностики помилок.\n"
 "Скористайтеся параметром -f, якщо цю дію слід виконати примусово.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "Образ QCOW2 не можна записувати до стандартного виведення (stdout)!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr "Не вдалося обробити виведені дані\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "Образ (%s) стиснуто\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "Образ (%s) зашифровано\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Образ (%s) пошкоджено\n"
+
+#: misc/e2image.c:1683
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr "під час спроби перетворення образу qcow2 (%s) у образ raw (%s)"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr "Підтримку параметра -c передбачено лише у режимі raw\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
-msgstr ""
-"Підтримки записування до стандартного виведення з параметром -c не "
-"передбачено\n"
+msgstr "Підтримки записування до стандартного виведення з параметром -c не передбачено\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr "під час спроби розмістити check_buf у пам’яті"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr "Підтримку параметра -p передбачено лише у режимі raw\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d блоків вже містили дані, які слід було скопіювати\n"
@@ -4873,7 +4768,7 @@ msgstr "e2label: помилка під час спроби читання суп
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: не є файловою системою ext2\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Попередження: надто довга мітка, обрізаємо.\n"
@@ -4888,167 +4783,161 @@ msgstr "e2label: повторне позиціювання на супербло
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: помилка під час спроби записати суперблок\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Користування: e2label пристрій [нова мітка]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
-msgstr ""
-"Користування: %s [-f] [-h] [-n] [-v] <файл транзакцій> <файлова система>\n"
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
+msgstr "Користування: %s [-f] [-h] [-n] [-o offset] [-v] [-z файл скасовування дій] <файл транзакцій> <файлова система>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr "Суперблок файлової системи не відповідає файлу скасування дій.\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr "UUID є невідповідним.\n"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr "Запис часу останнього монтування є невідповідним.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr "Час останнього запису є невідповідним.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr "Кількість записів протягом існування є невідповідною.\n"
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr "під час читання суперблоку файлової системи."
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr "під час спроби отримати суперблок"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "Контрольна сума суперблоку у файлі скасування дій є невідповідною.\n"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr "Некоректний відступ: %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
-msgstr ""
-"Запис до файла скасовування дій не вестиметься протягом його відтворення.\n"
+msgstr "Запис до файла скасовування дій не вестиметься протягом його відтворення.\n"
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "під час спроби відкрити файл скасування дій «%s»\n"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 msgid "while reading undo file"
 msgstr "під час спроби прочитати файл скасування дій"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s: не є файлом скасування дій.\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "%s: контрольна сума заголовка є невідповідною.\n"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "%s: заголовок файла скасування дій пошкоджено.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr "%s: розмір блоку після скасовування дії є надто великим.\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "%s: розмір блоку після скасовування дії є надто великим.\n"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr "%s: невідомий набір можливостей у файлі скасування дій.\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "Помилка під час спроби визначення, чи змонтовано %s."
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr "e2undo слід запускати лише на демонтованих файлових системах"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, c-format
 msgid "while opening `%s'"
 msgstr "під час спроби відкриття «%s»"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr "вказаний відступ є надто великим"
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 msgid "while reading keys"
 msgstr "під час читання ключів"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr "%s: помилкова контрольна сума ключа у %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr "%s: помилка у контрольній сумі ключового блоку на %llu.\n"
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, c-format
 msgid "%s: block %llu is too long."
 msgstr "%s: блок %llu є надто довгим."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, c-format
 msgid "while fetching block %llu."
 msgstr "під час спроби отримання блоку %llu."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
-msgstr ""
-"помилка контрольної суми у блоці файлової системи %llu (скасовування блоку "
-"%llu)\n"
+msgstr "помилка контрольної суми у блоці файлової системи %llu (скасовування блоку %llu)\n"
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, c-format
 msgid "while writing block %llu."
 msgstr "під час спроби записати блок %llu."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr "Файл скасовування дій пошкоджено; запустіть e2fsck ЗАРАЗ ЖЕ!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
-msgstr ""
-"Помилка введення-виведення під час скасовування дій; запустіть e2fsck ЗАРАЗ "
-"ЖЕ!\n"
+msgstr "Помилка введення-виведення під час скасовування дій; запустіть e2fsck ЗАРАЗ ЖЕ!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr "Неповний запис скасовування; запустіть e2fsck.\n"
@@ -5094,12 +4983,8 @@ msgstr ""
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
-msgstr ""
-"зміщ_у_байт  поч_байт       кінц_байт блок_фс   роз_бл грп  час_mkfs/"
-"mount            sb_uuid мітка\n"
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+msgstr "зміщ_у_байт  поч_байт       кінц_байт блок_фс   роз_бл грп  час_mkfs/mount            sb_uuid мітка\n"
 
 #: misc/findsuper.c:264
 #, c-format
@@ -5132,86 +5017,77 @@ msgstr ""
 "\tваш файл /etc/fstab якомога швидше.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: не знайдено\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: очікування: не залишилося дочірніх процесів?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
-msgstr ""
-"Попередження... виконання %s для пристрою %s завершилося сигналом %d.\n"
+msgstr "Попередження... виконання %s для пристрою %s завершилося сигналом %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: стан — %x, такого не повинно було статися.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Завершено, %s (стан виходу %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: помилка %d під час виконання fsck.%s для %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
 msgstr ""
-"Префікс «no» або «!» має бути передано або всім або жодному з типів "
-"файлових\n"
+"Префікс «no» або «!» має бути передано або всім або жодному з типів файлових\n"
 "систем, переданих до -t.\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Не вдалося розмістити у пам’яті типи файлових систем\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
-msgstr ""
-"%s: пропускаємо помилковий рядок у /etc/fstab: монтування з прив’язуванням і "
-"ненульовою кількістю проходів fsck\n"
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgstr "%s: пропускаємо помилковий рядок у /etc/fstab: монтування з прив’язуванням і ненульовою кількістю проходів fsck\n"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: не вдалося перевірити %s: на виявлено fsck.%s\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Перевірка всіх файлових систем.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--очікування-- (прохід %d)\n"
 
-#: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
-msgstr ""
-"Користування: fsck [-AMNPRTV] [ -C [ дескриптор файла ] ] [-t тип ФС] "
-"[параметри ФС] [файлова система ...]\n"
+#: misc/fsck.c:1085
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "Користування: fsck [-AMNPRTV] [ -C [ дескриптор файла ] ] [-t тип ФС] [параметри ФС] [файлова система ...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: забагато пристроїв\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: занадто багато аргументів\n"
@@ -5225,47 +5101,42 @@ msgstr "Монтуємо лише для читання.\n"
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr "%s: дозволяємо користувачам розміщувати усі блоки. Це небезпечно!\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
 msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr "Будь ласка, віддайте команду e2fsck -fy %s.\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
-msgstr ""
-"Журнал потребує відновлення; слід запустити «e2fsck -E journal_only».\n"
+msgstr "Журнал потребує відновлення; слід запустити «e2fsck -E journal_only».\n"
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3812
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "%s: підтримки запису до журналу не передбачено.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
-msgstr ""
-"Попередження: монтуємо неперевірену файлову систему, рекомендуємо запустити "
-"e2fsck.\n"
+msgstr "Попередження: монтуємо неперевірену файлову систему, рекомендуємо запустити e2fsck.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
-msgstr ""
-"Попередження: досягнуто максимальної кількості монтувань, рекомендуємо "
-"запустити e2fsck.\n"
+msgstr "Попередження: досягнуто максимальної кількості монтувань, рекомендуємо запустити e2fsck.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr "Попередження: прийшов час перевірки; рекомендуємо запустити e2fsck.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr "Виявлено осиротілі блоки; рекомендуємо запустити e2fsck.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr "Виявлено помилки; слід запустити e2fsck.\n"
 
@@ -5289,7 +5160,7 @@ msgstr "Під час читання проекту на %s"
 msgid "While reading version on %s"
 msgstr "Під час читання версії на %s"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5298,8 +5169,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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 "Користування: %s [-c|-l назва файла] [-b розмір блоку] [-C розмір кластера]\n"
@@ -5311,36 +5181,35 @@ msgstr ""
 "\t[-t тип ФС] [-T тип використання] [-U UUID] [-e поведінка при помилках]\n"
 "\t[-z файла скасування дій] [-jnqvDFSV] пристрій [лічильник блоків]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Виконання команди: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "під час спроби виконати «%s»"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "під час обробки списку помилкових блоків з програми"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Пошкоджено блок %d у основному дескрипторі суперблоку або групи.\n"
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
-msgstr ""
-"Щоб побудувати файлову систему, блоки від %u до %u має бути не пошкоджено.\n"
+msgstr "Щоб побудувати файлову систему, блоки від %u до %u має бути не пошкоджено.\n"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "Перериваємо обробку...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5351,15 +5220,19 @@ msgstr ""
 "\tмістять помилкові блоки.\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "під час спроби позначити пошкоджені блоки як використані"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "під час спроби запису зарезервованих inode-ів"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Записуємо таблиці inode: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5368,76 +5241,76 @@ msgstr ""
 "\n"
 "Не вдалося записати %d блоків до таблиці inode, що починається з %llu: %s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "виконано                        \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "під час створення кореневого каталогу"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "під час читання кореневого inode"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "під час встановлення даних щодо власника кореневого inode"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "під час спроби створити /lost+found"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "під час пошуку /lost+found"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "під час розгортання /lost+found"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "під час встановлення inode помилкового блоку"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Не визначає пам’яті для витирання секторів %d-%d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Попередження: не вдалося прочитати блок 0: %s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Попередження: не вдалося витерти сектор %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "під час спроби ініціалізації суперблоку журналу"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Занулення пристрою журналу: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "під час занулення пристрою журналу (блок %llu, кількість %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "під час спроби записати суперблок журналу"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "Створюємо файлову систему з %llu %dК блоками та %u inode\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5446,156 +5319,164 @@ msgstr ""
 "попередження: не використано %llu блоків.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Мітка файлової системи=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Тип ОС: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Розмір блоку=%u (журнал=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Розмір кластера=%u (журнал=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Розмір фрагмента=%u (журнал=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Stride=%u блоків, Stripe width=%u блоків\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u inode, %llu блоків\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu блоків (%2.2f%%) зарезервовано для суперкористувача\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Перший блок даних=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Власник кореневого каталогу=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Максимальна кількість блоків у файловій системі=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u груп блоків\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u-блокова група\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u блоків на групу, %u кластерів на групу\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u блоків на групу, %u фрагментів на групу\n"
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inode на групу\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "UUID файлової системи: %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Резервні копії суперблоку зберігаються у таких блоках: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:822
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s потребує '-O 64bit'\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "«%s» має бути до «resize=%u»\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "Некоректне значення desc_size: «%s»\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Некоректний породжувач хешу: %s\n"
+
+#: misc/mke2fs.c:867
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Некоректний відступ: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Некоректний mmp_update_interval: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Некоректна кількість резервних суперблоків: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Некоректне значення параметра stride: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Некоректне значення параметра stripe-width: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Некоректний параметр зміни розмірів: %s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:965
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr "Максимум зміни розміру має перевищувати розмір файлової системи.\n"
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:989
 msgid "On-line resizing not supported with revision 0 filesystems\n"
-msgstr ""
-"Підтримки інтерактивної зміни розмірів для файлових систем модифікації 0 не "
-"передбачено\n"
+msgstr "Підтримки інтерактивної зміни розмірів для файлових систем модифікації 0 не передбачено\n"
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "Некоректне значення root_owner: «%s»\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1069
+#, c-format
+msgid "Invalid encoding: %s"
+msgstr "Некоректне кодування: %s"
+
+#: misc/mke2fs.c:1087
 #, c-format
 msgid ""
 "\n"
@@ -5618,14 +5499,15 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
 "\n"
 "Вказано помилкові параметри: %s\n"
 "\n"
-"Додаткові параметри слід відокремлювати комами, до них можна додавати "
-"аргумент,\n"
+"Додаткові параметри слід відокремлювати комами, до них можна додавати аргумент,\n"
 "\tзначення якого записується після знаку рівності («=»).\n"
 "\n"
 "Коректні додаткові параметри:\n"
@@ -5642,10 +5524,12 @@ msgstr ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<кодування>\n"
+"\tencoding_flags=<прапорці>\n"
 "\tquotatype=<увімкнені типи квот>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5656,7 +5540,17 @@ msgstr ""
 "Попередження: stripe-width RAID, %u, не є парним кратним stride, %u.\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr "помилка: некоректний прапорець кодування: %s\n"
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr "помилка: якщо передаються прапорці кодування (encoding-flags), має бути явно вказано і кодування\n"
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5665,17 +5559,17 @@ msgstr ""
 "Синтаксична помилка у файлі налаштувань mke2fs (%s, рядок %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Встановлено некоректний параметр файлової системи: %s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Встановлено некоректний параметр монтування: %s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
@@ -5684,7 +5578,7 @@ msgstr ""
 "\n"
 "У вашому файлі mke2fs.conf не міститься типу файлової системи %s.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5692,11 +5586,11 @@ msgstr ""
 "Ймовірно, вам слід встановити оновлений файл mke2fs.conf.\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 msgid "Aborting...\n"
 msgstr "Перериваємо обробку...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5707,83 +5601,79 @@ msgstr ""
 "Попередження: fs_type для %s у mke2fs.conf не визначено\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Не вдалося розмістити у пам’ять нову змінну PATH.\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1608
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Не вдалося успішно ініціалізувати профіль (помилка: %ld).\n"
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "некоректний розмір блоку - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Попередження: розмір блоку %d є непридатним для більшості систем.\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1661
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "некоректний розмір кластера - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "«-R» є застарілим, вам варто скористатися «-E»"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "помилкова поведінка у відповідь на помилку: %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr "Некоректна кількість блоків на групу"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 msgid "blocks per group must be multiple of 8"
 msgstr "кількість блоків на групу має бути кратною 8"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "Некоректне число для розміру flex_bg"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
 msgstr "Розмір flex_bg має бути степенем 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "розмір flex_bg (%lu) має бути не більшим за 2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "некоректне відношення inode %s (мін. %d/макс. %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1744
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "некоректний розмір inode - %s"
 
-#: misc/mke2fs.c:1684
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
-msgstr ""
-"Попередження: параметр -K є застарілим, ним не варто більше користуватися. "
-"Вам варто користуватися параметром «-E nodiscard»!\n"
+#: misc/mke2fs.c:1757
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "Попередження: параметр -K є застарілим, ним не варто більше користуватися. Вам варто користуватися параметром «-E nodiscard»!\n"
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1768
 msgid "in malloc for bad_blocks_filename"
 msgstr "у malloc для bad_blocks_filename"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1777
 #, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
@@ -5792,68 +5682,67 @@ msgstr ""
 "Попередження: надто довга мітка, обрізаємо до «%s».\n"
 "\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "некоректний відсоток зарезервованих блоків - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "помилкова кількість inode - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1814
 msgid "while allocating fs_feature string"
 msgstr "під час розміщення у пам’яті рядка fs_feature"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1831
 #, c-format
 msgid "bad revision level - %s"
 msgstr "помилковий рівень модифікації - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "під час створення модифікації %d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 msgid "The -t option may only be used once"
 msgstr "Параметр -t можна використовувати лише один раз"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1858
 msgid "The -T option may only be used once"
 msgstr "Параметр -T можна використовувати лише один раз"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "під час спроби відкрити пристрій журналу %s\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1920
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
-msgstr ""
-"Розмір блоку пристрою журналу (%d) є меншим за мінімальний розмір блоку %d\n"
+msgstr "Розмір блоку пристрою журналу (%d) є меншим за мінімальний розмір блоку %d\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1926
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Використовуємо розмір блоку пристрою журналу: %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1937
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "некоректні блоки «%s» на пристрої «%s»"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "файлова система"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "під час спроби визначити розмір файлової системи"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5861,7 +5750,7 @@ msgstr ""
 "Не вдалося визначити розмір пристрою; вам слід вказати\n"
 "розмір файлової системи\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5874,48 +5763,48 @@ msgstr ""
 "\tкористуванні. Вам варто перезавантажити систему, щоб\n"
 "\tдані таблиці розділів було прочитано правильно.\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:2015
 msgid "Filesystem larger than apparent device size."
 msgstr "Файлова система є більшою за видимий розмір пристрою."
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:2035
 msgid "Failed to parse fs types list\n"
 msgstr "Не вдалося обробити список типів файлової системи\n"
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2085
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "У HURD не передбачено підтримки можливості визначення типу файлів.\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2090
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "У HURD не передбачено підтримки можливості huge_file.\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "У HURD не передбачено підтримки можливості metadata_csum.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2100
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "У HURD не передбачено підтримки можливості ea_inode.\n"
+
+#: misc/mke2fs.c:2110
 msgid "while trying to determine hardware sector size"
 msgstr "під час спроби визначити апаратний розмір сектора"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2116
 msgid "while trying to determine physical sector size"
 msgstr "під час спроби визначити фізичний розмір сектора"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2148
 msgid "while setting blocksize; too small for device\n"
-msgstr ""
-"під час встановлення розміру блоку; розмір є надто малим для пристрою\n"
+msgstr "під час встановлення розміру блоку; розмір є надто малим для пристрою\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2153
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
-msgstr ""
-"Попередження: вказаний розмір блоку, %d, є меншим за фізичний розмір сектора "
-"пристрою, %d\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgstr "Попередження: вказаний розмір блоку, %d, є меншим за фізичний розмір сектора пристрою, %d\n"
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2177
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5924,97 +5813,89 @@ msgstr ""
 "%s: розміри пристрою (0x%llx блоків) %s є надто великими для\n"
 "\tзапису їх у 32-бітовому форматі з розміром блоку %d.\n"
 
-#: misc/mke2fs.c:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2191
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 msgstr ""
 "%s: розміри пристрою (0x%llx блоків) %s є надто великими для\n"
-"\tзапису їх у 32-бітовому форматі з розміром блоку %d.\n"
+"\tстворення файлової системи із розміром блоку %d.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "fs_types для розв’язання mke2fs.conf: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 msgid "Filesystem features not supported with revision 0 filesystems\n"
-msgstr ""
-"У файлових системах модифікації 0 можливості файлової системи не "
-"підтримуються\n"
+msgstr "У файлових системах модифікації 0 можливості файлової системи не підтримуються\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2228
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
-msgstr ""
-"У файлових системах модифікації 0 підтримки розріджених суперблоків не "
-"передбачено\n"
+msgstr "У файлових системах модифікації 0 підтримки розріджених суперблоків не передбачено\n"
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2238
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "У файлових системах модифікації 0 підтримки журналів не передбачено\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2251
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "некоректний відсоток зарезервованих блоків - %lf"
 
-#: misc/mke2fs.c:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
-msgstr ""
-"Для 64-бітової файлової системи слід увімкнути розширення. Передайте "
-"програмі -O extents, щоб виправити це.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
+msgstr "Для 64-бітової файлової системи слід увімкнути розширення. Передайте програмі -O extents, щоб виправити це.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "Розмір кластера не може бути меншим за розмір блоку.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "для визначення розміру кластера потрібна можливість bigalloc"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "попередження: не вдалося отримати параметри пристрою для %s\n"
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2317
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "вирівнювання %s зсунуто на %lu байтів.\n"
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2319
 #, c-format
-msgid ""
-"This may result in very poor performance, (re)-partitioning suggested.\n"
-msgstr ""
-"Це може призвести до значної втрати швидкодії. Вам варто виконати повторний "
-"розподіл пристрою на розділи.\n"
+msgid "This may result in very poor performance, (re)-partitioning suggested.\n"
+msgstr "Це може призвести до значної втрати швидкодії. Вам варто виконати повторний розподіл пристрою на розділи.\n"
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2340
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d-байтові блоки є надто великими для системи (макс. - %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2344
 #, c-format
-msgid ""
-"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
-msgstr ""
-"Попередження: %d-байтові блоки є надто великими для системи (макс. - %d), "
-"примусово продовжуємо роботу\n"
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgstr "Попередження: %d-байтові блоки є надто великими для системи (макс. - %d), примусово продовжуємо роботу\n"
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
-msgstr ""
-"Пропозиція: скористайтеся ядром Linux >= 3.18, щоб поліпшити стабільність "
-"роботи з метаданими та можливості з обчислення контрольних сум журналу.\n"
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "Пропозиція: скористайтеся ядром Linux >= 3.18, щоб поліпшити стабільність роботи з метаданими та можливості з обчислення контрольних сум журналу.\n"
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
+msgstr "Невідоме кодування назви файла у профілі: %s"
+
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr "Невідомі прапорці кодування у профілі: %s"
+
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -6029,11 +5910,24 @@ msgstr ""
 "не збігатися із вашими очікуваннями.\n"
 "\n"
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2449
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr "inode із %d байтів є надто малим для квот проектів"
+
+#: misc/mke2fs.c:2465
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Можливості encrypt та casefold несумісними.\n"
+"Їх не можна вмикати одночасно.\n"
+
+#: misc/mke2fs.c:2480
 msgid "Can't support bigalloc feature without extents feature"
 msgstr "Підтримка можливості bigalloc неможлива без можливості extents"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -6041,7 +5935,7 @@ msgstr ""
 "Можливості resize_inode і meta_bg є несумісними.\n"
 "Їх не можна вмикати одночасно.\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -6053,49 +5947,39 @@ msgstr ""
 "Докладніша інформація: https://ext4.wiki.kernel.org/index.php/Bigalloc\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
-msgstr ""
-"у нерозріджених файлових системах підтримки інтерактивної зміни розмірів "
-"блоків не передбачено"
+msgstr "у нерозріджених файлових системах підтримки інтерактивної зміни розмірів блоків не передбачено"
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2516
 msgid "blocks per group count out of range"
 msgstr "кількість блоків на групу лежить за межами припустимого діапазону"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2538
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
-msgstr ""
-"Можливість flex_bg не увімкнено, отже, розмір flex_bg не можна вказувати"
+msgstr "Можливість flex_bg не увімкнено, отже, розмір flex_bg не можна вказувати"
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2550
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "некоректний розмір inode %d (мін. %d/макс. %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
-msgstr ""
-"inode із %d байтів є надто малим для вбудованих даних; вкажіть більший розмір"
-
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
-"inode із %d байтів є надто малим для квот проектів; вкажіть більший розмір"
+msgstr "inode із %d байтів є надто малим для вбудованих даних; вкажіть більший розмір"
 
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "занадто багато inode (%llu), збільшити відношення inode?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2587
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "занадто багато inode (%llu), вкажіть < 2^32 inode"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2601
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -6103,78 +5987,68 @@ msgid ""
 "\tor lower inode count (-N).\n"
 msgstr ""
 "Значення inode_size (%u) * inodes_count (%u) є надто великим\n"
-"\tдля файлової системи з %llu блоків, вкажіть більше значення inode_ratio (-"
-"i)\n"
+"\tдля файлової системи з %llu блоків, вкажіть більше значення inode_ratio (-i)\n"
 "\tабо зменшіть кількість inode (-N).\n"
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2788
 msgid "Discarding device blocks: "
 msgstr "Відкидаємо блоки пристрою: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 msgid "failed - "
 msgstr "помилка - "
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2863
 msgid "while initializing quota context"
 msgstr "під час спроби ініціалізації контексту квоти"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2870
 msgid "while writing quota inodes"
 msgstr "під час спроби запису inode-ів квоти"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2895
 #, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "помилкова поведінка у відповідь на помилки у профілі — %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2971
+msgid "in malloc for android_sparse_params"
+msgstr "у malloc для android_sparse_params"
+
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "під час налаштовування суперблоку"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
-msgstr ""
-"Розширення не увімкнено. Для ієрархії розширень файлів можна обчислювати "
-"контрольні суми, а для карт блоків — ні. Вимикання розширень зменшує "
-"покриття контрольних сум метаданих. Передайте параметр -O extents, щоб "
-"виправити.\n"
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
+msgstr "Розширення не увімкнено. Для ієрархії розширень файлів можна обчислювати контрольні суми, а для карт блоків — ні. Вимикання розширень зменшує покриття контрольних сум метаданих. Передайте параметр -O extents, щоб виправити.\n"
 
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
-msgstr ""
-"Не увімкнено підтримку 64-бітових файлових систем. Збільшення розміру полів, "
-"які надаються цією можливістю, уможливлює повноцінне обчислення контрольних "
-"сум. Передайте параметр -O 64bit, щоб виправити цю помилку.\n"
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+msgstr "Не увімкнено підтримку 64-бітових файлових систем. Збільшення розміру полів, які надаються цією можливістю, уможливлює повноцінне обчислення контрольних сум. Передайте параметр -O 64bit, щоб виправити цю помилку.\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
+#: misc/mke2fs.c:3016
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
 msgstr "Можливість metadata_csum_seed потребує можливості metadata_csum.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
-msgstr ""
-"Успішно відкинуто, буде повернуто 0s - пропускаємо витирання таблиці inode\n"
+msgstr "Успішно відкинуто, буде повернуто 0s - пропускаємо витирання таблиці inode\n"
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "невідома ОС - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 msgid "Allocating group tables: "
 msgstr "Розміщуємо таблиці груп: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr "під час спроби розмістити таблиці файлової системи"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6182,30 +6056,30 @@ msgstr ""
 "\n"
 "\tпід час перетворення бітової карти підкластера"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr "%s може бути пошкоджено серйозніше перезаписом суперблоку\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "під час занулення блоку %llu наприкінці файлової системи"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3279
 msgid "while reserving blocks for online resize"
 msgstr "під час резервування блоків для інтерактивної зміни розміру"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "журнал"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Додавання журналу на пристрої %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
@@ -6214,21 +6088,21 @@ msgstr ""
 "\n"
 "\tпід час спроби додавання журналу на пристрою %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "виконано\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Пропускаємо створення журналу у лише-супер режимі\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Створюємо журнал (%u блоків): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6236,7 +6110,7 @@ msgstr ""
 "\n"
 "\tпід час спроби створення журналу"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
@@ -6244,35 +6118,28 @@ msgstr ""
 "\n"
 "Помилка під час вмикання можливості запобігання повторним монтуванням."
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3357
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
-msgstr ""
-"Увімкнено захист від повторного монтування з інтервалом оновлення у %d "
-"секунд.\n"
+msgstr "Увімкнено захист від повторного монтування з інтервалом оновлення у %d секунд.\n"
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3373
 msgid "Copying files into the device: "
 msgstr "Копіювання файлів на пристрій: "
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3379
 msgid "while populating file system"
 msgstr "під час заповнення файлової системи"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Записуємо дані щодо обліку суперблоків та файлової системи: "
 
-#: misc/mke2fs.c:3230
-#, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"Попередження, виникли проблеми з записом суперблоків."
+#: misc/mke2fs.c:3393
+msgid "while writing out and closing file system"
+msgstr "під час записування і закриття файлової системи"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6280,28 +6147,31 @@ msgstr ""
 "виконано\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
-msgstr ""
-"Зміщення розділу у %llu (%uk) блоків є несумісним із розміром кластера, %u.\n"
+msgid "while zeroing block %llu for hugefile"
+msgstr "під час занулення блоку %llu для великого файла"
+
+#: misc/mk_hugefiles.c:515
+#, c-format
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgstr "Зміщення розділу у %llu (%uk) блоків є несумісним із розміром кластера, %u.\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
 msgstr "Великі файли буде перезаписано нулями\n"
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:584
 #, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "Створюємо %lu великих файлів "
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:586
 #, c-format
 msgid "with %llu blocks each"
 msgstr "із %llu блоками у кожному"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:595
 #, c-format
 msgid "while creating huge file %lu"
 msgstr "під час спроби створення великого файла %lu"
@@ -6346,55 +6216,69 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   початок=%8d розмір=%8lu кінець=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "Будь ласка, запустіть e2fsck -D для файлової системи.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+"\n"
+"Ця операція потребує щойно перевіреної файлової системи.\n"
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Будь ласка, запустіть e2fsck -f для файлової системи.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "Будь ласка, запустіть e2fsck -D для файлової системи.\n"
+msgstr "Будь ласка, запустіть e2fsck -fD для файлової системи.\n"
 
-#: misc/tune2fs.c:134
+#: misc/tune2fs.c:136
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
 msgstr ""
-"Користування: %s [-c макс_к-ть_монтувань] [-e повед_для_помилок] [-f] [-g "
-"група]\n"
+"Користування: %s [-c макс_к-ть_монтувань] [-e повед_для_помилок] [-f] [-g група]\n"
 "\t[-i інтервал[d|m|w]] [-j] [-J параметри_журналу] [-l]\n"
 "\t[-m відс_зарез_блоків] [-o [^]параметри_монтування[,...]]\n"
-"[-p інтервал_оновлення_mmp] [-r к-ть_зарез_блоків] [-u користувач]\n"
-"\t[-C к-ть_монтувань] [-L мітка_тому] [-M ост_змонт_каталог]\n"
+"\t[-r к-ть_зарез_блоків] [-u користувач] [-C к-ть_монтувань]\n"
+"\t[-L мітка_тому] [-M ост_змонт_каталог]\n"
 "\t[-O [^]можливість[,...]] [-Q параметри_квотування]\n"
 "\t[-E додатковий_параметр[,...]] [-T час_ост_перевірки] [-U UUID]\n"
 "\t[ -I новий_розмір_inode] [-z файл скасування дій] пристрій\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Суперблок журналу не виявлено!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "під час спроби відкрити зовнішній журнал"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s не є журнальованим пристроєм.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr ""
+"Суперблок журналу пошкоджено, значення nr_users\n"
+"є надто великим (%d).\n"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "UUID файлової системи не знайдено на журнальованому пристрої.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6402,52 +6286,52 @@ msgstr ""
 "Не вдалося виявити журнальований пристрій. Його НЕ вилучено.\n"
 "Скористайтеся параметром -f для вилучення журнальованого пристрою.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "Журнал вилучено\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "під час читання бітових карт"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
 msgstr "під час спорожнення inode журналу"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "під час запису inode журналу"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(і перезавантажте комп’ютер після цього!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr "Після запуску e2fsck, будь ласка, запустіть «resize2fs %s %s"
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:489
 #, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr "Будь ласка, віддайте команду «resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
 msgstr " -z \"%s\""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:495
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr "», щоб увімкнути 64-бітовий режим.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:497
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr "», щоб вимкнути 64-бітовий режим.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
@@ -6455,19 +6339,17 @@ msgstr ""
 "ПОПЕРЕДЖЕННЯ: не вдалося підтвердити підтримку metadata_csum_seed у ядрі.\n"
 "  Така підтримка потребує Linux >= v4.4.\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
-msgstr ""
-"Підтримки спорожнення можливості файлової системи «%s» не передбачено.\n"
+msgstr "Підтримки спорожнення можливості файлової системи «%s» не передбачено.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
-msgstr ""
-"Підтримки встановлення можливості файлової системи «%s» не передбачено.\n"
+msgstr "Підтримки встановлення можливості файлової системи «%s» не передбачено.\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6475,7 +6357,7 @@ msgstr ""
 "Можливість has_journal можна знімати, лише якщо файлову систему\n"
 "демонтовано або змонтовано лише у режимі читання.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -6483,7 +6365,7 @@ msgstr ""
 "Встановлено прапорець needs_recovery. Будь ласка, запустіть e2fsck до\n"
 "зняття прапорця has_journal.\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
@@ -6491,7 +6373,7 @@ msgstr ""
 "Для систем з увімкненою можливістю meta_bg встановлення можливості\n"
 "файлової системи sparse_super не передбачено.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6501,14 +6383,12 @@ msgstr ""
 "не можна вмикати, якщо файлову систему змонтовано\n"
 "або вона перебуває у режимі лише читання.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1143
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
-msgstr ""
-"Увімкнено захист від повторного монтування з інтервалом оновлення у %d "
-"секунд.\n"
+msgstr "Увімкнено захист від повторного монтування з інтервалом оновлення у %d секунд.\n"
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6516,21 +6396,20 @@ msgstr ""
 "Можливість захисту від повторного монтування не можна\n"
 "вимкнути, якщо файлова система придатна лише для запису.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 msgid "Error while reading bitmaps\n"
 msgstr "Помилка під час читання бітових карт\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
-msgstr ""
-"Контрольна сума у блоці MMP є невідповідною. Мало бути: %x, маємо: %x\n"
+msgstr "Контрольна сума у блоці MMP є невідповідною. Мало бути: %x, маємо: %x\n"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1174
 msgid "while reading MMP block."
 msgstr "під час читання блоку MMP."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
@@ -6538,7 +6417,7 @@ msgstr ""
 "Зняття прапорця flex_bg може призвести до втрати цілісності\n"
 "файлової системи.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
@@ -6546,62 +6425,46 @@ msgstr ""
 "Можливість huge_file можна знімати, лише якщо файлову систему\n"
 "демонтовано або змонтовано лише у режимі читання.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
 msgstr "Вмикання контрольних сум потребуватиме певного часу."
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr "Не можна вмикати metadata_csum для змонтованої файлової системи!\n"
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
-msgstr ""
-"Розширення не увімкнено. Для ієрархії розширень файлів можна обчислювати "
-"контрольні суми, а для карт блоків — ні. Вимикання розширень зменшує "
-"покриття контрольних сум метаданих. Повторно запустіть із -O extent, щоб "
-"виправити.\n"
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
+msgstr "Розширення не увімкнено. Для ієрархії розширень файлів можна обчислювати контрольні суми, а для карт блоків — ні. Вимикання розширень зменшує покриття контрольних сум метаданих. Повторно запустіть із -O extent, щоб виправити.\n"
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
-msgstr ""
-"Не увімкнено підтримку 64-бітових файлових систем. Збільшення розміру полів, "
-"які надаються цією можливістю, уможливлює повноцінне обчислення контрольних "
-"сум. Запустіть resize2fs -b, щоб виправити цю помилку.\n"
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
+msgstr "Не увімкнено підтримку 64-бітових файлових систем. Збільшення розміру полів, які надаються цією можливістю, уможливлює повноцінне обчислення контрольних сум. Запустіть resize2fs -b, щоб виправити цю помилку.\n"
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
 msgstr "Вимикання контрольних сум потребуватиме певного часу."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr "Не можна вимикати metadata_csum для змонтованої файлової системи!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr "Не можна вмикати 64-бітовий режим, доки файлову систему змонтовано!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr "Не можна вимикати 64-бітовий режим, доки файлову систему змонтовано!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
-msgstr ""
-"\n"
-"Попередження: увімкнено проект без спільної квоти (together)\n"
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
+msgstr "Не вдалося увімкнути можливість проекту; розмір inode є надто малим.\n"
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6609,7 +6472,11 @@ msgstr ""
 "\n"
 "Попередження: параметр «^quota» перевизначає аргументи «-Q».\n"
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr "Не можна вмикати можливість шифрування для файлових систем, де увімкнено можливість кодування.\n"
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
@@ -6617,21 +6484,23 @@ msgstr ""
 "Встановлення можливості «metadata_csum_seed» передбачено лише\n"
 "для файлових систем із увімкненою можливістю metadata_csum.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
-"З часу вмикання metadata_csum змінилося значення UUID. Файлову систему слід "
-"демонтувати, \n"
+"З часу вмикання metadata_csum змінилося значення UUID. Файлову систему слід демонтувати, \n"
 "щоб безпечно перезаписати усі метадані, що відповідають новому UUID.\n"
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr "Повторне обчислення контрольних сум потребуватиме певного часу."
+
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "На файловій системі вже є журнал.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, c-format
 msgid ""
 "\n"
@@ -6640,21 +6509,21 @@ msgstr ""
 "\n"
 "\tпід час спроби відкрити журнал на %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Створюємо журнал на пристрої %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "під час додавання файлової системи до журналу на %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "Створюємо inode журналу: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6662,32 +6531,36 @@ msgstr ""
 "\n"
 "\tпід час спроби створення файла журналу"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr "Не вдалося увімкнути квоту проекту; розмір inode є надто малим.\n"
+
+#: misc/tune2fs.c:1588
 msgid "while initializing quota context in support library"
 msgstr "під час спроби ініціалізації контексту квоти у бібліотеці підтримки"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1603
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr "під час оновлення обмежень квоти (%d)"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1611
 #, c-format
 msgid "while writing quota file (%d)"
 msgstr "під час записування файла квот (%d)"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "while removing quota file (%d)"
 msgstr "під час вилучення файла квот (%d)"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6697,108 +6570,105 @@ msgstr ""
 "\n"
 "Вказано некоректні параметри квотування.\n"
 "\n"
-"Можна використовувати такі коректні параметри квотування (при передаванні "
-"слід відокремлювати комами):\n"
+"Можна використовувати такі коректні параметри квотування (при передаванні слід відокремлювати комами):\n"
 "\t[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Не вдалося обробити специфікатор дати/часу: %s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "помилкова кількість монтувань: %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "помилковий ідентифікатор або назва групи: %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "помилковий інтервал: %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "помилкова частка зарезервованих блоків: %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
 msgid "-o may only be specified once"
 msgstr "-o можна вказувати лише один раз"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
 msgid "-O may only be specified once"
 msgstr "-O можна вказувати лише один раз"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "помилкова кількість зарезервованих блоків: %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "помилковий ідентифікатор або ім’я користувача: %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "помилковий розмір inode: %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Розмір inode має бути степенем двійки: %s"
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "Надто велике значення mmp_update_interval: %lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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] ""
-"Встановлення інтервалу оновлення захисту від повторного монтування у %lu "
-"секунду\n"
-msgstr[1] ""
-"Встановлення інтервалу оновлення захисту від повторного монтування у %lu "
-"секунди\n"
-msgstr[2] ""
-"Встановлення інтервалу оновлення захисту від повторного монтування у %lu "
-"секунд\n"
+msgid_plural "Setting multiple mount protection update interval to %lu seconds\n"
+msgstr[0] "Встановлення інтервалу оновлення захисту від повторного монтування у %lu секунду\n"
+msgstr[1] "Встановлення інтервалу оновлення захисту від повторного монтування у %lu секунди\n"
+msgstr[2] "Встановлення інтервалу оновлення захисту від повторного монтування у %lu секунд\n"
+
+#: misc/tune2fs.c:2078
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "Встановлюємо прапорець помилки файлової системи для примусового виконання fsck.\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Некоректне значення stride RAID: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Некоректне значення stripe-width RAID: %s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2126
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Некоректний алгоритм хешування: «%s»\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2132
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Встановлюємо типовий алгоритм хешування %s (%d)\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2151
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6810,8 +6680,10 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -6825,37 +6697,38 @@ msgstr ""
 "\tclear_mmp\n"
 "\thash_alg=<алгоритм хешування>\n"
 "\tmount_opts=<розширені типові параметри монтування>\n"
+"\tmmp_update_interval=<інтервал оновлення mmp у секундах>\n"
 "\tstride=<розмір фрагмента RAID на окремому диску у блоках>\n"
 "\tstripe_width=<страйд RAID*диски даних у блоках>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 msgid "Failed to read inode bitmap\n"
 msgstr "Не вдалося прочитати бітову карту inode\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 msgid "Failed to read block bitmap\n"
 msgstr "Не вдалося прочитати бітову карту блоків\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "блоки, які буде пересунуто"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 msgid "Failed to allocate block bitmap when increasing inode size\n"
-msgstr ""
-"Не вдалося розмістити бітову карту блоків під час збільшення розмірів inode\n"
+msgstr "Не вдалося розмістити бітову карту блоків під час збільшення розмірів inode\n"
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2653
 msgid "Not enough space to increase inode size \n"
 msgstr "Недостатньо простору для збільшення розміру inode\n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2658
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "Не вдалося пересунути блоки під час зміни розмірів inode \n"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6863,84 +6736,113 @@ msgstr ""
 "Помилка під час зміни розмірів inode.\n"
 "Запустіть e2undo для скасування змін, внесених до файлової системи. \n"
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2900
+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"
+"«tune2fs -f -E clear_mmp {пристрій}»\n"
+
+#: misc/tune2fs.c:2907
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
-"Контрольна сума блоку MMP вказує на пошкодженість. Спробуйте виправити це за "
-"допомогою команди:\n"
+"Контрольна сума блоку MMP вказує на пошкодженість. Спробуйте виправити це за допомогою команди:\n"
 "«e2fsck -f %s»\n"
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2919
 msgid "Cannot modify a journal device.\n"
 msgstr "Не можна вносити зміни до пристрою журналювання.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Розміром inode уже є %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 msgid "Shrinking inode size is not supported\n"
 msgstr "Підтримки зменшення розмірів inode не передбачено\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "Некоректний розмір inode %lu (максимальним є %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
 msgstr "Зміна розмірів inode-ів може бути доволі тривалою."
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+"Попередження: журнал містить сліди пошкодження. Вам варто відтворити журнал за допомогою\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"а потім повторно віддати цю команду. Якщо ви цього не зробите, внесені нею зміни\n"
+"може бути перезаписано після відновлення журналу.\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Відновлюємо журнал.\n"
+
+#: misc/tune2fs.c:3028
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Встановлюємо значення максимальної кількості монтувань %d\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3034
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Встановлюємо поточну кількість монтувань у значення %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Встановлюємо режим поведінки у відповідь на помилку %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Встановлюємо gid для зарезервованих блоків у значення %lu\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3049
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "інтервал між перевірками є надто великим (%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3056
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Встановлюємо інтервал між перевірками у %lu секунд\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "Встановлюємо часту зарезервованих блоків %g%% (%llu блоків)\n"
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "кількість зарезервованих блоків є надто великою (%llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3076
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Встановлюємо кількість зарезервованих блоків у %llu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3081
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6948,7 +6850,7 @@ msgstr ""
 "\n"
 "Суперблоки файлової системи вже розріджено.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6958,7 +6860,7 @@ msgstr ""
 "Для систем з увімкненою можливістю meta_bg встановлення\n"
 "прапорця розріджених суперблоків не передбачено.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
@@ -6967,7 +6869,7 @@ msgstr ""
 "\n"
 "Встановлено прапорець розрідження суперблоків. %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6975,148 +6877,111 @@ msgstr ""
 "\n"
 "Підтримки зняття прапорця розрідження суперблоків не передбачено.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Встановлюємо час останньої перевірки файлової системи у значення %s\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3113
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Встановлюємо uid для зарезервованих блоків у значення %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3145
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr "Помилка у використанні clear_mmp. Слід використовувати з -f\n"
 
-#: misc/tune2fs.c:3024
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"Змінювати значення цієї можливості обмеження квоти можна, лише якщо файлову "
-"систему демонтовано.\n"
+#: misc/tune2fs.c:3163
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
+msgstr "Змінювати значення цієї можливості обмеження квоти можна, лише якщо файлову систему демонтовано.\n"
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3181
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "Встановлення UUID на цій файловій системі може бути доволі тривалим."
+
+#: misc/tune2fs.c:3196
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr "Змінювати UUID можна, лише якщо файлову систему демонтовано.\n"
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
-msgstr ""
-"Якщо ви користуєтеся лише ядрами, новішими за версію 4.4, запустіть «tune2fs "
-"-O metadata_csum_seed», потім знову віддайте цю команду.\n"
-
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr ""
-"Встановлення UUID на файловій системі із контрольними сумами може бути "
-"доволі тривалим."
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
+msgstr "Якщо ви користуєтеся лише ядрами, новішими за версію 4.4, запустіть «tune2fs -O metadata_csum_seed», потім знову віддайте цю команду.\n"
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "Некоректний формат UUID\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 msgid "Need to update journal superblock.\n"
 msgstr "Слід оновити суперблок журналу.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr "Змінювати розмір inode можна, лише якщо файлову систему демонтовано.\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3274
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
-"Підтримки зміни розмірів inode size для файлових систем з увімкненою "
-"можливістю flex_bg\n"
+"Підтримки зміни розмірів inode size для файлових систем з увімкненою можливістю flex_bg\n"
 "не передбачено.\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Встановлюємо розмір inode у %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 msgid "Failed to change inode size\n"
 msgstr "Не вдалося змінити розмір inode\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Встановлюємо розмір stride %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Встановлюємо ширину stripe %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3322
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
-msgstr ""
-"Встановлюємо для розширених типових параметрів монтування значення «%s»\n"
-
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-"Попередження: журнал містить сліди пошкодження. Вам варто відтворити журнал "
-"за допомогою\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"а потім повторно віддати цю команду. Якщо ви цього не зробите, внесені нею "
-"зміни\n"
-"може бути перезаписано після відновлення журналу.\n"
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr "Відновлюємо журнал.\n"
+msgstr "Встановлюємо для розширених типових параметрів монтування значення «%s»\n"
 
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr "<продовження>\n"
 
-#: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Продовжувати (чи зачекати %d секунд)? (y - так, n - ні) "
+#: misc/util.c:105
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "Продовжувати (чи зачекати %d секунд)? (y - так, N - ні) "
 
-#: misc/util.c:108
-#, fuzzy
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
-msgstr "Продовжувати? (y - так, n - ні) "
+msgstr "Продовжувати? (y - так, N - ні) "
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
-msgstr ""
-"Примусове виконання mke2fs. Сподіваємося, що /etc/mtab містить помилки.\n"
+msgstr "Примусове виконання mke2fs. Сподіваємося, що /etc/mtab містить помилки.\n"
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr "не створюватиме %s тут!\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr "Примусове виконання mke2fs.\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr "Не вдалося отримати область пам’яті для обробки параметрів журналу!\n"
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
@@ -7125,7 +6990,7 @@ msgstr ""
 "\n"
 "Не вдалося знайти пристрій журналу, що відповідає вказаному %s\n"
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -7152,11 +7017,10 @@ msgstr ""
 "\tdevice=<пристрій журналювання>\n"
 "\tlocation=<розташування журналу>\n"
 "\n"
-"Розмір журналу має належати діапазону від 1024 до 10240000 блоків файлової "
-"системи.\n"
+"Розмір журналу має належати діапазону від 1024 до 10240000 блоків файлової системи.\n"
 "\n"
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
@@ -7164,7 +7028,7 @@ msgstr ""
 "\n"
 "Файлова система надто мала для журналювання\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -7176,7 +7040,7 @@ msgstr ""
 "розміри мають належати діапазону від 1024 до 10240000 блоків.\n"
 "Перериваємо обробку.\n"
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
@@ -7184,7 +7048,7 @@ msgstr ""
 "\n"
 "Розмір журналу є надто великим для файлової системи.\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
@@ -7197,8 +7061,7 @@ msgstr ""
 #: misc/uuidd.c:49
 #, c-format
 msgid "Usage: %s [-d] [-p pidfile] [-s socketpath] [-T timeout]\n"
-msgstr ""
-"Користування: %s [-d] [-p файл_pid] [-s шлях_до_сокета] [-T час_очікування]\n"
+msgstr "Користування: %s [-d] [-p файл_pid] [-s шлях_до_сокета] [-T час_очікування]\n"
 
 #: misc/uuidd.c:51
 #, c-format
@@ -7342,44 +7205,42 @@ msgstr "№\tНом=%llu, Розм=%llu, Курсор=%llu, Упорядк=%llu\
 #: resize/main.c:49
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
-"Користування: %s [-d прапорці_діагностики] [-f] [-F] [-M] [-P] [-p] пристрій "
-"[-b|-s|новий розмір] [-z файл скасування дій]\n"
+"Користування: %s [-d прапорці_діагностики] [-f] [-F] [-M] [-P] [-p] пристрій [-b|-s|новий розмір] [-S RAID-stride] [-z файл скасування дій]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Розширюємо таблицю inode"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Пересуваємо блоки"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Скануємо таблицю inode"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Оновлюємо посилання inode"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Пересуваємо таблицю inode"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Невідомий прохід?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Початок проходу %d (макс. = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7392,17 +7253,17 @@ msgstr ""
 "параметром примусового виконання, якщо хочете ризикнути.\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "під час спроби відкриття %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "під час отримання статистичних даних щодо %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7411,32 +7272,30 @@ msgstr ""
 "Будь ласка, спочатку віддайте команду «e2fsck -f %s».\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Оцінка мінімального розміру файлової системи: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Некоректний новий розмір: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
-msgstr ""
-"Новий розмір є надто великим для представлення його у форматі 32-бітового "
-"числа\n"
+msgstr "Новий розмір є надто великим для представлення його у форматі 32-бітового числа\n"
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Новий розмір є меншим за мінімальний (%llu)\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Некоректна довжина stride"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7447,79 +7306,66 @@ msgstr ""
 "Вами надіслано запит щодо нового розміру у %llu блоків.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
-msgstr ""
-"Не можна встановлювати або скасовувати встановлення можливості 64-бітового "
-"режиму.\n"
-
-#: resize/main.c:569
-#, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
-msgstr ""
-"Не можна змінювати значення увімкненості можливості 64bit на файловій "
-"системі, розмір якої перевищує 2^32 блоків.\n"
+msgstr "Не можна встановлювати або скасовувати встановлення можливості 64-бітового режиму.\n"
 
 #: resize/main.c:575
 #, c-format
-msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
-msgstr ""
-"Не можна змінювати параметри можливості 64-бітового режиму, доки файлову "
-"систему змонтовано.\n"
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
+msgstr "Не можна змінювати значення увімкненості можливості 64bit на файловій системі, розмір якої перевищує 2^32 блоків.\n"
 
 #: resize/main.c:581
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
-msgstr ""
-"Будь ласка, увімкніть можливість розширень (extents) у tune2fs до вмикання "
-"можливості 64-бітового режиму (64bit).\n"
+msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
+msgstr "Не можна змінювати параметри можливості 64-бітового режиму, доки файлову систему змонтовано.\n"
 
 #: resize/main.c:587
 #, c-format
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
+msgstr "Будь ласка, увімкніть можливість розширень (extents) у tune2fs до вмикання можливості 64-бітового режиму (64bit).\n"
+
+#: resize/main.c:593
+#, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
 msgstr ""
-"Файлова система вже складається з %llu (%dК) блоків. Потреби у додаткових "
-"діях немає.\n"
+"Файлова система вже складається з %llu (%dК) блоків. Потреби у додаткових діях немає.\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "Файлова система вже є 64-бітовою.\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "Файлова система вже є 32-бітовою.\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "Перетворюємо файлову систему на 64-бітову.\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "Перетворюємо файлову систему на 32-бітову.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr "Змінюємо розмір файлової системи на %s до %llu (%d тисяч) блоків.\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "під час спроби змінити розмір %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7528,7 +7374,7 @@ msgstr ""
 "Будь ласка, віддайте команду «e2fsck -fy %s», щоб виправити\n"
 "файлову систему після переривання дії зі зміни розмірів.\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7537,22 +7383,19 @@ msgstr ""
 "У файловій системі %s тепер %llu (%dК) блоків.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "під час спроби обрізати %s"
 
 #: resize/online.c:81
 msgid "kernel does not support online resize with sparse_super2"
-msgstr ""
-"у ядрі не передбачено інтерактивної зміни розмірів за допомогою sparse_super2"
+msgstr "у ядрі не передбачено інтерактивної зміни розмірів за допомогою sparse_super2"
 
 #: resize/online.c:86
 #, c-format
 msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
-msgstr ""
-"Файлову систему у %s змонтовано до %s; надіслано запит щодо інтерактивної "
-"зміни розмірів\n"
+msgstr "Файлову систему у %s змонтовано до %s; надіслано запит щодо інтерактивної зміни розмірів\n"
 
 #: resize/online.c:90
 msgid "On-line shrinking not supported"
@@ -7560,8 +7403,7 @@ msgstr "Підтримки інтерактивного зменшення ро
 
 #: resize/online.c:114
 msgid "Filesystem does not support online resizing"
-msgstr ""
-"У файловій системі не передбачено підтримки інтерактивної зміни розмірів"
+msgstr "У файловій системі не передбачено підтримки інтерактивної зміни розмірів"
 
 #: resize/online.c:122
 msgid "Not enough reserved gdt blocks for resizing"
@@ -7569,9 +7411,7 @@ msgstr "Недостатньо зарезервованих блоків gdt д
 
 #: resize/online.c:129
 msgid "Kernel does not support resizing a file system this large"
-msgstr ""
-"У ядрі операційної системи не передбачено підтримки зміни розмірів таких "
-"великих файлових систем"
+msgstr "У ядрі операційної системи не передбачено підтримки зміни розмірів таких великих файлових систем"
 
 #: resize/online.c:137
 #, c-format
@@ -7593,9 +7433,7 @@ msgstr "Під час перевірки можливості інтеракти
 
 #: resize/online.c:181
 msgid "Kernel does not support online resizing"
-msgstr ""
-"У ядрі операційної системи не передбачено підтримки інтерактивної зміни "
-"розмірів"
+msgstr "У ядрі операційної системи не передбачено підтримки інтерактивної зміни розмірів"
 
 #: resize/online.c:220
 #, c-format
@@ -7606,54 +7444,48 @@ msgstr "Виконуємо інтерактивну зміну розмірів
 msgid "While trying to extend the last group"
 msgstr "Під час спроби розширення останньої групи"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Під час спроби додати групу %d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, c-format
-msgid ""
-"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
-"this system.\n"
-msgstr ""
-"Файлову систему у %s змонтовано до %s, підтримки інтерактивної зміни "
-"розмірів для цієї файлової системи не передбачено.\n"
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Файлову систему у %s змонтовано до %s, підтримки інтерактивної зміни розмірів для цієї файлової системи не передбачено.\n"
 
 #: resize/resize2fs.c:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "кількість inode (%llu) має бути меншою за %u"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "кількість inode (%llu) має бути меншою за %u\n"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "зарезервовані блоки"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "блоки метаданих"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr "нові метаблоки"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr "Такого не повинно було статися! Немає sb у last super_sparse bg?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
-msgstr ""
-"Такого не повинно було статися! Неочікуване old_desc у super_sparse bg?\n"
+msgstr "Такого не повинно було статися! Неочікуване old_desc у super_sparse bg?\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Такого не повинно було статися: inode зміни розмірів пошкоджено!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.43.4-WIP"
-msgstr "Бібліотека EXT2FS версії 1.43"
+msgid "EXT2FS Library version 1.45.3"
+msgstr "Бібліотека EXT2FS версії 1.45.3"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -7701,8 +7533,7 @@ msgstr "Помилкове значення контрольної суми дл
 
 #: lib/ext2fs/ext2_err.c:23
 msgid "Wrong magic number for directory block list structure"
-msgstr ""
-"Помилкове значення контрольної суми для структури списку блоків каталогів"
+msgstr "Помилкове значення контрольної суми для структури списку блоків каталогів"
 
 #: lib/ext2fs/ext2_err.c:24
 msgid "Wrong magic number for icount structure"
@@ -7710,8 +7541,7 @@ msgstr "Помилкова контрольна сума для структур
 
 #: lib/ext2fs/ext2_err.c:25
 msgid "Wrong magic number for Powerquest io_channel structure"
-msgstr ""
-"Помилкове значення контрольної суми для структури Powerquest io_channel"
+msgstr "Помилкове значення контрольної суми для структури Powerquest io_channel"
 
 #: lib/ext2fs/ext2_err.c:26
 msgid "Wrong magic number for ext2 file structure"
@@ -7799,15 +7629,11 @@ msgstr "Каталог EXT2 пошкоджено"
 
 #: lib/ext2fs/ext2_err.c:47
 msgid "Attempt to read block from filesystem resulted in short read"
-msgstr ""
-"Спроба прочитати блок з файлової системи призвела до читання недостатньої "
-"кількості даних"
+msgstr "Спроба прочитати блок з файлової системи призвела до читання недостатньої кількості даних"
 
 #: lib/ext2fs/ext2_err.c:48
 msgid "Attempt to write block to filesystem resulted in short write"
-msgstr ""
-"Спроба записати блок до файлової системи призвела до недостатності обсягу "
-"даних"
+msgstr "Спроба записати блок до файлової системи призвела до недостатності обсягу даних"
 
 #: lib/ext2fs/ext2_err.c:49
 msgid "No free space in the directory"
@@ -7903,18 +7729,15 @@ msgstr "Суперблок ext2 пошкоджено"
 
 #: lib/ext2fs/ext2_err.c:72
 msgid "Illegal generic bit number passed to ext2fs_mark_generic_bitmap"
-msgstr ""
-"ext2fs_mark_generic_bitmap передано некоректну загальну кількість бітів"
+msgstr "ext2fs_mark_generic_bitmap передано некоректну загальну кількість бітів"
 
 #: lib/ext2fs/ext2_err.c:73
 msgid "Illegal generic bit number passed to ext2fs_unmark_generic_bitmap"
-msgstr ""
-"ext2fs_unmark_generic_bitmap передано некоректну загальну кількість бітів"
+msgstr "ext2fs_unmark_generic_bitmap передано некоректну загальну кількість бітів"
 
 #: lib/ext2fs/ext2_err.c:74
 msgid "Illegal generic bit number passed to ext2fs_test_generic_bitmap"
-msgstr ""
-"ext2fs_test_generic_bitmap передано некоректну загальну кількість бітів"
+msgstr "ext2fs_test_generic_bitmap передано некоректну загальну кількість бітів"
 
 #: lib/ext2fs/ext2_err.c:75
 msgid "Too many symbolic links encountered."
@@ -7938,9 +7761,7 @@ msgstr "У файлової системи є непідтримувані вл
 
 #: lib/ext2fs/ext2_err.c:80
 msgid "IO Channel failed to seek on read or write"
-msgstr ""
-"Не вдалося виконати позиціювання каналу введення-виведення під час читання "
-"чи запису"
+msgstr "Не вдалося виконати позиціювання каналу введення-виведення під час читання чи запису"
 
 #: lib/ext2fs/ext2_err.c:81
 msgid "Memory allocation failed"
@@ -8092,14 +7913,11 @@ msgstr "Список блокувань каталогів ext2fs є порож
 
 #: lib/ext2fs/ext2_err.c:118
 msgid "Attempt to modify a block mapping via a read-only block iterator"
-msgstr ""
-"Спроба змінити прив’язку блоків за допомогою ітератора, придатного лише для "
-"читання"
+msgstr "Спроба змінити прив’язку блоків за допомогою ітератора, придатного лише для читання"
 
 #: lib/ext2fs/ext2_err.c:119
 msgid "Wrong magic number for ext4 extent saved path"
-msgstr ""
-"Помилкове значення контрольної суми для збереженого шляху розширення ext4"
+msgstr "Помилкове значення контрольної суми для збереженого шляху розширення ext4"
 
 #: lib/ext2fs/ext2_err.c:120
 msgid "Wrong magic number for 64-bit generic bitmap"
@@ -8211,14 +8029,11 @@ msgstr "У каналі введення-виведення не передба
 
 #: lib/ext2fs/ext2_err.c:147
 msgid "Can't check if filesystem is mounted due to missing mtab file"
-msgstr ""
-"Не вдалося перевірити, чи змонтовано файлову систему, оскільки немає файла "
-"mtab"
+msgstr "Не вдалося перевірити, чи змонтовано файлову систему, оскільки немає файла mtab"
 
 #: lib/ext2fs/ext2_err.c:148
 msgid "Filesystem too large to use legacy bitmaps"
-msgstr ""
-"Файлова система є надто великою для використання застарілих бітових карт"
+msgstr "Файлова система є надто великою для використання застарілих бітових карт"
 
 #: lib/ext2fs/ext2_err.c:149
 msgid "MMP: invalid magic number"
@@ -8229,8 +8044,8 @@ msgid "MMP: device currently active"
 msgstr "MMP: зараз пристрій використовується"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
-msgstr "MMP: виконується fsck"
+msgid "MMP: e2fsck being run"
+msgstr "MMP: виконується e2fsck"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
@@ -8285,8 +8100,8 @@ msgid "Unknown checksum algorithm"
 msgstr "Невідомий алгоритм обчислення контрольної суми"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr "Ð\9aонÑ\82Ñ\80олÑ\8cна Ñ\81Ñ\83ма Ð±Ð»Ð¾ÐºÑ\83 MMP Ð½Ðµ Ð²Ñ\96дповÑ\96даÑ\94 Ð±Ð»Ð¾ÐºÑ\83 MMP"
+msgid "MMP block checksum does not match"
+msgstr "Ð\9aонÑ\82Ñ\80олÑ\8cна Ñ\81Ñ\83ма Ð±Ð»Ð¾ÐºÑ\83 MMP Ð½Ðµ Ð²Ñ\96дповÑ\96даÑ\94 ÐµÑ\82алоннÑ\96й"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
@@ -8298,8 +8113,7 @@ msgstr "Контрольна сума бітової карти блоку не
 
 #: lib/ext2fs/ext2_err.c:168
 msgid "Cannot iterate data blocks of an inode containing inline data"
-msgstr ""
-"Не можна здійснювати ітерацію блоками даних inode, що містить вбудовані дані"
+msgstr "Не можна здійснювати ітерацію блоками даних inode, що містить вбудовані дані"
 
 #: lib/ext2fs/ext2_err.c:169
 msgid "Extended attribute has an invalid name length"
@@ -8378,9 +8192,12 @@ msgid "The journal superblock is corrupt"
 msgstr "Суперблок журналу пошкоджено"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "Inode зміни розмірів пошкоджено"
+msgstr "Inode пошкоджено"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr "Inode, який містить значення розширеного атрибута, пошкоджено"
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8574,21 +8391,110 @@ msgstr "%s місить файлову систему %s\n"
 msgid "%s contains `%s' data\n"
 msgstr "%s містить дані «%s»\n"
 
+#~ msgid "while opening directory \"%s\""
+#~ msgstr "під час відкриття каталогу «%s»"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** У файловій системі виявлено помилки у контрольних сумах! Запустіть e2fsck зараз же!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** У бітових картка виявлено помилки у контрольних сумах! Запустіть e2fsck зараз же!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %s: помилка під час читання бітових карт: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Попередження, виникли проблеми з записом суперблоків.\n"
+
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "i_dir_acl @F %Id, а має бути нуль.\n"
+
+#~ msgid "Journal features:        "
+#~ msgstr "Можливості журналу:        "
+
+#~ msgid "Journal size:             "
+#~ msgstr "Розмір журналу:             "
+
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "Довжина журналу:          %u\n"
+#~ "Послідовність журналу:    0x%08x\n"
+#~ "Початок журналу:          %u\n"
+
+#~ msgid "Journal checksum type:    crc32\n"
+#~ msgstr "Тип контрольної суми журналу: crc32\n"
+
+#~ msgid ""
+#~ "Journal checksum type:    %s\n"
+#~ "Journal checksum:         0x%08x\n"
+#~ msgstr ""
+#~ "Тип контрольної суми журналу: %s\n"
+#~ "Контрольна сума журналу:      0x%08x\n"
+
+#~ msgid "Journal errno:            %d\n"
+#~ msgstr "Кількість помилок журналу: %d\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Розмір блоку журналу:     %u\n"
+#~ "Довжина журналу:          %u\n"
+#~ "Перший блок журналу:      %u\n"
+#~ "Послідовність журналу:    0x%08x\n"
+#~ "Початок журналу:          %u\n"
+#~ "К-ть користувачів журналу: %u\n"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "Користувачі журналу:      %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning: enabled project without quota together\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Попередження: увімкнено проект без спільної квоти (together)\n"
+
 #~ msgid "Please run e2fsck on the filesystem.\n"
 #~ msgstr "Будь ласка, запустіть e2fsck для файлової системи.\n"
 
 #~ msgid "@i %i has @cion flag set on @f without @cion support.  "
-#~ msgstr ""
-#~ "для @i %i встановлено прапорець стискання у файловій системі, де "
-#~ "підтримки стискання не передбачено.  "
+#~ msgstr "для @i %i встановлено прапорець стискання у файловій системі, де підтримки стискання не передбачено.  "
 
 #~ msgid "@A @a @b %b.  "
 #~ msgstr "помилка під час спроби розміщення блоку розширеного атрибута %b.  "
 
 #~ msgid "%s: warning: compression support is experimental.\n"
-#~ msgstr ""
-#~ "%s: попередження: тестування підтримки стискання ще не завершено "
-#~ "(експериментальна можливість).\n"
+#~ msgstr "%s: попередження: тестування підтримки стискання ще не завершено (експериментальна можливість).\n"
 
 #~ msgid ""
 #~ "%s: e2fsck not compiled with HTREE support,\n"
@@ -8628,12 +8534,10 @@ msgstr "%s містить дані «%s»\n"
 #~ msgstr "Некоректний параметр quotatype: %s\n"
 
 #~ msgid "Couldn't allocate memory to parse quota options!\n"
-#~ msgstr ""
-#~ "Не вдалося отримати область пам’яті для обробки параметрів квотування!\n"
+#~ msgstr "Не вдалося отримати область пам’яті для обробки параметрів квотування!\n"
 
 #~ msgid "Couldn't allocate memory for tdb filename\n"
-#~ msgstr ""
-#~ "Не вдалося отримати область пам’яті для зберігання назви файла tdb\n"
+#~ msgstr "Не вдалося отримати область пам’яті для зберігання назви файла tdb\n"
 
 #~ msgid ""
 #~ "To undo the tune2fs operation please run the command\n"
@@ -8647,12 +8551,8 @@ msgstr "%s містить дані «%s»\n"
 #~ msgid "%s is entire device, not just one partition!\n"
 #~ msgstr "%s є цілим пристроєм, а не лише одним розділом!\n"
 
-#~ msgid ""
-#~ "\b\b\b\b\b\b\b\bCopied %llu / %llu blocks (%llu%%) in %s at %.2f MB/"
-#~ "s       \n"
-#~ msgstr ""
-#~ "\b\b\b\b\b\b\b\bСкопійовано %llu з %llu блоків (%llu%%) за %s зі "
-#~ "швидкістю %.2f МБ/с\n"
+#~ msgid "\b\b\b\b\b\b\b\bCopied %llu / %llu blocks (%llu%%) in %s at %.2f MB/s       \n"
+#~ msgstr "\b\b\b\b\b\b\b\bСкопійовано %llu з %llu блоків (%llu%%) за %s зі швидкістю %.2f МБ/с\n"
 
 #~ msgid ""
 #~ "\n"
index 396fdaa..707785e 100644 (file)
Binary files a/po/vi.gmo and b/po/vi.gmo differ
index 8c5550c..c528173 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -4,7 +4,7 @@
 # Copyright © 2014 Free Software Foundation, Inc.
 # This file is distributed under the same license as the e2fsprogs package.
 # Clytie Siddall <clytie@riverland.net.au>, 2006-2010.
-# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014, 2016, 2017, 2018.
 #
 #. 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,
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -50,7 +57,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.42.12-pre2\n"
+"Project-Id-Version: e2fsprogs 1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2014-08-27 07:33+0700\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2019-08-26 07:46+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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
-"X-Generator: Poedit 1.5.5\n"
-"X-Poedit-SourceCharset: utf-8\n"
+"X-Generator: Poedit 2.2.3\n"
+"X-Poedit-SourceCharset: UTF-8\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Khối hỏng %u nằm ngoài phạm vi nên bị bỏ qua.\n"
@@ -98,11 +106,12 @@ msgstr "trong khi kiểm tra sự đúng mực nút thông tin khối hỏng"
 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/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "trong khi cố mở %s"
@@ -112,7 +121,7 @@ msgstr "trong khi cố mở %s"
 msgid "while trying popen '%s'"
 msgstr "trong khi cố mở popen “%s”"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 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"
 
@@ -123,9 +132,11 @@ msgstr "trong khi cập nhật nút thông tin khối hỏng"
 #: e2fsck/badblocks.c:133
 #, 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 %u không hợp lệ 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 %u không hợp lệ trong nút thông tin khối hỏng nên bị xóa.\n"
+
+#: e2fsck/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "trong khi đang giải phóng tập tin dir_info"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -176,7 +187,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 "Số khối không hợp lệ!\n"
+msgstr "Số lượng khối không hợp lệ!\n"
 
 #: e2fsck/extend.c:50
 #, c-format
@@ -184,9 +195,8 @@ msgid "Couldn't allocate block buffer (size=%d)\n"
 msgstr "Không thể cấp phát bộ đệm khối (cỡ=%d)\n"
 
 #: e2fsck/extents.c:42
-#, fuzzy
 msgid "extent rebuild inode map"
-msgstr "ánh xạ nút thông tin tập tin chuẩn"
+msgstr "ánh xạ nút tái thiết mở rộng"
 
 #: e2fsck/flushb.c:35
 #, c-format
@@ -196,8 +206,7 @@ msgstr "Cách dùng: %s đĩa\n"
 #: e2fsck/flushb.c:64
 #, c-format
 msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
-msgstr ""
-"BLKFLSBUF ioctl không được hỗ trợ. Không thể đẩy dữ liệu bộ đệm lên đĩa.\n"
+msgstr "BLKFLSBUF ioctl không được hỗ trợ. Không thể đẩy dữ liệu bộ đệm lên đĩa.\n"
 
 #: e2fsck/iscan.c:44
 #, c-format
@@ -206,12 +215,12 @@ msgstr ""
 "Cách dùng: %s [-F] [-I khối_đệm_nút] thiết_bị\n"
 "\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "trong khi mở %s để đẩy dữ liệu lên đĩa"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "trong khi cố đẩy dữ liệu %s lên đĩa"
@@ -221,11 +230,11 @@ msgstr "trong khi cố đẩy dữ liệu %s lên đĩa"
 msgid "while trying to open '%s'"
 msgstr "trong khi cố mở “%s”"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr "trong khi mở việc quét nút thông tin"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr "trong khi lấy nút thông tin kế tiếp"
 
@@ -234,359 +243,379 @@ msgstr "trong khi lấy nút thông tin kế tiếp"
 msgid "%u inodes scanned.\n"
 msgstr "%u nút thông tin đã được quét.\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "đang đọc siêu khối nhật ký\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: không tìm thấy siêu khối nhật ký hợp lệ\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: nhật ký quá ngắn\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: đang phục hồi nhật ký\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: sẽ không phục hồi nhật ký trong khi ở chế độ chỉ-đọc\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "trong khi cố mở lại %s"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "athuộc tính đã mở rộng"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "Agặp lỗi khi cấp phát"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "bkhối"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "Bmảng ảnh"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "cnén"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "Cxung đột với @b của hệ thống tập tin khác"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "dthư mục"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
-msgstr "Dbị x"
+msgstr "Dbị xóa"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "emục nhập"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e “%Dn” trong %p (%i)"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "fhệ thống tập tin"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fcho @i %i (%Q) là"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "gnhóm"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "hHTREE @d @i"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "inút thông tin"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "Icấm"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "jnhật ký"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "lmất+tìm"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "Llà liên kết"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "mđa tuyên bố"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "nkhông hợp lệ"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "othừa"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "pvấn đề trong"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "qhạn nghạch"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "r@i gốc"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "snên là"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "Ssiêu@b"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "uchưa-gắn"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "vthiết-bị"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xmở-rộng"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "zdài bằng không"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<nút thông tin vô giá trị>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<Nút thông tin khối hỏng>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<Nút hạn ngạch người dùng>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<Nút hạn ngạch nhóm>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<Nút thông tin bộ nạp khởi động>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
-msgstr "<Nút thông tin hủy x thư mục>"
+msgstr "<Nút thông tin hủy xóa thư mục>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<Nút thông tin mô tả nhóm>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<nút thông tin nhật ký>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<Nút thông tin được dành riêng 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<nút thông tin được dành riêng 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "tập tin thường"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "thư mục"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "thiết bị ký tự"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "thiết bị khối"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "ống dẫn có tên"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "liên kết mềm"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "ổ cắm"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "kiểu tập tin không rõ với chế độ 0%o"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "khối gián tiếp"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "khối gián tiếp đôi"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "khối gián tiếp gấp ba"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "khối dịch"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "khối #"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "người dùng"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "nhóm"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr "dự án"
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "kiểu hạn ngạch chưa biết"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "ánh xạ nút thông tin đa tuyên bố"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "lỗi nội bộ: không tìm thấy khối trùng (dup_blk) cho %llu\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "đã trả lại từ khối tập tin nhái (clone_file_block)"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr "lỗi nội bộ: không thể tra tìm mục ghi khối EA cho %llu"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "lỗi nội bộ: không thể tra tìm mục ghi nút thông tin EA cho %u"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr "trong khi băm các hạng mục với e_value_inum = %u"
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 msgid "reading directory block"
 msgstr "đang đọc khối thư mục"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 msgid "in-use inode map"
 msgstr "ánh xạ nút thông tin đang được dùng"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 msgid "directory inode map"
 msgstr "ánh xạ nút thông tin thư mục"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 msgid "regular file inode map"
 msgstr "ánh xạ nút thông tin tập tin chuẩn"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr "ánh xạ khối đang được dùng"
 
-#: e2fsck/pass1.c:1151
-#, fuzzy
+#: e2fsck/pass1.c:1263
 msgid "metadata block map"
-msgstr "khối siêu_dữ_liệu"
+msgstr "bản đồ khối siêu_dữ_liệu"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 msgid "opening inode scan"
 msgstr "đang mở bản quét nút thông tin"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr "đang lấy nút thông tin kế tiếp từ bản quét"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 msgid "Pass 1"
 msgstr "Lần 1"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "đang đọc khối gián tiếp của nút thông tin %u"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 msgid "bad inode map"
 msgstr "ánh xạ nút thông tin sai"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 msgid "inode in bad block map"
 msgstr "nút thông tin trong ánh xạ khối sai"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 msgid "imagic inode map"
 msgstr "ánh xạ nút thông tin ma thuật imagic"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr "ánh xạ khối đa tuyên bố"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr "ánh xạ khối ext attr (thuộc tính thêm?)"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu (%c): cần %6lu nhưng lại nhận được %6lu vật lý (đếm khối %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 msgid "block bitmap"
 msgstr "mảng ảnh khối"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 msgid "inode bitmap"
 msgstr "mảng ảnh nút thông tin"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 msgid "inode table"
 msgstr "bảng nút thông tin"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "Lần 2"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 msgid "Can not continue."
 msgstr "Không thể tiếp tục."
 
@@ -606,195 +635,203 @@ msgstr "Lần 3"
 msgid "inode loop detection bitmap"
 msgstr "mảng ảnh phát hiện vòng lặp nút thông tin"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "Lần 4"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "Lần 5"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
-msgstr ""
+msgstr "check_inode_bitmap_checksum: Lỗi cấp phát bộ nhớ"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
-msgstr ""
+msgstr "check_block_bitmap_checksum: Lỗi cấp phát bộ nhớ"
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 msgid "(no prompt)"
 msgstr "(không nhắc)"
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 msgid "Fix"
 msgstr "Sửa chữa"
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:54
 msgid "Clear"
-msgstr "X sạch"
+msgstr "Xóa sạch"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr "Định vị lại"
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
 msgid "Allocate"
 msgstr "Cấp phát"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 msgid "Expand"
 msgstr "Mở rộng"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 msgid "Connect to /lost+found"
 msgstr "Kết nối đến /mất+tìm"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 msgid "Create"
 msgstr "Tạo"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr "Cứu vớt"
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
 msgid "Truncate"
 msgstr "Cắt ngắn"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 msgid "Clear inode"
-msgstr "X sạch nút thông tin"
+msgstr "Xóa sạch nút thông tin"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 msgid "Abort"
 msgstr "Hủy bỏ"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 msgid "Split"
 msgstr "Chia tách"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 msgid "Continue"
 msgstr "Tiếp tục"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr "Nhân bản các khối đa tuyên bố"
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 msgid "Delete file"
-msgstr "X tập tin"
+msgstr "Xóa tập tin"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 msgid "Suppress messages"
 msgstr "Thu hồi thông điệp"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
 msgid "Unlink"
 msgstr "Bỏ liên kết"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 msgid "Clear HTree index"
-msgstr "X sạch chỉ mục hHTREE"
+msgstr "Xóa sạch chỉ mục hHTREE"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 msgid "Recreate"
 msgstr "Tạo lại"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr "Tối ưu hóa"
+
+#: e2fsck/problem.c:81
 msgid "(NONE)"
 msgstr "(KHÔNG)"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 msgid "FIXED"
 msgstr "ĐàSỬA CHỮA"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 msgid "CLEARED"
-msgstr "ĐàX SẠCH"
+msgstr "ĐàXÓA SẠCH"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr "ĐàĐỊNH VỊ LẠI"
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 msgid "ALLOCATED"
 msgstr "ĐàCẤP PHÁT"
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr "ĐàMỞ RỘNG"
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr "ĐàKẾT NỐI LẠI"
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 msgid "CREATED"
 msgstr "ĐàTẠO"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr "ĐàCỨU VỚT"
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
 msgid "TRUNCATED"
 msgstr "ĐàCẮT NGẮN"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 msgid "INODE CLEARED"
-msgstr "NÚT THÔNG TIN ĐàX SẠCH"
+msgstr "NÚT THÔNG TIN ĐàXÓA SẠCH"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 msgid "ABORTED"
 msgstr "BỊ HỦY BỎ"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 msgid "SPLIT"
 msgstr "ĐàCHIA TÁCH"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr "ĐANG TIẾP TỤC"
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr "CÁC KHỐI ĐA TUYÊN BỐ ĐàĐƯỢC NHÁI"
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 msgid "FILE DELETED"
 msgstr "TẬP TIN ĐàBỊ XÓA"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr "BỊ THU HỒI"
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr "BỊ BỎ LIÊN KẾT"
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 msgid "HTREE INDEX CLEARED"
-msgstr "CHỈ MỤC HTREE ĐàĐƯỢC X SẠCH"
+msgstr "CHỈ MỤC HTREE ĐàĐƯỢC XÓA SẠCH"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 msgid "WILL RECREATE"
 msgstr "SẼ TẠO LẠI"
 
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr "SẼ TỐI ƯU HÓA"
+
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:115
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "@b @B cho @g %g không phải trong @g.  (@b %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:119
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "@i @B cho @g %g không phải trong @g.  (@b %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -811,7 +848,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -836,7 +873,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -849,7 +886,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -860,18 +897,18 @@ msgstr ""
 "khác với kích cỡ @b.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "@S @b mỗi nhóm = %b, còn nên là %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "@S @b dữ liệu thứ nhất = %b, nên là %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -879,8 +916,8 @@ msgstr ""
 "@f không có UUID nên đang tạo ra nó.\n"
 "\n"
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -897,48 +934,48 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "Tìm thấy hư hỏng trong @S.  (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:186
+#, no-c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "Gặp lỗi khi xác định kích cỡ của @v vật lý: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:191
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "Số lượng @i trong @S là %i, @s %j.\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd không hỗ trợ tính năng kiểu tập tin.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:201
+#, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "@S có một @n @j (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr "@j bên ngoài có nhiều người dùng @f (không được hỗ trợ).\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:211
 msgid "Can't find external @j\n"
 msgstr "Không tìm thấy @j bên ngoài\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 msgid "External @j has bad @S\n"
 msgstr "@j bên ngoài có @S sai\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 msgid "External @j does not support this @f\n"
 msgstr "@j bên ngoài không hỗ trợ @f này\n"
 
@@ -946,94 +983,92 @@ msgstr "@j bên ngoài không hỗ trợ @f này\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:235
 msgid "@j @S is corrupt.\n"
 msgstr "@S @j bị hỏng.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "Cờ @S has_@j vẫn tốt, nhưng lại có một @j hiện diện ở đây.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr "@S đặt cờ needs_recovery, còn không có @j hiện diện.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:250
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "Cờ @S needs_recovery vẫn tốt, nhưng @j lại có dữ liệu.\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:255
 msgid "Clear @j"
-msgstr "X sạch @j"
+msgstr "Xóa sạch @j"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr "@f đặt (các) cờ tính năng, còn là @f bản sửa đổi 0."
+msgstr "@f đặt (các) cờ tính năng, còn là @f bản sửa đổi 0.  "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:265
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "@i @o %s %i (uid=%Iu, gid=%Ig, chế độ=%Im, cỡ=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:270
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "%B (%b) @l được tìm trong @i @o %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:275
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
-msgstr "Đã x sạch %B (%b) được tìm trong @i @o %i.\n"
+msgstr "Đã xóa sạch %B (%b) được tìm trong @i @o %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:281
+#, no-c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@i @o %i @l trong @S.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:287
+#, no-c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@I @i %i in @o @i list.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:292
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr "@S @j đặt một cờ tính năng chỉ đọc không rõ.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:297
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr "@S @j đặt một cờ tính năng không tương thích không rõ.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Phiên bản @j không hỗ trợ trong e2fsck này.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:308
+#, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1043,8 +1078,8 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:314
+#, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1055,29 +1090,29 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
 "\n"
 msgstr ""
 "Tìm thấy các trường @S @j pb2 @n (từ @j pb1).\n"
-"Đang xoá sạch các trường nằm ở bên kia @S @j pb1...\n"
+"Đang xóa sạch các trường nằm ở bên kia @S @j pb1…\n"
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 msgid "Run @j anyway"
 msgstr "Vẫn chạy @j"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr "Chưa đặt cờ phục hồi trong @S dự trữ nên vẫn chạy @j.\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1087,7 +1122,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1096,18 +1131,18 @@ msgstr ""
 "@s số không.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr "Không bật resize_@i, còn @i thay đổi kích cỡ không phải số không..  "
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:352
 msgid "Resize @i not valid.  "
 msgstr "@i thay đổi kích cỡ không phải hợp lệ.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1117,21 +1152,21 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
 msgstr "Giờ ghi @S cuối cùng(%t, bây giờ = %T) nằm trong thì tương lai.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:368
+#, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "Lời gợi ý @S cho siêu khối bên ngoài @s %X.  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1140,263 +1175,274 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
-msgstr "Mô tả @g %g có tổng kiểm là %04x, phải là %04y."
+msgstr "Mô tả @g %g có tổng kiểm là %04x, phải là %04y.  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr "Mô tả @g %g có nhãn là chưa khởi tạo mà không có tập tính năng.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:389
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr "Mô tả @g %g sai đếm các nút thông tin chưa dùng %b.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:394
 msgid "Last @g @b @B uninitialized.  "
 msgstr "Chưa khởi tạo @B @b @g cuối cùng.  "
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "Giao dịch nhật ký %i bị hỏng nên hủy bỏ tiến trình phát lại.\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:405
 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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
-#, fuzzy
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 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)."
+"\t(theo ít nhất một ngày, rất có thể do đồng hồ phần cứng bị đặt sai giờ)\n"
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
-#, fuzzy
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 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)."
+"Giờ ghi @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ị đặt không đúng)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr "Lỗi: một hay nhiều tổng kiểm bộ mô tả @g @b không phải hợp lệ.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "Đang đặt số lượng @is thành %j (là %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "Đang đặt số lượng @bs thành %c (là %b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr "Làm cho @q @is %i (%Q) ẩn đi.\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+msgid "Hiding %U @q @i %i (%Q).\n"
+msgstr "Đang ẩn %U @q @i %i (%Q).\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 msgid "@S has invalid MMP block.  "
 msgstr "@S có khối MMP không hợp lệ.        "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
 msgid "@S has invalid MMP magic.  "
-msgstr "@S có số màu nhiệm MMP không hợp lệ."
+msgstr "@S có số màu nhiệm MMP không hợp lệ.  "
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:453
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2: %m\n"
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:459
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
-msgstr ""
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "@S metadata_csum supersedes uninit_bg; cả hai bít đó không thể được đặt cùng lúc."
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-#, fuzzy
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "Tổng kiểm tra khối MMP không khớp với khối MMP"
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+msgid "@S MMP @b checksum does not match.  "
+msgstr "Tổng kiểm tra @b MMP @S không khớp.  "
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
-msgstr ""
-"hệ thống tập tin @S 64bit cần mở rộng để có thể truy cập toàn bộ đĩa.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+msgid "@S 64bit @f needs extents to access the whole disk.  "
+msgstr "@f 64bit @S cần mở rộng để có thể truy cập toàn bộ đĩa.  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "First_meta_bg quá lớn.  (%N, giá trị tối đa %g).  "
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
-#, fuzzy
+#: e2fsck/problem.c:486
 msgid "External @j @S checksum does not match @S.  "
-msgstr "Tổng kiểm tra khối mở rộng không khớp với khối mở rộng"
+msgstr "Tổng kiểm tra @j @S mở rộng không khớp với @S.  "
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
-msgstr ""
+msgstr "@S metadata_csum_seed là không cần thiết nếu không có metadata_csum."
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
-msgstr ""
+msgstr "Lỗi khởi tạo ngữ cảnh hạn ngạch trong thư viện hỗ trợ: %m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
-msgstr ""
+msgstr "Sai isize mở rộng đã yêu cầu trong @S (%N).  "
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
+msgstr "Sai isize mở rộng đã mong muốn trong @S (%N).  "
+
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "%U @q @i %i không hợp lệ.  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr "@S đã có quá nhiều nút (% N).\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
 msgstr ""
+"Resize_@i và tính năng meta_bg được kích hoạt. Những tính năng này\n"
+"không tương thích. Resize @i nên bị vô hiệu hoá. "
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Lần qua 1: đang kiểm tra các @i, @b và kích cỡ\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 msgid "@r is not a @d.  "
 msgstr "@r không phải @d.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "@r đặt dtime (rất có thể do mkd2fs cũ).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:544
 msgid "Reserved @i %i (%Q) has @n mode.  "
-msgstr "@i %i đã dành riêng (%Q) có chế độ @n."
+msgstr "@i %i đã dành riêng (%Q) có chế độ @n.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:550
+#, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "@i @D %i có dtime bằng không.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "@i %i đang được dùng, còn đặt dtime.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:562
+#, no-c-format
 msgid "@i %i is a @z @d.  "
 msgstr "@i %i là @d @z.    "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:567
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "@B @b của @g %g tại %b @C.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:572
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "@B @i của @g %g ở %b @c.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:577
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "Bảng @i của @g %g ở %b @C.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:582
 msgid "@g %g's @b @B (%b) is bad.  "
-msgstr "@b @B (%b) của @g %g là sai"
+msgstr "@b @B (%b) của @g %g là sai  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 msgid "@g %g's @i @B (%b) is bad.  "
-msgstr "@B @i (%b) của @g %g là sai."
+msgstr "@B @i (%b) của @g %g là sai.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size là %Is, @s %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_@bs là %Ib, @s %N.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in @i %i.  "
 msgstr "%B (%b) @l nằm trong @i %i.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B (%b) đè lên siêu dữ liệu @f trong @i %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:613
+#, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "@i %i có @b cấm.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Quá nhiều @b cấm trong @i %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "%B (%b) @l nằm trong @i @b sai. "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "@i @b sai có @b cấm. "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr "@b trùng hay sai đang được dùng.\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "@b sai %b được dùng làm @b gián tiếp của @i @b.  "
 
@@ -1404,7 +1450,7 @@ msgstr "@b sai %b được dùng làm @b gián tiếp của @i @b.  "
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1417,7 +1463,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1428,7 +1474,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1439,271 +1485,268 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 msgid "The primary @S (%b) is on the bad @b list.\n"
 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:626
+#: e2fsck/problem.c:667
 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:632
+#: e2fsck/problem.c:673
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Cảnh báo: @S của @g %g (%b) là sai.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:679
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr "Cảnh báo: bản sao các mô tả @g của nhóm %g có một @b sai (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:685
 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:649
+#: e2fsck/problem.c:691
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A %N @b kề nhau trong @g @b %g cho %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
-#, c-format
+#: e2fsck/problem.c:697
+#, no-c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A bộ đệm @b để định vị lại %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:702
 msgid "Relocating @g %g's %s from %b to %c...\n"
-msgstr "Đang định vị lại %s của @g %g từ %b sang %c...\n"
+msgstr "Đang định vị lại %s của @g %g từ %b sang %c\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
-#, c-format
+#: e2fsck/problem.c:708
+#, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
-msgstr "Đang định vị lại %2$s của @g %1$g sang %3$c...\n"
+msgstr "Đang định vị lại %s của @g %g sang %c…\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Cảnh báo: không thể đọc @b %b trên %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:718
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Cảnh báo: không thể ghi @b %b cho %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
 msgstr "@A @B @i (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
 msgstr "@A @B @b (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:734
+#, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A thông tin liên kết icount: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:740
+#, no-c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A mảng @d @d: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:746
+#, no-c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Gặp lỗi khi quét các @i (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Gặp lỗi khi lặp lại trên các @b trong @i %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:757
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr "Gặp lỗi khi cất giữ thông tin đếm @i (@i=%i, đếm=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:762
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr "Gặp lỗi khi cất giữ thông tin @d @b (@i=%i, @b=%b, số=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
-#, c-format
+#: e2fsck/problem.c:769
+#, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Gặp lỗi khi đọc @i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "@i %i đặt cờ ma thuật imagic.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
 msgstr ""
 "Tập tin (@v/ổ cắm/FIFO/liên kết mềm) đặc biệt\n"
 "(@i %i) đặt cờ không thay đổi (immutable) hay\n"
-"chỉ phụ thêm (append-only)."
+"chỉ phụ thêm (append-only).  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
-msgstr "@i (@v/ổ cắm/FIFO) %i có kích cỡ không phải số không."
+msgstr "@i (@v/ổ cắm/FIFO) %i có kích cỡ không phải số không.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
 msgid "@j @i is not in use, but contains data.  "
-msgstr "@i @j không đang được dùng, còn chứa dữ liệu."
+msgstr "@i @j không đang được dùng, còn chứa dữ liệu.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 msgid "@j is not regular file.  "
 msgstr "@j không phải tập tin chuẩn.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:812
+#, no-c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "@i %i đã thuộc về sanh sách @i @o.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:818
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr "Tìm thấy các @i đã thuộc về danh sách đã liên kết thừa bị hỏng."
+msgstr "Tìm thấy các @i đã thuộc về danh sách đã liên kết thừa bị hỏng.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:823
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A cấu trúc refcount (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:828
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Gặp lỗi khi đọc @b @a %b cho @i %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:833
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "@i %i có một @b @a %b.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Gặp lỗi khi đọc @b @a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:843
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "@b @a %b có số đếm tham chiếu %r, @s %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:848
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Gặp lỗi khi ghi @b @a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:853
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "@b @a %b có h_@b > 1.  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
-#, fuzzy
+#: e2fsck/problem.c:858
 msgid "@A @a region allocation structure.  "
-msgstr "@A cấu trúc icount: %m\n"
+msgstr "@A @a cấu trúc phân bổ vùng.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 msgid "@a @b %b is corrupt (allocation collision).  "
-msgstr "@b @a %b bị hỏng (xung đột cấp phát)."
+msgstr "@b @a %b bị hỏng (xung đột cấp phát).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:868
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "@b @a %b bị hỏng (tên @n).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "@b @a %b bị hỏng (giá trị @n).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:879
+#, no-c-format
 msgid "@i %i is too big.  "
 msgstr "@i %i là quá lớn.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B (%b) gây ra @d quá lớn.        "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr "%B (%b) làm cho tập tin quá lớn.     "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
-msgstr "%B (%b) làm cho liên kết mềm quá lớn ."
+msgstr "%B (%b) làm cho liên kết mềm quá lớn.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr "@i %i đặt cờ INDEX_FL trên @f không có hỗ trợ htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "@i %i đặt cờ INDEX_FL nhưng không phải @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:911
+#, no-c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "@h %i có một nút gốc @n.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:916
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "@h %i có một phiên bản băm không được hỗ trợ (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "@h %i dùng cờ nút gốc htree không tương thích.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:927
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "@h %i có độ sâu cây (%N) quá lớn\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1712,55 +1755,55 @@ msgstr ""
 "siêu dữ liệu @f.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Việc tạo (lại) sự thay đổi kích cỡ @i bị lỗi: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "@i %i có một kích cỡ thêm (%IS) @n\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:950
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "@a trong @i %i có một namelen (%N) @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:955
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "@a trong @i %i có một hiệu giá trị (%N) @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:960
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "@a trong @i %i có một giá trị @b (%N) @n (phải là 0)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:965
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "@a trong @i %i có một kích cỡ giá trị (%N) @n\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:970
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "@a trong @i %i có một chuỗi duy nhất (%N) mà @n\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:975
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "@i %i là %It nhưng hình như nó thực sự là thư mục.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
-#, c-format
+#: e2fsck/problem.c:981
+#, no-c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "Gặp lỗi khi đọc qua cây @x trong @i %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1770,92 +1813,91 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
 "@i %i có một phạm vi @n\n"
-"\t(@b hợp lý %c, @b vật lý @n %b, dài %N)\n"
+"\t(@b lô-gíc %c, @b vật lý @n %b, dài %N)\n"
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
 msgstr ""
 "@i %i có một phạm vi @n\n"
-"\t(@b hợp lý %c, @b vật lý %b, dài @n %N)\n"
+"\t(@b lô-gíc %c, @b vật lý %b, dài @n %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr "@i %i đặt cờ EXTENTS_FL trên @f mà không hỗ trợ phạm vi.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-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:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "@i %i thiếu EXTENTS_FL, nhưng theo định dạng phạm vi\n"
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "Liên kết mềm nhanh %i đã đặt EXTENTS_FL.  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
 "@i %i có các phạm vi sai thứ tự\n"
-"\t(@b hợp lý %c, @b vật lý %b, dài %N)\n"
+"\t(@b lô-gíc %c, @b vật lý %b, dài %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1030
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "@i %i có một nút tầm không hợp lệ (blk %b, lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1036
+#, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "Gặp lỗi khi chuyển đổi liên cung con @b @B: %m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
-msgstr "@q @i  không phải tập tin thông thường.  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not regular file.  "
+msgstr "@q @i không phải tập tin thông thường.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
 msgid "@q @i is not in use, but contains data.  "
-msgstr "@q @i đang không được dùng, nhưng chứa dữ liệu."
+msgstr "@q @i đang không được dùng, nhưng chứa dữ liệu.  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 msgid "@q @i is visible to the user.  "
-msgstr "@q @i sẵn dùng."
+msgstr "@q @i sẵn dùng.  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 msgid "The bad @b @i looks @n.  "
 msgstr "The bad @b @i looks @n.  "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1864,42 +1906,41 @@ msgstr ""
 "\t(@n lôgíc @b %c, vật lý @b %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, fuzzy, c-format
+#: e2fsck/problem.c:1067
+#, no-c-format
 msgid "@i %i seems to contain garbage.  "
-msgstr "@i %i là quá lớn.  "
+msgstr "@i %i có lẽ đã chứa rác.  "
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, fuzzy, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
-msgstr "Tổng kiểm Mảng ảnh nút không khớp nhau"
+msgstr "@i %i các kiểm tra qua, nhưng tổng kiểm không khớp @i.  "
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, fuzzy, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
-msgstr "@b @a %b bị hỏng (xung đột cấp phát)."
+msgstr "@i %i @a bị hỏng (xung đột cấp phát).  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
-#, fuzzy
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"@i %i có các phạm vi sai thứ tá»±\n"
-"\t(@b hợp lý %c, @b vật lý %b, dài %N)\n"
+"@i %i các kiá»\83m tra khá»\91i má»\9f rá»\99ng Ä\91ã qua, nhÆ°ng tá»\95ng kiá»\83m không khá»\9bp phạm vi\n"
+"\t(@b lô-gíc %c, @b vật lý %b, dài %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
-msgstr ""
+msgstr "@i %i @a @b %b các kiemr tra đã qua, nhưng tổng kiểm không khớp @b.  "
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1909,7 +1950,7 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1918,38 +1959,37 @@ msgstr ""
 "\t(lô-gíc @b %c, vật lý @b %b, dài %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, fuzzy, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA 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 có dữ liệu chung dòng, nhưng còn @S thiếu tính năng dữ liệu chung dòng INLINE_DATA\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, fuzzy, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
-msgstr "@i %i đặt cờ INDEX_FL trên @f không có hỗ trợ htree.\n"
+msgstr "@i %i có cờ chung dòng INLINE_DATA_FL trên @f không có hỗ trợ dữ liệu chung dòng.\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
-msgstr ""
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+msgstr "@i %i khối %b xung đột với siêu dữ liệu tới hạn, bỏ qua kiểm tra khối.\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "@d @i %i @b %b nên ở tại @b %c.  "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1138
+#, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "@i @d %i có một @x được đánh dấu là chưa khởi tạo tại @biến %c.  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
@@ -1958,101 +1998,118 @@ msgstr ""
 "Sẽ được sửa tại lần 1B.\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, fuzzy, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
-msgstr "@i %i đặt cờ INDEX_FL nhưng không phải @d.\n"
+msgstr "@i %i có cờ INLINE_DATA_FL nhưng @a không tìm thấy.  "
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, fuzzy, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
 msgstr ""
-"Tập tin (@v/ổ cắm/FIFO/liên kết mềm) đặc biệt\n"
-"(@i %i) đặt cờ không thay đổi (immutable) hay\n"
-"chỉ phụ thêm (append-only)."
+"Tập tin đặc biệt (@v/socket/fifo) (@i %i) có đặt cờ mở rộng\n"
+"hay dữ liệu chung dòng.  "
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
-msgstr ""
+msgstr "@i %i có phần đầu @x nhưng cờ dữ liệu chung dòng không được đặt.\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
-msgstr ""
+msgstr "@i %i dường như có dữ liệu chung dòng nhưng cờ @x lại được đặt.\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
-msgstr ""
+msgstr "@i %i dường như có ánh xạ @b nhưng dữ liệu chung dòng và cờ @x được đặt.\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
-msgstr ""
+msgstr "@i %i có dữ liệu chung dòng và cờ @x được đặt nhưng i_block chứa rác.\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
-msgstr ""
+msgstr "Danh sách khối hỏng nói rằng danh sách khối sai @i là sai.  "
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
-#, fuzzy
+#: e2fsck/problem.c:1191
 msgid "@A @x region allocation structure.  "
-msgstr "@A cấu trúc icount: %m\n"
+msgstr "@A @x cấu trúc phân bổ vùng.  "
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
-#, fuzzy
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
-"@i %i có một phạm vi @n\n"
-"\t(@b hợp lý %c, @b vật lý @n %b, dài %N)\n"
+"@i %i có ánh xạ @x trùng lặp\n"
+"\t(@b lô-gíc %c, @n vật lý @b %b, dài %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
 msgid "@A memory for encrypted @d list\n"
-msgstr ""
+msgstr "@A bộ nhớ cho danh sách @d đã mã hóa\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
-msgstr ""
+msgstr "@i %i @x cây nên nông hơn (%b; nên <= %c)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
-msgstr ""
+msgstr "@i %i trên @f bigalloc không thể là một ánh xạ @b.  "
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, fuzzy, c-format
+#: e2fsck/problem.c:1218
+#, no-c-format
 msgid "@i %i has corrupt @x header.  "
-msgstr "@b @a %b bị hỏng (tên @n).  "
+msgstr "@i %i có phần đầu @x bị hỏng.  "
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
+msgstr "Các dấu thời gian trên @i %i vượt quá 2310-04-04 giống như là trước 1970.\n"
+
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "@i %i có @I @a giá trị @i %N.\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "@i %i có @n @a. EA @i %N thiếu cờ EA_INODE.\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
 msgstr ""
+"EA @i %N cho cha @i %i thiếu cờ EA_INODE.\n"
+" "
 
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2060,50 +2117,50 @@ msgid ""
 msgstr ""
 "\n"
 "Đạng chạy một số lần qua thêm để tháo gỡ các @b đã tuyên bố\n"
-"bởi nhiều @i...\n"
+"bởi nhiều @i\n"
 "Lần qua 1B: đang quét lại tìm @b @m.\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
-#, c-format
+#: e2fsck/problem.c:1255
+#, no-c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "@b @m trong @i %i:"
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1271
+#, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Gặp lỗi khi quét các nút thông tin (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A @B @i (@i_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Gặp lỗi khi lặp lại trên các @b trong @i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr "Gặp lỗi khi điều chỉnh số đếm tham chiếu cho @b @a %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1298
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Lần qua 1C: đang quét các thư mục tìm @i có @b @m\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\n"
-msgstr "Lần qua 1D: đang điều h các @b @m\n"
+msgstr "Lần qua 1D: đang điều hòa các @b @m\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2112,18 +2169,18 @@ msgstr ""
 "  có %r @b @m, chia sẻ với %N tập tin:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i #%i, giờ sửa đổi %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
 msgid "\t<@f metadata>\n"
 msgstr "\t<siêu dữ liệu @f>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2133,7 +2190,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2141,347 +2198,345 @@ msgstr ""
 "@b @m đã được gán lại hay nhân bản.\n"
 "\n"
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1344
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Không thể nhân bản tập tin: %m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
-#, fuzzy
+#: e2fsck/problem.c:1350
 msgid "Pass 1E: Optimizing @x trees\n"
-msgstr "Lần qua 3A: đang tối ưu hoá các thư mục\n"
+msgstr "Lần 1E: Đang tối ưu cây @x\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, fuzzy, c-format
+#: e2fsck/problem.c:1356
+#, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
-msgstr "Lỗi tối ưu hoá thư mục %q (%d): %m\n"
+msgstr "Gặp lỗi khi tối ưu hóa cây @x %p (%i): %m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
-#, fuzzy
+#: e2fsck/problem.c:1361
 msgid "Optimizing @x trees: "
-msgstr "Đang tối ưu hoá các thư mục: "
+msgstr "Đang tối ưu hóa cây %x: "
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
-msgstr ""
+msgstr "Lỗi nội bộ: độ sâu cây mở rộng tối đa quá lớn (%b; cần=%c).\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
-msgstr ""
+msgstr "@i %i @x cây (ở mức %b) nên ngắn hơn.  "
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
-msgstr ""
+msgstr "@i %i @x cây (ở mức %b) nên hẹp hơn.  "
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Lần qua 2: đang kiểm tra cấu trúc @d\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1399
+#, no-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"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1404
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E có số hiệu @i @n: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1409
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E có @i @D/chưa dùng %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1414
 msgid "@E @L to '.'  "
 msgstr "@E @L đến “.”  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1419
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E chỉ tới @i (%Di) nằm trong @b sai.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1424
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E @L đến @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1429
 msgid "@E @L to the @r.\n"
 msgstr "@E @L tới @r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E có tên chứa ký tự cấm.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, c-format
+#: e2fsck/problem.c:1440
+#, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Thiếu “.” trong @i @d %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1446
+#, no-c-format
 msgid "Missing '..' in @d @i %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:1345
+#: e2fsck/problem.c:1451
 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"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1456
 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"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "Địa chỉ i_faddr cho nút injode %i (%Q) là %IF, còn nên là số không.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1466
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl @F %If, @s số không.\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl @F %Id, @s số không.\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "i_size_high @F %Id, @s số không.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N, @s số không.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N, @s số không.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "@i %i (%Q) có chế độ @n (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1491
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "@i @d %i, %B, hiệu %N: @d bị hỏng\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "@i @d %i, %B, hiệu %N: tên tập tin quá dài\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "@i @d %i có một %B chưa cấp phát.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-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"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-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"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "@i %i (%Q) là @v ký tự @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "@i %i (%Q) là @v @b @I.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E là @e “.” trùng.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E là @e “..” trùng.\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Lỗi nội bộ: không tìm thấy thông tin thư mục (dir_info) về %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E có rec_len %Dr, @s %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, c-format
+#: e2fsck/problem.c:1550
+#, no-c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A cấu trúc icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Gặp lỗi khi lặp lại trên các @b @d: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Gặp lỗi khi đọc @b @d %b (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Gặp lỗi khi ghi @b @d %b (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A @b @d mới cho @i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Gặp lỗi khi hủy cấp phát @i %i: %m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1584
+#, no-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"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "@i %i (%Q) là một FIFO @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "@i %i (%Q) là một ổ cắm @I.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Đăng đặt kiểu tập tin cho @E thành %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1604
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E có kiểu tập tin không đúng (đã %Dt, @s %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 msgstr "@E đặt kiểu tập tin.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "@E có tên @z.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Liên kết mềm %Q (@i #%i) @n.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1624
 msgid "@a @b @F @n (%If).\n"
 msgstr "@a @b @F @n (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1629
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr "@f chứa các tập tin lớn còn thiếu cờ LARGE_FILE trong @S.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1634
 msgid "@p @h %d: %B not referenced\n"
 msgstr "@p @h %d: %B không được tham chiếu\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "@p @h %d: %B được tham chiếu hai lần\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1644
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "@p @h %d: %B có chuỗi duy nhất tối thiểu sai\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1649
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "@p @h %d: %B có chuỗi duy nhất tối đa sai\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
 msgstr "@h @n %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p @h %d (%q): số @b sai %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p @h %d: nút gốc @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1674
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "@p @h %d: %B có giới hạn @n (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1679
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "@p @h %d: %B có số đếm @n (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1684
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "@p @h %d: %B có một bảng chuỗi duy nhất không đặt thứ tự\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1689
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "@p @h %d: %B có chiều sâu @n (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
 msgstr "Tìm thấy @E trùng.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2493,7 +2548,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2504,158 +2559,156 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi @F %N, @s số không.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "Gặp @b bất thường trong @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:1603
+#: e2fsck/problem.c:1719
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr "@E tham chiếu đến @i %Di trong @g %g ở vị trí đặt _INODE_UNINIT.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1724
 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:1613
+#: e2fsck/problem.c:1729
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "i_file_acl_hi @F %N, @s số không.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, fuzzy, c-format
+#: e2fsck/problem.c:1735
+#, no-c-format
 msgid "@p @h %d: root node fails checksum.\n"
-msgstr "@p @h %d: nút gốc @n\n"
+msgstr "@p @h %d: nút gốc có tổng kiểm sai.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, fuzzy, c-format
+#: e2fsck/problem.c:1741
+#, no-c-format
 msgid "@p @h %d: internal node fails checksum.\n"
-msgstr "@p @h %d: nút gốc @n\n"
+msgstr "@p @h %d: nút nội tại có tổng kiểm sai.\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
-#, fuzzy
+#: e2fsck/problem.c:1746
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
-msgstr "@i @d %i, %B, hiệu %N: @d bị hỏng\n"
+msgstr "@i @d %i, %B, khoảng bù %N: @d không có tổng kiểm\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
-msgstr ""
+msgstr "@d @i %i, %B: @d qua kiểm tra nhưng lại sai tổng kiểm.\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
-msgstr ""
+msgstr "Chung dòng @d @i %i cỡ (%N) phải là bội của 4.\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
-msgstr ""
+msgstr "Gặp lỗi khi sửa cỡ của chung dòng @d @i %i.\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
 msgid "Encrypted @E is too short.\n"
-msgstr ""
+msgstr "@E đã mã hóa là quá ngắn.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Lần 3: Đang kiểm tra khả năng kết nối của @d\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
 msgstr "Chưa cấp phát @r.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "Không có chỗ còn trống trong @d @l.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1790
+#, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "@i @d %i không được kết nối (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
-msgstr "/@l không tìm thấy."
+msgstr "/@l không tìm thấy. "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %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:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "Có /@l sai hay không tồn tại nên không thể kết nối lại.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Không thể mở rộng /@l: %m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Không thể kết nối lại %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Gặp lỗi khi cố tìm /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@b: %m trong khi cố tạo @d /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@i: %m trong khi cố tạo @d /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_@b: %m trong khi đang tạo @b @d mới\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_@b: %m trong khi ghi @b @d cho /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Gặp lỗi khi điều chỉnh số đếm @i trên @i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2665,8 +2718,8 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
@@ -2675,104 +2728,109 @@ msgstr ""
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Gặp lỗi khi tạo @d gốc (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Gặp lỗi khi tạo @d /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "@r không phải @d nên hủy bỏ.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "Không thể tiếp tục khi không có @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l không phải @d (ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
 msgid "/@l has inline data\n"
-msgstr ""
+msgstr "/@l có dữ liệu chung dòng\n"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
 msgstr ""
+"Không thể phân bổ không gian cho /@l.\n"
+"Đặt các tập tin mất trong thư mục gốc để thay thế"
 
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
 "\n"
 msgstr ""
+"Không đủ chỗ để khôi phục các tập tin đã mất!\n"
+"Xóa bớt dữ liệu ra khỏi và chạy lại e2fsck.\n"
+"\n"
+"\n"
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
-#, fuzzy
+#: e2fsck/problem.c:1924
 msgid "/@l is encrypted\n"
-msgstr "Ảnh (%s) đã được mã hóa\n"
+msgstr "/@l đã được mã hóa\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 msgid "Pass 3A: Optimizing directories\n"
-msgstr "Lần qua 3A: đang tối ưu h các thư mục\n"
+msgstr "Lần qua 3A: đang tối ưu hóa các thư mục\n"
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Lỗi tạo bộ lặp lại thư mục tới băm (dirs_to_hash): %m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 msgid "Failed to optimize directory %q (%d): %m\n"
-msgstr "Lỗi tối ưu h thư mục %q (%d): %m\n"
+msgstr "Lỗi tối ưu hóa thư mục %q (%d): %m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
-msgstr "Đang tối ưu h các thư mục: "
+msgstr "Đang tối ưu hóa các thư mục: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Lần qua 4: đang kiểm tra các số đếm tham chiếu\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
 msgstr "@i @u @z %i.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
 msgstr "@i @u %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "@i %i có số đếm tham chiếu %Il, @s %N.  "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2782,148 +2840,153 @@ msgstr ""
 "\tHOẶC NGƯỜI NÀO ĐANG KIỂM TRA MỘT HỆ THỐNG TẬP TIN ĐàLẮP (ĐỘNG).\n"
 "@i_link_info[%i] là %N, @i.i_links_count là %Il: @s trùng.\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "@i @i %i có số đếm tham chiếu %N, @s %n.  "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr "@d vượt quá liên kết tối đa, nhưng không có tính năng DIR_NLINK trong @S.\n"
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Lần 5: đang kiểm tra thông tin tóm tắt nhóm\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
-msgstr "Chưa đặt độ đệm tại kết thúc của @B @I."
+msgstr "Chưa đặt độ đệm tại kết thúc của @B @I.  "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
-msgstr "Chưa đặt độ đệm tại kết thúc của @B @b."
+msgstr "Chưa đặt độ đệm tại kết thúc của @B @b. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "Khác biệt @B @b: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "Khác biệt @B @i: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Số đếm các @i rảnh không đúng cho @g #%g (%i, đã đếm=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:2068
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Số đếm các thư mục không đúng cho @g #%g (%i, đã đếm=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Số đếm các @i rảnh không đúng (%i, đã đếm=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2078
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Số đếm các @b rảnh không đúng cho @g #%g (%b, đã đếm=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 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:1938
-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:2088
+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:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Lỗi nội bộ: đang làm quấy quá kết thúc của mảng ảnh (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Gặp lỗi khi sao chép vào @B @i thay thế: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Gặp lỗi khi sao chép vào @B @b thay thế: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr "Các @b của @g %g đang được dùng, còn @g có nhãn là BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr "Các @i của @g %g đang được dùng, còn @g có nhãn là INODE_UNINIT\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
-msgstr ""
+msgstr "@g %g @i @B không khớp tổng kiểm.\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
-msgstr ""
+msgstr "@g %g @b @B không khớp tổng kiểm.\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 msgid "Recreate @j"
 msgstr "Tạo lại @j"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr "Cập nhật thông tin hạn ngạch cho kiểu hạn ngạch %N"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2172
+#, no-c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "Gặp lỗi khi đặt thông tin tổng kiểm @b @g: %m\n"
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2178
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "Gặp lỗi khi ghi thông tin hệ thống: %m\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr "Gặp lỗi khi đẩy dữ liệu sau lệnh ghi lên thiết bị lưu trữ: %m\n"
 
-#: e2fsck/problem.c:2026
-#, fuzzy
+#: e2fsck/problem.c:2189
 msgid "Error writing quota info for quota type %N: %m\n"
-msgstr "Cập nhật thông tin hạn ngạch cho kiểu hạn ngạch %N"
+msgstr "Lỗi khi ghi thông tin hạn ngạch cho kiểu %N: %m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Mã lỗi chưa quản lý (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "BỊ BỎ QUA"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
-msgstr ""
+msgstr "trong move_quota_inode"
 
 #: e2fsck/scantest.c:79
 #, c-format
@@ -2943,46 +3006,44 @@ msgstr "trong khi khởi chạy tiến trình quét nút thông tin"
 msgid "while doing inode scan"
 msgstr "trong khi chạy tiến trình quét nút thông tin"
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, 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"
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "trong khi gọi hàm lặp lại khối “ext2fs_block_iterate” cho nút thông tin %u"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, 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"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "trong khi gọi hàm “ext2fs_adjust_ea_refcount” cho nút thông tin %u"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "Đang cắt ngắn"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
-msgstr "Đang x sạch"
+msgstr "Đang xóa sạch"
 
-#: e2fsck/unix.c:77
-#, fuzzy, c-format
+#: e2fsck/unix.c:78
+#, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] [-z undo_file] device\n"
 msgstr ""
-"Cách dùng: %s [-panyrcdfvtDFV] [-b siêu_khối] [-B cỡ_khối]\n"
+"Cách dùng: %s [-panyrcdfktvDFV] [-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"
+"\t\t[-E tùy_chọn_đã_mở_rộng] [-z tập_tin_undo] thiết_bị\n"
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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"
@@ -2991,11 +3052,9 @@ msgstr ""
 " -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"
 " -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:88
-#, fuzzy
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -3011,13 +3070,14 @@ msgstr ""
 " -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"
+" -z undo_file         Tạo một tập tin undo\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, 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:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3029,46 +3089,46 @@ msgstr[0] ""
 "\n"
 "%12u inode đã được dùng (%2.2f%%, vượt quá %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 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 liền kề nhau (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:172
 #, c-format
 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:174
+#: e2fsck/unix.c:177
 #, 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"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr "             Đồ thị độ sâu: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 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:195
+#: e2fsck/unix.c:198
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%12u khối hỏng\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:200
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] "%12u tập tin quá lớn\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -3080,87 +3140,87 @@ msgstr[0] ""
 "\n"
 "%12u tập tin thường\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u thư mục\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 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:206
+#: e2fsck/unix.c:209
 #, c-format
 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:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u tập tin fifo\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u liên kết\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u liên kết mềm"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%u liên kết mềm nhanh)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u socket\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u tập tin\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "trong khi dò tìm xem %s đã gắn kết chưa."
 
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Cảnh báo!  %s đã được gắn.\n"
 
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "Cảnh báo!  %s đang được dùng.\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s đã gắn kết.\n"
 
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s đang được dùng.\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -3168,7 +3228,7 @@ msgstr ""
 "Không thể tiếp tục nên hủy bỏ.\n"
 "\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3182,82 +3242,105 @@ msgstr ""
 "đâ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:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "Bạn thực sự muốn tiếp tục"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "kiểm tra bị hủy bỏ.\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr " chứa hệ thống tập tin có lỗi"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " chưa tháo gắn kết sạch"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 msgid " primary superblock features different from backup"
 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:379
+#: e2fsck/unix.c:383
 #, 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:386
+#: e2fsck/unix.c:390
 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"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:396
 #, 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:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr "bỏ qua kiểm tra khoảng thời gian, đặt broken_system_clock\n"
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ", kiểm tra bị ép buộc.\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, 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:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
 msgstr " (kiểm tra bị hoãn; chạy bằng pin)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr " (kiểm tra sau lần gắn kết kế tiếp)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (kiểm tra sau %ld lần gắn kết)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "LỖI: không thể mở “/dev/null” (%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "Phiên bản EA không hợp lệ.\n"
 
-#: e2fsck/unix.c:692
-#, fuzzy
+#: e2fsck/unix.c:702
 msgid "Invalid readahead buffer size.\n"
-msgstr "Tham số thay đổi kích cỡ không hợp lệ: %s\n"
+msgstr "Kích cỡ bộ đệm readahead không hợp lệ.\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Tùy chọn đã mở rộng lạ: %s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"Các tùy chọn mở rộng được ngăn cách nhau bằng dấu phẩy, và có thể chấp nhận\n"
+"đối số được đặt với dấu bằng “=”. Các tùy chọn mở rộng hợp lệ là:\n"
+"\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr "\tea_ver=<ea_version (1 hoặc 2)>\n"
+
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "\treadahead_kb=<cỡ bộ đệm>\n"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3266,57 +3349,55 @@ 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:825
+#: e2fsck/unix.c:863
 #, 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:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
-msgstr "Mô tả tập tin thông tin h chỉnh không hợp lệ"
+msgstr "Mô tả tập tin thông tin hòa chỉnh không hợp lệ"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Có thể chỉ ra một trong những tùy chọn -p/-a, -n và -y."
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:903
 #, 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"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Không thể phân giải “%s”"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 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."
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 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."
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 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."
 
-#: e2fsck/unix.c:986
-#, fuzzy
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only 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 “-D” và “-E” không tương thích với nhau."
 
-#: e2fsck/unix.c:992
-#, fuzzy
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only 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 -E bmap2extent và fixes_only không tương thích với nhau."
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 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"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3325,7 +3406,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG “%s” không phải số nguyên\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3336,37 +3417,32 @@ msgstr ""
 "Đối số không thuộc số không hợp lệ đối với -%c (“%s”)\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, 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:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr "trong khi kiểm tra khối MMP"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\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 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 %s”\n"
 
-#: e2fsck/unix.c:1232
-#, fuzzy
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
-msgstr "trong khi đọc khối MMP."
+msgstr "trong khi đọc khối MMP"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3377,57 +3453,57 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
-msgstr "trong khi cố x %s"
+msgstr "trong khi cố xóa %s"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "trong khi cố cài đặt tập tin undo\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 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:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "trong khi cố khởi tạo chương trình"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tDùng %s, %s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr "cần thiết bị cuối để sửa chữa theo kiểu tương tác"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
-msgstr "%s: %s đang cố sao lưu dự phòng các khối dự trữ...\n"
+msgstr "%s: %s đang cố sao lưu dự phòng các khối dự trữ\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr "Siêu khối không hợp lệ,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
-msgstr "Có vẻ là các mô tả nhóm sai..."
+msgstr "Có vẻ là các mô tả nhóm sai"
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, 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:1482
+#: e2fsck/unix.c:1546
 #, 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:1511
+#: e2fsck/unix.c:1575
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3437,31 +3513,28 @@ msgstr ""
 "(hoặc siêu khối hệ thống tập tin bị hỏng).\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1582
 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:1520
+#: e2fsck/unix.c:1584
 #, 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 có quyền siêu quản "
-"trị\n"
+msgstr "Bạn phải có quyền truy cập %s vào hệ thống tập tin, hoặc có quyền siêu quản trị\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1590
 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:1528
+#: e2fsck/unix.c:1592
 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:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr "Có thể là thiết bị không tồn tại?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3469,98 +3542,116 @@ msgstr ""
 "Đĩ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:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr "%s: cố gắng để tải siêu khối mặc dù lỗi...\n"
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr "Lấy phiên bản e2fsck mới hơn!"
 
-#: e2fsck/unix.c:1647
-#, fuzzy, c-format
+#: e2fsck/unix.c:1749
+#, c-format
 msgid "while checking journal for %s"
-msgstr "trong khi kiểm tra nhật ký ext3 tìm %s"
+msgstr "trong khi kiểm tra nhật ký cho %s"
 
-#: e2fsck/unix.c:1650
-#, fuzzy
+#: e2fsck/unix.c:1752
 msgid "Cannot proceed with file system check"
-msgstr "Không thể tiếp tục khi không có @r.\n"
+msgstr "Không thể xử lý với kiểm tra hệ thống tập tin"
 
-#: e2fsck/unix.c:1661
-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:1763
+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:1673
+#: e2fsck/unix.c:1775
 #, 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:1679
-#, fuzzy, c-format
+#: e2fsck/unix.c:1781
+#, c-format
 msgid "Journal checksum error found in %s\n"
-msgstr "Không tìm thấy siêu khối nhật ký !\n"
+msgstr "Tìm thấy lỗi tổng kiểm nhật ký trong %s\n"
 
-#: e2fsck/unix.c:1683
-#, fuzzy, c-format
+#: e2fsck/unix.c:1785
+#, c-format
 msgid "Journal corrupted in %s\n"
-msgstr "Nhật ký đã gỡ bỏ\n"
+msgstr "Nhật ký bị hỏng ở %s\n"
 
-#: e2fsck/unix.c:1687
-#, fuzzy, c-format
+#: e2fsck/unix.c:1789
+#, c-format
 msgid "while recovering journal of %s"
-msgstr "trong khi phục hồi nhật ký ext3 của %s"
+msgstr "trong khi phục hồi nhật ký của %s"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s có tính năng không được hỗ trợ:"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1826
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "%s có tính năng không được hỗ trợ: %0x\n"
+
+#: e2fsck/unix.c:1876
 #, 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:1771
+#: e2fsck/unix.c:1879
 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 chúng tôi sẽ cố thử...\n"
+msgstr "Đây không phải báo trước điềm hay, nhưng chúng tôi sẽ cố thử\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Đang tạo nhật ký (%d khối): "
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr " Xong.\n"
 
-#: e2fsck/unix.c:1823
-#, fuzzy
+#: e2fsck/unix.c:1931
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
 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"
+"*** nhật ký đã được tạo lại ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "bị hủy bỏ"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck bị hủy bỏ.\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
-msgstr "Đang khởi chạy lại hoàn toàn e2fsck...\n"
+msgstr "Đang khởi chạy lại hoàn toàn e2fsck\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "trong khi đặt lại ngữ cảnh"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s: ***** CÁC LỖI CỦA HỆ THỐNG TẬP TIN ĐàĐƯỢC SỬA ĐỔI *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s: Hệ thống tập tin bị sửa đổi.\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3569,12 +3660,12 @@ msgstr ""
 "\n"
 "%s: ***** HỆ THỐNG TẬP TIN BỊ SỬA ĐỔI *****\n"
 
-#: e2fsck/unix.c:1910
-#, fuzzy, c-format
+#: e2fsck/unix.c:2040
+#, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
-msgstr "%s: ***** HÃY KHỞI ĐỘNG LẠI LINUX *****\n"
+msgstr "%s: ***** KHỞI ĐỘNG LẠI HỆ THỐNG *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3585,51 +3676,51 @@ msgstr ""
 "%s: ********** CẢNH BÁO: Hệ thống tập tin vẫn còn có lỗi **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "cCyY"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "kKnN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
-msgstr ""
+msgstr "tTaA"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
-msgstr ""
+msgstr " (“a” bật “yes” cho tất cả) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<c>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<k>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (c/k)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "đã hủy!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
-msgstr ""
+msgstr "đồng ý với tất cả\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "có\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "không\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3638,7 +3729,7 @@ msgstr ""
 "%s? không\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3647,38 +3738,38 @@ msgstr ""
 "%s? có\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "có"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "không"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: khối mảng ảnh cấm cho %s"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "đang đọc mảng ảnh kiểu cả hai nút thông tin và khối"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "trong khi cố đọc mảng ảnh cho %s"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "đang ghi các mảng ảnh kiểu khối và nút thông tin"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "trong khi ghi lại các mảng ảnh kiểu khối và nút thông tin cho %s"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3691,64 +3782,58 @@ msgstr ""
 "%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"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "Vùng nhớ được dùng: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "Vùng nhớ được dùng: %lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "thời gian: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "thời gian đã qua: %6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "trong khi đọc nút thông tin %lu trong %s"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "trong khi ghi nút thông tin %lu trong %s"
 
-#: e2fsck/util.c:765
-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"
+#: e2fsck/util.c:792
+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:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "hoàn tất                                             \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, 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"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 ""
-"Cách dùng: %s [-b cỡ_khối] [-i tập_tin_đầu_vào] [-o tập_tin_đầu_ra] [-"
-"svwnf]\n"
+"Cách dùng: %s [-b cỡ_khối] [-i tập_tin_đầu_vào] [-o tập_tin_đầu_ra] [-svwnfBX]\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"
+"       [-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"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3757,80 +3842,80 @@ msgstr ""
 "%s: hai tùy chọn “-n” và “-w” loại từ lẫn nhau.\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "%6.2f%% hoàn tất, %s đã trôi qua. (%d/%d/%d lỗi)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "Đang thử ra bằng mẫu ngẫu nhiên: "
 
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "Đang thử ra bằng mẫu 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "trong khi di chuyển vị trí"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Giá trị lạ (%ld) trong việc đọc “do_read”\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
-msgstr "trong khi đồng bộ h thiết bị “ext2fs_sync_device”"
+msgstr "trong khi đồng bộ hóa thiết bị “ext2fs_sync_device”"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "trong khi bắt đầu lặp lại danh sách các khối sai"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "trong khi cấp phát bộ đệm"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Đang kiểm tra khối trong phạm vi %lu đến %lu\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Đang kiểm tra tìm khối sai trong chế độ chỉ đọc\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Đang kiểm tra tìm khối sai (kiểm tra ở chế độ chỉ đọc): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "Quá nhiều khối sai nên hủy bỏ phép thử\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Đang kiểm tra tìm khối sai trong chế độ đọc-ghi\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Từ khối %lu đến %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "Đang đọc và so sánh: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Đang kiểm tra tìm khối sai trong chế độ đọc-ghi không hủy\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Đang kiểm tra tìm khối sai (thử ở chế độ đọc-ghi không phá hủy)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3838,59 +3923,59 @@ msgstr ""
 "\n"
 "Mới bắt tín hiệu ngắt nên làm sạch\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "trong khi thử ra ghi dữ liệu, khối %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s đã được gắn kết; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 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"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
-msgstr "Không an toàn khi chạy badblocks.\n"
+msgstr "không an toàn khi chạy badblocks.\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "Có vẻ là %s đang được hệ thống dùng; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "vẫn ép buộc badblocks (khối sai).\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "%s không hợp lệ — %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
-msgstr ""
+msgstr "Số lượng khối sai tối đa %u quá lớn - tối đa là %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "không thể cấp phát bộ nhớ cho mẫu thử (test_pattern) — %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "Trong chế độ chỉ đọc, có thể chỉ ra tối đa một mẫu thử (test_pattern)"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Không cho phép mẫu thử (test_pattern) ngẫu nhiên trong chế độ chỉ đọc"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3898,275 +3983,268 @@ msgstr ""
 "Không thể xác định kích cỡ của thiết bị;\n"
 "bạn cần phải tự chỉ định kích cỡ đó.\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "trong khi thử dò tìm kích cỡ của thiết bị"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "khối cuối"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "khối đầu"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "khối đầu không hợp lệ (%llu): phải nhỏ hơn %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "khối cuối không hợp lệ (%llu): phải là giá trị 32 bít"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "trong khi tạo danh sách các khối hỏng trong bộ nhớ"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "tập tin đầu vào - sai định dạng"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "trong khi thêm vào danh sách các khối hỏng trong bộ nhớ"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "Qua xong, tìm thấy %u khối sai. (%d/%d/%d errors)\n"
 
 #: misc/chattr.c:89
-#, fuzzy, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
-msgstr "Cách dùng: %s [-RVf] [-+=aAcCdDeijsStTu] [-v phiên_bản] tập_tin...\n"
+#, c-format
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "Cách dùng: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v phiên_bản] tập_tin…\n"
 
-#: misc/chattr.c:159
-#, fuzzy, c-format
+#: misc/chattr.c:160
+#, c-format
 msgid "bad project - %s\n"
-msgstr "phiên bản sai — %s\n"
+msgstr "dự án sai — %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "phiên bản sai — %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "trong khi cố lấy các thông tin về %s"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "trong khi đọc các cờ trên %s"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Các cờ của %s đã đặt thành "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "trong khi đặt các cờ trên %s"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, 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:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "trong khi đặt phiên bản trên %s"
 
-#: misc/chattr.c:271
-#, fuzzy, c-format
+#: misc/chattr.c:272
+#, c-format
 msgid "Project of %s set as %lu\n"
-msgstr "Phiên bản %s được đặt thành %lu\n"
+msgstr "Dự án của %s được đặt thành %lu\n"
 
-#: misc/chattr.c:275
-#, fuzzy, c-format
+#: misc/chattr.c:276
+#, c-format
 msgid "while setting project on %s"
-msgstr "trong khi đặt phiên bản trên %s"
+msgstr "trong khi cài đặt dự án trên %s"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 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:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "= không tương thích với “-” và “+”\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "Phải dùng “-v”, “=”, “-” hay “+”\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
-#, fuzzy, c-format
+#: misc/create_inode.c:80 misc/create_inode.c:119
+#, c-format
 msgid "while reading inode %u"
-msgstr "trong khi đọc nút thông tin %lu trong %s"
+msgstr "trong khi đọc nút thông tin %u"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
-#, fuzzy
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 msgid "while expanding directory"
-msgstr "trong khi mở rộng /mất+tìm"
+msgstr "trong khi mở rộng thư mục"
 
-#: misc/create_inode.c:87
-#, fuzzy, c-format
+#: misc/create_inode.c:97
+#, c-format
 msgid "while linking \"%s\""
-msgstr "trong khi mở %s"
+msgstr "trong khi liên kết \"%s\""
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
-#, fuzzy, c-format
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
+#, c-format
 msgid "while writing inode %u"
-msgstr "trong khi ghi nút thông tin %lu trong %s"
+msgstr "trong khi ghi nút thông tin %u"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
-#, fuzzy, c-format
+#: misc/create_inode.c:152 misc/create_inode.c:176
+#, c-format
 msgid "while listing attributes of \"%s\""
-msgstr "trong khi cố cắt ngắn %s"
+msgstr "trong khi liệt kê các thuộc tính của \"%s\""
 
-#: misc/create_inode.c:150
-#, fuzzy, c-format
+#: misc/create_inode.c:163
+#, c-format
 msgid "while opening inode %u"
-msgstr "trong khi mở việc quét nút thông tin"
+msgstr "trong khi mở nút thông tin %u"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
-#, fuzzy
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
-msgstr "trong khi cấp phát bộ đệm"
+msgstr "trong khi cấp phát bộ nhớ"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
-#, fuzzy, c-format
+#: misc/create_inode.c:189 misc/create_inode.c:205
+#, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
-msgstr "trong khi đọc các cờ trên %s"
+msgstr "trong khi đọc thuộc tính \"%s\" của \"%s\""
 
-#: misc/create_inode.c:201
-#, fuzzy, c-format
+#: misc/create_inode.c:214
+#, c-format
 msgid "while writing attribute \"%s\" to inode %u"
-msgstr "trong khi ghi nút thông tin %lu trong %s"
+msgstr "trong khi ghi thuộc tính \"%s\" của nút thông tin %u"
 
-#: misc/create_inode.c:211
-#, fuzzy, c-format
+#: misc/create_inode.c:224
+#, c-format
 msgid "while closing inode %u"
-msgstr "trong khi chạy tiến trình quét nút thông tin"
+msgstr "trong khi đóng nút thông tin %u"
 
-#: misc/create_inode.c:259
-#, fuzzy, c-format
+#: misc/create_inode.c:275
+#, c-format
 msgid "while allocating inode \"%s\""
-msgstr "trong khi cấp phát bộ đệm"
+msgstr "trong khi cấp phát nút thông tin \"%s\""
 
-#: misc/create_inode.c:278
-#, fuzzy, c-format
+#: misc/create_inode.c:294
+#, c-format
 msgid "while creating inode \"%s\""
-msgstr "trong khi đọc nút thông tin %lu trong %s"
+msgstr "trong khi tạo nút thông tin \"%s\""
 
-#: misc/create_inode.c:343
-#, fuzzy, c-format
+#: misc/create_inode.c:360
+#, c-format
 msgid "while creating symlink \"%s\""
-msgstr "trong khi đọc các cờ trên %s"
+msgstr "trong khi tạo liên kết mềm \"%s\""
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
-#, fuzzy, c-format
+#: misc/create_inode.c:378 misc/create_inode.c:963
+#, c-format
 msgid "while looking up \"%s\""
-msgstr "trong khi tra tìm /mất+tìm"
+msgstr "trong khi tra tìm \"%s\""
 
-#: misc/create_inode.c:381
-#, fuzzy, c-format
+#: misc/create_inode.c:398
+#, c-format
 msgid "while creating directory \"%s\""
-msgstr "trong khi tạo thư mục gốc"
+msgstr "trong khi tạo thư mục \"%s\""
 
-#: misc/create_inode.c:609
-#, fuzzy, c-format
+#: misc/create_inode.c:627
+#, c-format
 msgid "while opening \"%s\" to copy"
-msgstr "trong khi mở %s"
+msgstr "trong khi mở \"%s\" để sao chép"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
-msgstr ""
+msgstr "trong khi đổi thư mục làm việc sang \"%s\""
 
-#: misc/create_inode.c:709
-#, fuzzy, c-format
-msgid "while opening directory \"%s\""
-msgstr "trong khi mở %s"
+#: misc/create_inode.c:815
+#, c-format
+msgid "while scanning directory \"%s\""
+msgstr "trong khi đang quét thư mục \"%s\""
 
-#: misc/create_inode.c:719
-#, fuzzy, c-format
+#: misc/create_inode.c:825
+#, c-format
 msgid "while lstat \"%s\""
-msgstr "trong khi cố lấy các thông tin về %s"
+msgstr "trong khi lstat \"%s\""
 
-#: misc/create_inode.c:752
-#, fuzzy, c-format
+#: misc/create_inode.c:875
+#, c-format
 msgid "while creating special file \"%s\""
-msgstr "trong khi đọc nút thông tin %lu trong %s"
+msgstr "trong khi tạo tập tin đặc biệt \"%s\""
 
-#: misc/create_inode.c:761
-#, fuzzy
+#: misc/create_inode.c:884
 msgid "malloc failed"
-msgstr "Lỗi cấp phát vùng nhớ"
+msgstr "malloc gặp lỗi"
 
-#: misc/create_inode.c:769
-#, fuzzy, c-format
+#: misc/create_inode.c:892
+#, c-format
 msgid "while trying to read link \"%s\""
-msgstr "trong khi cố thay đổi kích cỡ %s"
+msgstr "trong khi cố đọc liên kết \"%s\""
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
-msgstr ""
+msgstr "liên kết mềm làm gia tăng kích cỡ giữa lstat() và readlink()"
 
-#: misc/create_inode.c:787
-#, fuzzy, c-format
+#: misc/create_inode.c:910
+#, c-format
 msgid "while writing symlink\"%s\""
-msgstr "trong khi ghi nút thông tin %lu trong %s"
+msgstr "trong khi ghi liên kết mềm \"%s\""
 
-#: misc/create_inode.c:797
-#, fuzzy, c-format
+#: misc/create_inode.c:921
+#, c-format
 msgid "while writing file \"%s\""
-msgstr "trong khi ghi nút thông tin %lu trong %s"
+msgstr "trong khi ghi tập tin \"%s\""
 
-#: misc/create_inode.c:810
-#, fuzzy, c-format
+#: misc/create_inode.c:934
+#, c-format
 msgid "while making dir \"%s\""
-msgstr "trong khi mở %s"
+msgstr "trong khi tạo thư mục \"%s\""
 
-#: misc/create_inode.c:827
-#, fuzzy
+#: misc/create_inode.c:952
 msgid "while changing directory"
-msgstr "đang đọc khối thư mục"
+msgstr "trong khi thay đỏi thư mục"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:958
 #, c-format
 msgid "ignoring entry \"%s\""
-msgstr ""
+msgstr "đang bỏ qua mục \"%s\""
 
-#: misc/create_inode.c:846
-#, fuzzy, c-format
+#: misc/create_inode.c:971
+#, c-format
 msgid "while setting inode for \"%s\""
-msgstr "trong khi đặt phiên bản trên %s"
+msgstr "trong khi cài đặt nút cho \"%s\""
 
-#: misc/create_inode.c:853
-#, fuzzy, c-format
+#: misc/create_inode.c:978
+#, c-format
 msgid "while setting xattrs for \"%s\""
-msgstr "trong khi đặt các cờ trên %s"
+msgstr "trong khi cài đặt xattrs cho \"%s\""
 
-#: misc/create_inode.c:871
-#, fuzzy
+#: misc/create_inode.c:1004
 msgid "while saving inode data"
-msgstr "trong khi khởi chạy tiến trình quét nút thông tin"
+msgstr "trong khi ghi dữ liệu nút"
 
 #: misc/dumpe2fs.c:56
-#, fuzzy, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Cách dùng: %s [-bfhixV] [-o siêu_khối=<số>] [-o cỡ_khối=<số>] thiết_bị\n"
+#, c-format
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "Cách dùng: %s [-bfghimxV] [-o superblock=<số>] [-o blocksize=<số>] thiết_bị\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -4182,9 +4260,9 @@ msgid "Group %lu: (Blocks "
 msgstr "Nhóm %lu: (Khối "
 
 #: misc/dumpe2fs.c:226
-#, fuzzy, c-format
+#, c-format
 msgid " csum 0x%04x"
-msgstr "  Tổng kiểm 0x%04x"
+msgstr " csum 0x%04x"
 
 #: misc/dumpe2fs.c:228
 #, c-format
@@ -4225,24 +4303,25 @@ msgid "  Block bitmap at "
 msgstr " Mảng ảnh khối tại "
 
 #: misc/dumpe2fs.c:260 misc/dumpe2fs.c:271
-#, fuzzy, c-format
+#, c-format
 msgid ", csum 0x%08x"
-msgstr "  Tổng kiểm 0x%04x"
+msgstr ", csum 0x%08x"
 
 #: misc/dumpe2fs.c:263
 msgid ","
-msgstr ""
+msgstr ","
 
 #: misc/dumpe2fs.c:265
 msgid ""
 "\n"
 " "
 msgstr ""
+"\n"
+" "
 
 #: misc/dumpe2fs.c:266
-#, fuzzy
 msgid " Inode bitmap at "
-msgstr ", Mảng ảnh nút thông tin tại "
+msgstr " Mảng ảnh nút thông tin tại "
 
 #: misc/dumpe2fs.c:273
 msgid ""
@@ -4283,104 +4362,54 @@ msgstr "trong khi in ra danh sách các khối sai"
 msgid "Bad blocks: %u"
 msgstr "Khối sai: %u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "trong khi đọc nút thông tin nhật ký"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "trong khi mở nút thông tin nhật ký"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "trong khi đọc siêu khối nhật ký"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "Số ma thuật thấy siêu khối nhật ký không hợp lệ!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "Tính năng nhật ký:       "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "Kích cỡ nhật ký:          "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"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"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "Lỗi Journal:              %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "trong khi đọc siêu khối nhật ký"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Không tìm thấy các số ma thuật siêu khối nhật ký"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\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:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "gặp lỗi khi cấp phát bộ đệm MMP\n"
 
-#: misc/dumpe2fs.c:514
+#: misc/dumpe2fs.c:479
 #, c-format
-msgid "Journal users:            %s\n"
-msgstr "Người dùng nhật ký:       %s\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "đang đọc MMP khối %llu từ ' %s '\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 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"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Tham số siêu khối không hợp lệ: %s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Tham số kích cỡ khối không hợp lệ: %s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4403,232 +4432,221 @@ msgstr ""
 "\tsuperblock=<số thứ tự siêu khối>\n"
 "\tblocksize=<kích cỡ khối>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tDùng %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Không tìm thấy siêu khối hệ thống tập tin hợp lệ.\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
-msgstr ""
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s: Tính năng MMP không được bật.\n"
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:747
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "trong khi cố gắng để đọc ảnh bitmap '%s'\n"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"*** Hãy chạy e2fsck NGAY!\n"
 "\n"
-"%s: %s: gặp lỗi khi đọc mảng ảnh: %s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
-msgstr "Cách dùng: %s [ -r|Q ] [ -fr ] thiết_bị tập_tin_ảnh\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
+msgstr "Cách dùng: %s [ -r|Q ] [ -f ] [ -b siêu_khối ] [ -B siêu_khối][ -fr ] thiết_bị tập_tin_ảnh\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "           %s -I thiết_bị tập_tin_ảnh\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
-msgstr ""
-"           %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+msgstr "           %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr "trong khi cấp phát bộ đệm"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "Đang ghi khối %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr "gặp lỗi khi ghi khối %llu"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr "có lỗi trong generic_write()"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "Lỗi: kích thước phần đầu lớn hơn wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr "Không thể cấp phát bộ đệm phần đầu\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "trong khi ghi siêu khối"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "trong khi ghi bảng nút thông tin"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "trong khi ghi mảng ảnh khối"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "trong khi ghi mảng ảnh nút thông tin"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "Hỏng khối thư mục %llu: rec_len sai (%d)\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "Hỏng khối thư mục %llu: name_len sai (%d)\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu khối (%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
-msgstr "Đang chép"
+msgstr "Đang chép "
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
-msgstr ""
-"Dừng lại sẽ làm hỏng hệ thống tập tin, ngắt lần nữa nếu bạn thực sự muốn "
-"thế\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+msgstr "Dừng lại sẽ làm hỏng hệ thống tập tin, ngắt lần nữa nếu bạn thực sự muốn thế\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " %s còn lại ở tốc độ %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr "gặp lỗi khi đọc khối %llu"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
-msgstr "Đã chép %llu / %llu khối (%d%%) trong %s"
+msgstr "Đã chép %llu / %llu khối (%d%%) trong %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "ở tốc độ %.2f MB/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
 msgstr "trong khi cấp phát bảng l1"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr "trong khi cấp phát bảng l2"
 
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
-msgstr ""
-"Cảnh báo: Vẫn còn bảng trong bộ nhớ đệm trong khi đặt bộ nhớ này, dữ liệu sẽ "
-"mất do đó ảnh có thể không hợp lệ.\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
+msgstr "Cảnh báo: Vẫn còn bảng trong bộ nhớ đệm trong khi đặt bộ nhớ này, dữ liệu sẽ mất do đó ảnh có thể không hợp lệ.\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr "trong khi cấp phát ext2_qcow2_image"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr "trong khi khởi tạo ext2_qcow2_image"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr "Lỗi lập trình: đa khối refcount liên tiếp được tạo ra!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr "trong cấp phát mảng ảnh khối"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr "trong khi cấp phát mảng ảnh khối scramble"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
-msgstr "Đang quét các nút...\n"
+msgstr "Đang quét các nút\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr "Không thể cấp phát bộ đệm khối"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "trong khi lặp qua nút %u"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "Ảnh thô và qconw2 không thể được cài đặt"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr "lặp lỗi khi đọc mảng bit"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr "trong khi mở tập tin thiết bị"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr "trong khi phục hồi bảng ảnh"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
 msgstr "tùy chọn -a chỉ có thể được dùng cùng với các ảnh thô hoặc QCOW2."
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "tùy chọn -b chỉ có thể được dùng cùng với các ảnh thô hoặc QCOW2."
+
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr "Chế độ bù chỉ cho phép với ảnh thô."
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr "Chế độ di chuyển chỉ cho phép với ảnh thô."
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr "Chế độ di chuyển yêu cầu mọi chế độ dữ liệu."
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr "kiểm tra xem đã gắn kết chưa"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4640,54 +4658,59 @@ msgstr ""
 "ảnh không phù hợp cái mà sẽ không hữu ích khi muốn gỡ lỗi.\n"
 "Dùng tùy chọn -f nếu bạn thực sự muốn làm thế.\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "Ảnh QCOW2 không thể ghi ra đầu ra tiêu chuẩn!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr "Không thể lấy thống kê đầu ra\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "Ảnh (%s) đã được nén lại\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "Ảnh (%s) đã được mã hóa\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "Ảnh (%s) đã bị hỏng\n"
+
+#: misc/e2image.c:1683
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr "khi cố chuyển đổi ảnh qcow2 (%s) thành dạng ảnh thô (%s)"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr "Tùy chọn “-c” chỉ được hỗ trợ trong chế độ thô\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "Tùy chọn “-c” không được hỗ trợ khi ghi ra đầu ra tiêu chuẩn\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr "trong khi cấp phát check_buf"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr "Tùy chọn “-p” không được hỗ trợ trong chế độ thô\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d khối đã sẵn chứa dữ liệu để sao chép\n"
 
 #: misc/e2initrd_helper.c:68
-#, fuzzy, c-format
+#, c-format
 msgid "Usage: %s -r device\n"
-msgstr "Cách dùng: %s đĩa\n"
+msgstr "Cách dùng: %s -r thiết-bị\n"
 
 #: misc/e2label.c:58
 #, c-format
@@ -4709,7 +4732,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:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, 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"
@@ -4724,201 +4747,194 @@ msgstr "e2label: không thể di chuyển đầu đọc để lấy lại siêu
 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:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Cách dùng: e2label thiết_bị [nhãn_mới]\n"
 
-#: misc/e2undo.c:118
-#, fuzzy, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
-msgstr "Cách dùng: %s <tập tin giao dịch> <hệ thống tập tin>\n"
+#: misc/e2undo.c:124
+#, c-format
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
+msgstr "Cách dùng: %s [-f] [-h] [-n] [-o offset] [-v] [-z tập_tin_undo] <tập tin giao dịch> <hệ thống tập tin>\n"
 
-#: misc/e2undo.c:143
-#, fuzzy
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
-msgstr "Giờ gắn kết hệ thống tập tin không tương ứng với %u\n"
+msgstr "Siêu khối hệ thống tập tin không khớp với tập tin undo.\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
-msgstr ""
+msgstr "UUID không khớp.\n"
 
-#: misc/e2undo.c:148
-#, fuzzy
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
-msgstr "Giờ gắn kết hệ thống tập tin không tương ứng với %u\n"
+msgstr "Giờ gắn kết hệ thống tập tin không khớp.\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
-msgstr ""
+msgstr "Giờ ghi cuối cùng không khớp.\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
-msgstr ""
+msgstr "Số lượng ghi lifetime không khớp.\n"
 
-#: misc/e2undo.c:166
-#, fuzzy
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
-msgstr "trong khi đọc siêu khối nhật ký"
+msgstr "trong khi đọc siêu khối hệ thống tập tin."
 
-#: misc/e2undo.c:182
-#, fuzzy
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
-msgstr "trong khi ghi siêu khối"
+msgstr "trong khi lấy siêu khối"
 
-#: misc/e2undo.c:195
-#, fuzzy, c-format
+#: misc/e2undo.c:201
+#, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
-msgstr "Tổng kiểm siêu khối không khớp với siêu khối "
+msgstr "Tổng kiểm siêu khối tập tin undo không khớp.\n"
 
-#: misc/e2undo.c:334
-#, fuzzy, c-format
+#: misc/e2undo.c:340
+#, c-format
 msgid "illegal offset - %s"
-msgstr "Khoảng bù không hợp lệ: %s\n"
+msgstr "khoảng bù không hợp lệ - %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
-msgstr ""
+msgstr "Sẽ không ghi vào một tập tin undo trong khi đang trình diễn lại nó.\n"
 
-#: misc/e2undo.c:367
-#, fuzzy, c-format
+#: misc/e2undo.c:373
+#, c-format
 msgid "while opening undo file `%s'\n"
-msgstr "trong khi mở tập tin thiết bị"
+msgstr "trong khi mở tập tin undo “%s”\n"
 
-#: misc/e2undo.c:374
-#, fuzzy
+#: misc/e2undo.c:380
 msgid "while reading undo file"
-msgstr "trong khi đọc nút thông tin gốc"
+msgstr "trong khi đọc tập tin undo"
 
-#: misc/e2undo.c:379
-#, fuzzy, c-format
+#: misc/e2undo.c:385
+#, c-format
 msgid "%s: Not an undo file.\n"
-msgstr "%s: quá nhiều thiết bị\n"
+msgstr "%s: Không phải là tập tin undo.\n"
 
-#: misc/e2undo.c:390
-#, fuzzy, c-format
+#: misc/e2undo.c:396
+#, c-format
 msgid "%s: Header checksum doesn't match.\n"
-msgstr "Tổng kiểm nút không khớp với nút "
+msgstr "%s: Tổng kiểm phần đầu không khớp.\n"
 
-#: misc/e2undo.c:397
-#, fuzzy, c-format
+#: misc/e2undo.c:403
+#, c-format
 msgid "%s: Corrupt undo file header.\n"
-msgstr "Phần đầu extent bị hỏng"
+msgstr "%s: Phần đầu tập tin undo bị hỏng.\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
-msgstr ""
+msgstr "%s: Cỡ khối tập tin undo quá lớn.\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
-msgstr ""
+msgstr "%s: Cỡ khối tập tin undo quá nhỏ.\n"
 
-#: misc/e2undo.c:419
-#, fuzzy, c-format
+#: misc/e2undo.c:425
+#, c-format
 msgid "%s: Unknown undo file feature set.\n"
-msgstr "@S @j đặt một cờ tính năng không tương thích không rõ.\n"
+msgstr "%s: Không hiểu tính năng tập tin undo.\n"
 
-#: misc/e2undo.c:427
-#, fuzzy, c-format
+#: misc/e2undo.c:433
+#, c-format
 msgid "Error while determining whether %s is mounted."
-msgstr "Gặp lỗi trong khi dò tìm xem %s đã gắn kết chưa.\n"
+msgstr "Gặp lỗi trong khi dò tìm xem %s đã gắn kết chưa."
 
-#: misc/e2undo.c:433
-#, fuzzy
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
-msgstr "e2undo chỉ nên chạy trên một hệ thống tập tin chưa gắn kết\n"
+msgstr "e2undo chỉ nên chạy trên một hệ thống tập tin chưa gắn kết"
 
-#: misc/e2undo.c:449
-#, fuzzy, c-format
+#: misc/e2undo.c:455
+#, c-format
 msgid "while opening `%s'"
-msgstr "trong khi mở %s"
+msgstr "trong khi mở “%s”"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
-msgstr ""
+msgstr "khoảng bù đã cho là quá lớn"
 
-#: misc/e2undo.c:501
-#, fuzzy
+#: misc/e2undo.c:507
 msgid "while reading keys"
-msgstr "trong khi đọc các mảng ảnh"
+msgstr "trong khi đọc khóa"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
-msgstr ""
+msgstr "%s: sai khóa thần diệu tại %llu\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
-msgstr ""
+msgstr "%s: tổng kiểm khối khóa lỗi tại %llu.\n"
 
-#: misc/e2undo.c:546
-#, fuzzy, c-format
+#: misc/e2undo.c:552
+#, c-format
 msgid "%s: block %llu is too long."
-msgstr "Từ khối %lu đến %lu\n"
+msgstr "%s: khối %llu là quá dài."
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
-#, fuzzy, c-format
+#: misc/e2undo.c:564 misc/e2undo.c:600
+#, c-format
 msgid "while fetching block %llu."
-msgstr "Đang ghi khối %llu\n"
+msgstr "trong khi lấy khối %llu."
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
-msgstr ""
+msgstr "lỗi tổng kiểm trong khối hệ thống tập tin %llu (undo blk %llu)\n"
 
-#: misc/e2undo.c:609
-#, fuzzy, c-format
+#: misc/e2undo.c:615
+#, c-format
 msgid "while writing block %llu."
-msgstr "gặp lỗi khi ghi khối %llu"
+msgstr "trong khi ghi khối %llu."
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
-msgstr ""
+msgstr "Tập tin undo bị hỏng; hãy chạy e2fsck NGAY!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
-msgstr ""
+msgstr "Lỗi V/R trong khi trình diễn lại; hãy chạy e2fsck NGAY!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
-msgstr ""
+msgstr "Các bản ghi undo không hoàn thiện; hãy chạy e2fsck.\n"
 
 #: misc/findsuper.c:110
 #, c-format
 msgid "Usage:  findsuper device [skipbytes [startkb]]\n"
-msgstr ""
+msgstr "Cách dùng:  findsuper thiết-bị [skipbytes [startkb]]\n"
 
 #: misc/findsuper.c:155
 #, c-format
 msgid "skipbytes should be a number, not %s\n"
-msgstr ""
+msgstr "skipbytes phải là một con số, không phải %s\n"
 
 #: misc/findsuper.c:162
 #, c-format
 msgid "skipbytes must be a multiple of the sector size\n"
-msgstr ""
+msgstr "skipbytes phải là bội số của cỡ cung từ\n"
 
 #: misc/findsuper.c:169
 #, c-format
 msgid "startkb should be a number, not %s\n"
-msgstr ""
+msgstr "startkb phải là một con số, không phải %s\n"
 
 #: misc/findsuper.c:175
 #, c-format
 msgid "startkb should be positive, not %llu\n"
-msgstr ""
+msgstr "startkb phải là dương, không phải %llu\n"
 
 #: misc/findsuper.c:186
 #, c-format
 msgid "starting at %llu, with %u byte increments\n"
-msgstr ""
+msgstr "bắt đầu tại %llu, với việc gia thêm %u byte\n"
 
 #: misc/findsuper.c:188
 #, c-format
@@ -4926,13 +4942,13 @@ msgid ""
 "[*] probably superblock written in the ext3 journal superblock,\n"
 "\tso start/end/grp wrong\n"
 msgstr ""
+"[*] gần như chắc chắn là siêu khối đã được ghi trong siêu khối journal ext3,\n"
+"\tdo đó đầu/cuối/nhóm sai\n"
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
-msgstr ""
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+msgstr "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid nhãn\n"
 
 #: misc/findsuper.c:264
 #, c-format
@@ -4940,6 +4956,8 @@ msgid ""
 "\n"
 "%11Lu: finished with errno %d\n"
 msgstr ""
+"\n"
+"%11Lu: đã kết thúc với lỗi %d\n"
 
 #: misc/fsck.c:343
 #, c-format
@@ -4963,37 +4981,37 @@ msgstr ""
 "\ttập tin /etc/fstab càng sớm càng càng tốt.\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: không tìm thấy\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: đợi: không có tiến trình con nữa?!?\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
-msgstr "Cảnh báo... %s cho thiết bị %s đã thoát với tín hiệu %d.\n"
+msgstr "Cảnh báo %s cho thiết bị %s đã thoát với tín hiệu %d.\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: trạng thái là %x, không bao giờ nên xảy ra.\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "%s hoàn tất (trạng thái thoát %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Gặp lỗi %d trong khi thực hiện fsck.%s cho %s\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -5001,107 +5019,100 @@ 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"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Không thể cấp phát bộ nhớ cho kiểu hế thống tập tin\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, 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
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: không thể kiểm tra %s: fsck.%s không tìm thấy\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "Đang kiểm tra mọi hệ thống tập tin.\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 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"
+#: misc/fsck.c:1085
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
-"Cách 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"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: quá nhiều thiết bị\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: quá nhiều đối số\n"
 
 #: misc/fuse2fs.c:3745
-#, fuzzy
 msgid "Mounting read-only.\n"
-msgstr "Mở tập tin trong chế độ chỉ cho đọc"
+msgstr "Gắn chế độ chỉ cho đọc.\n"
 
 #: misc/fuse2fs.c:3769
 #, c-format
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
-msgstr ""
+msgstr "%s: Cho phép những người dùng phân bổ mọi khối. Hành động này nguy hiểm!\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
-msgstr ""
+msgstr "%s: %s.\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
-#, fuzzy, c-format
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
+#, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr ""
-"Trước tiên hãy chạy lệnh “e2fsck -f %s”.\n"
+"Vui lòng chạy lệnh “e2fsck -fy %s”.\n"
 "\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
-msgstr ""
+msgstr "Journal cần được phục hồi; việc chạy “e2fsck -E journal_only” là cần thiết.\n"
 
-#: misc/fuse2fs.c:3811
-#, fuzzy, c-format
+#: misc/fuse2fs.c:3812
+#, c-format
 msgid "%s: Writing to the journal is not supported.\n"
-msgstr "Không hỗ trợ tính năng thu nhỏ kích cỡ nút\n"
+msgstr "%s: Không hỗ trợ tính năng ghi journal.\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
-msgstr ""
+msgstr "Cảnh báo: Đang gắn fs chưa kiểm tra, khuyên bạn nên chạy e2fsck.\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
-msgstr ""
+msgstr "Cảnh báo: Số lượng gắn kết tối đa đã bị vượt quá, khuyên bạn nên chạy e2fsck.\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
-msgstr ""
+msgstr "Cảnh báo: Thời gian kiểm tra đã bị vượt quá, khuyên bạn nên chạy e2fsck.\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
-msgstr ""
+msgstr "Dò thấy mồ côi, khuyên bạn nên chạy e2fsck.\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
-msgstr ""
+msgstr "Dò thấy có lỗi: bắt buộc phải chạy e2fsck.\n"
 
 #: misc/lsattr.c:75
-#, fuzzy, c-format
+#, c-format
 msgid "Usage: %s [-RVadlpv] [files...]\n"
-msgstr "Cách dùng: %s [-RVadlv] [tập_tin...]\n"
+msgstr "Cách dùng: %s [-RVadlpv] [tập_tin…]\n"
 
 #: misc/lsattr.c:86
 #, c-format
@@ -5109,17 +5120,17 @@ msgid "While reading flags on %s"
 msgstr "Trong khi đọc các cờ trên %s"
 
 #: misc/lsattr.c:93
-#, fuzzy, c-format
+#, c-format
 msgid "While reading project on %s"
-msgstr "Trong khi đọc phiên bản trên %s"
+msgstr "Trong khi đọc dự án trên %s"
 
 #: misc/lsattr.c:102
 #, c-format
 msgid "While reading version on %s"
 msgstr "Trong khi đọc phiên bản trên %s"
 
-#: misc/mke2fs.c:124
-#, fuzzy, c-format
+#: misc/mke2fs.c:130
+#, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
@@ -5127,53 +5138,52 @@ 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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 "Cách dùng: %s [-c|-l tên_tập_tin] [-b cỡ_khối] [-C cỡ_liên_cung]\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 cỡ_nhóm-flex] [-N số_lượng_inode] [-d thư-mục-root]\n"
+"\t[-m phần_trăm_khối_chưa_dù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[-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] [-e errors_behavior][-z tập_in_undo]\n"
+"\t [-jnqvDFSV] thiết_bị [số_lượng_khối]\n"
 "Từ viết tắt:\n"
 "\tHDH: hệ điều hành\n"
 "\tHTTT: hệ thống tập tin\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Đang chạy lệnh: %s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "trong khi cố chạy “%s”"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 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:293
+#: misc/mke2fs.c:299
 #, 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:295
+#: misc/mke2fs.c:301
 #, 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:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
-msgstr "Đang hủy bỏ...\n"
+msgstr "Đang hủy bỏ\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5183,15 +5193,19 @@ 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:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "trong khi đánh dấu các khối sai đã được dùng"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "trong khi ghi nút dự phòng"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "Đang ghi các bảng nút thông tin: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5200,76 +5214,76 @@ 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:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "hoàn tất                        \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "trong khi tạo thư mục gốc"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "trong khi đọc nút thông tin gốc"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 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:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "trong khi tạo /mất+tìm"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "trong khi tra tìm /mất+tìm"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "trong khi mở rộng /mất+tìm"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "trong khi đặt nút thông tin khối sai"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
-msgstr "Hết bộ nhớ nên x các rãnh ghi trong phạm vi %d đến %d\n"
+msgstr "Hết bộ nhớ nên xóa các rãnh ghi trong phạm vi %d đến %d\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, 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:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
-msgstr "Cảnh báo: không thể x rãnh ghi %d: %s\n"
+msgstr "Cảnh báo: không thể xóa rãnh ghi %d: %s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "trong khi khởi tạo siêu khối nhật ký"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "Đang ghi số không thiết bị nhật ký: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, 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:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "trong khi ghi siêu khối nhật ký"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "Đang tạo hệ thống tập tin với %llu (%dk) khối và %u nút.\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5278,158 +5292,167 @@ msgstr ""
 "cảnh báo: %llu khối chưa dùng.\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Nhãn hệ thống tập tin=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Kiểu HĐH: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Cỡ khối=%u (bản ghi=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Cỡ liên cung=%u (bản ghi=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Cỡ đoạn=%u (bản ghi=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, 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:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u nút thông tin, %llu khối\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, 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:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Khối dữ liệu đầu=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "Chủ sở hữu thư-mục gốc=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, 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:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u nhóm khối\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u nhóm khối\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u khối trên mỗi nhóm, %u liên cung trên mỗi nhóm\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, 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:704
+#: misc/mke2fs.c:716
 #, 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:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "Mã số định danh thiết bị hệ thống tập tin: %s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "Siêu khối dự trữ được cất giữ trên khối: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:822
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr "%s cần “-O 64bit”\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "“%s” phải trước “resize=%u”\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "desc_size không hợp lệ: “%s”\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, c-format
+msgid "Invalid hash seed: %s\n"
+msgstr "Hạt mầm băm không hợp lệ: %s\n"
+
+#: misc/mke2fs.c:867
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "Khoảng bù không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "mmp_update_interval không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "Số lượng siêu khối dự phòng không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Tham số stride không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Tham số stride không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, 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:935
+#: misc/mke2fs.c:965
 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:959
+#: misc/mke2fs.c:989
 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:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
-msgstr "root_owner không hợp lệ: %s\n"
+msgstr "root_owner không hợp lệ: '%s'\n"
+
+#: misc/mke2fs.c:1069
+#, c-format
+msgid "Invalid encoding: %s"
+msgstr "Bảng mã không hợp lệ: %s"
 
-#: misc/mke2fs.c:1035
-#, fuzzy, c-format
+#: misc/mke2fs.c:1087
+#, c-format
 msgid ""
 "\n"
 "Bad option(s) specified: %s\n"
@@ -5451,6 +5474,8 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
@@ -5470,15 +5495,15 @@ msgstr ""
 "\tpacked_meta_blocks=<0 để tắt, 1 để bật>\n"
 "\tlazy_itable_init=<0 để tắt, 1 để bật>\n"
 "\tlazy_journal_init=<0 để tắt, 1 để bật>\n"
-"\troot_uid=<uid của thư-mục gốc>\n"
-"\troot_gid=<gid của thư-mục >\n"
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
-"\tquotatype=<usr HAY grp>\n"
+"\tencoding=<bảng mã>\n"
+"\tencoding_flags=<các cờ>\n"
+"\tquotatype=<kiểu quota sẽ được bật>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5486,11 +5511,20 @@ 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:1102
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr "lỗi: Cờ bảng mã không hợp lệ: %s\n"
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr "lỗi: Một mã hoá phải được xác định rõ ràng khi đi chuyển qua cờ mã hóa\n"
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5499,17 +5533,17 @@ 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:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, 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:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, 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:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
@@ -5518,7 +5552,7 @@ msgstr ""
 "\n"
 "Tập tin “mke2fs.conf” của bạn không định nghĩa kiểu hệ thống tập tin %s.\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5526,11 +5560,11 @@ 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"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 msgid "Aborting...\n"
-msgstr "Đang hủy bỏ...\n"
+msgstr "Đang hủy bỏ\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5541,153 +5575,148 @@ msgstr ""
 "Cảnh báo: fs_type %s không được định nghĩa trong mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 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:1535
+#: misc/mke2fs.c:1608
 #, 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:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "cỡ khối không hợp lệ — %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, 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:1588
+#: misc/mke2fs.c:1661
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "cỡ liên cung không hợp lệ — %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "“-R” không dùng nữa, hãy thay bằng “-E”"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "ứng xử lỗi sai — %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr "Số cấm cho số khối trên mỗi nhóm"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 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:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "Kích cỡ flex_bg có số không được phép"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
-msgstr "Kích cỡ flex_bg phải là lũy thừa 2"
+msgstr "kích cỡ flex_bg phải là lũy thừa 2"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
-msgstr "Kích cỡ flex_bg (%lu) phải nhỏ hơn hoặc bằng 2^31"
+msgstr "kích cỡ flex_bg (%lu) phải nhỏ hơn hoặc bằng 2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, 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:1671
+#: misc/mke2fs.c:1744
 #, 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:1684
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
-msgstr ""
-"Cảnh báo: Không tán thành việc sử dụng tuỳ chọn -K và có lẽ nó sẽ không 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:1757
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "Cảnh báo: Không tán thành việc sử dụng tùy chọn -K và có lẽ nó sẽ không bao giờ được sử dụng nữa. Sử dụng tùy chọn mở rộng “-E nodiscard” để thay thế!\n"
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1768
 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”"
 
-#: misc/mke2fs.c:1704
-#, fuzzy, c-format
+#: misc/mke2fs.c:1777
+#, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
-msgstr "Cảnh báo: nhãn quá dài nên cắt ngắn.\n"
+msgstr "Cảnh báo: nhãn quá dài nên cắt ngắn thành “%s”.\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, 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:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "số (num) nút thông tin sai — %s"
 
-#: misc/mke2fs.c:1741
-#, fuzzy
+#: misc/mke2fs.c:1814
 msgid "while allocating fs_feature string"
-msgstr "trong khi cấp phát bộ đệm"
+msgstr "trong khi cấp phát chuỗi fs_feature"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1831
 #, c-format
 msgid "bad revision level - %s"
 msgstr "cấp bản sửa đổi sai — %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "trong khi cố tạo điểm %d"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 msgid "The -t option may only be used once"
-msgstr "tùy chọn -t chỉ sử dụng một lần"
+msgstr "Tùy chọn -t chỉ sử dụng một lần"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1858
 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:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "trong khi cố mở thiết bị nhật ký %s\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1920
 #, 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:1853
+#: misc/mke2fs.c:1926
 #, 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:1864
+#: misc/mke2fs.c:1937
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "khối “%s” sai trên thiết bị “%s”"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "hệ thống tập tin"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "trong khi cố xác định kích cỡ của hệ thống tập tin"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -5695,7 +5724,7 @@ msgstr ""
 "Không thể xác định kích cỡ của thiết bị;\n"
 "bạn cần phải chỉ định kích cỡ của hệ thống tập tin\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5709,50 +5738,48 @@ 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:1931
+#: misc/mke2fs.c:2015
 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:1951
+#: misc/mke2fs.c:2035
 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:1999
-#, fuzzy
+#: misc/mke2fs.c:2085
 msgid "The HURD does not support the filetype feature.\n"
-msgstr "Hurd không hỗ trợ tính năng kiểu tập tin.\n"
+msgstr "HURD không hỗ trợ tính năng kiểu tập tin.\n"
 
-#: misc/mke2fs.c:2004
-#, fuzzy
+#: misc/mke2fs.c:2090
 msgid "The HURD does not support the huge_file feature.\n"
-msgstr "Hurd không hỗ trợ tính năng kiểu tập tin.\n"
+msgstr "HURD không hỗ trợ tính năng huge_file (tập tin rất lớn).\n"
 
-#: misc/mke2fs.c:2009
-#, fuzzy
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
-msgstr "Hurd không hỗ trợ tính năng kiểu tập tin.\n"
+msgstr "HURD không hỗ trợ tính năng metadata_csum.\n"
+
+#: misc/mke2fs.c:2100
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "HURD không hỗ trợ tính năng ea_inode.\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2110
 msgid "while trying to determine hardware sector size"
 msgstr "trong khi cố xác định kích cỡ của rãnh ghi phần cứng"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2116
 msgid "while trying to determine physical sector size"
 msgstr "trong khi cố xác định kích cỡ của rãnh ghi vật lý"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2148
 msgid "while setting blocksize; too small for device\n"
 msgstr "trong khi cài đặt kích cỡ khối ; quá nhỏ đối với thiết bị\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2153
 #, 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:2086
+#: misc/mke2fs.c:2177
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5761,97 +5788,97 @@ 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:2098
-#, fuzzy, c-format
+#: misc/mke2fs.c:2191
+#, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
 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"
+"%s: Cỡ của thiết bị (0x%llx khối) %s có kích cỡ quá lớn để\n"
+"\ttạo một hệ thống tập tin dùng cỡ khối của %d.\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "fs_types để giải quyết mke2fs.conf: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 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:2135
+#: misc/mke2fs.c:2228
 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:2145
+#: misc/mke2fs.c:2238
 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:2158
+#: misc/mke2fs.c:2251
 #, 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:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
-msgstr ""
-"Phần mở rộng PHẢI được bật cho hệ thống tập tin 64-bit. Chuyển -O "
-"phần_mở_rộng để nắn chỉnh.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
+msgstr "Phần mở rộng PHẢI được bật cho hệ thống tập tin 64-bit. Chuyển -O phần_mở_rộng để nắn chỉnh.\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "Kích thước liên cung không thể nhỏ hơn kích cỡ khối.\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "chỉ định kích thước liên cung cần đặc tính bigalloc"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, 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:2224
+#: misc/mke2fs.c:2317
 #, 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:2226
+#: misc/mke2fs.c:2319
 #, 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:2247
+#: misc/mke2fs.c:2340
 #, 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:2251
+#: misc/mke2fs.c:2344
 #, 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:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
-msgstr ""
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "Gợi ý: Dùng Linux kernel >= 3.18 để tăng cường tính ổn định của tính năng tổng kiểm siêu dữ liệu và journal.\n"
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
+msgstr "Không hiểu bảng mã tên tập tin từ hồ sơ: %s"
+
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr "Không hiểu các cờ bảng mã từ hồ sơ: %s"
+
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -5860,21 +5887,38 @@ msgid ""
 "not be what you want.\n"
 "\n"
 msgstr ""
+"\n"
+"Cảnh báo: khoảng bù đã cho không có một cỡ hệ thống tập tin rõ ràng.\n"
+"Đang tạo một hệ thống tập tin với %llu khối nhưng đây có lẽ\n"
+"không phải là thứ bạn muốn.\n"
+"\n"
+
+#: misc/mke2fs.c:2449
+#, c-format
+msgid "%d byte inodes are too small for project quota"
+msgstr "cỡ nút %d byte là quá nhỏ cho hạn ngạch dự án"
+
+#: misc/mke2fs.c:2465
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Các tính năng mã hóa và casefold không tương thích.\n"
+"Họ không thể được cả hai kích hoạt đồng thời.\n"
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2480
 msgid "Can't support bigalloc feature without extents feature"
-msgstr "Không thể hỗ trợ đặc tính bigalloc mà không có phần mở "
+msgstr "Không thể hỗ trợ đặc tính bigalloc mà không có phần mở"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 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:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5886,46 +5930,41 @@ msgstr ""
 "Xem https://ext4.wiki.kernel.org/index.php/Bigalloc để biết chi tiết\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 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:2367
+#: misc/mke2fs.c:2516
 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:2389
+#: misc/mke2fs.c:2538
 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:2401
+#: misc/mke2fs.c:2550
 #, 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:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
-msgstr ""
-
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr ""
+msgstr "cỡ nút %d byte là quá nhỏ cho dữ liệu chung dòng; hãy đưa ra cỡ lớn hơn"
 
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, 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:2451
+#: misc/mke2fs.c:2587
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "quá nhiều nút thông tin (%llu), chỉ ra <2³² nút thông tin"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2601
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5937,69 +5976,66 @@ 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:2652
+#: misc/mke2fs.c:2788
 msgid "Discarding device blocks: "
 msgstr "Bỏ qua khối thiết bị: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 msgid "failed - "
 msgstr "gặp lỗi - "
 
-#: misc/mke2fs.c:2727
-#, fuzzy
+#: misc/mke2fs.c:2863
 msgid "while initializing quota context"
-msgstr "trong khi khởi tạo ext2_qcow2_image"
+msgstr "trong khi khởi tạo ngữ cảnh hạn ngạch"
 
-#: misc/mke2fs.c:2734
-#, fuzzy
+#: misc/mke2fs.c:2870
 msgid "while writing quota inodes"
-msgstr "trong khi ghi nút thông tin nhật ký"
+msgstr "trong khi ghi nút hạn ngạch"
 
-#: misc/mke2fs.c:2759
-#, fuzzy, c-format
+#: misc/mke2fs.c:2895
+#, c-format
 msgid "bad error behavior in profile - %s"
-msgstr "ứng xử lỗi sai — %s"
+msgstr "ứng xử lỗi sai trong hồ sơ — %s"
+
+#: misc/mke2fs.c:2971
+msgid "in malloc for android_sparse_params"
+msgstr "trong hàm cấp phát bộ nhớ malloc cho android_sparse_params"
 
 # Item in the main menu to select this package
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "trong khi cài đặt siêu khối"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
-msgstr ""
-
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
-msgstr ""
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
+msgstr "Các phần mở rộng không được bật. Cây mở rộng tập tin có thể được kiểm tra tổng kiểm, nhưng trái lại ánh xạ khối lại không thể. Không bật giản lược mở rộng bao phủ của kiểm tra tổng thể siêu dữ liệu. Chuyển mở rộng -O để sửa lại cho đúng.\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
-msgstr ""
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+msgstr "Hệ thống tập tin 64-bít không được bật. Các trường lớn hơn cung cấp bởi tính năng này bật kiểm tra tổng thể full-strength. Chuyển -O 64bit để chỉnh lại cho đúng.\n"
+
+#: misc/mke2fs.c:3016
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
+msgstr "Tính năng metadata_csum_seed cần tính năng metadata_csum.\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 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 x bảng nút\n"
+msgstr "Loại bỏ thành công và sẽ trả về 0 - bỏ qua xóa bảng nút\n"
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "hệ điều hành lạ — %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 msgid "Allocating group tables: "
 msgstr "Phân bổ bảng nhóm: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr "trong khi cố cấp phát các bảng hệ thống tập tin"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -6007,30 +6043,30 @@ msgstr ""
 "\n"
 "\ttrong khi chuyển đổi mảng ảnh liên cung con"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
-msgstr ""
+msgstr "%s có thể hỏng nặng hơn nữa nếu viết lại siêu khối\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, 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:3114
+#: misc/mke2fs.c:3279
 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:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "nhật ký"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Đang thêm nhật ký vào thiết bị %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
@@ -6039,21 +6075,21 @@ msgstr ""
 "\n"
 "trong khi cố thêm nhật ký vào thiết bị %s"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "hoàn tất\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 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:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Đang tạo nhật ký (%u khối): "
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -6061,43 +6097,36 @@ msgstr ""
 "\n"
 "trong khi cố tạo nhật ký"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 "\n"
-"Lỗi khi bật đặc tính bảo vệ đa gắn"
+"Lỗi khi bật đặc tính bảo vệ đa gắn."
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3357
 #, 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:3210
-#, fuzzy
+#: misc/mke2fs.c:3373
 msgid "Copying files into the device: "
-msgstr "Gặp lỗi khi đẩy dữ liệu sau lệnh ghi lên thiết bị lưu trữ: %m\n"
+msgstr "Đang chép các tập tin vào trong thiết: "
 
-#: misc/mke2fs.c:3216
-#, fuzzy
+#: misc/mke2fs.c:3379
 msgid "while populating file system"
-msgstr "trong khi cấp phát bảng l1"
+msgstr "trong khi di chuyển hệ thống tập tin"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 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:3230
-#, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-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:3393
+msgid "while writing out and closing file system"
+msgstr "trong khi ghi ra và đòng hệ thống tập tin"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6105,32 +6134,34 @@ msgstr ""
 "hoàn tất\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
-msgstr ""
+msgid "while zeroing block %llu for hugefile"
+msgstr "trong khi điền số không khối %llu cho tập tin cực lớn"
+
+#: misc/mk_hugefiles.c:515
+#, c-format
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgstr "Vị trí bù phân vùng của %llu (%uk) khối là không tương thích với cỡ liên cung %u.\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
-msgstr ""
+msgstr "Các tập tin cực lớn sẽ bị điền bằng số không\n"
 
-#: misc/mk_hugefiles.c:492
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:584
+#, c-format
 msgid "Creating %lu huge file(s) "
-msgstr "Đang tạo tập tin thường %s\n"
+msgstr "Đang tạo tập tin cực lớn %lu "
 
-#: misc/mk_hugefiles.c:494
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:586
+#, c-format
 msgid "with %llu blocks each"
-msgstr ""
-"cảnh báo: %llu khối chưa dùng.\n"
-"\n"
+msgstr "với %llu khối cho mỗi"
 
-#: misc/mk_hugefiles.c:505
-#, fuzzy, c-format
+#: misc/mk_hugefiles.c:595
+#, c-format
 msgid "while creating huge file %lu"
-msgstr "trong khi lặp qua nút %u"
+msgstr "trong khi tạo tập tin cự lớn %lu"
 
 #: misc/mklost+found.c:50
 msgid "Usage: mklost+found\n"
@@ -6145,7 +6176,7 @@ msgid ""
 "For example: %s /dev/hda\n"
 "\n"
 msgstr ""
-"Cách 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"
@@ -6172,144 +6203,157 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s: h=%3d s=%3d c=%4d   đầu=%8d cỡ=%8lu cuối=%8d\n"
 
 #: misc/tune2fs.c:119
-#, fuzzy
-msgid "Please run e2fsck -f on the filesystem.\n"
-msgstr "Hãy chạy tiến trình e2fsck trên hệ thống tập tin.\n"
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+"\n"
+"Thao tác này yêu cầu một hệ thống tập tin đã được kiểm tra làm mới lại.\n"
 
 #: misc/tune2fs.c:121
-#, fuzzy
+msgid "Please run e2fsck -f on the filesystem.\n"
+msgstr "Hãy chạy e2fsck -f trên hệ thống tập tin.\n"
+
+#: misc/tune2fs.c:123
 msgid "Please run e2fsck -fD on the filesystem.\n"
-msgstr "Hãy chạy tiến trình e2fsck trên hệ thống tập tin.\n"
+msgstr "Hãy chạy e2fsck -fD trên hệ thống tập tin.\n"
 
-#: misc/tune2fs.c:134
-#, fuzzy, c-format
+#: misc/tune2fs.c:136
+#, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
 msgstr ""
-"Cách 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] [-f] [-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 thư_mục_lắp_cuối] [-O [^]tính_năng[,...]]\n"
-"\t[-Q tùy_chọn_quota]\n"
-"\t[-E tùy_chọn_mở_rộng[,...] [-T giờ_kiểm_tra_cuối] [-U UUID]\n"
-"\t[-I cỡ_nút_mới] thiết_bị\n"
-
-#: misc/tune2fs.c:218
+"\t[-m phần_trăm_khối_để_dành] [-o [^]tùy_chọn_lắp[,…]]\n"
+"\t[-r số_đếm_khối_để_dành] [-u người_dùng] [-C số_đếm_lắp]\n"
+"\t[-L nhãn_phân_vùng] [-M thư_mục_lắp_cuối]\n"
+"\t[-O [^]tính_năng[,…]] [-Q tùy_chọn_quota]\n"
+"\t[-E tùy_chọn_mở_rộng[,…] [-T giờ_kiểm_tra_cuối] [-U UUID]\n"
+"\t[-I cỡ_nút_mới] [-z tập_tin_undo] thiết_bị\n"
+
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "Không tìm thấy siêu khối nhật ký !\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "trong khi cố mở nhật ký bên ngoài"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s không phải thiết bị nhật ký.\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr ""
+"Siêu khối journal bị hỏng, nr_users\n"
+"thì quá cao (%d).\n"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "Không tìm thấy UUID của hệ thống tập tin trên thiết bị nhật ký.\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
 msgstr ""
 "Không thể định được thiết bị journal. Nó đã KHÔNG bị gỡ bỏ\n"
-"Sử dụng tuỳ chọn -f để gỡ bỏ thiết bị journal bị thiếu.\n"
+"Sử dụng tùy chọn -f để gỡ bỏ thiết bị journal bị thiếu.\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "Nhật ký đã gỡ bỏ\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "trong khi đọc các mảng ảnh"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
-msgstr "trong khi x sạch nút thông tin nhật ký"
+msgstr "trong khi xóa sạch nút thông tin nhật ký"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "trong khi ghi nút thông tin nhật ký"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(và khởi động lại sau!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
-msgstr ""
+msgstr "Sau khi chạy e2fsck, vui lòng chạy “resize2fs %s %s"
 
-#: misc/tune2fs.c:479
-#, fuzzy, c-format
+#: misc/tune2fs.c:489
+#, c-format
 msgid "Please run `resize2fs %s %s"
-msgstr ""
-"Trước tiên hãy chạy lệnh “e2fsck -f %s”.\n"
-"\n"
+msgstr "Vui lòng chạy “resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
-msgstr ""
+msgstr " -z \"%s\""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:495
 #, c-format
 msgid "' to enable 64-bit mode.\n"
-msgstr ""
+msgstr "” để bật chế độ 64-bít.\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:497
 #, c-format
 msgid "' to disable 64-bit mode.\n"
-msgstr ""
+msgstr "” để tắt chế độ 64-bít.\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
 msgstr ""
+"CẢNH BÁO: Không thể xác nhận rằng hạt nhân có hỗ trợ metadata_csum_seed.\n"
+"  Việc này yêu cầu Linux >= v4.4.\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
-msgstr "Tính năng x sạch hệ thống tập tin “%s” không được hỗ trợ.\n"
+msgstr "Tính năng xóa sạch hệ thống tập tin “%s” không được hỗ trợ.\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, 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"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
-"Tính năng có nhật ký (has_journal) có thể được x sạch\n"
+"Tính năng có nhật ký (has_journal) có thể được xóa sạch\n"
 "chỉ khi hệ thống tập tin được tháo gắn kết\n"
 "hay được gắn kết một cách chỉ đọc.\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
 "Đặt cờ cần thiết phục hồi (needs_recovery).\n"
-"Hãy chạy tiến trình e2fsck trước khi x sạch cờ có nhật ký (has_journal).\n"
+"Hãy chạy tiến trình e2fsck trước khi xóa sạch cờ có nhật ký (has_journal).\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
@@ -6317,7 +6361,7 @@ msgstr ""
 "Không được hỗ trợ chức năng “sparse_super”\n"
 "cho hệ thống tập tin với đặc tính meta_bg được bật.\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
@@ -6327,12 +6371,12 @@ msgstr ""
 "đặt được nếu hệ thống tập tin đã được gắn kết\n"
 "hay chỉ cho đọc.\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1143
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr "Đặc tính kỹ thuật bảo vệ đa gắn đã bật với nhịp cập nhật là %d giây.\n"
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
@@ -6340,109 +6384,110 @@ msgstr ""
 "Đặc tính kỹ thuật bảo vệ đa gắn không thể\n"
 "được tắt nếu hệ thống tập tin chỉ đọc.\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 msgid "Error while reading bitmaps\n"
 msgstr "Gặp lỗi khi đọc mảng\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr "Số mầu nhiệm trong khối MMP không khớp. mong chờ: %x, thực tế: %x\n"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1174
 msgid "while reading MMP block."
 msgstr "trong khi đọc khối MMP."
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr "Gỡ bỏ cờ flex_bg thì gây ra hệ thống tập tin không thống nhất.\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
-"Tính năng tập tin rất lớn (huge_file) có thể được x sạch\n"
+"Tính năng tập tin rất lớn (huge_file) có thể được xóa sạch\n"
 "chỉ khi hệ thống tập tin được tháo gắn kết\n"
 "hay được gắn kết một cách chỉ đọc.\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
-msgstr ""
+msgstr "Bật tổng kiểm có thể mất một ít thời gian."
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
-msgstr ""
+msgstr "Không thể bật metadata_csum trên hệ thống tập tin đã gắn!\n"
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
-msgstr ""
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
+msgstr "Các phần mở rộng không được bật. Cây mở rộng tập tin có thể được kiểm tra tổng kiểm, nhưng trái lại ánh xạ khối lại không thể. Không bật giản lược mở rộng bao phủ của kiểm tra tổng thể siêu dữ liệu. Chạy lại với mở rộng -O để sửa lại cho đúng.\n"
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
-msgstr ""
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
+msgstr "Hệ thống tập tin 64-bít không được bật. Các trường lớn hơn cung cấp bởi tính năng này bật kiểm tra tổng thể full-strength. Chạy resize2fs -b để chỉnh lại cho đúng.\n"
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
-msgstr ""
+msgstr "Tắt tổng kiểm có thể mất một ít thời gian."
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
-msgstr ""
+msgstr "Không thể tắt metadata_csum trên hệ thống tập tin đã gắn!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
-msgstr ""
+msgstr "Không thể bật chế độ 64-bít trong khi đang gắn!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
-msgstr ""
+msgstr "Không thể tắt chế độ 64-bít trong khi đang gắn!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
-msgstr ""
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
+msgstr "Không thể bật tính năng dự án; cỡ nút quá nhỏ.\n"
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "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: tùy chọn “^quota” sẽ dè lên đối số “-Q”.\n"
 
-#: misc/tune2fs.c:1344
-#, fuzzy
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr "Không thể kích hoạt tính năng mã hóa trên hệ thống tập tin với tính năng mã hoá được bật.\n"
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
 msgstr ""
-"Không được hỗ trợ chức năng “sparse_super”\n"
-"cho hệ thống tập tin với đặc tính meta_bg được bật.\n"
+"Cài đặt chức năng “metadata_csum_seed” chỉ được hỗ trợ\n"
+"cho hệ thống tập tin với đặc tính metadata_csum được bật.\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
+"UUID đã thay đổi kể từ khi bật metadata_csum. hệ thống tập tin phải được bỏ gắn kết\n"
+"để ghi lại một cách an toàn mọi siêu dữ liệu sao cho khớp với UUID mới.\n"
+
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr "Tình tổng kiểm lại có thể mất một ít thời gian."
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "Hệ thống tập tin đã có nhật ký.\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, c-format
 msgid ""
 "\n"
@@ -6451,21 +6496,21 @@ msgstr ""
 "\n"
 "trong khi cố mở nhật ký trên %s\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Đang tạo nhật ký trên thiết bị %s: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "trong khi thêm hệ thống tập tin vào nhật ký trên %s"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "Đang tạo nút thông tin nhật ký: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6473,34 +6518,36 @@ msgstr ""
 "\n"
 "trong khi cố tạo tập tin nhật ký"
 
-#: misc/tune2fs.c:1498
-#, fuzzy
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr "Không thể bật giới hạn dự án; cỡ nút quá nhỏ.\n"
+
+#: misc/tune2fs.c:1588
 msgid "while initializing quota context in support library"
-msgstr "trong khi khởi tạo siêu khối nhật ký"
+msgstr "trong khi khởi tạo ngữ cảnh hạn ngạch trong thư viện hỗ trợ"
 
-#: misc/tune2fs.c:1518
-#, fuzzy, c-format
+#: misc/tune2fs.c:1603
+#, c-format
 msgid "while updating quota limits (%d)"
-msgstr "trong khi cập nhật nút thông tin khối hỏng"
+msgstr "trong khi cập nhật giới hạn hạn ngạch (%d)"
 
-#: misc/tune2fs.c:1526
-#, fuzzy, c-format
+#: misc/tune2fs.c:1611
+#, c-format
 msgid "while writing quota file (%d)"
-msgstr "trong khi ghi nút thông tin %lu trong %s"
+msgstr "trong khi ghi tập tin hạn ngạch (%d)"
 
-#: misc/tune2fs.c:1534
-#, fuzzy, c-format
+#: misc/tune2fs.c:1629
+#, c-format
 msgid "while removing quota file (%d)"
-msgstr "trong khi đọc nút thông tin gốc"
+msgstr "trong khi xóa bỏ tập tin hạn ngạch (%d)"
 
-#: misc/tune2fs.c:1575
-#, fuzzy
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6508,102 +6555,105 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Đã chỉ định tuỳ chọn hạn ngạch sai.\n"
+"Đã chỉ định tùy 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"
-"\t[^]usrquota\n"
-"\t[^]grpquota\n"
+"Sau đây là danh sách các tùy 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[^]usr[quota]\n"
+"\t[^]grp[quota]\n"
+"\t[^]prj[quota]\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, 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:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "số đếm gắn sai — %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, c-format
 msgid "bad gid/group name - %s"
-msgstr "GID/tên nhóm sai — %s"
+msgstr "gid/tên nhóm sai — %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "sai nhịp - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "tỷ lệ khối dành riêng sai — %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
 msgid "-o may only be specified once"
 msgstr "có thể đưa ra tùy chọn “-o” chỉ một lần"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
 msgid "-O may only be specified once"
 msgstr "có thể đưa ra tùy chọn “-O” chỉ một lần"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "số đếm khối dành riêng sai — %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
-msgstr "UID/tên người dùng sai — %s"
+msgstr "uid/tên người dùng sai — %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "kích cỡ nút sai — %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, 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:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "mmp_update_interval quá lớn (%lu)\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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:2078
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "Đặt cờ lỗi cho hệ thống tập tin để buộc chạy fsck.\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Tham số stride RAID không hợp lệ: %s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, 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:2025
+#: misc/tune2fs.c:2126
 #, 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:2031
+#: misc/tune2fs.c:2132
 #, 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:2050
+#: misc/tune2fs.c:2151
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6615,51 +6665,55 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
 "\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"
+"Các tùy chọn mở rộng được ngăn cách nhau 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"
 "\n"
-"Tùy chọn đã mở rộng hợp lệ:\n"
+"Tùy chọn mở rộng hợp lệ:\n"
 "\tclear_mmp\n"
 "\thash_alg=<thuật toán băm>\n"
-"\tmount_opts=<các tuỳ chọn gắn mặc định mở rộng>\n"
+"\tmount_opts=<các tùy chọn gắn mặc định mở rộng>\n"
+"\tmmp_update_interval=<nhịp cập nhật mmp tính bằng giây>\n"
 "\tstride=<RAID cho mỗi kích cỡ đoạn đĩa theo khối>\n"
 "\tstripe-width=<RAID stride*các đĩa dữ liệu theo khối>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 msgid "Failed to read inode bitmap\n"
 msgstr "Không thể đọc ánh xạ inode\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 msgid "Failed to read block bitmap\n"
 msgstr "Lỗi khi đọc mảng khối\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "khối cần di chuyển"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 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:2550
+#: misc/tune2fs.c:2653
 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:2555
+#: misc/tune2fs.c:2658
 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:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6667,7 +6721,15 @@ 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"
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2900
+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"
+
+#: misc/tune2fs.c:2907
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
@@ -6676,75 +6738,96 @@ msgstr ""
 "Khối màu nhiệm MMP sai. Hãy thử sửa bằng cách chạy lệnh:\n"
 "“e2fsck -f %s”\n"
 
-#: misc/tune2fs.c:2811
-#, fuzzy
+#: misc/tune2fs.c:2919
 msgid "Cannot modify a journal device.\n"
-msgstr "%s không phải thiết bị nhật ký.\n"
+msgstr "Không thể sửa thiết bị nhật ký.\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Kích cỡ nút thông tin đã %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 msgid "Shrinking inode size is not supported\n"
 msgstr "Không hỗ trợ tính năng thu nhỏ kích cỡ nút\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "Kích cỡ nút thông tin không hợp lệ %lu (tối đa %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
+msgstr "Việc đổi cỡ nút thông tin có thể mất nhiều thời gian."
+
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
 msgstr ""
+"Cảnh báo: Journal đang sai. Bạn có thể muốn trình diễn lại journal như:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"sau đó trở về lệnh này. Nếu không, mọi thay đổi đã tạo có thể bị ghi đè\n"
+"bởi việc phục hồi journal.\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "Đang phục hồi journal.\n"
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:3028
 #, 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:2895
+#: misc/tune2fs.c:3034
 #, 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:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Đang đặt ứng xử lỗi thành %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, 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:2910
+#: misc/tune2fs.c:3049
 #, 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:2917
+#: misc/tune2fs.c:3056
 #, 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:2924
+#: misc/tune2fs.c:3063
 #, 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:2930
+#: misc/tune2fs.c:3069
 #, 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:2937
+#: misc/tune2fs.c:3076
 #, 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:2942
+#: misc/tune2fs.c:3081
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6752,7 +6835,7 @@ msgstr ""
 "\n"
 "Hệ thống tập tin đã có siêu khối thưa thớt.\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6762,7 +6845,7 @@ msgstr ""
 "Không được hỗ trợ chức năng phân tích cờ siêu khối\n"
 "cho hệ thống tập tin với đặc tính meta_bg được bật.\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
@@ -6771,142 +6854,117 @@ msgstr ""
 "\n"
 "Đặt cờ siêu khối thưa thớt.  %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
 msgstr ""
 "\n"
-"Tính năng x sạch cờ siêu khối không được hỗ trợ.\n"
+"Tính năng xóa sạch cờ siêu khối không được hỗ trợ.\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, 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:2974
+#: misc/tune2fs.c:3113
 #, 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:3006
+#: misc/tune2fs.c:3145
 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:3024
-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:3163
+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:3048
-msgid "The UUID may only be changed when the filesystem is unmounted.\n"
-msgstr "chỉ có thể thay đổi UUID khi hệ thống tập tin không được gắn kết.\n"
+#: misc/tune2fs.c:3181
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "Thiết lập UUID trên hệ thống tập tin này có thể mất thời gian."
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
-msgstr ""
+#: misc/tune2fs.c:3196
+msgid "The UUID may only be changed when the filesystem is unmounted.\n"
+msgstr "Chỉ có thể thay đổi UUID khi hệ thống tập tin không được gắn kết.\n"
 
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr ""
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
+msgstr "Nếu bạn chỉ sử dụng hạt nhân mới hơn v4.4, hãy chạy “tune2fs -O metadata_csum_seed” và chạy lại lệnh này.\n"
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "Định dạng UUID không hợp lệ\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 msgid "Need to update journal superblock.\n"
 msgstr "Cần phải cập nhật siêu khối nhật ký.\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 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:3133
+#: misc/tune2fs.c:3274
 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:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Đang đặt kích cỡ nút %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 msgid "Failed to change inode size\n"
 msgstr "Lỗi thay đổi kích thước của nút\n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Đang đặt kích cỡ stride thành %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, 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:3181
+#: misc/tune2fs.c:3322
 #, 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"
-
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-
-#: misc/tune2fs.c:3203
-#, fuzzy, c-format
-msgid "Recovering journal.\n"
-msgstr "%s: đang phục hồi nhật ký\n"
+msgstr "Đang đặt tùy chọn gắn mặc định mở rộng thành “%s”\n"
 
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr "<đang xử lý>\n"
 
-#: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "Vẫn xử lý (hoặc chờ %d giây)? (c,k) "
+#: misc/util.c:105
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "Vẫn xử lý (hoặc chờ %d giây để xử lý)? (y,N,c,K) "
 
-#: misc/util.c:108
-#, fuzzy
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
-msgstr "Vẫn còn tiếp tục không? (c,k)"
+msgstr "Vẫn xử lý? (y,N,c,K) "
 
-#: misc/util.c:133
+#: misc/util.c:136
 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 "mke2fs vẫn còn bị ép buộc. Mong “/etc/mtab” không đúng.\n"
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr "sẽ không làm %s ở đây !\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
-msgstr "Tiến trình mke2fs vẫn còn bị ép buộc.\n"
+msgstr "mke2fs vẫn còn bị ép buộc.\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr "Không thể cấp phát bộ nhớ để phân tách các tùy chọn nhật ký !\n"
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
@@ -6915,7 +6973,7 @@ msgstr ""
 "\n"
 "Không tìm thấy thiết bị nhật ký tương ứng với %s\n"
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -6946,7 +7004,7 @@ msgstr ""
 "1024 đến 10240000 khối hệ thống tập tin.\n"
 "\n"
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
@@ -6954,7 +7012,7 @@ msgstr ""
 "\n"
 "Hệ thống tập tin quá nhỏ đối với nhật ký\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -6966,7 +7024,7 @@ msgstr ""
 "nó phải nằm trong phạm vi 1024 đến 10240000 khối\n"
 "nên hủy bỏ.\n"
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
@@ -6974,7 +7032,7 @@ msgstr ""
 "\n"
 "Kích cỡ nhật ký quá lớn đối với hệ thống tập tin.\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
@@ -6987,8 +7045,7 @@ msgstr ""
 #: misc/uuidd.c:49
 #, c-format
 msgid "Usage: %s [-d] [-p pidfile] [-s socketpath] [-T timeout]\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"
+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:51
 #, c-format
@@ -7018,7 +7075,7 @@ msgstr "số lần đọc"
 
 #: misc/uuidd.c:206
 msgid "bad response length"
-msgstr "Ä\90ộ dài trả về không hợp lệ"
+msgstr "Ä\91ộ dài trả về không hợp lệ"
 
 #: misc/uuidd.c:271
 #, c-format
@@ -7126,46 +7183,44 @@ msgid "#\tNum=%llu, Size=%llu, Cursor=%llu, Sorted=%llu\n"
 msgstr "#\tSố=%llu,  Cỡ=%llu, Con trỏ=%llu, Sắp xếp=%llu\n"
 
 #: resize/main.c:49
-#, fuzzy, c-format
+#, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
-"Cách 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ị [-b|-s|kích_cỡ_mới] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "Đang mở rộng bảng nút thông tin"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "Đang định vị lại các khối"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "Đang quét bảng nút thông tin"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "Đang cập nhật các tham chiếu nút thông tin"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "Đang di chuyển bảng nút thông tin"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "Lần qua lạ?!?"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Khởi chạy lần qua %d (tối đa = %lu)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7173,23 +7228,21 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Việc thay đổi kích thước của hệ thống tập tin bigalloc chưa được thử nghiệm "
-"đầy đủ.\n"
-"Tự chịu trách nhiệm nếu muốn dùng!  Dùng tùy chọn ép buộc nếu bạn muốn thực "
-"hiện tiếp.\n"
+"Việc thay đổi kích thước của hệ thống tập tin bigalloc chưa được thử nghiệm đầy đủ.\n"
+"Tự chịu trách nhiệm nếu muốn dùng!  Dùng tùy chọn ép buộc nếu bạn muốn thực hiện tiếp.\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "trong khi mở %s"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "trong khi lấy các thông tin về %s"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7198,30 +7251,30 @@ msgstr ""
 "Trước tiên hãy chạy lệnh “e2fsck -f %s”.\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Ước tính tích cỡ tối thiểu của hệ thống tập tin: %llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Kích cỡ mới không hợp lệ: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 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:528
+#: resize/main.c:534
 #, 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:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "Độ dài stride không hợp lệ"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7232,34 +7285,28 @@ msgstr ""
 "Bạn đã yêu cầu kích cỡ mới %llu khối.\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
-msgstr ""
-
-#: resize/main.c:569
-#, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
-msgstr ""
+msgstr "Không thể đặt hay bỏ đặt tính năng 64bít.\n"
 
 #: resize/main.c:575
-#, fuzzy, c-format
-msgid "Cannot change the 64bit feature while the filesystem is mounted.\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"
+#, c-format
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
+msgstr "Không thể thay đổi tính năng 64bit trên một hệ thống tập tin mà nó lớn hơn 2^32 khối.\n"
 
 #: resize/main.c:581
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
-msgstr ""
+msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
+msgstr "Không thể thay đổi tính năng 64bit khi hệ thống tập tin đã được gắn kết.\n"
 
 #: resize/main.c:587
 #, c-format
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
+msgstr "Vui lòng bật các tính năng mở rộng với tune2fs trước khi bật tính năng 64bit.\n"
+
+#: resize/main.c:593
+#, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
 "\n"
@@ -7267,38 +7314,37 @@ msgstr ""
 "Hệ thống tập tin đã có độ dài %llu (%dk) khối. Không cần làm gì!\n"
 "\n"
 
-#: resize/main.c:594
-#, fuzzy, c-format
+#: resize/main.c:600
+#, c-format
 msgid "The filesystem is already 64-bit.\n"
-msgstr "Hệ thống tập tin đã có nhật ký.\n"
+msgstr "Hệ thống tập tin đã sẵn là 64-bít.\n"
 
-#: resize/main.c:599
-#, fuzzy, c-format
+#: resize/main.c:605
+#, c-format
 msgid "The filesystem is already 32-bit.\n"
-msgstr "Hệ thống tập tin đã có nhật ký.\n"
+msgstr "Hệ thống tập tin đã sẵn là 32-bít.\n"
 
-#: resize/main.c:608
-#, fuzzy, c-format
+#: resize/main.c:613
+#, c-format
 msgid "Converting the filesystem to 64-bit.\n"
-msgstr "Đang đặt giờ kiểm tra hệ thống tập tin lần cuối cùng thành %s\n"
+msgstr "Đang chuyển đổi hệ thống tập tin sang 64-bít.\n"
 
-#: resize/main.c:610
-#, fuzzy, c-format
+#: resize/main.c:615
+#, c-format
 msgid "Converting the filesystem to 32-bit.\n"
-msgstr "Đang đặt giờ kiểm tra hệ thống tập tin lần cuối cùng thành %s\n"
+msgstr "Đang chuyển đổi hệ thống tập tin sang 32-bít.\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, 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"
+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:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "trong khi cố thay đổi kích cỡ %s"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7307,7 +7353,7 @@ msgstr ""
 "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:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7316,22 +7362,19 @@ msgstr ""
 "Hệ thống tập tin nằm trên %s giờ có độ dài %llu (%dk) khối.\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "trong khi cố cắt ngắn %s"
 
 #: resize/online.c:81
 msgid "kernel does not support online resize with sparse_super2"
-msgstr ""
-"Hạt nhân không hỗ trợ tính năng thay đổi kích cỡ trực tuyến với sparse_super2"
+msgstr "hạt nhân không hỗ trợ tính năng thay đổi kích cỡ trực tuyến với sparse_super2"
 
 #: resize/online.c:86
 #, 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:90
 msgid "On-line shrinking not supported"
@@ -7347,9 +7390,7 @@ msgstr "Không đủ khối dự trữ gdt để thay đổi kích thước"
 
 #: resize/online.c:129
 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"
+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:137
 #, c-format
@@ -7376,62 +7417,54 @@ msgstr "Hạt nhân không hỗ trợ tính năng thay đổi kích cỡ trực
 #: resize/online.c:220
 #, 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:230
 msgid "While trying to extend the last group"
 msgstr "Trong khi cố mở rộng nhóm cuối cùng"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Trong khi cố thêm nhóm số %d"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, 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:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "nút thông tin (%llu) phải nhỏ hơn %u"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "nút thông tin (%llu) phải nhỏ hơn %u\n"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "khối dành riêng"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "khối siêu_dữ_liệu"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr "khối siêu dữ liệu mới"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr "Không bao giờ nên xảy ra! Không có sb trong super_sparse bg?\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
-msgstr ""
-"Không bao giờ nên xảy ra! Gặp old_desc không cần trong super_sparse bg?\n"
+msgstr "Không bao giờ nên xảy ra! Gặp old_desc không cần trong super_sparse bg?\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 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"
+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.43.4-WIP"
-msgstr "Thư viện EXT2FS phiên bản 1.42.12"
+msgid "EXT2FS Library version 1.45.3"
+msgstr "Thư viện EXT2FS phiên bản 1.45.3"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -7675,22 +7708,19 @@ 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."
-msgstr "Gặp quá nhiều liên kết mềm"
+msgstr "Gặp quá nhiều liên kết mềm."
 
 #: lib/ext2fs/ext2_err.c:76
 msgid "The callback function will not handle this case"
@@ -7766,7 +7796,7 @@ msgstr "Tập tin ext2 quá lớn"
 
 #: lib/ext2fs/ext2_err.c:94
 msgid "Supplied journal device not a block device"
-msgstr "Áp dụng thiết bị journal không phải thiết bị khối."
+msgstr "Áp dụng thiết bị journal không phải thiết bị khối"
 
 #: lib/ext2fs/ext2_err.c:95
 msgid "Journal superblock not found"
@@ -7778,7 +7808,7 @@ msgstr "Journal phải có ít nhất 1024 khối"
 
 #: lib/ext2fs/ext2_err.c:97
 msgid "Unsupported journal version"
-msgstr "phiên bản journal không được hỗ trợ"
+msgstr "Phiên bản journal không được hỗ trợ"
 
 #: lib/ext2fs/ext2_err.c:98
 msgid "Error loading external journal"
@@ -7842,7 +7872,7 @@ msgstr "TDB: Bản ghi đã sẵn có"
 
 #: lib/ext2fs/ext2_err.c:113
 msgid "TDB: Lock exists on other keys"
-msgstr "TDB: Khoá đã tồn tại trên chìa khoá khác"
+msgstr "TDB: Khóa đã tồn tại trên chìa khóa khác"
 
 #: lib/ext2fs/ext2_err.c:114
 msgid "TDB: Invalid parameter"
@@ -7918,7 +7948,7 @@ msgstr "Chỉ số extent bị hỏng"
 
 #: lib/ext2fs/ext2_err.c:132
 msgid "Corrupt extent"
-msgstr "extent hỏng"
+msgstr "Extent hỏng"
 
 #: lib/ext2fs/ext2_err.c:133
 msgid "No free space in extent map"
@@ -7978,8 +8008,7 @@ 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"
@@ -7994,8 +8023,8 @@ msgid "MMP: device currently active"
 msgstr "MMP: thiết bị hiện thời hoạt động"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
-msgstr "MMP: fsck đang chạy"
+msgid "MMP: e2fsck being run"
+msgstr "MMP: e2fsck đang chạy"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
@@ -8015,11 +8044,11 @@ msgstr "MMP: mở với O_DIRECT gặp lỗi"
 
 #: lib/ext2fs/ext2_err.c:156
 msgid "Block group descriptor size incorrect"
-msgstr "Kích thước bộ mô tả nhóm khối không "
+msgstr "Kích thước bộ mô tả nhóm khối không hợp lệ"
 
 #: lib/ext2fs/ext2_err.c:157
 msgid "Inode checksum does not match inode"
-msgstr "Tổng kiểm nút không khớp với nút "
+msgstr "Tổng kiểm nút không khớp với nút"
 
 #: lib/ext2fs/ext2_err.c:158
 msgid "Inode bitmap checksum does not match bitmap"
@@ -8043,119 +8072,111 @@ msgstr "Tổng kiểm tra khối thuộc tính mở rộng không khớp với k
 
 #: lib/ext2fs/ext2_err.c:163
 msgid "Superblock checksum does not match superblock"
-msgstr "Tổng kiểm siêu khối không khớp với siêu khối "
+msgstr "Tổng kiểm siêu khối không khớp với siêu khối"
 
 #: lib/ext2fs/ext2_err.c:164
 msgid "Unknown checksum algorithm"
-msgstr "Không hiểu thuật toán băm tổng kiểm "
+msgstr "Không hiểu thuật toán tổng kiểm"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr "Tổng kiểm tra khối MMP không khớp với khối MMP"
+msgid "MMP block checksum does not match"
+msgstr "Tổng kiểm tra khối MMP không khớp"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
 msgstr "Tập tin ext2 đã sẵn có rồi"
 
 #: lib/ext2fs/ext2_err.c:167
-#, fuzzy
 msgid "Block bitmap checksum does not match bitmap"
-msgstr "Tổng kiểm Mảng ảnh nút không khớp nhau"
+msgstr "Tổng kiểm mảng ảnh khối không khớp mảng ảnh"
 
 #: lib/ext2fs/ext2_err.c:168
 msgid "Cannot iterate data blocks of an inode containing inline data"
-msgstr ""
+msgstr "Không thể lặp lại các khối dữ liệu của một nút chứa dữ liệu chung dòng"
 
 #: lib/ext2fs/ext2_err.c:169
 msgid "Extended attribute has an invalid name length"
-msgstr ""
+msgstr "Thuộc tính mở rộng có chiều dài tên không hợp lệ"
 
 #: lib/ext2fs/ext2_err.c:170
 msgid "Extended attribute has an invalid value length"
-msgstr ""
+msgstr "Thuộc tính mở rộng có chiều dài giá trị không hợp lệ"
 
 #: lib/ext2fs/ext2_err.c:171
-#, fuzzy
 msgid "Extended attribute has an incorrect hash"
-msgstr "Tổng kiểm tra khối thuộc tính mở rộng không khớp với khối"
+msgstr "Thuộc tính mở rộng có mã băm không đúng"
 
 #: lib/ext2fs/ext2_err.c:172
-#, fuzzy
 msgid "Extended attribute block has a bad header"
-msgstr "Số khối thuộc tính mở rộng không hợp lệ"
+msgstr "Thuộc tính mở rộng có phần đầu sai"
 
 #: lib/ext2fs/ext2_err.c:173
-#, fuzzy
 msgid "Extended attribute key not found"
-msgstr "athuộc tính đã mở rộng"
+msgstr "Không tìm thấy khóa thuộc tính mở rộng"
 
 #: lib/ext2fs/ext2_err.c:174
 msgid "Insufficient space to store extended attribute data"
-msgstr ""
+msgstr "Không đủ khoảng trống để lưu trữ dữ liệu thuộc tính mở rộng"
 
 #: lib/ext2fs/ext2_err.c:175
 msgid "Filesystem is missing ext_attr or inline_data feature"
-msgstr ""
+msgstr "Hệ thống tập tin thiếu tính năng ext_attr hay inline_data"
 
 #: lib/ext2fs/ext2_err.c:176
-#, fuzzy
 msgid "Inode doesn't have inline data"
-msgstr "Inode does not use extents"
+msgstr "Nút không có dữ liệu chung dòng"
 
 #: lib/ext2fs/ext2_err.c:177
 msgid "No block for an inode with inline data"
-msgstr ""
+msgstr "Không khối cho một nút với dữ liệu chung dòng"
 
 #: lib/ext2fs/ext2_err.c:178
-#, fuzzy
 msgid "No free space in inline data"
-msgstr "Không còn khoảng đĩa trống cho mảng extent"
+msgstr "Không còn khoảng trống trong dữ liệu chung dòng"
 
 #: lib/ext2fs/ext2_err.c:179
-#, fuzzy
 msgid "Wrong magic number for extended attribute structure"
-msgstr "Sai số màu nhiệm cho cấu trúc tập tin ext2"
+msgstr "Sai số màu nhiệm cho cấu trúc thuộc tính mở rộng"
 
 #: lib/ext2fs/ext2_err.c:180
 msgid "Inode seems to contain garbage"
-msgstr ""
+msgstr "Nút hình như có chứa rác"
 
 #: lib/ext2fs/ext2_err.c:181
 msgid "Extended attribute has an invalid value offset"
-msgstr ""
+msgstr "Thuộc tính mở rộng có khoảng bù giá trị không hợp lệ"
 
 #: lib/ext2fs/ext2_err.c:182
 msgid "Journal flags inconsistent"
-msgstr ""
+msgstr "Các cờ journal mâu thuẫn nhau"
 
 #: lib/ext2fs/ext2_err.c:183
-#, fuzzy
 msgid "Undo file corrupt"
-msgstr "Thay đổi kích thước nút bị thất bại"
+msgstr "Tập tin undo bị hỏng"
 
 #: lib/ext2fs/ext2_err.c:184
-#, fuzzy
 msgid "Wrong undo file for this filesystem"
-msgstr "Không đủ quyền để thay đổi kích cỡ của hệ thống tập tin"
+msgstr "Tập tin undo sai cho hệ thống tập tin này"
 
 #: lib/ext2fs/ext2_err.c:185
-#, fuzzy
 msgid "File system is corrupted"
-msgstr "Thay đổi kích thước nút bị thất bại"
+msgstr "Hệ thống tập tin bị hỏng"
 
 #: lib/ext2fs/ext2_err.c:186
 msgid "Bad CRC detected in file system"
-msgstr ""
+msgstr "Tìm thấy CRC sai trong hệ thống tập tin"
 
 #: lib/ext2fs/ext2_err.c:187
-#, fuzzy
 msgid "The journal superblock is corrupt"
-msgstr "Siêu khối ext2 bị hỏng"
+msgstr "Siêu khối journal bị hỏng"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "Thay đổi kích thước nút bị thất bại"
+msgstr "Nú bị hỏng"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr "Inode chứa giá trị thuộc tính mở rộng bị sai hỏng"
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8284,12 +8305,12 @@ msgstr "Giá trị số mầu nhiệm sai trong profile_file_data_t"
 #: lib/support/plausible.c:118
 #, c-format
 msgid "\tlast mounted on %s on %s"
-msgstr "\tên lần cuối được gắn vào %s trên %s"
+msgstr "\tlần cuối được gắn vào %s trên %s"
 
 #: lib/support/plausible.c:121
 #, c-format
 msgid "\tlast mounted on %s"
-msgstr "\tên lần cuối được gắn vào %s"
+msgstr "\tlần cuối được gắn vào %s"
 
 #: lib/support/plausible.c:124
 #, c-format
@@ -8345,16 +8366,106 @@ msgid "%s contains a %s file system\n"
 msgstr "%s chứa hệ thống tập tin %s\n"
 
 #: lib/support/plausible.c:276
-#, fuzzy, c-format
+#, c-format
 msgid "%s contains `%s' data\n"
-msgstr "%s chứa hệ thống tập tin %s\n"
+msgstr "%s chứa dữ liệu “%s”\n"
+
+#~ msgid "while opening directory \"%s\""
+#~ msgstr "trong khi mở thư mục \"%s\""
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** Tìm thấy lỗi tổng kiểm trong hệ thống tập tin! Hãy chạy ngay e2fsck!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** Tìm thấy lỗi tổng kiểm trong ảnh bít! Chạy e2fsck ngay!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %s: gặp lỗi khi đọc mảng ảnh: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Cảnh báo: gặp khó khăn trong việc ghi ra các siêu khối.\n"
+
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "i_dir_acl @F %Id, @s số không.\n"
+
+#~ msgid "Journal features:        "
+#~ msgstr "Tính năng nhật ký:       "
+
+#~ msgid "Journal size:             "
+#~ msgstr "Kích cỡ nhật ký:          "
+
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "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"
+
+#~ msgid "Journal checksum type:    crc32\n"
+#~ msgstr "Kiểu tổng kiểm journal:   crc32\n"
+
+#~ msgid ""
+#~ "Journal checksum type:    %s\n"
+#~ "Journal checksum:         0x%08x\n"
+#~ msgstr ""
+#~ "Kiểu tổng kiểm journal:   %s\n"
+#~ "Tổng kiểm journal:        0x%08x\n"
+
+#~ msgid "Journal errno:            %d\n"
+#~ msgstr "Lỗi Journal:              %d\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\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"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "Người dùng nhật ký:       %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning: enabled project without quota together\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Cảnh báo: đã bật dự án mà không có hạn ngạch đi kèm\n"
 
 #~ msgid "Please run e2fsck on the filesystem.\n"
 #~ msgstr "Hãy chạy tiến trình e2fsck trên hệ thống tập tin.\n"
 
-#~ msgid "Invalid quotatype parameter: %s\n"
-#~ msgstr "Tham số kiểu hạn ngạch không hợp lệ: %s\n"
-
 #~ msgid "@i %i has @cion flag set on @f without @cion support.  "
 #~ msgstr "@i %i đặt cờ @c trên @f mà không hỗ trợ khả năng @c."
 
@@ -8398,6 +8509,9 @@ msgstr "%s chứa hệ thống tập tin %s\n"
 #~ msgid "Failed write %s\n"
 #~ msgstr "Lỗi ghi %s\n"
 
+#~ msgid "Invalid quotatype parameter: %s\n"
+#~ msgstr "Tham số kiểu hạn ngạch không hợp lệ: %s\n"
+
 #~ 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"
 
@@ -8416,12 +8530,8 @@ msgstr "%s chứa hệ thống tập tin %s\n"
 #~ msgid "%s is entire device, not just one partition!\n"
 #~ msgstr "%s là toàn bộ thiết bị, không phải chỉ một phân vùng !\n"
 
-#~ msgid ""
-#~ "\b\b\b\b\b\b\b\bCopied %llu / %llu blocks (%llu%%) in %s at %.2f MB/"
-#~ "s       \n"
-#~ msgstr ""
-#~ "\b\b\b\b\b\b\b\bĐã chép %llu / %llu khối (%llu%%) trong %s tốc độ %.2f MB/"
-#~ "s       \n"
+#~ msgid "\b\b\b\b\b\b\b\bCopied %llu / %llu blocks (%llu%%) in %s at %.2f MB/s       \n"
+#~ msgstr "\b\b\b\b\b\b\b\bĐã chép %llu / %llu khối (%llu%%) trong %s tốc độ %.2f MB/s       \n"
 
 #~ msgid ""
 #~ "\n"
@@ -8438,7 +8548,7 @@ msgstr "%s chứa hệ thống tập tin %s\n"
 #~ msgstr "Không thể lấy các thông tin về %s — %s\n"
 
 #~ msgid "Clearing extent flag not supported on %s"
-#~ msgstr "Chức năng x sạch cờ tầm không được hỗ trợ trên %s"
+#~ msgstr "Chức năng xóa sạch cờ tầm không được hỗ trợ trên %s"
 
 #~ msgid ""
 #~ "%s: The combination of flex_bg and\n"
index cebc6a0..500e636 100644 (file)
Binary files a/po/zh_CN.gmo and b/po/zh_CN.gmo differ
index 9cbc69a..7278f47 100644 (file)
@@ -3,6 +3,7 @@
 # Dark Raven <drdarkraven@gmail.com>, 2009.
 # zwpwjwtz <zwpwjwtz@126.com>, 2015.
 # Mingye Wang (Arthur2e5) <arthur200126@gmail.com>, 2016.
+# Boyuan Yang <073plan@gmail.com>, 2019.
 #
 #. 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,
 #. it can expand to either the string "indirect block" (possibly preceded
 #. by the word "double" or "triple"), or the string "block #" immediately
 #. followed by an integer indicating a block sequence number.
-#.  
+#.
+#. Please note that the %-expansion for most e2fsck's problem.c should not
+#. use positional indicators such as %1, since although they look like c-style
+#. format strings, they are NOT c-style format strings, and the positional
+#. indicators (which BTW are GNU extensions and so won't work on other Unix
+#. gettext implementations) won't work with e2fsck's print_e2fsck_message()
+#. function found in e2fsck/message.c
+#.
 #.     %b      <blk>                   block number
 #.     %B      "indirect block" | "block #"<blkcount>  string | string+integer
 #.     %c      <blk2>                  block number
@@ -48,7 +56,7 @@
 #.     %IM     <inode> -> i_mtime
 #.     %IF     <inode> -> i_faddr
 #.     %If     <inode> -> i_file_acl
-#.     %Id     <inode> -> i_dir_acl
+#.     %Id     <inode> -> i_size_high
 #.     %Iu     <inode> -> i_uid
 #.     %Ig     <inode> -> i_gid
 #.     %It     <str>                   file type
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs-1.43.1\n"
+"Project-Id-Version: e2fsprogs-1.45.3\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2017-01-31 17:10-0500\n"
-"PO-Revision-Date: 2016-11-24 23:49-0500\n"
-"Last-Translator: Mingye Wang (Arthur2e5) <arthur200126@gmail.com>\n"
+"POT-Creation-Date: 2019-07-14 20:56-0400\n"
+"PO-Revision-Date: 2019-12-24 10:56-0500\n"
+"Last-Translator: Boyuan Yang <073plan@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 1.8.11\n"
+"X-Generator: Poedit 2.2.4\n"
 "X-Poedit-Bookmarks: -1,591,-1,-1,-1,-1,-1,-1,-1,-1\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:214
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:220
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "坏块 %u 超出范围;已忽略。\n"
@@ -96,11 +104,12 @@ msgstr "进行坏块inode的健全性检查时"
 msgid "while reading the bad blocks inode"
 msgstr "读取坏块inode时"
 
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
-#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
-#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
-#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
-#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1571
+#: e2fsck/unix.c:1685 misc/badblocks.c:1251 misc/badblocks.c:1259
+#: misc/badblocks.c:1273 misc/badblocks.c:1285 misc/dumpe2fs.c:431
+#: misc/dumpe2fs.c:688 misc/dumpe2fs.c:692 misc/e2image.c:1430
+#: misc/e2image.c:1627 misc/e2image.c:1648 misc/mke2fs.c:236
+#: misc/tune2fs.c:2796 misc/tune2fs.c:2895 resize/main.c:414
 #, c-format
 msgid "while trying to open %s"
 msgstr "尝试打开 %s 时"
@@ -110,7 +119,7 @@ msgstr "尝试打开 %s 时"
 msgid "while trying popen '%s'"
 msgstr "尝试管道执行 %s 时"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:237
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:243
 msgid "while reading in list of bad blocks from file"
 msgstr "从文件中读取坏块表时"
 
@@ -123,6 +132,10 @@ msgstr "更新坏块inode时"
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr "警告:在坏块inode中发现非法的块%u。已清除。\n"
 
+#: e2fsck/dirinfo.c:331
+msgid "while freeing dir_info tdb file"
+msgstr "释放 dir_info tdb 文件时"
+
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
@@ -198,12 +211,12 @@ msgstr "不支持对BLKFLSBUF进行 ioctl 调用!  无法刷新缓存。\n"
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "用法:%s [-F] [-I inode缓冲块] 设备\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:1033
+#: e2fsck/iscan.c:81 e2fsck/unix.c:1082
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "打开并刷新 %s 时"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:1039 resize/main.c:382
+#: e2fsck/iscan.c:86 e2fsck/unix.c:1088 resize/main.c:383
 #, c-format
 msgid "while trying to flush %s"
 msgstr "尝试刷新 %s 时"
@@ -213,11 +226,11 @@ msgstr "尝试刷新 %s 时"
 msgid "while trying to open '%s'"
 msgstr "尝试打开 “%s” 时"
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1293
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1323
 msgid "while opening inode scan"
 msgstr "进行inode扫描时"
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1312
+#: e2fsck/iscan.c:127 misc/e2image.c:1342
 msgid "while getting next inode"
 msgstr "获取下一个inode时"
 
@@ -226,358 +239,379 @@ msgstr "获取下一个inode时"
 msgid "%u inodes scanned.\n"
 msgstr "已扫描 %u 个inode。\n"
 
-#: e2fsck/journal.c:593
+#: e2fsck/journal.c:597
 msgid "reading journal superblock\n"
 msgstr "读取日志超级块\n"
 
-#: e2fsck/journal.c:666
+#: e2fsck/journal.c:670
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: 没有发现日志超级块\n"
 
-#: e2fsck/journal.c:675
+#: e2fsck/journal.c:679
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: 日志过短\n"
 
-#: e2fsck/journal.c:968 misc/fuse2fs.c:3791
+#: e2fsck/journal.c:972 misc/fuse2fs.c:3792
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s:正在修复日志\n"
 
-#: e2fsck/journal.c:970
+#: e2fsck/journal.c:974
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s:使用只读模式时不会进行日志修复\n"
 
-#: e2fsck/journal.c:997
+#: e2fsck/journal.c:1001
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "尝试重新打开 %s 时"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:116
 msgid "aextended attribute"
 msgstr "a扩展属性"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:117
 msgid "Aerror allocating"
 msgstr "A分配出错"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:118
 msgid "bblock"
 msgstr "b块"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:119
 msgid "Bbitmap"
 msgstr "B位图"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:120
 msgid "ccompress"
 msgstr "c压缩"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:121
 msgid "Cconflicts with some other fs @b"
 msgstr "C与其他文件系统@b冲突"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:122
 msgid "ddirectory"
 msgstr "d目录"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:123
 msgid "Ddeleted"
 msgstr "D删除"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:124
 msgid "eentry"
 msgstr "e项"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E%p(%i)中的@e “%Dn”"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:126
 msgid "ffilesystem"
 msgstr "f文件系统"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
 msgstr "F关于@i %i (%Q)为"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:128
 msgid "ggroup"
 msgstr "g组"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:129
 msgid "hHTREE @d @i"
 msgstr "hHTREE@d@i"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:130
 msgid "iinode"
 msgstr "iinode"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:131
 msgid "Iillegal"
 msgstr "I非法的"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:132
 msgid "jjournal"
 msgstr "j日志"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:133
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:134
 msgid "Lis a link"
 msgstr "L是一个链接"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:135
 msgid "mmultiply-claimed"
 msgstr "m重复引用的"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:136
 msgid "ninvalid"
 msgstr "n无效的"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:137
 msgid "oorphaned"
 msgstr "o孤立的"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:138
 msgid "pproblem in"
 msgstr "p问题出于"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:139
 msgid "qquota"
 msgstr "q配额"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:140
 msgid "rroot @i"
 msgstr "r根@i"
 
-#: e2fsck/message.c:138
+#: e2fsck/message.c:141
 msgid "sshould be"
 msgstr "s应为"
 
-#: e2fsck/message.c:139
+#: e2fsck/message.c:142
 msgid "Ssuper@b"
 msgstr "S超级@b"
 
-#: e2fsck/message.c:140
+#: e2fsck/message.c:143
 msgid "uunattached"
 msgstr "u独立的"
 
-#: e2fsck/message.c:141
+#: e2fsck/message.c:144
 msgid "vdevice"
 msgstr "v设备"
 
-#: e2fsck/message.c:142
+#: e2fsck/message.c:145
 msgid "xextent"
 msgstr "xextent"
 
-#: e2fsck/message.c:143
+#: e2fsck/message.c:146
 msgid "zzero-length"
 msgstr "z零长度"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The NULL inode>"
 msgstr "<空的 inode>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The bad blocks inode>"
 msgstr "<坏块 inode>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<The user quota inode>"
 msgstr "<用户配额inode>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<The group quota inode>"
 msgstr "<组配额inode>"
 
-#: e2fsck/message.c:159
+#: e2fsck/message.c:162
 msgid "<The boot loader inode>"
 msgstr "<启动器 inode>"
 
-#: e2fsck/message.c:160
+#: e2fsck/message.c:163
 msgid "<The undelete directory inode>"
 msgstr "<未删除的目录 inode>"
 
-#: e2fsck/message.c:161
+#: e2fsck/message.c:164
 msgid "<The group descriptor inode>"
 msgstr "<组描述符inode>"
 
-#: e2fsck/message.c:162
+#: e2fsck/message.c:165
 msgid "<The journal inode>"
 msgstr "<日志 inode>"
 
-#: e2fsck/message.c:163
+#: e2fsck/message.c:166
 msgid "<Reserved inode 9>"
 msgstr "<保留的 inode 9>"
 
-#: e2fsck/message.c:164
+#: e2fsck/message.c:167
 msgid "<Reserved inode 10>"
 msgstr "<保留的 inode 10>"
 
-#: e2fsck/message.c:333
+#: e2fsck/message.c:327
 msgid "regular file"
 msgstr "一般文件"
 
-#: e2fsck/message.c:335
+#: e2fsck/message.c:329
 msgid "directory"
 msgstr "文件夹"
 
-#: e2fsck/message.c:337
+#: e2fsck/message.c:331
 msgid "character device"
 msgstr "字符设备"
 
-#: e2fsck/message.c:339
+#: e2fsck/message.c:333
 msgid "block device"
 msgstr "块设备"
 
-#: e2fsck/message.c:341
+#: e2fsck/message.c:335
 msgid "named pipe"
 msgstr "命名管道"
 
-#: e2fsck/message.c:343
+#: e2fsck/message.c:337
 msgid "symbolic link"
 msgstr "符号链接"
 
-#: e2fsck/message.c:345 misc/uuidd.c:162
+#: e2fsck/message.c:339 misc/uuidd.c:162
 msgid "socket"
 msgstr "套接字"
 
-#: e2fsck/message.c:347
+#: e2fsck/message.c:341
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "模式为 0%o 的未知文件类型"
 
-#: e2fsck/message.c:422
+#: e2fsck/message.c:412
 msgid "indirect block"
 msgstr "链接块"
 
-#: e2fsck/message.c:424
+#: e2fsck/message.c:414
 msgid "double indirect block"
 msgstr "二次链接块"
 
-#: e2fsck/message.c:426
+#: e2fsck/message.c:416
 msgid "triple indirect block"
 msgstr "三次链接块"
 
-#: e2fsck/message.c:428
+#: e2fsck/message.c:418
 msgid "translator block"
 msgstr "翻译块"
 
-#: e2fsck/message.c:430
+#: e2fsck/message.c:420
 msgid "block #"
 msgstr "块 #"
 
+#: e2fsck/message.c:482
+msgid "user"
+msgstr "用户"
+
+#: e2fsck/message.c:485
+msgid "group"
+msgstr "组"
+
+#: e2fsck/message.c:488
+msgid "project"
+msgstr ""
+
+#: e2fsck/message.c:491
+msgid "unknown quota type"
+msgstr "未知配额类型"
+
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
 msgstr "重叠块映射"
 
-#: e2fsck/pass1b.c:645 e2fsck/pass1b.c:793
+#: e2fsck/pass1b.c:672 e2fsck/pass1b.c:826
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr "内部错误:无法找到 %llu 的dup_blk信息\n"
 
-#: e2fsck/pass1b.c:903
+#: e2fsck/pass1b.c:952
 msgid "returned from clone_file_block"
 msgstr "从clone_file_block返回"
 
-#: e2fsck/pass1b.c:927
+#: e2fsck/pass1b.c:976
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr "内部错误:无法查找 %llu 的EA块记录"
 
-#: e2fsck/pass1b.c:939
+#: e2fsck/pass1b.c:988
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "内部错误:无法查找 %u 的EA inode块记录"
 
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
+#: e2fsck/pass1.c:357
+#, c-format
+msgid "while hashing entry with e_value_inum = %u"
+msgstr ""
+
+#: e2fsck/pass1.c:775 e2fsck/pass2.c:1007
 msgid "reading directory block"
 msgstr "正在读取目录块"
 
-#: e2fsck/pass1.c:1112
+#: e2fsck/pass1.c:1224
 msgid "in-use inode map"
 msgstr "使用中的inode映射"
 
-#: e2fsck/pass1.c:1123
+#: e2fsck/pass1.c:1235
 msgid "directory inode map"
 msgstr "目录inode映射"
 
-#: e2fsck/pass1.c:1133
+#: e2fsck/pass1.c:1245
 msgid "regular file inode map"
 msgstr "普通文件inode映射"
 
-#: e2fsck/pass1.c:1142 misc/e2image.c:1268
+#: e2fsck/pass1.c:1254 misc/e2image.c:1282
 msgid "in-use block map"
 msgstr "使用中的块映射"
 
-#: e2fsck/pass1.c:1151
+#: e2fsck/pass1.c:1263
 msgid "metadata block map"
 msgstr "元数据块映射"
 
-#: e2fsck/pass1.c:1213
+#: e2fsck/pass1.c:1325
 msgid "opening inode scan"
 msgstr "开始 inode 扫描"
 
-#: e2fsck/pass1.c:1251
+#: e2fsck/pass1.c:1363
 msgid "getting next inode from scan"
 msgstr "从扫描进度中获取下一个 inode"
 
-#: e2fsck/pass1.c:1936
+#: e2fsck/pass1.c:2067
 msgid "Pass 1"
 msgstr "第 1 步"
 
-#: e2fsck/pass1.c:1997
+#: e2fsck/pass1.c:2128
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "读取inode为 %u 的链接块时"
 
-#: e2fsck/pass1.c:2047
+#: e2fsck/pass1.c:2179
 msgid "bad inode map"
 msgstr "坏块映射"
 
-#: e2fsck/pass1.c:2087
+#: e2fsck/pass1.c:2219
 msgid "inode in bad block map"
 msgstr "更新坏块映射时"
 
-#: e2fsck/pass1.c:2107
+#: e2fsck/pass1.c:2239
 msgid "imagic inode map"
 msgstr "inode的imagic映射"
 
-#: e2fsck/pass1.c:2134
+#: e2fsck/pass1.c:2270
 msgid "multiply claimed block map"
 msgstr "重叠块映射"
 
-#: e2fsck/pass1.c:2248
+#: e2fsck/pass1.c:2395
 msgid "ext attr block map"
 msgstr "扩展属性块映射"
 
-#: e2fsck/pass1.c:3415
+#: e2fsck/pass1.c:3640
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr "%6lu(%c):应为 %6lu 但实际为 %6lu (块 %lld)\n"
 
-#: e2fsck/pass1.c:3830
+#: e2fsck/pass1.c:4060
 msgid "block bitmap"
 msgstr "块位图"
 
-#: e2fsck/pass1.c:3836
+#: e2fsck/pass1.c:4066
 msgid "inode bitmap"
 msgstr "inode 位图"
 
-#: e2fsck/pass1.c:3842
+#: e2fsck/pass1.c:4072
 msgid "inode table"
 msgstr "inode表"
 
-#: e2fsck/pass2.c:287
+#: e2fsck/pass2.c:307
 msgid "Pass 2"
 msgstr "第 2 步"
 
-#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
+#: e2fsck/pass2.c:1079 e2fsck/pass2.c:1246
 msgid "Can not continue."
 msgstr "无法继续。"
 
@@ -597,195 +631,203 @@ msgstr "第 3 步"
 msgid "inode loop detection bitmap"
 msgstr "循环inode检测位图"
 
-#: e2fsck/pass4.c:207
+#: e2fsck/pass4.c:277
 msgid "Pass 4"
 msgstr "第 4 步"
 
-#: e2fsck/pass5.c:81
+#: e2fsck/pass5.c:79
 msgid "Pass 5"
 msgstr "第 5 步"
 
-#: e2fsck/pass5.c:104
+#: e2fsck/pass5.c:102
 msgid "check_inode_bitmap_checksum: Memory allocation error"
 msgstr "check_inode_bitmap_checksum:内存分配出错"
 
-#: e2fsck/pass5.c:158
+#: e2fsck/pass5.c:156
 msgid "check_block_bitmap_checksum: Memory allocation error"
 msgstr "check_block_bitmap_checksum:内存分配出错"
 
-#: e2fsck/problem.c:51
+#: e2fsck/problem.c:52
 msgid "(no prompt)"
 msgstr "(没有提示)"
 
-#: e2fsck/problem.c:52
+#: e2fsck/problem.c:53
 msgid "Fix"
 msgstr "处理"
 
-#: e2fsck/problem.c:53
+#: e2fsck/problem.c:54
 msgid "Clear"
 msgstr "清除"
 
-#: e2fsck/problem.c:54
+#: e2fsck/problem.c:55
 msgid "Relocate"
 msgstr "重定位"
 
-#: e2fsck/problem.c:55
+#: e2fsck/problem.c:56
 msgid "Allocate"
 msgstr "分配"
 
-#: e2fsck/problem.c:56
+#: e2fsck/problem.c:57
 msgid "Expand"
 msgstr "扩充"
 
-#: e2fsck/problem.c:57
+#: e2fsck/problem.c:58
 msgid "Connect to /lost+found"
 msgstr "连接到 /lost+found"
 
-#: e2fsck/problem.c:58
+#: e2fsck/problem.c:59
 msgid "Create"
 msgstr "创建"
 
-#: e2fsck/problem.c:59
+#: e2fsck/problem.c:60
 msgid "Salvage"
 msgstr "修复"
 
-#: e2fsck/problem.c:60
+#: e2fsck/problem.c:61
 msgid "Truncate"
 msgstr "截断"
 
-#: e2fsck/problem.c:61
+#: e2fsck/problem.c:62
 msgid "Clear inode"
 msgstr "清除inode"
 
-#: e2fsck/problem.c:62
+#: e2fsck/problem.c:63
 msgid "Abort"
 msgstr "中断"
 
-#: e2fsck/problem.c:63
+#: e2fsck/problem.c:64
 msgid "Split"
 msgstr "分割"
 
-#: e2fsck/problem.c:64
+#: e2fsck/problem.c:65
 msgid "Continue"
 msgstr "继续"
 
-#: e2fsck/problem.c:65
+#: e2fsck/problem.c:66
 msgid "Clone multiply-claimed blocks"
 msgstr "克隆重叠块"
 
-#: e2fsck/problem.c:66
+#: e2fsck/problem.c:67
 msgid "Delete file"
 msgstr "删除文件"
 
-#: e2fsck/problem.c:67
+#: e2fsck/problem.c:68
 msgid "Suppress messages"
 msgstr "不显示消息"
 
-#: e2fsck/problem.c:68
+#: e2fsck/problem.c:69
 msgid "Unlink"
 msgstr "解除链接"
 
-#: e2fsck/problem.c:69
+#: e2fsck/problem.c:70
 msgid "Clear HTree index"
 msgstr "清除HTree索引"
 
-#: e2fsck/problem.c:70
+#: e2fsck/problem.c:71
 msgid "Recreate"
 msgstr "重建"
 
-#: e2fsck/problem.c:79
+#: e2fsck/problem.c:72
+msgid "Optimize"
+msgstr "优化"
+
+#: e2fsck/problem.c:81
 msgid "(NONE)"
 msgstr "(空)"
 
-#: e2fsck/problem.c:80
+#: e2fsck/problem.c:82
 msgid "FIXED"
 msgstr "已处理"
 
-#: e2fsck/problem.c:81
+#: e2fsck/problem.c:83
 msgid "CLEARED"
 msgstr "已清除"
 
-#: e2fsck/problem.c:82
+#: e2fsck/problem.c:84
 msgid "RELOCATED"
 msgstr "已重定位"
 
-#: e2fsck/problem.c:83
+#: e2fsck/problem.c:85
 msgid "ALLOCATED"
 msgstr "已分配"
 
-#: e2fsck/problem.c:84
+#: e2fsck/problem.c:86
 msgid "EXPANDED"
 msgstr "已扩充"
 
-#: e2fsck/problem.c:85
+#: e2fsck/problem.c:87
 msgid "RECONNECTED"
 msgstr "已重新连接"
 
-#: e2fsck/problem.c:86
+#: e2fsck/problem.c:88
 msgid "CREATED"
 msgstr "已创建"
 
-#: e2fsck/problem.c:87
+#: e2fsck/problem.c:89
 msgid "SALVAGED"
 msgstr "已修复"
 
-#: e2fsck/problem.c:88
+#: e2fsck/problem.c:90
 msgid "TRUNCATED"
 msgstr "截断"
 
-#: e2fsck/problem.c:89
+#: e2fsck/problem.c:91
 msgid "INODE CLEARED"
 msgstr "INODE 已清除"
 
-#: e2fsck/problem.c:90
+#: e2fsck/problem.c:92
 msgid "ABORTED"
 msgstr "已中断"
 
-#: e2fsck/problem.c:91
+#: e2fsck/problem.c:93
 msgid "SPLIT"
 msgstr "分割"
 
-#: e2fsck/problem.c:92
+#: e2fsck/problem.c:94
 msgid "CONTINUING"
 msgstr "继续"
 
-#: e2fsck/problem.c:93
+#: e2fsck/problem.c:95
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
 msgstr "重叠块已克隆"
 
-#: e2fsck/problem.c:94
+#: e2fsck/problem.c:96
 msgid "FILE DELETED"
 msgstr "文件已删除"
 
-#: e2fsck/problem.c:95
+#: e2fsck/problem.c:97
 msgid "SUPPRESSED"
 msgstr "禁止"
 
-#: e2fsck/problem.c:96
+#: e2fsck/problem.c:98
 msgid "UNLINKED"
 msgstr "已解除链接"
 
-#: e2fsck/problem.c:97
+#: e2fsck/problem.c:99
 msgid "HTREE INDEX CLEARED"
 msgstr "HTree索引已清除"
 
-#: e2fsck/problem.c:98
+#: e2fsck/problem.c:100
 msgid "WILL RECREATE"
 msgstr "将会重建"
 
+#: e2fsck/problem.c:101
+msgid "WILL OPTIMIZE"
+msgstr "将会优化"
+
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:110
+#: e2fsck/problem.c:115
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "@g %g 的@b@B并不在 @g 中。(@b %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
-#: e2fsck/problem.c:114
+#: e2fsck/problem.c:119
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
 msgstr "@g %g 的@i@B 并不在 @g 中。(@b %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
-#: e2fsck/problem.c:119
+#: e2fsck/problem.c:124
 msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
@@ -802,7 +844,7 @@ msgstr ""
 #. @-expanded:  or\n
 #. @-expanded:     e2fsck -b 32768 <device>\n
 #. @-expanded: \n
-#: e2fsck/problem.c:125
+#: e2fsck/problem.c:130
 msgid ""
 "\n"
 "The @S could not be read or does not describe a valid ext2/ext3/ext4\n"
@@ -826,7 +868,7 @@ msgstr ""
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
-#: e2fsck/problem.c:136
+#: e2fsck/problem.c:141
 msgid ""
 "The @f size (according to the @S) is %b @bs\n"
 "The physical size of the @v is %c @bs\n"
@@ -839,7 +881,7 @@ msgstr ""
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
 #. @-expanded: from the block size.\n
-#: e2fsck/problem.c:143
+#: e2fsck/problem.c:148
 msgid ""
 "@S @b_size = %b, fragsize = %c.\n"
 "This version of e2fsck does not support fragment sizes different\n"
@@ -850,18 +892,18 @@ msgstr ""
 "@b大小不同。\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
-#: e2fsck/problem.c:150
+#: e2fsck/problem.c:155
 msgid "@S @bs_per_group = %b, should have been %c\n"
 msgstr "每组的@S@b数 = %b,应当为 %c。\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
-#: e2fsck/problem.c:155
+#: e2fsck/problem.c:160
 msgid "@S first_data_@b = %b, should have been %c\n"
 msgstr "@S的第一个数据块 = %b,应当为 %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:160
+#: e2fsck/problem.c:165
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
@@ -869,8 +911,8 @@ msgstr ""
 "@f没有UUID;正在创建新的UUID。\n"
 "\n"
 
-#: e2fsck/problem.c:165
-#, c-format
+#: e2fsck/problem.c:171
+#, no-c-format
 msgid ""
 "Note: if several inode or block bitmap blocks or part\n"
 "of the inode table require relocation, you may wish to try\n"
@@ -886,48 +928,48 @@ msgstr ""
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
-#: e2fsck/problem.c:174
+#: e2fsck/problem.c:180
 msgid "Corruption found in @S.  (%s = %N).\n"
 msgstr "在@S中发现错误。(%s = %N)。\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
-#: e2fsck/problem.c:179
-#, c-format
+#: e2fsck/problem.c:186
+#, no-c-format
 msgid "Error determining size of the physical @v: %m\n"
 msgstr "决定物理@v的大小出错 %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
-#: e2fsck/problem.c:184
+#: e2fsck/problem.c:191
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "@S中的@i个数为 %i,@s %j。\n"
 
-#: e2fsck/problem.c:188
+#: e2fsck/problem.c:195
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd内核不支持文件类型\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
-#: e2fsck/problem.c:193
-#, c-format
+#: e2fsck/problem.c:201
+#, no-c-format
 msgid "@S has an @n @j (@i %i).\n"
 msgstr "@S含有一个@n@j(@i %i)。\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
-#: e2fsck/problem.c:198
+#: e2fsck/problem.c:206
 msgid "External @j has multiple @f users (unsupported).\n"
 msgstr "外部@j含有多个@f用户(不支持此特性)。\n"
 
 #. @-expanded: Can't find external journal\n
-#: e2fsck/problem.c:203
+#: e2fsck/problem.c:211
 msgid "Can't find external @j\n"
 msgstr "无法找到外部@j\n"
 
 #. @-expanded: External journal has bad superblock\n
-#: e2fsck/problem.c:208
+#: e2fsck/problem.c:216
 msgid "External @j has bad @S\n"
 msgstr "外部@j有坏@S\n"
 
 #. @-expanded: External journal does not support this filesystem\n
-#: e2fsck/problem.c:213
+#: e2fsck/problem.c:221
 msgid "External @j does not support this @f\n"
 msgstr "外部@j不支持此@f\n"
 
@@ -935,11 +977,10 @@ msgstr "外部@j不支持此@f\n"
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
-#: e2fsck/problem.c:218
+#: e2fsck/problem.c:226
 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 ""
 "@f@j@S为未知类型 %N(不支持此特性)。\n"
@@ -948,81 +989,81 @@ msgstr ""
 "\n"
 
 #. @-expanded: journal superblock is corrupt.\n
-#: e2fsck/problem.c:226
+#: e2fsck/problem.c:235
 msgid "@j @S is corrupt.\n"
 msgstr "@j@S被损坏。\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal is present.\n
-#: e2fsck/problem.c:231
+#: e2fsck/problem.c:240
 msgid "@S has_@j flag is clear, but a @j is present.\n"
 msgstr "@S不具有has_journal标志,但发现了@j。\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
-#: e2fsck/problem.c:236
+#: e2fsck/problem.c:245
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr "@S被设置了needs_recovery标志,但找不到相应的@j。\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
-#: e2fsck/problem.c:241
+#: e2fsck/problem.c:250
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "@S不具有的恢复标志,然而在@j中找到了恢复数据。\n"
 
 #. @-expanded: Clear journal
-#: e2fsck/problem.c:246
+#: e2fsck/problem.c:255
 msgid "Clear @j"
 msgstr "清除@j"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:251 e2fsck/problem.c:744
+#: e2fsck/problem.c:260 e2fsck/problem.c:796
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr "@f被设置了特性标志,但特性版本号为0。  "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:256
+#: e2fsck/problem.c:265
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "@s@o@i %i(uid=%lu,gid=%lg,mode=%lm,size=%ls)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:261
+#: e2fsck/problem.c:270
 msgid "@I %B (%b) found in @o @i %i.\n"
 msgstr "@o@i %i 中发现 @I %B(%b)。\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:266
+#: e2fsck/problem.c:275
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr "@o@i %i 中发现已清除的 %B(%b)。\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:271
-#, c-format
+#: e2fsck/problem.c:281
+#, no-c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@S中有@I@o@i %i。\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:276
-#, c-format
+#: e2fsck/problem.c:287
+#, no-c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@o@i中发现@I@i %i。\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:281
+#: e2fsck/problem.c:292
 msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr "@j@S被设置了未知的只读属性标签。\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:286
+#: e2fsck/problem.c:297
 msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr "@j@S被设置了未知的不兼容属性标签。\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:291
+#: e2fsck/problem.c:302
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "e2fsck不支持此@j版本。\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:296
-#, c-format
+#: e2fsck/problem.c:308
+#, no-c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
@@ -1032,8 +1073,8 @@ msgstr ""
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:301
-#, c-format
+#: e2fsck/problem.c:314
+#, no-c-format
 msgid ""
 "Error moving @j: %m\n"
 "\n"
@@ -1044,7 +1085,7 @@ msgstr ""
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:306
+#: e2fsck/problem.c:319
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1055,18 +1096,18 @@ msgstr ""
 "\n"
 
 #. @-expanded: Run journal anyway
-#: e2fsck/problem.c:312
+#: e2fsck/problem.c:325
 msgid "Run @j anyway"
 msgstr "强制@j"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:317
+#: e2fsck/problem.c:330
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr "备份@S中未设置恢复标志,继续处理日志。\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:322
+#: e2fsck/problem.c:335
 msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
@@ -1076,7 +1117,7 @@ msgstr ""
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
-#: e2fsck/problem.c:327
+#: e2fsck/problem.c:341
 msgid ""
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
@@ -1085,18 +1126,18 @@ msgstr ""
 "(但实际为%N)。  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
-#: e2fsck/problem.c:333
+#: e2fsck/problem.c:347
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr "不支持更改@i大小,但所给的变更值非零。  "
 
 #. @-expanded: Resize inode not valid.  
-#: e2fsck/problem.c:338
+#: e2fsck/problem.c:352
 msgid "Resize @i not valid.  "
 msgstr "改变@i大小的值无效。"
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:343
+#: e2fsck/problem.c:357
 msgid ""
 "@S last mount time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1106,7 +1147,7 @@ msgstr ""
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
-#: e2fsck/problem.c:348
+#: e2fsck/problem.c:362
 msgid ""
 "@S last write time (%t,\n"
 "\tnow = %T) is in the future.\n"
@@ -1115,14 +1156,14 @@ msgstr ""
 "\t当前:%T)在未来。  \n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
-#: e2fsck/problem.c:352
-#, c-format
+#: e2fsck/problem.c:368
+#, no-c-format
 msgid "@S hint for external superblock @s %X.  "
 msgstr "外部超级块的@S标记@s %X。  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:357
+#: e2fsck/problem.c:373
 msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
@@ -1131,43 +1172,42 @@ msgstr ""
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:378
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
 msgstr "@g描述符 %g 的校验值为%04x,应当为 %04y。  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
-#: e2fsck/problem.c:367
-#, c-format
+#: e2fsck/problem.c:384
+#, no-c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
 msgstr "@g描述符 %g被标记为未初始化,并且没有设定特性。\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:389
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
 msgstr "@g描述符 %g 中的未使用inode数 %b 为无效值。  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:394
 msgid "Last @g @b @B uninitialized.  "
 msgstr "最后一个@g的@b@B未初始化。  "
 
-#: e2fsck/problem.c:382
-#, c-format
+#: e2fsck/problem.c:400
+#, no-c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
 msgstr "日志事务 %i 损坏,撤销过程已终止。\n"
 
-#: e2fsck/problem.c:386
+#: e2fsck/problem.c:405
 msgid "The test_fs flag is set (and ext4 is available).  "
 msgstr "设置了 test_fs 标志(并且ext4可用)。  "
 
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:391
+#: e2fsck/problem.c:410
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "@S上一次挂载时间在未来。\n"
 "\t(相差不到一天,可能是硬件时钟设定错误所致)\n"
@@ -1175,218 +1215,235 @@ msgstr ""
 #. @-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 
 #. @-expanded: set)\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:416
 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)\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)\n"
 msgstr ""
 "@S上一次写入时间在未来。\n"
 "\t(相差不到一天,可能是硬件时钟设定错误所致)\n"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
-#: e2fsck/problem.c:403
+#: e2fsck/problem.c:422
 msgid "One or more @b @g descriptor checksums are invalid.  "
 msgstr "一个或多个@b@g描述符的校验值无效。  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
-#: e2fsck/problem.c:408
+#: e2fsck/problem.c:427
 msgid "Setting free @is count to %j (was %i)\n"
 msgstr "设置未使用的@i数为 %j(曾为%i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
-#: e2fsck/problem.c:413
+#: e2fsck/problem.c:432
 msgid "Setting free @bs count to %c (was %b)\n"
 msgstr "设置未使用的@b数为 %c(曾为%b)\n"
 
-#. @-expanded: Making quota inode %i (%Q) hidden.\n
-#: e2fsck/problem.c:418
-msgid "Making @q @i %i (%Q) hidden.\n"
+#. @-expanded: Hiding %U quota inode %i (%Q).\n
+#: e2fsck/problem.c:437
+#, fuzzy
+#| msgid "Making @q @i %i (%Q) hidden.\n"
+msgid "Hiding %U @q @i %i (%Q).\n"
 msgstr ""
 "将@q@i %i(%Q)标记为隐藏的。\n"
 "\n"
 
 #. @-expanded: superblock has invalid MMP block.  
-#: e2fsck/problem.c:423
+#: e2fsck/problem.c:442
 msgid "@S has invalid MMP block.  "
 msgstr "@S含有无效的MMP块。  "
 
 #. @-expanded: superblock has invalid MMP magic.  
-#: e2fsck/problem.c:428
+#: e2fsck/problem.c:447
 msgid "@S has invalid MMP magic.  "
 msgstr "@S含有无效的MMP幻数。  "
 
-#: e2fsck/problem.c:433
-#, c-format
+#: e2fsck/problem.c:453
+#, no-c-format
 msgid "ext2fs_open2: %m\n"
 msgstr "ext2fs_open2: %m\n"
 
-#: e2fsck/problem.c:438
-#, c-format
+#: e2fsck/problem.c:459
+#, no-c-format
 msgid "ext2fs_check_desc: %m\n"
 msgstr "ext2fs_check_desc: %m\n"
 
 #. @-expanded: superblock metadata_csum supersedes uninit_bg; both feature bits cannot be set 
 #. @-expanded: simultaneously.
-#: e2fsck/problem.c:446
-msgid ""
-"@S metadata_csum supersedes uninit_bg; both feature bits cannot be set "
-"simultaneously."
-msgstr ""
-"@S 的 metadata_csum 特性将取代 uninit_bg 特性,因此不能同时将二者开启。"
+#: e2fsck/problem.c:465
+msgid "@S metadata_csum supersedes uninit_bg; both feature bits cannot be set simultaneously."
+msgstr "@S 的 metadata_csum 特性将取代 uninit_bg 特性,因此不能同时将二者开启。"
 
-#. @-expanded: superblock MMP block checksum does not match MMP block.  
-#: e2fsck/problem.c:452
-msgid "@S MMP block checksum does not match MMP block.  "
-msgstr "@S MMP块校验值与MMP块自身不符。"
+#. @-expanded: superblock MMP block checksum does not match.  
+#: e2fsck/problem.c:471
+msgid "@S MMP @b checksum does not match.  "
+msgstr "@S MMP @b 校验值不符。"
 
-#. @-expanded: superblock 64bit filesystems needs extents to access the whole disk.  
-#: e2fsck/problem.c:457
-msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+#. @-expanded: superblock 64bit filesystem needs extents to access the whole disk.  
+#: e2fsck/problem.c:476
+#, fuzzy
+#| msgid "@S 64bit filesystems needs extents to access the whole disk.  "
+msgid "@S 64bit @f needs extents to access the whole disk.  "
 msgstr "64位文件系统的@S需要extent来访问整个磁盘。  "
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:481
 msgid "First_meta_bg is too big.  (%N, max value %g).  "
 msgstr "第一个meta_bg太大。(%N,最大值 %g)"
 
 #. @-expanded: External journal superblock checksum does not match superblock.  
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:486
 msgid "External @j @S checksum does not match @S.  "
 msgstr "外部@j@S校验值与@S自身不符"
 
 #. @-expanded: superblock metadata_csum_seed is not necessary without metadata_csum.
-#: e2fsck/problem.c:472
+#: e2fsck/problem.c:491
 msgid "@S metadata_csum_seed is not necessary without metadata_csum."
-msgstr ""
-"只有同时开启了@S的 metadata_csum 特性,metadata_csum_seed 特性才有意义。"
+msgstr "只有同时开启了@S的 metadata_csum 特性,metadata_csum_seed 特性才有意义。"
 
-#: e2fsck/problem.c:477
-#, c-format
+#: e2fsck/problem.c:497
+#, no-c-format
 msgid "Error initializing quota context in support library: %m\n"
 msgstr "初始化支持库中的引用上下文时出错:%m\n"
 
 #. @-expanded: Bad required extra isize in superblock (%N).  
-#: e2fsck/problem.c:482
+#: e2fsck/problem.c:502
 msgid "Bad required extra isize in @S (%N).  "
 msgstr ""
 
 #. @-expanded: Bad desired extra isize in superblock (%N).  
-#: e2fsck/problem.c:487
+#: e2fsck/problem.c:507
 msgid "Bad desired extra isize in @S (%N).  "
 msgstr ""
 
+#. @-expanded: Invalid %U quota inode %i.  
+#: e2fsck/problem.c:512
+msgid "Invalid %U @q @i %i.  "
+msgstr "无效的 %U @q @i %i。  "
+
+#. @-expanded: superblock would have too many inodes (%N).\n
+#: e2fsck/problem.c:517
+msgid "@S would have too many inodes (%N).\n"
+msgstr "@S 将含有过多 inode(%N)。\n"
+
+#. @-expanded: Resize_inode and meta_bg features are enabled. Those features are\n
+#. @-expanded: not compatible. Resize inode should be disabled.  
+#: e2fsck/problem.c:522
+msgid ""
+"Resize_@i and meta_bg features are enabled. Those features are\n"
+"not compatible. Resize @i should be disabled.  "
+msgstr ""
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:494
+#: e2fsck/problem.c:530
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "第 1 步:检查@i、@b和大小\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:498
+#: e2fsck/problem.c:534
 msgid "@r is not a @d.  "
 msgstr "@r不是一个@d。  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:503
+#: e2fsck/problem.c:539
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "@r被设置了删除时间(可能由老版本的mke2fs导致)。"
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:508
+#: e2fsck/problem.c:544
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "保留的@i %i(%Q)的模式无效。  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:513
-#, c-format
+#: e2fsck/problem.c:550
+#, no-c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "@D@i %i 的删除时间为零。  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:518
-#, c-format
+#: e2fsck/problem.c:556
+#, no-c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "使用中的@i %i 被设置了删除时间。  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:523
-#, c-format
+#: e2fsck/problem.c:562
+#, no-c-format
 msgid "@i %i is a @z @d.  "
 msgstr "@i %i 为@z@d。  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:567
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "位于 %b 的@g %g的@b@B@C。\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:572
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "位于 %b 的@g %g的@i@B@C。\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:577
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "位于 %b 的@g %g的@i表@C。\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:543
+#: e2fsck/problem.c:582
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "@g %g 的@b@B无效。  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:587
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "@g %g 的@i@B无效。  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:592
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i的大小为 %ls,@s %N。  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:597
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i的i_blocks为 %ls,@s %N。  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:602
 msgid "@I %B (%b) in @i %i.  "
 msgstr "@I %B(%b)于@i %i。  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:607
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "%B(%b)与@i %i 记录元数据的位置重叠。  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:573
-#, c-format
+#: e2fsck/problem.c:613
+#, no-c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "@i %i 中包含非法@b。  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:578
-#, c-format
+#: e2fsck/problem.c:619
+#, no-c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "@i %i 中包含了过多的非法@b。\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
-#: e2fsck/problem.c:583
+#: e2fsck/problem.c:624
 msgid "@I %B (%b) in bad @b @i.  "
 msgstr "@I %B(%b)于坏@b@i。  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:588
+#: e2fsck/problem.c:629
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "坏@b@i含有无效的@b。  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:593
+#: e2fsck/problem.c:634
 msgid "Duplicate or bad @b in use!\n"
 msgstr "使用了重复@b或坏@b!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:598
+#: e2fsck/problem.c:639
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "坏@b %b 被用作坏@b@i的链接@b。  "
 
@@ -1394,7 +1451,7 @@ msgstr "坏@b %b 被用作坏@b@i的链接@b。  "
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:644
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1407,7 +1464,7 @@ msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:610
+#: e2fsck/problem.c:651
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1418,7 +1475,7 @@ msgstr ""
 #. @-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
 #. @-expanded: \n
-#: e2fsck/problem.c:615
+#: e2fsck/problem.c:656
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1429,124 +1486,124 @@ msgstr ""
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:621
+#: e2fsck/problem.c:662
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "主@S(%b)位于坏@b列表中。\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:626
+#: e2fsck/problem.c:667
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr "主@g描述符中的块 %b 位于坏@b列表中\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:632
+#: e2fsck/problem.c:673
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "警告:组 %g 的@S(%b)为坏块。\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:637
+#: e2fsck/problem.c:679
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 "警告:组 %g 描述符的备份含有一个坏@b(%b)。\n"
 "\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:643
+#: e2fsck/problem.c:685
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr "检测到@b #%b 为坏@b,但原因未知(可能是程序错误导致的)。\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:691
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "在@b@g %g 中为 %s 分配 %N 个连续的@b时出错:%m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:654
-#, c-format
+#: e2fsck/problem.c:697
+#, no-c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "重定位 %s 时分配@b缓存出错\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:702
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "正在将@g %g 的 %s 从 %b 重定位至 %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:664
-#, c-format
+#: e2fsck/problem.c:708
+#, no-c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "正在将@g %g 的 %s 重定位至 %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:713
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "警告:无法从%s中读取@b %b:%m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:718
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "警告:无法向%s中写入@b %b:%m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:679 e2fsck/problem.c:1740
+#: e2fsck/problem.c:723 e2fsck/problem.c:1871
 msgid "@A @i @B (%N): %m\n"
 msgstr "分配@i@B(%N)时出错:%m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:728
 msgid "@A @b @B (%N): %m\n"
 msgstr "分配@b@B(%N)时出错:%m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:689
-#, c-format
+#: e2fsck/problem.c:734
+#, no-c-format
 msgid "@A icount link information: %m\n"
 msgstr "分配icount链接信息时出错:%m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:694
-#, c-format
+#: e2fsck/problem.c:740
+#, no-c-format
 msgid "@A @d @b array: %m\n"
 msgstr "分配@d@b数组时出错:%m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:699
-#, c-format
+#: e2fsck/problem.c:746
+#, no-c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "扫描@i(%i)时出错:%m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:704
-#, c-format
+#: e2fsck/problem.c:752
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "迭代@i %i 中的@b时出错:%m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:709
+#: e2fsck/problem.c:757
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr "写入@i计数信息时出错(@i %i,计数=%N):%m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:714
+#: e2fsck/problem.c:762
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr "写入@d@b信息时出错(@i %i,@b %b,数量=%N)\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:720
-#, c-format
+#: e2fsck/problem.c:769
+#, no-c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "读取@i %i出错:%m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:728
-#, c-format
+#: e2fsck/problem.c:778
+#, no-c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "@i %i 被设置了imagic标志。  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:733
-#, c-format
+#: e2fsck/problem.c:784
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
@@ -1555,198 +1612,198 @@ msgstr ""
 "(保护)或 a(仅追加) 标志。  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:739
-#, c-format
+#: e2fsck/problem.c:791
+#, no-c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "特殊文件(@v/套接字/队列)@i %i 为非零大小。  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:801
 msgid "@j @i is not in use, but contains data.  "
 msgstr "@j @i 未被使用,但含有数据。  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:806
 msgid "@j is not regular file.  "
 msgstr "@j不是普通文件。  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:759
-#, c-format
+#: e2fsck/problem.c:812
+#, no-c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "@i %i 位于@o@i列表中。  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:765
+#: e2fsck/problem.c:818
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr "发现了可能属于损坏的孤立链接表的@i。  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:770
+#: e2fsck/problem.c:823
 msgid "@A refcount structure (%N): %m\n"
 msgstr "分配refcount结构体(%N)时出错:%m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:775
+#: e2fsck/problem.c:828
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "读取@i %i 的@a@b %b 时出错。"
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:780
+#: e2fsck/problem.c:833
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "@i %i 有一个 @a@b %b。  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:785
+#: e2fsck/problem.c:838
 msgid "Error reading @a @b %b (%m).  "
 msgstr "读取@a@b %b 时出错(%m)。  "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
-#: e2fsck/problem.c:790
+#: e2fsck/problem.c:843
 msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr "@a@b %b 的引用计数为 %r,@s %N。  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:795
+#: e2fsck/problem.c:848
 msgid "Error writing @a @b %b (%m).  "
 msgstr "写入@a@b %b 时出错(%m)。  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:800
+#: e2fsck/problem.c:853
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "@a@b %b 的h_blocks >1。  "
 
 #. @-expanded: error allocating extended attribute region allocation structure.  
-#: e2fsck/problem.c:805
+#: e2fsck/problem.c:858
 msgid "@A @a region allocation structure.  "
 msgstr "构建外部属性区域的分配结构体时出错。"
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:810
+#: e2fsck/problem.c:863
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "@a@b %b 已损坏(分配冲突)。  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:815
+#: e2fsck/problem.c:868
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "@a@b %b 已损坏(@n名称)。  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:820
+#: e2fsck/problem.c:873
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "@a@b %b 已损坏(@n值)。  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:825
-#, c-format
+#: e2fsck/problem.c:879
+#, no-c-format
 msgid "@i %i is too big.  "
 msgstr "@i %i 过大。  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:829
+#: e2fsck/problem.c:883
 msgid "%B (%b) causes @d to be too big.  "
 msgstr "%B(%b)造成@d过大。  "
 
-#: e2fsck/problem.c:834
+#: e2fsck/problem.c:888
 msgid "%B (%b) causes file to be too big.  "
 msgstr "%B(%b)造成文件过大。  "
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:893
 msgid "%B (%b) causes symlink to be too big.  "
 msgstr "%B(%b)造成符号链接过大。  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:844
-#, c-format
+#: e2fsck/problem.c:899
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr "@i %i 被设置了INDEX_FL标志,但文件系统不支持htree。\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:849
-#, c-format
+#: e2fsck/problem.c:905
+#, no-c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "@i %i 被设置了INDEX_FL标志,但它并非目录。\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:854
-#, c-format
+#: e2fsck/problem.c:911
+#, no-c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "@h %i 有一个@n根节点。\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:859
+#: e2fsck/problem.c:916
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "@h %i 有一个无效的hash版本(%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:864
-#, c-format
+#: e2fsck/problem.c:922
+#, no-c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "@h %i 使用了一个不兼容的htree根节点标志。\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:869
+#: e2fsck/problem.c:927
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "@h %i 树的深度过大(%N)\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:874
+#: e2fsck/problem.c:933
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
 msgstr "坏@b@i含有一个与@f元数据冲突的连接@b(%b)。  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:880
-#, c-format
+#: e2fsck/problem.c:940
+#, no-c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "改变@i大小失败:%m。"
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:885
+#: e2fsck/problem.c:945
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "@i %i 有一个额外的大小 %lS(@n值)\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:890
+#: e2fsck/problem.c:950
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "@i %i 中的@a有一个名称长度%lS(@n值)\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:895
+#: e2fsck/problem.c:955
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "@i %i 中的@a含有一个@n的偏移量(%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:900
+#: e2fsck/problem.c:960
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "@i %i 中的@a含有一个@n的数值块(%N),应当为0\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:905
+#: e2fsck/problem.c:965
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "@i %i 中的@a含有一个@n的大小(%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
-#: e2fsck/problem.c:910
+#: e2fsck/problem.c:970
 msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "@i %i 中的@a有一个@nhash值(%N)\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:915
+#: e2fsck/problem.c:975
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "@i %i 是一个@lt,但它实际上可能是一个目录。\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
-#: e2fsck/problem.c:920
-#, c-format
+#: e2fsck/problem.c:981
+#, no-c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
 msgstr "读取@i %i 中的@x树时出错:%m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
-#: e2fsck/problem.c:925
+#: e2fsck/problem.c:986
 msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
@@ -1756,7 +1813,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:931
+#: e2fsck/problem.c:992
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -1766,7 +1823,7 @@ msgstr ""
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
-#: e2fsck/problem.c:936
+#: e2fsck/problem.c:997
 msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
@@ -1775,31 +1832,31 @@ msgstr ""
 "\t(逻辑块 %c,物理块@b %b,长度 %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
-#: e2fsck/problem.c:941
-#, c-format
+#: e2fsck/problem.c:1003
+#, no-c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
 msgstr "@i %i 被设置了EXTENTS_FL标志,但文件系统不支持extent。\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
-#: e2fsck/problem.c:946
-#, c-format
+#: e2fsck/problem.c:1009
+#, no-c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
 msgstr "@i %i 为extent格式,但@S不具有EXTENTS特性\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
-#: e2fsck/problem.c:951
-#, c-format
+#: e2fsck/problem.c:1015
+#, no-c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
 msgstr "@i %i 不具有EXTENT_FL标志,但却为EXTENTS格式\n"
 
-#: e2fsck/problem.c:956
-#, c-format
+#: e2fsck/problem.c:1021
+#, no-c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
 msgstr "直接符号链接 %i 被设置了EXTENT_FL标志。  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:961
+#: e2fsck/problem.c:1026
 msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
@@ -1808,39 +1865,39 @@ msgstr ""
 "\t(@n 逻辑@b %c,物理@b %b,长度 %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
-#: e2fsck/problem.c:965
+#: e2fsck/problem.c:1030
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr "@i %i 是一个无效的extent节点(块 %b,lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
-#: e2fsck/problem.c:970
-#, c-format
+#: e2fsck/problem.c:1036
+#, no-c-format
 msgid "Error converting subcluster @b @B: %m\n"
 msgstr "转换子簇的@d@b时出错:%m\n"
 
-#. @-expanded: quota inode is not regular file.  
-#: e2fsck/problem.c:975
-msgid "@q @i is not regular file.  "
-msgstr "@q@i不是普通文件。  "
+#. @-expanded: quota inode is not regular file.  
+#: e2fsck/problem.c:1041
+msgid "@q @i is not regular file.  "
+msgstr "@q @i 不是普通文件。  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
-#: e2fsck/problem.c:980
+#: e2fsck/problem.c:1046
 msgid "@q @i is not in use, but contains data.  "
 msgstr "@q @i 未被使用,但含有数据。  "
 
 #. @-expanded: quota inode is visible to the user.  
-#: e2fsck/problem.c:985
+#: e2fsck/problem.c:1051
 msgid "@q @i is visible to the user.  "
 msgstr "使用中的@q@i被对用户可见。  "
 
 #. @-expanded: The bad block inode looks invalid.  
-#: e2fsck/problem.c:990
+#: e2fsck/problem.c:1056
 msgid "The bad @b @i looks @n.  "
 msgstr "坏@b@i似乎是@n。  "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
-#: e2fsck/problem.c:995
+#: e2fsck/problem.c:1061
 msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
@@ -1849,26 +1906,26 @@ msgstr ""
 "\t(@n 逻辑@b %c,物理@b %b)\n"
 
 #. @-expanded: inode %i seems to contain garbage.  
-#: e2fsck/problem.c:1000
-#, c-format
+#: e2fsck/problem.c:1067
+#, no-c-format
 msgid "@i %i seems to contain garbage.  "
 msgstr "@i %i 含有无效数据。"
 
 #. @-expanded: inode %i passes checks, but checksum does not match inode.  
-#: e2fsck/problem.c:1005
-#, c-format
+#: e2fsck/problem.c:1073
+#, no-c-format
 msgid "@i %i passes checks, but checksum does not match @i.  "
 msgstr "@i %i 通过检验,但其校验值与自身不符。"
 
 #. @-expanded: inode %i extended attribute is corrupt (allocation collision).  
-#: e2fsck/problem.c:1010
-#, c-format
+#: e2fsck/problem.c:1079
+#, no-c-format
 msgid "@i %i @a is corrupt (allocation collision).  "
 msgstr "@i %i @a 已损坏(分配冲突)。  "
 
 #. @-expanded: inode %i extent block passes checks, but checksum does not match extent\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1018
+#: e2fsck/problem.c:1087
 msgid ""
 "@i %i extent block passes checks, but checksum does not match extent\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1877,13 +1934,13 @@ msgstr ""
 "\t(逻辑@b %c,物理@b %b,长度 %N)\n"
 
 #. @-expanded: inode %i extended attribute block %b passes checks, but checksum does not match block.  
-#: e2fsck/problem.c:1027
+#: e2fsck/problem.c:1096
 msgid "@i %i @a @b %b passes checks, but checksum does not match @b.  "
 msgstr "@i %i 的@a @b %b 通过检验,但其校验值与自身不符。"
 
 #. @-expanded: Interior extent node level %N of inode %i:\n
 #. @-expanded: Logical start %b does not match logical start %c at next level.  
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1101
 msgid ""
 "Interior @x node level %N of @i %i:\n"
 "Logical start %b does not match logical start %c at next level.  "
@@ -1893,7 +1950,7 @@ msgstr ""
 
 #. @-expanded: inode %i, end of extent exceeds allowed value\n
 #. @-expanded: \t(logical block %c, physical block %b, len %N)\n
-#: e2fsck/problem.c:1040
+#: e2fsck/problem.c:1107
 msgid ""
 "@i %i, end of extent exceeds allowed value\n"
 "\t(logical @b %c, physical @b %b, len %N)\n"
@@ -1902,37 +1959,37 @@ msgstr ""
 "\t(逻辑@b %c,物理块@b %b,长度 %N)\n"
 
 #. @-expanded: inode %i has inline data, but superblock is missing INLINE_DATA feature\n
-#: e2fsck/problem.c:1045
-#, c-format
+#: e2fsck/problem.c:1113
+#, no-c-format
 msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
 msgstr "@i %i 含有内联数据,但@S不具有 INLINE_DATA 特性\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag on filesystem without inline data support.\n
-#: e2fsck/problem.c:1050
-#, c-format
+#: e2fsck/problem.c:1119
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag on @f without inline data support.\n"
 msgstr "@i %i 被设置了 INLINE_DATA_FL 标志,但文件系统不支持内联数据。\n"
 
 #. @-expanded: inode %i block %b conflicts with critical metadata, skipping block checks.\n
-#: e2fsck/problem.c:1058
-msgid ""
-"@i %i block %b conflicts with critical metadata, skipping block checks.\n"
+#: e2fsck/problem.c:1127
+#, no-c-format
+msgid "@i %i block %b conflicts with critical metadata, skipping block checks.\n"
 msgstr "@i %i 块 %b 与关键元数据冲突,跳过对块的检查。\n"
 
 #. @-expanded: directory inode %i block %b should be at block %c.  
-#: e2fsck/problem.c:1063
+#: e2fsck/problem.c:1132
 msgid "@d @i %i @b %b should be at @b %c.  "
 msgstr "@d@i %i @b %b 应为@b %c。  "
 
 #. @-expanded: directory inode %i has extent marked uninitialized at block %c.  
-#: e2fsck/problem.c:1068
-#, c-format
+#: e2fsck/problem.c:1138
+#, no-c-format
 msgid "@d @i %i has @x marked uninitialized at @b %c.  "
 msgstr "@d@i %i 含有被标记为未初始化的@x,位于@b %c。  "
 
 #. @-expanded: inode %i logical block %b (physical block %c) violates cluster allocation rules.\n
 #. @-expanded: Will fix in pass 1B.\n
-#: e2fsck/problem.c:1073
+#: e2fsck/problem.c:1143
 msgid ""
 "@i %i logical @b %b (physical @b %c) violates cluster allocation rules.\n"
 "Will fix in pass 1B.\n"
@@ -1941,15 +1998,15 @@ msgstr ""
 "将会在第 1B 步中进行修复。\n"
 
 #. @-expanded: inode %i has INLINE_DATA_FL flag but extended attribute not found.  
-#: e2fsck/problem.c:1078
-#, c-format
+#: e2fsck/problem.c:1149
+#, no-c-format
 msgid "@i %i has INLINE_DATA_FL flag but @a not found.  "
 msgstr "@i %i 被设置了INDEX_DATA_FL标志,但找不到相应的@a。"
 
 #. @-expanded: Special (device/socket/fifo) file (inode %i) has extents\n
 #. @-expanded: or inline-data flag set.  
-#: e2fsck/problem.c:1083
-#, c-format
+#: e2fsck/problem.c:1156
+#, no-c-format
 msgid ""
 "Special (@v/socket/fifo) file (@i %i) has extents\n"
 "or inline-data flag set.  "
@@ -1958,42 +2015,42 @@ msgstr ""
 "extents 或内联数据标志。"
 
 #. @-expanded: inode %i has extent header but inline data flag is set.\n
-#: e2fsck/problem.c:1089
-#, c-format
+#: e2fsck/problem.c:1163
+#, no-c-format
 msgid "@i %i has @x header but inline data flag is set.\n"
 msgstr "@i %i 含有@x头部,但被设置了内联数据标志。\n"
 
 #. @-expanded: inode %i seems to have inline data but extent flag is set.\n
-#: e2fsck/problem.c:1094
-#, c-format
+#: e2fsck/problem.c:1169
+#, no-c-format
 msgid "@i %i seems to have inline data but @x flag is set.\n"
 msgstr "@i %i 似乎含有内联数据,但被设置了@x标志。\n"
 
 #. @-expanded: inode %i seems to have block map but inline data and extent flags set.\n
-#: e2fsck/problem.c:1099
-#, c-format
+#: e2fsck/problem.c:1175
+#, no-c-format
 msgid "@i %i seems to have @b map but inline data and @x flags set.\n"
 msgstr "@i %i 似乎含有@b位图,但被设置了内联数据标志和@x标志。\n"
 
 #. @-expanded: inode %i has inline data and extent flags set but i_block contains junk.\n
-#: e2fsck/problem.c:1104
-#, c-format
+#: e2fsck/problem.c:1181
+#, no-c-format
 msgid "@i %i has inline data and @x flags set but i_block contains junk.\n"
 msgstr "@i %i 含有内联数据且被设置了@x标志,但 i_block 中含有无效数据。\n"
 
 #. @-expanded: Bad block list says the bad block list inode is bad.  
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1186
 msgid "Bad block list says the bad block list @i is bad.  "
 msgstr "坏块列表中的数据表明,坏块列表@i 已损坏。"
 
 #. @-expanded: error allocating extent region allocation structure.  
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1191
 msgid "@A @x region allocation structure.  "
 msgstr "构建extent区域的分配结构体时出错。"
 
 #. @-expanded: inode %i has a duplicate extent mapping\n
 #. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1196
 msgid ""
 "@i %i has a duplicate @x mapping\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
@@ -2002,37 +2059,57 @@ msgstr ""
 "\t(逻辑块 %c,@n物理块@b %b,长度 %N)\n"
 
 #. @-expanded: error allocating memory for encrypted directory list\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1201
 msgid "@A memory for encrypted @d list\n"
 msgstr "为加密@d列表分配内存时出错\n"
 
 #. @-expanded: inode %i extent tree could be more shallow (%b; could be <= %c)\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1206
 msgid "@i %i @x tree could be more shallow (%b; could be <= %c)\n"
 msgstr "@i %i @x树的深度可以更小(当前为%b;可以 <= %c)\n"
 
 #. @-expanded: inode %i on bigalloc filesystem cannot be block mapped.  
-#: e2fsck/problem.c:1134
-#, c-format
+#: e2fsck/problem.c:1212
+#, no-c-format
 msgid "@i %i on bigalloc @f cannot be @b mapped.  "
 msgstr "位于 bigalloc @f 的@i %i on bigalloc @f 无法被@b映射。"
 
 #. @-expanded: inode %i has corrupt extent header.  
-#: e2fsck/problem.c:1139
-#, c-format
+#: e2fsck/problem.c:1218
+#, no-c-format
 msgid "@i %i has corrupt @x header.  "
 msgstr "@i %i 含有损坏的@x头部。"
 
 #. @-expanded: Timestamp(s) on inode %i beyond 2310-04-04 are likely pre-1970.\n
-#: e2fsck/problem.c:1144
-#, c-format
+#: e2fsck/problem.c:1224
+#, no-c-format
 msgid "Timestamp(s) on @i %i beyond 2310-04-04 are likely pre-1970.\n"
 msgstr "@i %i 的时间戳超过了 2310-04-04,可能应为 1970 年之前。\n"
 
+#. @-expanded: inode %i has illegal extended attribute value inode %N.\n
+#: e2fsck/problem.c:1229
+msgid "@i %i has @I @a value @i %N.\n"
+msgstr "@i %i 有一个 @I @a 值 @i %N。\n"
+
+#. @-expanded: inode %i has invalid extended attribute. EA inode %N missing EA_INODE flag.\n
+#: e2fsck/problem.c:1235
+#, fuzzy
+#| msgid "@i %i has inline data, but @S is missing INLINE_DATA feature\n"
+msgid "@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"
+msgstr "@i %i 含有内联数据,但@S不具有 INLINE_DATA 特性\n"
+
+#. @-expanded: EA inode %N for parent inode %i missing EA_INODE flag.\n
+#. @-expanded:  
+#: e2fsck/problem.c:1240
+msgid ""
+"EA @i %N for parent @i %i missing EA_INODE flag.\n"
+" "
+msgstr ""
+
 #. @-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
-#: e2fsck/problem.c:1151
+#: e2fsck/problem.c:1248
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -2043,46 +2120,46 @@ msgstr ""
 "第 1B 步:重新扫描@m @b\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:1157
-#, c-format
+#: e2fsck/problem.c:1255
+#, no-c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "@m@b位于@i %i:"
 
-#: e2fsck/problem.c:1172
-#, c-format
+#: e2fsck/problem.c:1271
+#, no-c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "扫描Inode(%i\\)时出错:%m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:1177
-#, c-format
+#: e2fsck/problem.c:1277
+#, no-c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "分配@i@B时出错(inode_dup_map):%m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:1182
-#, c-format
+#: e2fsck/problem.c:1283
+#, no-c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "迭代@i %i中的@b时出错(%s):%m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:1187 e2fsck/problem.c:1549
+#: e2fsck/problem.c:1288 e2fsck/problem.c:1663
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr "为@aB %b(@i %i)调整refcount时出错:%m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:1197
+#: e2fsck/problem.c:1298
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "第 1C 步:扫描含有@m@b的目录@i\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:1203
+#: e2fsck/problem.c:1304
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "第 1C 步:调整@m@b\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:1208
+#: e2fsck/problem.c:1309
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
@@ -2091,18 +2168,18 @@ msgstr ""
 "与 %N 个文件共享 %r 个@m@b\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:1214
+#: e2fsck/problem.c:1315
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q(@i #%i,修改时间 %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:1219
+#: e2fsck/problem.c:1320
 msgid "\t<@f metadata>\n"
 msgstr "\t<@f元数据>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1224
+#: e2fsck/problem.c:1325
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -2112,7 +2189,7 @@ msgstr ""
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1229
+#: e2fsck/problem.c:1330
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -2120,345 +2197,347 @@ msgstr ""
 "@m@b已被重新分配或克隆。\n"
 "\n"
 
-#: e2fsck/problem.c:1242
-#, c-format
+#: e2fsck/problem.c:1344
+#, no-c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "无法克隆文件:%m\n"
 
 #. @-expanded: Pass 1E: Optimizing extent trees\n
-#: e2fsck/problem.c:1248
+#: e2fsck/problem.c:1350
 msgid "Pass 1E: Optimizing @x trees\n"
 msgstr "第 1E 步:优化@x树\n"
 
 #. @-expanded: Failed to optimize extent tree %p (%i): %m\n
-#: e2fsck/problem.c:1253
-#, c-format
+#: e2fsck/problem.c:1356
+#, no-c-format
 msgid "Failed to optimize @x tree %p (%i): %m\n"
 msgstr "优化@x树 %p(%i)失败:%m\n"
 
 #. @-expanded: Optimizing extent trees: 
-#: e2fsck/problem.c:1258
+#: e2fsck/problem.c:1361
 msgid "Optimizing @x trees: "
 msgstr "优化@x树:"
 
-#: e2fsck/problem.c:1273
+#: e2fsck/problem.c:1376
 msgid "Internal error: max extent tree depth too large (%b; expected=%c).\n"
 msgstr "内部错误:extent树的最大深度过大(当前为 %b;应为 %c)。\n"
 
 #. @-expanded: inode %i extent tree (at level %b) could be shorter.  
-#: e2fsck/problem.c:1278
+#: e2fsck/problem.c:1381
 msgid "@i %i @x tree (at level %b) could be shorter.  "
 msgstr "@i %i 的@x树(位于第 %b 层)的深度可以更小。"
 
 #. @-expanded: inode %i extent tree (at level %b) could be narrower.  
-#: e2fsck/problem.c:1283
+#: e2fsck/problem.c:1386
 msgid "@i %i @x tree (at level %b) could be narrower.  "
 msgstr "@i %i 的@x树(位于第 %b 层)可以更窄。"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 msgid "Pass 2: Checking @d structure\n"
 msgstr "第 2 步:检查目录结构\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:1295
-#, c-format
+#: e2fsck/problem.c:1399
+#, no-c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "@d@i %i 中“.”的@n@i编号无效。\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1404
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E含有@n@i #:%Di\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:1305
+#: e2fsck/problem.c:1409
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E含有@D或未使用的@ %Di。  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1414
 msgid "@E @L to '.'  "
 msgstr "@E是一个指向“.”的链接"
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:1315
+#: e2fsck/problem.c:1419
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E指向位于坏@b的@i(%Di)。\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:1320
+#: e2fsck/problem.c:1424
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E是一个指向@d %P(%Di)的链接。\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:1325
+#: e2fsck/problem.c:1429
 msgid "@E @L to the @r.\n"
 msgstr "@E是一个指向@r的链接。\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:1330
+#: e2fsck/problem.c:1434
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E的名称中有无效字符。\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:1335
-#, c-format
+#: e2fsck/problem.c:1440
+#, no-c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "@d@i %i 中缺少“.”。\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:1340
-#, c-format
+#: e2fsck/problem.c:1446
+#, no-c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "@d@i %i 中缺少“..”。\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:1345
+#: e2fsck/problem.c:1451
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "@d@i %i 中的第一个@e“%Dn”(@i=%Di)@s“.”\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:1350
+#: e2fsck/problem.c:1456
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "@d@i %i 中的第二个@e“%Dn”(@i=%Di)@s“..”\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:1355
+#: e2fsck/problem.c:1461
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "@i %i (%Q)的i_faddr为 %IF,@s0。\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:1360
+#: e2fsck/problem.c:1466
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "@i %i (%Q)的i_file_acl为 %IF,@s0。\n"
 
-#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:1365
-msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "@i %i (%Q)的i_dir_acl为 %ld,@s0。\n"
+#. @-expanded: i_size_high for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1471
+#, fuzzy
+#| msgid "i_fsize @F %N, @s zero.\n"
+msgid "i_size_high @F %Id, @s zero.\n"
+msgstr "@i %i (%Q)的i_size为 %N,@s0。\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1370
+#: e2fsck/problem.c:1476
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "@i %i (%Q)的i_frag为 %N,@s0。\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1481
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "@i %i (%Q)的i_size为 %N,@s0。\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1486
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "@i %i(%Q)有@n模式 (%Im)。\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1491
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr "@d@i %i,%B,偏移量 %N:@d已损坏\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1496
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr "@d@i %i,%B,偏移量 %N:文件名过长\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1501
 msgid "@d @i %i has an unallocated %B.  "
 msgstr "@d@i %i 含有未分配的 %B。  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1400
-#, c-format
+#: e2fsck/problem.c:1507
+#, no-c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "@d@i %i 中的“.”@d@e 没有以NULL终止\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:1405
-#, c-format
+#: e2fsck/problem.c:1513
+#, no-c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "@d@i %i 中的“..”@d@e 没有以NULL终止\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1518
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "@i %i(%Q)是一个@I的字符@v。\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1523
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "@i %i(%Q)是一个@I的@b@v。\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1528
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E为重复的“.”目录@e。\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1533
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E为重复的“..”目录@e。\n"
 
-#: e2fsck/problem.c:1430 e2fsck/problem.c:1765
-#, c-format
+#: e2fsck/problem.c:1539 e2fsck/problem.c:1898
+#, no-c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "内部错误:无法找到 %i 的dir_info。\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1544
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E的rec_len为 %Dr,@s %N。\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1440
-#, c-format
+#: e2fsck/problem.c:1550
+#, no-c-format
 msgid "@A icount structure: %m\n"
 msgstr "分配icount结构体时出错:%m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1445
-#, c-format
+#: e2fsck/problem.c:1556
+#, no-c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "迭代@d@b时出错:%m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1561
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "读取@d@b %b(@i %i)时出错:%m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1566
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "写入@d@b %b(@i %i)时出错:%m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1460
-#, c-format
+#: e2fsck/problem.c:1572
+#, no-c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "为@i %i(%s)分配新@d@b时出错:%m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1465
-#, c-format
+#: e2fsck/problem.c:1578
+#, no-c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "取消分配@i %i时出错:%m\n"
 
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
-#: e2fsck/problem.c:1470
-#, c-format
+#: e2fsck/problem.c:1584
+#, no-c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "%p(%i)中“.”的@d@e太大。\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1589
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "@i %i(%Q)是一个@I队列。\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1594
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "@i %i(%Q)是一个@I套接字。\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1485
+#: e2fsck/problem.c:1599
 msgid "Setting filetype for @E to %N.\n"
 msgstr "将@E的文件类型设置为 %N。\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1604
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E含有错误的文件类型(%Dt,@s %N)。\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1495
+#: e2fsck/problem.c:1609
 msgid "@E has filetype set.\n"
 msgstr "@E被设置了文件类型。\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1500
+#: e2fsck/problem.c:1614
 msgid "@E has a @z name.\n"
 msgstr "@E含有长度为零的名称。\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1505
+#: e2fsck/problem.c:1619
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "符号链接 %Q(@i #%i)无效。\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1510
+#: e2fsck/problem.c:1624
 msgid "@a @b @F @n (%If).\n"
 msgstr "@i %i 的@a@b无效(%lf)。\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1515
+#: e2fsck/problem.c:1629
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr "@f含有大文件,但@S中未设置LARGE_FILE标志。\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
-#: e2fsck/problem.c:1520
+#: e2fsck/problem.c:1634
 msgid "@p @h %d: %B not referenced\n"
 msgstr "@h %d 中发现问题:%B\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
-#: e2fsck/problem.c:1525
+#: e2fsck/problem.c:1639
 msgid "@p @h %d: %B referenced twice\n"
 msgstr "@h %d 中发现问题:%B 被引用了两次\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
-#: e2fsck/problem.c:1530
+#: e2fsck/problem.c:1644
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr "@h %d 中发现问题:%B 含有错误的最小hash值\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
-#: e2fsck/problem.c:1535
+#: e2fsck/problem.c:1649
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr "@h %d 中发现问题:%B 含有错误的最大hash值\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1540
+#: e2fsck/problem.c:1654
 msgid "@n @h %d (%q).  "
 msgstr "@n@h %d(%q)。  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1658
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@h %d(%q)中发现问题:@b编号 %b 无效。\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1554
-#, c-format
+#: e2fsck/problem.c:1669
+#, no-c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p@h %d:结点@n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
-#: e2fsck/problem.c:1559
+#: e2fsck/problem.c:1674
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr "@h %d 中发现问题:%B 含有@n限制(%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
-#: e2fsck/problem.c:1564
+#: e2fsck/problem.c:1679
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr "@h %d 中发现问题:%B 含有@n计数(%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
-#: e2fsck/problem.c:1569
+#: e2fsck/problem.c:1684
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr "@h %d 中发现问题:%B 含有未排序的hash表\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
-#: e2fsck/problem.c:1574
+#: e2fsck/problem.c:1689
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr "@h %d 中发现问题:%B 含有@n深度(%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1579
+#: e2fsck/problem.c:1694
 msgid "Duplicate @E found.  "
 msgstr "发现%p(%i)中有重复项“%Dn”。  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1584
+#: e2fsck/problem.c:1699
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2470,7 +2549,7 @@ msgstr ""
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1589
+#: e2fsck/problem.c:1704
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2481,155 +2560,156 @@ msgstr ""
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1594
+#: e2fsck/problem.c:1709
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "@i %i(%Q)的i_blocks_hi为 %N,@s0。\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
-#: e2fsck/problem.c:1599
+#: e2fsck/problem.c:1714
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr "@h %d(%q)中有额外的@b。\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
-#: e2fsck/problem.c:1603
+#: e2fsck/problem.c:1719
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr "@E引用了@g %g 中的@i %Di,但该@g被设置了_INODE_UNINIT标志。  \n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
-#: e2fsck/problem.c:1608
+#: e2fsck/problem.c:1724
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr "@E引用了@g %g 中的@i %Di,但该@i位于未使用inode区。  \n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1729
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr "@i %i (%Q)的i_file_acl_hi为 %N,@s0。\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node fails checksum.\n
-#: e2fsck/problem.c:1618
-#, c-format
+#: e2fsck/problem.c:1735
+#, no-c-format
 msgid "@p @h %d: root node fails checksum.\n"
 msgstr "@p@h %d:根结点的校验值错误。\n"
 
 #. @-expanded: problem in HTREE directory inode %d: internal node fails checksum.\n
-#: e2fsck/problem.c:1623
-#, c-format
+#: e2fsck/problem.c:1741
+#, no-c-format
 msgid "@p @h %d: internal node fails checksum.\n"
 msgstr "@p@h %d:内部结点的校验值错误。\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory has no checksum.\n
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1746
 msgid "@d @i %i, %B, offset %N: @d has no checksum.\n"
 msgstr "@d@i %i,%B,偏移量 %N:@d缺少校验值。\n"
 
 #. @-expanded: directory inode %i, %B: directory passes checks but fails checksum.\n
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1751
 msgid "@d @i %i, %B: @d passes checks but fails checksum.\n"
 msgstr "@d@i %i,%B:@d通过了检验,但校验值错误。\n"
 
 #. @-expanded: Inline directory inode %i size (%N) must be a multiple of 4.\n
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1756
 msgid "Inline @d @i %i size (%N) must be a multiple of 4.\n"
 msgstr "内联@d @i %i 的大小(%N)必须为4的整数倍。\n"
 
 #. @-expanded: Fixing size of inline directory inode %i failed.\n
-#: e2fsck/problem.c:1643
-#, c-format
+#: e2fsck/problem.c:1762
+#, no-c-format
 msgid "Fixing size of inline @d @i %i failed.\n"
 msgstr "修复内联@d @i %i 的大小失败。\n"
 
 #. @-expanded: Encrypted entry '%Dn' in %p (%i) is too short.\n
-#: e2fsck/problem.c:1648
+#: e2fsck/problem.c:1767
 msgid "Encrypted @E is too short.\n"
 msgstr "加密的@E太短。\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1655
+#: e2fsck/problem.c:1774
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "第 3 步:检查目录连接性\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1660
+#: e2fsck/problem.c:1779
 msgid "@r not allocated.  "
 msgstr "@r未被分配。  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1665
+#: e2fsck/problem.c:1784
 msgid "No room in @l @d.  "
 msgstr "@l@d中没有空间。  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1670
-#, c-format
+#: e2fsck/problem.c:1790
+#, no-c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "未被连接的@d@i %i(%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1675
+#: e2fsck/problem.c:1795
 msgid "/@l not found.  "
 msgstr "/@l未找到。"
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1680
+#: e2fsck/problem.c:1800
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "%Q(%i)中的“..”为 %P(%j),@s %q(%d)\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1685
+#: e2fsck/problem.c:1806
+#, no-c-format
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "错误或不存在的/@l。无法重新连接。\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1690
-#, c-format
+#: e2fsck/problem.c:1812
+#, no-c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "无法扩充/@l:%m\n"
 
-#: e2fsck/problem.c:1695
-#, c-format
+#: e2fsck/problem.c:1818
+#, no-c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "无法重新连接%i:%m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1700
-#, c-format
+#: e2fsck/problem.c:1824
+#, no-c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "尝试查找/@l时出错:%m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1705
-#, c-format
+#: e2fsck/problem.c:1830
+#, no-c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block:尝试创建/@l@d时%m\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1710
-#, c-format
+#: e2fsck/problem.c:1836
+#, no-c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode:尝试创建/@l@d时%m\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1715
-#, c-format
+#: e2fsck/problem.c:1842
+#, no-c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block:创建新的@d@b时%m\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1720
-#, c-format
+#: e2fsck/problem.c:1848
+#, no-c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_new_dir_block:为/@l创建新的@d@b时%m\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1725
-#, c-format
+#: e2fsck/problem.c:1854
+#, no-c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "调整@i %i的inode计数时出错\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1730
-#, c-format
+#: e2fsck/problem.c:1860
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
@@ -2639,8 +2719,8 @@ msgstr ""
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1735
-#, c-format
+#: e2fsck/problem.c:1866
+#, no-c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
@@ -2649,41 +2729,41 @@ msgstr ""
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1745
-#, c-format
+#: e2fsck/problem.c:1877
+#, no-c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "创建根@d(%s)时出错:%m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1750
-#, c-format
+#: e2fsck/problem.c:1883
+#, no-c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "创建/@l@d(%s)时出错:%m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1755
+#: e2fsck/problem.c:1888
 msgid "@r is not a @d; aborting.\n"
 msgstr "@r不是一个@d;已终止执行。\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1760
+#: e2fsck/problem.c:1893
 msgid "Cannot proceed without a @r.\n"
 msgstr "无法在没有@r的情况下继续。\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1770
-#, c-format
+#: e2fsck/problem.c:1904
+#, no-c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l 不是一个@d(ino=%i)\n"
 
 #. @-expanded: /lost+found has inline data\n
-#: e2fsck/problem.c:1775
+#: e2fsck/problem.c:1909
 msgid "/@l has inline data\n"
 msgstr "/@l 含有内联数据\n"
 
 #. @-expanded: Cannot allocate space for /lost+found.\n
 #. @-expanded: Place lost files in root directory instead
-#: e2fsck/problem.c:1780
+#: e2fsck/problem.c:1914
 msgid ""
 "Cannot allocate space for /@l.\n"
 "Place lost files in root directory instead"
@@ -2694,7 +2774,7 @@ msgstr ""
 #. @-expanded: Insufficient space to recover lost files!\n
 #. @-expanded: Move data off the filesystem and re-run e2fsck.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1785
+#: e2fsck/problem.c:1919
 msgid ""
 "Insufficient space to recover lost files!\n"
 "Move data off the @f and re-run e2fsck.\n"
@@ -2705,52 +2785,52 @@ msgstr ""
 "\n"
 
 #. @-expanded: /lost+found is encrypted\n
-#: e2fsck/problem.c:1790
+#: e2fsck/problem.c:1924
 msgid "/@l is encrypted\n"
 msgstr "/@l 已被加密\n"
 
-#: e2fsck/problem.c:1797
+#: e2fsck/problem.c:1931
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "第 3A 步:优化目录\n"
 
-#: e2fsck/problem.c:1802
-#, c-format
+#: e2fsck/problem.c:1937
+#, no-c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "创建dirs_to_hash迭代器出错:%m\n"
 
-#: e2fsck/problem.c:1807
+#: e2fsck/problem.c:1942
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "优化目录 %q(%d)失败:%m\n"
 
-#: e2fsck/problem.c:1812
+#: e2fsck/problem.c:1947
 msgid "Optimizing directories: "
 msgstr "优化目录: "
 
-#: e2fsck/problem.c:1829
+#: e2fsck/problem.c:1964
 msgid "Pass 4: Checking reference counts\n"
 msgstr "第 4 步:检查引用计数\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1834
-#, c-format
+#: e2fsck/problem.c:1970
+#, no-c-format
 msgid "@u @z @i %i.  "
 msgstr "@u@z@i %i。  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1839
-#, c-format
+#: e2fsck/problem.c:1976
+#, no-c-format
 msgid "@u @i %i\n"
 msgstr "@u@i %i。  \n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1844
+#: e2fsck/problem.c:1981
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "@i %i 的引用计数为 %Il,@s %N。  "
 
 #. @-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
-#: e2fsck/problem.c:1848
+#: e2fsck/problem.c:1985
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2760,143 +2840,153 @@ msgstr ""
 "\t或者是(粗心大意的)你正在检查一个被挂载的(活动的)文件系统。\n"
 "@i_link_info[%i] 为 %N,@i.i_links_count 为 %Il。它们应当相同!\n"
 
+#. @-expanded: extended attribute inode %i ref count is %N, should be %n. 
+#: e2fsck/problem.c:1992
+#, fuzzy
+#| msgid "@i %i ref count is %Il, @s %N.  "
+msgid "@a @i %i ref count is %N, @s %n. "
+msgstr "@i %i 的引用计数为 %Il,@s %N。  "
+
+#. @-expanded: directory exceeds max links, but no DIR_NLINK feature in superblock.\n
+#: e2fsck/problem.c:1997
+msgid "@d exceeds max links, but no DIR_NLINK feature in @S.\n"
+msgstr ""
+
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1858
+#: e2fsck/problem.c:2004
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "第 5 步:检查@g概要信息\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1863
+#: e2fsck/problem.c:2009
 msgid "Padding at end of @i @B is not set. "
 msgstr "@i@B末尾的填充值未设置。 "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1868
+#: e2fsck/problem.c:2014
 msgid "Padding at end of @b @B is not set. "
 msgstr "@b@B末尾的填充值未设置。 "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1873
+#: e2fsck/problem.c:2019
 msgid "@b @B differences: "
 msgstr "@b@B的差异: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1893
+#: e2fsck/problem.c:2041
 msgid "@i @B differences: "
 msgstr "@i@B的差异: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1913
+#: e2fsck/problem.c:2063
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "@g #%g的可用@i计数错误(%i,实际为%j)。\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1918
+#: e2fsck/problem.c:2068
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "@g #%g的目录计数错误(%i,实际为%j)\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1923
+#: e2fsck/problem.c:2073
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "可用@i数错误(%i,实际为%j)\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1928
+#: e2fsck/problem.c:2078
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "@g #%g的可用@b计数错误(%i,实际为%j)。\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1933
+#: e2fsck/problem.c:2083
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "可用@b数错误(%i,实际为%j)\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1938
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
+#: e2fsck/problem.c:2088
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
 msgstr "程序错误:@f(# %n)@B端点(%b,%c)与计算值(%i,%j)不符\n"
 
-#: e2fsck/problem.c:1944
+#: e2fsck/problem.c:2094
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "内部错误:虚构的位图端点\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1949
-#, c-format
+#: e2fsck/problem.c:2100
+#, no-c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "替换@i@B时拷贝错误:%m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1954
-#, c-format
+#: e2fsck/problem.c:2106
+#, no-c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "替换@b@B时拷贝错误:%m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
-#: e2fsck/problem.c:1979
-#, c-format
+#: e2fsck/problem.c:2136
+#, no-c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr "@g %g @b已被使用,但@g被标记为BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
-#: e2fsck/problem.c:1984
-#, c-format
+#: e2fsck/problem.c:2142
+#, no-c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr "@g %g @i已被使用,但@g被标记为INODE_UNINIT\n"
 
 #. @-expanded: group %g inode bitmap does not match checksum.\n
-#: e2fsck/problem.c:1989
-#, c-format
+#: e2fsck/problem.c:2148
+#, no-c-format
 msgid "@g %g @i @B does not match checksum.\n"
 msgstr "@g %g @i @B 与自身校验值不符。\n"
 
 #. @-expanded: group %g block bitmap does not match checksum.\n
-#: e2fsck/problem.c:1994
-#, c-format
+#: e2fsck/problem.c:2154
+#, no-c-format
 msgid "@g %g @b @B does not match checksum.\n"
 msgstr "@g %g @b @B 与自身校验值不符。\n"
 
 #. @-expanded: Recreate journal
-#: e2fsck/problem.c:2001
+#: e2fsck/problem.c:2161
 msgid "Recreate @j"
 msgstr "重建@j"
 
-#: e2fsck/problem.c:2006
+#: e2fsck/problem.c:2166
 msgid "Update quota info for quota type %N"
 msgstr "更新配额类型 %N 的配额信息"
 
 #. @-expanded: Error setting block group checksum info: %m\n
-#: e2fsck/problem.c:2011
-#, c-format
+#: e2fsck/problem.c:2172
+#, no-c-format
 msgid "Error setting @b @g checksum info: %m\n"
 msgstr "设置@b@g的校验信息时出错:%m\n"
 
-#: e2fsck/problem.c:2016
-#, c-format
+#: e2fsck/problem.c:2178
+#, no-c-format
 msgid "Error writing file system info: %m\n"
 msgstr "写入文件系统信息时出错:%m\n"
 
-#: e2fsck/problem.c:2021
-#, c-format
+#: e2fsck/problem.c:2184
+#, no-c-format
 msgid "Error flushing writes to storage device: %m\n"
 msgstr "将缓冲写入到存储设备:%m\n"
 
-#: e2fsck/problem.c:2026
+#: e2fsck/problem.c:2189
 msgid "Error writing quota info for quota type %N: %m\n"
 msgstr "写入配额类型 %N 的配额信息时出错:%m\n"
 
-#: e2fsck/problem.c:2147
+#: e2fsck/problem.c:2352
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "未处理的错误码 (0x%x)!\n"
 
-#: e2fsck/problem.c:2272 e2fsck/problem.c:2276
+#: e2fsck/problem.c:2482 e2fsck/problem.c:2486
 msgid "IGNORED"
 msgstr "已忽略"
 
-#: e2fsck/quota.c:33 e2fsck/quota.c:46
+#: e2fsck/quota.c:30 e2fsck/quota.c:37 e2fsck/quota.c:50 e2fsck/quota.c:59
 msgid "in move_quota_inode"
 msgstr "于 move_quota_inode 中"
 
@@ -2918,25 +3008,25 @@ msgstr "开始inode扫描时"
 msgid "while doing inode scan"
 msgstr "进行inode扫描时"
 
-#: e2fsck/super.c:190
+#: e2fsck/super.c:224
 #, c-format
-msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "为inode %d 调用ext2fs_block_iterate时"
+msgid "while calling ext2fs_block_iterate for inode %u"
+msgstr "为 inode %u 调用 ext2fs_block_iterate 时"
 
-#: e2fsck/super.c:213
+#: e2fsck/super.c:249
 #, c-format
-msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "为inode %d 调用ext2fs_adjust_ea_refcount2时"
+msgid "while calling ext2fs_adjust_ea_refcount2 for inode %u"
+msgstr "为 inode %u 调用 ext2fs_adjust_ea_refcount2 时"
 
-#: e2fsck/super.c:274
+#: e2fsck/super.c:374
 msgid "Truncating"
 msgstr "正在截断"
 
-#: e2fsck/super.c:275
+#: e2fsck/super.c:375
 msgid "Clearing"
 msgstr "正在清除"
 
-#: e2fsck/unix.c:77
+#: e2fsck/unix.c:78
 #, c-format
 msgid ""
 "Usage: %s [-panyrcdfktvDFV] [-b superblock] [-B blocksize]\n"
@@ -2947,15 +3037,14 @@ msgstr ""
 "\t\t[-l|-L 坏块文件] [-C fd] [-j 外部日志]\n"
 "\t\t[-E 扩展选项]  [-z 撤销文件] 设备\n"
 
-#: e2fsck/unix.c:82
+#: e2fsck/unix.c:83
 msgid ""
 "\n"
 "Emergency help:\n"
 " -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"
@@ -2966,7 +3055,7 @@ msgstr ""
 " -c                   检查可能的坏块,并将它们加入坏块列表\n"
 " -f                   强制进行检查,即使文件系统被标记为“没有问题”\n"
 
-#: e2fsck/unix.c:88
+#: e2fsck/unix.c:89
 msgid ""
 " -v                   Be verbose\n"
 " -b superblock        Use alternative superblock\n"
@@ -2984,12 +3073,12 @@ msgstr ""
 " -L bad_blocks_file   指定坏块列表(文件)\n"
 " -z undo_file         创建一个撤销文件\n"
 
-#: e2fsck/unix.c:134
+#: e2fsck/unix.c:137
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s:%u/%u 文件(%0d.%d%% 为非连续的), %llu/%llu 块\n"
 
-#: e2fsck/unix.c:160
+#: e2fsck/unix.c:163
 #, c-format
 msgid ""
 "\n"
@@ -3001,46 +3090,46 @@ msgstr[0] ""
 "\n"
 "%12u 个已使用的inode(%2.2f%%,总共 %u)\n"
 
-#: e2fsck/unix.c:164
+#: e2fsck/unix.c:167
 #, c-format
 msgid "%12u non-contiguous file (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
 msgstr[0] "%12u 个不连续的文件(%0d.%d%%)\n"
 
-#: e2fsck/unix.c:169
+#: e2fsck/unix.c:172
 #, c-format
 msgid "%12u non-contiguous directory (%0d.%d%%)\n"
 msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
 msgstr[0] "%12u 个不连续的目录(%0d.%d%%)\n"
 
-#: e2fsck/unix.c:174
+#: e2fsck/unix.c:177
 #, c-format
 msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "             # 一次/二次/三次链接块数:%u/%u/%u\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:185
 msgid "             Extent depth histogram: "
 msgstr "             Extent深度直方图: "
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:194
 #, c-format
 msgid "%12llu block used (%2.2f%%, out of %llu)\n"
 msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
 msgstr[0] "%12llu 个已使用的块(%2.2f%%,总共 %llu)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:198
 #, c-format
 msgid "%12u bad block\n"
 msgid_plural "%12u bad blocks\n"
 msgstr[0] "%12u 个坏块\n"
 
-#: e2fsck/unix.c:197
+#: e2fsck/unix.c:200
 #, c-format
 msgid "%12u large file\n"
 msgid_plural "%12u large files\n"
 msgstr[0] "%12u 个大文件\n"
 
-#: e2fsck/unix.c:199
+#: e2fsck/unix.c:202
 #, c-format
 msgid ""
 "\n"
@@ -3052,96 +3141,96 @@ msgstr[0] ""
 "\n"
 "%12u 个普通文件\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:204
 #, c-format
 msgid "%12u directory\n"
 msgid_plural "%12u directories\n"
 msgstr[0] "%12u 个文件夹\n"
 
-#: e2fsck/unix.c:203
+#: e2fsck/unix.c:206
 #, c-format
 msgid "%12u character device file\n"
 msgid_plural "%12u character device files\n"
 msgstr[0] "%12u 个字符设备文件\n"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:209
 #, c-format
 msgid "%12u block device file\n"
 msgid_plural "%12u block device files\n"
 msgstr[0] "%12u 个块设备文件\n"
 
-#: e2fsck/unix.c:208
+#: e2fsck/unix.c:211
 #, c-format
 msgid "%12u fifo\n"
 msgid_plural "%12u fifos\n"
 msgstr[0] "%12u 个队列文件\n"
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:213
 #, c-format
 msgid "%12u link\n"
 msgid_plural "%12u links\n"
 msgstr[0] "%12u 个链接\n"
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] "%12u 个符号链接"
 
-#: e2fsck/unix.c:214
+#: e2fsck/unix.c:217
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%u 个直接符号链接)\n"
 
-#: e2fsck/unix.c:218
+#: e2fsck/unix.c:221
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] "%12u 个套接字文件\n"
 
-#: e2fsck/unix.c:222
+#: e2fsck/unix.c:225
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] "%12u 个文件\n"
 
-#: e2fsck/unix.c:235 misc/badblocks.c:993 misc/tune2fs.c:2878 misc/util.c:126
-#: resize/main.c:353
+#: e2fsck/unix.c:238 misc/badblocks.c:1002 misc/tune2fs.c:2986 misc/util.c:129
+#: resize/main.c:354
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "确定 %s 是否已挂载时"
 
 # Note:The second "%s" represents the current status of the device (defined by the first "%s"), thus it is not necessary to translate the word "is". The second "%s" will serve as the copula as well as the predicative (in Chinese).
-#: e2fsck/unix.c:256
+#: e2fsck/unix.c:259
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "警告! %s已被挂载。\n"
 
 # Note:The second "%s" represents the current status of the device (defined by the first "%s"), thus it is not necessary to translate the word "is". The second "%s" will serve as the copula as well as the predicative (in Chinese).
-#: e2fsck/unix.c:259
+#: e2fsck/unix.c:262
 #, c-format
 msgid "Warning!  %s is in use.\n"
 msgstr "警告! %s正被使用。\n"
 
-#: e2fsck/unix.c:265
+#: e2fsck/unix.c:268
 #, c-format
 msgid "%s is mounted.\n"
 msgstr "%s 已挂载。\n"
 
 # Same as the above.
-#: e2fsck/unix.c:267
+#: e2fsck/unix.c:270
 #, c-format
 msgid "%s is in use.\n"
 msgstr "%s正被使用。\n"
 
-#: e2fsck/unix.c:269
+#: e2fsck/unix.c:272
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
 msgstr "无法继续,已中止。\n"
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:274
 msgid ""
 "\n"
 "\n"
@@ -3155,81 +3244,120 @@ msgstr ""
 "使文件系统遭受 *** 严重损坏 ***!\n"
 "\n"
 
-#: e2fsck/unix.c:276
+#: e2fsck/unix.c:279
 msgid "Do you really want to continue"
 msgstr "你真的想要继续吗"
 
-#: e2fsck/unix.c:278
+#: e2fsck/unix.c:281
 msgid "check aborted.\n"
 msgstr "检查被中止。\n"
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:375
 msgid " contains a file system with errors"
 msgstr " 有一个含有错误的文件系统"
 
-#: e2fsck/unix.c:373
+#: e2fsck/unix.c:377
 msgid " was not cleanly unmounted"
 msgstr " 未被彻底卸载"
 
-#: e2fsck/unix.c:375
+#: e2fsck/unix.c:379
 msgid " primary superblock features different from backup"
 msgstr " 主超级块与备份超级块有差异"
 
-#: e2fsck/unix.c:379
+#: e2fsck/unix.c:383
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " 已被挂载 %u 次,但尚未被检查"
 
-#: e2fsck/unix.c:386
+#: e2fsck/unix.c:390
 msgid " has filesystem last checked time in the future"
 msgstr " 上一次检查的时间在未来"
 
-#: e2fsck/unix.c:392
+#: e2fsck/unix.c:396
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " 已超过 %u 未被检查"
 
-#: e2fsck/unix.c:401
+#: e2fsck/unix.c:404
+msgid "ignoring check interval, broken_system_clock set\n"
+msgstr ""
+
+#: e2fsck/unix.c:410
 msgid ", check forced.\n"
 msgstr ",强制进行检查。\n"
 
-#: e2fsck/unix.c:434
+#: e2fsck/unix.c:443
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s:没有问题,%u/%u 文件,%llu/%llu 块"
 
-#: e2fsck/unix.c:454
+#: e2fsck/unix.c:463
 msgid " (check deferred; on battery)"
 msgstr " (正在使用电池;已推迟检查)"
 
-#: e2fsck/unix.c:457
+#: e2fsck/unix.c:466
 msgid " (check after next mount)"
 msgstr "(将于下次挂载时进行检查)"
 
-#: e2fsck/unix.c:459
+#: e2fsck/unix.c:468
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (每挂载 %ld 次就进行检查)"
 
-#: e2fsck/unix.c:609
+#: e2fsck/unix.c:618
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "错误:无法打开/dev/null(%s)\n"
 
-#: e2fsck/unix.c:679
+#: e2fsck/unix.c:689
 msgid "Invalid EA version.\n"
 msgstr "无效的EA版本号。\n"
 
-#: e2fsck/unix.c:692
+#: e2fsck/unix.c:702
 msgid "Invalid readahead buffer size.\n"
 msgstr "预读取缓冲区大小无效。\n"
 
-#: e2fsck/unix.c:725
+#: e2fsck/unix.c:757
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "未知的扩展属性:%s\n"
 
-#: e2fsck/unix.c:752
+#: e2fsck/unix.c:765
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "Bad extended option(s) specified: %s\n"
+#| "\n"
+#| "Extended options are separated by commas, and may take an argument which\n"
+#| "\tis set off by an equals ('=') sign.\n"
+#| "\n"
+#| "Valid extended options are:\n"
+#| "\tsuperblock=<superblock number>\n"
+#| "\tblocksize=<blocksize>\n"
+msgid ""
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"is set off by an equals ('=') sign.  Valid extended options are:\n"
+"\n"
+msgstr ""
+"\n"
+"指定了错误的扩展属性:%s\n"
+"\n"
+"扩展属性由逗号分隔,有些需要通过等号(“=”)传递参数。\n"
+"\n"
+"有效的参数有:\n"
+"\tsuperblock=<超级块编号>\n"
+"\tblocksize=<块大小>\n"
+
+#: e2fsck/unix.c:769
+msgid "\tea_ver=<ea_version (1 or 2)>\n"
+msgstr "\tea_ver=<ea_version (1 或 2)>\n"
+
+#: e2fsck/unix.c:778
+msgid "\treadahead_kb=<buffer size>\n"
+msgstr "\treadahead_kb=<缓冲大小>\n"
+
+#: e2fsck/unix.c:790
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -3238,55 +3366,55 @@ msgstr ""
 "e2fsck 配置文件中语法错误(%s,第 %d 行)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:825
+#: e2fsck/unix.c:863
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "验证文件描述符 %d 时出错:%s\n"
 
-#: e2fsck/unix.c:829
+#: e2fsck/unix.c:867
 msgid "Invalid completion information file descriptor"
 msgstr "无效的文件描述符信息"
 
-#: e2fsck/unix.c:844
+#: e2fsck/unix.c:882
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "只能使用选项 -p/-a、-n 或 -y 其中之一。"
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:903
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "此版本的e2fsck不支持 -t 选项。\n"
 
-#: e2fsck/unix.c:896 e2fsck/unix.c:973 misc/e2initrd_helper.c:330
-#: misc/tune2fs.c:1598 misc/tune2fs.c:1893 misc/tune2fs.c:1911
+#: e2fsck/unix.c:934 e2fsck/unix.c:1012 misc/e2initrd_helper.c:330
+#: misc/tune2fs.c:1695 misc/tune2fs.c:1990 misc/tune2fs.c:2008
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "无法解析“%s”"
 
-#: e2fsck/unix.c:952
+#: e2fsck/unix.c:991
 msgid "The -n and -D options are incompatible."
 msgstr "%s:-n 和 -D 选项是互相排斥的。"
 
-#: e2fsck/unix.c:957
+#: e2fsck/unix.c:996
 msgid "The -n and -c options are incompatible."
 msgstr "%s:-n 和 -c 选项是互相排斥的。"
 
-#: e2fsck/unix.c:962
+#: e2fsck/unix.c:1001
 msgid "The -n and -l/-L options are incompatible."
 msgstr "%s:-n 和 -l/-L 选项是相互排斥的。"
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1025
 msgid "The -D and -E fixes_only options are incompatible."
 msgstr "-D 和 -E fixes_only 选项是互相排斥的。"
 
-#: e2fsck/unix.c:992
+#: e2fsck/unix.c:1031
 msgid "The -E bmap2extent and fixes_only options are incompatible."
 msgstr "-E bmap2extent 和 fixes_only 选项是互相排斥的。"
 
-#: e2fsck/unix.c:1046
+#: e2fsck/unix.c:1095
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "-c 和 -l/-L 选项不能同时使用。\n"
 
-#: e2fsck/unix.c:1093
+#: e2fsck/unix.c:1142
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3295,7 +3423,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG “%s”不是整数\n"
 "\n"
 
-#: e2fsck/unix.c:1102
+#: e2fsck/unix.c:1151
 #, c-format
 msgid ""
 "\n"
@@ -3306,32 +3434,31 @@ msgstr ""
 "-%c 接收到无效的非数值参数(“%s”)\n"
 "\n"
 
-#: e2fsck/unix.c:1193
+#: e2fsck/unix.c:1242
 #, 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间隔为 %u 秒,总等候时间为 %u 秒。请稍候...\n"
 
-#: e2fsck/unix.c:1210 e2fsck/unix.c:1215
+#: e2fsck/unix.c:1259 e2fsck/unix.c:1264
 msgid "while checking MMP block"
 msgstr "检测 MMP 块时"
 
-#: e2fsck/unix.c:1217 misc/tune2fs.c:2792
+#: e2fsck/unix.c:1266
+#, c-format
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
-"'tune2fs -f -E clear_mmp {device}'\n"
+"'tune2fs -f -E clear_mmp %s'\n"
 msgstr ""
-"如果确定文件系统并没有挂载到任何节点上,请运行:\n"
-"“tune2fs -f -E clear_mmp {设备}”\n"
+"如果确定文件系统并没有挂载到任何节点上,请运行:\n"
+"“tune2fs -f -E clear_mmp %s”\n"
 
-#: e2fsck/unix.c:1232
+#: e2fsck/unix.c:1282
 msgid "while reading MMP block"
 msgstr "读取 MMP 块时"
 
-#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
-#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
+#: e2fsck/unix.c:1302 e2fsck/unix.c:1354 misc/e2undo.c:236 misc/e2undo.c:281
+#: misc/mke2fs.c:2696 misc/mke2fs.c:2747 misc/tune2fs.c:2713
+#: misc/tune2fs.c:2758 resize/main.c:188 resize/main.c:233
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -3342,57 +3469,57 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
-#: resize/main.c:221
+#: e2fsck/unix.c:1343 misc/e2undo.c:270 misc/mke2fs.c:2736 misc/tune2fs.c:2747
+#: resize/main.c:222
 #, c-format
 msgid "while trying to delete %s"
 msgstr "尝试删除 %s 时"
 
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
+#: e2fsck/unix.c:1369 misc/mke2fs.c:2762 resize/main.c:243
 msgid "while trying to setup undo file\n"
 msgstr "尝试创建撤销记录时\n"
 
-#: e2fsck/unix.c:1362
+#: e2fsck/unix.c:1412
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "错误:ext2fs库版本过旧!\n"
 
-#: e2fsck/unix.c:1369
+#: e2fsck/unix.c:1419
 msgid "while trying to initialize program"
 msgstr "尝试初始化程序时"
 
-#: e2fsck/unix.c:1392
+#: e2fsck/unix.c:1456
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\t使用 %s,%s\n"
 
-#: e2fsck/unix.c:1404
+#: e2fsck/unix.c:1468
 msgid "need terminal for interactive repairs"
 msgstr "需要在终端中进行交互式修复"
 
-#: e2fsck/unix.c:1465
+#: e2fsck/unix.c:1529
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s:%s 尝试备份块\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1531
 msgid "Superblock invalid,"
 msgstr "超级块无效,"
 
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1532
 msgid "Group descriptors look bad..."
 msgstr "组描述符似乎是错误的..."
 
-#: e2fsck/unix.c:1478
+#: e2fsck/unix.c:1542
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s:尝试备份块时 %s"
 
-#: e2fsck/unix.c:1482
+#: e2fsck/unix.c:1546
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s:回到原先的超级块\n"
 
-#: e2fsck/unix.c:1511
+#: e2fsck/unix.c:1575
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3402,100 +3529,108 @@ msgstr ""
 "(也有可能超级块已损坏)\n"
 "\n"
 
-#: e2fsck/unix.c:1518
+#: e2fsck/unix.c:1582
 msgid "Could this be a zero-length partition?\n"
 msgstr "分区长度为零吗?\n"
 
-#: e2fsck/unix.c:1520
+#: e2fsck/unix.c:1584
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "你必须具有对该文件系统的 %s 权限,或者为root\n"
 
-#: e2fsck/unix.c:1526
+#: e2fsck/unix.c:1590
 msgid "Possibly non-existent or swap device?\n"
 msgstr ""
 "可能为swap分区,或该设备不存在?\n"
 "\n"
 
-#: e2fsck/unix.c:1528
+#: e2fsck/unix.c:1592
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr "文件系统可能已挂载,或正被其他程序独占使用?\n"
 
-#: e2fsck/unix.c:1532
+#: e2fsck/unix.c:1596
 msgid "Possibly non-existent device?\n"
 msgstr "可能该设备不存在?\n"
 
-#: e2fsck/unix.c:1535
+#: e2fsck/unix.c:1599
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
 msgstr "磁盘写保护;请使用 -n 选项进行只读检查。\n"
 
-#: e2fsck/unix.c:1603
+#: e2fsck/unix.c:1613
+#, c-format
+msgid "%s: Trying to load superblock despite errors...\n"
+msgstr "%s:尽管有错误,仍然尝试读取超级块...\n"
+
+#: e2fsck/unix.c:1688
 msgid "Get a newer version of e2fsck!"
 msgstr "请获取新版本的e2fsck!"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1749
 #, c-format
 msgid "while checking journal for %s"
 msgstr "检查 %s 的日志时"
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1752
 msgid "Cannot proceed with file system check"
 msgstr "无法在系统检查时进行"
 
-#: e2fsck/unix.c:1661
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+#: e2fsck/unix.c:1763
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr "警告:由于只读系统检查,跳过日志恢复流程。\n"
 
-#: e2fsck/unix.c:1673
+#: e2fsck/unix.c:1775
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr ""
 "无法设置 %s 的超级块标志。\n"
 "\n"
 
-#: e2fsck/unix.c:1679
+#: e2fsck/unix.c:1781
 #, c-format
 msgid "Journal checksum error found in %s\n"
 msgstr "在 %s 中发现日志校验值错误\n"
 
-#: e2fsck/unix.c:1683
+#: e2fsck/unix.c:1785
 #, c-format
 msgid "Journal corrupted in %s\n"
 msgstr "%s 中的日志已损坏\n"
 
-#: e2fsck/unix.c:1687
+#: e2fsck/unix.c:1789
 #, c-format
 msgid "while recovering journal of %s"
 msgstr "恢复 %s 的日志时"
 
-#: e2fsck/unix.c:1709
+#: e2fsck/unix.c:1811
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s 有不被支持的特性:"
 
-#: e2fsck/unix.c:1768
+#: e2fsck/unix.c:1826
+#, c-format
+msgid "%s has unsupported encoding: %0x\n"
+msgstr "%s 有不被支持的编码:%0x\n"
+
+#: e2fsck/unix.c:1876
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s:读取坏块inode时%s\n"
 
-#: e2fsck/unix.c:1771
+#: e2fsck/unix.c:1879
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "这并不是一个好预兆,然而我们将继续进行...\n"
 
-#: e2fsck/unix.c:1811
+#: e2fsck/unix.c:1919
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "创建日志(%d 个块):"
 
-#: e2fsck/unix.c:1821
+#: e2fsck/unix.c:1929
 msgid " Done.\n"
 msgstr "完毕。\n"
 
-#: e2fsck/unix.c:1823
+#: e2fsck/unix.c:1931
 msgid ""
 "\n"
 "*** journal has been regenerated ***\n"
@@ -3503,24 +3638,38 @@ msgstr ""
 "\n"
 "*** 日志已被重建 ***\n"
 
-#: e2fsck/unix.c:1829
+#: e2fsck/unix.c:1937
 msgid "aborted"
 msgstr "已中止"
 
-#: e2fsck/unix.c:1831
+#: e2fsck/unix.c:1939
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s:e2fsck被取消。\n"
 
-#: e2fsck/unix.c:1858
+#: e2fsck/unix.c:1966
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "正在从头开始e2fsck...\n"
 
-#: e2fsck/unix.c:1862
+#: e2fsck/unix.c:1970
 msgid "while resetting context"
 msgstr "重置上下文时"
 
-#: e2fsck/unix.c:1906 e2fsck/util.c:71
+#: e2fsck/unix.c:2029
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM ERRORS CORRECTED *****\n"
+msgstr ""
+"\n"
+"%s:***** 文件系统错误已修正 *****\n"
+
+#: e2fsck/unix.c:2031
+#, c-format
+msgid "%s: File system was modified.\n"
+msgstr "%s:文件系统已被修改。\n"
+
+#: e2fsck/unix.c:2035 e2fsck/util.c:71
 #, c-format
 msgid ""
 "\n"
@@ -3529,12 +3678,12 @@ msgstr ""
 "\n"
 "%s:***** 文件系统已修改 *****\n"
 
-#: e2fsck/unix.c:1910
+#: e2fsck/unix.c:2040
 #, c-format
 msgid "%s: ***** REBOOT SYSTEM *****\n"
 msgstr "%s:***** 请重新启动系统 *****\n"
 
-#: e2fsck/unix.c:1918 e2fsck/util.c:77
+#: e2fsck/unix.c:2050 e2fsck/util.c:77
 #, c-format
 msgid ""
 "\n"
@@ -3545,51 +3694,51 @@ msgstr ""
 "%s:********** 警告:文件系统上仍有错误 **********\n"
 "\n"
 
-#: e2fsck/util.c:194 misc/util.c:93
+#: e2fsck/util.c:196 misc/util.c:93
 msgid "yY"
 msgstr "yY"
 
-#: e2fsck/util.c:195
+#: e2fsck/util.c:197 misc/util.c:112
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:198
 msgid "aA"
 msgstr "aA"
 
-#: e2fsck/util.c:197
+#: e2fsck/util.c:202
 msgid " ('a' enables 'yes' to all) "
 msgstr "(“a” 表示全部回答“yes”) "
 
-#: e2fsck/util.c:213
+#: e2fsck/util.c:219
 msgid "<y>"
 msgstr "<y>"
 
-#: e2fsck/util.c:215
+#: e2fsck/util.c:221
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:217
+#: e2fsck/util.c:223
 msgid " (y/n)"
 msgstr " (y/n)"
 
-#: e2fsck/util.c:240
+#: e2fsck/util.c:246
 msgid "cancelled!\n"
 msgstr "已取消!\n"
 
-#: e2fsck/util.c:264
+#: e2fsck/util.c:279
 msgid "yes to all\n"
 msgstr "全部回答“yes”\n"
 
-#: e2fsck/util.c:266
+#: e2fsck/util.c:281
 msgid "yes\n"
 msgstr "是\n"
 
-#: e2fsck/util.c:268
+#: e2fsck/util.c:283
 msgid "no\n"
 msgstr "否\n"
 
-#: e2fsck/util.c:278
+#: e2fsck/util.c:293
 #, c-format
 msgid ""
 "%s? no\n"
@@ -3598,7 +3747,7 @@ msgstr ""
 "%s? no\n"
 "\n"
 
-#: e2fsck/util.c:282
+#: e2fsck/util.c:297
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -3607,38 +3756,38 @@ msgstr ""
 "%s? yes\n"
 "\n"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "yes"
 msgstr "yes"
 
-#: e2fsck/util.c:286
+#: e2fsck/util.c:301
 msgid "no"
 msgstr "no"
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:317
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps:%s 含有非法的位图块"
 
-#: e2fsck/util.c:307
+#: e2fsck/util.c:322
 msgid "reading inode and block bitmaps"
 msgstr "读取inode和块位图"
 
-#: e2fsck/util.c:319
+#: e2fsck/util.c:334
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "重新尝试读取 %s 的位图时"
 
-#: e2fsck/util.c:331
+#: e2fsck/util.c:346
 msgid "writing block and inode bitmaps"
 msgstr "写入块和inode位图"
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:351
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr "重写 %s  的block和inode位图时"
 
-#: e2fsck/util.c:348
+#: e2fsck/util.c:363
 #, c-format
 msgid ""
 "\n"
@@ -3651,61 +3800,58 @@ msgstr ""
 "%s:未预期的不一致性;请手动运行fsck\n"
 "\t(即不使用 -a 或 -p 选项)。\n"
 
-#: e2fsck/util.c:429
+#: e2fsck/util.c:444
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr "内存使用量:%luk/%luk(%luk/%luk), "
 
-#: e2fsck/util.c:433
+#: e2fsck/util.c:448
 #, c-format
 msgid "Memory used: %lu, "
 msgstr "已使用内存:%lu, "
 
-#: e2fsck/util.c:440
+#: e2fsck/util.c:455
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "时间:%5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:445
+#: e2fsck/util.c:460
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "持续时间:%6.3f\n"
 
-#: e2fsck/util.c:480 e2fsck/util.c:494
+#: e2fsck/util.c:495 e2fsck/util.c:509
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr "读取 %2$s 中的inode %1$lu 时"
 
-#: e2fsck/util.c:508 e2fsck/util.c:521
+#: e2fsck/util.c:523 e2fsck/util.c:536
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr "写入 %2$s 中的inode %1$lu 时"
 
-#: e2fsck/util.c:765
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
+#: e2fsck/util.c:792
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
 msgstr "未预期的不连续性:文件系统在运行fsck时被修改。\n"
 
-#: misc/badblocks.c:72
+#: misc/badblocks.c:75
 msgid "done                                                 \n"
 msgstr "已完成                                                 \n"
 
-#: misc/badblocks.c:97
+#: misc/badblocks.c:100
 #, 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"
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]\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 [-b 块大小] [-i 输入文件] [-o 输出文件] [-svwnf]\n"
+"用法:%s [-b 块大小] [-i 输入文件] [-o 输出文件] [-svwnfBX]\n"
 "       [-c 立即块数] [-d 读取延迟因子] [-e 最大坏块数]\n"
 "       [-p 需要通过测试的块数] [-t 测试模式 [-t 测试模式 [...]]]\n"
 "       设备 [末块 [首块]]\n"
 
-#: misc/badblocks.c:108
+#: misc/badblocks.c:111
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -3714,81 +3860,81 @@ msgstr ""
 "%s:-n 和 -w 选项是相互排斥的。\n"
 "\n"
 
-#: misc/badblocks.c:223
+#: misc/badblocks.c:229
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr "进度 %6.2f%%,用时 %s。(%d/%d/%d 个错误)"
 
-#: misc/badblocks.c:328
+#: misc/badblocks.c:337
 msgid "Testing with random pattern: "
 msgstr "现在测试随机模式:"
 
 # upstream bug but whatever
-#: misc/badblocks.c:346
+#: misc/badblocks.c:355
 msgid "Testing with pattern 0x"
 msgstr "现在测试模式 0x"
 
-#: misc/badblocks.c:378 misc/badblocks.c:451
+#: misc/badblocks.c:387 misc/badblocks.c:460
 msgid "during seek"
 msgstr "定位过程中"
 
-#: misc/badblocks.c:389
+#: misc/badblocks.c:398
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "do_read中遇到异常值(%ld)\n"
 
-#: misc/badblocks.c:476
+#: misc/badblocks.c:485
 msgid "during ext2fs_sync_device"
 msgstr "执行ext2fs_sync_device时"
 
-#: misc/badblocks.c:496 misc/badblocks.c:758
+#: misc/badblocks.c:505 misc/badblocks.c:767
 msgid "while beginning bad block list iteration"
 msgstr "迭代坏块列表时"
 
-#: misc/badblocks.c:511 misc/badblocks.c:611 misc/badblocks.c:769
+#: misc/badblocks.c:520 misc/badblocks.c:620 misc/badblocks.c:778
 msgid "while allocating buffers"
 msgstr "分配缓冲区时"
 
-#: misc/badblocks.c:515
+#: misc/badblocks.c:524
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "正在检查从 %lu 到 %lu的块\n"
 
-#: misc/badblocks.c:520
+#: misc/badblocks.c:529
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "在只读模式中检查坏块\n"
 
-#: misc/badblocks.c:529
+#: misc/badblocks.c:538
 msgid "Checking for bad blocks (read-only test): "
 msgstr "检查坏块(只读测试): "
 
-#: misc/badblocks.c:536 misc/badblocks.c:643 misc/badblocks.c:685
-#: misc/badblocks.c:832
+#: misc/badblocks.c:545 misc/badblocks.c:652 misc/badblocks.c:694
+#: misc/badblocks.c:841
 msgid "Too many bad blocks, aborting test\n"
 msgstr "坏块太多,终止测试\n"
 
-#: misc/badblocks.c:618
+#: misc/badblocks.c:627
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "在读写模式中检查坏块\n"
 
-#: misc/badblocks.c:620 misc/badblocks.c:782
+#: misc/badblocks.c:629 misc/badblocks.c:791
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "从块 %lu 至 %lu\n"
 
-#: misc/badblocks.c:675
+#: misc/badblocks.c:684
 msgid "Reading and comparing: "
 msgstr "正在读取并比较: "
 
-#: misc/badblocks.c:781
+#: misc/badblocks.c:790
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "使用非破坏性读写模式进行坏块检验\n"
 
-#: misc/badblocks.c:787
+#: misc/badblocks.c:796
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "正在检验坏块(非破坏性读写测试)\n"
 
-#: misc/badblocks.c:794
+#: misc/badblocks.c:803
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3796,327 +3942,324 @@ msgstr ""
 "\n"
 "收到中断通知,正在进行后续清理工作\n"
 
-#: misc/badblocks.c:877
+#: misc/badblocks.c:886
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "正在测试数据写入,位于块 %lu"
 
-#: misc/badblocks.c:998 misc/util.c:131
+#: misc/badblocks.c:1007 misc/util.c:134
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s 已经挂载; "
 
-#: misc/badblocks.c:1000
+#: misc/badblocks.c:1009
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "强制进行坏块处理。期望/etc/mtab中反映的并非真实情况。\n"
 
-#: misc/badblocks.c:1005
+#: misc/badblocks.c:1014
 msgid "it's not safe to run badblocks!\n"
 msgstr "进行坏块处理有风险!\n"
 
-#: misc/badblocks.c:1010 misc/util.c:142
+#: misc/badblocks.c:1019 misc/util.c:145
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s 显然正被系统使用; "
 
-#: misc/badblocks.c:1013
+#: misc/badblocks.c:1022
 msgid "badblocks forced anyway.\n"
 msgstr "强制进行坏块检验。\n"
 
-#: misc/badblocks.c:1033
+#: misc/badblocks.c:1042
 #, c-format
 msgid "invalid %s - %s"
 msgstr "无效的%s - %s"
 
-#: misc/badblocks.c:1127
+#: misc/badblocks.c:1136
 #, c-format
 msgid "Too big max bad blocks count %u - maximum is %u"
 msgstr "最大坏块数(%u)过大 - 最大值为 %u"
 
-#: misc/badblocks.c:1154
+#: misc/badblocks.c:1163
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "无法使用测试模式分配内存 - %s"
 
-#: misc/badblocks.c:1184
+#: misc/badblocks.c:1193
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "只读测试中最多只能指定一种测试模式"
 
-#: misc/badblocks.c:1190
+#: misc/badblocks.c:1199
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "只读测试中不允许使用随机测试模式"
 
-#: misc/badblocks.c:1204
+#: misc/badblocks.c:1213
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr "无法确定设备大小;你必须手动指定大小\n"
 
-#: misc/badblocks.c:1210
+#: misc/badblocks.c:1219
 msgid "while trying to determine device size"
 msgstr "尝试确定设备大小时"
 
-#: misc/badblocks.c:1215
+#: misc/badblocks.c:1224
 msgid "last block"
 msgstr "最后一个块"
 
-#: misc/badblocks.c:1221
+#: misc/badblocks.c:1230
 msgid "first block"
 msgstr "第一个块"
 
-#: misc/badblocks.c:1224
+#: misc/badblocks.c:1233
 #, c-format
 msgid "invalid starting block (%llu): must be less than %llu"
 msgstr "起始块(%llu)无效:必须小于 %llu"
 
-#: misc/badblocks.c:1231
+#: misc/badblocks.c:1240
 #, c-format
 msgid "invalid end block (%llu): must be 32-bit value"
 msgstr "起始块(%llu)无效:必须为32位数"
 
-#: misc/badblocks.c:1287
+#: misc/badblocks.c:1296
 msgid "while creating in-memory bad blocks list"
 msgstr "在内存中创建坏块列表时"
 
-#: misc/badblocks.c:1296
+#: misc/badblocks.c:1305
 msgid "input file - bad format"
 msgstr "输入文件 - 格式错误"
 
-#: misc/badblocks.c:1304 misc/badblocks.c:1313
+#: misc/badblocks.c:1313 misc/badblocks.c:1322
 msgid "while adding to in-memory bad block list"
 msgstr "向内存中的坏块列表中添加记录时"
 
-#: misc/badblocks.c:1338
+#: misc/badblocks.c:1347
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
 msgstr "此步已完成,发现了 %u 个坏块。(%d/%d/%d 个错误)\n"
 
 #: misc/chattr.c:89
 #, c-format
-msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTu] [-v version] files...\n"
-msgstr "用法:%s [-pRVf] [-+=aAcCdDeijPsStTu] [-v 版本] 文件...\n"
+msgid "Usage: %s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...\n"
+msgstr "用法:%s [-pRVf] [-+=aAcCdDeijPsStTuF] [-v 版本] 文件...\n"
 
-#: misc/chattr.c:159
+#: misc/chattr.c:160
 #, c-format
 msgid "bad project - %s\n"
 msgstr "项目错误 - %s\n"
 
-#: misc/chattr.c:173
+#: misc/chattr.c:174
 #, c-format
 msgid "bad version - %s\n"
 msgstr "版本错误 - %s\n"
 
-#: misc/chattr.c:219 misc/lsattr.c:127
+#: misc/chattr.c:220 misc/lsattr.c:127
 #, c-format
 msgid "while trying to stat %s"
 msgstr "尝试对%s进行stat调用时"
 
-#: misc/chattr.c:226
+#: misc/chattr.c:227
 #, c-format
 msgid "while reading flags on %s"
 msgstr "读取 %s 的标志时"
 
-#: misc/chattr.c:231 misc/chattr.c:243
+#: misc/chattr.c:232 misc/chattr.c:244
 #, c-format
 msgid "Flags of %s set as "
 msgstr "%s的标志被设为 "
 
-#: misc/chattr.c:252
+#: misc/chattr.c:253
 #, c-format
 msgid "while setting flags on %s"
 msgstr "设置 %s 的标志时"
 
-#: misc/chattr.c:260
+#: misc/chattr.c:261
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "%s 的版本被设置为 %lu\n"
 
-#: misc/chattr.c:264
+#: misc/chattr.c:265
 #, c-format
 msgid "while setting version on %s"
 msgstr "设置 %s 的版本时"
 
-#: misc/chattr.c:271
+#: misc/chattr.c:272
 #, c-format
 msgid "Project of %s set as %lu\n"
 msgstr "%s 的项目被设置为 %lu\n"
 
-#: misc/chattr.c:275
+#: misc/chattr.c:276
 #, c-format
 msgid "while setting project on %s"
 msgstr "设置 %s 的项目时"
 
-#: misc/chattr.c:297
+#: misc/chattr.c:298
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "无法在chattr_dir_proc中为路径变量分配内存"
 
-#: misc/chattr.c:337
+#: misc/chattr.c:338
 msgid "= is incompatible with - and +\n"
 msgstr "= 与 - / + 选项不相容\n"
 
-#: misc/chattr.c:345
+#: misc/chattr.c:346
 msgid "Must use '-v', =, - or +\n"
 msgstr "必须使用“-v”、=、- 或 + 其中之一\n"
 
-#: misc/create_inode.c:70 misc/create_inode.c:109
+#: misc/create_inode.c:80 misc/create_inode.c:119
 #, c-format
 msgid "while reading inode %u"
 msgstr "读取 inode %u 时"
 
-#: misc/create_inode.c:80 misc/create_inode.c:272 misc/create_inode.c:336
-#: misc/create_inode.c:374
+#: misc/create_inode.c:90 misc/create_inode.c:288 misc/create_inode.c:353
+#: misc/create_inode.c:391
 msgid "while expanding directory"
 msgstr "扩充目录时"
 
-#: misc/create_inode.c:87
+#: misc/create_inode.c:97
 #, c-format
 msgid "while linking \"%s\""
 msgstr "链接“%s”时"
 
-#: misc/create_inode.c:95 misc/create_inode.c:122 misc/create_inode.c:306
+#: misc/create_inode.c:105 misc/create_inode.c:132 misc/create_inode.c:322
 #, c-format
 msgid "while writing inode %u"
 msgstr "写入 inode %u 时"
 
-#: misc/create_inode.c:139 misc/create_inode.c:163
+#: misc/create_inode.c:152 misc/create_inode.c:176
 #, c-format
 msgid "while listing attributes of \"%s\""
 msgstr "尝试列出“%s”的属性时"
 
-#: misc/create_inode.c:150
+#: misc/create_inode.c:163
 #, c-format
 msgid "while opening inode %u"
 msgstr "打开 inode %u 时"
 
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
-#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
-#: misc/mke2fs.c:353
+#: misc/create_inode.c:169 misc/create_inode.c:196 misc/create_inode.c:1043
+#: misc/e2undo.c:182 misc/e2undo.c:479 misc/e2undo.c:485 misc/e2undo.c:491
+#: misc/mke2fs.c:359
 msgid "while allocating memory"
 msgstr "分配内存时"
 
-#: misc/create_inode.c:176 misc/create_inode.c:192
+#: misc/create_inode.c:189 misc/create_inode.c:205
 #, c-format
 msgid "while reading attribute \"%s\" of \"%s\""
 msgstr "读取 %s 的“%s”标志时"
 
-#: misc/create_inode.c:201
+#: misc/create_inode.c:214
 #, c-format
 msgid "while writing attribute \"%s\" to inode %u"
 msgstr "写入标志“%s”到 inode %u 时"
 
-#: misc/create_inode.c:211
+#: misc/create_inode.c:224
 #, c-format
 msgid "while closing inode %u"
 msgstr "关闭 inode %u 时"
 
-#: misc/create_inode.c:259
+#: misc/create_inode.c:275
 #, c-format
 msgid "while allocating inode \"%s\""
 msgstr "分配 inode“%s”时"
 
-#: misc/create_inode.c:278
+#: misc/create_inode.c:294
 #, c-format
 msgid "while creating inode \"%s\""
 msgstr "创建 inode “%s”时"
 
-#: misc/create_inode.c:343
+#: misc/create_inode.c:360
 #, c-format
 msgid "while creating symlink \"%s\""
 msgstr "创建符号链接“%s”时"
 
-#: misc/create_inode.c:361 misc/create_inode.c:838
+#: misc/create_inode.c:378 misc/create_inode.c:963
 #, c-format
 msgid "while looking up \"%s\""
 msgstr "查找“%s”时"
 
-#: misc/create_inode.c:381
+#: misc/create_inode.c:398
 #, c-format
 msgid "while creating directory \"%s\""
 msgstr "创建目录“%s”时"
 
-#: misc/create_inode.c:609
+#: misc/create_inode.c:627
 #, c-format
 msgid "while opening \"%s\" to copy"
 msgstr "打开“%s”并拷贝时"
 
-#: misc/create_inode.c:701
+#: misc/create_inode.c:805
 #, c-format
 msgid "while changing working directory to \"%s\""
 msgstr "改变工作目录为“%s”时"
 
-#: misc/create_inode.c:709
+#: misc/create_inode.c:815
 #, c-format
-msgid "while opening directory \"%s\""
-msgstr "æ\89\93å¼\80目录“%s”时"
+msgid "while scanning directory \"%s\""
+msgstr "æ\89«æ\8f\8f目录“%s”时"
 
-#: misc/create_inode.c:719
+#: misc/create_inode.c:825
 #, c-format
 msgid "while lstat \"%s\""
 msgstr "对“%s”进行lstat调用时"
 
-#: misc/create_inode.c:752
+#: misc/create_inode.c:875
 #, c-format
 msgid "while creating special file \"%s\""
 msgstr "创建特殊文件“%s”时"
 
-#: misc/create_inode.c:761
+#: misc/create_inode.c:884
 msgid "malloc failed"
 msgstr "内存分配失败"
 
-#: misc/create_inode.c:769
+#: misc/create_inode.c:892
 #, c-format
 msgid "while trying to read link \"%s\""
 msgstr "尝试读取链接“%s”时"
 
-#: misc/create_inode.c:776
+#: misc/create_inode.c:899
 msgid "symlink increased in size between lstat() and readlink()"
 msgstr "在执行 lstat() 和 readlink() 期间,符号链接的大小发生改变"
 
-#: misc/create_inode.c:787
+#: misc/create_inode.c:910
 #, c-format
 msgid "while writing symlink\"%s\""
 msgstr "写入符号链接“%s”时"
 
-#: misc/create_inode.c:797
+#: misc/create_inode.c:921
 #, c-format
 msgid "while writing file \"%s\""
 msgstr "写入文件“%s”时"
 
-#: misc/create_inode.c:810
+#: misc/create_inode.c:934
 #, c-format
 msgid "while making dir \"%s\""
 msgstr "创建目录“%s”时"
 
-#: misc/create_inode.c:827
+#: misc/create_inode.c:952
 msgid "while changing directory"
 msgstr "改变目录时"
 
-#: misc/create_inode.c:833
+#: misc/create_inode.c:958
 #, c-format
 msgid "ignoring entry \"%s\""
 msgstr "忽略项“%s”"
 
-#: misc/create_inode.c:846
+#: misc/create_inode.c:971
 #, c-format
 msgid "while setting inode for \"%s\""
 msgstr "为“%s”设置 inode 时"
 
-#: misc/create_inode.c:853
+#: misc/create_inode.c:978
 #, c-format
 msgid "while setting xattrs for \"%s\""
 msgstr "设置“%s”的 xattrs 时"
 
-#: misc/create_inode.c:871
+#: misc/create_inode.c:1004
 msgid "while saving inode data"
 msgstr "保存 inode 数据时"
 
 #: misc/dumpe2fs.c:56
 #, c-format
-msgid ""
-"Usage: %s [-bfghixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"用法:%s [-bfghixV] [-o superblock=<超级块编号>] [-o blocksize=<块大小>] 设"
-"备\n"
+msgid "Usage: %s [-bfghimxV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
+msgstr "用法:%s [-bfghimxV] [-o superblock=<超级块编号>] [-o blocksize=<块大小>] 设备\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -4234,106 +4377,55 @@ msgstr "输出坏块列表时"
 msgid "Bad blocks: %u"
 msgstr "坏块数:%u"
 
-#: misc/dumpe2fs.c:385 misc/tune2fs.c:362
+#: misc/dumpe2fs.c:373 misc/tune2fs.c:373
 msgid "while reading journal inode"
 msgstr "读取日志inode时"
 
-#: misc/dumpe2fs.c:391
+#: misc/dumpe2fs.c:379
 msgid "while opening journal inode"
 msgstr "打开日志inode时"
 
-#: misc/dumpe2fs.c:397
+#: misc/dumpe2fs.c:385
 msgid "while reading journal super block"
 msgstr "读取日志超级块时"
 
-#: misc/dumpe2fs.c:404
+#: misc/dumpe2fs.c:392
 msgid "Journal superblock magic number invalid!\n"
 msgstr "日志超级块的幻数有错!\n"
 
-#: misc/dumpe2fs.c:407 misc/dumpe2fs.c:490
-msgid "Journal features:        "
-msgstr "日志特性::        "
-
-#: misc/dumpe2fs.c:420
-msgid "Journal size:             "
-msgstr "日志大小:             "
-
-#: misc/dumpe2fs.c:430
-#, c-format
-msgid ""
-"Journal length:           %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-msgstr ""
-"日志长度:       %u\n"
-"日志序列:           0x%08x\n"
-"日志起始于:       %u\n"
-
-#: misc/dumpe2fs.c:438 misc/dumpe2fs.c:480
-msgid "Journal checksum type:    crc32\n"
-msgstr "日志校验值类型:    crc32\n"
-
-#: misc/dumpe2fs.c:443 misc/dumpe2fs.c:485
-#, c-format
-msgid ""
-"Journal checksum type:    %s\n"
-"Journal checksum:         0x%08x\n"
-msgstr ""
-"日志校验值类型:   %s\n"
-"日志校验值:         0x%08x\n"
-
-#: misc/dumpe2fs.c:448
-#, c-format
-msgid "Journal errno:            %d\n"
-msgstr "日志错误码:            %d\n"
-
-#: misc/dumpe2fs.c:466 misc/tune2fs.c:211
+#: misc/dumpe2fs.c:409 misc/tune2fs.c:216
 msgid "while reading journal superblock"
 msgstr "读取日志超级块时"
 
-#: misc/dumpe2fs.c:474
+#: misc/dumpe2fs.c:417
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "无法找到日志超级块的幻数"
 
-#: misc/dumpe2fs.c:501
-#, c-format
-msgid ""
-"\n"
-"Journal block size:       %u\n"
-"Journal length:           %u\n"
-"Journal first block:      %u\n"
-"Journal sequence:         0x%08x\n"
-"Journal start:            %u\n"
-"Journal number of users:  %u\n"
-msgstr ""
-"\n"
-"日志块大小:       %u\n"
-"日志块长度:       %u\n"
-"日志块首块:       %u\n"
-"日志序列:           0x%08x\n"
-"日志起始于:       %u\n"
-"用户日志数:       %u\n"
+#: misc/dumpe2fs.c:468
+msgid "failed to alloc MMP buffer\n"
+msgstr "分配 MMP 缓冲失败\n"
 
-#: misc/dumpe2fs.c:514
-#, c-format
-msgid "Journal users:            %s\n"
-msgstr "日志使用者:            %s\n"
+#: misc/dumpe2fs.c:479
+#, fuzzy, c-format
+#| msgid "Checking blocks %lu to %lu\n"
+msgid "reading MMP block %llu from '%s'\n"
+msgstr "正在检查从 %lu 到 %lu的块\n"
 
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:507 misc/mke2fs.c:800 misc/tune2fs.c:2027
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "无法为解析选项获取内存!\n"
 
-#: misc/dumpe2fs.c:556
+#: misc/dumpe2fs.c:533
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "无效的超级块参数:%s\n"
 
-#: misc/dumpe2fs.c:571
+#: misc/dumpe2fs.c:548
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "无效的块大小参数:%s\n"
 
-#: misc/dumpe2fs.c:582
+#: misc/dumpe2fs.c:559
 #, c-format
 msgid ""
 "\n"
@@ -4355,236 +4447,221 @@ msgstr ""
 "\tsuperblock=<超级块编号>\n"
 "\tblocksize=<块大小>\n"
 
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
+#: misc/dumpe2fs.c:649 misc/mke2fs.c:1889
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\t使用 %s\n"
 
-#: misc/dumpe2fs.c:686
-msgid ""
-"\n"
-"*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** 发现文件系统的校验值有误!请立即运行 e2fsck!\n"
-"\n"
-
-#: misc/dumpe2fs.c:691 misc/e2image.c:1586 misc/tune2fs.c:2805
-#: resize/main.c:415
+#: misc/dumpe2fs.c:694 misc/e2image.c:1629 misc/tune2fs.c:2913
+#: resize/main.c:416
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "找不到有效的文件系统超级块。\n"
 
-#: misc/dumpe2fs.c:726
-msgid ""
-"\n"
-"*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
-"\n"
-msgstr ""
-"\n"
-"*** 发现位图的校验值有误!请立即运行 e2fsck!\n"
-"\n"
+#: misc/dumpe2fs.c:716
+#, c-format
+msgid "%s: MMP feature not enabled.\n"
+msgstr "%s: MMP 特性未启用。\n"
 
-#: misc/dumpe2fs.c:730
+#: misc/dumpe2fs.c:747
 #, c-format
+msgid "while trying to read '%s' bitmaps\n"
+msgstr "尝试读取“%s”位图时\n"
+
+#: misc/dumpe2fs.c:756
 msgid ""
+"*** Run e2fsck now!\n"
 "\n"
-"%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"*** 请立刻运行 e2fsck!\n"
 "\n"
-"%s:%s:读取位图错误:%s\n"
 
-#: misc/e2image.c:106
+#: misc/e2image.c:107
 #, c-format
-msgid "Usage: %s [ -r|Q ] [ -fr ] device image-file\n"
-msgstr "用法:%s [ -r|Q ] [ -fr ] 设备 镜像文件\n"
+msgid "Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize][ -fr ] device image-file\n"
+msgstr "用法:%s [ -r|Q ] [ -f ] [ -b 超级块 ] [ -B 块大小][ -fr ] 设备 镜像文件\n"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 #, c-format
 msgid "       %s -I device image-file\n"
 msgstr "       %s -I 设备 镜像文件\n"
 
-#: misc/e2image.c:109
+#: misc/e2image.c:111
 #, c-format
-msgid ""
-"       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs "
-"[ dest_fs ]\n"
-msgstr ""
-"       %s -ra  [  -cfnp  ] [ -o 源偏移量 ] [ -O 目标偏移量 ] 源文件系统 [ 目"
-"标文件系统 ]\n"
+msgid "       %s -ra  [  -cfnp  ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]\n"
+msgstr "       %s -ra  [  -cfnp  ] [ -o 源偏移量 ] [ -O 目标偏移量 ] 源文件系统 [ 目标文件系统 ]\n"
 
-#: misc/e2image.c:174 misc/e2image.c:579 misc/e2image.c:585 misc/e2image.c:1181
+#: misc/e2image.c:176 misc/e2image.c:589 misc/e2image.c:595
+#: misc/e2image.c:1194
 msgid "while allocating buffer"
 msgstr "为缓冲区分配内存时"
 
-#: misc/e2image.c:179
+#: misc/e2image.c:181
 #, c-format
 msgid "Writing block %llu\n"
 msgstr "正在写入到块 %llu\n"
 
-#: misc/e2image.c:193
+#: misc/e2image.c:195
 #, c-format
 msgid "error writing block %llu"
 msgstr "写块 %llu 出错"
 
-#: misc/e2image.c:196
+#: misc/e2image.c:198
 msgid "error in generic_write()"
 msgstr "generic_write() 函数出错"
 
-#: misc/e2image.c:213
+#: misc/e2image.c:215
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr "错误:头部大小超过wrt_size\n"
 
-#: misc/e2image.c:218
+#: misc/e2image.c:220
 msgid "Couldn't allocate header buffer\n"
 msgstr "无法为头缓冲区分配内存\n"
 
-#: misc/e2image.c:246
+#: misc/e2image.c:248
 msgid "while writing superblock"
 msgstr "写入超级块时"
 
-#: misc/e2image.c:255
+#: misc/e2image.c:257
 msgid "while writing inode table"
 msgstr "写入inode表时"
 
-#: misc/e2image.c:263
+#: misc/e2image.c:265
 msgid "while writing block bitmap"
 msgstr "写入块位图时"
 
-#: misc/e2image.c:271
+#: misc/e2image.c:273
 msgid "while writing inode bitmap"
 msgstr "写入inode位图时"
 
-#: misc/e2image.c:505
+#: misc/e2image.c:515
 #, c-format
 msgid "Corrupt directory block %llu: bad rec_len (%d)\n"
 msgstr "损坏的目录块 %llu:rec_len(%d)错误\n"
 
-#: misc/e2image.c:517
+#: misc/e2image.c:527
 #, c-format
 msgid "Corrupt directory block %llu: bad name_len (%d)\n"
 msgstr "损坏的目录块 %llu:name_len(%d)错误\n"
 
-#: misc/e2image.c:558
+#: misc/e2image.c:568
 #, c-format
 msgid "%llu / %llu blocks (%d%%)"
 msgstr "%llu / %llu 块(%d%%)"
 
-#: misc/e2image.c:589 misc/e2image.c:629
+#: misc/e2image.c:599 misc/e2image.c:639
 msgid "Copying "
 msgstr "正在拷贝 "
 
-#: misc/e2image.c:626
-msgid ""
-"Stopping now will destroy the filesystem, interrupt again if you are sure\n"
+#: misc/e2image.c:636
+msgid "Stopping now will destroy the filesystem, interrupt again if you are sure\n"
 msgstr "现在终止将会损坏文件系统;如果你确定要终止,请再次进行打断\n"
 
-#: misc/e2image.c:652
+#: misc/e2image.c:662
 #, c-format
 msgid " %s remaining at %.2f MB/s"
 msgstr " 剩余 %s,速度 %.2f MB/s"
 
-#: misc/e2image.c:664 misc/e2image.c:1191
+#: misc/e2image.c:674 misc/e2image.c:1204
 #, c-format
 msgid "error reading block %llu"
 msgstr "读取块 %llu 错误"
 
-#: misc/e2image.c:718
+#: misc/e2image.c:728
 #, c-format
 msgid "Copied %llu / %llu blocks (%d%%) in %s "
 msgstr "已复制 %llu / %llu 块(%d%%),用时 %s "
 
-#: misc/e2image.c:722
+#: misc/e2image.c:732
 #, c-format
 msgid "at %.2f MB/s"
 msgstr "速度 %.2f MB/s"
 
-#: misc/e2image.c:758
+#: misc/e2image.c:768
 msgid "while allocating l1 table"
 msgstr "分配l1表时"
 
-#: misc/e2image.c:803
+#: misc/e2image.c:813
 msgid "while allocating l2 cache"
 msgstr "分配l2表时"
 
-#: misc/e2image.c:826
-msgid ""
-"Warning: There are still tables in the cache while putting the cache, data "
-"will be lost so the image may not be valid.\n"
-msgstr ""
-"警告:当put缓存时,这些表仍然储存在缓存中,这将导致数据丢失,镜像文件也可能无"
-"效。\n"
+#: misc/e2image.c:836
+msgid "Warning: There are still tables in the cache while putting the cache, data will be lost so the image may not be valid.\n"
+msgstr "警告:当put缓存时,这些表仍然储存在缓存中,这将导致数据丢失,镜像文件也可能无效。\n"
 
-#: misc/e2image.c:1148
+#: misc/e2image.c:1161
 msgid "while allocating ext2_qcow2_image"
 msgstr "为ext2_qcow2_image分配内存时"
 
-#: misc/e2image.c:1155
+#: misc/e2image.c:1168
 msgid "while initializing ext2_qcow2_image"
 msgstr "初始化ext2_qcow2_image时"
 
-#: misc/e2image.c:1214 misc/e2image.c:1232
+#: misc/e2image.c:1227 misc/e2image.c:1245
 msgid "Programming error: multiple sequential refcount blocks created!\n"
 msgstr "程序错误:创建了多重序列的引用计数块!\n"
 
-#: misc/e2image.c:1272
+#: misc/e2image.c:1286
 msgid "while allocating block bitmap"
 msgstr "写入块位图时"
 
-#: misc/e2image.c:1281
+#: misc/e2image.c:1295
 msgid "while allocating scramble block bitmap"
 msgstr "写入加扰块位图时"
 
-#: misc/e2image.c:1288
+#: misc/e2image.c:1318
 msgid "Scanning inodes...\n"
 msgstr "扫描inode中...\n"
 
-#: misc/e2image.c:1300
+#: misc/e2image.c:1330
 msgid "Can't allocate block buffer"
 msgstr "无法为块缓存分配内存"
 
-#: misc/e2image.c:1339 misc/e2image.c:1353
+#: misc/e2image.c:1369 misc/e2image.c:1383
 #, c-format
 msgid "while iterating over inode %u"
 msgstr "获取遍历inode %u 时"
 
-#: misc/e2image.c:1385
+#: misc/e2image.c:1415
 msgid "Raw and qcow2 images cannot be installed"
 msgstr "原始镜像和qcow2镜像无法被安装"
 
-#: misc/e2image.c:1407
+#: misc/e2image.c:1437
 msgid "error reading bitmaps"
 msgstr "读取位图时发生错误"
 
-#: misc/e2image.c:1419
+#: misc/e2image.c:1449
 msgid "while opening device file"
 msgstr "打开设备文件时"
 
-#: misc/e2image.c:1430
+#: misc/e2image.c:1460
 msgid "while restoring the image table"
 msgstr "存储镜像表时"
 
-#: misc/e2image.c:1527
+#: misc/e2image.c:1565
 msgid "-a option can only be used with raw or QCOW2 images."
-msgstr "-a 选项只能用于原始或qcow2镜像"
+msgstr "-a 选项只能用于原始或 QCOW2 镜像。"
+
+#: misc/e2image.c:1570
+msgid "-b option can only be used with raw or QCOW2 images."
+msgstr "-b 选项只能用于原始或 QCOW2 镜像。"
 
-#: misc/e2image.c:1533
+#: misc/e2image.c:1576
 msgid "Offsets are only allowed with raw images."
 msgstr "偏移量只能用于原始镜像"
 
-#: misc/e2image.c:1538
+#: misc/e2image.c:1581
 msgid "Move mode is only allowed with raw images."
 msgstr "移动模式只能用于原始镜像"
 
-#: misc/e2image.c:1543
+#: misc/e2image.c:1586
 msgid "Move mode requires all data mode."
 msgstr "原始镜像需要完全数据模式。"
 
-#: misc/e2image.c:1553
+#: misc/e2image.c:1596
 msgid "checking if mounted"
 msgstr "检测其是否已挂载"
 
-#: misc/e2image.c:1560
+#: misc/e2image.c:1603
 msgid ""
 "\n"
 "Running e2image on a R/W mounted filesystem can result in an\n"
@@ -4595,46 +4672,51 @@ msgstr ""
 "对可读写的文件系统上运行e2image可能导致镜像不连续,\n"
 "这样的镜像也无法用于调试。如果你确实需要这样做,请使用 -f 选项。\n"
 
-#: misc/e2image.c:1614
+#: misc/e2image.c:1657
 msgid "QCOW2 image can not be written to the stdout!\n"
 msgstr "无法写入qcow2镜像到标准输出!\n"
 
-#: misc/e2image.c:1620
+#: misc/e2image.c:1663
 msgid "Can not stat output\n"
 msgstr "无法对输出进行stat操作\n"
 
-#: misc/e2image.c:1630
+#: misc/e2image.c:1673
 #, c-format
 msgid "Image (%s) is compressed\n"
 msgstr "镜像(%s)已被压缩\n"
 
-#: misc/e2image.c:1633
+#: misc/e2image.c:1676
 #, c-format
 msgid "Image (%s) is encrypted\n"
 msgstr "镜像(%s)已被加密\n"
 
-#: misc/e2image.c:1636
+#: misc/e2image.c:1679
+#, c-format
+msgid "Image (%s) is corrupted\n"
+msgstr "镜像(%s)已损坏\n"
+
+#: misc/e2image.c:1683
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr "尝试将qcow2镜像(%s)转换为raw镜像(%s)时"
 
-#: misc/e2image.c:1645
+#: misc/e2image.c:1693
 msgid "The -c option only supported in raw mode\n"
 msgstr "只有原始模式支持 -c 选项\n"
 
-#: misc/e2image.c:1650
+#: misc/e2image.c:1698
 msgid "The -c option not supported when writing to stdout\n"
 msgstr "写入到标准输出时无法使用 -c 选项\n"
 
-#: misc/e2image.c:1657
+#: misc/e2image.c:1705
 msgid "while allocating check_buf"
 msgstr "为check_buf分配内存时"
 
-#: misc/e2image.c:1663
+#: misc/e2image.c:1711
 msgid "The -p option only supported in raw mode\n"
 msgstr "只有原始模式支持 -p 选项\n"
 
-#: misc/e2image.c:1673
+#: misc/e2image.c:1721
 #, c-format
 msgid "%d blocks already contained the data to be copied\n"
 msgstr "%d 个块已包含需要被拷贝的数据\n"
@@ -4664,7 +4746,7 @@ msgstr "e2label:读取superblock出错\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label:不是一个ex2文件系统\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2978
+#: misc/e2label.c:97 misc/tune2fs.c:3117
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "警告:卷标太长,已截短。\n"
@@ -4679,161 +4761,161 @@ msgstr "e2label:无法定位到superblock\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label:写入超级块时出错\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:1590
+#: misc/e2label.c:117 misc/tune2fs.c:1687
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "用法:e2label 设备 [新卷标]\n"
 
-#: misc/e2undo.c:118
+#: misc/e2undo.c:124
 #, c-format
-msgid "Usage: %s [-f] [-h] [-n] [-v] <transaction file> <filesystem>\n"
-msgstr "用法:%s [-f] [-h] [-n] [-v] <事务文件> <文件系统>\n"
+msgid "Usage: %s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <transaction file> <filesystem>\n"
+msgstr "用法:%s [-f] [-h] [-n] [-o offset] [-v] [-z undo_file] <事务文件> <文件系统>\n"
 
-#: misc/e2undo.c:143
+#: misc/e2undo.c:149
 msgid "The file system superblock doesn't match the undo file.\n"
 msgstr "文件系统的超级块与撤销文件不匹配\n"
 
-#: misc/e2undo.c:146
+#: misc/e2undo.c:152
 msgid "UUID does not match.\n"
 msgstr "UUID 不匹配。\n"
 
-#: misc/e2undo.c:148
+#: misc/e2undo.c:154
 msgid "Last mount time does not match.\n"
 msgstr "上一次的挂载时间不匹配。\n"
 
-#: misc/e2undo.c:150
+#: misc/e2undo.c:156
 msgid "Last write time does not match.\n"
 msgstr "上一次的写入时间不匹配。\n"
 
-#: misc/e2undo.c:152
+#: misc/e2undo.c:158
 msgid "Lifetime write counter does not match.\n"
 msgstr "写入计数不匹配。\n"
 
-#: misc/e2undo.c:166
+#: misc/e2undo.c:172
 msgid "while reading filesystem superblock."
 msgstr "读取文件系统的超级块时"
 
-#: misc/e2undo.c:182
+#: misc/e2undo.c:188
 msgid "while fetching superblock"
 msgstr "获取超级块时"
 
-#: misc/e2undo.c:195
+#: misc/e2undo.c:201
 #, c-format
 msgid "Undo file superblock checksum doesn't match.\n"
 msgstr "撤销文件的超级块的校验值与超级块自身不符。\n"
 
-#: misc/e2undo.c:334
+#: misc/e2undo.c:340
 #, c-format
 msgid "illegal offset - %s"
 msgstr "偏移量无效 - %s"
 
-#: misc/e2undo.c:358
+#: misc/e2undo.c:364
 #, c-format
 msgid "Will not write to an undo file while replaying it.\n"
 msgstr "在进行重做操作时,不会写入到撤销文件。\n"
 
-#: misc/e2undo.c:367
+#: misc/e2undo.c:373
 #, c-format
 msgid "while opening undo file `%s'\n"
 msgstr "打开撤销文件“%s”时\n"
 
-#: misc/e2undo.c:374
+#: misc/e2undo.c:380
 msgid "while reading undo file"
 msgstr "读取坏撤销文件时"
 
-#: misc/e2undo.c:379
+#: misc/e2undo.c:385
 #, c-format
 msgid "%s: Not an undo file.\n"
 msgstr "%s:不是撤销文件。\n"
 
-#: misc/e2undo.c:390
+#: misc/e2undo.c:396
 #, c-format
 msgid "%s: Header checksum doesn't match.\n"
 msgstr "%s:头部校验值与自身不符。\n"
 
-#: misc/e2undo.c:397
+#: misc/e2undo.c:403
 #, c-format
 msgid "%s: Corrupt undo file header.\n"
 msgstr "%s:撤销文件头损坏。\n"
 
-#: misc/e2undo.c:401
+#: misc/e2undo.c:407
 #, c-format
 msgid "%s: Undo block size too large.\n"
 msgstr "%s:撤销块过小。\n"
 
-#: misc/e2undo.c:406
+#: misc/e2undo.c:412
 #, c-format
 msgid "%s: Undo block size too small.\n"
 msgstr "%s:撤销块过大。\n"
 
-#: misc/e2undo.c:419
+#: misc/e2undo.c:425
 #, c-format
 msgid "%s: Unknown undo file feature set.\n"
 msgstr "%s:设置了未知的撤销文件属性。\n"
 
-#: misc/e2undo.c:427
+#: misc/e2undo.c:433
 #, c-format
 msgid "Error while determining whether %s is mounted."
 msgstr "确定 %s 是否已挂载时出错。"
 
-#: misc/e2undo.c:433
+#: misc/e2undo.c:439
 msgid "e2undo should only be run on unmounted filesystems"
 msgstr "e2undo 只能用于未挂载的文件系统"
 
-#: misc/e2undo.c:449
+#: misc/e2undo.c:455
 #, c-format
 msgid "while opening `%s'"
 msgstr "打开“%s”时"
 
-#: misc/e2undo.c:460
+#: misc/e2undo.c:466
 msgid "specified offset is too large"
 msgstr "指定的偏移量太大"
 
-#: misc/e2undo.c:501
+#: misc/e2undo.c:507
 msgid "while reading keys"
 msgstr "读取键时"
 
-#: misc/e2undo.c:513
+#: misc/e2undo.c:519
 #, c-format
 msgid "%s: wrong key magic at %llu\n"
 msgstr "%s:%llu 中的键幻数有错\n"
 
-#: misc/e2undo.c:523
+#: misc/e2undo.c:529
 #, c-format
 msgid "%s: key block checksum error at %llu.\n"
 msgstr "%s:%llu 中的键块的校验值有错。\n"
 
-#: misc/e2undo.c:546
+#: misc/e2undo.c:552
 #, c-format
 msgid "%s: block %llu is too long."
 msgstr "%s:块 %llu 太长。"
 
-#: misc/e2undo.c:558 misc/e2undo.c:594
+#: misc/e2undo.c:564 misc/e2undo.c:600
 #, c-format
 msgid "while fetching block %llu."
 msgstr "获取块 %llu 时。"
 
-#: misc/e2undo.c:570
+#: misc/e2undo.c:576
 #, c-format
 msgid "checksum error in filesystem block %llu (undo blk %llu)\n"
 msgstr "文件系统块 %llu 中的校验值有误(undo blk %llu)\n"
 
-#: misc/e2undo.c:609
+#: misc/e2undo.c:615
 #, c-format
 msgid "while writing block %llu."
 msgstr "写块 %llu 时。"
 
-#: misc/e2undo.c:615
+#: misc/e2undo.c:621
 #, c-format
 msgid "Undo file corruption; run e2fsck NOW!\n"
 msgstr "撤销文件损坏;请立即运行 e2fsck!\n"
 
-#: misc/e2undo.c:617
+#: misc/e2undo.c:623
 #, c-format
 msgid "IO error during replay; run e2fsck NOW!\n"
 msgstr "执行重做操作时出现输入/输出错误;请立即运行 e2fsck!\n"
 
-#: misc/e2undo.c:620
+#: misc/e2undo.c:626
 #, c-format
 msgid "Incomplete undo record; run e2fsck.\n"
 msgstr "撤销记录不完整;请运行 e2fsck。\n"
@@ -4879,12 +4961,8 @@ msgstr ""
 
 #: misc/findsuper.c:190
 #, c-format
-msgid ""
-"byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/"
-"mount_time           sb_uuid label\n"
-msgstr ""
-"偏移字节     起始字节      结束字节   块数      块大小  grp  创建/挂载时"
-"间             超级块 UUID 标签\n"
+msgid "byte_offset  byte_start     byte_end  fs_blocks blksz  grp  mkfs/mount_time           sb_uuid label\n"
+msgstr "偏移字节     起始字节      结束字节   块数      块大小  grp  创建/挂载时间             超级块 UUID 标签\n"
 
 #: misc/findsuper.c:264
 #, c-format
@@ -4916,39 +4994,39 @@ msgstr ""
 "\t我将会设法完成任务,但你应当尽快修复/etc/fstab。\n"
 "\n"
 
-#: misc/fsck.c:478
+#: misc/fsck.c:485
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck:%s:未找到\n"
 
-#: misc/fsck.c:594
+#: misc/fsck.c:601
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr ""
 "%s:等待中:没有子进程了吗?!?\n"
 "\n"
 
-#: misc/fsck.c:616
+#: misc/fsck.c:623
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "警告... 设备%s 的 %s 操作收到 %d 信号后退出。\n"
 
-#: misc/fsck.c:622
+#: misc/fsck.c:629
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s:状态为 %x,这不应当发生。\n"
 
-#: misc/fsck.c:661
+#: misc/fsck.c:668
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "已完成 %s (退出状态码 %d)\n"
 
-#: misc/fsck.c:721
+#: misc/fsck.c:728
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%1$s:执行fsck.%3$s %4$s 时出错, 退出状态码 %2$d\n"
 
-#: misc/fsck.c:742
+#: misc/fsck.c:749
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -4956,46 +5034,41 @@ msgstr ""
 "所有通过 -t 选项指定的文件系统类型必须都含有(或都不含有)\n"
 "“no”或“!”前缀。\n"
 
-#: misc/fsck.c:761
+#: misc/fsck.c:768
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr ""
 "无法为创建指定文件系统类型分配内存\n"
 "\n"
 
-#: misc/fsck.c:884
+#: misc/fsck.c:891
 #, 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:跳过/etc/fstab中的错误行:传递给fsck非零值的bind挂载项\n"
 
-#: misc/fsck.c:911
+#: misc/fsck.c:918
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck:无法检查 %s:找不到fsck.%s\n"
 
-#: misc/fsck.c:967
+#: misc/fsck.c:974
 msgid "Checking all file systems.\n"
 msgstr "正在检查所有文件系统。\n"
 
-#: misc/fsck.c:1058
+#: misc/fsck.c:1065
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--请稍候-- (第 %d 步)n\n"
 
-#: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
-msgstr ""
-"用法:fsck [-AMNPRTV] [ -C [ fd ] ] [-t 文件系统类型] [文件系统选项] [文件系"
-"统 ...]\n"
+#: misc/fsck.c:1085
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "用法:fsck [-AMNPRTV] [ -C [ fd ] ] [-t 文件系统类型] [文件系统选项] [文件系统 ...]\n"
 
-#: misc/fsck.c:1120
+#: misc/fsck.c:1127
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s:设备过多\n"
 
-#: misc/fsck.c:1153 misc/fsck.c:1239
+#: misc/fsck.c:1160 misc/fsck.c:1246
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s:参数过多\n"
@@ -5009,44 +5082,44 @@ msgstr "以只读模式挂载。\n"
 msgid "%s: Allowing users to allocate all blocks. This is dangerous!\n"
 msgstr "%s:允许用户分配所有块。这样做很危险!\n"
 
-#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3794
+#: misc/fuse2fs.c:3781 misc/fuse2fs.c:3795
 #, c-format
 msgid "%s: %s.\n"
 msgstr "%s:%s。\n"
 
-#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3796 misc/tune2fs.c:3207
+#: misc/fuse2fs.c:3782 misc/fuse2fs.c:3797 misc/tune2fs.c:3013
 #, c-format
 msgid "Please run e2fsck -fy %s.\n"
 msgstr "请先运行“e2fsck -fy %s”。\n"
 
-#: misc/fuse2fs.c:3803
+#: misc/fuse2fs.c:3804
 msgid "Journal needs recovery; running `e2fsck -E journal_only' is required.\n"
 msgstr "日志需要恢复;请运行“e2fsck -E journal_only”。\n"
 
-#: misc/fuse2fs.c:3811
+#: misc/fuse2fs.c:3812
 #, c-format
 msgid "%s: Writing to the journal is not supported.\n"
 msgstr "%s:不支持写入日志。\n"
 
-#: misc/fuse2fs.c:3826
+#: misc/fuse2fs.c:3827
 msgid "Warning: Mounting unchecked fs, running e2fsck is recommended.\n"
 msgstr "警告:正在挂载未经检查的文件系统,建议您先运行 e2fsck。\n"
 
-#: misc/fuse2fs.c:3830
+#: misc/fuse2fs.c:3831
 msgid "Warning: Maximal mount count reached, running e2fsck is recommended.\n"
 msgstr ""
 "警告:尝试挂载次数超过最大值,建议您运行 e2fsck。\n"
 "\n"
 
-#: misc/fuse2fs.c:3835
+#: misc/fuse2fs.c:3836
 msgid "Warning: Check time reached; running e2fsck is recommended.\n"
 msgstr "警告:检查超时,建议您运行 e2fsck。\n"
 
-#: misc/fuse2fs.c:3839
+#: misc/fuse2fs.c:3840
 msgid "Orphans detected; running e2fsck is recommended.\n"
 msgstr "检测到孤立块;建议您运行 e2fsck。\n"
 
-#: misc/fuse2fs.c:3843
+#: misc/fuse2fs.c:3844
 msgid "Errors detected; running e2fsck is required.\n"
 msgstr "检测到错误;请运行 e2fsck。\n"
 
@@ -5070,7 +5143,7 @@ msgstr "读取 %s 的项目时"
 msgid "While reading version on %s"
 msgstr "设置 %s 的版本时"
 
-#: misc/mke2fs.c:124
+#: misc/mke2fs.c:130
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -5079,8 +5152,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] [-e errors_behavior][-z "
-"undo_file]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]\n"
 "\t[-jnqvDFSV] device [blocks-count]\n"
 msgstr ""
 "用法:%s [-c|-l 文件名] [-b 块大小] [-C 簇大小]\n"
@@ -5092,35 +5164,35 @@ msgstr ""
 "\t[-t 文件系统类型] [-T 用法类型] [-U UUID] [-e 错误行为][-z 撤销文件]\n"
 "\t[-jnqvDFKSV] 设备 [块数]\n"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Running command: %s\n"
 msgstr "正在执行命令:%s\n"
 
-#: misc/mke2fs.c:259
+#: misc/mke2fs.c:265
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "尝试运行“%s”时"
 
-#: misc/mke2fs.c:266
+#: misc/mke2fs.c:272
 msgid "while processing list of bad blocks from program"
 msgstr "处理从badblocks获取的坏块列表时"
 
-#: misc/mke2fs.c:293
+#: misc/mke2fs.c:299
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "主超级块/组描述符中的块 %d 为坏块。\n"
 
-#: misc/mke2fs.c:295
+#: misc/mke2fs.c:301
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr "若要创建文件系统,块 %u 至 %u 必须为好块。\n"
 
-#: misc/mke2fs.c:298
+#: misc/mke2fs.c:304
 msgid "Aborting....\n"
 msgstr "正在终止...\n"
 
-#: misc/mke2fs.c:318
+#: misc/mke2fs.c:324
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -5130,15 +5202,19 @@ msgstr ""
 "警告:备份超级块/组描述符中发现坏块(%u)\n"
 "\n"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:343
 msgid "while marking bad blocks as used"
 msgstr "将坏块标记为已使用的"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:368
+msgid "while writing reserved inodes"
+msgstr "写入预留 inode 时"
+
+#: misc/mke2fs.c:420
 msgid "Writing inode tables: "
 msgstr "正在写入inode表: "
 
-#: misc/mke2fs.c:430
+#: misc/mke2fs.c:442
 #, c-format
 msgid ""
 "\n"
@@ -5147,76 +5223,76 @@ msgstr ""
 "\n"
 "无法写入 %d 个块到起始于%llu的inode表:%s\n"
 
-#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
+#: misc/mke2fs.c:456 misc/mke2fs.c:2809 misc/mke2fs.c:3214
 msgid "done                            \n"
 msgstr "完成                            \n"
 
-#: misc/mke2fs.c:459
+#: misc/mke2fs.c:471
 msgid "while creating root dir"
 msgstr "创建根目录时"
 
-#: misc/mke2fs.c:466
+#: misc/mke2fs.c:478
 msgid "while reading root inode"
 msgstr "读取坏块inode时"
 
-#: misc/mke2fs.c:478
+#: misc/mke2fs.c:490
 msgid "while setting root inode ownership"
 msgstr "设置根目录的所有者时"
 
-#: misc/mke2fs.c:496
+#: misc/mke2fs.c:508
 msgid "while creating /lost+found"
 msgstr "创建/lost+found目录时"
 
-#: misc/mke2fs.c:503
+#: misc/mke2fs.c:515
 msgid "while looking up /lost+found"
 msgstr "查找/lost+found目录时"
 
-#: misc/mke2fs.c:516
+#: misc/mke2fs.c:528
 msgid "while expanding /lost+found"
 msgstr "扩充/lost+found目录时"
 
-#: misc/mke2fs.c:531
+#: misc/mke2fs.c:543
 msgid "while setting bad block inode"
 msgstr "设置坏块inode时"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "擦除扇区 %d-%d 时内存耗尽\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "警告:无法读取块 0:%s\n"
 
-#: misc/mke2fs.c:584
+#: misc/mke2fs.c:596
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "警告:无法擦除块 %d:%s\n"
 
-#: misc/mke2fs.c:600
+#: misc/mke2fs.c:612
 msgid "while initializing journal superblock"
 msgstr "初始化日志超级块时"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:620
 msgid "Zeroing journal device: "
 msgstr "正在对日志设备填零: "
 
-#: misc/mke2fs.c:620
+#: misc/mke2fs.c:632
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "对日志设备填零时(块 %llu,计数 %d)"
 
-#: misc/mke2fs.c:638
+#: misc/mke2fs.c:650
 msgid "while writing journal superblock"
 msgstr "写入日志超级块时"
 
-#: misc/mke2fs.c:653
+#: misc/mke2fs.c:665
 #, c-format
 msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
 msgstr "创建含有 %llu 个块(每块 %dk)和 %u 个inode的文件系统\n"
 
-#: misc/mke2fs.c:661
+#: misc/mke2fs.c:673
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -5225,161 +5301,195 @@ msgstr ""
 "警告:%llu 块未使用。\n"
 "\n"
 
-#: misc/mke2fs.c:666
+#: misc/mke2fs.c:678
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "文件系统标签=%s\n"
 
-#: misc/mke2fs.c:669
+#: misc/mke2fs.c:681
 #, c-format
 msgid "OS type: %s\n"
 msgstr "操作系统: %s\n"
 
-#: misc/mke2fs.c:671
+#: misc/mke2fs.c:683
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "块大小=%u(log=%u)\n"
 
-#: misc/mke2fs.c:674
+#: misc/mke2fs.c:686
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "簇大小=%u(log=%u)\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:690
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "分块大小=%u(log=%u)\n"
 
-#: misc/mke2fs.c:680
+#: misc/mke2fs.c:692
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "步长=%u 块,带宽=%u 块\n"
 
-#: misc/mke2fs.c:682
+#: misc/mke2fs.c:694
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u 个inode,%llu 个块\n"
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:696
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu 个块(%2.2f%%)为超级用户保留\n"
 
-#: misc/mke2fs.c:687
+#: misc/mke2fs.c:699
 #, c-format
 msgid "First data block=%u\n"
 msgstr "第一个数据块=%u\n"
 
-#: misc/mke2fs.c:689
+#: misc/mke2fs.c:701
 #, c-format
 msgid "Root directory owner=%u:%u\n"
 msgstr "根目录的所有者=%u:%u\n"
 
-#: misc/mke2fs.c:691
+#: misc/mke2fs.c:703
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "文件系统块的最大值=%lu\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:707
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u 个块组\n"
 
-#: misc/mke2fs.c:697
+#: misc/mke2fs.c:709
 #, c-format
 msgid "%u block group\n"
 msgstr "%u 个块组\n"
 
-#: misc/mke2fs.c:699
+#: misc/mke2fs.c:711
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr ""
 "每组 %u 个块,%u 个簇\n"
 "\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:714
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr ""
 "每组 %u 个块,%u 个碎片\n"
 "\n"
 
-#: misc/mke2fs.c:704
+#: misc/mke2fs.c:716
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "每组 %u 个inode\n"
 
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:725
 #, c-format
 msgid "Filesystem UUID: %s\n"
 msgstr "文件系统UUID:%s\n"
 
-#: misc/mke2fs.c:714
+#: misc/mke2fs.c:726
 msgid "Superblock backups stored on blocks: "
 msgstr "超级块的备份存储于下列块: "
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:822
 #, c-format
 msgid "%s requires '-O 64bit'\n"
 msgstr ""
 "%s 需要“-O 64bit”选项\n"
 "\n"
 
-#: misc/mke2fs.c:814
+#: misc/mke2fs.c:828
 #, c-format
 msgid "'%s' must be before 'resize=%u'\n"
 msgstr "“%s”选项必须位于“resize=%u”之前\n"
 
-#: misc/mke2fs.c:827
+#: misc/mke2fs.c:841
 #, c-format
 msgid "Invalid desc_size: '%s'\n"
 msgstr "desc_size值无效:“%s”\n"
 
-#: misc/mke2fs.c:840
+#: misc/mke2fs.c:855
+#, fuzzy, c-format
+#| msgid "Invalid new size: %s\n"
+msgid "Invalid hash seed: %s\n"
+msgstr "无效的新大小: %s\n"
+
+#: misc/mke2fs.c:867
 #, c-format
 msgid "Invalid offset: %s\n"
 msgstr "无效的偏移量: %s\n"
 
-#: misc/mke2fs.c:854 misc/tune2fs.c:1958
+#: misc/mke2fs.c:881 misc/tune2fs.c:2055
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "无效mmp更新间隔:%s\n"
 
-#: misc/mke2fs.c:868
+#: misc/mke2fs.c:898
 #, c-format
 msgid "Invalid # of backup superblocks: %s\n"
 msgstr "备份超级块编号无效:%s\n"
 
-#: misc/mke2fs.c:890
+#: misc/mke2fs.c:920
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "无效的步长参数:%s\n"
 
-#: misc/mke2fs.c:905
+#: misc/mke2fs.c:935
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "无效的带宽参数:%s\n"
 
-#: misc/mke2fs.c:928
+#: misc/mke2fs.c:958
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "无效的改变大小参数:%s\n"
 
-#: misc/mke2fs.c:935
+#: misc/mke2fs.c:965
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr "所需改变的大小必须大于当前文件系统的大小。\n"
 
-#: misc/mke2fs.c:959
+#: misc/mke2fs.c:989
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr "版本为0的文件系统不支持在线改变大小。\n"
 
-#: misc/mke2fs.c:985 misc/mke2fs.c:994
+#: misc/mke2fs.c:1015 misc/mke2fs.c:1024
 #, c-format
 msgid "Invalid root_owner: '%s'\n"
 msgstr "无效的根目录所有者:“%s”\n"
 
-#: misc/mke2fs.c:1035
+#: misc/mke2fs.c:1069
 #, c-format
+msgid "Invalid encoding: %s"
+msgstr "无效的编码:%s"
+
+#: misc/mke2fs.c:1087
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Bad option(s) specified: %s\n"
+#| "\n"
+#| "Extended options are separated by commas, and may take an argument which\n"
+#| "\tis set off by an equals ('=') sign.\n"
+#| "\n"
+#| "Valid extended options are:\n"
+#| "\tmmp_update_interval=<interval>\n"
+#| "\tnum_backup_sb=<0|1|2>\n"
+#| "\tstride=<RAID per-disk data chunk in blocks>\n"
+#| "\tstripe-width=<RAID stride * data disks in blocks>\n"
+#| "\toffset=<offset to create the file system>\n"
+#| "\tresize=<resize maximum size in blocks>\n"
+#| "\tpacked_meta_blocks=<0 to disable, 1 to enable>\n"
+#| "\tlazy_itable_init=<0 to disable, 1 to enable>\n"
+#| "\tlazy_journal_init=<0 to disable, 1 to enable>\n"
+#| "\troot_owner=<uid of root dir>:<gid of root dir>\n"
+#| "\ttest_fs\n"
+#| "\tdiscard\n"
+#| "\tnodiscard\n"
+#| "\tquotatype=<quota type(s) to be enabled>\n"
+#| "\n"
 msgid ""
 "\n"
 "Bad option(s) specified: %s\n"
@@ -5401,6 +5511,8 @@ msgid ""
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
+"\tencoding=<encoding>\n"
+"\tencoding_flags=<flags>\n"
 "\tquotatype=<quota type(s) to be enabled>\n"
 "\n"
 msgstr ""
@@ -5426,7 +5538,7 @@ msgstr ""
 "\tquotatype=<要启用的配额类型>\n"
 "\n"
 
-#: misc/mke2fs.c:1060
+#: misc/mke2fs.c:1114
 #, c-format
 msgid ""
 "\n"
@@ -5438,7 +5550,17 @@ msgstr ""
 "\n"
 "\n"
 
-#: misc/mke2fs.c:1102
+#: misc/mke2fs.c:1125
+#, c-format
+msgid "error: Invalid encoding flag: %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:1131
+#, c-format
+msgid "error: An encoding must be explicitly specified when passing encoding-flags\n"
+msgstr ""
+
+#: misc/mke2fs.c:1179
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -5447,17 +5569,17 @@ msgstr ""
 "mke2fs配置文件中有语法错误(%s,第 %d 行)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1192 misc/tune2fs.c:1068
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "设置了无效的文件系统选项:%s\n"
 
-#: misc/mke2fs.c:1127 misc/tune2fs.c:406
+#: misc/mke2fs.c:1204 misc/tune2fs.c:417
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "设置了无效的挂载选项:%s\n"
 
-#: misc/mke2fs.c:1263
+#: misc/mke2fs.c:1340
 #, c-format
 msgid ""
 "\n"
@@ -5466,7 +5588,7 @@ msgstr ""
 "\n"
 "你的mke2fs.conf文件中没有定义类型 %s 的文件系统。\n"
 
-#: misc/mke2fs.c:1267
+#: misc/mke2fs.c:1344
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
@@ -5474,11 +5596,11 @@ msgstr ""
 "你可能需要升级mke2fs.conf文件。\n"
 "\n"
 
-#: misc/mke2fs.c:1271
+#: misc/mke2fs.c:1348
 msgid "Aborting...\n"
 msgstr "正在终止...\n"
 
-#: misc/mke2fs.c:1312
+#: misc/mke2fs.c:1389
 #, c-format
 msgid ""
 "\n"
@@ -5489,156 +5611,154 @@ msgstr ""
 "警告:mke2fs.conf中未定义文件系统类型 %s\n"
 "\n"
 
-#: misc/mke2fs.c:1494
+#: misc/mke2fs.c:1571
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "无法为新路径分配内存。\n"
 
-#: misc/mke2fs.c:1535
+#: misc/mke2fs.c:1608
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "无法成功初始化配置(错误:%ld)。\n"
 
-#: misc/mke2fs.c:1568
+#: misc/mke2fs.c:1641
 #, c-format
 msgid "invalid block size - %s"
 msgstr "无效的块大小 - %s"
 
-#: misc/mke2fs.c:1572
+#: misc/mke2fs.c:1645
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "警告:块大小 %d 在很多系统中不可用。\n"
 
-#: misc/mke2fs.c:1588
+#: misc/mke2fs.c:1661
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "无效的簇大小 - %s"
 
-#: misc/mke2fs.c:1601
+#: misc/mke2fs.c:1674
 msgid "'-R' is deprecated, use '-E' instead"
 msgstr "“-R” 选项已被废弃,请使用“-E”选项"
 
-#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1688 misc/tune2fs.c:1784
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "出错行为有误 - %s"
 
-#: misc/mke2fs.c:1627
+#: misc/mke2fs.c:1700
 msgid "Illegal number for blocks per group"
 msgstr "非法的每组块数"
 
-#: misc/mke2fs.c:1632
+#: misc/mke2fs.c:1705
 msgid "blocks per group must be multiple of 8"
 msgstr "每组块数必须是8的倍数"
 
-#: misc/mke2fs.c:1640
+#: misc/mke2fs.c:1713
 msgid "Illegal number for flex_bg size"
 msgstr "非法的弹性组大小"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1719
 msgid "flex_bg size must be a power of 2"
 msgstr "弹性组的大小必须是2的次方"
 
-#: misc/mke2fs.c:1651
+#: misc/mke2fs.c:1724
 #, c-format
 msgid "flex_bg size (%lu) must be less than or equal to 2^31"
 msgstr "弹性组的大小(%lu)必须小于等于2^31"
 
-#: misc/mke2fs.c:1661
+#: misc/mke2fs.c:1734
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "无效的inode比 %s(最小 %d /最大 %d)"
 
-#: misc/mke2fs.c:1671
+#: misc/mke2fs.c:1744
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "无效的inode大小 - %s"
 
-#: misc/mke2fs.c:1684
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
+#: misc/mke2fs.c:1757
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
 msgstr ""
 "警告:-K 选项已被废弃,今后也不应当被使用。请使用扩展选项\n"
 "“-E nodiscard”作为替代!\n"
 
-#: misc/mke2fs.c:1695
+#: misc/mke2fs.c:1768
 msgid "in malloc for bad_blocks_filename"
 msgstr "为bad_blocks_filename分配内存时"
 
-#: misc/mke2fs.c:1704
+#: misc/mke2fs.c:1777
 #, c-format
 msgid ""
 "Warning: label too long; will be truncated to '%s'\n"
 "\n"
 msgstr "警告:卷标太长,已截短为“%s”\n"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:1786
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "无效的保留块百分比 - %s"
 
-#: misc/mke2fs.c:1728
+#: misc/mke2fs.c:1801
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "错误的inode数 - %s"
 
-#: misc/mke2fs.c:1741
+#: misc/mke2fs.c:1814
 msgid "while allocating fs_feature string"
 msgstr "分配 fs_feature 字符串时"
 
-#: misc/mke2fs.c:1758
+#: misc/mke2fs.c:1831
 #, c-format
 msgid "bad revision level - %s"
 msgstr "错误的版本号 - %s"
 
-#: misc/mke2fs.c:1763
+#: misc/mke2fs.c:1836
 #, c-format
 msgid "while trying to create revision %d"
 msgstr "尝试创建版本 %d 时"
 
-#: misc/mke2fs.c:1777
+#: misc/mke2fs.c:1850
 msgid "The -t option may only be used once"
 msgstr "-t 选项只能被指定一次"
 
-#: misc/mke2fs.c:1785
+#: misc/mke2fs.c:1858
 msgid "The -T option may only be used once"
 msgstr "-T 选项只能被指定一次"
 
-#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
+#: misc/mke2fs.c:1914 misc/mke2fs.c:3298
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "尝试打开日志设备 %s 时\n"
 
-#: misc/mke2fs.c:1847
+#: misc/mke2fs.c:1920
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "日志设备的块大小(%d)不能低于最小的块大小 %d\n"
 
-#: misc/mke2fs.c:1853
+#: misc/mke2fs.c:1926
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "根据日志设备确定块大小:%d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1937
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "无效的块数“%s”于设备“%s”"
 
-#: misc/mke2fs.c:1888
+#: misc/mke2fs.c:1967
 msgid "filesystem"
 msgstr "文件系统"
 
-#: misc/mke2fs.c:1901 resize/main.c:491
+#: misc/mke2fs.c:1985 resize/main.c:497
 msgid "while trying to determine filesystem size"
 msgstr "尝试确定文件系统大小时"
 
-#: misc/mke2fs.c:1907
+#: misc/mke2fs.c:1991
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
 msgstr "无法确定设备大小;你必须手动指定大小\n"
 
-#: misc/mke2fs.c:1914
+#: misc/mke2fs.c:1998
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5649,45 +5769,48 @@ msgstr ""
 "\t执行fdisk后未被重新加载(分区正被占用)导致的。\n"
 "\t你可能需要重启后重新读取分区表。\n"
 
-#: misc/mke2fs.c:1931
+#: misc/mke2fs.c:2015
 msgid "Filesystem larger than apparent device size."
 msgstr "文件系统大小超过设备的实际大小。"
 
-#: misc/mke2fs.c:1951
+#: misc/mke2fs.c:2035
 msgid "Failed to parse fs types list\n"
 msgstr "解析文件系统类型列表失败\n"
 
-#: misc/mke2fs.c:1999
+#: misc/mke2fs.c:2085
 msgid "The HURD does not support the filetype feature.\n"
 msgstr "HURD 不支持文件类型。\n"
 
-#: misc/mke2fs.c:2004
+#: misc/mke2fs.c:2090
 msgid "The HURD does not support the huge_file feature.\n"
 msgstr "HURD 不支持大文件特性。\n"
 
-#: misc/mke2fs.c:2009
+#: misc/mke2fs.c:2095
 msgid "The HURD does not support the metadata_csum feature.\n"
 msgstr "HURD 不支持元数据校验值特性。\n"
 
-#: misc/mke2fs.c:2019
+#: misc/mke2fs.c:2100
+msgid "The HURD does not support the ea_inode feature.\n"
+msgstr "HURD 不支持 ea_inode 特性。\n"
+
+#: misc/mke2fs.c:2110
 msgid "while trying to determine hardware sector size"
 msgstr "尝试确定硬件扇区大小时"
 
-#: misc/mke2fs.c:2025
+#: misc/mke2fs.c:2116
 msgid "while trying to determine physical sector size"
 msgstr "尝试确定物理扇区大小时"
 
-#: misc/mke2fs.c:2057
+#: misc/mke2fs.c:2148
 msgid "while setting blocksize; too small for device\n"
 msgstr "设置块大小时;对于设备来说太小\n"
 
-#: misc/mke2fs.c:2062
+#: misc/mke2fs.c:2153
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
 msgstr "警告:指定的块大小 %d 小于设备物理扇区大小%d\n"
 
-#: misc/mke2fs.c:2086
+#: misc/mke2fs.c:2177
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -5696,8 +5819,11 @@ msgstr ""
 "%1$s:设备 %3$s 的尺寸(0x%2$llx 个块)太大,无法用32位数表示\n"
 "\t改为使用 %4$d 的块大小。\n"
 
-#: misc/mke2fs.c:2098
+#: misc/mke2fs.c:2191
 #, fuzzy, 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"
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to create\n"
 "\ta filesystem using a blocksize of %d.\n"
@@ -5705,80 +5831,82 @@ msgstr ""
 "%1$s:设备 %3$s 的尺寸(0x%2$llx 个块)太大,无法用32位数表示\n"
 "\t改为使用 %4$d 的块大小。\n"
 
-#: misc/mke2fs.c:2120
+#: misc/mke2fs.c:2213
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "mke2fs.conf中有关文件系统类型的解释: "
 
-#: misc/mke2fs.c:2127
+#: misc/mke2fs.c:2220
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 "版本为0的文件系统不支持这些特性\n"
 "\n"
 
-#: misc/mke2fs.c:2135
+#: misc/mke2fs.c:2228
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr "版本为0的文件系统不支持分散式超级块\n"
 
-#: misc/mke2fs.c:2145
+#: misc/mke2fs.c:2238
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "版本为0的文件系统不支持日志\n"
 
-#: misc/mke2fs.c:2158
+#: misc/mke2fs.c:2251
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "无效的保留块百分比 - %lf"
 
-#: misc/mke2fs.c:2175
-msgid ""
-"Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to "
-"rectify.\n"
+#: misc/mke2fs.c:2268
+msgid "Extents MUST be enabled for a 64-bit filesystem.  Pass -O extents to rectify.\n"
 msgstr "64位系统必须启用extent特性。请使用“-O extents”选项来修正。\n"
 
-#: misc/mke2fs.c:2195
+#: misc/mke2fs.c:2288
 msgid "The cluster size may not be smaller than the block size.\n"
 msgstr "簇大小不能小于块大小。\n"
 
-#: misc/mke2fs.c:2201
+#: misc/mke2fs.c:2294
 msgid "specifying a cluster size requires the bigalloc feature"
 msgstr "指定簇大小需要启用bigalloc特性"
 
-#: misc/mke2fs.c:2221
+#: misc/mke2fs.c:2314
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "警告:无法获取 %s 的设备布局\n"
 
-#: misc/mke2fs.c:2224
+#: misc/mke2fs.c:2317
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "%s 未对齐,偏移了 %lu 个字节。\n"
 
-#: misc/mke2fs.c:2226
+#: misc/mke2fs.c:2319
 #, 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 "这可能导致性能下降,建议重新进行分区。\n"
 
-#: misc/mke2fs.c:2247
+#: misc/mke2fs.c:2340
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d字节的块对于系统来说太大(最大为 %d)"
 
-#: misc/mke2fs.c:2251
+#: misc/mke2fs.c:2344
 #, 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 "警告:%d字节的块对于系统来说太大(最大为 %d),但仍然强制进行操作\n"
 
-#: misc/mke2fs.c:2259
+#: misc/mke2fs.c:2352
 #, c-format
-msgid ""
-"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
-"and journal checksum features.\n"
+msgid "Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata and journal checksum features.\n"
+msgstr "建议:使用 3.18 以上的 Linux 内核以提高元数据稳定性,以及使用日志校验值特性。\n"
+
+#: misc/mke2fs.c:2398
+#, c-format
+msgid "Unknown filename encoding from profile: %s"
 msgstr ""
-"建议:使用 3.18 以上的 Linux 内核以提高元数据稳定性,以及使用日志校验值特"
-"性。\n"
 
-#: misc/mke2fs.c:2314
+#: misc/mke2fs.c:2409
+#, c-format
+msgid "Unknown encoding flags from profile: %s"
+msgstr ""
+
+#: misc/mke2fs.c:2434
 #, c-format
 msgid ""
 "\n"
@@ -5792,11 +5920,29 @@ msgstr ""
 "将创建含有 %llu 个块的文件系统,这可能与您的预期不服。\n"
 "\n"
 
-#: misc/mke2fs.c:2331
+#: misc/mke2fs.c:2449
+#, fuzzy, c-format
+#| msgid "%d byte inodes are too small for project quota; specify larger size"
+msgid "%d byte inodes are too small for project quota"
+msgstr "%d 字节的 inode 对于项目配额来说太小;请指定一个更大的值"
+
+#: misc/mke2fs.c:2465
+#, fuzzy
+#| msgid ""
+#| "The resize_inode and meta_bg features are not compatible.\n"
+#| "They can not be both enabled simultaneously.\n"
+msgid ""
+"The encrypt and casefold features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"resize_inode 和 meta_bg 特性不兼容。\n"
+"无法同时启用它们。\n"
+
+#: misc/mke2fs.c:2480
 msgid "Can't support bigalloc feature without extents feature"
 msgstr "无法在缺乏extent特性的情况下支持bigalloc特性"
 
-#: misc/mke2fs.c:2338
+#: misc/mke2fs.c:2487
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
@@ -5804,7 +5950,7 @@ msgstr ""
 "resize_inode 和 meta_bg 特性不兼容。\n"
 "无法同时启用它们。\n"
 
-#: misc/mke2fs.c:2346
+#: misc/mke2fs.c:2495
 msgid ""
 "\n"
 "Warning: the bigalloc feature is still under development\n"
@@ -5816,44 +5962,39 @@ msgstr ""
 "更多详情请参见 https://ext4.wiki.kernel.org/index.php/Bigalloc\n"
 "\n"
 
-#: misc/mke2fs.c:2358
+#: misc/mke2fs.c:2507
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr "非分散式文件系统不支持为在线调整大小设置保留块"
 
-#: misc/mke2fs.c:2367
+#: misc/mke2fs.c:2516
 msgid "blocks per group count out of range"
 msgstr "每组块数超过允许范围"
 
-#: misc/mke2fs.c:2389
+#: misc/mke2fs.c:2538
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr "弹性组特性未启用,所以无法指定弹性组尺寸"
 
-#: misc/mke2fs.c:2401
+#: misc/mke2fs.c:2550
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "无效的inode大小 %d(最小 %d /最大 %d)"
 
-#: misc/mke2fs.c:2416
+#: misc/mke2fs.c:2565
 #, c-format
 msgid "%d byte inodes are too small for inline data; specify larger size"
 msgstr "%d 字节的 inode 对于内联数据来说太小;请指定一个更大的值"
 
-#: misc/mke2fs.c:2429
-#, c-format
-msgid "%d byte inodes are too small for project quota; specify larger size"
-msgstr "%d 字节的 inode 对于项目配额来说太小;请指定一个更大的值"
-
-#: misc/mke2fs.c:2444
+#: misc/mke2fs.c:2580
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "inode太多(%llu),是否提高inode比?"
 
-#: misc/mke2fs.c:2451
+#: misc/mke2fs.c:2587
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "inode数量太多(%llu),请指定小于 2^32 的inode数"
 
-#: misc/mke2fs.c:2465
+#: misc/mke2fs.c:2601
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5864,72 +6005,69 @@ msgstr ""
 "\t的系统来说太大,请指定更高的inode比(使用 -i 选项)\n"
 "\t或更少的inode数(-N)。\n"
 
-#: misc/mke2fs.c:2652
+#: misc/mke2fs.c:2788
 msgid "Discarding device blocks: "
 msgstr "丢弃设备块: "
 
-#: misc/mke2fs.c:2668
+#: misc/mke2fs.c:2804
 msgid "failed - "
 msgstr "已失败 - "
 
-#: misc/mke2fs.c:2727
+#: misc/mke2fs.c:2863
 msgid "while initializing quota context"
 msgstr "初始化配额上下文时"
 
-#: misc/mke2fs.c:2734
+#: misc/mke2fs.c:2870
 msgid "while writing quota inodes"
 msgstr "写入配额 inode 时"
 
-#: misc/mke2fs.c:2759
+#: misc/mke2fs.c:2895
 #, c-format
 msgid "bad error behavior in profile - %s"
 msgstr "配置中的出错行为有误 - %s"
 
-#: misc/mke2fs.c:2833
+#: misc/mke2fs.c:2971
+msgid "in malloc for android_sparse_params"
+msgstr "为 android_sparse_params 分配内存时"
+
+#: misc/mke2fs.c:2985
 msgid "while setting up superblock"
 msgstr "设置superblock时"
 
-#: misc/mke2fs.c:2849
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Pass -O extents to rectify.\n"
-msgstr ""
-"未启用 extent 特性,所以仅对文件 extent 树进行校验,而不会对块位图进行校验。"
-"不启用 extent 将降低元数据校验值的覆盖范围。可以使用参数“-O extents”来进行纠"
-"正。\n"
+#: misc/mke2fs.c:3001
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Pass -O extents to rectify.\n"
+msgstr "未启用 extent 特性,所以仅对文件 extent 树进行校验,而不会对块位图进行校验。不启用 extent 将降低元数据校验值的覆盖范围。可以使用参数“-O extents”来进行纠正。\n"
 
-#: misc/mke2fs.c:2856
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
+#: misc/mke2fs.c:3008
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.\n"
 msgstr ""
-"未启用 64 位文件系统支持,将无法使用更大的字段来进行更完整的校验。可以使用参"
-"数“-O 64bit”来进行纠正。\n"
+"未启用 64 位文件系统支持,将无法使用更大的字段来进行更完整的校验。可以使用参数“-O 64bit”来进行纠正。\n"
 "\n"
 
-#: misc/mke2fs.c:2864
-msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
+#: misc/mke2fs.c:3016
+#, fuzzy
+#| msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
+msgid "The metadata_csum_seed feature requires the metadata_csum feature.\n"
 msgstr "启用 metadata_csum_seed 特性需要同时启用 metadata_csum 特性。\n"
 
-#: misc/mke2fs.c:2888
+#: misc/mke2fs.c:3040
 msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
 msgstr "舍弃成功,将会返回0值 - 跳过擦除inode表\n"
 
-#: misc/mke2fs.c:2974
+#: misc/mke2fs.c:3139
 #, c-format
 msgid "unknown os - %s"
 msgstr "未知操作系统 - %s"
 
-#: misc/mke2fs.c:3037
+#: misc/mke2fs.c:3202
 msgid "Allocating group tables: "
 msgstr "正在分配组表: "
 
-#: misc/mke2fs.c:3045
+#: misc/mke2fs.c:3210
 msgid "while trying to allocate filesystem tables"
 msgstr "尝试分配文件系统表时"
 
-#: misc/mke2fs.c:3054
+#: misc/mke2fs.c:3219
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -5937,30 +6075,30 @@ msgstr ""
 "\n"
 "\t转换子簇位图时"
 
-#: misc/mke2fs.c:3060
+#: misc/mke2fs.c:3225
 #, c-format
 msgid "%s may be further corrupted by superblock rewrite\n"
 msgstr "%s 可能因超级块被改写而损\n"
 
-#: misc/mke2fs.c:3101
+#: misc/mke2fs.c:3266
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "对文件系统末尾的块 %llu 填零时"
 
-#: misc/mke2fs.c:3114
+#: misc/mke2fs.c:3279
 msgid "while reserving blocks for online resize"
 msgstr "为在线改变大小保留块时"
 
-#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3291 misc/tune2fs.c:1492
 msgid "journal"
 msgstr "日志"
 
-#: misc/mke2fs.c:3138
+#: misc/mke2fs.c:3303
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "将日志添加到设备 %s: "
 
-#: misc/mke2fs.c:3145
+#: misc/mke2fs.c:3310
 #, c-format
 msgid ""
 "\n"
@@ -5969,21 +6107,21 @@ msgstr ""
 "\n"
 "尝试将日志添加到设备 %s时"
 
-#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
-#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
+#: misc/mke2fs.c:3315 misc/mke2fs.c:3344 misc/mke2fs.c:3382
+#: misc/mk_hugefiles.c:600 misc/tune2fs.c:1521 misc/tune2fs.c:1540
 msgid "done\n"
 msgstr "完成\n"
 
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3321
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "跳过创建日志的步骤(唯超级块模式)\n"
 
-#: misc/mke2fs.c:3166
+#: misc/mke2fs.c:3331
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "创建日志(%u 个块)"
 
-#: misc/mke2fs.c:3175
+#: misc/mke2fs.c:3340
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -5991,7 +6129,7 @@ msgstr ""
 "\n"
 "\t尝试创建日志时"
 
-#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3352 misc/tune2fs.c:1133
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
@@ -5999,33 +6137,28 @@ msgstr ""
 "\n"
 "启用MMP特性失败。"
 
-#: misc/mke2fs.c:3192
+#: misc/mke2fs.c:3357
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr "MMP(多重挂载保护)已被启用,更新间隔为 %d 秒。\n"
 
-#: misc/mke2fs.c:3210
+#: misc/mke2fs.c:3373
 msgid "Copying files into the device: "
 msgstr "将文件复制到设备:"
 
-#: misc/mke2fs.c:3216
+#: misc/mke2fs.c:3379
 msgid "while populating file system"
 msgstr "于填充文件系统时"
 
-#: misc/mke2fs.c:3223
+#: misc/mke2fs.c:3386
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "写入超级块和文件系统账户统计信息: "
 
-#: misc/mke2fs.c:3230
-#, fuzzy
-msgid ""
-"\n"
-"Warning, had trouble writing out superblocks.\n"
-msgstr ""
-"\n"
-"警告:写入超级块时遇到问题"
+#: misc/mke2fs.c:3393
+msgid "while writing out and closing file system"
+msgstr "写出并关闭文件系统时"
 
-#: misc/mke2fs.c:3232
+#: misc/mke2fs.c:3396
 msgid ""
 "done\n"
 "\n"
@@ -6033,27 +6166,32 @@ msgstr ""
 "已完成\n"
 "\n"
 
-#: misc/mk_hugefiles.c:424
+#: misc/mk_hugefiles.c:339
+#, fuzzy, c-format
+#| msgid "while zeroing block %llu at end of filesystem"
+msgid "while zeroing block %llu for hugefile"
+msgstr "对文件系统末尾的块 %llu 填零时"
+
+#: misc/mk_hugefiles.c:515
 #, c-format
-msgid ""
-"Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
+msgid "Partition offset of %llu (%uk) blocks not compatible with cluster size %u.\n"
 msgstr "分区偏移量 %llu(%uk)块与簇大小 %u 不相容。\n"
 
-#: misc/mk_hugefiles.c:491
+#: misc/mk_hugefiles.c:583
 msgid "Huge files will be zero'ed\n"
 msgstr "将对大文件填零\n"
 
-#: misc/mk_hugefiles.c:492
+#: misc/mk_hugefiles.c:584
 #, c-format
 msgid "Creating %lu huge file(s) "
 msgstr "创建 %lu 个大文件"
 
-#: misc/mk_hugefiles.c:494
+#: misc/mk_hugefiles.c:586
 #, c-format
 msgid "with %llu blocks each"
 msgstr "每个使用 %llu 个块"
 
-#: misc/mk_hugefiles.c:505
+#: misc/mk_hugefiles.c:595
 #, c-format
 msgid "while creating huge file %lu"
 msgstr "创建大文件 %lu 时"
@@ -6098,23 +6236,40 @@ msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
 msgstr "%s:磁头=%3d 扇区=%3d 柱面=%4d   起始=%8d 大小=%8lu 终止=%8d\n"
 
 #: misc/tune2fs.c:119
+msgid ""
+"\n"
+"This operation requires a freshly checked filesystem.\n"
+msgstr ""
+
+#: misc/tune2fs.c:121
 #, fuzzy
+#| msgid "Please run e2fsck -D on the filesystem.\n"
 msgid "Please run e2fsck -f on the filesystem.\n"
 msgstr "请在这个文件系统上运行 e2fsck -D。\n"
 
-#: misc/tune2fs.c:121
+#: misc/tune2fs.c:123
 #, fuzzy
+#| msgid "Please run e2fsck -D on the filesystem.\n"
 msgid "Please run e2fsck -fD on the filesystem.\n"
 msgstr "请在这个文件系统上运行 e2fsck -D。\n"
 
-#: misc/tune2fs.c:134
-#, c-format
+#: misc/tune2fs.c:136
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
+#| "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
+#| "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
+#| "\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
+#| "\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+#| "\t[-O [^]feature[,...]] [-Q quota_options]\n"
+#| "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+#| "\t[-I new_inode_size] [-z undo_file] device\n"
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-f] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]]\n"
-"\t[-p mmp_update_interval] [-r reserved_blocks_count] [-u user]\n"
-"\t[-C mount_count] [-L volume_label] [-M last_mounted_dir]\n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count]\n"
+"\t[-L volume_label] [-M last_mounted_dir]\n"
 "\t[-O [^]feature[,...]] [-Q quota_options]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[-I new_inode_size] [-z undo_file] device\n"
@@ -6128,24 +6283,33 @@ msgstr ""
 "\t[-E 扩展选项[,...]] [-T 上一次检查时间] [-U UUID]\n"
 "\t[ -I 新的inode大小] [-z 撤销文件] 设备\n"
 
-#: misc/tune2fs.c:218
+#: misc/tune2fs.c:223
 msgid "Journal superblock not found!\n"
 msgstr "日志超级块未找到!\n"
 
-#: misc/tune2fs.c:276
+#: misc/tune2fs.c:281
 msgid "while trying to open external journal"
 msgstr "尝试打开外部日志时"
 
-#: misc/tune2fs.c:282 misc/tune2fs.c:2701
+#: misc/tune2fs.c:287 misc/tune2fs.c:2804
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s 不是日志设备。\n"
 
-#: misc/tune2fs.c:292 misc/tune2fs.c:2712
+#: misc/tune2fs.c:296 misc/tune2fs.c:2813
+#, c-format
+msgid ""
+"Journal superblock is corrupted, nr_users\n"
+"is too high (%d).\n"
+msgstr ""
+"日志超级块已损坏,nr_users\n"
+"过高(%d)。\n"
+
+#: misc/tune2fs.c:303 misc/tune2fs.c:2820
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "日志设备中未找到文件系统的UUID。\n"
 
-#: misc/tune2fs.c:316
+#: misc/tune2fs.c:327
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
@@ -6154,52 +6318,52 @@ msgstr ""
 "请使用 -f 选项来移除丢失的日志设备。\n"
 "\n"
 
-#: misc/tune2fs.c:325
+#: misc/tune2fs.c:336
 msgid "Journal removed\n"
 msgstr "日志已删除\n"
 
-#: misc/tune2fs.c:369
+#: misc/tune2fs.c:380
 msgid "while reading bitmaps"
 msgstr "读取位图时"
 
-#: misc/tune2fs.c:377
+#: misc/tune2fs.c:388
 msgid "while clearing journal inode"
 msgstr "读取坏块inode时"
 
-#: misc/tune2fs.c:388
+#: misc/tune2fs.c:399
 msgid "while writing journal inode"
 msgstr "写入日志inode时"
 
-#: misc/tune2fs.c:423 misc/tune2fs.c:445 misc/tune2fs.c:458
+#: misc/tune2fs.c:435 misc/tune2fs.c:458 misc/tune2fs.c:471
 msgid "(and reboot afterwards!)\n"
 msgstr "(并且过后重启!)\n"
 
-#: misc/tune2fs.c:476
+#: misc/tune2fs.c:486
 #, c-format
 msgid "After running e2fsck, please run `resize2fs %s %s"
 msgstr "在运行 e2fsck 后,请运行“resize2fs %s %s"
 
-#: misc/tune2fs.c:479
+#: misc/tune2fs.c:489
 #, c-format
 msgid "Please run `resize2fs %s %s"
 msgstr "请运行“resize2fs %s %s"
 
-#: misc/tune2fs.c:483
+#: misc/tune2fs.c:493
 #, c-format
 msgid " -z \"%s\""
 msgstr " -z \"%s\""
 
-#: misc/tune2fs.c:485
+#: misc/tune2fs.c:495
 #, c-format
 msgid "' to enable 64-bit mode.\n"
 msgstr "”来启用 64 位模式。\n"
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:497
 #, c-format
 msgid "' to disable 64-bit mode.\n"
 msgstr "”来禁用 64 位模式。\n"
 
-#: misc/tune2fs.c:974
+#: misc/tune2fs.c:1035
 msgid ""
 "WARNING: Could not confirm kernel support for metadata_csum_seed.\n"
 "  This requires Linux >= v4.4.\n"
@@ -6207,29 +6371,29 @@ msgstr ""
 "警告:无法确定内核是否支持 metadata_csum_seed 特性。\n"
 "  该特性仅被 4.4 以上的 Linux 内核支持。\n"
 
-#: misc/tune2fs.c:1010
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "移除不被支持的文件系统特性“%s”。\n"
 
-#: misc/tune2fs.c:1016
+#: misc/tune2fs.c:1077
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "设置不被支持的文件系统特性“%s”。\n"
 
-#: misc/tune2fs.c:1025
+#: misc/tune2fs.c:1086
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr "只有当文件系统被卸载,或以只读模式挂载时才能移除其has_journal特性。\n"
 
-#: misc/tune2fs.c:1033
+#: misc/tune2fs.c:1094
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr "发现needs_recovery标志。请在移除has_journal特性前运行e2fsck。\n"
 
-#: misc/tune2fs.c:1051
+#: misc/tune2fs.c:1112
 msgid ""
 "Setting filesystem feature 'sparse_super' not supported\n"
 "for filesystems with the meta_bg feature enabled.\n"
@@ -6237,103 +6401,89 @@ msgstr ""
 "启用了meta_bg特性的文件系统不支持“sparse_super”\n"
 "特性。\n"
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1125
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
 "read-only.\n"
 msgstr "文件系统被挂载或为只读属性时无法设置MMP特性。\n"
 
-#: misc/tune2fs.c:1082
+#: misc/tune2fs.c:1143
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr "MMP(多重挂载保护)已被启用,更新间隔为 %ds。\n"
 
-#: misc/tune2fs.c:1091
+#: misc/tune2fs.c:1152
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
 msgstr "文件系统为只读状态时无法禁用MMP特性。\n"
 
-#: misc/tune2fs.c:1099
+#: misc/tune2fs.c:1160
 msgid "Error while reading bitmaps\n"
 msgstr "读取位图时发生错误\n"
 
-#: misc/tune2fs.c:1108
+#: misc/tune2fs.c:1169
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr "MMP块的幻数不匹配。期望值:%x,实际:%x\n"
 
-#: misc/tune2fs.c:1113
+#: misc/tune2fs.c:1174
 msgid "while reading MMP block."
 msgstr "读取MMP块时"
 
-#: misc/tune2fs.c:1145
+#: misc/tune2fs.c:1206
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr "清除弹性组标志将会导致文件系统出现前后不一致的情况。\n"
 
-#: misc/tune2fs.c:1156
+#: misc/tune2fs.c:1217
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr "只有当文件系统被卸载,或以只读模式挂载时才能移除其huge_file特性。\n"
 
-#: misc/tune2fs.c:1167
+#: misc/tune2fs.c:1228
 msgid "Enabling checksums could take some time."
 msgstr "启用校验值需要花费一段时间。"
 
-#: misc/tune2fs.c:1169
+#: misc/tune2fs.c:1230
 msgid "Cannot enable metadata_csum on a mounted filesystem!\n"
 msgstr "无法在已挂载的文件系统上启用元数据校验特性!\n"
 
-#: misc/tune2fs.c:1175
-msgid ""
-"Extents are not enabled.  The file extent tree can be checksummed, whereas "
-"block maps cannot.  Not enabling extents reduces the coverage of metadata "
-"checksumming.  Re-run with -O extent to rectify.\n"
-msgstr ""
-"未启用 extent 特性,所以仅对文件 extent 树进行校验,而不会对块位图进行校验。"
-"不启用 extent 将降低元数据校验值的覆盖范围。可以加上参数“-O extents”重新运行"
-"来纠正这一问题。\n"
+#: misc/tune2fs.c:1236
+msgid "Extents are not enabled.  The file extent tree can be checksummed, whereas block maps cannot.  Not enabling extents reduces the coverage of metadata checksumming.  Re-run with -O extent to rectify.\n"
+msgstr "未启用 extent 特性,所以仅对文件 extent 树进行校验,而不会对块位图进行校验。不启用 extent 将降低元数据校验值的覆盖范围。可以加上参数“-O extents”重新运行来纠正这一问题。\n"
 
-#: misc/tune2fs.c:1182
-msgid ""
-"64-bit filesystem support is not enabled.  The larger fields afforded by "
-"this feature enable full-strength checksumming.  Run resize2fs -b to "
-"rectify.\n"
-msgstr ""
-"未启用 64 位文件系统支持,将无法使用更大的字段来进行更完整的校验。可以运"
-"行“resize2fs -b”来纠正这一问题。\n"
+#: misc/tune2fs.c:1243
+msgid "64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Run resize2fs -b to rectify.\n"
+msgstr "未启用 64 位文件系统支持,将无法使用更大的字段来进行更完整的校验。可以运行“resize2fs -b”来纠正这一问题。\n"
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1269
 msgid "Disabling checksums could take some time."
 msgstr "禁用校验值需要花费一段时间。"
 
-#: misc/tune2fs.c:1210
+#: misc/tune2fs.c:1271
 msgid "Cannot disable metadata_csum on a mounted filesystem!\n"
 msgstr "无法在已挂载的文件系统上禁用元数据校验特性!\n"
 
-#: misc/tune2fs.c:1273
+#: misc/tune2fs.c:1334
 #, c-format
 msgid "Cannot enable 64-bit mode while mounted!\n"
 msgstr "无法在已挂载的文件系统上启用 64 位模式!\n"
 
-#: misc/tune2fs.c:1283
+#: misc/tune2fs.c:1344
 #, c-format
 msgid "Cannot disable 64-bit mode while mounted!\n"
 msgstr "无法在已挂载的文件系统上禁用 64 位模式!\n"
 
-#: misc/tune2fs.c:1313
-msgid ""
-"\n"
-"Warning: enabled project without quota together\n"
+#: misc/tune2fs.c:1374
+#, c-format
+msgid "Cannot enable project feature; inode size too small.\n"
 msgstr ""
-"\n"
-"警告:启用项目的同时没有同时启用配额\n"
 
-#: misc/tune2fs.c:1326
+#: misc/tune2fs.c:1395
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
@@ -6341,7 +6491,11 @@ msgstr ""
 "\n"
 "警告:“^quota”选项将覆盖“-Q”的参数。\n"
 
-#: misc/tune2fs.c:1344
+#: misc/tune2fs.c:1405
+msgid "Cannot enable encrypt feature on filesystems with the encoding feature enabled.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1419
 msgid ""
 "Setting feature 'metadata_csum_seed' is only supported\n"
 "on filesystems with the metadata_csum feature enabled.\n"
@@ -6349,21 +6503,23 @@ msgstr ""
 "只有在启用了元数据校验值特性的文件系统才支持\n"
 "“metadata_csum_seed”特性。\n"
 
-#: misc/tune2fs.c:1362
+#: misc/tune2fs.c:1437
 msgid ""
-"UUID has changed since enabling metadata_csum.  Filesystem must be "
-"unmounted \n"
+"UUID has changed since enabling metadata_csum.  Filesystem must be unmounted \n"
 "to safely rewrite all metadata to match the new UUID.\n"
 msgstr ""
-"启用元数据校验值特性后UUID被改变。必须卸载文件系统并安全改写所有元数据,以"
-"便\n"
+"启用元数据校验值特性后UUID被改变。必须卸载文件系统并安全改写所有元数据,以便\n"
 "与新的 UUID 相匹配。\n"
 
-#: misc/tune2fs.c:1408
+#: misc/tune2fs.c:1443
+msgid "Recalculating checksums could take some time."
+msgstr "重新计算校验值需要花费一段时间。"
+
+#: misc/tune2fs.c:1485
 msgid "The filesystem already has a journal.\n"
 msgstr "文件系统已有日志。\n"
 
-#: misc/tune2fs.c:1428
+#: misc/tune2fs.c:1505
 #, c-format
 msgid ""
 "\n"
@@ -6372,21 +6528,21 @@ msgstr ""
 "\n"
 "\t尝试打开位于 %s 的日志时\n"
 
-#: misc/tune2fs.c:1432
+#: misc/tune2fs.c:1509
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "在设备 %s 上创建日志: "
 
-#: misc/tune2fs.c:1440
+#: misc/tune2fs.c:1517
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "将文件系统添加到 %s 上的日志"
 
-#: misc/tune2fs.c:1446
+#: misc/tune2fs.c:1523
 msgid "Creating journal inode: "
 msgstr "创建日志inode: "
 
-#: misc/tune2fs.c:1460
+#: misc/tune2fs.c:1537
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -6394,32 +6550,36 @@ msgstr ""
 "\n"
 "\t尝试创建日志文件时"
 
-#: misc/tune2fs.c:1498
+#: misc/tune2fs.c:1575
+#, c-format
+msgid "Cannot enable project quota; inode size too small.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1588
 msgid "while initializing quota context in support library"
 msgstr "初始化支持库中的引用上下文时"
 
-#: misc/tune2fs.c:1518
+#: misc/tune2fs.c:1603
 #, c-format
 msgid "while updating quota limits (%d)"
 msgstr "更新配额限制(%d)时"
 
-#: misc/tune2fs.c:1526
+#: misc/tune2fs.c:1611
 #, c-format
 msgid "while writing quota file (%d)"
 msgstr "写入配额文件(%d)时"
 
-#: misc/tune2fs.c:1534
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "while removing quota file (%d)"
 msgstr "移除配额文件(%d)时"
 
-#: misc/tune2fs.c:1575
+#: misc/tune2fs.c:1672
 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[^]usr[quota]\n"
 "\t[^]grp[quota]\n"
 "\t[^]prj[quota]\n"
@@ -6436,92 +6596,112 @@ msgstr ""
 "\n"
 "\n"
 
-#: misc/tune2fs.c:1633
+#: misc/tune2fs.c:1730
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "无法解析日期/时间描述符:%s"
 
-#: misc/tune2fs.c:1658 misc/tune2fs.c:1671
+#: misc/tune2fs.c:1755 misc/tune2fs.c:1768
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "错误挂载计数 - %s"
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1811
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "错误的gid/组名 - %s"
 
-#: misc/tune2fs.c:1747
+#: misc/tune2fs.c:1844
 #, c-format
 msgid "bad interval - %s"
 msgstr "错误的间隔 - %s"
 
-#: misc/tune2fs.c:1776
+#: misc/tune2fs.c:1873
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "错误的保留块比 - %s"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1888
 msgid "-o may only be specified once"
 msgstr "-o只能被指定一次"
 
-#: misc/tune2fs.c:1800
+#: misc/tune2fs.c:1897
 msgid "-O may only be specified once"
 msgstr "-O只能被指定一次"
 
-#: misc/tune2fs.c:1817
+#: misc/tune2fs.c:1914
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "错误的保留块数 - %s"
 
-#: misc/tune2fs.c:1846
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "错误的uid/用户名 - %s"
 
-#: misc/tune2fs.c:1863
+#: misc/tune2fs.c:1960
 #, c-format
 msgid "bad inode size - %s"
 msgstr "无效的inode大小 - %s"
 
-#: misc/tune2fs.c:1870
+#: misc/tune2fs.c:1967
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Inode 大小必须是2的次方- %s"
 
-#: misc/tune2fs.c:1967
+#: misc/tune2fs.c:2064
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "MMP更新间隔太长:%lu\n"
 
-#: misc/tune2fs.c:1972
+#: misc/tune2fs.c:2069
 #, 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] "设置MMP更新间隔为 %lu 秒\n"
 
-#: misc/tune2fs.c:1995
+#: misc/tune2fs.c:2078
+#, c-format
+msgid "Setting filesystem error flag to force fsck.\n"
+msgstr "设置文件系统错误标志以强制 fsck。\n"
+
+#: misc/tune2fs.c:2096
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "无效的RAID带宽:%s\n"
 
-#: misc/tune2fs.c:2010
+#: misc/tune2fs.c:2111
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "无效的带宽参数:%s\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2126
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "无效的hash算法:%s\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2132
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "将默认hash算法设置为 %s (%d)\n"
 
-#: misc/tune2fs.c:2050
+#: misc/tune2fs.c:2151
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "Bad options specified.\n"
+#| "\n"
+#| "Extended options are separated by commas, and may take an argument which\n"
+#| "\tis set off by an equals ('=') sign.\n"
+#| "\n"
+#| "Valid extended options are:\n"
+#| "\tclear_mmp\n"
+#| "\thash_alg=<hash algorithm>\n"
+#| "\tmount_opts=<extended default mount options>\n"
+#| "\tstride=<RAID per-disk chunk size in blocks>\n"
+#| "\tstripe_width=<RAID stride*data disks in blocks>\n"
+#| "\ttest_fs\n"
+#| "\t^test_fs\n"
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -6533,8 +6713,10 @@ msgid ""
 "\tclear_mmp\n"
 "\thash_alg=<hash algorithm>\n"
 "\tmount_opts=<extended default mount options>\n"
+"\tmmp_update_interval=<mmp update interval in seconds>\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
 "\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\tforce_fsck\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -6552,31 +6734,31 @@ msgstr ""
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:2519
+#: misc/tune2fs.c:2622
 msgid "Failed to read inode bitmap\n"
 msgstr "读取inode位图失败\n"
 
-#: misc/tune2fs.c:2524
+#: misc/tune2fs.c:2627
 msgid "Failed to read block bitmap\n"
 msgstr "读取块位图失败\n"
 
-#: misc/tune2fs.c:2541 resize/resize2fs.c:1276
+#: misc/tune2fs.c:2644 resize/resize2fs.c:1277
 msgid "blocks to be moved"
 msgstr "需要移动的块"
 
-#: misc/tune2fs.c:2544
+#: misc/tune2fs.c:2647
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr "增加inode大小时为分配块位图失败\n"
 
-#: misc/tune2fs.c:2550
+#: misc/tune2fs.c:2653
 msgid "Not enough space to increase inode size \n"
 msgstr "没有足够的空间用于增加inode大小\n"
 
-#: misc/tune2fs.c:2555
+#: misc/tune2fs.c:2658
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "改变块大小时重定位块失败 \n"
 
-#: misc/tune2fs.c:2587
+#: misc/tune2fs.c:2690
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -6584,7 +6766,15 @@ msgstr ""
 "改变inode大小时出错。\n"
 "请运行e2undo来撤销对文件系统的更改。\n"
 
-#: misc/tune2fs.c:2799
+#: misc/tune2fs.c:2900
+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"
+"“tune2fs -f -E clear_mmp {设备}”\n"
+
+#: misc/tune2fs.c:2907
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
@@ -6593,74 +6783,95 @@ msgstr ""
 "MMP块幻数错误。请尝试运行一下命令来修复:\n"
 "“e2fsck -f %s”\n"
 
-#: misc/tune2fs.c:2811
+#: misc/tune2fs.c:2919
 msgid "Cannot modify a journal device.\n"
 msgstr "无法修改日志设备。\n"
 
-#: misc/tune2fs.c:2824
+#: misc/tune2fs.c:2932
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "inode大小已经为 %lu\n"
 
-#: misc/tune2fs.c:2831
+#: misc/tune2fs.c:2939
 msgid "Shrinking inode size is not supported\n"
 msgstr "不支持缩小inode大小\n"
 
-#: misc/tune2fs.c:2836
+#: misc/tune2fs.c:2944
 #, c-format
 msgid "Invalid inode size %lu (max %d)\n"
 msgstr "无效的inode大小 %lu(最大 %d)\n"
 
-#: misc/tune2fs.c:2842
+#: misc/tune2fs.c:2950
 msgid "Resizing inodes could take some time."
 msgstr "改变 inode 大小需要花费一段时间。"
 
-#: misc/tune2fs.c:2889
+#: misc/tune2fs.c:2998
+#, c-format
+msgid ""
+"Warning: The journal is dirty. You may wish to replay the journal like:\n"
+"\n"
+"\te2fsck -E journal_only %s\n"
+"\n"
+"then rerun this command.  Otherwise, any changes made may be overwritten\n"
+"by journal recovery.\n"
+msgstr ""
+"警告:日志存在错误。您可能需要重做日志,如:\n"
+"\n"
+"e2fsck -E journal_only %s\n"
+"\n"
+"然后重新运行本命令。否则,任何所做更改都可能被日志恢复操作所覆盖。\n"
+
+#: misc/tune2fs.c:3009
+#, c-format
+msgid "Recovering journal.\n"
+msgstr "正在修复日志。\n"
+
+#: misc/tune2fs.c:3028
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "设置最大挂载次数为 %d\n"
 
-#: misc/tune2fs.c:2895
+#: misc/tune2fs.c:3034
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "设置当前挂载次数为 %d\n"
 
-#: misc/tune2fs.c:2900
+#: misc/tune2fs.c:3039
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "将出错行为设置为 %d\n"
 
-#: misc/tune2fs.c:2905
+#: misc/tune2fs.c:3044
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "设置保留块的gid为 %lu\n"
 
-#: misc/tune2fs.c:2910
+#: misc/tune2fs.c:3049
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "检查间隔太长(%lu)"
 
-#: misc/tune2fs.c:2917
+#: misc/tune2fs.c:3056
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "将检查间隔设置为 %lu 秒\n"
 
-#: misc/tune2fs.c:2924
+#: misc/tune2fs.c:3063
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "将保留块所占百分比设置为 %g%%(%llu 个块)\n"
 
-#: misc/tune2fs.c:2930
+#: misc/tune2fs.c:3069
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "保留块的数量太大(%llu)"
 
-#: misc/tune2fs.c:2937
+#: misc/tune2fs.c:3076
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "设置保留块数为 %llu\n"
 
-#: misc/tune2fs.c:2942
+#: misc/tune2fs.c:3081
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -6668,7 +6879,7 @@ msgstr ""
 "\n"
 "文件系统已经含有分散式超级块\n"
 
-#: misc/tune2fs.c:2945
+#: misc/tune2fs.c:3084
 msgid ""
 "\n"
 "Setting the sparse superblock flag not supported\n"
@@ -6679,7 +6890,7 @@ msgstr ""
 "超级块标志。\n"
 "\n"
 
-#: misc/tune2fs.c:2955
+#: misc/tune2fs.c:3094
 #, c-format
 msgid ""
 "\n"
@@ -6688,7 +6899,7 @@ msgstr ""
 "\n"
 "已设置分散式超级块标志。  %s"
 
-#: misc/tune2fs.c:2960
+#: misc/tune2fs.c:3099
 msgid ""
 "\n"
 "Clearing the sparse superblock flag not supported.\n"
@@ -6696,136 +6907,109 @@ msgstr ""
 "\n"
 "移除不被支持的分散式超级块标志。\n"
 
-#: misc/tune2fs.c:2968
+#: misc/tune2fs.c:3107
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "设置上一次检查的时间为 %s\n"
 
-#: misc/tune2fs.c:2974
+#: misc/tune2fs.c:3113
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "设置保留块的uid为 %lu\n"
 
-#: misc/tune2fs.c:3006
+#: misc/tune2fs.c:3145
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr "clear_mmp选项使用错误,必须和 -f 选项一起使用\n"
 
-#: misc/tune2fs.c:3024
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
+#: misc/tune2fs.c:3163
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr "只有当文件系统被卸载时才能修改配额特性。\n"
 
-#: misc/tune2fs.c:3048
+#: misc/tune2fs.c:3181
+msgid "Setting the UUID on this filesystem could take some time."
+msgstr "在此文件系统上设置 UUID 需要花费一段时间。"
+
+#: misc/tune2fs.c:3196
 msgid "The UUID may only be changed when the filesystem is unmounted.\n"
 msgstr "只有当文件系统被卸载时才能改变UUID。\n"
 
-#: misc/tune2fs.c:3051
-msgid ""
-"If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' "
-"and re-run this command.\n"
-msgstr ""
-"若您仅使用 Linux 4.4 以上的内核,请运行“tune2fs -O metadata_csum_seed”,然后"
-"重新运行此命了。\n"
-
-#: misc/tune2fs.c:3060
-msgid "Setting UUID on a checksummed filesystem could take some time."
-msgstr "在启用了校验值的文件系统上设置 UUID 需要花费一段时间。"
+#: misc/tune2fs.c:3199
+msgid "If you only use kernels newer than v4.4, run 'tune2fs -O metadata_csum_seed' and re-run this command.\n"
+msgstr "若您仅使用 Linux 4.4 以上的内核,请运行“tune2fs -O metadata_csum_seed”,然后重新运行此命令。\n"
 
-#: misc/tune2fs.c:3085
+#: misc/tune2fs.c:3229
 msgid "Invalid UUID format\n"
 msgstr "无效的 UUID 格式\n"
 
-#: misc/tune2fs.c:3101
+#: misc/tune2fs.c:3245
 msgid "Need to update journal superblock.\n"
 msgstr "需要更新日志超级块。\n"
 
-#: misc/tune2fs.c:3126
+#: misc/tune2fs.c:3267
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr "只有当文件系统被卸载时才能改变inode大小。\n"
 
-#: misc/tune2fs.c:3133
+#: misc/tune2fs.c:3274
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr "启用了弹性组特性的文件系统不支持改变inode大小\n"
 
-#: misc/tune2fs.c:3151
+#: misc/tune2fs.c:3292
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "正在将inode大小设置为 %lu\n"
 
-#: misc/tune2fs.c:3155
+#: misc/tune2fs.c:3296
 msgid "Failed to change inode size\n"
 msgstr "改变inode大小失败 \n"
 
-#: misc/tune2fs.c:3169
+#: misc/tune2fs.c:3310
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "设置步长为 %d\n"
 
-#: misc/tune2fs.c:3174
+#: misc/tune2fs.c:3315
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "设置带宽为 %d\n"
 
-#: misc/tune2fs.c:3181
+#: misc/tune2fs.c:3322
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "设置默认挂载的扩展选项为 “%s”\n"
 
-#: misc/tune2fs.c:3192
-#, c-format
-msgid ""
-"Warning: The journal is dirty. You may wish to replay the journal like:\n"
-"\n"
-"\te2fsck -E journal_only %s\n"
-"\n"
-"then rerun this command.  Otherwise, any changes made may be overwritten\n"
-"by journal recovery.\n"
-msgstr ""
-"警告:日志存在错误。您可能需要重做日志,如:\n"
-"\n"
-"e2fsck -E journal_only %s\n"
-"\n"
-"然后重新运行本命令。否则,任何所做更改都可能被日志恢复操作所覆盖。\n"
-
-#: misc/tune2fs.c:3203
-#, c-format
-msgid "Recovering journal.\n"
-msgstr "正在修复日志。\n"
-
-#: misc/util.c:100
+#: misc/util.c:101
 msgid "<proceeding>\n"
 msgstr "<处理中>\n"
 
-#: misc/util.c:104
-#, fuzzy, c-format
-msgid "Proceed anyway (or wait %d seconds) ? (y,N) "
-msgstr "无论如何也要继续(或等待 %d 秒)?(y,n) "
+#: misc/util.c:105
+#, c-format
+msgid "Proceed anyway (or wait %d seconds to proceed) ? (y,N) "
+msgstr "无论如何也要继续(或等待 %d 秒)?(y,N) "
 
-#: misc/util.c:108
-#, fuzzy
+#: misc/util.c:109
 msgid "Proceed anyway? (y,N) "
-msgstr "无论如何也要继续?(y,n) "
+msgstr "无论如何也要继续?(y,N) "
 
-#: misc/util.c:133
+#: misc/util.c:136
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "强制执行mke2fs。期望/etc/mtab中反映的并非真实情况。\n"
 
-#: misc/util.c:138
+#: misc/util.c:141
 #, c-format
 msgid "will not make a %s here!\n"
 msgstr "取消建立 %s !\n"
 
-#: misc/util.c:145
+#: misc/util.c:148
 msgid "mke2fs forced anyway.\n"
 msgstr "mke2fs 强制执行。\n"
 
-#: misc/util.c:161
+#: misc/util.c:164
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr "无法为解析日志选项获取内存!\n"
 
-#: misc/util.c:186
+#: misc/util.c:189
 #, c-format
 msgid ""
 "\n"
@@ -6834,7 +7018,7 @@ msgstr ""
 "\n"
 "无法找到匹配 %s 的日志设备\n"
 
-#: misc/util.c:213
+#: misc/util.c:216
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -6864,7 +7048,7 @@ msgstr ""
 "日志尺寸必须介于1024至10240000个块之间(块的大小由文件系统决定)。\n"
 "\n"
 
-#: misc/util.c:244
+#: misc/util.c:247
 msgid ""
 "\n"
 "Filesystem too small for a journal\n"
@@ -6872,7 +7056,7 @@ msgstr ""
 "\n"
 "文件系统太小,无法容纳日志\n"
 
-#: misc/util.c:251
+#: misc/util.c:254
 #, c-format
 msgid ""
 "\n"
@@ -6883,7 +7067,7 @@ msgstr ""
 "给定的日志大小为 %d 个块;但该值必须\n"
 "介于1024至10240000块之间。终止执行。\n"
 
-#: misc/util.c:259
+#: misc/util.c:262
 msgid ""
 "\n"
 "Journal size too big for filesystem.\n"
@@ -6891,7 +7075,7 @@ msgstr ""
 "\n"
 "日志大小超过文件系统自身。\n"
 
-#: misc/util.c:273
+#: misc/util.c:276
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
@@ -7045,44 +7229,42 @@ msgstr "#\t数量=%llu,大小=%llu,指针=%llu,按序=%llu\n"
 #: resize/main.c:49
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] "
-"[-z undo_file]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file]\n"
 "\n"
 msgstr ""
-"用法:%s [-d 调试标志] [-f] [-F] [-M] [-P] [-p] 设备 [-b|-s|新大小] [-z 撤销"
-"文件]\n"
+"用法:%s [-d 调试标志] [-f] [-F] [-M] [-P] [-p] 设备 [-b|-s|新大小] [S RAID-stride] [-z 撤销文件]\n"
 "\n"
 
-#: resize/main.c:72
+#: resize/main.c:73
 msgid "Extending the inode table"
 msgstr "正在扩充inode表"
 
-#: resize/main.c:75
+#: resize/main.c:76
 msgid "Relocating blocks"
 msgstr "正在重定位块"
 
-#: resize/main.c:78
+#: resize/main.c:79
 msgid "Scanning inode table"
 msgstr "正在扫描inode表"
 
-#: resize/main.c:81
+#: resize/main.c:82
 msgid "Updating inode references"
 msgstr "正在更新inode引用"
 
-#: resize/main.c:84
+#: resize/main.c:85
 msgid "Moving inode table"
 msgstr "正在移动inode表"
 
-#: resize/main.c:87
+#: resize/main.c:88
 msgid "Unknown pass?!?"
 msgstr "其他步骤"
 
-#: resize/main.c:90
+#: resize/main.c:91
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "开始第 %d 步(共 %lu 步)\n"
 
-#: resize/main.c:162
+#: resize/main.c:163
 msgid ""
 "\n"
 "Resizing bigalloc file systems has not been fully tested.  Proceed at\n"
@@ -7094,17 +7276,17 @@ msgstr ""
 "如果你希望继续,请使用强制选项。\n"
 "\n"
 
-#: resize/main.c:365
+#: resize/main.c:366
 #, c-format
 msgid "while opening %s"
 msgstr "打开%s时"
 
-#: resize/main.c:373
+#: resize/main.c:374
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "获取%s的stat信息时出错。"
 
-#: resize/main.c:445
+#: resize/main.c:451
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -7113,30 +7295,30 @@ msgstr ""
 "请先运行“e2fsck -f %s”。\n"
 "\n"
 
-#: resize/main.c:464
+#: resize/main.c:470
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "预计文件系统的最小尺寸:%llu\n"
 
-#: resize/main.c:501
+#: resize/main.c:507
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "无效的新大小: %s\n"
 
-#: resize/main.c:520
+#: resize/main.c:526
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "新大小太大,无法用32位数表示\n"
 
-#: resize/main.c:528
+#: resize/main.c:534
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "新大小不能低于此最小值:%llu\n"
 
-#: resize/main.c:534
+#: resize/main.c:540
 msgid "Invalid stride length"
 msgstr "无效的步长度"
 
-#: resize/main.c:558
+#: resize/main.c:564
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -7147,31 +7329,27 @@ msgstr ""
 "但你却指定新大小为 %llu 个块。\n"
 "\n"
 
-#: resize/main.c:565
+#: resize/main.c:571
 #, c-format
 msgid "Cannot set and unset 64bit feature.\n"
 msgstr "无法设置/取消设置 64 位特性。\n"
 
-#: resize/main.c:569
+#: resize/main.c:575
 #, c-format
-msgid ""
-"Cannot change the 64bit feature on a filesystem that is larger than 2^32 "
-"blocks.\n"
+msgid "Cannot change the 64bit feature on a filesystem that is larger than 2^32 blocks.\n"
 msgstr "无法在含有超过 2^32 个块的文件系统上改变 64 位特性。\n"
 
-#: resize/main.c:575
+#: resize/main.c:581
 #, c-format
 msgid "Cannot change the 64bit feature while the filesystem is mounted.\n"
 msgstr "无法在已挂载的文件系统上改变 64 位特性。\n"
 
-#: resize/main.c:581
+#: resize/main.c:587
 #, c-format
-msgid ""
-"Please enable the extents feature with tune2fs before enabling the 64bit "
-"feature.\n"
+msgid "Please enable the extents feature with tune2fs before enabling the 64bit feature.\n"
 msgstr "在启用 64 位特性前,请先执行 tune2fs 来启用 extent。\n"
 
-#: resize/main.c:587
+#: resize/main.c:593
 #, c-format
 msgid ""
 "The filesystem is already %llu (%dk) blocks long.  Nothing to do!\n"
@@ -7180,37 +7358,37 @@ msgstr ""
 "文件系统已经为 %llu 个块(每块 %dk)。无需进一步处理!\n"
 "\n"
 
-#: resize/main.c:594
+#: resize/main.c:600
 #, c-format
 msgid "The filesystem is already 64-bit.\n"
 msgstr "文件系统已经为 64 位模式。\n"
 
-#: resize/main.c:599
+#: resize/main.c:605
 #, c-format
 msgid "The filesystem is already 32-bit.\n"
 msgstr "文件系统已经为 32 位模式。\n"
 
-#: resize/main.c:608
+#: resize/main.c:613
 #, c-format
 msgid "Converting the filesystem to 64-bit.\n"
 msgstr "将文件系统转换为 64 位。\n"
 
-#: resize/main.c:610
+#: resize/main.c:615
 #, c-format
 msgid "Converting the filesystem to 32-bit.\n"
 msgstr "将文件系统转换为 32 位。\n"
 
-#: resize/main.c:612
+#: resize/main.c:617
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr "将 %s 上的文件系统调整为 %llu 个块(每块 %dk)。\n"
 
-#: resize/main.c:621
+#: resize/main.c:626
 #, c-format
 msgid "while trying to resize %s"
 msgstr "尝试调整%s的大小时"
 
-#: resize/main.c:624
+#: resize/main.c:629
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -7219,7 +7397,7 @@ msgstr ""
 "请在终止调整操作后运行“e2fsck -fy %s”\n"
 "来修复文件系统。\n"
 
-#: resize/main.c:630
+#: resize/main.c:635
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu (%dk) blocks long.\n"
@@ -7228,7 +7406,7 @@ msgstr ""
 "%s 上的文件系统现在为 %llu 个块(每块 %dk)。\n"
 "\n"
 
-#: resize/main.c:645
+#: resize/main.c:650
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "尝试截断 %s 时"
@@ -7291,51 +7469,48 @@ msgstr "在线调整 %s 的大小为 %llu 块(每块为 %dk)\n"
 msgid "While trying to extend the last group"
 msgstr "尝试扩展最后一个组时"
 
-#: resize/online.c:284
+#: resize/online.c:277
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "尝试添加组 #%d 时"
 
-#: resize/online.c:295
+#: resize/online.c:288
 #, 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 "文件系统 %s 被挂载在 %s,并且这个系统不支持在线调整大小。\n"
 
 #: resize/resize2fs.c:759
 #, c-format
-msgid "inodes (%llu) must be less than %u"
-msgstr "inode数(%llu)必须小于 %u32"
+msgid "inodes (%llu) must be less than %u\n"
+msgstr "inode数(%llu)必须小于 %u\n"
 
-#: resize/resize2fs.c:1037
+#: resize/resize2fs.c:1038
 msgid "reserved blocks"
 msgstr "保留块"
 
-#: resize/resize2fs.c:1281
+#: resize/resize2fs.c:1282
 msgid "meta-data blocks"
 msgstr "元数据块"
 
-#: resize/resize2fs.c:1385 resize/resize2fs.c:2317
+#: resize/resize2fs.c:1386 resize/resize2fs.c:2421
 msgid "new meta blocks"
 msgstr "新的元数据块"
 
-#: resize/resize2fs.c:2540
+#: resize/resize2fs.c:2644
 msgid "Should never happen!  No sb in last super_sparse bg?\n"
 msgstr "不应当出现的情况:最后一个分散式超级块块组中没有超级块!\n"
 
-#: resize/resize2fs.c:2545
+#: resize/resize2fs.c:2649
 msgid "Should never happen!  Unexpected old_desc in super_sparse bg?\n"
 msgstr "不应当出现的情况:分散式超级块块组中有未预期的old_desc!\n"
 
-#: resize/resize2fs.c:2618
+#: resize/resize2fs.c:2722
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "不应出现的错误:改变inode大小时发现有数据损坏!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.43.4-WIP"
-msgstr "EXT2FS 库版本 1.43"
+msgid "EXT2FS Library version 1.45.3"
+msgstr "EXT2FS 库版本 1.45.3"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -7894,8 +8069,8 @@ msgid "MMP: device currently active"
 msgstr "MMP:设备当前为活动状态"
 
 #: lib/ext2fs/ext2_err.c:151
-msgid "MMP: fsck being run"
-msgstr "MMP:fsck正在运行"
+msgid "MMP: e2fsck being run"
+msgstr "MMP:e2fsck 正在运行"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
@@ -7950,12 +8125,12 @@ msgid "Unknown checksum algorithm"
 msgstr "位置的校验值算法"
 
 #: lib/ext2fs/ext2_err.c:165
-msgid "MMP block checksum does not match MMP block"
-msgstr "MMP块校验值与MMP块自身不符"
+msgid "MMP block checksum does not match"
+msgstr "MMP 块校验值不符"
 
 #: lib/ext2fs/ext2_err.c:166
 msgid "Ext2 file already exists"
-msgstr "ext2文件已存在"
+msgstr "Ext2 文件已存在"
 
 #: lib/ext2fs/ext2_err.c:167
 msgid "Block bitmap checksum does not match bitmap"
@@ -8042,9 +8217,12 @@ msgid "The journal superblock is corrupt"
 msgstr "日志超级块已损坏"
 
 #: lib/ext2fs/ext2_err.c:188
-#, fuzzy
 msgid "Inode is corrupted"
-msgstr "改变inode大小时有数据损坏"
+msgstr "Inode 已损坏"
+
+#: lib/ext2fs/ext2_err.c:189
+msgid "Inode containing extended attribute value is corrupted"
+msgstr ""
 
 #: lib/support/prof_err.c:11
 msgid "Profile version 0.0"
@@ -8236,13 +8414,104 @@ msgstr " %s 有一个 %s 文件系统\n"
 #: lib/support/plausible.c:276
 #, c-format
 msgid "%s contains `%s' data\n"
-msgstr ""
-" %s 含有“%s”数据\n"
-"\n"
+msgstr "%s 含有“%s”数据\n"
+
+#~ msgid "i_dir_acl @F %Id, @s zero.\n"
+#~ msgstr "@i %i (%Q)的i_dir_acl为 %ld,@s0。\n"
+
+#~ msgid "while opening directory \"%s\""
+#~ msgstr "打开目录“%s”时"
+
+#~ msgid "Journal features:        "
+#~ msgstr "日志特性::        "
+
+#~ msgid "Journal size:             "
+#~ msgstr "日志大小:             "
+
+#~ msgid ""
+#~ "Journal length:           %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ msgstr ""
+#~ "日志长度:       %u\n"
+#~ "日志序列:           0x%08x\n"
+#~ "日志起始于:       %u\n"
+
+#~ msgid "Journal checksum type:    crc32\n"
+#~ msgstr "日志校验值类型:    crc32\n"
+
+#~ msgid ""
+#~ "Journal checksum type:    %s\n"
+#~ "Journal checksum:         0x%08x\n"
+#~ msgstr ""
+#~ "日志校验值类型:   %s\n"
+#~ "日志校验值:         0x%08x\n"
+
+#~ msgid "Journal errno:            %d\n"
+#~ msgstr "日志错误码:            %d\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Journal block size:       %u\n"
+#~ "Journal length:           %u\n"
+#~ "Journal first block:      %u\n"
+#~ "Journal sequence:         0x%08x\n"
+#~ "Journal start:            %u\n"
+#~ "Journal number of users:  %u\n"
+#~ msgstr ""
+#~ "\n"
+#~ "日志块大小:       %u\n"
+#~ "日志块长度:       %u\n"
+#~ "日志块首块:       %u\n"
+#~ "日志序列:           0x%08x\n"
+#~ "日志起始于:       %u\n"
+#~ "用户日志数:       %u\n"
+
+#~ msgid "Journal users:            %s\n"
+#~ msgstr "日志使用者:            %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in filesystem!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** 发现文件系统的校验值有误!请立即运行 e2fsck!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "*** Checksum errors detected in bitmaps!  Run e2fsck now!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "*** 发现位图的校验值有误!请立即运行 e2fsck!\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %s: error reading bitmaps: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s:%s:读取位图错误:%s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning, had trouble writing out superblocks."
+#~ msgstr ""
+#~ "\n"
+#~ "警告:写入超级块时遇到问题"
 
 #~ msgid "Please run e2fsck on the filesystem.\n"
 #~ msgstr "请在这个文件系统上运行 e2fsck。\n"
 
+#~ msgid ""
+#~ "\n"
+#~ "Warning: enabled project without quota together\n"
+#~ msgstr ""
+#~ "\n"
+#~ "警告:启用项目的同时没有同时启用配额\n"
+
 #~ msgid "@i %i has @cion flag set on @f without @cion support.  "
 #~ msgstr "@i %i 由chattr设置了c(@c)标志,但@f不支持@c。  "
 
@@ -8321,12 +8590,8 @@ msgstr ""
 #~ msgid "Could not stat %s --- %s\n"
 #~ msgstr "无法对 %s 进行 stat 调用 --- %s\n"
 
-#~ msgid ""
-#~ "\b\b\b\b\b\b\b\bCopied %llu / %llu blocks (%llu%%) in %s at %.2f MB/"
-#~ "s       \n"
-#~ msgstr ""
-#~ "\b\b\b\b\b\b\b\b已复制 %llu / %llu 块(%llu%%),用时 %s,速度 %.2f MB/"
-#~ "s       \n"
+#~ msgid "\b\b\b\b\b\b\b\bCopied %llu / %llu blocks (%llu%%) in %s at %.2f MB/s       \n"
+#~ msgstr "\b\b\b\b\b\b\b\b已复制 %llu / %llu 块(%llu%%),用时 %s,速度 %.2f MB/s       \n"
 
 #~ msgid ""
 #~ "\n"
diff --git a/resize/Android.bp b/resize/Android.bp
new file mode 100644 (file)
index 0000000..8e269c7
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2017 The Android Open Source Project
+
+resize2fs_libs = [
+    "libext2fs",
+    "libext2_com_err",
+    "libext2_e2p",
+    "libext2_uuid",
+    "libext2_blkid",
+]
+
+cc_defaults {
+    name: "resize2fs-defaults",
+    defaults: ["e2fsprogs-defaults"],
+    srcs: [
+        "extent.c",
+        "resize2fs.c",
+        "main.c",
+        "online.c",
+        "sim_progress.c",
+        "resource_track.c",
+    ],
+}
+
+cc_binary {
+    name: "resize2fs",
+    host_supported: true,
+    vendor_ramdisk_available: true,
+    defaults: ["resize2fs-defaults"],
+
+    // Host binaries can be compiled statically to be re-used in other environments.
+    // For android binaries, we keep shared libraries to keep the binary size smaller.
+    target: {
+        host: {
+            static_libs: resize2fs_libs,
+        },
+        android: {
+            shared_libs: resize2fs_libs,
+        },
+    },
+    system_shared_libs: ["libc", "libdl"],
+}
+
+cc_binary {
+    name: "resize2fs_ramdisk",
+    stem: "resize2fs",
+    static_executable: true,
+    ramdisk: true,
+    defaults: ["resize2fs-defaults"],
+    system_shared_libs: [],
+    static_libs: resize2fs_libs,
+}
diff --git a/resize/Android.mk b/resize/Android.mk
deleted file mode 100644 (file)
index 12d6ab5..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-resize2fs_src_files := \
-       extent.c \
-       resize2fs.c \
-       main.c \
-       online.c \
-       sim_progress.c \
-       resource_track.c
-
-resize2fs_c_includes := external/e2fsprogs/lib
-
-resize2fs_cflags := -O2 -g -W -Wall
-
-resize2fs_shared_libraries := \
-       libext2fs \
-       libext2_com_err \
-       libext2_e2p \
-       libext2_uuid \
-       libext2_blkid
-
-resize2fs_system_shared_libraries := libc
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(resize2fs_src_files)
-LOCAL_C_INCLUDES := $(resize2fs_c_includes)
-LOCAL_CFLAGS := $(resize2fs_cflags)
-LOCAL_SHARED_LIBRARIES := $(resize2fs_shared_libraries)
-LOCAL_SYSTEM_SHARED_LIBRARIES := $(resize2fs_system_shared_libraries)
-LOCAL_MODULE := resize2fs
-LOCAL_MODULE_TAGS := optional
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(resize2fs_src_files)
-LOCAL_C_INCLUDES := $(resize2fs_c_includes)
-LOCAL_CFLAGS := $(resize2fs_cflags)
-LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(resize2fs_shared_libraries))
-LOCAL_MODULE := resize2fs_host
-LOCAL_MODULE_STEM := resize2fs
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_EXECUTABLE)
index 6014bdd..27f7213 100644 (file)
@@ -8,6 +8,7 @@ VPATH = @srcdir@
 top_builddir = ..
 my_dir = resize
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
@@ -42,6 +43,8 @@ DEPSTATIC_LIBS= $(STATIC_LIBE2P) $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
 
 all:: $(PROGS) $(TEST_PROGS) $(MANPAGES) 
 
+all-static:: resize2fs.static
+
 resize2fs: $(RESIZE_OBJS) $(DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o resize2fs $(RESIZE_OBJS) $(LIBS) 
@@ -60,8 +63,8 @@ test_extent: $(TEST_EXTENT_OBJS)
        $(Q) $(CC) $(ALL_LDFLAGS) -o test_extent $(TEST_EXTENT_OBJS) $(LIBS) 
 
 installdirs:
-       $(E) "  MKINSTALLDIRS $(root_sbindir) $(man8dir)"
-       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(root_sbindir) \
+       $(E) "  MKDIR_P $(root_sbindir) $(man8dir)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(root_sbindir) \
                $(DESTDIR)$(man8dir)
 
 install: $(PROGS) $(MANPAGES) installdirs
@@ -94,7 +97,7 @@ uninstall:
 test_extent.out: test_extent $(srcdir)/test_extent.in
        $(TESTENV) ./test_extent < $(srcdir)/test_extent.in > test_extent.out
 
-check:: test_extent.out
+fullcheck check:: test_extent.out
        $(Q) if cmp -s test_extent.out $(srcdir)/test_extent.in ; then \
                echo "Test succeeded." ; \
        else \
@@ -112,35 +115,6 @@ mostlyclean: clean
 distclean: clean
        $(RM) -f .depend Makefile $(srcdir)/TAGS $(srcdir)/Makefile.in.old
 
-#
-# Kludge to create a "special" e2fsprogs distribution file.
-#
-
-SRCROOT = `echo e2fsprogs-@E2FSPROGS_VERSION@ | sed -e 's/-WIP//' \
-                       -e 's/pre-//' -e 's/-PLUS//'`
-TAR=tar
-
-$(top_srcdir)/.exclude-file:
-       a=$(SRCROOT); \
-       (cd $(top_srcdir)/.. ; find e2fsprogs \( -name \*~ -o -name \*.orig \
-               -o -name CVS -o -name \*.rej \) -print) \
-               | sed -e "s/e2fsprogs/$$a/" > $(top_srcdir)/.exclude-file
-       echo "$(SRCROOT)/build" >> $(top_srcdir)/.exclude-file
-       echo "$(SRCROOT)/rpm.log" >> $(top_srcdir)/.exclude-file
-       echo "$(SRCROOT)/powerquest" >> $(top_srcdir)/.exclude-file
-       echo "$(SRCROOT)/.exclude-file" >> $(top_srcdir)/.exclude-file
-       echo $(SRCROOT)/e2fsprogs-@E2FSPROGS_VERSION@.tar.gz \
-               >> $(top_srcdir)/.exclude-file
-       echo $(SRCROOT)/e2fsprogs-ALL-@E2FSPROGS_VERSION@.tar.gz \
-               >> $(top_srcdir)/.exclude-file
-
-source_tar_file: $(top_srcdir)/.exclude-file
-       (cd $(top_srcdir)/..; a=$(SRCROOT); rm -f $$a ; ln -sf e2fsprogs $$a ; \
-               $(TAR) -c -h -v -f - \
-                       -X $$a/.exclude-file $$a | \
-               gzip -9 > e2fsprogs-ALL-@E2FSPROGS_VERSION@.tar.gz)
-       rm -f $(top_srcdir)/.exclude-file
-
 # +++ Dependency line eater +++
 # 
 # Makefile dependencies follow.  This must be the last section in
@@ -152,45 +126,45 @@ extent.o: $(srcdir)/extent.c $(top_builddir)/lib/config.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
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/e2p/e2p.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
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(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
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/version.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
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/e2p/e2p.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
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.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 \
  $(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
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/e2p/e2p.h
diff --git a/resize/Makefile.pq b/resize/Makefile.pq
deleted file mode 100644 (file)
index bc60e09..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-TOPSRC=..
-LIBNAME=RESIZE.LIB
-OBJFILE=RESIZE.LST
-
-OBJS= extent.obj \
-       ext2_block_move.obj \
-       ext2_inode_move.obj \
-       resize2fs.obj
-
-!include $(TOPSRC)\powerquest\MCONFIG
-
index ec81b94..e5ca16c 100644 (file)
@@ -8,7 +8,7 @@
  * Copyright (C) 1997, 1998 by Theodore Ts'o and
  *     PowerQuest, Inc.
  *
- * Copyright (C) 1999, 2000 by Theosore Ts'o
+ * Copyright (C) 1999, 2000 by Theodore Ts'o
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
index 396391b..dce03f9 100644 (file)
@@ -47,7 +47,8 @@ static char *device_name, *io_options;
 static void usage (char *prog)
 {
        fprintf (stderr, _("Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] "
-                          "[-p] device [-b|-s|new_size] [-z undo_file]\n\n"),
+                          "[-p] device [-b|-s|new_size] [-S RAID-stride] "
+                          "[-z undo_file]\n\n"),
                 prog);
 
        exit (1);
@@ -268,6 +269,8 @@ int main (int argc, char ** argv)
        long            sysval;
        int             len, mount_flags;
        char            *mtpt, *undo_file = NULL;
+       dgrp_t          new_group_desc_count;
+       unsigned long   new_desc_blocks;
 
 #ifdef ENABLE_NLS
        setlocale(LC_MESSAGES, "");
@@ -401,7 +404,7 @@ int main (int argc, char ** argv)
        if (!(mount_flags & EXT2_MF_MOUNTED))
                io_flags = EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE;
 
-       io_flags |= EXT2_FLAG_64BITS;
+       io_flags |= EXT2_FLAG_64BITS | EXT2_FLAG_THREADS;
        if (undo_file) {
                retval = resize2fs_setup_tdb(device_name, undo_file, &io_ptr);
                if (retval)
@@ -422,7 +425,7 @@ int main (int argc, char ** argv)
         * unless the user is forcing it.
         *
         * We do ERROR and VALID checks even if we're only printing the
-        * minimimum size, because traversal of a badly damaged filesystem
+        * minimum size, because traversal of a badly damaged filesystem
         * can cause issues as well.  We don't require it to be fscked after
         * the last mount time in this case, though, as this is a bit less
         * risky.
@@ -440,6 +443,11 @@ int main (int argc, char ** argv)
                    !print_min_size)
                        checkit = 1;
 
+               if ((ext2fs_free_blocks_count(fs->super) >
+                    ext2fs_blocks_count(fs->super)) ||
+                   (fs->super->s_free_inodes_count > fs->super->s_inodes_count))
+                       checkit = 1;
+
                if (checkit) {
                        fprintf(stderr,
                                _("Please run 'e2fsck -f %s' first.\n\n"),
@@ -522,6 +530,18 @@ int main (int argc, char ** argv)
                        exit(1);
                }
        }
+       new_group_desc_count = ext2fs_div64_ceil(new_size -
+                               fs->super->s_first_data_block,
+                                                EXT2_BLOCKS_PER_GROUP(fs->super));
+       new_desc_blocks = ext2fs_div_ceil(new_group_desc_count,
+                                         EXT2_DESC_PER_BLOCK(fs->super));
+       if ((new_desc_blocks + fs->super->s_first_data_block) >
+           EXT2_BLOCKS_PER_GROUP(fs->super)) {
+               com_err(program_name, 0,
+                       _("New size results in too many block group "
+                         "descriptors.\n"));
+               exit(1);
+       }
 
        if (!force && new_size < min_size) {
                com_err(program_name, 0,
@@ -599,8 +619,13 @@ int main (int argc, char ** argv)
                fprintf(stderr, _("The filesystem is already 32-bit.\n"));
                exit(0);
        }
+       if (new_size < ext2fs_blocks_count(fs->super) &&
+           ext2fs_has_feature_stable_inodes(fs->super)) {
+               fprintf(stderr, _("Cannot shrink this filesystem "
+                       "because it has the stable_inodes feature flag.\n"));
+               exit(1);
+       }
        if (mount_flags & EXT2_MF_MOUNTED) {
-               bigalloc_check(fs, force);
                retval = online_resize_fs(fs, mtpt, &new_size, flags);
        } else {
                bigalloc_check(fs, force);
index 9a4d828..2caf946 100644 (file)
@@ -61,7 +61,7 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
        double                  percent;
        dgrp_t                  i;
        blk_t                   size;
-       int                     fd, overhead;
+       int                     fd;
        int                     use_old_ioctl = 1;
        int                     no_meta_bg_resize = 0;
        int                     no_resize_ioctl = 0;
@@ -201,7 +201,7 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
        }
 
        /* The current method of adding one block group at a time to a
-        * mounted filesystem means it is impossible to accomodate the
+        * mounted filesystem means it is impossible to accommodate the
         * flex_bg allocation method of placing the metadata together
         * in a single block group.  For now we "fix" this issue by
         * using the traditional layout for new block groups, where
@@ -233,13 +233,6 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
 
        for (i = fs->group_desc_count;
             i < new_fs->group_desc_count; i++) {
-
-               overhead = (int) (2 + new_fs->inode_blocks_per_group);
-
-               if (ext2fs_bg_has_super(new_fs, new_fs->group_desc_count - 1))
-                       overhead += 1 + new_fs->desc_blocks +
-                               new_fs->super->s_reserved_gdt_blocks;
-
                input.group = i;
                input.block_bitmap = ext2fs_block_bitmap_loc(new_fs, i);
                input.inode_bitmap = ext2fs_inode_bitmap_loc(new_fs, i);
index 76434d7..ae36577 100644 (file)
@@ -46,24 +46,16 @@ If no units are specified, the units of the
 parameter shall be the filesystem blocksize of the filesystem.
 Optionally, the
 .I size
-parameter may be suffixed by one of the following the units
-designators: 's', 'K', 'M', or 'G',
-for 512 byte sectors, kilobytes, megabytes, or gigabytes, respectively.
-The
+parameter may be suffixed by one of the following units
+designators: 'K', 'M', 'G', 'T' (either upper-case or lower-case) or 's'
+for power-of-two kilobytes, megabytes, gigabytes, terabytes or 512 byte
+sectors respectively. The
 .I size
 of the filesystem may never be larger than the size of the partition.
 If
 .I size
 parameter is not specified, it will default to the size of the partition.
 .PP
-Note: when kilobytes is used above, I mean
-.IR real ,
-power-of-2 kilobytes, (i.e., 1024 bytes), which some politically correct
-folks insist should be the stupid-sounding ``kibibytes''.  The same
-holds true for megabytes, also sometimes known as ``mebibytes'', or
-gigabytes, as the amazingly silly ``gibibytes''.  Makes you want to
-gibber, doesn't it?
-.PP
 The
 .B resize2fs
 program does not manipulate the size of partitions.  If you wish to enlarge
@@ -143,7 +135,7 @@ operation during an offline resize, so that the user can keep track
 of what the program is doing.
 .TP
 .B \-P
-Print an extimate of the number of file system blocks in the file system
+Print an estimate of the number of file system blocks in the file system
 if it is shrunk using
 .BR resize2fs 's
 .B \-M
index 8f6d95e..270e4de 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright (C) 1997, 1998 by Theodore Ts'o and
  *     PowerQuest, Inc.
  *
- * Copyright (C) 1999, 2000 by Theosore Ts'o
+ * Copyright (C) 1999, 2000 by Theodore Ts'o
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
@@ -49,7 +49,7 @@ static errcode_t inode_scan_and_fix(ext2_resize_t rfs);
 static errcode_t inode_ref_fix(ext2_resize_t rfs);
 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 resize2fs_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);
@@ -80,7 +80,7 @@ static int is_inode_tb(ext2_filsys fs, unsigned int grp, blk64_t blk)
                      fs->inode_blocks_per_group);
 }
 
-/* Some bigalloc helper macros which are more succint... */
+/* Some bigalloc helper macros which are more succinct... */
 #define B2C(x) EXT2FS_B2C(fs, (x))
 #define C2B(x) EXT2FS_C2B(fs, (x))
 #define EQ_CLSTR(x, y) (B2C(x) == B2C(y))
@@ -211,7 +211,7 @@ errcode_t resize_fs(ext2_filsys fs, blk64_t *new_size, int flags,
                goto errout;
 
        init_resource_track(&rtrack, "calculate_summary_stats", fs->io);
-       retval = ext2fs_calculate_summary_stats(rfs->new_fs);
+       retval = resize2fs_calculate_summary_stats(rfs->new_fs);
        if (retval)
                goto errout;
        print_resource_track(rfs, &rtrack, fs->io);
@@ -578,7 +578,7 @@ out:
 }
 
 /*
- * Clean up the bitmaps for unitialized bitmaps
+ * Clean up the bitmaps for uninitialized bitmaps
  */
 static void fix_uninit_block_bitmaps(ext2_filsys fs)
 {
@@ -703,6 +703,7 @@ errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs,
        double          percent;
 
        ext2fs_blocks_count_set(fs->super, new_size);
+       fs->super->s_overhead_clusters = 0;
 
 retry:
        fs->group_desc_count = ext2fs_div64_ceil(ext2fs_blocks_count(fs->super) -
@@ -756,7 +757,7 @@ retry:
         */
        new_inodes =(unsigned long long) fs->super->s_inodes_per_group * fs->group_desc_count;
        if (new_inodes > ~0U) {
-               fprintf(stderr, _("inodes (%llu) must be less than %u"),
+               fprintf(stderr, _("inodes (%llu) must be less than %u\n"),
                                   new_inodes, ~0U);
                return EXT2_ET_TOO_MANY_INODES;
        }
@@ -920,8 +921,9 @@ retry:
        group_block = ext2fs_group_first_block2(fs,
                                                old_fs->group_desc_count);
        csum_flag = ext2fs_has_group_desc_csum(fs);
-       if (!getenv("RESIZE2FS_FORCE_ITABLE_INIT") &&
-           access("/sys/fs/ext4/features/lazy_itable_init", F_OK) == 0)
+       if (getenv("RESIZE2FS_FORCE_LAZY_ITABLE_INIT") ||
+           (!getenv("RESIZE2FS_FORCE_ITABLE_INIT") &&
+            access("/sys/fs/ext4/features/lazy_itable_init", F_OK) == 0))
                lazy_itable_init = 1;
        if (ext2fs_has_feature_meta_bg(fs->super))
                old_desc_blocks = fs->super->s_first_meta_bg;
@@ -932,7 +934,7 @@ retry:
        /*
         * 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.
+        * filesystem's block allocation map.
         */
        for (i = 0; i < old_fs->group_desc_count; i++)
                ext2fs_reserve_super_and_bgd(fs, i, fs->block_map);
@@ -1503,7 +1505,7 @@ static errcode_t blocks_to_move(ext2_resize_t rfs)
 
                /*
                 * For those structures that have changed, we need to
-                * do bookkeepping.
+                * do bookkeeping.
                 */
                if (ext2fs_block_bitmap_loc(old_fs, i) !=
                    (blk = ext2fs_block_bitmap_loc(fs, i))) {
@@ -1926,66 +1928,153 @@ out:
        return err;
 }
 
-/* Rewrite extents */
-static errcode_t rewrite_extents(ext2_filsys fs, ext2_ino_t ino)
+static void quiet_com_err_proc(const char *whoami EXT2FS_ATTR((unused)),
+                              errcode_t code EXT2FS_ATTR((unused)),
+                              const char *fmt EXT2FS_ATTR((unused)),
+                              va_list args EXT2FS_ATTR((unused)))
 {
-       ext2_extent_handle_t    handle;
-       struct ext2fs_extent    extent;
-       errcode_t               errcode;
-       struct ext2_extent_info info;
+}
 
-       errcode = ext2fs_extent_open(fs, ino, &handle);
-       if (errcode)
-               return errcode;
+static int fix_ea_entries(ext2_extent imap, struct ext2_ext_attr_entry *entry,
+                         struct ext2_ext_attr_entry *end, ext2_ino_t last_ino)
+{
+       int modified = 0;
+       ext2_ino_t new_ino;
+
+       while (entry < end && !EXT2_EXT_IS_LAST_ENTRY(entry)) {
+               if (entry->e_value_inum > last_ino) {
+                       new_ino = ext2fs_extent_translate(imap,
+                                                         entry->e_value_inum);
+                       entry->e_value_inum = new_ino;
+                       modified = 1;
+               }
+               entry = EXT2_EXT_ATTR_NEXT(entry);
+       }
+       return modified;
+}
 
-       errcode = ext2fs_extent_get(handle, EXT2_EXTENT_ROOT, &extent);
-       if (errcode)
+static int fix_ea_ibody_entries(ext2_extent imap,
+                               struct ext2_inode_large *inode, int inode_size,
+                               ext2_ino_t last_ino)
+{
+       struct ext2_ext_attr_entry *start, *end;
+       __u32 *ea_magic;
+
+       if (inode->i_extra_isize == 0)
+               return 0;
+
+       ea_magic = (__u32 *)((char *)inode + EXT2_GOOD_OLD_INODE_SIZE +
+                               inode->i_extra_isize);
+       if (*ea_magic != EXT2_EXT_ATTR_MAGIC)
+               return 0;
+
+       start = (struct ext2_ext_attr_entry *)(ea_magic + 1);
+       end = (struct ext2_ext_attr_entry *)((char *)inode + inode_size);
+
+       return fix_ea_entries(imap, start, end, last_ino);
+}
+
+static int fix_ea_block_entries(ext2_extent imap, char *block_buf,
+                               unsigned int blocksize, ext2_ino_t last_ino)
+{
+       struct ext2_ext_attr_header *header;
+       struct ext2_ext_attr_entry *start, *end;
+
+       header = (struct ext2_ext_attr_header *)block_buf;
+       start = (struct ext2_ext_attr_entry *)(header+1);
+       end = (struct ext2_ext_attr_entry *)(block_buf + blocksize);
+
+       return fix_ea_entries(imap, start, end, last_ino);
+}
+
+/* A simple LRU cache to check recently processed blocks. */
+struct blk_cache {
+       int cursor;
+       blk64_t blks[4];
+};
+
+#define BLK_IN_CACHE(b,c) ((b) == (c).blks[0] || (b) == (c).blks[1] || \
+                          (b) == (c).blks[2] || (b) == (c).blks[3])
+#define BLK_ADD_CACHE(b,c) {                   \
+       (c).blks[(c).cursor] = (b);             \
+       (c).cursor = ((c).cursor + 1) % 4;      \
+}
+
+static errcode_t fix_ea_inode_refs(ext2_resize_t rfs, struct ext2_inode *inode,
+                                  char *block_buf, ext2_ino_t last_ino)
+{
+       ext2_filsys     fs = rfs->new_fs;
+       ext2_inode_scan scan = NULL;
+       ext2_ino_t      ino;
+       int             inode_size = EXT2_INODE_SIZE(fs->super);
+       blk64_t         blk;
+       int             modified;
+       struct blk_cache blk_cache;
+       struct ext2_ext_attr_header *header;
+       errcode_t               retval;
+
+       memset(&blk_cache, 0, sizeof(blk_cache));
+
+       header = (struct ext2_ext_attr_header *)block_buf;
+
+       retval = ext2fs_open_inode_scan(fs, 0, &scan);
+       if (retval)
                goto out;
 
-       do {
-               errcode = ext2fs_extent_get_info(handle, &info);
-               if (errcode)
+       while (1) {
+               retval = ext2fs_get_next_inode_full(scan, &ino, inode,
+                                                   inode_size);
+               if (retval)
+                       goto out;
+               if (!ino)
                        break;
 
-               /*
-                * If this is the first extent in an extent block that we
-                * haven't visited, rewrite the extent to force the ETB
-                * checksum to be rewritten.
-                */
-               if (info.curr_entry == 1 && info.curr_level != 0 &&
-                   !(extent.e_flags & EXT2_EXTENT_FLAGS_SECOND_VISIT)) {
-                       errcode = ext2fs_extent_replace(handle, 0, &extent);
-                       if (errcode)
-                               break;
-               }
+               if (inode->i_links_count == 0 && ino != EXT2_RESIZE_INO)
+                       continue; /* inode not in use */
 
-               /* Skip to the end of a block of leaf nodes */
-               if (extent.e_flags & EXT2_EXTENT_FLAGS_LEAF) {
-                       errcode = ext2fs_extent_get(handle,
-                                                   EXT2_EXTENT_LAST_SIB,
-                                                   &extent);
-                       if (errcode)
-                               break;
+               if (inode_size != EXT2_GOOD_OLD_INODE_SIZE) {
+                       modified = fix_ea_ibody_entries(rfs->imap,
+                                       (struct ext2_inode_large *)inode,
+                                       inode_size, last_ino);
+                       if (modified) {
+                               retval = ext2fs_write_inode_full(fs, ino, inode,
+                                                                inode_size);
+                               if (retval)
+                                       goto out;
+                       }
                }
 
-               errcode = ext2fs_extent_get(handle, EXT2_EXTENT_NEXT, &extent);
-       } while (errcode == 0);
+               blk = ext2fs_file_acl_block(fs, inode);
+               if (blk && !BLK_IN_CACHE(blk, blk_cache)) {
+                       retval = ext2fs_read_ext_attr3(fs, blk, block_buf, ino);
+                       if (retval)
+                               goto out;
 
+                       modified = fix_ea_block_entries(rfs->imap, block_buf,
+                                                       fs->blocksize,
+                                                       last_ino);
+                       if (modified) {
+                               retval = ext2fs_write_ext_attr3(fs, blk,
+                                                               block_buf, ino);
+                               if (retval)
+                                       goto out;
+                               /*
+                                * If refcount is greater than 1, we might see
+                                * the same block referenced by other inodes
+                                * later.
+                                */
+                               if (header->h_refcount > 1)
+                                       BLK_ADD_CACHE(blk, blk_cache);
+                       }
+               }
+       }
+       retval = 0;
 out:
-       /* Ok if we run off the end */
-       if (errcode == EXT2_ET_EXTENT_NO_NEXT)
-               errcode = 0;
-       ext2fs_extent_free(handle);
-       return errcode;
-}
+       if (scan)
+               ext2fs_close_inode_scan(scan);
+       return retval;
 
-static void quiet_com_err_proc(const char *whoami EXT2FS_ATTR((unused)),
-                              errcode_t code EXT2FS_ATTR((unused)),
-                              const char *fmt EXT2FS_ATTR((unused)),
-                              va_list args EXT2FS_ATTR((unused)))
-{
 }
-
 static errcode_t inode_scan_and_fix(ext2_resize_t rfs)
 {
        struct process_block_struct     pb;
@@ -1996,6 +2085,7 @@ static errcode_t inode_scan_and_fix(ext2_resize_t rfs)
        char                    *block_buf = 0;
        ext2_ino_t              start_to_move;
        int                     inode_size;
+       int                     update_ea_inode_refs = 0;
 
        if ((rfs->old_fs->group_desc_count <=
             rfs->new_fs->group_desc_count) &&
@@ -2068,7 +2158,15 @@ static errcode_t inode_scan_and_fix(ext2_resize_t rfs)
 
                ext2fs_inode_alloc_stats2(rfs->new_fs, new_inode, +1,
                                          pb.is_dir);
-               inode->i_ctime = time(0);
+               /*
+                * i_ctime field in xattr inodes contain a portion of the ref
+                * count, do not overwrite.
+                */
+               if (inode->i_flags & EXT4_EA_INODE_FL)
+                       update_ea_inode_refs = 1;
+               else
+                       inode->i_ctime = time(0);
+
                retval = ext2fs_write_inode_full(rfs->old_fs, new_inode,
                                                inode, inode_size);
                if (retval)
@@ -2094,31 +2192,20 @@ remap_blocks:
                if (retval)
                        goto errout;
 
-               /* Rewrite extent block checksums with new inode number */
-               if (ext2fs_has_feature_metadata_csum(rfs->old_fs->super) &&
-                   (inode->i_flags & EXT4_EXTENTS_FL)) {
-                       rfs->old_fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
-                       retval = rewrite_extents(rfs->old_fs, new_inode);
-                       rfs->old_fs->flags &= ~EXT2_FLAG_IGNORE_CSUM_ERRORS;
-                       if (retval)
-                               goto errout;
-               }
-
                /*
                 * Update inodes to point to new blocks; schedule directory
                 * blocks for inode remapping.  Need to write out dir blocks
                 * with new inode numbers if we have metadata_csum enabled.
                 */
+               rfs->old_fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
                if (ext2fs_inode_has_valid_blocks2(rfs->old_fs, inode) &&
                    (rfs->bmap || pb.is_dir)) {
                        pb.ino = new_inode;
                        pb.old_ino = ino;
                        pb.has_extents = inode->i_flags & EXT4_EXTENTS_FL;
-                       rfs->old_fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
                        retval = ext2fs_block_iterate3(rfs->old_fs,
                                                       new_inode, 0, block_buf,
                                                       process_block, &pb);
-                       rfs->old_fs->flags &= ~EXT2_FLAG_IGNORE_CSUM_ERRORS;
                        if (retval)
                                goto errout;
                        if (pb.error) {
@@ -2133,11 +2220,29 @@ remap_blocks:
                        if (retval)
                                goto errout;
                }
+
+               /* Fix up extent block checksums with the new inode number */
+               if (ext2fs_has_feature_metadata_csum(rfs->old_fs->super) &&
+                   (inode->i_flags & EXT4_EXTENTS_FL)) {
+                       retval = ext2fs_fix_extents_checksums(rfs->old_fs,
+                                                             new_inode, NULL);
+                       if (retval)
+                               goto errout;
+               }
+       }
+
+       if (update_ea_inode_refs &&
+           ext2fs_has_feature_ea_inode(rfs->new_fs->super)) {
+               retval = fix_ea_inode_refs(rfs, inode, block_buf,
+                                          start_to_move);
+               if (retval)
+                       goto errout;
        }
        io_channel_flush(rfs->old_fs->io);
 
 errout:
        reset_com_err_hook();
+       rfs->old_fs->flags &= ~EXT2_FLAG_IGNORE_CSUM_ERRORS;
        if (rfs->bmap) {
                ext2fs_free_extent_table(rfs->bmap);
                rfs->bmap = 0;
@@ -2635,7 +2740,7 @@ errout:
 /*
  * Finally, recalculate the summary information
  */
-static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs)
+static errcode_t resize2fs_calculate_summary_stats(ext2_filsys fs)
 {
        blk64_t         blk;
        ext2_ino_t      ino;
@@ -2783,7 +2888,7 @@ static int calc_group_overhead(ext2_filsys fs, blk64_t grp,
 
 
 /*
- * calcluate the minimum number of blocks the given fs can be resized to
+ * calculate the minimum number of blocks the given fs can be resized to
  */
 blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags)
 {
@@ -2822,11 +2927,11 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags)
                        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);
-
-       for (grp = 0; grp < fs->group_desc_count; grp++)
+       data_needed = ext2fs_blocks_count(fs->super);
+       for (grp = 0; grp < fs->group_desc_count; grp++) {
                data_needed -= calc_group_overhead(fs, grp, old_desc_blocks);
+               data_needed -= ext2fs_bg_free_blocks_count(fs, grp);
+       }
 #ifdef RESIZE2FS_DEBUG
        if (flags & RESIZE_DEBUG_MIN_CALC)
                printf("fs requires %llu data blocks.\n", data_needed);
@@ -2876,7 +2981,7 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags)
 #endif
 
        /*
-        * if we need more group descriptors in order to accomodate our data
+        * if we need more group descriptors in order to accommodate our data
         * then we need to add them here
         */
        blks_needed = data_needed;
index 829fcd8..f9f58f2 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright (C) 1997, 1998 by Theodore Ts'o and
  *     PowerQuest, Inc.
  *
- * Copyright (C) 1999, 2000 by Theosore Ts'o
+ * Copyright (C) 1999, 2000 by Theodore Ts'o
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
index d4206ba..321becd 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright (C) 1997, 1998 by Theodore Ts'o and
  *     PowerQuest, Inc.
  *
- * Copyright (C) 1999, 2000 by Theosore Ts'o
+ * Copyright (C) 1999, 2000 by Theodore Ts'o
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
index 60aa08f..5e9aed7 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright (C) 1997, 1998 by Theodore Ts'o and
  *     PowerQuest, Inc.
  *
- * Copyright (C) 1999, 2000 by Theosore Ts'o
+ * Copyright (C) 1999, 2000 by Theodore Ts'o
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
diff --git a/scrub/Makefile.in b/scrub/Makefile.in
new file mode 100644 (file)
index 0000000..387f650
--- /dev/null
@@ -0,0 +1,188 @@
+#
+# Makefile for e2scrub
+#
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+top_builddir = ..
+my_dir = scrub
+INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
+
+@MCONFIG@
+
+PROGS=         e2scrub e2scrub_all
+MANPAGES=      e2scrub.8 e2scrub_all.8
+CONFFILES=     e2scrub.conf
+
+ifeq ($(HAVE_UDEV),yes)
+UDEV_RULES     = e2scrub.rules
+INSTALLDIRS_TGT        += installdirs-udev
+INSTALL_TGT    += install-udev
+UNINSTALL_TGT  += uninstall-udev
+endif
+
+ifeq ($(HAVE_CROND),yes)
+CRONTABS       = e2scrub_all.cron
+LIBPROGS       += e2scrub_all_cron
+INSTALLDIRS_TGT        += installdirs-crond installdirs-libprogs
+INSTALL_TGT    += install-crond install-libprogs
+UNINSTALL_TGT  += uninstall-crond uninstall-libprogs
+endif
+
+ifeq ($(HAVE_SYSTEMD),yes)
+SERVICE_FILES  = e2scrub@.service e2scrub_all.service e2scrub_all.timer e2scrub_fail@.service e2scrub_reap.service
+LIBPROGS       += e2scrub_fail
+INSTALLDIRS_TGT        += installdirs-systemd installdirs-libprogs
+INSTALL_TGT    += install-systemd install-libprogs
+UNINSTALL_TGT  += uninstall-systemd uninstall-libprogs
+endif
+
+all:: $(PROGS) $(MANPAGES) $(CONFFILES) $(UDEV_RULES) $(SERVICE_FILES) $(CRONTABS) $(LIBPROGS)
+
+e2scrub: $(DEP_SUBSTITUTE) e2scrub.in
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2scrub.in $@
+       $(Q) chmod a+x $@
+
+e2scrub_all: e2scrub_all.in
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2scrub_all.in $@
+       $(Q) chmod a+x $@
+
+e2scrub_fail: e2scrub_fail.in
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2scrub_fail.in $@
+       $(Q) chmod a+x $@
+
+e2scrub_all_cron: e2scrub_all_cron.in
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2scrub_all_cron.in $@
+       $(Q) chmod a+x $@
+
+%.8: %.8.in $(DEP_SUBSTITUTE)
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $< $@
+
+%.conf: %.conf.in $(DEP_SUBSTITUTE)
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $< $@
+
+%.rules: %.rules.in $(DEP_SUBSTITUTE)
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $< $@
+
+%.service: %.service.in $(DEP_SUBSTITUTE)
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $< $@
+
+%.cron: %.cron.in $(DEP_SUBSTITUTE)
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $< $@
+
+%.timer: %.timer.in $(DEP_SUBSTITUTE)
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $< $@
+
+installdirs-udev:
+       $(E) "  MKDIR_P $(UDEV_RULES_DIR)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(UDEV_RULES_DIR)
+
+installdirs-crond:
+       $(E) "  MKDIR_P $(CROND_DIR)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(CROND_DIR)
+
+installdirs-libprogs:
+       $(E) "  MKDIR_P $(pkglibdir)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(pkglibdir)
+
+installdirs-systemd:
+       $(E) "  MKDIR_P $(SYSTEMD_SYSTEM_UNIT_DIR)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(SYSTEMD_SYSTEM_UNIT_DIR)
+
+installdirs: $(INSTALLDIRS_TGT)
+       $(E) "  MKDIR_P $(root_sbindir) $(man8dir) $(root_sysconfdir)"
+       $(Q) $(MKDIR_P) $(DESTDIR)$(root_sbindir) \
+               $(DESTDIR)$(man8dir) $(DESTDIR)$(root_sysconfdir)
+
+install-udev: installdirs-udev
+       $(Q) for i in $(UDEV_RULES); do \
+               $(ES) " INSTALL $(UDEV_RULES_DIR)/$$i"; \
+               $(INSTALL_DATA) $$i $(DESTDIR)$(UDEV_RULES_DIR)/96-$$i; \
+       done
+
+install-crond: installdirs-crond
+       $(Q) if test -n "$(CRONTABS)" ; then \
+               $(ES) " INSTALL $(CROND_DIR)/e2scrub_all" ; \
+               $(INSTALL_DATA) e2scrub_all.cron $(DESTDIR)$(CROND_DIR)/e2scrub_all ; \
+       fi
+
+install-libprogs: $(LIBPROGS) installdirs-libprogs
+       $(Q) for i in $(LIBPROGS); do \
+               $(ES) " INSTALL $(pkglibdir)/$$i"; \
+               $(INSTALL_PROGRAM) $$i $(DESTDIR)$(pkglibdir)/$$i; \
+       done
+
+install-systemd: $(SERVICE_FILES) installdirs-systemd
+       $(Q) for i in $(SERVICE_FILES); do \
+               $(ES) " INSTALL_DATA $(SYSTEMD_SYSTEM_UNIT_DIR)/$$i"; \
+               $(INSTALL_DATA) $$i $(DESTDIR)$(SYSTEMD_SYSTEM_UNIT_DIR)/$$i; \
+       done
+
+install-strip: install
+
+install: $(PROGS) $(MANPAGES) $(FMANPAGES) installdirs $(INSTALL_TGT)
+       $(Q) for i in $(PROGS); do \
+               $(ES) " INSTALL $(root_sbindir)/$$i"; \
+               $(INSTALL_PROGRAM) $$i $(DESTDIR)$(root_sbindir)/$$i; \
+       done
+       $(Q) for i in $(MANPAGES); do \
+               for j in $(COMPRESS_EXT); do \
+                       $(RM) -f $(DESTDIR)$(man8dir)/$$i.$$j; \
+               done; \
+               $(ES) " INSTALL_DATA $(man8dir)/$$i"; \
+               $(INSTALL_DATA) $$i $(DESTDIR)$(man8dir)/$$i; \
+       done
+       $(Q) for i in $(CONFFILES); do \
+               $(ES) " INSTALL_DATA $(root_sysconfdir)/$$i"; \
+               $(INSTALL_DATA) $$i $(DESTDIR)$(root_sysconfdir)/$$i; \
+       done
+
+uninstall-udev:
+       for i in $(UDEV_RULES); do \
+               $(RM) -f $(DESTDIR)$(UDEV_RULES_DIR)/96-$$i; \
+       done
+
+uninstall-crond:
+       if test -n "$(CRONTABS)" ; then \
+               $(RM) -f $(DESTDIR)$(CROND_DIR)/e2scrub_all ; \
+       fi
+
+uninstall-libprogs:
+       for i in $(LIBPROGS); do \
+               $(RM) -f $(DESTDIR)$(pkglibdir)/$$i; \
+       done
+
+uninstall-systemd:
+       for i in $(SERVICE_FILES); do \
+               $(RM) -f $(DESTDIR)$(SYSTEMD_SYSTEM_UNIT_DIR)/$$i; \
+       done
+
+uninstall: $(UNINSTALL_TGT)
+       for i in $(PROGS); do \
+               $(RM) -f $(DESTDIR)$(root_sbindir)/$$i; \
+       done
+       for i in $(MANPAGES); do \
+               $(RM) -f $(DESTDIR)$(man8dir)/$$i; \
+       done
+       for i in $(CONFFILES); do \
+               $(RM) -f $(DESTDIR)$(root_sysconfdir)/$$i; \
+       done
+
+clean::
+       $(RM) -f $(PROGS) $(MANPAGES) $(CONFFILES) $(UDEV_RULES) $(SERVICE_FILES) $(CRONTABS) $(LIBPROGS)
+
+mostlyclean: clean
+distclean: clean
+       $(RM) -f .depend Makefile $(srcdir)/TAGS $(srcdir)/Makefile.in.old
diff --git a/scrub/e2scrub.8.in b/scrub/e2scrub.8.in
new file mode 100644 (file)
index 0000000..8ff1dfe
--- /dev/null
@@ -0,0 +1,69 @@
+.TH E2SCRUB 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
+.SH NAME
+e2scrub - check the contents of a mounted ext[234] filesystem
+.SH SYNOPSYS
+.B
+e2scrub [OPTION] MOUNTPOINT | DEVICE
+.SH DESCRIPTION
+.B e2scrub
+attempts to check (but not repair) all metadata in a mounted ext[234]
+filesystem if the filesystem resides on an LVM logical volume.
+The block device of the LVM logical volume can also be passed in.
+
+This program snapshots the volume and runs a file system check on the snapshot
+to look for corruption errors.
+The LVM volume group must have at least 256MiB of unallocated space to
+dedicate to the snapshot or the logical volume will be skipped.
+The snapshot will be named
+.IR lvname ".e2scrub"
+and
+.B udev
+will not create symbolic links to it under
+.IR /dev/disk .
+Every attempt will be made to remove the snapshots prior to running
+.BR e2scrub ,
+but in a dire situation it may be necessary to remove the snapshot manually.
+
+If no errors are found,
+.B fstrim
+can be called on the file system if it is mounted.
+If errors are found, the file system will be marked as having errors.
+The filesystem should be taken offline and
+.B e2fsck
+run as soon as possible, because
+.B e2scrub
+does not fix corruptions.
+If the filesystem is not repaired,
+.B e2fsck
+will be run before the next mount.
+.SH OPTIONS
+.TP
+\fB-n\fR
+Print what commands
+.B e2scrub
+would execute to check the file system.  (Note: the commands will not
+actually be executed; however, since
+.B e2scrub
+needs to run some commands to query the system to determine what
+commands would be executed, it still needs to be run as root.)
+.TP
+\fB-r\fR
+Remove the e2scrub snapshot and exit without checking anything.
+.TP
+\fB-t\fR
+Run
+.B
+fstrim(1)
+on the mounted filesystem if no errors are found.
+.TP
+\fB-V\fR
+Print version information and exit.
+.SH EXIT CODE
+The exit codes are the same as in
+.BR e2fsck (8)
+.SH SEE ALSO
+.BR e2fsck (8)
+.SH AUTHOR
+Darrick J. Wong <darrick.wong@oracle.com>
+.SH COPYRIGHT
+Copyright \[co]2018 Oracle.  License is GPLv2+. <http://www.gnu.org/licenses/gpl-2.0.html>
diff --git a/scrub/e2scrub.conf.in b/scrub/e2scrub.conf.in
new file mode 100644 (file)
index 0000000..661fc13
--- /dev/null
@@ -0,0 +1,25 @@
+# e2scrub configuration file
+
+# Uncomment to enable automatic periodic runs of e2scrub_all
+# (either via cron or via a systemd timer)
+# periodic_e2scrub=1
+
+# e-mail destination used by e2scrub_fail when problems are found with
+# the file system.
+# recipient=root
+
+# e-mail sender used by e2scrub_fail when problems are found with
+# the file system.
+# sender=e2scrub@host.domain.name
+
+# Snapshots will be created to run fsck; the snapshot will be of this size.
+# snap_size_mb=256
+
+# Set this to 1 to enable fstrim for everyone.
+# fstrim=0
+
+# Arguments passed into e2fsck.
+# e2fsck_opts="-vtt"
+
+# Set this to 1 to have e2scrub_all scrub all LVs, not just the mounted ones.
+# scrub_all=0
diff --git a/scrub/e2scrub.in b/scrub/e2scrub.in
new file mode 100644 (file)
index 0000000..30ab7cb
--- /dev/null
@@ -0,0 +1,283 @@
+#!/bin/bash
+
+#  Copyright (C) 2018 Oracle.  All Rights Reserved.
+#
+#  Author: Darrick J. Wong <darrick.wong@oracle.com>
+#
+#  This program 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 (at your option) any later version.
+#
+#  This program is distributed in the hope that it would 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, write the Free Software Foundation,
+#  Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+# Automatically check an LVM-managed filesystem online.
+# We use lvm snapshots to do this, which means that we can only
+# check filesystems in VGs that have at least 256MB (or so) of
+# free space.
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
+if (( $EUID != 0 )); then
+    echo "e2scrub must be run as root"
+    exit 1
+fi
+
+snap_size_mb=256
+fstrim=0
+reap=0
+e2fsck_opts=""
+conffile="@root_sysconfdir@/e2scrub.conf"
+
+test -f "${conffile}" && . "${conffile}"
+
+print_help() {
+       echo "Usage: $0 [OPTIONS] mountpoint | device"
+       echo
+       echo "mountpoint must be on an LVM-managed block device"
+       echo "-n: Show what commands e2scrub would execute."
+       echo "-r: Remove e2scrub snapshot and exit, do not check anything."
+       echo "-t: Run fstrim if successful."
+       echo "-V: Print version information and exit."
+}
+
+print_version() {
+       echo "e2scrub @E2FSPROGS_VERSION@ (@E2FSPROGS_DATE@)"
+}
+
+exitcode() {
+       ret="$1"
+
+       # If we're being run as a service, the return code must fit the LSB
+       # init script action error guidelines, which is to say that we
+       # compress all errors to 1 ("generic or unspecified error", LSB 5.0
+       # section 22.2) and hope the admin will scan the log for what
+       # actually happened.
+
+       # We have to sleep 2 seconds here because journald uses the pid to
+       # connect our log messages to the systemd service.  This is critical
+       # for capturing all the log messages if the scrub fails, because the
+       # fail service uses the service name to gather log messages for the
+       # error report.
+       if [ -n "${SERVICE_MODE}" -a "${ret}" -ne 0 ]; then
+               test "${ret}" -ne 0 && ret=1
+               sleep 2
+       fi
+
+       exit "${ret}"
+}
+
+while getopts "nrtV" opt; do
+    case "${opt}" in
+       "n") DBG="echo Would execute: " ;;
+       "r") reap=1;;
+       "t") fstrim=1;;
+       "V") print_version; exitcode 0;;
+       *) print_help; exitcode 2;;
+       esac
+done
+shift "$((OPTIND - 1))"
+
+arg="$1"
+if [ -z "${arg}" ]; then
+       print_help
+       exitcode 1
+fi
+
+if ! type lsblk >& /dev/null ; then
+    echo "e2scrub: can't find lsblk --- is util-linux installed?"
+    exitcode 1
+fi
+
+if ! type lvcreate >& /dev/null ; then
+    echo "e2scrub: can't find lvcreate --- is lvm2 installed?"
+    exitcode 1
+fi
+
+# close file descriptor 3 (from cron) since it causes lvm to kvetch
+exec 3<&-
+
+# Find the device for a given mountpoint
+dev_from_mount() {
+       local mountpt="$(realpath "$1")"
+
+       lsblk -o NAME,FSTYPE,MOUNTPOINT -p -P -n 2> /dev/null | while read vars; do
+               eval "${vars}"
+               if [ "${mountpt}" != "${MOUNTPOINT}" ]; then
+                       continue
+               fi
+               case "${FSTYPE}" in
+               ext[234])
+                       echo "${NAME}"
+                       return 0
+                       ;;
+               esac
+       done
+       return 1
+}
+
+# Check a device argument
+dev_from_arg() {
+       local dev="$1"
+       local fstype="$(lsblk -o FSTYPE -n "${dev}" 2> /dev/null)"
+
+       case "${fstype}" in
+       ext[234])
+               echo "${dev}"
+               return 0
+               ;;
+       esac
+       return 1
+}
+
+mnt_from_dev() {
+       local dev="$1"
+
+       if [ -n "${dev}" ]; then
+               lsblk -o MOUNTPOINT -n "${dev}"
+       fi
+}
+
+# Construct block device path and mountpoint from argument
+if [ -b "${arg}" ]; then
+       dev="$(dev_from_arg "${arg}")"
+       mnt="$(mnt_from_dev "${dev}")"
+else
+       dev="$(dev_from_mount "${arg}")"
+       mnt="${arg}"
+fi
+if [ ! -e "${dev}" ]; then
+       echo "${arg}: Not an ext[234] filesystem."
+       print_help
+       exitcode 16
+fi
+
+# Make sure this is an LVM device we can snapshot
+lvm_vars="$(lvs --nameprefixes -o name,vgname,lv_role --noheadings "${dev}" 2> /dev/null)"
+eval "${lvm_vars}"
+if [ -z "${LVM2_VG_NAME}" ] || [ -z "${LVM2_LV_NAME}" ] ||
+   echo "${LVM2_LV_ROLE}" | grep -q "snapshot"; then
+       echo "${arg}: Not connnected to an LVM logical volume."
+       print_help
+       exitcode 16
+fi
+start_time="$(date +'%Y%m%d%H%M%S')"
+snap="${LVM2_LV_NAME}.e2scrub"
+snap_dev="/dev/${LVM2_VG_NAME}/${snap}"
+
+teardown() {
+       # Remove and wait for removal to succeed.
+       ${DBG} lvremove -f "${LVM2_VG_NAME}/${snap}"
+       while [ -e "${snap_dev}" ] && [ "$?" -eq "5" ]; do
+               sleep 0.5
+               ${DBG} lvremove -f "${LVM2_VG_NAME}/${snap}"
+       done
+}
+
+check() {
+       # First we recover the journal, then we see if e2fsck tries any
+       # non-optimization repairs.  If either of these two returns a
+       # non-zero status (errors fixed or remaining) then this fs is bad.
+       E2FSCK_FIXES_ONLY=1
+       export E2FSCK_FIXES_ONLY
+       ${DBG} "@root_sbindir@/e2fsck" -E journal_only -p ${e2fsck_opts} "${snap_dev}" || return $?
+       ${DBG} "@root_sbindir@/e2fsck" -f -y ${e2fsck_opts} "${snap_dev}"
+}
+
+mark_clean() {
+       ${DBG} "@root_sbindir@/tune2fs" -C 0 -T "${start_time}" "${dev}"
+}
+
+mark_corrupt() {
+       ${DBG} "@root_sbindir@/tune2fs" -E force_fsck "${dev}"
+}
+
+setup() {
+       # Try to remove snapshot for 30s, bail out if we can't remove it.
+       lvremove_deadline="$(( $(date "+%s") + 30))"
+       ${DBG} lvremove -f "${LVM2_VG_NAME}/${snap}" 2>/dev/null
+       while [ -e "${snap_dev}" ] && [ "$?" -eq "5" ] &&
+             [ "$(date "+%s")" -lt "${lvremove_deadline}" ]; do
+               sleep 0.5
+               ${DBG} lvremove -f "${LVM2_VG_NAME}/${snap}"
+       done
+       if [ -e "${snap_dev}" ]; then
+               echo "${arg}: e2scrub snapshot is in use, cannot check!"
+               return 1
+       fi
+       # Create the snapshot, wait for device to appear.
+       ${DBG} lvcreate -s -L "${snap_size_mb}m" -n "${snap}" "${LVM2_VG_NAME}/${LVM2_LV_NAME}"
+       if [ $? -ne 0 ]; then
+               echo "${arg}: e2scrub snapshot FAILED, will not check!"
+               return 1
+       fi
+       ${DBG} udevadm settle 2> /dev/null
+       return 0
+}
+
+if [ "${reap}" -gt 0 ]; then
+       if [ -e "${snap_dev}" ]; then
+               teardown 2> /dev/null
+       fi
+       exit 0
+fi
+if ! setup; then
+       exitcode 8
+fi
+trap "teardown; exit 1" EXIT INT QUIT TERM
+
+# Check and react
+check
+case "$?" in
+"0")
+       # Clean check!
+       echo "${arg}: Scrub succeeded."
+       mark_clean
+       teardown
+       trap '' EXIT
+
+       # Trim the free space, which requires the snapshot be deleted.
+       if [ "${fstrim}" -eq 1 ] && [ -d "${mnt}" ] && type fstrim > /dev/null 2>&1; then
+               echo "${arg}: Trimming free space."
+               fstrim -v "${mnt}"
+       fi
+
+       ret=0
+       ;;
+"8")
+       # Operational error, what now?
+       echo "${arg}: e2fsck operational error."
+       teardown
+       trap '' EXIT
+       ret=8
+       ;;
+*)
+       # fsck failed.  Check if the snapshot is invalid; if so, make a
+       # note of that at the end of the log.  This isn't necessarily a
+       # failure because the mounted fs could have overflowed the
+       # snapshot with regular disk writes /or/ our repair process
+       # could have done it by repairing too much.
+       #
+       # If it's really corrupt we ought to fsck at next boot.
+       is_invalid="$(lvs -o lv_snapshot_invalid --noheadings "${snap_dev}" | awk '{print $1}')"
+       if [ -n "${is_invalid}" ]; then
+               echo "${arg}: Scrub FAILED due to invalid snapshot."
+               ret=8
+       else
+               echo "${arg}: Scrub FAILED due to corruption!  Unmount and run e2fsck -y."
+               mark_corrupt
+               ret=6
+       fi
+       teardown
+       trap '' EXIT
+       ;;
+esac
+
+exitcode "${ret}"
diff --git a/scrub/e2scrub.rules.in b/scrub/e2scrub.rules.in
new file mode 100644 (file)
index 0000000..b6dc30b
--- /dev/null
@@ -0,0 +1,2 @@
+# Try to hide our fsck snapshots from udev's /dev/disk linking...
+ACTION=="add|change", ENV{DM_LV_NAME}=="*.e2scrub", ENV{UDISKS_IGNORE}="1", OPTIONS="link_priority=-100"
diff --git a/scrub/e2scrub@.service.in b/scrub/e2scrub@.service.in
new file mode 100644 (file)
index 0000000..496f894
--- /dev/null
@@ -0,0 +1,20 @@
+[Unit]
+Description=Online ext4 Metadata Check for %I
+OnFailure=e2scrub_fail@%i.service
+Documentation=man:e2scrub(8)
+
+[Service]
+Type=oneshot
+WorkingDirectory=/
+PrivateNetwork=true
+ProtectSystem=true
+ProtectHome=read-only
+PrivateTmp=yes
+AmbientCapabilities=CAP_SYS_ADMIN CAP_SYS_RAWIO
+NoNewPrivileges=yes
+User=root
+IOSchedulingClass=idle
+CPUSchedulingPolicy=idle
+Environment=SERVICE_MODE=1
+ExecStart=@root_sbindir@/e2scrub -t %I
+SyslogIdentifier=%N
diff --git a/scrub/e2scrub_all.8.in b/scrub/e2scrub_all.8.in
new file mode 100644 (file)
index 0000000..e2cd5e4
--- /dev/null
@@ -0,0 +1,47 @@
+.TH E2SCRUB 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
+.SH NAME
+e2scrub_all - check all mounted ext[234] filesystems for errors.
+.SH SYNOPSYS
+.B
+e2scrub_all [OPTION]
+.SH DESCRIPTION
+Searches the system for all LVM logical volumes containing an ext2, ext3, or
+ext4 file system, and checks them for problems.
+The checking is performed by invoking the
+.B e2scrub
+tool, which will look for corruptions.
+Corrupt filesystems will be tagged as having errors so that fsck will be
+invoked before the next mount.
+If no errors are encountered,
+.B fstrim
+will be called on the filesystem if it is mounted.
+See the
+.B e2scrub
+manual page for more information about how the checking is performed.
+.SH OPTIONS
+.TP
+\fB-n\fR
+Print what commands
+.B e2scrub_all
+would execute to initiate the e2scrub operations.
+(Note: these commands will not actually be executed; however, since
+.B e2scrub_all
+needs to run some additional, privileged commands to query the
+system to determine which
+.B e2scrub
+commands would be executed, it still needs to be run as root.)
+.TP
+\fB-r\fR
+Remove e2scrub snapshots but do not check anything.
+.TP
+\fB-A\fR
+Scrub all ext[234] filesystems even if they are not mounted.
+.TP
+\fB-V\fR
+Print version information and exit.
+.SH SEE ALSO
+.BR e2scrub "(8)"
+.SH AUTHOR
+Darrick J. Wong <darrick.wong@oracle.com>
+.SH COPYRIGHT
+Copyright \[co]2018 Oracle.  License is GPLv2+. <http://www.gnu.org/licenses/gpl-2.0.html>
diff --git a/scrub/e2scrub_all.cron.in b/scrub/e2scrub_all.cron.in
new file mode 100644 (file)
index 0000000..395fb2a
--- /dev/null
@@ -0,0 +1,2 @@
+30 3 * * 0 root test -e /run/systemd/system || SERVICE_MODE=1 @pkglibdir@/e2scrub_all_cron
+10 3 * * * root test -e /run/systemd/system || SERVICE_MODE=1 @root_sbindir@/e2scrub_all -A -r
diff --git a/scrub/e2scrub_all.in b/scrub/e2scrub_all.in
new file mode 100644 (file)
index 0000000..4288b96
--- /dev/null
@@ -0,0 +1,185 @@
+#!/bin/bash
+
+#  Copyright (C) 2018 Oracle.  All Rights Reserved.
+#
+#  Author: Darrick J. Wong <darrick.wong@oracle.com>
+#
+#  This program 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 (at your option) any later version.
+#
+#  This program is distributed in the hope that it would 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, write the Free Software Foundation,
+#  Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
+if (( $EUID != 0 )); then
+    echo "e2scrub_all must be run as root"
+    exit 1
+fi
+
+periodic_e2scrub=0
+scrub_all=0
+snap_size_mb=256
+reap=0
+conffile="@root_sysconfdir@/e2scrub.conf"
+
+test -f "${conffile}" && . "${conffile}"
+
+scrub_args=""
+
+print_help() {
+       echo "Usage: $0 [OPTIONS]"
+       echo " -n: Show what commands e2scrub_all would execute."
+       echo " -r: Remove e2scrub snapshots."
+       echo " -A: Scrub all ext[234] filesystems even if not mounted."
+       echo " -V: Print version information and exit."
+}
+
+print_version() {
+       echo "e2scrub_all @E2FSPROGS_VERSION@ (@E2FSPROGS_DATE@)"
+}
+
+exitcode() {
+       ret="$1"
+
+       # If we're being run as a service, the return code must fit the LSB
+       # init script action error guidelines, which is to say that we
+       # compress all errors to 1 ("generic or unspecified error", LSB 5.0
+       # section 22.2) and hope the admin will scan the log for what
+       # actually happened.
+
+       if [ -n "${SERVICE_MODE}" -a "${ret}" -ne 0 ]; then
+               test "${ret}" -ne 0 && ret=1
+       fi
+
+       exit "${ret}"
+}
+
+while getopts "nrAV" opt; do
+       case "${opt}" in
+       "n") DBG="echo Would execute: " ;;
+       "r") scrub_args="${scrub_args} -r"; reap=1;;
+       "A") scrub_all=1;;
+       "V") print_version; exitcode 0;;
+       *) print_help; exitcode 2;;
+       esac
+done
+shift "$((OPTIND - 1))"
+
+# If we're in service mode and the service is not enabled via config file...
+if [ -n "${SERVICE_MODE}" -a "${periodic_e2scrub}" -ne 1 ]; then
+       # ...don't start e2scrub processes.
+       if [ "${reap}" -eq 0 ]; then
+               exitcode 0
+       fi
+
+       # ...and if we don't see any leftover e2scrub snapshots, don't
+       # run the reaping process either, because lvs can be slow.
+       if ! readlink -q -s -e /dev/mapper/*.e2scrub* > /dev/null; then
+               exitcode 0
+       fi
+fi
+
+# close file descriptor 3 (from cron) since it causes lvm to kvetch
+exec 3<&-
+
+# If some prerequisite packages are not installed, exit with a code
+# indicating success to avoid spamming the sysadmin with fail messages
+# when e2scrub_all is run out of cron or a systemd timer.
+
+if ! type mapfile >& /dev/null ; then
+    test -n "${SERVICE_MODE}" && exitcode 0
+    echo "e2scrub_all: can't find mapfile --- is bash 4.xx installed?"
+    exitcode 1
+fi
+
+if ! type lsblk >& /dev/null ; then
+    test -n "${SERVICE_MODE}" && exitcode 0
+    echo "e2scrub_all: can't find lsblk --- is util-linux installed?"
+    exitcode 1
+fi
+
+if ! type lvcreate >& /dev/null ; then
+    test -n "${SERVICE_MODE}" && exitcode 0
+    echo "e2scrub_all: can't find lvcreate --- is lvm2 installed?"
+    exitcode 1
+fi
+
+# Find scrub targets, make sure we only do this once.
+ls_scan_targets() {
+    local devices=$(lvs -o lv_path --noheadings -S "lv_active=active,lv_role=public,lv_role!=snapshot,vg_free>=${snap_size_mb}")
+
+    if [ -z "$devices" ]; then
+       return 0;
+    fi
+    lsblk -o NAME,MOUNTPOINT,FSTYPE,TYPE -P -n -p $devices | \
+       grep FSTYPE=\"ext\[234\]\" | grep TYPE=\"lvm\" | \
+       while read vars ; do
+               eval "${vars}"
+
+               if [ "${scrub_all}" -eq 1 ] || [ -n "${MOUNTPOINT}" ]; then
+                   echo ${MOUNTPOINT:-${NAME}}
+               fi
+       done
+}
+
+# Find leftover scrub snapshots
+ls_reap_targets() {
+    lvs -o lv_path -S lv_role=snapshot -S lv_name=~\(e2scrub$\) \
+       --noheadings | sed -e 's/.e2scrub$//'
+}
+
+# Figure out what we're targeting
+ls_targets() {
+       if [ "${reap}" -eq 1 ]; then
+               ls_reap_targets
+       else
+               ls_scan_targets
+       fi
+}
+
+# systemd doesn't know to do path escaping on the instance variable we pass
+# to the e2scrub service, which breaks things if there is a dash in the path
+# name.  Therefore, do the path escaping ourselves if needed.
+#
+# systemd path escaping also drops the initial slash so we add that back in so
+# that log messages from the service units preserve the full path and users can
+# look up log messages using full paths.  However, for "/" the escaping rules
+# do /not/ drop the initial slash, so we have to special-case that here.
+escape_path_for_systemd() {
+       local path="$1"
+
+       if [ "${path}" != "/" ]; then
+               echo "-$(systemd-escape --path "${path}")"
+       else
+               echo "-"
+       fi
+}
+
+# Scrub any mounted fs on lvm by creating a snapshot and fscking that.
+mapfile -t targets < <(ls_targets)
+for tgt in "${targets[@]}"; do
+       # If we're not reaping and systemd is present, try invoking the
+       # systemd service.
+       if [ "${reap}" -ne 1 ] && type systemctl > /dev/null 2>&1; then
+               tgt_esc="$(escape_path_for_systemd "${tgt}")"
+               ${DBG} systemctl start "e2scrub@${tgt_esc}" 2> /dev/null
+               res=$?
+               if [ "${res}" -eq 0 ] || [ "${res}" -eq 1 ]; then
+                       continue;
+               fi
+       fi
+
+       # Otherwise use direct invocation
+       ${DBG} "@root_sbindir@/e2scrub" ${scrub_args} "${tgt}"
+done
+
+exitcode 0
diff --git a/scrub/e2scrub_all.service.in b/scrub/e2scrub_all.service.in
new file mode 100644 (file)
index 0000000..20f42bf
--- /dev/null
@@ -0,0 +1,12 @@
+[Unit]
+Description=Online ext4 Metadata Check for All Filesystems
+ConditionACPower=true
+ConditionCapability=CAP_SYS_ADMIN
+ConditionCapability=CAP_SYS_RAWIO
+Documentation=man:e2scrub_all(8)
+
+[Service]
+Type=oneshot
+Environment=SERVICE_MODE=1
+ExecStart=@root_sbindir@/e2scrub_all
+SyslogIdentifier=e2scrub_all
diff --git a/scrub/e2scrub_all.timer.in b/scrub/e2scrub_all.timer.in
new file mode 100644 (file)
index 0000000..3d558bb
--- /dev/null
@@ -0,0 +1,11 @@
+[Unit]
+Description=Periodic ext4 Online Metadata Check for All Filesystems
+
+[Timer]
+# Run on Sunday at 3:10am, to avoid running afoul of DST changes
+OnCalendar=Sun *-*-* 03:10:00
+RandomizedDelaySec=60
+Persistent=true
+
+[Install]
+WantedBy=timers.target
diff --git a/scrub/e2scrub_all_cron.in b/scrub/e2scrub_all_cron.in
new file mode 100644 (file)
index 0000000..fcfe415
--- /dev/null
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+#  Copyright (C) 2018 Oracle.  All Rights Reserved.
+#
+#  Author: Darrick J. Wong <darrick.wong@oracle.com>
+#
+#  This program 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 (at your option) any later version.
+#
+#  This program is distributed in the hope that it would 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, write the Free Software Foundation,
+#  Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+# Run e2scrub_all from a cronjob if we don't have systemd and we're not
+# running on AC power.
+
+on_ac_power() {
+       local any_known=no
+
+       # try sysfs power class first
+       if [ -d /sys/class/power_supply ]; then
+               for psu in /sys/class/power_supply/*; do
+                       if [ -r "$psu/type" ]; then
+                               type=$(cat "$psu/type")
+
+                               # ignore batteries
+                               [ "$type" = "Battery" ] && continue
+
+                               online=$(cat "$psu/online")
+
+                               [ "$online" = 1 ] && return 0
+                               [ "$online" = 0 ] && any_known=yes
+                       fi
+               done
+
+               [ "$any_known" = "yes" ] && return 1
+       fi
+
+       # else fall back to AC adapters in /proc
+       if [ -d /proc/acpi/ac_adapter ]; then
+               for ac in /proc/acpi/ac_adapter/*; do
+                       if [ -r "$ac/state" ]; then
+                               grep -q on-line "$ac/state" && return 0
+                               grep -q off-line "$ac/state" && any_known=yes
+                       elif [ -r "$ac/status" ]; then
+                               grep -q on-line "$ac/status" && return 0
+                               grep -q off-line "$ac/status" && any_known=yes
+                       fi
+               done
+
+               [ "$any_known" = "yes" ] && return 1
+       fi
+
+       # Can't tell, just assume we're on AC.
+       return 0
+}
+
+test -e @root_sbindir@/e2scrub_all || exit 0
+test -e /run/systemd/system && exit 0
+on_ac_power || exit 0
+
+exec @root_sbindir@/e2scrub_all
diff --git a/scrub/e2scrub_fail.in b/scrub/e2scrub_fail.in
new file mode 100644 (file)
index 0000000..2c0754a
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# Email logs of failed e2scrub unit runs when the systemd service fails.
+
+device="$1"
+test -z "${device}" && exit 0
+
+if ! type sendmail > /dev/null 2>&1; then
+       echo "$0: sendmail program not found."
+       exit 1
+fi
+
+if test -f /etc/e2scrub.conf ; then
+   . /etc/e2scrub.conf
+fi
+
+hostname="$(hostname -f 2>/dev/null)"
+test -z "${hostname}" && hostname="${HOSTNAME}"
+service_name="e2scrub@$(systemd-escape ${device})"
+
+if test -z "${recipient}" ; then
+    recipient="root"
+fi
+
+if test -z "${sender}" ; then
+    sender="<e2scrub@${hostname}>"
+fi
+
+(cat << ENDL
+To: ${recipient}
+From: ${sender}
+Subject: e2scrub failure on ${device}
+
+So sorry, the automatic e2scrub of ${device} on ${hostname} failed.
+
+A log of what happened follows:
+ENDL
+systemctl status --full --lines 4294967295 "${service_name}") | sendmail -t -i
diff --git a/scrub/e2scrub_fail@.service.in b/scrub/e2scrub_fail@.service.in
new file mode 100644 (file)
index 0000000..4bad311
--- /dev/null
@@ -0,0 +1,10 @@
+[Unit]
+Description=Online ext4 Metadata Check Failure Reporting for %I
+Documentation=man:e2scrub(8)
+
+[Service]
+Type=oneshot
+ExecStart=@pkglibdir@/e2scrub_fail "%I"
+User=mail
+Group=mail
+SupplementaryGroups=systemd-journal
diff --git a/scrub/e2scrub_reap.service.in b/scrub/e2scrub_reap.service.in
new file mode 100644 (file)
index 0000000..10d25f0
--- /dev/null
@@ -0,0 +1,25 @@
+[Unit]
+Description=Remove Stale Online ext4 Metadata Check Snapshots
+ConditionCapability=CAP_SYS_ADMIN
+ConditionCapability=CAP_SYS_RAWIO
+Documentation=man:e2scrub_all(8)
+
+[Service]
+Type=oneshot
+WorkingDirectory=/
+PrivateNetwork=true
+ProtectSystem=true
+ProtectHome=read-only
+PrivateTmp=yes
+AmbientCapabilities=CAP_SYS_ADMIN CAP_SYS_RAWIO
+NoNewPrivileges=yes
+User=root
+IOSchedulingClass=idle
+CPUSchedulingPolicy=idle
+Environment=SERVICE_MODE=1
+ExecStart=@root_sbindir@/e2scrub_all -A -r
+SyslogIdentifier=%N
+RemainAfterExit=no
+
+[Install]
+WantedBy=default.target
index c130f4a..ba06b3b 100644 (file)
@@ -8,32 +8,39 @@ VPATH = @srcdir@
 top_builddir = ..
 my_dir = tests
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
 all:: @DO_TEST_SUITE@ test_one test_script
 
-test_one: $(srcdir)/test_one.in Makefile mke2fs.conf
+test_one: $(srcdir)/test_one.in Makefile mke2fs.conf test_data.tmp
        @echo "Creating test_one script..."
+       @[ -f test_one ] && chmod u+w test_one || true
        @echo "#!/bin/sh" > test_one
        @echo "HTREE=y" >> test_one
        @echo "QUOTA=y" >> test_one
        @echo "SRCDIR=@srcdir@" >> test_one
        @echo "DIFF_OPTS=@UNI_DIFF_OPTS@" >> test_one
        @echo "SIZEOF_TIME_T=@SIZEOF_TIME_T@" >> test_one
+       @echo "DD=@DD@" >>test_one
        @cat $(srcdir)/test_one.in >> test_one
-       @chmod +x test_one
+       @chmod +x-w test_one
 
-test_script: test_one test_script.in Makefile mke2fs.conf
+test_script: test_one test_script.in Makefile mke2fs.conf test_data.tmp
        @echo "Creating test_script..."
+       @[ -f test_script ] && chmod u+w test_script || true
        @echo "#!/bin/sh" > test_script
        @echo "SRCDIR=@srcdir@" >> test_script
        @cat $(srcdir)/test_script.in >> test_script
-       @chmod +x test_script
+       @chmod +x-w test_script
 
 mke2fs.conf: $(srcdir)/mke2fs.conf.in
        $(CP) $(srcdir)/mke2fs.conf.in mke2fs.conf
 
+test_data.tmp: $(srcdir)/scripts/gen-test-data
+       $(srcdir)/scripts/gen-test-data > test_data.tmp
+
 .PHONY : test_pre test_post check always_run
 
 always_run:
@@ -41,8 +48,10 @@ always_run:
 @ifGNUmake@TESTS=$(wildcard $(srcdir)/[a-z]_*)
 @ifNotGNUmake@TESTS != echo $(srcdir)/[a-z]_*
 
+SKIP_SLOW_TESTS=--skip-slow-tests
+
 $(TESTS):: test_one always_run
-       @./test_one $@
+       @./test_one $(SKIP_SLOW_TESTS) $@
 
 foo:
        echo $(TESTS)
@@ -57,6 +66,9 @@ test_post: test_pre $(TESTS)
 
 check:: test_pre test_post test_script
 
+fullcheck::
+       $(MAKE) SKIP_SLOW_TESTS= check
+
 check-failed: $(basename $(wildcard *.failed))
        @$(srcdir)/test_post
 
@@ -87,7 +99,8 @@ testend: test_one ${TDIR}/image
        @echo "If all is well, edit ${TDIR}/name and rename ${TDIR}."
 
 clean::
-       $(RM) -f *~ *.log *.new *.failed *.ok *.tmp test_one test_script mke2fs.conf
+       $(RM) -f *~ *.log *.new *.failed *.ok *.tmp *.slow
+       $(RM) -f test_one test_script mke2fs.conf test_data.tmp
 
 distclean:: clean
        $(RM) -f Makefile
diff --git a/tests/d_bad_ostype/expect b/tests/d_bad_ostype/expect
new file mode 100644 (file)
index 0000000..b00318c
--- /dev/null
@@ -0,0 +1 @@
+Filesystem OS type:       (unknown os)
diff --git a/tests/d_bad_ostype/name b/tests/d_bad_ostype/name
new file mode 100644 (file)
index 0000000..3da887a
--- /dev/null
@@ -0,0 +1 @@
+handle bad (negative) os_type
diff --git a/tests/d_bad_ostype/script b/tests/d_bad_ostype/script
new file mode 100644 (file)
index 0000000..992a303
--- /dev/null
@@ -0,0 +1,21 @@
+dd if=/dev/zero of=$TMPFILE bs=1k count=64 > /dev/null 2>&1
+$MKE2FS -q -b 1024 $TMPFILE
+$DEBUGFS -w -R 'set_super_value creator_os 0xf0000000' $TMPFILE
+
+OUT=$test_name.log
+EXP=$test_dir/expect
+$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed | grep 'Filesystem OS type:' > $OUT
+
+rm -f $TMPFILE
+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
+        rm -f $test_name.tmp
+fi
+unset OUT EXP
diff --git a/tests/d_corrupt_journal_nr_users/expect b/tests/d_corrupt_journal_nr_users/expect
new file mode 100644 (file)
index 0000000..656d35c
--- /dev/null
@@ -0,0 +1,101 @@
+Filesystem volume name:   <none>
+Last mounted on:          <not available>
+Filesystem magic number:  0xEF53
+Filesystem revision #:    1 (dynamic)
+Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
+Default mount options:    user_xattr acl
+Filesystem state:         clean
+Errors behavior:          Continue
+Filesystem OS type:       Linux
+Inode count:              512
+Block count:              2048
+Reserved block count:     102
+Free blocks:              982
+Free inodes:              501
+First block:              0
+Block size:               4096
+Fragment size:            4096
+Group descriptor size:    64
+Blocks per group:         32768
+Fragments per group:      32768
+Inodes per group:         512
+Inode blocks per group:   32
+Flex block group size:    16
+Mount count:              0
+Check interval:           0 (<none>)
+Reserved blocks uid:      0
+Reserved blocks gid:      0
+First inode:              11
+Inode size:              256
+Required extra isize:     32
+Desired extra isize:      32
+Journal inode:            8
+Default directory hash:   half_md4
+Journal backup:           inode blocks
+Checksum type:            crc32c
+Journal features:         (none)
+Total journal size:       4096k
+Total journal blocks:     1024
+Max transaction length:   1024
+Fast commit length:       0
+Journal sequence:         0x00000001
+Journal start:            0
+Journal number of users:  9999
+Journal users:            <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+                          <none>
+
+
+Group 0: (Blocks 0-2047)
+  Primary superblock at 0, Group descriptors at 1-1
+  Block bitmap at 2 (+2)
+  Inode bitmap at 18 (+18)
+  Inode table at 34-65 (+34)
+  982 free blocks, 501 free inodes, 2 directories, 501 unused inodes
+  Free blocks: 1066-2047
+  Free inodes: 12-512
diff --git a/tests/d_corrupt_journal_nr_users/image.gz b/tests/d_corrupt_journal_nr_users/image.gz
new file mode 100644 (file)
index 0000000..1fc32ed
Binary files /dev/null and b/tests/d_corrupt_journal_nr_users/image.gz differ
diff --git a/tests/d_corrupt_journal_nr_users/name b/tests/d_corrupt_journal_nr_users/name
new file mode 100644 (file)
index 0000000..8b33a27
--- /dev/null
@@ -0,0 +1 @@
+Journal superblock corrupted, nr_users too high
diff --git a/tests/d_corrupt_journal_nr_users/script b/tests/d_corrupt_journal_nr_users/script
new file mode 100644 (file)
index 0000000..683cd48
--- /dev/null
@@ -0,0 +1,25 @@
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
+
+IMAGE=$test_dir/image.gz
+EXP=$test_dir/expect
+OUT=$test_name.log
+gunzip < $IMAGE > $TMPFILE
+
+$DUMPE2FS $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+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
+       rm -f $test_name.tmp
+fi
index 50481f0..01373b9 100644 (file)
@@ -4,7 +4,10 @@ if [ $(uname -s) = "Darwin" ]; then
        return 0
 fi
 
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -15,20 +18,16 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 1048576 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 1048576 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-echo "dumpe2fs output" >> $OUT
-$DUMPE2FS -g $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-
-rm -f $TMPFILE
+echo "dumpe2fs output" >> $OUT.new
+$DUMPE2FS -g $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -43,7 +42,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index ae8956e..36fa019 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,8 +12,6 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 cat > $TMPFILE.conf << ENDL
 [fs_types]
 ext4 = {
@@ -20,16 +21,14 @@ ext4 = {
         inode_ratio = 16384
 }
 ENDL
-MKE2FS_CONFIG=$TMPFILE.conf $MKE2FS -F -o Linux -b 1024 -O ^bigalloc -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
-rm -rf $TMPFILE.conf
+MKE2FS_CONFIG=$TMPFILE.conf $MKE2FS -F -o Linux -b 1024 -O ^bigalloc -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
+rm -f $TMPFILE.conf
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-echo "debugfs write files" >> $OUT
+echo "debugfs write files" >> $OUT.new
 make_file() {
        name="$1"
        start="$2"
@@ -143,18 +142,14 @@ sif /k size 9216000
 ENDL
 echo "ex /k" >> $TMPFILE.cmd2
 
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE > /dev/null 2>&1
-$DEBUGFS_EXE -f $TMPFILE.cmd2 $TMPFILE >> $OUT.new 2>&1
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new $TMPFILE.cmd $TMPFILE.cmd2
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE > /dev/null 2>&1
+$DEBUGFS -f $TMPFILE.cmd2 $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $TMPFILE.cmd2 $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -165,11 +160,7 @@ if [ "$status" = 0 ] ; then
 else
        echo "$test_name: $test_description: failed"
        diff $DIFF_OPTS $EXP $OUT > $test_name.failed
-       rm -f $test_name.tmp
 fi
+rm -f $EXP
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 6b6bf97..d4bf749 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,8 +12,6 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 cat > $TMPFILE.conf << ENDL
 [fs_types]
 ext4 = {
@@ -21,16 +22,14 @@ ext4 = {
         inode_ratio = 16384
 }
 ENDL
-MKE2FS_CONFIG=$TMPFILE.conf $MKE2FS -F -o Linux -b 1024 -O bigalloc -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
-rm -rf $TMPFILE.conf
+MKE2FS_CONFIG=$TMPFILE.conf $MKE2FS -F -o Linux -b 1024 -O bigalloc -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
+rm -f $TMPFILE.conf
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-echo "debugfs write files" >> $OUT
+echo "debugfs write files" >> $OUT.new
 make_file() {
        name="$1"
        start="$2"
@@ -144,18 +143,15 @@ sif /k size 9216000
 ENDL
 echo "ex /k" >> $TMPFILE.cmd2
 
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE > /dev/null 2>&1
-$DEBUGFS_EXE -f $TMPFILE.cmd2 $TMPFILE >> $OUT.new 2>&1
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new $TMPFILE.cmd $TMPFILE.cmd2
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE > /dev/null 2>&1
+$DEBUGFS -f $TMPFILE.cmd2 $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $TMPFILE.cmd2 $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -166,11 +162,7 @@ if [ "$status" = 0 ] ; then
 else
        echo "$test_name: $test_description: failed"
        diff $DIFF_OPTS $EXP $OUT > $test_name.failed
-       rm -f $test_name.tmp
 fi
+rm -f $EXP
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 8ce79ff..f588511 100644 (file)
@@ -18,7 +18,7 @@ debugfs: stat /a
 Inode: 12   Type: regular    Mode:  0666   Flags: 0x0
 Generation: 0    Version: 0x00000000:00000000
 User:     0   Group:     0   Project:     0   Size: 40960
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 82
 Fragment:  Address: 0    Number: 0    Size: 0
 Size of extra inode fields: 32
@@ -30,7 +30,7 @@ debugfs: stat /b
 Inode: 13   Type: regular    Mode:  0666   Flags: 0x0
 Generation: 0    Version: 0x00000000:00000000
 User:     0   Group:     0   Project:     0   Size: 10240000
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 20082
 Fragment:  Address: 0    Number: 0    Size: 0
 Size of extra inode fields: 32
index 9c48cbc..2ec319f 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,8 +12,6 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 cat > $TMPFILE.conf << ENDL
 [fs_types]
 ext4 = {
@@ -20,17 +21,14 @@ ext4 = {
         inode_ratio = 16384
 }
 ENDL
-MKE2FS_CONFIG=$TMPFILE.conf $MKE2FS -F -o Linux -b 1024 -O ^bigalloc -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
-rm -rf $TMPFILE.conf
+MKE2FS_CONFIG=$TMPFILE.conf $MKE2FS -F -o Linux -b 1024 -O ^bigalloc -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
+rm -f $TMPFILE.conf
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-echo "debugfs write files" >> $OUT
 
+echo "debugfs write files" >> $OUT.new
 #Files we create:
 # a: fallocate a 40k file
 # k: one big file
@@ -53,18 +51,14 @@ ENDL
 echo "stat /a" >> $TMPFILE.cmd2
 echo "stat /b" >> $TMPFILE.cmd2
 
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE > /dev/null 2>&1
-$DEBUGFS_EXE -f $TMPFILE.cmd2 $TMPFILE >> $OUT.new 2>&1
-sed -f $cmd_dir/filter.sed -e '/^.*time:.*$/d' < $OUT.new >> $OUT
-rm -rf $OUT.new $TMPFILE.cmd $TMPFILE.cmd2
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE > /dev/null 2>&1
+$DEBUGFS -f $TMPFILE.cmd2 $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed -e '/^.*time:.*$/d' $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $TMPFILE.cmd2 $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -79,7 +73,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index b685135..db9d522 100644 (file)
@@ -2,7 +2,7 @@
 Inode: 13   Type: regular    Mode:  0644   Flags: 0x10000000
 Generation: 3289262644    Version: 0x00000000:00000001
 User:     0   Group:     0   Size: 80
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
  ctime: 0x53cec6b4:c72e3c00 -- Tue Jul 22 20:16:52 2014
@@ -18,7 +18,7 @@ Size of inline data: 80
 Inode: 18   Type: regular    Mode:  0644   Flags: 0x10000000
 Generation: 3842229473    Version: 0x00000000:00000001
 User:     0   Group:     0   Size: 20
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
  ctime: 0x53cec6b4:cafecc00 -- Tue Jul 22 20:16:52 2014
@@ -35,7 +35,7 @@ Size of inline data: 60
 Inode: 16   Type: directory    Mode:  0755   Flags: 0x10000000
 Generation: 3842229469    Version: 0x00000000:00000004
 User:     0   Group:     0   Size: 132
-File ACL: 7    Directory ACL: 0
+File ACL: 7
 Links: 2   Blockcount: 8
 Fragment:  Address: 0    Number: 0    Size: 0
  ctime: 0x53cec6e3:27eac000 -- Tue Jul 22 20:17:39 2014
@@ -51,7 +51,7 @@ Size of inline data: 132
 Inode: 20   Type: directory    Mode:  0755   Flags: 0x10000000
 Generation: 3710818931    Version: 0x00000000:00000001
 User:     0   Group:     0   Size: 60
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 2   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
  ctime: 0x53cec6b4:ca0aa800 -- Tue Jul 22 20:16:52 2014
@@ -68,7 +68,7 @@ Size of inline data: 60
 Inode: 12   Type: symlink    Mode:  0777   Flags: 0x10000000
 Generation: 3289262643    Version: 0x00000000:00000001
 User:     0   Group:     0   Size: 80
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
  ctime: 0x53cec47f:724db800 -- Tue Jul 22 20:07:27 2014
@@ -83,7 +83,7 @@ Fast link dest: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 Inode: 19   Type: symlink    Mode:  0777   Flags: 0x0
 Generation: 3842229474    Version: 0x00000000:00000001
 User:     0   Group:     0   Size: 20
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
  ctime: 0x53cec44c:a1fcc000 -- Tue Jul 22 20:06:36 2014
index 7199453..3193f78 100644 (file)
@@ -1,6 +1,6 @@
 if ! test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-       exit 0
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
 fi
 
 OUT=$test_name.log
index 39727ba..ace3372 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 OUT=$test_name.log
 EXP=$test_dir/expect
@@ -7,47 +10,49 @@ VERIFY_FSCK_OPT=-yf
 TEST_DATA=$test_name.tmp
 VERIFY_DATA=$test_name.ver.tmp
 
-echo "debugfs load/dump test" > $OUT
+echo "debugfs load/dump test" > $OUT.new
 
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 
-echo "mke2fs -Fq -b 1024 test.img 512" >> $OUT
+echo "mke2fs -Fq -b 1024 test.img 512" >> $OUT.new
 
-$MKE2FS -Fq $TMPFILE 512 > /dev/null 2>&1
+$MKE2FS -Fq -b 1024 $TMPFILE 512 > /dev/null 2>&1
 status=$?
-echo Exit status is $status >> $OUT
+echo Exit status is $status >> $OUT.new
 
 dd if=$TEST_BITS of=$TEST_DATA bs=128k count=1 conv=sync > /dev/null 2>&1 
 echo "file fragment odd size" >> $TEST_DATA
 
-echo "debugfs -R ''write $TEST_DATA test_data'' -w test.img" > $OUT.new
+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 -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo e2fsck $VERIFY_FSCK_OPT -N test_filesys > $OUT.new
+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
 
-echo "debugfs -R ''dump test_data $VERIFY_DATA'' test.img" > $OUT.new
+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 -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "cmp $TEST_DATA $VERIFY_DATA" >> $OUT
-cmp $TEST_DATA $VERIFY_DATA >>$OUT
+echo "cmp $TEST_DATA $VERIFY_DATA" >> $OUT.new
+cmp $TEST_DATA $VERIFY_DATA >>$OUT.new
 status=$?
-echo Exit status is $status >> $OUT
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
 
 #
 # Do the verification
 #
 
-rm -f $VERIFY_DATA $TEST_DATA $TMPFILE $OUT.new
+if [ "$SKIP_UNLINK" != "true" ]; then
+       rm -f $VERIFY_DATA $TEST_DATA $TMPFILE $OUT.new
+else
+       echo "TMPFILE=$TMPFILE"
+fi
 cmp -s $OUT $EXP
 status=$?
 
@@ -60,7 +65,3 @@ else
 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 
index 2b39f8e..b13462b 100644 (file)
@@ -127,37 +127,37 @@ Level Entries       Logical      Physical Length Flags
  0/ 0   1/  2     0 -     0  9000 -  9000      1 Uninit
  0/ 0   2/  2  8999 -  8999 17999 - 17999      1 Uninit
 Pass 1: Checking inodes, blocks, and sizes
-Inode 15 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 15 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 16 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 16 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 17 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 17 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 18 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 18 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 19 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 19 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 20 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 20 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 21 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 21 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 22 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 22 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 23 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 23 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 24 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 24 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 25 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 25 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 26 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 26 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 27 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 27 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 28 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 28 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 29 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 29 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 30 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 30 extent tree (at level 1) could be shorter.  Optimize? yes
 
 Pass 1E: Optimizing extent trees
 Pass 2: Checking directory structure
index 7a77c69..e0eee76 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,8 +12,6 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 cat > $TMPFILE.conf << ENDL
 [fs_types]
 ext4 = {
@@ -20,16 +21,14 @@ ext4 = {
         inode_ratio = 16384
 }
 ENDL
-MKE2FS_CONFIG=$TMPFILE.conf $MKE2FS -F -o Linux -b 1024 -O ^bigalloc -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
-rm -rf $TMPFILE.conf
+MKE2FS_CONFIG=$TMPFILE.conf $MKE2FS -F -o Linux -b 1024 -O ^bigalloc -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
+rm -f $TMPFILE.conf
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-echo "debugfs write files" >> $OUT
+echo "debugfs write files" >> $OUT.new
 make_file() {
        name="$1"
        start="$2"
@@ -97,18 +96,14 @@ punch /f 1 8998
 ENDL
 echo "ex /f" >> $TMPFILE.cmd2
 
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE > /dev/null 2>&1
-$DEBUGFS_EXE -f $TMPFILE.cmd2 $TMPFILE >> $OUT.new 2>&1
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new $TMPFILE.cmd $TMPFILE.cmd2
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE > /dev/null 2>&1
+$DEBUGFS -f $TMPFILE.cmd2 $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $TMPFILE.cmd2 $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -123,7 +118,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 0138c3a..caeb3a6 100644 (file)
@@ -126,37 +126,37 @@ Level Entries       Logical      Physical Length Flags
  0/ 0   1/  2     0 -     0  9000 -  9000      1 Uninit
  0/ 0   2/  2  8999 -  8999 17999 - 17999      1 Uninit
 Pass 1: Checking inodes, blocks, and sizes
-Inode 14 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 14 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 15 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 15 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 16 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 16 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 17 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 17 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 18 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 18 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 19 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 19 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 20 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 20 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 22 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 22 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 23 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 23 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 24 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 24 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 25 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 25 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 26 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 26 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 27 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 27 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 28 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 28 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 29 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 29 extent tree (at level 1) could be shorter.  Optimize? yes
 
-Inode 30 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 30 extent tree (at level 1) could be shorter.  Optimize? yes
 
 Pass 1E: Optimizing extent trees
 Pass 2: Checking directory structure
index 6eb0571..73eee46 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,8 +12,6 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 cat > $TMPFILE.conf << ENDL
 [fs_types]
 ext4 = {
@@ -21,16 +22,14 @@ ext4 = {
         inode_ratio = 16384
 }
 ENDL
-MKE2FS_CONFIG=$TMPFILE.conf $MKE2FS -F -o Linux -b 1024 -O bigalloc -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
-rm -rf $TMPFILE.conf
+MKE2FS_CONFIG=$TMPFILE.conf $MKE2FS -F -o Linux -b 1024 -O bigalloc -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
+rm -f $TMPFILE.conf
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-echo "debugfs write files" >> $OUT
+echo "debugfs write files" >> $OUT.new
 make_file() {
        name="$1"
        start="$2"
@@ -98,18 +97,14 @@ punch /f 1 8998
 ENDL
 echo "ex /f" >> $TMPFILE.cmd2
 
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE > /dev/null 2>&1
-$DEBUGFS_EXE -f $TMPFILE.cmd2 $TMPFILE >> $OUT.new 2>&1
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new $TMPFILE.cmd $TMPFILE.cmd2
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE > /dev/null 2>&1
+$DEBUGFS -f $TMPFILE.cmd2 $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $TMPFILE.cmd2 $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -124,7 +119,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index f729b0f..c825932 100644 (file)
@@ -5,7 +5,7 @@ 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
+File ACL: 0
 Links: 1   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
@@ -17,7 +17,7 @@ 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
+File ACL: 0
 Links: 1   Blockcount: 2
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
@@ -42,7 +42,7 @@ 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
+File ACL: 0
 Links: 1   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
@@ -55,7 +55,7 @@ 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
+File ACL: 0
 Links: 1   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
@@ -67,7 +67,7 @@ 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
+File ACL: 0
 Links: 1   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
index 9bdff5d..c2a7fa0 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 OUT=$test_name.log
 EXP=$test_dir/expect
@@ -7,15 +10,15 @@ VERIFY_FSCK_OPT=-yf
 TEST_DATA=$test_name.tmp
 VERIFY_DATA=$test_name.ver.tmp
 
-echo "debugfs create special files" > $OUT
+echo "debugfs create special files" > $OUT.new
 
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 
-echo "mke2fs -Fq -b 1024 test.img 512" >> $OUT
+echo "mke2fs -Fq -b 1024 test.img 512" >> $OUT.new
 
-$MKE2FS -Fq $TMPFILE 512 > /dev/null 2>&1
+$MKE2FS -Fq -b 1024 -o linux $TMPFILE 512 > /dev/null 2>&1
 status=$?
-echo Exit status is $status >> $OUT
+echo Exit status is $status >> $OUT.new
 
 $DEBUGFS -w $TMPFILE << EOF > /dev/null 2>&1
 set_current_time 20130115140000
@@ -29,47 +32,41 @@ mknod sda b 8 0
 mknod null c 1 3
 EOF
 
-echo "debugfs -R ''stat foo'' -w test.img" > $OUT.new
+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
+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
+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
+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
+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
+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
+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
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
 
 #
 # Do the verification
@@ -88,7 +85,3 @@ else
 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 
index df2a530..07906c2 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 OUT=$test_name.log
 EXP=$test_dir/expect
@@ -7,122 +10,106 @@ VERIFY_FSCK_OPT=-yf
 TEST_DATA=$test_name.tmp
 VERIFY_DATA=$test_name.ver.tmp
 
-echo "debugfs edit extended attributes" > $OUT
+echo "debugfs edit extended attributes" > $OUT.new
 
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 
-echo "mke2fs -Fq -b 1024 test.img 512" >> $OUT
+echo "mke2fs -Fq -b 1024 test.img 512" >> $OUT.new
 
-$MKE2FS -Fq $TMPFILE 512 > /dev/null 2>&1
+$MKE2FS -Fq -b 1024 $TMPFILE 512 > /dev/null 2>&1
 status=$?
-echo Exit status is $status >> $OUT
+echo Exit status is $status >> $OUT.new
 
-echo "ea_set / user.joe smith" > $OUT.new
+echo "ea_set / user.joe smith" >> $OUT.new
 $DEBUGFS -w -R "ea_set / user.joe smith" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_set / user.moo FEE_FIE_FOE_FUMMMMMM" > $OUT.new
+echo "ea_set / user.moo FEE_FIE_FOE_FUMMMMMM" >> $OUT.new
 $DEBUGFS -w -R "ea_set / user.moo FEE_FIE_FOE_FUMMMMMM" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_list /" > $OUT.new
+echo "ea_list /" >> $OUT.new
 $DEBUGFS -w -R "ea_list /" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_get / user.moo" > $OUT.new
+echo "ea_get / user.moo" >> $OUT.new
 $DEBUGFS -w -R "ea_get / user.moo" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_get / nosuchea" > $OUT.new
+echo "ea_get / nosuchea" >> $OUT.new
 $DEBUGFS -w -R "ea_get / nosuchea" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_rm / user.moo" > $OUT.new
+echo "ea_rm / user.moo" >> $OUT.new
 $DEBUGFS -w -R "ea_rm / user.moo" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_rm / nosuchea" > $OUT.new
+echo "ea_rm / nosuchea" >> $OUT.new
 $DEBUGFS -w -R "ea_rm / nosuchea" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_list /" > $OUT.new
+echo "ea_list /" >> $OUT.new
 $DEBUGFS -w -R "ea_list /" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_get / user.moo" > $OUT.new
+echo "ea_get / user.moo" >> $OUT.new
 $DEBUGFS -w -R "ea_get / user.moo" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_rm / user.joe" > $OUT.new
+echo "ea_rm / user.joe" >> $OUT.new
 $DEBUGFS -w -R "ea_rm / user.joe" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_list /" > $OUT.new
+echo "ea_list /" >> $OUT.new
 $DEBUGFS -w -R "ea_list /" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
 echo "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567" > $TEST_DATA
-echo "ea_set -f $TEST_DATA / user.file_based_xattr" > $OUT.new
+echo "ea_set -f $TEST_DATA / user.file_based_xattr" >> $OUT.new
 $DEBUGFS -w -R "ea_set -f $TEST_DATA / user.file_based_xattr" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_list /" > $OUT.new
+echo "ea_list /" >> $OUT.new
 $DEBUGFS -w -R "ea_list /" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_get / user.file_based_xattr" > $OUT.new
+echo "ea_get / user.file_based_xattr" >> $OUT.new
 $DEBUGFS -w -R "ea_get / user.file_based_xattr" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_get -f $VERIFY_DATA / user.file_based_xattr" > $OUT.new
+echo "ea_get -f $VERIFY_DATA / user.file_based_xattr" >> $OUT.new
 $DEBUGFS -w -R "ea_get -f $VERIFY_DATA / user.file_based_xattr" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "Compare big attribute" > $OUT.new
+echo "Compare big attribute" >> $OUT.new
 diff -u $TEST_DATA $VERIFY_DATA >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo e2fsck $VERIFY_FSCK_OPT -N test_filesys > $OUT.new
+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
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
 
 #
 # Do the verification
 #
 
-rm -f $TMPFILE $OUT.new
+rm -f $TMPFILE $TEST_DATA $VERIFY_DATA $OUT.new
 cmp -s $OUT $EXP
 status=$?
 
@@ -135,7 +122,3 @@ else
 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
index 459a66a..8666115 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 OUT=$test_name.log
 EXP=$test_dir/expect
@@ -7,66 +10,59 @@ VERIFY_FSCK_OPT=-yf
 TEST_DATA=$test_name.tmp
 VERIFY_DATA=$test_name.ver.tmp
 
-echo "debugfs sort extended attributes" > $OUT
+echo "debugfs sort extended attributes" > $OUT.new
 
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 
-echo "mke2fs -Fq -b 1024 test.img 512" >> $OUT
+echo "mke2fs -Fq -b 1024 test.img 512" >> $OUT.new
 
-$MKE2FS -Fq $TMPFILE 512 > /dev/null 2>&1
+$MKE2FS -Fq -b 1024 $TMPFILE 512 > /dev/null 2>&1
 status=$?
-echo Exit status is $status >> $OUT
+echo Exit status is $status >> $OUT.new
 
 B=$(mktemp ${TMPDIR:-/tmp}/b.XXXXXX)
 
 perl -e 'print "x" x 256;' > $B
 
-echo "ea_set -f /tmp/b / security.SMEG64" > $OUT.new
+echo "ea_set -f /tmp/b / security.SMEG64" >> $OUT.new
 $DEBUGFS -w -R "ea_set -f $B / security.SMEG64" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_set -f /tmp/b / security.imb" > $OUT.new
+echo "ea_set -f /tmp/b / security.imb" >> $OUT.new
 $DEBUGFS -w -R "ea_set -f $B / security.imb" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_set / user.moo cow" > $OUT.new
+echo "ea_set / user.moo cow" >> $OUT.new
 $DEBUGFS -w -R "ea_set / user.moo cow" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
 rm -f $B
 unset B
 
-echo "ea_list /" > $OUT.new
+echo "ea_list /" >> $OUT.new
 $DEBUGFS -w -R "ea_list /" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_get / security.imb" > $OUT.new
+echo "ea_get / security.imb" >> $OUT.new
 $DEBUGFS -w -R "ea_get / security.imb" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_get / security.SMEG64" > $OUT.new
+echo "ea_get / security.SMEG64" >> $OUT.new
 $DEBUGFS -w -R "ea_get / security.SMEG64" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-echo "ea_get / nosuchea" > $OUT.new
+echo "ea_get / nosuchea" >> $OUT.new
 $DEBUGFS -w -R "ea_get / nosuchea" $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
+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
@@ -89,7 +85,3 @@ else
 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
index d745587..9843871 100644 (file)
@@ -1 +1 @@
-block relocation table using the memory array implementation
+block relocation table using memory array implementation
index 6efd72e..d19d277 100644 (file)
@@ -1 +1 @@
-inode relocation table using the memory array implementation
+inode relocation table using memory array implementation
index c5ea7bf..d1479ce 100644 (file)
@@ -2,12 +2,18 @@ Pass 1: Checking inodes, blocks, and sizes
 Inode 1 has EXTENTS_FL flag set on filesystem without extents support.
 Clear? yes
 
+Inode 9 has the casefold flag set but is not a directory.  Clear flag? yes
+
+Inode 14 has the casefold flag set but is not a directory.  Clear flag? yes
+
 Inode 14 has INLINE_DATA_FL flag on filesystem without inline data support.
 Clear? yes
 
 Inode 15 has INLINE_DATA_FL flag on filesystem without inline data support.
 Clear? yes
 
+Inode 16 has the casefold flag set but is not a directory.  Clear flag? yes
+
 Inode 16 has INLINE_DATA_FL flag on filesystem without inline data support.
 Clear? yes
 
diff --git a/tests/f_bad_encryption/expect.1 b/tests/f_bad_encryption/expect.1
new file mode 100644 (file)
index 0000000..d743e66
--- /dev/null
@@ -0,0 +1,125 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 17 has encrypt flag but no encryption extended attribute.
+Clear flag? yes
+
+Inode 18 has encrypt flag but no encryption extended attribute.
+Clear flag? yes
+
+Encrypted inode 19 has corrupt encryption extended attribute.
+Clear inode? yes
+
+Encrypted inode 20 has corrupt encryption extended attribute.
+Clear inode? yes
+
+Encrypted inode 21 has corrupt encryption extended attribute.
+Clear inode? yes
+
+Encrypted inode 22 has corrupt encryption extended attribute.
+Clear inode? yes
+
+Pass 2: Checking directory structure
+Encrypted entry 'd6M->'M-#I^VM-^KM-F~^WSJ+M-uM-zM-zXM-^' in /edir (12) references unencrypted inode 17.
+Clear? yes
+
+Encrypted entry '\M-!M-Y%DhM-OM-VM-zM-CM-gVM-R3M-^RM-IkE^JM-^S' in /edir (12) references unencrypted inode 18.
+Clear? yes
+
+Entry 'M-{^Qp-M-sM-U7eM-^C^L^PG^ZM-FM-,M-B' in /edir (12) has deleted/unused inode 19.  Clear? yes
+
+Entry 'M-f0M-f3/M-NM-GM-:M-^YM-jM-XM-91DM-^_M-V' in /edir (12) has deleted/unused inode 20.  Clear? yes
+
+Entry '^M-R"M-^K^P7M-'M-EM-C}^MM-yM-^LwM-^N^Z' in /edir (12) has deleted/unused inode 21.  Clear? yes
+
+Entry 'M-s^J_;uIvM-^Z[M-nIM-5vM-^AcM-o' in /edir (12) has deleted/unused inode 22.  Clear? yes
+
+Encrypted entry 'kK=,M-bM-^AM-{M-YM-^J6M-hM-y^XM-^W}M-M' in /edir (12) references unencrypted inode 23.
+Clear? yes
+
+Encrypted entry 'M-VM-cxM-jM-zM-b^WM-o*M-jM-uM-,R^PM-hM-2' in /edir (12) references unencrypted inode 24.
+Clear? yes
+
+Encrypted entry 'UqM-AM-#KM-^PM-_^kM-9P0M-^FM-_^@;A^J"R' in /edir (12) references unencrypted inode 25.
+Clear? yes
+
+Encrypted entry 'M-TM-N8^[M-3M-( M-[A^FR}^ZhkM-^?=M-c^Mo' in /edir (12) references inode 26, which has a different encryption policy.
+Clear? yes
+
+Encrypted entry 'M--aM-^?~M-^\M-u^FM-/!^YM-OZM-^LM-)M-p1' in /edir (12) references inode 27, which has a different encryption policy.
+Clear? yes
+
+Encrypted entry '(M-8RKM-LM-eM-^W^[M-'M-SM-@uM-^VM-|M-GiM-^JbM-nM-z' in /edir (12) references inode 28, which has a different encryption policy.
+Clear? yes
+
+Encrypted entry '\M-ggCeM-/?M-^BM-{(M-^OM-9M-^QQAM-^N=M-c^Mo' in /edir (12) references inode 29, which has a different encryption policy.
+Clear? yes
+
+Pass 3: Checking directory connectivity
+Unconnected directory inode 18 (/edir/???)
+Connect to /lost+found? yes
+
+Unconnected directory inode 24 (/edir/???)
+Connect to /lost+found? yes
+
+Unconnected directory inode 27 (/edir/???)
+Connect to /lost+found? yes
+
+Pass 4: Checking reference counts
+Unattached inode 17
+Connect to /lost+found? yes
+
+Inode 17 ref count is 2, should be 1.  Fix? yes
+
+Inode 18 ref count is 3, should be 2.  Fix? yes
+
+Unattached inode 23
+Connect to /lost+found? yes
+
+Inode 23 ref count is 2, should be 1.  Fix? yes
+
+Inode 24 ref count is 3, should be 2.  Fix? yes
+
+Unattached inode 25
+Connect to /lost+found? yes
+
+Inode 25 ref count is 2, should be 1.  Fix? yes
+
+Unattached inode 26
+Connect to /lost+found? yes
+
+Inode 26 ref count is 2, should be 1.  Fix? yes
+
+Inode 27 ref count is 3, should be 2.  Fix? yes
+
+Unattached inode 28
+Connect to /lost+found? yes
+
+Inode 28 ref count is 2, should be 1.  Fix? yes
+
+Unattached inode 29
+Connect to /lost+found? yes
+
+Inode 29 ref count is 2, should be 1.  Fix? yes
+
+Pass 5: Checking group summary information
+Block bitmap differences:  -(25--32)
+Fix? yes
+
+Free blocks count wrong for group #0 (75, counted=83).
+Fix? yes
+
+Free blocks count wrong (75, counted=83).
+Fix? yes
+
+Inode bitmap differences:  -(19--22)
+Fix? yes
+
+Free inodes count wrong for group #0 (95, counted=99).
+Fix? yes
+
+Free inodes count wrong (95, counted=99).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 29/128 files (0.0% non-contiguous), 45/128 blocks
+Exit status is 1
diff --git a/tests/f_bad_encryption/expect.2 b/tests/f_bad_encryption/expect.2
new file mode 100644 (file)
index 0000000..fcfabdb
--- /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: 29/128 files (0.0% non-contiguous), 45/128 blocks
+Exit status is 0
diff --git a/tests/f_bad_encryption/image.gz b/tests/f_bad_encryption/image.gz
new file mode 100644 (file)
index 0000000..64b59b7
Binary files /dev/null and b/tests/f_bad_encryption/image.gz differ
diff --git a/tests/f_bad_encryption/mkimage.sh b/tests/f_bad_encryption/mkimage.sh
new file mode 100755 (executable)
index 0000000..e58395d
--- /dev/null
@@ -0,0 +1,169 @@
+#!/bin/bash
+#
+# This is the script that was used to create the image.gz in this directory.
+#
+# This requires a patched version of debugfs that understands the "fscrypt."
+# xattr name prefix, so that the encryption xattrs can be manipulated.
+
+set -e -u
+umask 0022
+
+do_debugfs() {
+       umount mnt
+       debugfs -w "$@" image
+       mount image mnt
+}
+
+create_encrypted_file() {
+       local file=$1
+       local ino
+
+       echo foo > "$file"
+
+       # not needed, but makes image more compressible
+       ino=$(stat -c %i "$file")
+       do_debugfs -R "zap_block -f <$ino> 0"
+}
+
+set_encryption_xattr() {
+       local file=$1
+       local value=$2
+       local ino
+
+       ino=$(stat -c %i "$file")
+       do_debugfs -R "ea_set <$ino> fscrypt.c $value"
+}
+
+rm_encryption_xattr() {
+       local file=$1
+       local ino
+
+       ino=$(stat -c %i "$file")
+       do_debugfs -R "ea_rm <$ino> fscrypt.c"
+}
+
+clear_encrypt_flag() {
+       local file=$1
+       local ino
+
+       ino=$(stat -c %i "$file")
+       do_debugfs -R "set_inode_field <$ino> flags 0"
+}
+
+clear_encryption() {
+       local file=$1
+       local ino
+       local is_symlink=false
+
+       if [ -L "$file" ]; then
+               is_symlink=true
+       fi
+       ino=$(stat -c %i "$file")
+
+       do_debugfs -R "ea_rm <$ino> fscrypt.c"
+       do_debugfs -R "set_inode_field <$ino> flags 0"
+       if $is_symlink; then
+               do_debugfs -R "set_inode_field <$ino> block[0] 0xAAAAAAAA"
+               do_debugfs -R "set_inode_field <$ino> block[1] 0"
+               do_debugfs -R "set_inode_field <$ino> size 4"
+       fi
+}
+
+mkdir -p mnt
+umount mnt &> /dev/null || true
+
+dd if=/dev/zero of=image bs=4096 count=128
+mke2fs -O encrypt -b 4096 -N 128 image
+mount image mnt
+
+# Create an encrypted directory (ino 12)
+dir=mnt/edir
+mkdir $dir
+echo password | e4crypt add_key $dir
+
+# Control cases: valid encrypted regular file, dir, and symlink (ino 13-15)
+create_encrypted_file $dir/encrypted_file
+mkdir $dir/encrypted_dir
+ln -s target $dir/encrypted_symlink
+
+# Control case: file type that is never encrypted (ino 16)
+mkfifo $dir/fifo
+
+# Inodes with missing encryption xattr (ino 17-18).
+# e2fsck should offer to clear the encrypt flag on these inodes.
+
+create_encrypted_file $dir/missing_xattr_file
+rm_encryption_xattr $dir/missing_xattr_file
+
+mkdir $dir/missing_xattr_dir
+rm_encryption_xattr $dir/missing_xattr_dir
+
+# Inodes with corrupt encryption xattr (ino 19-22).
+# e2fsck should offer to clear these inodes.
+
+create_encrypted_file $dir/corrupt_xattr_1
+set_encryption_xattr $dir/corrupt_xattr_1 '\0'
+
+create_encrypted_file $dir/corrupt_xattr_2
+set_encryption_xattr $dir/corrupt_xattr_2 \
+       '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'
+
+create_encrypted_file $dir/corrupt_xattr_3
+set_encryption_xattr $dir/corrupt_xattr_3 '\1'
+
+create_encrypted_file $dir/corrupt_xattr_4
+set_encryption_xattr $dir/corrupt_xattr_4 '\2'
+
+# Unencrypted inodes in encrypted directory (ino 23-25).
+# e2fsck should offer to clear these directory entries.
+
+create_encrypted_file $dir/unencrypted_file
+clear_encryption $dir/unencrypted_file
+
+mkdir $dir/unencrypted_dir
+clear_encryption $dir/unencrypted_dir
+
+ln -s target $dir/unencrypted_symlink
+clear_encryption $dir/unencrypted_symlink
+
+# Inodes with different encryption policy in encrypted directory (ino 26-29).
+# e2fsck should offer to clear these directory entries.
+
+xattr='\1\1\4\0AAAAAAAABBBBBBBBBBBBBBBB'
+
+create_encrypted_file $dir/inconsistent_file_1
+set_encryption_xattr $dir/inconsistent_file_1 $xattr
+
+mkdir $dir/inconsistent_dir
+set_encryption_xattr $dir/inconsistent_dir $xattr
+
+ln -s target $dir/inconsistent_symlink
+set_encryption_xattr $dir/inconsistent_symlink $xattr
+
+xattr='\2\1\4\0\0\0\0\0AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB'
+create_encrypted_file $dir/inconsistent_file_2
+set_encryption_xattr $dir/inconsistent_file_2 $xattr
+
+# Encrypted file and directory with valid v2 encryption policy (ino 30-31).
+# e2fsck shouldn't change these.
+dir2=mnt/edir2
+mkdir $dir2
+echo password | e4crypt add_key $dir2
+xattr='\2\1\4\0\0\0\0\0AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB'
+create_encrypted_file $dir2/file
+set_encryption_xattr $dir2/file $xattr
+set_encryption_xattr $dir2 $xattr
+
+# Encrypted file and directory with unrecognized encryption policy version
+# (ino 32-33).  e2fsck shouldn't change these.
+dir3=mnt/edir3
+mkdir $dir3
+echo password | e4crypt add_key $dir3
+xattr='\3'
+create_encrypted_file $dir3/file
+set_encryption_xattr $dir3/file $xattr
+set_encryption_xattr $dir3 $xattr
+
+umount mnt
+rmdir mnt
+gzip -9 -f image
diff --git a/tests/f_bad_encryption/name b/tests/f_bad_encryption/name
new file mode 100644 (file)
index 0000000..85b19ed
--- /dev/null
@@ -0,0 +1 @@
+missing, corrupt, and inconsistent encryption policies
diff --git a/tests/f_bad_fname/expect.1 b/tests/f_bad_fname/expect.1
new file mode 100644 (file)
index 0000000..66f87df
--- /dev/null
@@ -0,0 +1,22 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Entry 'AM-^?' in /ci_dir (12) has illegal UTF-8 characters in its name.
+Fix? yes
+
+Entry 'AM-~' in /ci_dir (12) has illegal UTF-8 characters in its name.
+Fix? yes
+
+Duplicate entry 'A.' found.
+       Marking /ci_dir (12) to be rebuilt.
+
+Pass 3: Checking directory connectivity
+Pass 3A: Optimizing directories
+Entry 'A.' in /ci_dir (12) has a non-unique filename.
+Rename to A.~0? yes
+
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 14/16 files (0.0% non-contiguous), 22/100 blocks
+Exit status is 1
diff --git a/tests/f_bad_fname/expect.2 b/tests/f_bad_fname/expect.2
new file mode 100644 (file)
index 0000000..13de1c0
--- /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: 14/16 files (0.0% non-contiguous), 22/100 blocks
+Exit status is 0
diff --git a/tests/f_bad_fname/image.gz b/tests/f_bad_fname/image.gz
new file mode 100644 (file)
index 0000000..a8b3fc6
Binary files /dev/null and b/tests/f_bad_fname/image.gz differ
diff --git a/tests/f_bad_fname/name b/tests/f_bad_fname/name
new file mode 100644 (file)
index 0000000..675165a
--- /dev/null
@@ -0,0 +1 @@
+Case-insensitive directory with broken file names
similarity index 99%
rename from tests/f_badjour_indblks/image
rename to tests/f_bad_local_jnl/image
index adbd1d7..6f2b550 100644 (file)
Binary files a/tests/f_badjour_indblks/image and b/tests/f_bad_local_jnl/image differ
index 65a1641..b44e65d 100644 (file)
@@ -13,8 +13,6 @@ Inode 17 logical block 0 (physical block 1186) violates cluster allocation rules
 Will fix in pass 1B.
 Inode 17 logical block 2 (physical block 1184) violates cluster allocation rules.
 Will fix in pass 1B.
-Inode 17, i_blocks is 32, should be 64.  Fix? yes
-
 Inode 18 logical block 3 (physical block 1201) violates cluster allocation rules.
 Will fix in pass 1B.
 Inode 18, i_blocks is 32, should be 64.  Fix? yes
@@ -86,8 +84,6 @@ Inode 12, i_blocks is 64, should be 32.  Fix? yes
 
 Inode 16, i_blocks is 64, should be 32.  Fix? yes
 
-Inode 17, i_blocks is 64, should be 32.  Fix? yes
-
 Inode 18, i_blocks is 64, should be 32.  Fix? yes
 
 Pass 2: Checking directory structure
@@ -116,7 +112,7 @@ debugfs: stat /a
 Inode: 12   Type: regular    Mode:  0644   Flags: 0x80000
 Generation: 1117152157    Version: 0x00000001
 User:     0   Group:     0   Size: 3072
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 32
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x539ff5b2 -- Tue Jun 17 08:00:50 2014
@@ -128,7 +124,7 @@ debugfs: stat /b
 Inode: 13   Type: regular    Mode:  0644   Flags: 0x80000
 Generation: 1117152158    Version: 0x00000001
 User:     0   Group:     0   Size: 3072
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 32
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x539ff5b2 -- Tue Jun 17 08:00:50 2014
@@ -140,7 +136,7 @@ debugfs: stat /c
 Inode: 14   Type: regular    Mode:  0644   Flags: 0x80000
 Generation: 1117152159    Version: 0x00000001
 User:     0   Group:     0   Size: 3072
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 32
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x539ff5b2 -- Tue Jun 17 08:00:50 2014
@@ -152,7 +148,7 @@ debugfs: stat /d
 Inode: 15   Type: regular    Mode:  0644   Flags: 0x80000
 Generation: 1117152160    Version: 0x00000001
 User:     0   Group:     0   Size: 3072
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x539ff5b2 -- Tue Jun 17 08:00:50 2014
@@ -163,7 +159,7 @@ debugfs: stat /e
 Inode: 16   Type: regular    Mode:  0644   Flags: 0x80000
 Generation: 1117152161    Version: 0x00000001
 User:     0   Group:     0   Size: 6144
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 32
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x539ff5b2 -- Tue Jun 17 08:00:50 2014
@@ -175,7 +171,7 @@ debugfs: stat /f
 Inode: 17   Type: regular    Mode:  0644   Flags: 0x80000
 Generation: 1117152162    Version: 0x00000001
 User:     0   Group:     0   Size: 3072
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 32
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x539ff5b2 -- Tue Jun 17 08:00:50 2014
@@ -187,7 +183,7 @@ debugfs: stat /g
 Inode: 18   Type: regular    Mode:  0644   Flags: 0x80000
 Generation: 1117152163    Version: 0x00000001
 User:     0   Group:     0   Size: 3072
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 32
 Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x539ff5b2 -- Tue Jun 17 08:00:50 2014
index ea9e488..6c9e1cf 100644 (file)
@@ -1,27 +1,29 @@
-if test -x $DEBUGFS_EXE; then
-       IMAGE=$test_dir/../f_badcluster/image.gz
-       OUT=$test_name.log
-       EXP=$test_dir/expect
-       gzip -d < $IMAGE > $TMPFILE
-       $FSCK -fy $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed > $OUT
-       $FSCK -fy $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-       $FSCK -fy $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-       for i in a b c d e f g; do echo "stat /$i"; done > $TMPFILE.tmp
-       echo "quit" >> $TMPFILE.tmp
-       $DEBUGFS_EXE -f $TMPFILE.tmp $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-       rm -f $TMPFILE.tmp
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
+
+IMAGE=$test_dir/../f_badcluster/image.gz
+OUT=$test_name.log
+EXP=$test_dir/expect
+gzip -d < $IMAGE > $TMPFILE
+$FSCK -fy $TMPFILE > $OUT.new 2>&1
+$FSCK -fy $TMPFILE >> $OUT.new 2>&1
+$FSCK -fy $TMPFILE >> $OUT.new 2>&1
+for i in a b c d e f g; do echo "stat /$i"; done > $TMPFILE.cmd
+echo "quit" >> $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
-       cmp -s $OUT $EXP
-       status=$?
+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
-               rm -f $test_name.tmp
-       fi
+if [ "$status" = 0 ]; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
 else
-       echo "$test_name: skipped"
+       echo "$test_name: $test_description: failed"
+       diff $DIFF_OPTS $EXP $OUT > $test_name.failed
+       rm -f $test_name.tmp
 fi
diff --git a/tests/f_badsymlinks2/expect.1 b/tests/f_badsymlinks2/expect.1
new file mode 100644 (file)
index 0000000..939edce
--- /dev/null
@@ -0,0 +1,114 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Symlink /default/empty (inode #13) is invalid.
+Clear? yes
+
+Symlink /default/fast_isize_too_small (inode #15) is invalid.
+Clear? yes
+
+Symlink /default/fast_isize_too_large (inode #16) is invalid.
+Clear? yes
+
+Symlink /default/slow_isize_too_small (inode #19) is invalid.
+Clear? yes
+
+Symlink /default/slow_isize_too_large (inode #20) is invalid.
+Clear? yes
+
+Symlink /default/one_too_long (inode #22) is invalid.
+Clear? yes
+
+Symlink /default/too_long (inode #23) is invalid.
+Clear? yes
+
+Symlink /encrypted/empty (inode #25) is invalid.
+Clear? yes
+
+Symlink /encrypted/fast_isize_too_large (inode #28) is invalid.
+Clear? yes
+
+Symlink /encrypted/fast_isize_too_small (inode #27) is invalid.
+Clear? yes
+
+Symlink /encrypted/one_too_long (inode #34) is invalid.
+Clear? yes
+
+Symlink /encrypted/slow_isize_too_large (inode #32) is invalid.
+Clear? yes
+
+Symlink /encrypted/slow_isize_too_small (inode #31) is invalid.
+Clear? yes
+
+Symlink /encrypted/too_long (inode #35) is invalid.
+Clear? yes
+
+Symlink /extents/empty (inode #38) is invalid.
+Clear? yes
+
+Symlink /extents/fast_isize_too_small (inode #40) is invalid.
+Clear? yes
+
+Symlink /extents/fast_isize_too_large (inode #41) is invalid.
+Clear? yes
+
+Symlink /extents/slow_isize_too_small (inode #44) is invalid.
+Clear? yes
+
+Symlink /extents/slow_isize_too_large (inode #45) is invalid.
+Clear? yes
+
+Symlink /extents/one_too_long (inode #47) is invalid.
+Clear? yes
+
+Symlink /extents/too_long (inode #48) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/empty (inode #50) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/fast_isize_too_large (inode #53) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/fast_isize_too_small (inode #52) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/one_too_long (inode #59) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/slow_isize_too_large (inode #57) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/slow_isize_too_small (inode #56) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/too_long (inode #60) is invalid.
+Clear? yes
+
+Symlink /inline_data/empty (inode #63) is invalid.
+Clear? yes
+
+Symlink /inline_data/fast_isize_too_small (inode #65) is invalid.
+Clear? yes
+
+Symlink /inline_data/fast_isize_too_large (inode #66) is invalid.
+Clear? yes
+
+Symlink /inline_data/slow_isize_too_small (inode #69) is invalid.
+Clear? yes
+
+Symlink /inline_data/slow_isize_too_large (inode #70) is invalid.
+Clear? yes
+
+Symlink /inline_data/one_too_long (inode #72) is invalid.
+Clear? yes
+
+Symlink /inline_data/too_long (inode #73) 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: 36/80 files (0.0% non-contiguous), 31/150 blocks
+Exit status is 1
diff --git a/tests/f_badsymlinks2/expect.2 b/tests/f_badsymlinks2/expect.2
new file mode 100644 (file)
index 0000000..3da98a8
--- /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: 36/80 files (0.0% non-contiguous), 31/150 blocks
+Exit status is 0
diff --git a/tests/f_badsymlinks2/image.gz b/tests/f_badsymlinks2/image.gz
new file mode 100644 (file)
index 0000000..d1f314c
Binary files /dev/null and b/tests/f_badsymlinks2/image.gz differ
diff --git a/tests/f_badsymlinks2/mkimage.sh b/tests/f_badsymlinks2/mkimage.sh
new file mode 100755 (executable)
index 0000000..6bbf020
--- /dev/null
@@ -0,0 +1,127 @@
+#!/bin/bash
+
+# This is the script that was used to create the image.gz in this directory.
+
+set -e -u
+
+BLOCKSIZE=4096
+
+do_debugfs() {
+       umount mnt
+       debugfs -w "$@" image
+       mount image mnt
+}
+
+do_tune2fs() {
+       umount mnt
+       tune2fs $@ image
+       mount image mnt
+}
+
+symlink() {
+       local len=$1
+       local src=$2
+       local target=$(perl -e 'print "A" x '$len)
+       ln -s $target $src
+       stat -c %i $src
+}
+
+# Overwrite the length in the header of the encrypted symlink target
+set_encrypted_symlink_len() {
+       local ino=$1
+       local len=$2
+
+       echo "zap_block -f <$ino> -p $((len%256)) -o 0 -l 1 0"
+       echo "zap_block -f <$ino> -p $((len/256)) -o 1 -l 1 0"
+}
+
+create_symlinks() {
+       local dir=$1
+       local encrypted=${2:-false}
+       local overhead=0
+       local ino
+
+       if $encrypted; then
+               overhead=2
+       fi
+
+       mkdir -p $dir
+
+       {
+       ino=$(symlink 1 $dir/empty)
+       echo "set_inode_field <$ino> i_size 10"
+       echo "set_inode_field <$ino> block[0] 0"
+
+       symlink 1 $dir/fast_min > /dev/null
+
+       ino=$(symlink 10 $dir/fast_isize_too_small)
+       echo "set_inode_field <$ino> i_size 1"
+
+       ino=$(symlink 10 $dir/fast_isize_too_large)
+       echo "set_inode_field <$ino> i_size 20"
+
+       symlink $((59 - overhead)) $dir/fast_max > /dev/null
+
+       symlink $((60 - overhead)) $dir/slow_min > /dev/null
+
+       ino=$(symlink 100 $dir/slow_isize_too_small)
+       echo "set_inode_field <$ino> i_size 80"
+
+       ino=$(symlink 100 $dir/slow_isize_too_large)
+       echo "set_inode_field <$ino> i_size 120"
+
+       symlink $((BLOCKSIZE - 1 - overhead)) $dir/slow_max > /dev/null
+
+       ino=$(symlink $((BLOCKSIZE - 1 - overhead)) $dir/one_too_long)
+       echo "set_inode_field <$ino> i_size $BLOCKSIZE"
+       echo "zap_block -f <$ino> -p 65 0"
+       if $encrypted; then
+               set_encrypted_symlink_len $ino $((BLOCKSIZE - overhead))
+       fi
+
+       ino=$(symlink $((BLOCKSIZE - 1 - overhead)) $dir/too_long)
+       echo "set_inode_field <$ino> i_size $((BLOCKSIZE + 1000))"
+       echo "zap_block -f <$ino> -p 65 0"
+       if $encrypted; then
+               set_encrypted_symlink_len $ino $((BLOCKSIZE + 1000 - overhead))
+       fi
+
+       } >> debugfs_commands
+       do_debugfs < debugfs_commands
+}
+
+create_encrypted_symlinks() {
+       local dir=$1 link
+
+       mkdir $dir
+       echo | e4crypt add_key $dir
+       create_symlinks $dir true
+
+       # Move symlinks into an unencrypted directory (leaving their targets
+       # encrypted).  This makes the fsck output consistent.
+       mv $dir ${dir}~encrypted
+       mkdir $dir
+       mv ${dir}~encrypted/* $dir
+}
+
+mkdir -p mnt
+umount mnt &> /dev/null || true
+dd if=/dev/zero of=image bs=1024 count=600
+
+mke2fs -O 'encrypt,^extents,^64bit' -b $BLOCKSIZE -I 256 image
+mount image mnt
+
+create_symlinks mnt/default
+create_encrypted_symlinks mnt/encrypted
+
+do_tune2fs -O extents
+create_symlinks mnt/extents
+create_encrypted_symlinks mnt/extents_encrypted
+
+do_debugfs -R 'feature inline_data'
+create_symlinks mnt/inline_data
+
+rm -rf debugfs_commands mnt/*~encrypted
+umount mnt
+rmdir mnt
+gzip -9 -f image
diff --git a/tests/f_badsymlinks2/name b/tests/f_badsymlinks2/name
new file mode 100644 (file)
index 0000000..81d3285
--- /dev/null
@@ -0,0 +1 @@
+more types of corrupted symlinks
index 1d719e5..1bd697e 100644 (file)
@@ -1,6 +1,8 @@
 Pass 1: Checking inodes, blocks, and sizes
 Bad block list says the bad block list inode is bad.  Clear inode? yes
 
+Restarting e2fsck from the beginning...
+Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
diff --git a/tests/f_bigalloc_badinode/expect.1 b/tests/f_bigalloc_badinode/expect.1
new file mode 100644 (file)
index 0000000..10ba096
--- /dev/null
@@ -0,0 +1,12 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Symlink /testfile (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/64 files (0.0% non-contiguous), 96/1024 blocks
+Exit status is 1
diff --git a/tests/f_bigalloc_badinode/expect.2 b/tests/f_bigalloc_badinode/expect.2
new file mode 100644 (file)
index 0000000..30392d4
--- /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/64 files (0.0% non-contiguous), 96/1024 blocks
+Exit status is 0
diff --git a/tests/f_bigalloc_badinode/name b/tests/f_bigalloc_badinode/name
new file mode 100644 (file)
index 0000000..e1ed216
--- /dev/null
@@ -0,0 +1 @@
+delete bad inode handling for bigalloc filesystems
diff --git a/tests/f_bigalloc_badinode/script b/tests/f_bigalloc_badinode/script
new file mode 100644 (file)
index 0000000..c1dd454
--- /dev/null
@@ -0,0 +1,23 @@
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
+
+SKIP_GUNZIP="true"
+TEST_DATA="$test_name.tmp"
+
+dd if=$TEST_BITS of=$TEST_DATA bs=4k count=2 seek=1> /dev/null 2>&1
+
+touch $TMPFILE
+$MKE2FS -Fq -t ext4 -O bigalloc -C 16384 $TMPFILE 1M > /dev/null 2>&1
+$DEBUGFS -w $TMPFILE << EOF > /dev/null 2>&1
+write $TEST_DATA testfile
+set_inode_field testfile i_mode 0120000
+quit
+EOF
+
+. $cmd_dir/run_e2fsck
+
+rm -f $TEST_DATA
+
+unset E2FSCK_TIME TEST_DATA
diff --git a/tests/f_bigalloc_orphan_list/expect.1 b/tests/f_bigalloc_orphan_list/expect.1
new file mode 100644 (file)
index 0000000..622620d
--- /dev/null
@@ -0,0 +1,10 @@
+Clearing orphaned inode 12 (uid=0, gid=0, mode=0100644, size=28672)
+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: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 11/64 files (0.0% non-contiguous), 96/1024 blocks
+Exit status is 0
diff --git a/tests/f_bigalloc_orphan_list/expect.2 b/tests/f_bigalloc_orphan_list/expect.2
new file mode 100644 (file)
index 0000000..30392d4
--- /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/64 files (0.0% non-contiguous), 96/1024 blocks
+Exit status is 0
diff --git a/tests/f_bigalloc_orphan_list/name b/tests/f_bigalloc_orphan_list/name
new file mode 100644 (file)
index 0000000..5d9566f
--- /dev/null
@@ -0,0 +1 @@
+orphaned list handling with bigalloc file systems
diff --git a/tests/f_bigalloc_orphan_list/script b/tests/f_bigalloc_orphan_list/script
new file mode 100644 (file)
index 0000000..b48d5c0
--- /dev/null
@@ -0,0 +1,28 @@
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
+
+SKIP_GUNZIP="true"
+TEST_DATA="$test_name.tmp"
+
+dd if=$TEST_BITS of=$TEST_DATA bs=28k count=1 > /dev/null 2>&1
+
+touch $TMPFILE
+$MKE2FS -Fq -t ext4 -O bigalloc $TMPFILE 1M > /dev/null 2>&1
+$DEBUGFS -w $TMPFILE << EOF > /dev/null 2>&1
+write $TEST_DATA testfile
+set_inode_field testfile links_count 0
+set_inode_field testfile mode 0100644
+set_inode_field testfile bmap[0] 0
+set_inode_field testfile bmap[2] 0
+set_super_value last_orphan 12
+unlink testfile
+quit
+EOF
+
+. $cmd_dir/run_e2fsck
+
+rm -f $TEST_DATA
+
+unset E2FSCK_TIME TEST_DATA
diff --git a/tests/f_bigalloc_symlink_with_xattr/expect.1 b/tests/f_bigalloc_symlink_with_xattr/expect.1
new file mode 100644 (file)
index 0000000..0e6c199
--- /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), 112/128 blocks
+Exit status is 0
diff --git a/tests/f_bigalloc_symlink_with_xattr/image.gz b/tests/f_bigalloc_symlink_with_xattr/image.gz
new file mode 100644 (file)
index 0000000..cbd125d
Binary files /dev/null and b/tests/f_bigalloc_symlink_with_xattr/image.gz differ
diff --git a/tests/f_bigalloc_symlink_with_xattr/name b/tests/f_bigalloc_symlink_with_xattr/name
new file mode 100644 (file)
index 0000000..8adbd9a
--- /dev/null
@@ -0,0 +1 @@
+fast symlink + xattr block on bigalloc fs
diff --git a/tests/f_bigalloc_symlink_with_xattr/script b/tests/f_bigalloc_symlink_with_xattr/script
new file mode 100644 (file)
index 0000000..8ab2b9c
--- /dev/null
@@ -0,0 +1,2 @@
+ONE_PASS_ONLY="true"
+. $cmd_dir/run_e2fsck
index 715984d..2e91113 100644 (file)
@@ -11,6 +11,8 @@ Fix? yes
 Inode bitmap differences:  +11 -15
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/32 files (9.1% non-contiguous), 22/100 blocks
index 192d279..7d71be5 100644 (file)
@@ -1 +1 @@
-infinite loop due to off by one error when finding free space for inode table relocation
+infinite loop when finding table free space
index fbbce62..7a07265 100755 (executable)
@@ -9,7 +9,6 @@ bzip2 -d < $IMAGE > $TMPFILE
 # Run fsck to fix things?
 EXP1=$test_dir/expect.1
 OUT1=$test_name.1.log
-rm -rf $test_name.failed $test_name.ok
 
 $FSCK $FSCK_OPT $TMPFILE 2>&1 | head -n 1000 | tail -n +2 > $OUT1
 echo "Exit status is $?" >> $OUT1
index e2eb65e..a62e99d 100644 (file)
@@ -3,7 +3,7 @@ Level Entries       Logical      Physical Length Flags
  0/ 1   1/  1     0 -     0     9              1
  1/ 1   1/  1     0 -     0    10 -    10      1 
 Pass 1: Checking inodes, blocks, and sizes
-Inode 12 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 12 extent tree (at level 1) could be shorter.  Optimize? yes
 
 Pass 1E: Optimizing extent trees
 Pass 2: Checking directory structure
@@ -13,4 +13,4 @@ Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 12/128 files (0.0% non-contiguous), 19/512 blocks
-Exit status is 1
+Exit status is 0
index ee18438..daea6a8 100644 (file)
@@ -43,17 +43,15 @@ if [ "$SKIP_GUNZIP" != "true" ] ; then
        gunzip < $IMAGE > $TMPFILE
 fi
 
-cp /dev/null $OUT1
-
 eval $PREP_CMD
 
 echo 'ex /a' > $TMPFILE.cmd
 $DEBUGFS -f $TMPFILE.cmd $TMPFILE > $OUT1.new 2>&1
-rm -rf $TMPFILE.cmd
+rm -f $TMPFILE.cmd
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT1.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT1.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT1.new >> $OUT1
+sed -f $cmd_dir/filter.sed $OUT1.new > $OUT1
 rm -f $OUT1.new
 
 if [ "$ONE_PASS_ONLY" != "true" ]; then
@@ -62,9 +60,8 @@ if [ "$ONE_PASS_ONLY" != "true" ]; then
        echo Exit status is $status >> $OUT2.new
        echo 'ex /a' > $TMPFILE.cmd
        $DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT2.new 2>&1
-       rm -rf $TMPFILE.cmd
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT2.new > $OUT2
-       rm -f $OUT2.new
+       sed -f $cmd_dir/filter.sed $OUT2.new > $OUT2
+       rm -f $TMPFILE.cmd $OUT2.new
 fi
 
 eval $AFTER_CMD
index a359c99..241faa3 100644 (file)
@@ -10,7 +10,7 @@ Level Entries       Logical      Physical Length Flags
  1/ 1   2/  3    19 -    19   104 -   104      1 
  1/ 1   3/  3    21 -    21   105 -   105      1 
 Pass 1: Checking inodes, blocks, and sizes
-Inode 12 extent tree (at level 1) could be narrower.  Fix? yes
+Inode 12 extent tree (at level 1) could be narrower.  Optimize? yes
 
 Pass 1E: Optimizing extent trees
 Pass 2: Checking directory structure
@@ -20,4 +20,4 @@ Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 12/128 files (8.3% non-contiguous), 26/512 blocks
-Exit status is 1
+Exit status is 0
index ee18438..c5ffa22 100644 (file)
@@ -49,11 +49,11 @@ eval $PREP_CMD
 
 echo 'ex /a' > $TMPFILE.cmd
 $DEBUGFS -f $TMPFILE.cmd $TMPFILE > $OUT1.new 2>&1
-rm -rf $TMPFILE.cmd
+rm -f $TMPFILE.cmd
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT1.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT1.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT1.new >> $OUT1
+sed -f $cmd_dir/filter.sed $OUT1.new > $OUT1
 rm -f $OUT1.new
 
 if [ "$ONE_PASS_ONLY" != "true" ]; then
@@ -62,9 +62,8 @@ if [ "$ONE_PASS_ONLY" != "true" ]; then
        echo Exit status is $status >> $OUT2.new
        echo 'ex /a' > $TMPFILE.cmd
        $DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT2.new 2>&1
-       rm -rf $TMPFILE.cmd
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT2.new > $OUT2
-       rm -f $OUT2.new
+       sed -f $cmd_dir/filter.sed $OUT2.new > $OUT2
+       rm -f $TMPFILE.cmd $OUT2.new
 fi
 
 eval $AFTER_CMD
index 7d2ca86..716dbcb 100644 (file)
@@ -2,7 +2,7 @@ debugfs: stat /a
 Inode: 12   Type: regular    Mode:  0644   Flags: 0x0
 Generation: 1573716129    Version: 0x00000000:00000001
 User:     0   Group:     0   Size: 524288
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 1030
 Fragment:  Address: 0    Number: 0    Size: 0
  ctime: 0x5457f87a:62ae2980 -- Mon Nov  3 21:49:46 2014
@@ -23,4 +23,4 @@ Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 12/128 files (8.3% non-contiguous), 570/2048 blocks
-Exit status is 1
+Exit status is 0
index f6b6f62..960a2f8 100644 (file)
@@ -49,22 +49,20 @@ eval $PREP_CMD
 
 echo 'stat /a' > $TMPFILE.cmd
 $DEBUGFS -f $TMPFILE.cmd $TMPFILE > $OUT1.new 2>&1
-rm -rf $TMPFILE.cmd
+rm -f $TMPFILE.cmd
 $TUNE2FS -O extent $TMPFILE >> $OUT1.new 2>&1
 $FSCK $FSCK_OPT -E bmap2extent -N test_filesys $TMPFILE >> $OUT1.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT1.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT1.new >> $OUT1
-rm -f $OUT1.new
+sed -f $cmd_dir/filter.sed $OUT1.new > $OUT1
 
 $FSCK $SECOND_FSCK_OPT -N test_filesys $TMPFILE > $OUT2.new 2>&1 
 status=$?
 echo Exit status is $status >> $OUT2.new
 echo 'ex /a' > $TMPFILE.cmd
 $DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT2.new 2>&1
-rm -rf $TMPFILE.cmd
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT2.new > $OUT2
-rm -f $OUT2.new
+sed -f $cmd_dir/filter.sed $OUT2.new > $OUT2
+rm -f $TMPFILE.cmd $OUT1.new $OUT2.new
 
 eval $AFTER_CMD
 
index 7af91aa..eafd64a 100644 (file)
@@ -2,7 +2,7 @@ debugfs: stat /a
 Inode: 12   Type: regular    Mode:  0644   Flags: 0x0
 Generation: 1573716129    Version: 0x00000000:00000001
 User:     0   Group:     0   Size: 524288
-File ACL: 0    Directory ACL: 0
+File ACL: 0
 Links: 1   Blockcount: 1030
 Fragment:  Address: 0    Number: 0    Size: 0
  ctime: 0x5457f87a:62ae2980 -- Mon Nov  3 21:49:46 2014
@@ -30,4 +30,4 @@ Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 13/128 files (15.4% non-contiguous), 574/2048 blocks
-Exit status is 1
+Exit status is 0
index c9394c6..1a58794 100644 (file)
@@ -1 +1 @@
-convert blockmap and extents files to extents files
+convert blockmap to extents files
index 203ab25..f61c8e2 100644 (file)
@@ -50,13 +50,12 @@ eval $PREP_CMD
 echo 'stat /a' > $TMPFILE.cmd
 echo 'ex /zero' >> $TMPFILE.cmd
 $DEBUGFS -f $TMPFILE.cmd $TMPFILE > $OUT1.new 2>&1
-rm -rf $TMPFILE.cmd
+rm -f $TMPFILE.cmd
 $TUNE2FS -O extent $TMPFILE >> $OUT1.new 2>&1
 $FSCK $FSCK_OPT -E bmap2extent -N test_filesys $TMPFILE >> $OUT1.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT1.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT1.new >> $OUT1
-rm -f $OUT1.new
+sed -f $cmd_dir/filter.sed $OUT1.new > $OUT1
 
 $FSCK $SECOND_FSCK_OPT -N test_filesys $TMPFILE > $OUT2.new 2>&1 
 status=$?
@@ -64,9 +63,8 @@ echo Exit status is $status >> $OUT2.new
 echo 'ex /a' > $TMPFILE.cmd
 echo 'ex /zero' >> $TMPFILE.cmd
 $DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT2.new 2>&1
-rm -rf $TMPFILE.cmd
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT2.new > $OUT2
-rm -f $OUT2.new
+sed -f $cmd_dir/filter.sed $OUT2.new > $OUT2
+rm -f $TMPFILE.cmd $OUT1.new $OUT2.new
 
 eval $AFTER_CMD
 
diff --git a/tests/f_convert_bmap_sparse/expect.1 b/tests/f_convert_bmap_sparse/expect.1
new file mode 100644 (file)
index 0000000..095fb2b
--- /dev/null
@@ -0,0 +1,24 @@
+debugfs: stat /realmode.bin
+Inode: 12   Type: regular    Mode:  0775   Flags: 0x0
+Generation: 2022334337    Version: 0x00000001
+User:  1000   Group:  1000   Size: 21080
+File ACL: 0
+Links: 1   Blockcount: 16
+Fragment:  Address: 0    Number: 0    Size: 0
+ctime: 0x5924849d -- Tue May 23 18:51:09 2017
+atime: 0x59247d36 -- Tue May 23 18:19:34 2017
+mtime: 0x591e1764 -- Thu May 18 21:51:32 2017
+BLOCKS:
+(0):513, (4-8):514-518, (IND):58, (20):2005
+TOTAL: 8
+
+Pass 1: Checking inodes, blocks, and sizes
+Pass 1E: Optimizing extent trees
+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/256 files (8.3% non-contiguous), 65/2048 blocks
+Exit status is 0
diff --git a/tests/f_convert_bmap_sparse/expect.2 b/tests/f_convert_bmap_sparse/expect.2
new file mode 100644 (file)
index 0000000..e5a3d44
--- /dev/null
@@ -0,0 +1,12 @@
+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/256 files (8.3% non-contiguous), 65/2048 blocks
+Exit status is 0
+debugfs: ex /realmode.bin
+Level Entries       Logical      Physical Length Flags
+ 0/ 0   1/  3     0 -     0   513 -   513      1 
+ 0/ 0   2/  3     4 -     8   514 -   518      5 
+ 0/ 0   3/  3    20 -    20  2005 -  2005      1 
diff --git a/tests/f_convert_bmap_sparse/image.gz b/tests/f_convert_bmap_sparse/image.gz
new file mode 100644 (file)
index 0000000..1f594fd
Binary files /dev/null and b/tests/f_convert_bmap_sparse/image.gz differ
diff --git a/tests/f_convert_bmap_sparse/name b/tests/f_convert_bmap_sparse/name
new file mode 100644 (file)
index 0000000..dc3b985
--- /dev/null
@@ -0,0 +1 @@
+convert sparse blockmap file to extents file
diff --git a/tests/f_convert_bmap_sparse/script b/tests/f_convert_bmap_sparse/script
new file mode 100644 (file)
index 0000000..e78a4bd
--- /dev/null
@@ -0,0 +1,115 @@
+if [ "$DESCRIPTION"x != x ]; then
+       test_description="$DESCRIPTION"
+fi
+if [ "$IMAGE"x = x ]; then
+       IMAGE=$test_dir/image.gz
+fi
+
+if [ "$FSCK_OPT"x = x ]; then
+       FSCK_OPT=-yf
+fi
+
+if [ "$SECOND_FSCK_OPT"x = x ]; then
+       SECOND_FSCK_OPT=-yf
+fi
+
+if [ "$OUT1"x = x ]; then
+       OUT1=$test_name.1.log
+fi
+
+if [ "$OUT2"x = x ]; then
+       OUT2=$test_name.2.log
+fi
+
+if [ "$EXP1"x = x ]; then
+       if [ -f $test_dir/expect.1.gz ]; then
+               EXP1=$test_name.1.tmp
+               gunzip < $test_dir/expect.1.gz > $EXP1
+       else
+               EXP1=$test_dir/expect.1
+       fi
+fi
+
+if [ "$EXP2"x = x ]; then
+       if [ -f $test_dir/expect.2.gz ]; then
+               EXP2=$test_name.2.tmp
+               gunzip < $test_dir/expect.2.gz > $EXP2
+       else
+               EXP2=$test_dir/expect.2
+       fi
+fi
+
+if [ "$SKIP_GUNZIP" != "true" ] ; then
+       gunzip < $IMAGE > $TMPFILE
+fi
+
+cp /dev/null $OUT1
+
+eval $PREP_CMD
+
+echo 'stat /realmode.bin' > $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE > $OUT1.new 2>&1
+rm -f $TMPFILE.cmd
+$TUNE2FS -O extent $TMPFILE >> $OUT1.new 2>&1
+$FSCK $FSCK_OPT -E bmap2extent -N test_filesys $TMPFILE >> $OUT1.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT1.new
+sed -f $cmd_dir/filter.sed $OUT1.new > $OUT1
+
+$FSCK $SECOND_FSCK_OPT -N test_filesys $TMPFILE > $OUT2.new 2>&1 
+status=$?
+echo Exit status is $status >> $OUT2.new
+echo 'ex /realmode.bin' > $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT2.new 2>&1
+sed -f $cmd_dir/filter.sed $OUT2.new > $OUT2
+rm -f $TMPFILE.cmd $OUT1.new $OUT2.new
+
+eval $AFTER_CMD
+
+if [ "$SKIP_VERIFY" != "true" ] ; then
+       rm -f $test_name.ok $test_name.failed
+       cmp -s $OUT1 $EXP1
+       status1=$?
+       if [ "$ONE_PASS_ONLY" != "true" ]; then
+               cmp -s $OUT2 $EXP2
+               status2=$?
+       else
+               status2=0
+       fi
+       if [ "$PASS_ZERO" = "true" ]; then
+               cmp -s $test_name.0.log $test_dir/expect.0
+               status3=$?
+       else
+               status3=0
+       fi
+
+       if [ -z "$test_description" ] ; then
+               description="$test_name"
+       else
+               description="$test_name: $test_description"
+       fi
+
+       if [ "$status1" -eq 0 -a "$status2" -eq 0 -a "$status3" -eq 0 ] ; then
+               echo "$description: ok"
+               touch $test_name.ok
+       else
+               echo "$description: failed"
+               rm -f $test_name.failed
+               if [ "$PASS_ZERO" = "true" ]; then
+                       diff $DIFF_OPTS $test_dir/expect.0 \
+                               $test_name.0.log >> $test_name.failed
+               fi
+               diff $DIFF_OPTS $EXP1 $OUT1 >> $test_name.failed
+               if [ "$ONE_PASS_ONLY" != "true" ]; then
+                       diff $DIFF_OPTS $EXP2 $OUT2 >> $test_name.failed
+               fi
+       fi
+       rm -f tmp_expect
+fi
+
+if [ "$SKIP_CLEANUP" != "true" ] ; then
+       unset IMAGE FSCK_OPT SECOND_FSCK_OPT OUT1 OUT2 EXP1 EXP2 
+       unset SKIP_VERIFY SKIP_CLEANUP SKIP_GUNZIP ONE_PASS_ONLY PREP_CMD
+       unset DESCRIPTION SKIP_UNLINK AFTER_CMD PASS_ZERO
+fi
+
index 977a469..6898030 100644 (file)
@@ -1,6 +1,10 @@
 ext2fs_open2: The ext2 superblock is corrupt
 ../e2fsck/e2fsck: Superblock invalid, trying backup blocks...
 ../e2fsck/e2fsck: The ext2 superblock is corrupt while trying to open test.img
+../e2fsck/e2fsck: Trying to load superblock despite errors...
+ext2fs_open2: The ext2 superblock is corrupt
+../e2fsck/e2fsck: Superblock invalid, trying backup blocks...
+../e2fsck/e2fsck: The ext2 superblock is corrupt while trying to open test.img
 
 The superblock could not be read or does not describe a valid ext2/ext3/ext4
 filesystem.  If the device is valid and it really contains an ext2/ext3/ext4
index dca6e92..3033f8a 100644 (file)
@@ -6,51 +6,63 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/128 files (0.0% non-contiguous), 441/1024 blocks
 Exit status is 0
-debugfs -R "symlink /l_30 /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
-debugfs -R "symlink /l_70 /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
-debugfs -R "symlink /l_500 /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
-debugfs -R "symlink /l_1023 /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
-debugfs -R "symlink /l_1024 /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
+debugfs -R "symlink /l_30 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
+debugfs -R "symlink /l_60 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
+debugfs -R "symlink /l_70 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
+debugfs -R "symlink /l_500 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
+debugfs -R "symlink /l_1023 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
+debugfs -R "symlink /l_1024 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
 ext2fs_symlink: Invalid argument passed to ext2 library while creating symlink "l_1024"
 symlink: Invalid argument passed to ext2 library 
-debugfs -R "symlink /l_1500 /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
+debugfs -R "symlink /l_1500 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" test.img
 ext2fs_symlink: Invalid argument passed to ext2 library while creating symlink "l_1500"
 symlink: Invalid argument passed to ext2 library 
 debugfs -R "stat /l_30" test.img
 Inode: 12   Type: symlink    Mode:  0777   Flags: 0x0
 Generation: 0    Version: 0x00000000:00000000
-User:     0   Group:     0   Project:     0   Size: 31
-File ACL: 0    Directory ACL: 0
+User:     0   Group:     0   Project:     0   Size: 30
+File ACL: 0
 Links: 1   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
 Size of extra inode fields: 32
-Fast link dest: "/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-debugfs -R "stat /l_70" test.img
+Fast link dest: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+debugfs -R "stat /l_60" test.img
 Inode: 13   Type: symlink    Mode:  0777   Flags: 0x10000000
 Generation: 0    Version: 0x00000000:00000000
-User:     0   Group:     0   Project:     0   Size: 71
-File ACL: 0    Directory ACL: 0
+User:     0   Group:     0   Project:     0   Size: 60
+File ACL: 0
 Links: 1   Blockcount: 0
 Fragment:  Address: 0    Number: 0    Size: 0
 Size of extra inode fields: 32
 Extended attributes:
-  system.data (11)
-Fast link dest: "/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+  system.data (0)
+Fast link dest: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+debugfs -R "stat /l_70" test.img
+Inode: 14   Type: symlink    Mode:  0777   Flags: 0x10000000
+Generation: 0    Version: 0x00000000:00000000
+User:     0   Group:     0   Project:     0   Size: 70
+File ACL: 0
+Links: 1   Blockcount: 0
+Fragment:  Address: 0    Number: 0    Size: 0
+Size of extra inode fields: 32
+Extended attributes:
+  system.data (10)
+Fast link dest: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 debugfs -R "stat /l_500" test.img
-Inode: 14   Type: symlink    Mode:  0777   Flags: 0x80000
+Inode: 15   Type: symlink    Mode:  0777   Flags: 0x80000
 Generation: 0    Version: 0x00000000:00000000
-User:     0   Group:     0   Project:     0   Size: 501
-File ACL: 0    Directory ACL: 0
+User:     0   Group:     0   Project:     0   Size: 500
+File ACL: 0
 Links: 1   Blockcount: 2
 Fragment:  Address: 0    Number: 0    Size: 0
 Size of extra inode fields: 32
 EXTENTS:
 (0):153
 debugfs -R "stat /l_1023" test.img
-Inode: 15   Type: symlink    Mode:  0777   Flags: 0x80000
+Inode: 16   Type: symlink    Mode:  0777   Flags: 0x80000
 Generation: 0    Version: 0x00000000:00000000
-User:     0   Group:     0   Project:     0   Size: 1024
-File ACL: 0    Directory ACL: 0
+User:     0   Group:     0   Project:     0   Size: 1023
+File ACL: 0
 Links: 1   Blockcount: 2
 Fragment:  Address: 0    Number: 0    Size: 0
 Size of extra inode fields: 32
@@ -65,5 +77,5 @@ Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 15/128 files (0.0% non-contiguous), 443/1024 blocks
+test_filesys: 16/128 files (0.0% non-contiguous), 443/1024 blocks
 Exit status is 0
index 779d92e..169f58d 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-yf
 OUT=$test_name.log
@@ -9,39 +12,32 @@ else
        EXP=$test_dir/expect
 fi
 
-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 -O inline_data,extents -I 256 test.img 1024 >> $OUT
-$MKE2FS -q -F -o Linux -b 1024 -g 256 -O inline_data,extents -I 256 $TMPFILE 1024 2>&1 |
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo mke2fs -q -F -o Linux -b 1024 -g 256 -O inline_data,extents -I 256 test.img 1024 > $OUT.new
+$MKE2FS -q -F -o Linux -b 1024 -g 256 -O inline_data,extents -I 256 $TMPFILE 1024 >> $OUT 2>&1
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-for i in 30 70 500 1023 1024 1500; do
-       echo "debugfs -R \"symlink /l_$i /$(perl -e "print 'x' x $i;")\" test.img" >> $OUT
-       $DEBUGFS -w -R "symlink /l_$i /$(perl -e "print 'x' x $i;")" $TMPFILE \
-                2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
+for i in 30 60 70 500 1023 1024 1500; do
+       echo "debugfs -R \"symlink /l_$i $(perl -e "print 'x' x $i;")\" test.img" >> $OUT.new
+       $DEBUGFS -w -R "symlink /l_$i $(perl -e "print 'x' x $i;")" $TMPFILE \
+                2>&1 | sed -f $cmd_dir/filter.sed >> $OUT.new
 done
 
-for i in 30 70 500 1023 1024 1500; do
-       echo "debugfs -R \"stat /l_$i\" test.img" >> $OUT
+for i in 30 60 70 500 1023 1024 1500; do
+       echo "debugfs -R \"stat /l_$i\" test.img" >> $OUT.new
        $DEBUGFS -R "stat /l_$i" $TMPFILE 2>&1 | \
-                sed -f $cmd_dir/filter.sed | grep -v "time: " >> $OUT
+                grep -v "time: " >> $OUT.new
 done
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+rm -f $OUT.new $TMPFILE
 
 cmp -s $OUT $EXP
 status=$?
@@ -56,7 +52,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
diff --git a/tests/f_del_dup_quota/expect.1 b/tests/f_del_dup_quota/expect.1
new file mode 100644 (file)
index 0000000..71b7440
--- /dev/null
@@ -0,0 +1,39 @@
+Pass 1: Checking inodes, blocks, and sizes
+
+Running additional passes to resolve blocks claimed by more than one inode...
+Pass 1B: Rescanning for multiply-claimed blocks
+Multiply-claimed block(s) in inode 12: 8129
+Multiply-claimed block(s) in inode 13: 8129
+Pass 1C: Scanning directories for inodes with multiply-claimed blocks
+Pass 1D: Reconciling multiply-claimed blocks
+(There are 2 inodes containing multiply-claimed blocks.)
+
+File /testfile1 (inode #12, mod time Wed May 24 23:10:38 2017) 
+  has 1 multiply-claimed block(s), shared with 1 file(s):
+       /testfile2 (inode #13, mod time Wed May 24 23:10:45 2017)
+Clone multiply-claimed blocks<y>? no
+Delete file<y>? yes
+File /testfile2 (inode #13, mod time Wed May 24 23:10:45 2017) 
+  has 1 multiply-claimed block(s), shared with 1 file(s):
+       /testfile1 (inode #12, mod time Wed May 24 23:10:38 2017)
+Multiply-claimed blocks already reassigned or cloned.
+
+Pass 2: Checking directory structure
+Entry 'testfile1' in / (2) has deleted/unused inode 12.  Clear<y>? yes
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+Block bitmap differences:  -1374
+Fix<y>? yes
+Free blocks count wrong for group #0 (6815, counted=6816).
+Fix<y>? yes
+Free blocks count wrong (6815, counted=6816).
+Fix<y>? yes
+[QUOTA WARNING] Usage inconsistent for ID 0:actual (15360, 3) != expected (17408, 4)
+Update quota info for quota type 0<y>? yes
+[QUOTA WARNING] Usage inconsistent for ID 0:actual (15360, 3) != expected (17408, 4)
+Update quota info for quota type 1<y>? yes
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/2048 files (33.3% non-contiguous), 1376/8192 blocks
+Exit status is 0
diff --git a/tests/f_del_dup_quota/expect.2 b/tests/f_del_dup_quota/expect.2
new file mode 100644 (file)
index 0000000..14f99b8
--- /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/2048 files (25.0% non-contiguous), 1376/8192 blocks
+Exit status is 0
diff --git a/tests/f_del_dup_quota/image.bz2 b/tests/f_del_dup_quota/image.bz2
new file mode 100644 (file)
index 0000000..fc91e2a
Binary files /dev/null and b/tests/f_del_dup_quota/image.bz2 differ
diff --git a/tests/f_del_dup_quota/name b/tests/f_del_dup_quota/name
new file mode 100644 (file)
index 0000000..8b29fd4
--- /dev/null
@@ -0,0 +1 @@
+delete file containing multiply claimed blocks with quota
diff --git a/tests/f_del_dup_quota/script b/tests/f_del_dup_quota/script
new file mode 100644 (file)
index 0000000..5480c3f
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+IMAGE=$test_dir/image.bz2
+
+bzip2 -d < $IMAGE > $TMPFILE
+
+# Run fsck to fix the multiply-claimed block breakage
+FSCK_OPT=-f
+EXP1=$test_dir/expect.1
+OUT1=$test_name.1.log
+
+echo "nyyyyyyy" | E2FSCK_FORCE_INTERACTIVE=y $FSCK $FSCK_OPT -N test_filesys $TMPFILE 2>&1 | head -n 1000 | tail -n +2 > $OUT1
+echo "Exit status is $?" >> $OUT1
+
+# Run a second time to verify that fsck completely repaired everything in
+# the first run, including quota corrections
+FSCK_OPT=-fn
+EXP2=$test_dir/expect.2
+OUT2=$test_name.2.log
+
+$FSCK $FSCK_OPT -N test_filesys $TMPFILE 2>&1 | head -n 1000 | tail -n +2 > $OUT2
+echo "Exit status is $?" >> $OUT2
+
+# Figure out what happened
+rm -f $test_name.failed $test_name.ok
+if cmp -s $EXP1 $OUT1 && cmp -s $EXP2 $OUT2; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "$test_name: $test_description: failed"
+       diff -u $EXP1 $OUT1 >> $test_name.failed
+       diff -u $EXP2 $OUT2 >> $test_name.failed
+fi
+unset EXP1 OUT1 EXP2 OUT2 FSCK_OPT IMAGE
index 516701a..c034ace 100644 (file)
@@ -1 +1 @@
-deleted inode with a bad csum that wasn't getting fixed (metadata_csum)
+deleted inode with bad metadata_csum wasn't fixed
index 5440328..ae29627 100644 (file)
@@ -1,5 +1,5 @@
 if ! test -x $DEBUGFS_EXE; then
-        echo "$test_name: $test_description: skipped"
+       echo "$test_name: $test_description: skipped (no debugfs)"
        return 0
 fi
 
index 4295886..39f99af 100644 (file)
@@ -12,7 +12,7 @@ is corrupt, and you might try running e2fsck with an alternate superblock:
     e2fsck -b 32768 <device>
 
 *** debugfs
-test.img: Bad magic number in super-block while opening filesystem
+debugfs: Bad magic number in super-block while trying to open test.img
 *** tune2fs
 ../misc/tune2fs: Bad magic number in super-block while trying to open test.img
 *** mke2fs
index 0d4ba54..b528046 100644 (file)
@@ -11,11 +11,9 @@ is corrupt, and you might try running e2fsck with an alternate superblock:
  or
     e2fsck -b 32768 <device>
 
-test.img contains `PNG image data, 148 x 31, 8-bit/color RGBA, non-interlaced' data
 *** debugfs
 *** tune2fs
 ../misc/tune2fs: Bad magic number in super-block while trying to open test.img
-test.img contains `PNG image data, 148 x 31, 8-bit/color RGBA, non-interlaced' data
 *** mke2fs
 Creating filesystem with 16384 1k blocks and 4096 inodes
 Superblock backups stored on blocks: 
index 2721c79..2577842 100644 (file)
@@ -1,12 +1,15 @@
 #!/bin/bash
 
-if [ "$(grep -c 'define HAVE_MAGIC_H' ../lib/config.h)" -gt 0 ]; then
+if [ "$(grep -c 'define HAVE_MAGIC_H' ../lib/config.h)" -eq 0 ]; then
+       echo "$test_name: skipped (no magic)"
+       exit 0
+fi
 
 FSCK_OPT=-fn
 IMAGE=$test_dir/image.bz2
 
 bzip2 -d < $IMAGE > $TMPFILE
-dd if=/dev/zero of=$TMPFILE conv=notrunc oflag=append bs=1024k count=16 > /dev/null 2>&1
+$DD if=/dev/zero of=$TMPFILE conv=notrunc oflag=append bs=1024k count=16 > /dev/null 2>&1
 
 # Run fsck to fix things?
 if [ -x $DEBUGFS_EXE ]; then
@@ -15,18 +18,18 @@ else
        EXP=$test_dir/expect.nodebugfs
 fi
 OUT=$test_name.log
-rm -rf $test_name.failed $test_name.ok
+rm -f $test_name.failed $test_name.ok
 
 echo "*** e2fsck" > $OUT
 $FSCK $FSCK_OPT $TMPFILE >> $OUT 2>&1
 echo "*** debugfs" >> $OUT
-test -x $DEBUGFS_EXE && $DEBUGFS_EXE -R 'quit' $TMPFILE >> $OUT 2>&1
+test -x $DEBUGFS_EXE && $DEBUGFS -R 'quit' $TMPFILE >> $OUT 2>&1
 echo "*** tune2fs" >> $OUT
 $TUNE2FS -i 0 $TMPFILE >> $OUT 2>&1
 echo "*** mke2fs" >> $OUT
 $MKE2FS -n $TMPFILE >> $OUT 2>&1
 
-sed -f $cmd_dir/filter.sed -e "s|$TMPFILE|test.img|g" < $OUT > $OUT.new
+sed -f $cmd_dir/filter.sed < $OUT > $OUT.new
 mv $OUT.new $OUT
 
 # Figure out what happened
@@ -38,7 +41,3 @@ else
        diff -u $EXP $OUT >> $test_name.failed
 fi
 unset EXP OUT FSCK_OPT IMAGE
-
-else #if HAVE_MAGIC_H
-       echo "$test_name: $test_description: skipped"
-fi
index 4ab6e5b..a48e8af 100644 (file)
@@ -13,7 +13,7 @@ is corrupt, and you might try running e2fsck with an alternate superblock:
 
 test.img contains a xfs file system labelled 'test_filsys'
 *** debugfs
-test.img: Bad magic number in super-block while opening filesystem
+debugfs: Bad magic number in super-block while trying to open test.img
 test.img contains a xfs file system labelled 'test_filsys'
 *** tune2fs
 ../misc/tune2fs: Bad magic number in super-block while trying to open test.img
index b32ba85..bd2c1e8 100644 (file)
@@ -12,18 +12,18 @@ else
        EXP=$test_dir/expect.nodebugfs
 fi
 OUT=$test_name.log
-rm -rf $test_name.failed $test_name.ok
+rm -f $test_name.failed $test_name.ok
 
 echo "*** e2fsck" > $OUT
 $FSCK $FSCK_OPT $TMPFILE >> $OUT 2>&1
 echo "*** debugfs" >> $OUT
-test -x $DEBUGFS_EXE && $DEBUGFS_EXE -R 'quit' $TMPFILE >> $OUT 2>&1
+test -x $DEBUGFS_EXE && $DEBUGFS -R 'quit' $TMPFILE >> $OUT 2>&1
 echo "*** tune2fs" >> $OUT
 $TUNE2FS -i 0 $TMPFILE >> $OUT 2>&1
 echo "*** mke2fs" >> $OUT
-$MKE2FS -n $TMPFILE >> $OUT 2>&1
+$MKE2FS -n -b 1024 $TMPFILE >> $OUT 2>&1
 
-sed -f $cmd_dir/filter.sed -e "s|$TMPFILE|test.img|g" < $OUT > $OUT.new
+sed -f $cmd_dir/filter.sed < $OUT > $OUT.new
 mv $OUT.new $OUT
 
 # Figure out what happened
index 94e72da..2c684fe 100644 (file)
@@ -9,21 +9,15 @@ Fix? yes
 Directory inode 14, block #0, offset 0: directory has no checksum.
 Fix? yes
 
-Directory inode 15, block #0, offset 0: directory has no checksum.
-Fix? yes
-
 Directory inode 15, block #0, offset 1000: directory corrupted
 Salvage? yes
 
-Directory inode 16, block #0, offset 0: directory has no checksum.
+Entry '' in ??? (15) has rec_len of 0, should be 12.
 Fix? yes
 
 Directory inode 16, block #0, offset 12: directory corrupted
 Salvage? yes
 
-Directory inode 17, block #0, offset 0: directory has no checksum.
-Fix? yes
-
 Directory inode 17, block #0, offset 0: directory corrupted
 Salvage? yes
 
index 140ae45..6397e9d 100644 (file)
@@ -1 +1 @@
-dir block w/ missing/bad csum, no tail, or dir block corruption (metadata_csum)
+dir block w/ missing/bad csum/tail or block corruption
index 075e62c..635a0df 100644 (file)
@@ -30,6 +30,8 @@ Fix? yes
 Free blocks count wrong (62, counted=60).
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 Padding at end of block bitmap is not set. Fix? yes
 
 
index 69aa21b..04d7304 100644 (file)
@@ -37,6 +37,8 @@ Fix? yes
 Free blocks count wrong (26, counted=22).
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 Padding at end of block bitmap is not set. Fix? yes
 
 
index eab75a8..5f79cb8 100644 (file)
@@ -39,6 +39,8 @@ Fix? yes
 Free blocks count wrong (20, counted=19).
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 16/16 files (25.0% non-contiguous), 81/100 blocks
index 498f525..aec862d 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 SKIP_GUNZIP="true"
 TEST_DATA="$test_name.tmp"
@@ -50,7 +53,3 @@ export E2FSCK_TIME
 rm -f $TEST_DATA
 
 unset E2FSCK_TIME TEST_DATA
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi 
index 60378cd..dcda9d8 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 if test "$HTREE"x = x ; then
        gunzip < $test_dir/image.gz > $TMPFILE
@@ -10,7 +13,3 @@ if test "$HTREE"x = x ; then
 fi
 . $cmd_dir/run_e2fsck
 rm -f "$TMPFILE".gz
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi 
diff --git a/tests/f_dup_de_crypt/expect.1 b/tests/f_dup_de_crypt/expect.1
new file mode 100644 (file)
index 0000000..03e0ad6
--- /dev/null
@@ -0,0 +1,18 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Duplicate entry '+M-^AT^EM-1M-^CM-/)*M-L^RM-^L^@M-WM-)M-+' found.
+       Marking /test (12) to be rebuilt.
+
+Pass 3: Checking directory connectivity
+Pass 3A: Optimizing directories
+Duplicate filename entry '+M-^AT^EM-1M-^CM-/)*M-L^RM-^L^@M-WM-)M-+' in /test (12) found.  Clear? yes
+
+Pass 4: Checking reference counts
+Unattached inode 13
+Connect to /lost+found? yes
+
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 14/16 files (0.0% non-contiguous), 26/60 blocks
+Exit status is 1
diff --git a/tests/f_dup_de_crypt/expect.2 b/tests/f_dup_de_crypt/expect.2
new file mode 100644 (file)
index 0000000..cfca772
--- /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: 14/16 files (0.0% non-contiguous), 26/60 blocks
+Exit status is 0
diff --git a/tests/f_dup_de_crypt/image.gz b/tests/f_dup_de_crypt/image.gz
new file mode 100644 (file)
index 0000000..07a44d7
Binary files /dev/null and b/tests/f_dup_de_crypt/image.gz differ
diff --git a/tests/f_dup_de_crypt/name b/tests/f_dup_de_crypt/name
new file mode 100644 (file)
index 0000000..aff30a8
--- /dev/null
@@ -0,0 +1 @@
+duplicate directory entries for encrypted dirs
index 19fa120..52a1aed 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 SKIP_GUNZIP="true"
 TEST_DATA="$test_name.tmp"
@@ -24,7 +27,3 @@ export E2FSCK_TIME
 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_ea_inode/expect.1 b/tests/f_ea_inode/expect.1
new file mode 100644 (file)
index 0000000..aaa0bea
--- /dev/null
@@ -0,0 +1,31 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 17 has illegal extended attribute value inode 4008636142.
+Clear? yes
+
+Inode 17, i_blocks is 8, should be 0.  Fix? yes
+
+Inode 18 has illegal extended attribute value inode 19.
+Clear? yes
+
+Inode 18, i_blocks is 8, should be 0.  Fix? yes
+
+Extended attribute in inode 20 has a hash (1145324612) which is invalid
+Clear? yes
+
+Inode 20, i_blocks is 8, should be 0.  Fix? yes
+
+EA inode 19 for parent inode 21 missing EA_INODE flag.
+ Fix? yes
+
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Extended attribute inode 16 ref count is 51, should be 2. Fix? yes
+
+Extended attribute inode 19 ref count is 2, should be 1. Fix? yes
+
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 21/32 files (0.0% non-contiguous), 18/64 blocks
+Exit status is 1
diff --git a/tests/f_ea_inode/expect.2 b/tests/f_ea_inode/expect.2
new file mode 100644 (file)
index 0000000..f9276fb
--- /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: 21/32 files (0.0% non-contiguous), 18/64 blocks
+Exit status is 0
diff --git a/tests/f_ea_inode/image.gz b/tests/f_ea_inode/image.gz
new file mode 100644 (file)
index 0000000..68a3975
Binary files /dev/null and b/tests/f_ea_inode/image.gz differ
diff --git a/tests/f_ea_inode_self_ref/expect.1 b/tests/f_ea_inode_self_ref/expect.1
new file mode 100644 (file)
index 0000000..f94c04d
--- /dev/null
@@ -0,0 +1,17 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 16 has INLINE_DATA_FL flag but extended attribute not found.  Truncate? yes
+
+Extended attribute in inode 16 has a hash (553648128) which is invalid
+Clear? 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:  -20
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 16/16 files (0.0% non-contiguous), 21/100 blocks
+Exit status is 1
diff --git a/tests/f_ea_inode_self_ref/expect.2 b/tests/f_ea_inode_self_ref/expect.2
new file mode 100644 (file)
index 0000000..9398061
--- /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: 16/16 files (0.0% non-contiguous), 21/100 blocks
+Exit status is 0
diff --git a/tests/f_ea_inode_self_ref/image.gz b/tests/f_ea_inode_self_ref/image.gz
new file mode 100644 (file)
index 0000000..3cc733b
Binary files /dev/null and b/tests/f_ea_inode_self_ref/image.gz differ
diff --git a/tests/f_ea_inode_self_ref/name b/tests/f_ea_inode_self_ref/name
new file mode 100644 (file)
index 0000000..4e68da8
--- /dev/null
@@ -0,0 +1 @@
+corrupted, self-referential ea_in_inode
index 87e2fd6..85c7e67 100644 (file)
@@ -8,6 +8,8 @@ Pass 5: Checking group summary information
 Free blocks count wrong for group #0 (44, counted=63).
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 Padding at end of block bitmap is not set. Fix? yes
 
 
index 2e9133e..f224b7d 100644 (file)
@@ -1,7 +1,7 @@
 Pass 1: Checking inodes, blocks, and sizes
 Inode 30, i_size is 2048, should be 4096.  Fix? yes
 
-Inode 31, i_size is 2048, should be 4096.  Fix? yes
+Inode 31, i_size is 2048, should be 6144.  Fix? yes
 
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -9,5 +9,5 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 31/56 files (29.0% non-contiguous), 83/400 blocks
+test_filesys: 31/56 files (29.0% non-contiguous), 85/400 blocks
 Exit status is 1
index 2a2bca5..0cce314 100644 (file)
@@ -3,5 +3,5 @@ Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 31/56 files (29.0% non-contiguous), 83/400 blocks
+test_filesys: 31/56 files (29.0% non-contiguous), 85/400 blocks
 Exit status is 0
index 2586a6a..e1177b3 100644 (file)
Binary files a/tests/f_eofblocks/image.gz and b/tests/f_eofblocks/image.gz differ
index 81c25a3..e6cdf97 100644 (file)
@@ -2,7 +2,7 @@ Pass 1: Checking inodes, blocks, and sizes
 Inode 12 has an invalid extent node (blk 22, lblk 0)
 Clear? yes
 
-Inode 12 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 12 extent tree (at level 1) could be shorter.  Optimize? yes
 
 Inode 12, i_blocks is 16, should be 8.  Fix? yes
 
index 223ca69..ea48405 100644 (file)
@@ -26,4 +26,4 @@ test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
            0 sockets
 ------------
          343 files
-Exit status is 1
+Exit status is 0
diff --git a/tests/f_extent_htree/expect.pre.1 b/tests/f_extent_htree/expect.pre.1
new file mode 100644 (file)
index 0000000..e489c30
--- /dev/null
@@ -0,0 +1,29 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 3A: Optimizing directories
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+
+         522 inodes used (60.98%, out of 856)
+           0 non-contiguous files (0.0%)
+           1 non-contiguous directory (0.2%)
+             # of inodes with ind/dind/tind blocks: 0/0/0
+             Extent depth histogram: 512/1
+         815 blocks used (95.88%, out of 850)
+           0 bad blocks
+           0 large files
+
+         510 regular files
+           3 directories
+           0 character device files
+           0 block device files
+           0 fifos
+           0 links
+           0 symbolic links (0 fast symbolic links)
+           0 sockets
+------------
+         513 files
+Exit status is 0
diff --git a/tests/f_extent_htree/expect.pre.2 b/tests/f_extent_htree/expect.pre.2
new file mode 100644 (file)
index 0000000..667c147
--- /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: 522/856 files (0.2% non-contiguous), 815/850 blocks
+Exit status is 0
diff --git a/tests/f_extent_htree/image.gz b/tests/f_extent_htree/image.gz
deleted file mode 100644 (file)
index 284207e..0000000
Binary files a/tests/f_extent_htree/image.gz and /dev/null differ
index 35aaf19..4939acc 100644 (file)
@@ -1,17 +1,4 @@
 #!/bin/bash
-
-FSCK_OPT="-fyvD"
-. $cmd_dir/run_e2fsck
-rm -f $TMPFILE
-
-exit 0
-# This script depends on "mke2fs -d", which is only in master and not maint,
-# to populate the file directory tree poorly (namely that there are no
-# contiguous blocks in the directory leaf and the extent tree is large).
-
-# Once the "mke2fs -d" option is available on the "maint" branch, the
-# above few lines should be deleted, along with the "image.gz" file.
-
 TMPDIR=${TMPDIR:-"/tmp"}
 OUT=$test_name.log
 
@@ -43,8 +30,8 @@ fi
 # make filesystem with enough inodes and blocks to hold all the test files
 > $TMPFILE
 NUM=$((NUM * 5 / 3))
-echo "mke2fs -b $BSIZE -O dir_index,extent -d$SRC -N$NUM $TMPFILE $NUM" >> $OUT
-$MKE2FS -b $BSIZE -O dir_index,extent -d$SRC -N$NUM $TMPFILE $NUM >> $OUT 2>&1
+echo "mke2fs -b $BSIZE -O dir_index,extent -E no_copy_xattrs -d$SRC -N$NUM $TMPFILE $NUM" >> $OUT
+$MKE2FS -b $BSIZE -O dir_index,extent -E no_copy_xattrs -d$SRC -N$NUM $TMPFILE $NUM >> $OUT 2>&1
 rm -r $SRC
 
 # Run e2fsck to convert dir to htree before deleting the files, as mke2fs
@@ -65,6 +52,5 @@ $DEBUGFS -c -R "htree subdir" $TMPFILE 2>> $OUT |
        awk '/yyyyy/ { print "rm '$SUB'/"$4 }' > $DELETE_LIST
 $DEBUGFS -w -f $DELETE_LIST $TMPFILE >> $OUT 2>&1
 rm $DELETE_LIST
-cp $TMPFILE $TMPFILE.sav
 
 . $cmd_dir/run_e2fsck
index 52091ac..096be4c 100644 (file)
@@ -2,7 +2,7 @@ Pass 1: Checking inodes, blocks, and sizes
 Inode 12 has an invalid extent node (blk 1295, lblk 0)
 Clear? yes
 
-Inode 12 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 12 extent tree (at level 1) could be shorter.  Optimize? yes
 
 Inode 12, i_blocks is 712, should be 0.  Fix? yes
 
index 4c1777c..83b8157 100644 (file)
@@ -2,7 +2,7 @@ Pass 1: Checking inodes, blocks, and sizes
 Inode 12 has an invalid extent node (blk 1604, lblk 0)
 Clear? yes
 
-Inode 12 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 12 extent tree (at level 1) could be shorter.  Optimize? yes
 
 Inode 12, i_blocks is 18, should be 0.  Fix? yes
 
index 056689f..9c32775 100644 (file)
@@ -3,7 +3,7 @@ Inode 12, end of extent exceeds allowed value
        (logical block 15, physical block 200, len 30)
 Clear? yes
 
-Inode 12 extent tree (at level 1) could be narrower.  Fix? yes
+Inode 12 extent tree (at level 1) could be narrower.  Optimize? yes
 
 Inode 12, i_blocks is 154, should be 94.  Fix? yes
 
index 54674ca..9c6117c 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 SKIP_GUNZIP="true"
 TEST_DATA="$test_name.tmp"
@@ -36,7 +39,3 @@ EOF
 rm -f $TEST_DATA
 
 unset E2FSCK_TIME TEST_DATA
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index ee18438..b32c36f 100644 (file)
@@ -43,18 +43,14 @@ if [ "$SKIP_GUNZIP" != "true" ] ; then
        gunzip < $IMAGE > $TMPFILE
 fi
 
-cp /dev/null $OUT1
-
 eval $PREP_CMD
 
 echo 'ex /a' > $TMPFILE.cmd
 $DEBUGFS -f $TMPFILE.cmd $TMPFILE > $OUT1.new 2>&1
-rm -rf $TMPFILE.cmd
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT1.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT1.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT1.new >> $OUT1
-rm -f $OUT1.new
+sed -f $cmd_dir/filter.sed $OUT1.new > $OUT1
 
 if [ "$ONE_PASS_ONLY" != "true" ]; then
        $FSCK $SECOND_FSCK_OPT -N test_filesys $TMPFILE > $OUT2.new 2>&1 
@@ -62,10 +58,9 @@ if [ "$ONE_PASS_ONLY" != "true" ]; then
        echo Exit status is $status >> $OUT2.new
        echo 'ex /a' > $TMPFILE.cmd
        $DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT2.new 2>&1
-       rm -rf $TMPFILE.cmd
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT2.new > $OUT2
-       rm -f $OUT2.new
+       sed -f $cmd_dir/filter.sed $OUT2.new > $OUT2
 fi
+rm -f $TMPFILE.cmd $OUT1.new $OUT2.new
 
 eval $AFTER_CMD
 
index da65f94..b4d36d2 100644 (file)
@@ -2,14 +2,6 @@ Pass 1: Checking inodes, blocks, and sizes
 Inode 12 is in extent format, but superblock is missing EXTENTS feature
 Fix? yes
 
-Inode 12 has an invalid extent
-       (logical block 0, invalid physical block 21994527527949, len 17)
-Clear? yes
-
-Inode 12 extent tree (at level 1) could be shorter.  Fix? yes
-
-Inode 12, i_blocks is 34, should be 0.  Fix? yes
-
 Inode 13 missing EXTENT_FL, but is in extents format
 Fix? yes
 
@@ -19,47 +11,57 @@ Clear? yes
 
 Inode 16, i_blocks is 16, should be 12.  Fix? yes
 
-Inode 17 has an invalid extent
-       (logical block 0, invalid physical block 22011707397135, len 15)
-Clear? yes
+Inode 18 has corrupt extent header.  Clear inode? yes
 
-Inode 17 extent tree (at level 1) could be shorter.  Fix? yes
+Inode 18, i_blocks is 2, should be 0.  Fix? yes
 
-Inode 17, i_blocks is 32, should be 0.  Fix? yes
 
-Inode 18 has corrupt extent header.  Clear inode? yes
+Running additional passes to resolve blocks claimed by more than one inode...
+Pass 1B: Rescanning for multiply-claimed blocks
+Multiply-claimed block(s) in inode 12: 5133 5124--5125 5129 5132--5133 5142--5145
+Multiply-claimed block(s) in inode 17: 5124--5125 5129 5132 5142--5145
+Pass 1C: Scanning directories for inodes with multiply-claimed blocks
+Pass 1D: Reconciling multiply-claimed blocks
+(There are 2 inodes containing multiply-claimed blocks.)
 
-Inode 18, i_blocks is 2, should be 0.  Fix? yes
+File /fdup1 (inode #12, mod time Wed Jul  5 21:55:26 2006) 
+  has 10 multiply-claimed block(s), shared with 1 file(s):
+       /fdup2 (inode #17, mod time Wed Jul  5 21:55:27 2006)
+Clone multiply-claimed blocks? yes
 
-Special (device/socket/fifo) file (inode 19) has extents
-or inline-data flag set.  Clear? yes
+File /fdup2 (inode #17, mod time Wed Jul  5 21:55:27 2006) 
+  has 8 multiply-claimed block(s), shared with 1 file(s):
+       /fdup1 (inode #12, mod time Wed Jul  5 21:55:26 2006)
+Multiply-claimed blocks already reassigned or cloned.
 
-Pass 1E: Optimizing extent trees
 Pass 2: Checking directory structure
 Entry 'fbad-flag' in / (2) has deleted/unused inode 18.  Clear? yes
 
+Inode 19 (/fbad-sock) is an illegal FIFO.
+Clear? yes
+
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-Block bitmap differences:  -1081 +4611 -(4613--4614) -(5121--5142)
+Block bitmap differences:  +4611 -(4613--4614) -(5121--5122) +(5143--5146)
 Fix? yes
 
-Free blocks count wrong for group #0 (7081, counted=7100).
+Free blocks count wrong for group #0 (7081, counted=7067).
 Fix? yes
 
-Free blocks count wrong (7081, counted=7100).
+Free blocks count wrong (7081, counted=7067).
 Fix? yes
 
 Inode bitmap differences:  -18
 Fix? yes
 
-Free inodes count wrong for group #0 (237, counted=238).
+Free inodes count wrong for group #0 (238, counted=239).
 Fix? yes
 
-Free inodes count wrong (237, counted=238).
+Free inodes count wrong (238, counted=239).
 Fix? yes
 
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 18/256 files (5.6% non-contiguous), 1092/8192 blocks
+test_filesys: 17/256 files (17.6% non-contiguous), 1125/8192 blocks
 Exit status is 1
index 5c9d6a6..c6c9ec2 100644 (file)
@@ -3,5 +3,5 @@ Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 18/256 files (5.6% non-contiguous), 1092/8192 blocks
+test_filesys: 17/256 files (17.6% non-contiguous), 1125/8192 blocks
 Exit status is 0
index 76fc2fb..caeadc4 100644 (file)
Binary files a/tests/f_extents/image.gz and b/tests/f_extents/image.gz differ
index ebfc3ea..3388353 100644 (file)
@@ -1 +1 @@
-htree block w/ missing/bad csum, bad protective dirent, or htree index corruption (metadata_csum)
+htree block bad csum/tail dirent/htree index corruption
index d74761b..58b7916 100644 (file)
@@ -1 +1 @@
-crash e2fsck with a dir with an impossibly high logical blk offset
+dir crashes e2fsck with impossible logical blk offset
index 8746d23..40996cd 100644 (file)
@@ -22,6 +22,8 @@ Fix? yes
 Inode bitmap differences:  -(12--21)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/32 files (0.0% non-contiguous), 22/100 blocks
index 5bae25d..bf21df7 100644 (file)
@@ -19,6 +19,8 @@ Pass 5: Checking group summary information
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/32 files (0.0% non-contiguous), 22/100 blocks
index fa42a0f..4ac1246 100644 (file)
@@ -18,6 +18,8 @@ Pass 5: Checking group summary information
 Inode bitmap differences:  -(65--128)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 12/256 files (0.0% non-contiguous), 31163/32768 blocks
index 1060f04..511dcc7 100644 (file)
@@ -1,9 +1,8 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 IMAGE=$test_dir/../f_imagic/image.gz
 PREP_CMD='$DEBUGFS -w -R "feature imagic_inodes" $TMPFILE > /dev/null 2>&1'
 . $cmd_dir/run_e2fsck
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi 
index 012cd9f..63c128b 100644 (file)
@@ -2,7 +2,6 @@ Pass 1: Checking inodes, blocks, and sizes
 Inode 12 block 41 conflicts with critical metadata, skipping block checks.
 Inode 12 block 40 conflicts with critical metadata, skipping block checks.
 Inode 12 block 34 conflicts with critical metadata, skipping block checks.
-Illegal block number passed to ext2fs_test_block_bitmap #16777215 for metadata block map
 Inode 12 block 1 conflicts with critical metadata, skipping block checks.
 Inode 12, i_size is 33, should be 25227264.  Fix? yes
 
diff --git a/tests/f_inlinedata_flags/expect.1 b/tests/f_inlinedata_flags/expect.1
new file mode 100644 (file)
index 0000000..86eba88
--- /dev/null
@@ -0,0 +1,26 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 12 has INLINE_DATA_FL flag on filesystem without inline data support.
+Clear? yes
+
+Inode 13 has inline data, but superblock is missing INLINE_DATA feature
+Fix? yes
+
+Pass 2: Checking directory structure
+Entry '1' in / (2) has deleted/unused inode 12.  Clear? yes
+
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+Inode bitmap differences:  -12
+Fix? yes
+
+Free inodes count wrong for group #0 (243, counted=244).
+Fix? yes
+
+Free inodes count wrong (243, counted=244).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/256 files (0.0% non-contiguous), 1143/8192 blocks
+Exit status is 1
diff --git a/tests/f_inlinedata_flags/expect.2 b/tests/f_inlinedata_flags/expect.2
new file mode 100644 (file)
index 0000000..87b3f18
--- /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/256 files (0.0% non-contiguous), 1143/8192 blocks
+Exit status is 0
diff --git a/tests/f_inlinedata_flags/image.gz b/tests/f_inlinedata_flags/image.gz
new file mode 100644 (file)
index 0000000..4344a0a
Binary files /dev/null and b/tests/f_inlinedata_flags/image.gz differ
diff --git a/tests/f_inlinedata_flags/name b/tests/f_inlinedata_flags/name
new file mode 100644 (file)
index 0000000..66b7676
--- /dev/null
@@ -0,0 +1 @@
+check incorrect inline_data flags
index 00cdced..01c85d4 100644 (file)
@@ -12,23 +12,15 @@ Inodes that were part of a corrupted orphan linked list found.  Fix? yes
 
 Inode 49 was part of the orphaned inode list.  FIXED.
 Inode 14 block 36 conflicts with critical metadata, skipping block checks.
-Illegal block number passed to ext2fs_test_block_bitmap #4294967295 for metadata block map
 Inode 14 has illegal block(s).  Clear? yes
 
 Illegal indirect block (4294967295) in inode 14.  CLEARED.
-Illegal block number passed to ext2fs_test_block_bitmap #4294967295 for metadata block map
 Illegal indirect block (4294967295) in inode 14.  CLEARED.
-Illegal block number passed to ext2fs_test_block_bitmap #4294967295 for metadata block map
 Illegal indirect block (4294967295) in inode 14.  CLEARED.
-Illegal block number passed to ext2fs_test_block_bitmap #4294967295 for metadata block map
 Illegal indirect block (4294967295) in inode 14.  CLEARED.
-Illegal block number passed to ext2fs_test_block_bitmap #4294967295 for metadata block map
 Illegal indirect block (4294967295) in inode 14.  CLEARED.
-Illegal block number passed to ext2fs_test_block_bitmap #4294967295 for metadata block map
 Illegal indirect block (4294967295) in inode 14.  CLEARED.
-Illegal block number passed to ext2fs_test_block_bitmap #4294967295 for metadata block map
 Illegal indirect block (4294967295) in inode 14.  CLEARED.
-Illegal block number passed to ext2fs_test_block_bitmap #4294967295 for metadata block map
 Too many illegal blocks in inode 14.
 Clear inode? yes
 
index 52b69a2..66abd90 100755 (executable)
@@ -14,7 +14,6 @@ gzip -d < $IMAGE > $TMPFILE
 # Run fsck to fix things?
 EXP1=$test_dir/expect.1
 OUT1=$test_name.1.log
-rm -rf $test_name.failed $test_name.ok
 
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE 2>&1 | tail -n +2 > $OUT1
 echo "Exit status is $?" >> $OUT1
index 2a9426d..96fb01a 100644 (file)
@@ -31,8 +31,10 @@ Journal inode:            8
 Default directory hash:   half_md4
 Journal backup:           inode blocks
 Journal features:         (none)
-Journal size:             1024k
-Journal length:           1024
+Total journal size:       1024k
+Total journal blocks:     1024
+Max transaction length:   1024
+Fast commit length:       0
 Journal sequence:         0x00000005
 Journal start:            0
 
index c572951..4134234 100644 (file)
@@ -6,4 +6,4 @@ Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/2048 files (9.1% non-contiguous), 1330/8192 blocks
-Exit status is 1
+Exit status is 0
index 7651fdc..d9bce1c 100644 (file)
@@ -1 +1 @@
-can't allocate extent tree block while recreating journal
+can't allocate extent tree block recreating journal
index a202c80..0a18654 100644 (file)
@@ -59,4 +59,4 @@ Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 53/2048 files (1.9% non-contiguous), 1409/8192 blocks
-Exit status is 1
+Exit status is 0
diff --git a/tests/f_large_dir/expect b/tests/f_large_dir/expect
new file mode 100644 (file)
index 0000000..028234c
--- /dev/null
@@ -0,0 +1,33 @@
+Creating filesystem with 108341 1k blocks and 65072 inodes
+Superblock backups stored on blocks: 
+       8193, 24577, 40961, 57345, 73729
+
+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
+Pass 3: Checking directory connectivity
+Pass 3A: Optimizing directories
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test.img: ***** FILE SYSTEM WAS MODIFIED *****
+test.img: 17/65072 files (5.9% non-contiguous), 9732/108341 blocks
+Exit status is 0
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 3A: Optimizing directories
+Pass 4: Checking reference counts
+Directory exceeds max links, but no DIR_NLINK feature in superblock.
+Fix? yes
+
+Inode 12 ref count is 65012, should be 1.  Fix? yes
+
+Pass 5: Checking group summary information
+
+test.img: ***** FILE SYSTEM WAS MODIFIED *****
+test.img: 65023/65072 files (0.0% non-contiguous), 96666/108341 blocks
+Exit status is 1
diff --git a/tests/f_large_dir/is_slow_test b/tests/f_large_dir/is_slow_test
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/f_large_dir/name b/tests/f_large_dir/name
new file mode 100644 (file)
index 0000000..4b96890
--- /dev/null
@@ -0,0 +1 @@
+optimize 3 level htree directories
diff --git a/tests/f_large_dir/script b/tests/f_large_dir/script
new file mode 100644 (file)
index 0000000..e323583
--- /dev/null
@@ -0,0 +1,90 @@
+OUT=$test_name.log
+EXP=$test_dir/expect
+E2FSCK=../e2fsck/e2fsck
+
+NAMELEN=255
+DIRENT_SZ=8
+BLOCKSZ=1024
+INODESZ=128
+DIRENT_PER_LEAF=$((BLOCKSZ / (NAMELEN + DIRENT_SZ)))
+HEADER=32
+INDEX_SZ=8
+INDEX_L1=$(((BLOCKSZ - HEADER) / INDEX_SZ))
+INDEX_L2=$(((BLOCKSZ - DIRENT_SZ) / INDEX_SZ))
+DIRBLK=$((2 + INDEX_L1 * INDEX_L2))
+ENTRIES=$((DIRBLK * DIRENT_PER_LEAF))
+EXT4_LINK_MAX=65000
+if [ $ENTRIES -lt $((EXT4_LINK_MAX + 10)) ]; then
+       ENTRIES=$((EXT4_LINK_MAX + 10))
+       DIRBLK=$((ENTRIES / DIRENT_PER_LEAF + 3))
+fi
+# directory leaf blocks plus inode count and 25% for the rest of the fs
+FSIZE=$(((DIRBLK + EXT4_LINK_MAX * ((BLOCKSZ + INODESZ) / BLOCKSZ)) * 5 / 4))
+
+$MKE2FS -b 1024 -O large_dir,uninit_bg -N $((ENTRIES + 50)) \
+       -I $INODESZ -F $TMPFILE $FSIZE > $OUT.new 2>&1
+RC=$?
+if [ $RC -eq 0 ]; then
+{
+       # First some initial fs setup to create indexed dir
+       echo "mkdir /foo"
+       echo "cd /foo"
+       touch $TMPFILE.tmp
+       echo "write $TMPFILE.tmp foofile"
+       i=0
+       while test $i -lt $DIRENT_PER_LEAF ; do
+               printf "mkdir d%0254u\n" $i
+               i=$((i + 1));
+       done
+       echo "expand ./"
+       printf "mkdir d%0254u\n" $i
+} | $DEBUGFS -w $TMPFILE > /dev/null 2>> $OUT.new
+       RC=$?
+       # e2fsck should optimize the dir to become indexed
+       $E2FSCK -yfD $TMPFILE >> $OUT.new 2>&1
+       status=$?
+       echo Exit status is $status >> $OUT.new
+fi
+
+if [ $RC -eq 0 ]; then
+{
+       START=$SECONDS
+       i=$(($DIRENT_PER_LEAF+1))
+       last=$i
+       echo "cd /foo"
+       while test $i -lt $ENTRIES ; do
+           ELAPSED=$((SECONDS - START))
+           if test $((i % 5000)) -eq 0 -a $ELAPSED -gt 10; then
+               RATE=$(((i - last) / ELAPSED))
+               echo "$test_name: $i/$ENTRIES links, ${ELAPSED}s @ $RATE/s" >&2
+               START=$SECONDS
+               last=$i
+           fi
+           if test $i -lt $((EXT4_LINK_MAX + 10)); then
+               printf "mkdir d%0254u\n" $i
+           else
+               printf "ln foofile f%0254u\n" $i
+           fi
+           i=$((i + 1))
+       done
+} | $DEBUGFS -w $TMPFILE > /dev/null 2>> $OUT.new
+       RC=$?
+fi
+
+if [ $RC -eq 0 ]; then
+       $E2FSCK -yfD $TMPFILE >> $OUT.new 2>&1
+       status=$?
+       echo Exit status is $status >> $OUT.new
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+       rm -f $OUT.new
+
+       cmp -s $OUT $EXP
+       RC=$?
+fi
+if [ $RC -eq 0 ]; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "$test_name: $test_description: failed"
+       diff -u $EXP $OUT > $test_name.failed
+fi
diff --git a/tests/f_large_dir_csum/expect b/tests/f_large_dir_csum/expect
new file mode 100644 (file)
index 0000000..aa9f33f
--- /dev/null
@@ -0,0 +1,32 @@
+Creating filesystem with 31002 1k blocks and 64 inodes
+Superblock backups stored on blocks: 
+       8193, 24577
+
+Allocating group tables:    \b\b\bdone                            
+Writing inode tables:    \b\b\bdone                            
+Writing superblocks and filesystem accounting information:    \b\b\bdone
+
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 3A: Optimizing directories
+Pass 4: Checking reference counts
+Inode 13 ref count is 1, should be 5.  Fix? yes
+
+Pass 5: Checking group summary information
+
+test.img: ***** FILE SYSTEM WAS MODIFIED *****
+test.img: 13/64 files (0.0% non-contiguous), 766/31002 blocks
+Exit status is 1
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 3A: Optimizing directories
+Pass 4: Checking reference counts
+Inode 13 ref count is 5, should be 46504.  Fix? yes
+
+Pass 5: Checking group summary information
+
+test.img: ***** FILE SYSTEM WAS MODIFIED *****
+test.img: 13/64 files (0.0% non-contiguous), 16390/31002 blocks
+Exit status is 1
diff --git a/tests/f_large_dir_csum/is_slow_test b/tests/f_large_dir_csum/is_slow_test
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/f_large_dir_csum/name b/tests/f_large_dir_csum/name
new file mode 100644 (file)
index 0000000..2b37c8c
--- /dev/null
@@ -0,0 +1 @@
+optimize 3 level htree directories with metadata checksums
diff --git a/tests/f_large_dir_csum/script b/tests/f_large_dir_csum/script
new file mode 100644 (file)
index 0000000..286a965
--- /dev/null
@@ -0,0 +1,84 @@
+OUT=$test_name.log
+EXP=$test_dir/expect
+E2FSCK=../e2fsck/e2fsck
+
+NAMELEN=255
+DIRENT_SZ=8
+BLOCKSZ=1024
+INODESZ=128
+CSUM_SZ=8
+CSUM_TAIL_SZ=12
+DIRENT_PER_LEAF=$(((BLOCKSZ - CSUM_TAIL_SZ) / (NAMELEN + DIRENT_SZ)))
+HEADER=32
+INDEX_SZ=8
+INDEX_L1=$(((BLOCKSZ - HEADER - CSUM_SZ) / INDEX_SZ))
+INDEX_L2=$(((BLOCKSZ - DIRENT_SZ - CSUM_SZ) / INDEX_SZ))
+DIRBLK=$((3 + INDEX_L1 * INDEX_L2))
+ENTRIES=$((DIRBLK * DIRENT_PER_LEAF))
+# directory leaf blocks - get twice as much because the leaves won't be full
+# and there are also other filesystem blocks.
+FSIZE=$((DIRBLK * 2))
+
+$MKE2FS -b 1024 -O extents,64bit,large_dir,uninit_bg,metadata_csum -N 50 \
+       -I $INODESZ -F $TMPFILE $FSIZE > $OUT.new 2>&1
+RC=$?
+if [ $RC -eq 0 ]; then
+{
+       # First some initial fs setup to create indexed dir
+       echo "mkdir /foo"
+       echo "cd /foo"
+       touch $TMPFILE.tmp
+       echo "write $TMPFILE.tmp foofile"
+       i=0
+       while test $i -lt $DIRENT_PER_LEAF ; do
+               printf "ln foofile f%0254u\n" $i
+               i=$((i + 1));
+       done
+       echo "expand ./"
+       printf "ln foofile f%0254u\n" $i
+} | $DEBUGFS -w $TMPFILE > /dev/null 2>> $OUT.new
+       RC=$?
+       # e2fsck should optimize the dir to become indexed
+       $E2FSCK -yfD $TMPFILE >> $OUT.new 2>&1
+       status=$?
+       echo Exit status is $status >> $OUT.new
+fi
+
+if [ $RC -eq 0 ]; then
+{
+       START=$SECONDS
+       i=$(($DIRENT_PER_LEAF+1))
+       last=$i
+       echo "cd /foo"
+       while test $i -lt $ENTRIES ; do
+           ELAPSED=$((SECONDS - START))
+           if test $((i % 5000)) -eq 0 -a $ELAPSED -gt 10; then
+               RATE=$(((i - last) / ELAPSED))
+               echo "$test_name: $i/$ENTRIES links, ${ELAPSED}s @ $RATE/s" >&2
+               START=$SECONDS
+               last=$i
+           fi
+           printf "ln foofile f%0254u\n" $i
+           i=$((i + 1))
+       done
+} | $DEBUGFS -w $TMPFILE > /dev/null 2>> $OUT.new
+       RC=$?
+fi
+
+if [ $RC -eq 0 ]; then
+       $E2FSCK -yfD $TMPFILE >> $OUT.new 2>&1
+       status=$?
+       echo Exit status is $status >> $OUT.new
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+       rm -f $OUT.new
+
+       cmp -s $OUT $EXP
+       RC=$?
+fi
+if [ $RC -eq 0 ]; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "$test_name: $test_description: failed"
+       diff -u $EXP $OUT > $test_name.failed
+fi
index 4f2853c..6ef996b 100644 (file)
@@ -42,6 +42,8 @@ Fix? yes
 Free inodes count wrong (1, counted=0).
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 16/16 files (12.5% non-contiguous), 67/100 blocks
diff --git a/tests/f_many_subdirs/expect.1 b/tests/f_many_subdirs/expect.1
new file mode 100644 (file)
index 0000000..a8da480
--- /dev/null
@@ -0,0 +1,47 @@
+Pass 1: Checking inodes, blocks, and sizes
+Deleted inode 26363 has zero dtime.  Fix? yes
+
+Pass 2: Checking directory structure
+Entry 'nlink_eq_0' in / (2) has deleted/unused inode 26363.  Clear? yes
+
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Inode 2 ref count is 9, should be 8.  Fix? yes
+
+Inode 13201 ref count is 1, should be 2.  Fix? yes
+
+Inode 19763 ref count is 65535, should be 2.  Fix? yes
+
+Directory exceeds max links, but no DIR_NLINK feature in superblock.
+Fix? yes
+
+Inode 32963 ref count is 65000, should be 2.  Fix? yes
+
+Directory inode 39601 ref count set to overflow but could be exact value 2.  Fix? yes
+
+Pass 5: Checking group summary information
+Block bitmap differences:  -73383
+Fix? yes
+
+Free blocks count wrong for group #8 (0, counted=1).
+Fix? yes
+
+Free blocks count wrong (5388, counted=5389).
+Fix? yes
+
+Inode bitmap differences:  -26363
+Fix? yes
+
+Free inodes count wrong for group #3 (37, counted=38).
+Fix? yes
+
+Directories count wrong for group #3 (6563, counted=6562).
+Fix? yes
+
+Free inodes count wrong (382, counted=383).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 65617/66000 files (0.0% non-contiguous), 76531/81920 blocks
+Exit status is 1
diff --git a/tests/f_many_subdirs/expect.2 b/tests/f_many_subdirs/expect.2
new file mode 100644 (file)
index 0000000..bb0d829
--- /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: 65617/66000 files (0.0% non-contiguous), 76531/81920 blocks
+Exit status is 0
diff --git a/tests/f_many_subdirs/image.gz b/tests/f_many_subdirs/image.gz
new file mode 100644 (file)
index 0000000..7f60fff
Binary files /dev/null and b/tests/f_many_subdirs/image.gz differ
diff --git a/tests/f_many_subdirs/name b/tests/f_many_subdirs/name
new file mode 100644 (file)
index 0000000..6264a60
--- /dev/null
@@ -0,0 +1 @@
+directory with more than 65000 sub-directories
index 0e6d3cd..7ce8c5c 100644 (file)
@@ -7,20 +7,18 @@ status=$?
 if [ "$status" != 0 ]; then
     echo "$test_name: $test_description: skip"
     touch $test_name.ok
-    exit 0
-fi   
-
-echo mke2fs /dev/mapper/bad_disk  >> $OUT
-$MKE2FS  /dev/mapper/bad_disk  >> $OUT 2>&1
-status=$?
-sleep 1
-dmsetup remove --retry bad_disk >> $OUT 2>&1
-
-if [ "$status" = 0 ] ; then
-    ln -f $test_name.log $test_name.failed
-    echo "$test_name: $test_description: failed"
 else
-    echo "$test_name: $test_description: ok"
-    touch $test_name.ok
+    echo mke2fs /dev/mapper/bad_disk  >> $OUT
+    $MKE2FS  /dev/mapper/bad_disk  >> $OUT 2>&1
+    status=$?
+    sleep 1
+    dmsetup remove --retry bad_disk >> $OUT 2>&1
 
+    if [ "$status" = 0 ] ; then
+       ln -f $test_name.log $test_name.failed
+       echo "$test_name: $test_description: failed"
+    else
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+    fi
 fi
diff --git a/tests/f_mmp/is_slow_test b/tests/f_mmp/is_slow_test
new file mode 100644 (file)
index 0000000..e69de29
index 9ff16c9..f433bd5 100644 (file)
@@ -1,16 +1,5 @@
 FSCK_OPT=-yf
 
-# use current directory instead of /tmp becase tmpfs doesn't support DIO
-rm -f $TMPFILE
-TMPFILE=$(mktemp ./tmp-$test_name.XXXXXX)
-
-stat -f $TMPFILE | grep -q "Type: tmpfs"
-if [ $? = 0 ]; then
-       rm -f $TMPFILE
-       echo "$test_name: $test_description: skipped for tmpfs (no O_DIRECT)"
-       return 0
-fi
-
 echo "make the test image ..." > $test_name.log
 $MKE2FS -q -F -o Linux -b 4096 -O mmp -E mmp_update_interval=1 $TMPFILE 100 >> $test_name.log 2>&1
 status=$?
@@ -43,6 +32,13 @@ rm -f $MARKFILE
 echo "kill debugfs abruptly (simulates e2fsck failure) ..." >> $test_name.log
 kill_debugfs
 
+$E2MMPSTATUS $TMPFILE > $test_name.log 2>&1
+status=$?
+if [ "$status" != 1 ] ; then
+       echo "$E2MMPSTATUS with EXT2_MMP_SEQ_FSCK passed!" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return 1
+fi
 
 echo "e2fsck (should fail mmp_seq = EXT2_MMP_SEQ_FSCK) ..." >> $test_name.log
 $FSCK $FSCK_OPT $TMPFILE >> $test_name.log 2>&1
diff --git a/tests/f_mmp_garbage/is_slow_test b/tests/f_mmp_garbage/is_slow_test
new file mode 100644 (file)
index 0000000..e69de29
index 6d451a6..69be338 100644 (file)
@@ -1,16 +1,5 @@
 FSCK_OPT=-yf
 
-# use current directory instead of /tmp becase tmpfs doesn't support DIO
-rm -f $TMPFILE
-TMPFILE=$(mktemp ./tmp-$test_name.XXXXXX)
-
-stat -f $TMPFILE | grep -q "Type: tmpfs"
-if [ $? = 0 ] ; then
-       rm -f $TMPFILE
-       echo "$test_name: $test_description: skipped for tmpfs (no O_DIRECT)"
-       return 0
-fi
-
 echo "make the test image ..." > $test_name.log
 $MKE2FS -q -F -o Linux -b 4096 -O mmp -E mmp_update_interval=1 $TMPFILE 100 >> $test_name.log 2>&1
 status=$?
index e7b619d..140a01f 100644 (file)
@@ -12,6 +12,8 @@ Clear<y>? no
 Inode 13 has an invalid extent
        (logical block 0, invalid physical block 888888888888, len 1)
 Clear<y>? no
+Inodes that were part of a corrupted orphan linked list found.  Fix<y>? no
+Inode 14 was part of the orphaned inode list.  IGNORED.
 Inode 14 is in use, but has dtime set.  Fix<y>? no
 Inode 14 has an invalid extent
        (logical block 300, invalid physical block 777777777777, len 300)
index 2a67e77..c046d76 100644 (file)
@@ -5,11 +5,10 @@ EXP=$test_dir/expect
 
 gunzip < $test_dir/../f_yesall/image.gz > $TMPFILE
 
-rm -rf $OUT
 echo "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn" | E2FSCK_FORCE_INTERACTIVE=y $FSCK $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
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
 rm -f $OUT.new
 
 cmp -s $OUT $EXP
index 6d4863b..9d2021e 100644 (file)
@@ -26,16 +26,16 @@ Pass 5: Checking group summary information
 
 
 Change in FS metadata:
-@@ -10,7 +10,7 @@
- Inode count:              65536
+@@ -11,7 +11,7 @@
  Block count:              524288
  Reserved block count:     26214
+ Overhead clusters:        35246
 -Free blocks:              570
 +Free blocks:              567
  Free inodes:              65047
  First block:              1
  Block size:               1024
-@@ -47,8 +47,8 @@
+@@ -50,8 +50,8 @@
    Block bitmap at 262 (+261)
    Inode bitmap at 278 (+277)
    Inode table at 294-549 (+293)
index 2da5e91..8366983 100644 (file)
@@ -22,7 +22,7 @@ ENDL
 echo "tune2fs metadata_csum test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h $TMPFILE 524288 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
 $DUMPE2FS $TMPFILE 2> /dev/null | grep '^Group 0:' -B99 -A20 | sed -f $cmd_dir/filter.sed > $OUT.before
@@ -47,7 +47,7 @@ rm $TMPFILE $OUT.before $OUT.after
 # Do the verification
 #
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" -e 's/test_filesys:.*//g' < $OUT > $OUT.new
+sed -f $cmd_dir/filter.sed -e 's/test_filesys:.*//g' < $OUT > $OUT.new
 mv $OUT.new $OUT
 
 cmp -s $OUT $EXP
index 931eae7..51fbcee 100644 (file)
@@ -23,7 +23,7 @@ ENDL
 echo "rebuild extent metadata_csum test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h $TMPFILE 524288 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
 $DUMPE2FS $TMPFILE 2> /dev/null | grep '^Group 0:' -B99 -A20 | sed -f $cmd_dir/filter.sed > $OUT.before
@@ -48,7 +48,7 @@ rm $TMPFILE $OUT.before $OUT.after
 # Do the verification
 #
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" -e 's/test_filesys:.*//g' < $OUT > $OUT.new
+sed -f $cmd_dir/filter.sed -e 's/test_filesys:.*//g' < $OUT > $OUT.new
 mv $OUT.new $OUT
 
 cmp -s $OUT $EXP
index eddc1f8..087ebee 100644 (file)
@@ -11,4 +11,4 @@ Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 12/2048 files (0.0% non-contiguous), 1303/8192 blocks
-Exit status is 1
+Exit status is 0
index 2eaab78..5d713b3 100644 (file)
@@ -7,4 +7,4 @@ Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 12/16 files (0.0% non-contiguous), 21/100 blocks
-Exit status is 1
+Exit status is 0
diff --git a/tests/f_orphquot/expect b/tests/f_orphquot/expect
new file mode 100644 (file)
index 0000000..90a7813
--- /dev/null
@@ -0,0 +1,10 @@
+Clearing orphaned inode 12 (uid=0, gid=0, mode=0100644, size=3842048)
+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_filesystem: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesystem: 11/512 files (9.1% non-contiguous), 1070/2048 blocks
+Exit status is 0
diff --git a/tests/f_orphquot/image.bz2 b/tests/f_orphquot/image.bz2
new file mode 100644 (file)
index 0000000..44c8318
Binary files /dev/null and b/tests/f_orphquot/image.bz2 differ
diff --git a/tests/f_orphquot/script b/tests/f_orphquot/script
new file mode 100644 (file)
index 0000000..acdf567
--- /dev/null
@@ -0,0 +1,26 @@
+test_description="e2fsck with quota and orphan inodes"
+OUT=$test_name.log
+EXP=$test_dir/expect
+
+bzip2 -dc < $test_dir/image.bz2 > $TMPFILE
+
+rm -rf $OUT
+$FSCK -f -y -N test_filesystem $TMPFILE > $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+rm -f $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
+       rm -f tmp_expect
+fi
+
+unset IMAGE FSCK_OPT OUT EXP
index e5b93f0..bc8f2a8 100644 (file)
@@ -13,6 +13,8 @@ Pass 5: Checking group summary information
 Inode bitmap differences:  -(12--21)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/32 files (0.0% non-contiguous), 22/100 blocks
index 06ff98a..952e550 100644 (file)
@@ -18,7 +18,7 @@ create_file_with_xtime_and_extra() {
                        echo "set_inode_field $name $xtime @$time"
                        echo "set_inode_field $name ${xtime}_extra $extra"
                done
-       } | $DEBUGFS -w -f /dev/stdin $TMPFILE >> $OUT 2>&1
+       } | $DEBUGFS -w $TMPFILE >> $OUT 2>&1
 }
 
 get_file_xtime_and_extra() {
diff --git a/tests/f_quota_extent_opt/expect.1 b/tests/f_quota_extent_opt/expect.1
new file mode 100644 (file)
index 0000000..002c9b6
--- /dev/null
@@ -0,0 +1,15 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 12 extent tree (at level 1) could be narrower.  Optimize? yes
+
+Pass 1E: Optimizing extent trees
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+[QUOTA WARNING] Usage inconsistent for ID 0:actual (147456, 3) != expected (148480, 3)
+Update quota info for quota type 0? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/1024 files (25.0% non-contiguous), 1339/4096 blocks
+Exit status is 1
diff --git a/tests/f_quota_extent_opt/expect.2 b/tests/f_quota_extent_opt/expect.2
new file mode 100644 (file)
index 0000000..0bd4632
--- /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/1024 files (25.0% non-contiguous), 1339/4096 blocks
+Exit status is 0
diff --git a/tests/f_quota_extent_opt/image.gz b/tests/f_quota_extent_opt/image.gz
new file mode 100644 (file)
index 0000000..21dcfbd
Binary files /dev/null and b/tests/f_quota_extent_opt/image.gz differ
diff --git a/tests/f_quota_extent_opt/name b/tests/f_quota_extent_opt/name
new file mode 100644 (file)
index 0000000..8c5d7a9
--- /dev/null
@@ -0,0 +1 @@
+extent optimization with quota
diff --git a/tests/f_quota_invalid_inum/expect.1 b/tests/f_quota_invalid_inum/expect.1
new file mode 100644 (file)
index 0000000..322ac09
--- /dev/null
@@ -0,0 +1,15 @@
+Invalid user quota inode 808464432.  Fix? yes
+
+Invalid group quota inode 808464432.  Fix? yes
+
+Invalid project quota inode 808464432.  Fix? yes
+
+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: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 11/16 files (0.0% non-contiguous), 21/100 blocks
+Exit status is 1
diff --git a/tests/f_quota_invalid_inum/expect.2 b/tests/f_quota_invalid_inum/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_quota_invalid_inum/image.gz b/tests/f_quota_invalid_inum/image.gz
new file mode 100644 (file)
index 0000000..28be80e
Binary files /dev/null and b/tests/f_quota_invalid_inum/image.gz differ
diff --git a/tests/f_quota_invalid_inum/name b/tests/f_quota_invalid_inum/name
new file mode 100644 (file)
index 0000000..a742406
--- /dev/null
@@ -0,0 +1 @@
+invalid quota inode numbers
index d46c5a8..528199d 100644 (file)
@@ -7,8 +7,6 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 
 gzip -d < $test_dir/image.gz > $TMPFILE
@@ -18,18 +16,17 @@ old="$($CRCSUM < $TMPFILE)"
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 new="$($CRCSUM < $TMPFILE)"
 
 if [ "${old}" != "${new}" ]; then
-       echo "ERROR: crc mismatch!  ${old} ${new}" >> $OUT
+       echo "ERROR: crc mismatch!  ${old} ${new}" >> $OUT.new
 else
-       echo "crc did not change.  ${old}" >> $OUT
+       echo "crc did not change.  ${old}" >> $OUT.new
 fi
 
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
index 4df58f9..bab07e0 100644 (file)
@@ -1,8 +1,5 @@
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
-Directory inode 2, block #0, offset 0: directory has no checksum.
-Fix? yes
-
 Directory inode 2, block #0, offset 0: directory corrupted
 Salvage? yes
 
index b246f48..5ea2097 100644 (file)
@@ -1 +1 @@
-force fsck to rebuild a corrupted rootdir w/ metadata_csum
+force rebuild corrupted rootdir w/ metadata_csum
index 8ba81e6..d4f72a1 100644 (file)
@@ -3,7 +3,7 @@ Pass 2: Checking directory structure
 i_faddr for inode 15 (/test/quux) is 23, should be zero.
 Clear? yes
 
-i_dir_acl for inode 15 (/test/quux) is 12, should be zero.
+i_size_high for inode 15 (/test/quux) is 12, should be zero.
 Clear? yes
 
 i_file_acl for inode 13 (/test/???) is 12, should be zero.
index 6076765..c1449ba 100644 (file)
@@ -7,4 +7,4 @@ Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 105/2048 files (2.9% non-contiguous), 336/512 blocks
-Exit status is 1
+Exit status is 0
index 190871b..58915a7 100644 (file)
@@ -1,6 +1,9 @@
-if test -x $DEBUGFS_EXE; then
-
 test_description="e2fsck with resize_inode"
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
+
 FSCK_OPT=-yf
 OUT=$test_name.log
 if [ -f $test_dir/expect.gz ]; then
@@ -10,120 +13,93 @@ else
        EXP=$test_dir/expect
 fi
 
-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 -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo mke2fs -F -O resize_inode -o Linux -b 1024 -g 1024 test.img 16384 > $OUT.new
+$MKE2FS -F -O resize_inode -o Linux -b 1024 -g 1024 $TMPFILE 16384 >> $OUT.new 2>&1
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-echo ----------------------------------------------- >> $OUT
+echo ----------------------------------------------- >> $OUT.new
 
-echo " " >> $OUT
-echo "debugfs -R ''set_inode_field <7> block[2] 42'' -w test.img" > $OUT.new
+echo " " >> $OUT.new
+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 -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $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
-rm -f $OUT.new
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $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
-rm -f $OUT.new
 
-echo ----------------------------------------------- >> $OUT
+echo ----------------------------------------------- >> $OUT.new
 
-echo " " >> $OUT
-echo "debugfs -R ''clri <7>'' -w test.img" > $OUT.new
+echo " " >> $OUT.new
+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 -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $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
-rm -f $OUT.new
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $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
-rm -f $OUT.new
 
-echo ----------------------------------------------- >> $OUT
+echo ----------------------------------------------- >> $OUT.new
 
-echo " " >> $OUT
-echo "debugfs -R ''set_inode_field <7> bmap[524] 57'' -w test.img" > $OUT.new
+echo " " >> $OUT.new
+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 -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $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
-rm -f $OUT.new
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $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
-rm -f $OUT.new
 
-echo ----------------------------------------------- >> $OUT
+echo ----------------------------------------------- >> $OUT.new
 
-echo " " >> $OUT
-echo "debugfs -R ''set_super_value reserved_gdt_blocks 15679'' -w test.img" > $OUT.new
+echo " " >> $OUT.new
+echo "debugfs -R ''set_super_value reserved_gdt_blocks 15679'' -w test.img" >> $OUT.new
 $DEBUGFS -R "set_super_value reserved_gdt_blocks 15679" -w $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $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
-rm -f $OUT.new
 
-echo ----------------------------------------------- >> $OUT
+echo ----------------------------------------------- >> $OUT.new
 
-echo " " >> $OUT
-echo "debugfs -R ''set_super_value reserved_gdt_blocks 32'' -w test.img" > $OUT.new
+echo " " >> $OUT.new
+echo "debugfs -R ''set_super_value reserved_gdt_blocks 32'' -w test.img" >> $OUT.new
 $DEBUGFS -R "set_super_value reserved_gdt_blocks 32" -w $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $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
-rm -f $OUT.new
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $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
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
 rm -f $OUT.new
 
-
 cmp -s $OUT $EXP
 status=$?
 
@@ -137,7 +113,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi 
diff --git a/tests/f_resize_inode_meta_bg/expect.1 b/tests/f_resize_inode_meta_bg/expect.1
new file mode 100644 (file)
index 0000000..c733c18
--- /dev/null
@@ -0,0 +1,74 @@
+Resize_inode and meta_bg features are enabled. Those features are
+not compatible. Resize inode should be disabled.  Fix? yes
+
+Resize_inode not enabled, but the resize inode is non-zero.  Clear? yes
+
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+First entry '' (inode=348) in directory inode 2 (???) should be '.'
+Fix? yes
+
+Setting filetype for entry '.' in ??? (2) to 2.
+Missing '..' in directory inode 2.
+Fix? yes
+
+Setting filetype for entry '..' in ??? (2) to 2.
+Directory inode 2, block #0, offset 860: directory corrupted
+Salvage? yes
+
+Entry '' in ??? (2) has rec_len of 0, should be 12.
+Fix? yes
+
+Directory inode 11, block #0, offset 0: directory corrupted
+Salvage? yes
+
+Missing '.' in directory inode 11.
+Fix? yes
+
+Setting filetype for entry '.' in ??? (11) to 2.
+Missing '..' in directory inode 11.
+Fix? yes
+
+Setting filetype for entry '..' in ??? (11) to 2.
+Directory inode 11, block #1, offset 0: directory corrupted
+Salvage? yes
+
+Directory inode 11, block #2, offset 0: directory corrupted
+Salvage? yes
+
+Entry '' in ??? (11) has a zero-length name.
+Clear? yes
+
+Directory inode 11, block #3, offset 864: directory corrupted
+Salvage? yes
+
+Entry '' in ??? (11) has rec_len of 0, should be 12.
+Fix? yes
+
+Pass 3: Checking directory connectivity
+'..' in / (2) is <The NULL inode> (0), should be / (2).
+Fix? yes
+
+Unconnected directory inode 11 (/???)
+Connect to /lost+found? yes
+
+/lost+found not found.  Create? yes
+
+Pass 3A: Optimizing directories
+Pass 4: Checking reference counts
+Inode 11 ref count is 3, should be 2.  Fix? yes
+
+Pass 5: Checking group summary information
+Block bitmap differences:  -246
+Fix? yes
+
+Free blocks count wrong for group #0 (160, counted=161).
+Fix? yes
+
+Free blocks count wrong (2714, counted=2715).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/960 files (0.0% non-contiguous), 1125/3840 blocks
+Exit status is 1
diff --git a/tests/f_resize_inode_meta_bg/expect.2 b/tests/f_resize_inode_meta_bg/expect.2
new file mode 100644 (file)
index 0000000..0df9a40
--- /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/960 files (0.0% non-contiguous), 1125/3840 blocks
+Exit status is 0
diff --git a/tests/f_resize_inode_meta_bg/image.gz b/tests/f_resize_inode_meta_bg/image.gz
new file mode 100644 (file)
index 0000000..9966a7c
Binary files /dev/null and b/tests/f_resize_inode_meta_bg/image.gz differ
diff --git a/tests/f_resize_inode_meta_bg/name b/tests/f_resize_inode_meta_bg/name
new file mode 100644 (file)
index 0000000..9493654
--- /dev/null
@@ -0,0 +1 @@
+conflicting features resize_inode and meta_bg
diff --git a/tests/f_shared_blocks_ok/expect.1 b/tests/f_shared_blocks_ok/expect.1
new file mode 100644 (file)
index 0000000..de4363b
--- /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: 13/32 files (0.0% non-contiguous), 12/64 blocks
+Exit status is 0
diff --git a/tests/f_shared_blocks_ok/expect.2 b/tests/f_shared_blocks_ok/expect.2
new file mode 100644 (file)
index 0000000..de4363b
--- /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: 13/32 files (0.0% non-contiguous), 12/64 blocks
+Exit status is 0
diff --git a/tests/f_shared_blocks_ok/image.gz b/tests/f_shared_blocks_ok/image.gz
new file mode 100644 (file)
index 0000000..db747e2
Binary files /dev/null and b/tests/f_shared_blocks_ok/image.gz differ
diff --git a/tests/f_shared_blocks_ok/name b/tests/f_shared_blocks_ok/name
new file mode 100644 (file)
index 0000000..c77dbbd
--- /dev/null
@@ -0,0 +1 @@
+clean check for intentionally shared blocks
index bc64922..29e1625 100644 (file)
@@ -13,5 +13,5 @@ Inode 13 ref count is 2, should be 1.  Fix? yes
 Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 13/16 files (0.0% non-contiguous), 23/100 blocks
+test_filesys: 13/16 files (0.0% non-contiguous), 24/100 blocks
 Exit status is 1
index 636c6e9..1ebd598 100644 (file)
@@ -3,5 +3,5 @@ Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 13/16 files (0.0% non-contiguous), 23/100 blocks
+test_filesys: 13/16 files (0.0% non-contiguous), 24/100 blocks
 Exit status is 0
index a35bfb2..7eb1c95 100644 (file)
Binary files a/tests/f_short_encrypted_dirent/image.gz and b/tests/f_short_encrypted_dirent/image.gz differ
index 25ced5c..12adee9 100644 (file)
@@ -5,8 +5,8 @@ Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-Inode bitmap differences: Group 1 inode bitmap does not match checksum.
-FIXED.
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/1024 files (0.0% non-contiguous), 1557/16384 blocks
index cfd4189..5c89962 100755 (executable)
@@ -9,7 +9,7 @@ bzip2 -d < $IMAGE > $TMPFILE
 # Run fsck to fix things?
 EXP1=$test_dir/expect.1
 OUT1=$test_name.1.log
-rm -rf $test_name.failed $test_name.ok
+rm -f $test_name.failed $test_name.ok
 
 $FSCK $FSCK_OPT $TMPFILE 2>&1 | head -n 1000 | tail -n +2 > $OUT1
 echo "Exit status is $?" >> $OUT1
diff --git a/tests/f_uninit_bad_free_inodes/expect.1 b/tests/f_uninit_bad_free_inodes/expect.1
new file mode 100644 (file)
index 0000000..23d7b1f
--- /dev/null
@@ -0,0 +1,25 @@
+Group descriptor 1 has invalid unused inodes count 2048.  Fix? yes
+
+Group descriptor 2 has invalid unused inodes count 1344.  Fix? yes
+
+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
+Free inodes count wrong for group #1 (490, counted=2048).
+Fix? yes
+
+Free inodes count wrong for group #2 (250, counted=1344).
+Fix? yes
+
+Free inodes count wrong for group #3 (1967, counted=1969).
+Fix? yes
+
+Free inodes count wrong (4744, counted=7398).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 794/8192 files (0.4% non-contiguous), 8473/32768 blocks
+Exit status is 1
diff --git a/tests/f_uninit_bad_free_inodes/expect.2 b/tests/f_uninit_bad_free_inodes/expect.2
new file mode 100644 (file)
index 0000000..431227b
--- /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: 794/8192 files (0.4% non-contiguous), 8473/32768 blocks
+Exit status is 0
diff --git a/tests/f_uninit_bad_free_inodes/image.gz b/tests/f_uninit_bad_free_inodes/image.gz
new file mode 100644 (file)
index 0000000..3e6218b
Binary files /dev/null and b/tests/f_uninit_bad_free_inodes/image.gz differ
diff --git a/tests/f_uninit_bad_free_inodes/name b/tests/f_uninit_bad_free_inodes/name
new file mode 100644 (file)
index 0000000..8bd3180
--- /dev/null
@@ -0,0 +1 @@
+bad free inode count, but good checksum
diff --git a/tests/f_uninit_blk_used_not_set/expect.1 b/tests/f_uninit_blk_used_not_set/expect.1
new file mode 100644 (file)
index 0000000..9e473f8
--- /dev/null
@@ -0,0 +1,34 @@
+Group descriptor 1 has invalid unused inodes count 2048.  Fix? yes
+
+Group descriptor 2 has invalid unused inodes count 2048.  Fix? yes
+
+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
+Group 1 block(s) in use but group is marked BLOCK_UNINIT
+Fix? yes
+
+Block bitmap differences:  +(8585--8777)
+Fix? yes
+
+Free blocks count wrong for group #2 (0, counted=7934).
+Fix? yes
+
+Free blocks count wrong (19530, counted=27464).
+Fix? yes
+
+Free inodes count wrong for group #1 (0, counted=2048).
+Fix? yes
+
+Free inodes count wrong for group #2 (0, counted=2048).
+Fix? yes
+
+Free inodes count wrong (4084, counted=8180).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/8192 files (8.3% non-contiguous), 5304/32768 blocks
+Exit status is 1
diff --git a/tests/f_uninit_blk_used_not_set/expect.2 b/tests/f_uninit_blk_used_not_set/expect.2
new file mode 100644 (file)
index 0000000..17d0cfa
--- /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/8192 files (8.3% non-contiguous), 5304/32768 blocks
+Exit status is 0
diff --git a/tests/f_uninit_blk_used_not_set/image.gz b/tests/f_uninit_blk_used_not_set/image.gz
new file mode 100644 (file)
index 0000000..6316285
Binary files /dev/null and b/tests/f_uninit_blk_used_not_set/image.gz differ
diff --git a/tests/f_uninit_blk_used_not_set/name b/tests/f_uninit_blk_used_not_set/name
new file mode 100644 (file)
index 0000000..e6ee718
--- /dev/null
@@ -0,0 +1 @@
+blocks used but block uninit set
index 8877566..31a1988 100755 (executable)
@@ -1,6 +1,9 @@
 #!/bin/bash
 
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 FSCK_OPT=-fy
 IMAGE=$test_dir/image.gz
 
@@ -10,18 +13,17 @@ gzip -d < $IMAGE > $TMPFILE
 # Run fsck to fix things?
 EXP=$test_dir/expect
 OUT=$test_name.log
-rm -rf $test_name.failed $test_name.ok
 
-$FSCK $FSCK_OPT -N test_filesys $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed > $OUT
-echo "Exit status is $?" >> $OUT
+$FSCK $FSCK_OPT -N test_filesys $TMPFILE > $OUT.new 2>&1
+echo "Exit status is $?" >> $OUT.new
 
-echo "debugfs cat uninit file" >> $OUT
+echo "debugfs cat uninit file" >> $OUT.new
 echo "ex /a" > $TMPFILE.cmd
 echo "cat /a" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 echo >> $OUT.new
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new $TMPFILE $TMPFILE.cmd
+sed -f $cmd_dir/filter.sed < $OUT.new > $OUT
+rm -f $OUT.new $TMPFILE $TMPFILE.cmd
 
 # Figure out what happened
 if cmp -s $EXP $OUT; then
@@ -32,6 +34,3 @@ else
        diff -u $EXP $OUT >> $test_name.failed
 fi
 unset EXP OUT FSCK_OPT IMAGE
-else #if test -a -x $DEBUGFS_EXE; then
-        echo "$test_name: $test_description: skipped"
-fi 
diff --git a/tests/f_uninit_checksum_bad/expect.1 b/tests/f_uninit_checksum_bad/expect.1
new file mode 100644 (file)
index 0000000..4ff8a8b
--- /dev/null
@@ -0,0 +1,29 @@
+One or more block group descriptor checksums are invalid.  Fix? yes
+
+Group descriptor 1 checksum is 0xbbaa, should be 0xff0b.  FIXED.
+Group descriptor 2 has invalid unused inodes count 2048.  Fix? yes
+
+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
+Free blocks count wrong for group #2 (0, counted=7934).
+Fix? yes
+
+Free blocks count wrong (19286, counted=27220).
+Fix? yes
+
+Free inodes count wrong for group #1 (0, counted=2048).
+Fix? yes
+
+Free inodes count wrong for group #2 (0, counted=2048).
+Fix? yes
+
+Free inodes count wrong (4085, counted=8181).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 11/8192 files (0.0% non-contiguous), 5548/32768 blocks
+Exit status is 1
diff --git a/tests/f_uninit_checksum_bad/expect.2 b/tests/f_uninit_checksum_bad/expect.2
new file mode 100644 (file)
index 0000000..38f2334
--- /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/8192 files (0.0% non-contiguous), 5548/32768 blocks
+Exit status is 0
diff --git a/tests/f_uninit_checksum_bad/image.gz b/tests/f_uninit_checksum_bad/image.gz
new file mode 100644 (file)
index 0000000..8e91e01
Binary files /dev/null and b/tests/f_uninit_checksum_bad/image.gz differ
diff --git a/tests/f_uninit_checksum_bad/name b/tests/f_uninit_checksum_bad/name
new file mode 100644 (file)
index 0000000..b9e4a31
--- /dev/null
@@ -0,0 +1 @@
+invalid group descriptor checksum
diff --git a/tests/f_uninit_disable/expect.1 b/tests/f_uninit_disable/expect.1
new file mode 100644 (file)
index 0000000..f568bec
--- /dev/null
@@ -0,0 +1,10 @@
+Group descriptor 0 marked uninitialized without feature set.
+Fix? yes
+
+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/2048 files (0.0% non-contiguous), 306/8192 blocks
+Exit status is 1
diff --git a/tests/f_uninit_disable/expect.2 b/tests/f_uninit_disable/expect.2
new file mode 100644 (file)
index 0000000..4cd9aa9
--- /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/2048 files (0.0% non-contiguous), 306/8192 blocks
+Exit status is 0
diff --git a/tests/f_uninit_disable/image.gz b/tests/f_uninit_disable/image.gz
new file mode 100644 (file)
index 0000000..38c7455
Binary files /dev/null and b/tests/f_uninit_disable/image.gz differ
diff --git a/tests/f_uninit_disable/name b/tests/f_uninit_disable/name
new file mode 100644 (file)
index 0000000..494b472
--- /dev/null
@@ -0,0 +1 @@
+disable uninit_bg feature
diff --git a/tests/f_uninit_enable/expect.1 b/tests/f_uninit_enable/expect.1
new file mode 100644 (file)
index 0000000..02801bf
--- /dev/null
@@ -0,0 +1,10 @@
+One or more block group descriptor checksums are invalid.  Fix? yes
+
+Group descriptor 0 checksum is 0x0000, should be 0x13f6.  FIXED.
+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/2048 files (0.0% non-contiguous), 306/8192 blocks
+Exit status is 1
diff --git a/tests/f_uninit_enable/expect.2 b/tests/f_uninit_enable/expect.2
new file mode 100644 (file)
index 0000000..4cd9aa9
--- /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/2048 files (0.0% non-contiguous), 306/8192 blocks
+Exit status is 0
diff --git a/tests/f_uninit_enable/image.gz b/tests/f_uninit_enable/image.gz
new file mode 100644 (file)
index 0000000..4da79c9
Binary files /dev/null and b/tests/f_uninit_enable/image.gz differ
diff --git a/tests/f_uninit_enable/name b/tests/f_uninit_enable/name
new file mode 100644 (file)
index 0000000..a818f5c
--- /dev/null
@@ -0,0 +1 @@
+enable uninit_bg feature
index 352a0f5..025cc44 100644 (file)
@@ -1 +1 @@
-fallocated extents after nonzero i_size and total extents > 4
+fallocate extents w/ nonzero i_size and extents > 4
diff --git a/tests/f_uninit_inode_past_unused/expect.1 b/tests/f_uninit_inode_past_unused/expect.1
new file mode 100644 (file)
index 0000000..1cf5c85
--- /dev/null
@@ -0,0 +1,27 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Entry 'foo' in / (2) references inode 14 found in group 0's unused inodes area.
+Fix? yes
+
+Restarting e2fsck from the beginning...
+One or more block group descriptor checksums are invalid.  Fix? yes
+
+Group descriptor 0 checksum is 0x4c72, should be 0xde74.  FIXED.
+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
+Inode bitmap differences:  -12
+Fix? yes
+
+Free inodes count wrong for group #0 (2037, counted=2035).
+Fix? yes
+
+Free inodes count wrong (4073, counted=2035).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 13/2048 files (0.0% non-contiguous), 1336/8192 blocks
+Exit status is 1
diff --git a/tests/f_uninit_inode_past_unused/expect.2 b/tests/f_uninit_inode_past_unused/expect.2
new file mode 100644 (file)
index 0000000..bdb029e
--- /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: 13/2048 files (0.0% non-contiguous), 1336/8192 blocks
+Exit status is 0
diff --git a/tests/f_uninit_inode_past_unused/image.gz b/tests/f_uninit_inode_past_unused/image.gz
new file mode 100644 (file)
index 0000000..9104a70
Binary files /dev/null and b/tests/f_uninit_inode_past_unused/image.gz differ
diff --git a/tests/f_uninit_inode_past_unused/name b/tests/f_uninit_inode_past_unused/name
new file mode 100644 (file)
index 0000000..95d07f1
--- /dev/null
@@ -0,0 +1 @@
+inode in use beyond bg_itable_unused
index 376c978..53105a4 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 SKIP_GUNZIP="true"
 
@@ -20,7 +23,3 @@ export E2FSCK_TIME
 . $cmd_dir/run_e2fsck
 
 unset E2FSCK_TIME
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi 
diff --git a/tests/f_uninit_restart_fsck/expect.1 b/tests/f_uninit_restart_fsck/expect.1
new file mode 100644 (file)
index 0000000..d396beb
--- /dev/null
@@ -0,0 +1,36 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Entry 'foo2' in /d1 (1881) references inode 500 found in group 0's unused inodes area.
+Fix? yes
+
+Entry 'foo2' in /d1 (1881) has an incorrect filetype (was 1, should be 0).
+Fix? yes
+
+Entry 'bar2' in /d2 (3761) references inode 2100 found in group 1's unused inodes area.
+Fix? yes
+
+Entry 'bar2' in /d2 (3761) has an incorrect filetype (was 1, should be 0).
+Fix? yes
+
+Restarting e2fsck from the beginning...
+One or more block group descriptor checksums are invalid.  Fix? yes
+
+Group descriptor 0 checksum is 0xb92b, should be 0x2b5f.  FIXED.
+Group descriptor 1 checksum is 0x2f53, should be 0x8d2f.  FIXED.
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Entry 'foo2' in /d1 (1881) has deleted/unused inode 500.  Clear? yes
+
+Entry 'bar2' in /d2 (3761) has deleted/unused inode 2100.  Clear? yes
+
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Unattached zero-length inode 1883.  Clear? yes
+
+Unattached zero-length inode 3763.  Clear? yes
+
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 21/7520 files (0.0% non-contiguous), 2352/30000 blocks
+Exit status is 1
diff --git a/tests/f_uninit_restart_fsck/expect.2 b/tests/f_uninit_restart_fsck/expect.2
new file mode 100644 (file)
index 0000000..156eb07
--- /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: 21/7520 files (0.0% non-contiguous), 2352/30000 blocks
+Exit status is 0
diff --git a/tests/f_uninit_restart_fsck/image.gz b/tests/f_uninit_restart_fsck/image.gz
new file mode 100644 (file)
index 0000000..f073186
Binary files /dev/null and b/tests/f_uninit_restart_fsck/image.gz differ
diff --git a/tests/f_uninit_restart_fsck/name b/tests/f_uninit_restart_fsck/name
new file mode 100644 (file)
index 0000000..def2234
--- /dev/null
@@ -0,0 +1 @@
+re-start e2fsck only once for inodes in uninit space
diff --git a/tests/f_uninit_set_inode_not_set/expect.1 b/tests/f_uninit_set_inode_not_set/expect.1
new file mode 100644 (file)
index 0000000..4ea3f10
--- /dev/null
@@ -0,0 +1,25 @@
+Group descriptor 1 has invalid unused inodes count 1464.  Fix? yes
+
+Group descriptor 2 has invalid unused inodes count 1849.  Fix? yes
+
+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
+Group 1 block(s) in use but group is marked BLOCK_UNINIT
+Fix? yes
+
+Block bitmap differences:  +(9729--14621)
+Fix? yes
+
+Free inodes count wrong for group #1 (0, counted=1464).
+Fix? yes
+
+Free inodes count wrong for group #2 (0, counted=1849).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 794/8192 files (0.3% non-contiguous), 8473/32768 blocks
+Exit status is 1
diff --git a/tests/f_uninit_set_inode_not_set/expect.2 b/tests/f_uninit_set_inode_not_set/expect.2
new file mode 100644 (file)
index 0000000..846c558
--- /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: 794/8192 files (0.3% non-contiguous), 8473/32768 blocks
+Exit status is 0
diff --git a/tests/f_uninit_set_inode_not_set/image.gz b/tests/f_uninit_set_inode_not_set/image.gz
new file mode 100644 (file)
index 0000000..cd38e27
Binary files /dev/null and b/tests/f_uninit_set_inode_not_set/image.gz differ
diff --git a/tests/f_uninit_set_inode_not_set/name b/tests/f_uninit_set_inode_not_set/name
new file mode 100644 (file)
index 0000000..42b9c53
--- /dev/null
@@ -0,0 +1 @@
+block uninit set but inode uninit not set
diff --git a/tests/f_unshare_blocks_no_space/expect.1 b/tests/f_unshare_blocks_no_space/expect.1
new file mode 100644 (file)
index 0000000..b2f6ab1
--- /dev/null
@@ -0,0 +1,136 @@
+Pass 1: Checking inodes, blocks, and sizes
+
+Running additional passes to resolve blocks claimed by more than one inode...
+Pass 1B: Rescanning for multiply-claimed blocks
+Multiply-claimed block(s) in inode 24: 10
+Multiply-claimed block(s) in inode 25: 9 9 9--10
+Multiply-claimed block(s) in inode 26: 9 9 9--10
+Multiply-claimed block(s) in inode 27: 9 9 9--10
+Multiply-claimed block(s) in inode 28: 9 9 9--10
+Multiply-claimed block(s) in inode 29: 9 9 9--10
+Multiply-claimed block(s) in inode 30: 9 9 9--10
+Multiply-claimed block(s) in inode 31: 9 9 9--10
+Multiply-claimed block(s) in inode 32: 9 9 9--10
+Pass 1C: Scanning directories for inodes with multiply-claimed blocks
+Pass 1D: Reconciling multiply-claimed blocks
+(There are 9 inodes containing multiply-claimed blocks.)
+
+File /file4.txt (inode #24, mod time Mon Mar  5 20:30:04 2018) 
+  has 1 multiply-claimed block(s), shared with 8 file(s):
+       /file18.txt (inode #32, mod time Mon Mar  5 20:30:04 2018)
+       /file6.txt (inode #31, mod time Mon Mar  5 20:30:04 2018)
+       /file12.txt (inode #30, mod time Mon Mar  5 20:30:04 2018)
+       /file3.txt (inode #29, mod time Mon Mar  5 20:30:04 2018)
+       /file9.txt (inode #28, mod time Mon Mar  5 20:30:04 2018)
+       /file8.txt (inode #27, mod time Mon Mar  5 20:30:04 2018)
+       /file15.txt (inode #26, mod time Mon Mar  5 20:30:04 2018)
+       /file20.txt (inode #25, mod time Mon Mar  5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file20.txt (inode #25, mod time Mon Mar  5 20:30:04 2018) 
+  has 4 multiply-claimed block(s), shared with 8 file(s):
+       /file18.txt (inode #32, mod time Mon Mar  5 20:30:04 2018)
+       /file6.txt (inode #31, mod time Mon Mar  5 20:30:04 2018)
+       /file12.txt (inode #30, mod time Mon Mar  5 20:30:04 2018)
+       /file3.txt (inode #29, mod time Mon Mar  5 20:30:04 2018)
+       /file9.txt (inode #28, mod time Mon Mar  5 20:30:04 2018)
+       /file8.txt (inode #27, mod time Mon Mar  5 20:30:04 2018)
+       /file15.txt (inode #26, mod time Mon Mar  5 20:30:04 2018)
+       /file4.txt (inode #24, mod time Mon Mar  5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file15.txt (inode #26, mod time Mon Mar  5 20:30:04 2018) 
+  has 4 multiply-claimed block(s), shared with 8 file(s):
+       /file18.txt (inode #32, mod time Mon Mar  5 20:30:04 2018)
+       /file6.txt (inode #31, mod time Mon Mar  5 20:30:04 2018)
+       /file12.txt (inode #30, mod time Mon Mar  5 20:30:04 2018)
+       /file3.txt (inode #29, mod time Mon Mar  5 20:30:04 2018)
+       /file9.txt (inode #28, mod time Mon Mar  5 20:30:04 2018)
+       /file8.txt (inode #27, mod time Mon Mar  5 20:30:04 2018)
+       /file20.txt (inode #25, mod time Mon Mar  5 20:30:04 2018)
+       /file4.txt (inode #24, mod time Mon Mar  5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file8.txt (inode #27, mod time Mon Mar  5 20:30:04 2018) 
+  has 4 multiply-claimed block(s), shared with 8 file(s):
+       /file18.txt (inode #32, mod time Mon Mar  5 20:30:04 2018)
+       /file6.txt (inode #31, mod time Mon Mar  5 20:30:04 2018)
+       /file12.txt (inode #30, mod time Mon Mar  5 20:30:04 2018)
+       /file3.txt (inode #29, mod time Mon Mar  5 20:30:04 2018)
+       /file9.txt (inode #28, mod time Mon Mar  5 20:30:04 2018)
+       /file15.txt (inode #26, mod time Mon Mar  5 20:30:04 2018)
+       /file20.txt (inode #25, mod time Mon Mar  5 20:30:04 2018)
+       /file4.txt (inode #24, mod time Mon Mar  5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file9.txt (inode #28, mod time Mon Mar  5 20:30:04 2018) 
+  has 4 multiply-claimed block(s), shared with 8 file(s):
+       /file18.txt (inode #32, mod time Mon Mar  5 20:30:04 2018)
+       /file6.txt (inode #31, mod time Mon Mar  5 20:30:04 2018)
+       /file12.txt (inode #30, mod time Mon Mar  5 20:30:04 2018)
+       /file3.txt (inode #29, mod time Mon Mar  5 20:30:04 2018)
+       /file8.txt (inode #27, mod time Mon Mar  5 20:30:04 2018)
+       /file15.txt (inode #26, mod time Mon Mar  5 20:30:04 2018)
+       /file20.txt (inode #25, mod time Mon Mar  5 20:30:04 2018)
+       /file4.txt (inode #24, mod time Mon Mar  5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file3.txt (inode #29, mod time Mon Mar  5 20:30:04 2018) 
+  has 4 multiply-claimed block(s), shared with 8 file(s):
+       /file18.txt (inode #32, mod time Mon Mar  5 20:30:04 2018)
+       /file6.txt (inode #31, mod time Mon Mar  5 20:30:04 2018)
+       /file12.txt (inode #30, mod time Mon Mar  5 20:30:04 2018)
+       /file9.txt (inode #28, mod time Mon Mar  5 20:30:04 2018)
+       /file8.txt (inode #27, mod time Mon Mar  5 20:30:04 2018)
+       /file15.txt (inode #26, mod time Mon Mar  5 20:30:04 2018)
+       /file20.txt (inode #25, mod time Mon Mar  5 20:30:04 2018)
+       /file4.txt (inode #24, mod time Mon Mar  5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file12.txt (inode #30, mod time Mon Mar  5 20:30:04 2018) 
+  has 4 multiply-claimed block(s), shared with 8 file(s):
+       /file18.txt (inode #32, mod time Mon Mar  5 20:30:04 2018)
+       /file6.txt (inode #31, mod time Mon Mar  5 20:30:04 2018)
+       /file3.txt (inode #29, mod time Mon Mar  5 20:30:04 2018)
+       /file9.txt (inode #28, mod time Mon Mar  5 20:30:04 2018)
+       /file8.txt (inode #27, mod time Mon Mar  5 20:30:04 2018)
+       /file15.txt (inode #26, mod time Mon Mar  5 20:30:04 2018)
+       /file20.txt (inode #25, mod time Mon Mar  5 20:30:04 2018)
+       /file4.txt (inode #24, mod time Mon Mar  5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file6.txt (inode #31, mod time Mon Mar  5 20:30:04 2018) 
+  has 4 multiply-claimed block(s), shared with 8 file(s):
+       /file18.txt (inode #32, mod time Mon Mar  5 20:30:04 2018)
+       /file12.txt (inode #30, mod time Mon Mar  5 20:30:04 2018)
+       /file3.txt (inode #29, mod time Mon Mar  5 20:30:04 2018)
+       /file9.txt (inode #28, mod time Mon Mar  5 20:30:04 2018)
+       /file8.txt (inode #27, mod time Mon Mar  5 20:30:04 2018)
+       /file15.txt (inode #26, mod time Mon Mar  5 20:30:04 2018)
+       /file20.txt (inode #25, mod time Mon Mar  5 20:30:04 2018)
+       /file4.txt (inode #24, mod time Mon Mar  5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file18.txt (inode #32, mod time Mon Mar  5 20:30:04 2018) 
+  has 4 multiply-claimed block(s), shared with 8 file(s):
+       /file6.txt (inode #31, mod time Mon Mar  5 20:30:04 2018)
+       /file12.txt (inode #30, mod time Mon Mar  5 20:30:04 2018)
+       /file3.txt (inode #29, mod time Mon Mar  5 20:30:04 2018)
+       /file9.txt (inode #28, mod time Mon Mar  5 20:30:04 2018)
+       /file8.txt (inode #27, mod time Mon Mar  5 20:30:04 2018)
+       /file15.txt (inode #26, mod time Mon Mar  5 20:30:04 2018)
+       /file20.txt (inode #25, mod time Mon Mar  5 20:30:04 2018)
+       /file4.txt (inode #24, mod time Mon Mar  5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+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: ********** WARNING: Filesystem still has errors **********
+
+test_filesys: 32/32 files (34.4% non-contiguous), 64/64 blocks
+Exit status is 4
diff --git a/tests/f_unshare_blocks_no_space/expect.2 b/tests/f_unshare_blocks_no_space/expect.2
new file mode 100644 (file)
index 0000000..8137dc7
--- /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: 32/32 files (34.4% non-contiguous), 64/64 blocks
+Exit status is 1
diff --git a/tests/f_unshare_blocks_no_space/image.gz b/tests/f_unshare_blocks_no_space/image.gz
new file mode 100644 (file)
index 0000000..8fff6d4
Binary files /dev/null and b/tests/f_unshare_blocks_no_space/image.gz differ
diff --git a/tests/f_unshare_blocks_no_space/name b/tests/f_unshare_blocks_no_space/name
new file mode 100644 (file)
index 0000000..ca323a6
--- /dev/null
@@ -0,0 +1 @@
+unshare blocks should fail with no free space
diff --git a/tests/f_unshare_blocks_no_space/script b/tests/f_unshare_blocks_no_space/script
new file mode 100644 (file)
index 0000000..89d2aef
--- /dev/null
@@ -0,0 +1,2 @@
+FSCK_OPT="-y -E unshare_blocks"
+. $cmd_dir/run_e2fsck
diff --git a/tests/f_unshare_blocks_ok/expect.1 b/tests/f_unshare_blocks_ok/expect.1
new file mode 100644 (file)
index 0000000..e0ea764
--- /dev/null
@@ -0,0 +1,26 @@
+Pass 1: Checking inodes, blocks, and sizes
+
+Running additional passes to resolve blocks claimed by more than one inode...
+Pass 1B: Rescanning for multiply-claimed blocks
+Multiply-claimed block(s) in inode 12: 9
+Multiply-claimed block(s) in inode 13: 9
+Pass 1C: Scanning directories for inodes with multiply-claimed blocks
+Pass 1D: Reconciling multiply-claimed blocks
+(There are 2 inodes containing multiply-claimed blocks.)
+
+File /file2.txt (inode #12, mod time Sat Mar  3 02:12:33 2018) 
+  has 1 multiply-claimed block(s), shared with 1 file(s):
+       /file1.txt (inode #13, mod time Sat Mar  3 02:12:15 2018)
+File /file1.txt (inode #13, mod time Sat Mar  3 02:12:15 2018) 
+  has 1 multiply-claimed block(s), shared with 1 file(s):
+       /file2.txt (inode #12, mod time Sat Mar  3 02:12:33 2018)
+Multiply-claimed blocks already reassigned or cloned.
+
+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: 13/32 files (0.0% non-contiguous), 13/64 blocks
+Exit status is 0
diff --git a/tests/f_unshare_blocks_ok/expect.2 b/tests/f_unshare_blocks_ok/expect.2
new file mode 100644 (file)
index 0000000..b215382
--- /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: 13/32 files (0.0% non-contiguous), 13/64 blocks
+Exit status is 0
diff --git a/tests/f_unshare_blocks_ok/image.gz b/tests/f_unshare_blocks_ok/image.gz
new file mode 100644 (file)
index 0000000..db747e2
Binary files /dev/null and b/tests/f_unshare_blocks_ok/image.gz differ
diff --git a/tests/f_unshare_blocks_ok/name b/tests/f_unshare_blocks_ok/name
new file mode 100644 (file)
index 0000000..e051a62
--- /dev/null
@@ -0,0 +1 @@
+unshare blocks successfully
diff --git a/tests/f_unshare_blocks_ok/script b/tests/f_unshare_blocks_ok/script
new file mode 100644 (file)
index 0000000..89d2aef
--- /dev/null
@@ -0,0 +1,2 @@
+FSCK_OPT="-y -E unshare_blocks"
+. $cmd_dir/run_e2fsck
index 7d588d7..64b9045 100644 (file)
@@ -8,4 +8,4 @@ Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 12/2048 files (0.0% non-contiguous), 1294/2048 blocks
-Exit status is 1
+Exit status is 0
index a4d6dd2..5613bc0 100644 (file)
@@ -3,5 +3,5 @@ Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 22/2048 files (0.0% non-contiguous), 2072/8192 blocks
+test_filesys: 24/24 files (0.0% non-contiguous), 45/200 blocks
 Exit status is 0
index e40f783..98e72dc 100644 (file)
Binary files a/tests/f_valid_ea_in_inode/image.gz and b/tests/f_valid_ea_in_inode/image.gz differ
diff --git a/tests/f_verity/expect.1 b/tests/f_verity/expect.1
new file mode 100644 (file)
index 0000000..0705967
--- /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/128 files (8.3% non-contiguous), 58/128 blocks
+Exit status is 0
diff --git a/tests/f_verity/image.gz b/tests/f_verity/image.gz
new file mode 100644 (file)
index 0000000..72dfd81
Binary files /dev/null and b/tests/f_verity/image.gz differ
diff --git a/tests/f_verity/mkimage.sh b/tests/f_verity/mkimage.sh
new file mode 100755 (executable)
index 0000000..565083e
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# This is the script that was used to create the image.gz in this directory.
+
+set -e -u
+
+mkdir -p mnt
+umount mnt &> /dev/null || true
+
+dd if=/dev/zero of=image bs=4096 count=128
+mke2fs -O 'verity,extents' -b 4096 -N 128 image
+mount image mnt
+
+# Create a verity file, but make it fragmented so that it needs at least one
+# extent tree index node, in order to cover the scan_extent_node() case.
+for i in {1..80}; do
+       head -c 4096 /dev/zero > mnt/tmp_$i
+done
+for i in {1..80..2}; do
+       rm mnt/tmp_$i
+done
+head -c $((40 * 4096)) /dev/zero > mnt/file
+fsverity enable mnt/file
+rm mnt/tmp_*
+
+umount mnt
+rmdir mnt
+gzip -9 -f image
diff --git a/tests/f_verity/name b/tests/f_verity/name
new file mode 100644 (file)
index 0000000..f43910f
--- /dev/null
@@ -0,0 +1 @@
+verity file
diff --git a/tests/f_verity/script b/tests/f_verity/script
new file mode 100644 (file)
index 0000000..8ab2b9c
--- /dev/null
@@ -0,0 +1,2 @@
+ONE_PASS_ONLY="true"
+. $cmd_dir/run_e2fsck
index 718c12c..a1ebc7f 100644 (file)
@@ -1 +1 @@
-write EA when i_extra_size is too small to make sense
+write EA when i_extra_size is too small
index c73e620..93b04ef 100644 (file)
@@ -12,7 +12,8 @@ Clear<y>? yes
 Inode 13 has an invalid extent
        (logical block 0, invalid physical block 888888888888, len 1)
 Clear<y>? yes
-Inode 14 is in use, but has dtime set.  Fix<y>? yes
+Inodes that were part of a corrupted orphan linked list found.  Fix<y>? yes
+Inode 14 was part of the orphaned inode list.  FIXED.
 Inode 14 has an invalid extent
        (logical block 300, invalid physical block 777777777777, len 300)
 Clear<y>? yes
index 4e114c5..3cbeb20 100644 (file)
@@ -5,11 +5,10 @@ EXP=$test_dir/expect
 
 gunzip < $test_dir/../f_yesall/image.gz > $TMPFILE
 
-rm -rf $OUT
 echo "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" | E2FSCK_FORCE_INTERACTIVE=y $FSCK $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
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
 rm -f $OUT.new
 
 cmp -s $OUT $EXP
index f6d3c2b..757b048 100644 (file)
@@ -16,8 +16,9 @@ Inode 13 has an invalid extent
        (logical block 0, invalid physical block 888888888888, len 1)
 Clear? yes
 
-Inode 14 is in use, but has dtime set.  Fix? yes
+Inodes that were part of a corrupted orphan linked list found.  Fix? yes
 
+Inode 14 was part of the orphaned inode list.  FIXED.
 Inode 14 has an invalid extent
        (logical block 300, invalid physical block 777777777777, len 300)
 Clear? yes
index c3721ff..cb67ee7 100644 (file)
@@ -5,11 +5,10 @@ EXP=$test_dir/expect
 
 gunzip < $test_dir/image.gz > $TMPFILE
 
-rm -rf $OUT
 echo "annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn" | E2FSCK_FORCE_INTERACTIVE=y $FSCK $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
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
 rm -f $OUT.new
 
 cmp -s $OUT $EXP
index 1fc3bde..73f35a3 100644 (file)
@@ -12,7 +12,8 @@ Clear<y>? yes
 Inode 13 has an invalid extent
        (logical block 0, invalid physical block 888888888888, len 1)
 Clear<y>? yes
-Inode 14 is in use, but has dtime set.  Fix<y>? yes
+Inodes that were part of a corrupted orphan linked list found.  Fix<y>? yes
+Inode 14 was part of the orphaned inode list.  FIXED.
 Inode 14 has an invalid extent
        (logical block 300, invalid physical block 777777777777, len 300)
 Clear<y>? yes
index eb11c23..5f4c8ee 100644 (file)
@@ -5,11 +5,10 @@ EXP=$test_dir/expect
 
 gunzip < $test_dir/../f_yesall/image.gz > $TMPFILE
 
-rm -rf $OUT
 echo "yyyyyyyyyyannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn" | E2FSCK_FORCE_INTERACTIVE=y $FSCK $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
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
 rm -f $OUT.new
 
 cmp -s $OUT $EXP
index de55f47..94bcc6a 100644 (file)
@@ -12,7 +12,8 @@ Clear<y>? yes
 Inode 13 has an invalid extent
        (logical block 0, invalid physical block 888888888888, len 1)
 Clear<y>? yes
-Inode 14 is in use, but has dtime set.  Fix<y>? yes
+Inodes that were part of a corrupted orphan linked list found.  Fix<y>? yes
+Inode 14 was part of the orphaned inode list.  FIXED.
 Inode 14 has an invalid extent
        (logical block 300, invalid physical block 777777777777, len 300)
 Clear<y>? yes
index f41b78b..5bbc0c6 100644 (file)
@@ -5,11 +5,10 @@ EXP=$test_dir/expect
 
 gunzip < $test_dir/../f_yesall/image.gz > $TMPFILE
 
-rm -rf $OUT
 echo "yyyyyyyyyynnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn" | E2FSCK_FORCE_INTERACTIVE=y $FSCK $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
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
 rm -f $OUT.new
 
 cmp -s $OUT $EXP
index 628309d..796186e 100644 (file)
@@ -27,3 +27,14 @@ s/\\015//g
 s/, csum 0x\([0-9a-f]*\)//g
 s/ csum 0x\([0-9a-f]*\)//g
 /^Checksum:/d
+s/while trying to open [^ ]*/while trying to open test.img/
+s/he filesystem on [^ ]* /he filesystem on test.img /
+s/^[^ ]* contains a \([a-z]*\) file system /test.img contains a \1 file system /
+s/MMP block [0-9]* from [^ ]*/MMP block from test.img/
+s/safe to mount '.*', MMP/safe to mount 'test.img', MMP/
+s/mmp_device_name: .*/mmp_device_name: test.img/
+s/mmp_node_name: .*/mmp_node_name: test_node/
+s/mmp_update_date: .*/mmp_update_date: test date/
+s/mmp_update_time: .*/mmp_update_time: test_time/
+s/MMP last updated by '.*' on .*/MMP last updated by 'test_node' on test date/
+s/MMP update by '.*' at .*/MMP last updated by 'test_node' on test date/
index 4c38cf4..8b5bef9 100644 (file)
@@ -5,7 +5,7 @@ OUT=$test_name.log
 EXP=$test_dir/expect
 
 gzip -d < $IMAGE > $TMPFILE
-$E2IMAGE -r $TMPFILE $TMPFILE.bin >> $OUT 2>&1
+$E2IMAGE -r $TMPFILE $TMPFILE.bin > $OUT 2>&1
 $FSCK -fn $TMPFILE.bin >> $OUT 2>&1
 
 sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test_filesys;" $OUT > $OUT.new
@@ -22,5 +22,5 @@ else
         rm -f $test_name.tmp
 fi
 
-rm -rf $OUT $TMPFILE $TMPFILE.bin $TMPFILE.test
+rm -f $OUT $TMPFILE $TMPFILE.bin $TMPFILE.test
 unset IMAGE FSCK_OPT OUT EXP
diff --git a/tests/i_bitmaps/expect b/tests/i_bitmaps/expect
new file mode 100644 (file)
index 0000000..6199bb7
--- /dev/null
@@ -0,0 +1,8 @@
+46,52d45
+< Journal features:         (none)
+< Total journal size:       1024k
+< Total journal blocks:     1024
+< Max transaction length:   1024
+< Fast commit length:       0
+< Journal sequence:         0x00000001
+< Journal start:            0
diff --git a/tests/i_bitmaps/image.bz2 b/tests/i_bitmaps/image.bz2
new file mode 100644 (file)
index 0000000..cc33565
Binary files /dev/null and b/tests/i_bitmaps/image.bz2 differ
diff --git a/tests/i_bitmaps/script b/tests/i_bitmaps/script
new file mode 100644 (file)
index 0000000..1a16d55
--- /dev/null
@@ -0,0 +1,28 @@
+test_description="e2image bitmap read/write test"
+
+IMAGE=$test_dir/image.bz2
+OUT=$test_name.log
+EXP=$test_dir/expect
+
+bzip2 -d < $IMAGE > $TMPFILE
+$E2IMAGE  $TMPFILE $TMPFILE.e2i > $OUT 2>&1
+$DUMPE2FS $TMPFILE > $TMPFILE.1 2>&1
+$DUMPE2FS -i $TMPFILE.e2i > $TMPFILE.2 2>&1
+diff $TMPFILE.1 $TMPFILE.2 >> $OUT 2>&1
+
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test_filesys;" $OUT > $OUT.new
+mv $OUT.new $OUT
+
+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
+        rm -f $test_name.tmp
+fi
+
+rm -rf $TMPFILE $TMPFILE.bin $TMPFILE.1 $TMPFILE.2 $TMPFILE.e2i
+unset IMAGE FSCK_OPT OUT EXP
index 00e5e6f..8591ae4 100644 (file)
@@ -1,15 +1,15 @@
 i_qcow/image1024.orig
-2161078647     image1024.orig
-467277198      _image.raw
-2164212449     _image.qcow2
-467277198      _image.qcow2.raw
+image          2161078647
+raw_image      467277198
+qcow_image     2164212449
+qcow_to_raw    467277198
 i_qcow/image2048.orig
-672740642      image2048.orig
-3688408350     _image.raw
-3821412753     _image.qcow2
-3688408350     _image.qcow2.raw
+image          672740642
+raw_image      3688408350
+qcow_image     3821412753
+qcow_to_raw    3688408350
 i_qcow/image4096.orig
-4077552412     image4096.orig
-4159471388     _image.raw
-636354894      _image.qcow2
-4159471388     _image.qcow2.raw
+image          4077552412
+raw_image      4159471388
+qcow_image     636354894
+qcow_to_raw    4159471388
index c5b0666..6bf995e 100644 (file)
@@ -10,31 +10,36 @@ OUT=$test_name.log
 CRC=$SRCDIR/$test_name/$test_name.crc
 CRC_TMP=$test_name.crc.tmp
 
-rm -f $test_name/_image.* $CRC_TMP $OUT >/dev/null 2>&1
+rm -f $CRC_TMP $OUT >/dev/null 2>&1
 
 (
 for i in $ORIG_IMAGES; do
        ORIG_IMG=$test_name/$i
        echo $ORIG_IMG >> $CRC_TMP
 
-       bunzip2 < $SRCDIR/$ORIG_IMG.bz2 > $i
-       echo "$($CRCSUM $i)     $i" >> $CRC_TMP
+       IMAGE=$(mktemp ${TMPDIR:-/tmp}/$i.XXXXXX)
+       RAW_IMG="${IMAGE}.raw"
+       QCOW2_IMG="${IMAGE}.qcow2"
+       QCOW2_TO_RAW="${IMAGE}.qcow2.raw"
+
+       bunzip2 < $SRCDIR/$ORIG_IMG.bz2 > $IMAGE
+       echo "image             $($CRCSUM $IMAGE)" >> $CRC_TMP
 
        rm -f $RAW_IMG
        echo "e2image -r $ORIG_IMG $RAW_IMG"
-       $E2IMAGE      -r $i $RAW_IMG
-       echo "$($CRCSUM $RAW_IMG)       $RAW_IMG"  >> $CRC_TMP
+       $E2IMAGE      -r $IMAGE $RAW_IMG
+       echo "raw_image $($CRCSUM $RAW_IMG)"  >> $CRC_TMP
 
        echo "e2image -Q $ORIG_IMG $QCOW2_IMG"
-       $E2IMAGE      -Q $i $QCOW2_IMG
-       echo "$($CRCSUM $QCOW2_IMG)     $QCOW2_IMG"  >> $CRC_TMP
+       $E2IMAGE      -Q $IMAGE $QCOW2_IMG
+       echo "qcow_image        $($CRCSUM $QCOW2_IMG)"  >> $CRC_TMP
 
        rm -f $QCOW2_TO_RAW
        echo "e2image -r $QCOW2_IMG $QCOW2_TO_RAW"
-       $E2IMAGE      -r $i $QCOW2_TO_RAW
-       echo "$($CRCSUM $QCOW2_TO_RAW)  $QCOW2_TO_RAW" >> $CRC_TMP
+       $E2IMAGE      -r $QCOW2_IMG $QCOW2_TO_RAW
+       echo "qcow_to_raw       $($CRCSUM $QCOW2_TO_RAW)" >> $CRC_TMP
 
-       rm -f $i
+       rm -f $IMAGE $RAW_IMG $QCOW2_IMG $QCOW2_TO_RAW
 done
 ) >> $OUT 2>&1
 
@@ -52,7 +57,7 @@ else
        echo "$test_name: $test_description: failed"
 fi
 
-rm -f _image.* $CRC_TMP >/dev/null 2>&1
+rm -f $CRC_TMP >/dev/null 2>&1
 
 else #if test -x $E2IMAGE_EXE; then
        echo "$test_name: $test_description: skipped"
diff --git a/tests/i_zero_super/expect.1 b/tests/i_zero_super/expect.1
new file mode 100644 (file)
index 0000000..fda32b9
--- /dev/null
@@ -0,0 +1,22 @@
+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
+Free blocks count wrong for group #0 (7987, counted=7982).
+Fix? no
+
+Free blocks count wrong (11602, counted=11597).
+Fix? no
+
+Free inodes count wrong for group #0 (1493, counted=1488).
+Fix? no
+
+Free inodes count wrong (2997, counted=2992).
+Fix? no
+
+
+test_filesys: ********** WARNING: Filesystem still has errors **********
+
+test_filesys: 11/3008 files (0.0% non-contiguous), 398/12000 blocks
+Exit status is 4
diff --git a/tests/i_zero_super/image.gz b/tests/i_zero_super/image.gz
new file mode 100644 (file)
index 0000000..eea9140
Binary files /dev/null and b/tests/i_zero_super/image.gz differ
diff --git a/tests/i_zero_super/script b/tests/i_zero_super/script
new file mode 100644 (file)
index 0000000..0cef6ac
--- /dev/null
@@ -0,0 +1,11 @@
+if test -x $E2IMAGE_EXE; then
+
+ONE_PASS_ONLY=true
+FSCK_OPT="-n -b 8193 -f"
+PREP_CMD="$E2IMAGE_EXE -r -b 8193 -B 1024 $TMPFILE $TMPFILE.raw 2>/dev/null; \
+         mv $TMPFILE.raw $TMPFILE"
+. $cmd_dir/run_e2fsck
+
+else
+       echo "$test_name: $test_description: skipped"
+fi
index 9c16975..ab314f6 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 IMAGE=$test_dir/image.gz
 FSCK_OPT=-fy
@@ -10,28 +13,21 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 gzip -d < $IMAGE > $TMPFILE
 
 $FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 echo "cat /a" > $TMPFILE.cmd
 echo >> $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -f $TMPFILE.cmd
-
-rm -f $TMPFILE
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -46,7 +42,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 9c16975..ab314f6 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 IMAGE=$test_dir/image.gz
 FSCK_OPT=-fy
@@ -10,28 +13,21 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 gzip -d < $IMAGE > $TMPFILE
 
 $FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 echo "cat /a" > $TMPFILE.cmd
 echo >> $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -f $TMPFILE.cmd
-
-rm -f $TMPFILE
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -46,7 +42,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 9c16975..ab314f6 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 IMAGE=$test_dir/image.gz
 FSCK_OPT=-fy
@@ -10,28 +13,21 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 gzip -d < $IMAGE > $TMPFILE
 
 $FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 echo "cat /a" > $TMPFILE.cmd
 echo >> $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -f $TMPFILE.cmd
-
-rm -f $TMPFILE
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -46,7 +42,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 9c16975..ab314f6 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 IMAGE=$test_dir/image.gz
 FSCK_OPT=-fy
@@ -10,28 +13,21 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 gzip -d < $IMAGE > $TMPFILE
 
 $FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 echo "cat /a" > $TMPFILE.cmd
 echo >> $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -f $TMPFILE.cmd
-
-rm -f $TMPFILE
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -46,7 +42,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index a5188be..35f1689 100644 (file)
@@ -1 +1 @@
-corrupt external journal fs superblock block (metadata_csum)
+corrupt mcsum ext jnl fs superblock block
index 11d3001..b038943 100644 (file)
@@ -7,8 +7,6 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 bzip2 -dc < $test_dir/image.tar.bz2 | tar xf -
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp $test_name.img "$JOURNAL_DUMP_DIR/$test_name.img"
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp $test_name.img.jnl "$JOURNAL_DUMP_DIR/$test_name.img.jnl"
@@ -16,10 +14,8 @@ test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp $test_name.img.jnl "
 $FSCK $FSCK_OPT -N test_filesys -j $test_name.img.jnl $test_name.img > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE $test_name.img $test_name.img.jnl
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $test_name.img $test_name.img.jnl $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
index 70a4fe7..4212a00 100644 (file)
@@ -12,6 +12,8 @@ Fix? yes
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/128 files (0.0% non-contiguous), 66/2048 blocks
index c182f81..7e73971 100644 (file)
@@ -1 +1 @@
-corrupt external journal fs superblock csum (metadata_csum)
+corrupt external journal superblock metadata_csum
index 45ddf6f..6c0256b 100644 (file)
@@ -7,8 +7,6 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 bzip2 -dc < $test_dir/image.tar.bz2 | tar xf -
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp $test_name.img "$JOURNAL_DUMP_DIR/$test_name.img"
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp $test_name.img.jnl "$JOURNAL_DUMP_DIR/$test_name.img.jnl"
@@ -16,16 +14,12 @@ test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp $test_name.img.jnl "
 $FSCK $FSCK_OPT -N test_filesys -j $test_name.img.jnl $test_name.img > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK $FSCK_OPT -N test_filesys -j $test_name.img.jnl $test_name.img > $OUT.new 2>&1
+$FSCK $FSCK_OPT -N test_filesys -j $test_name.img.jnl $test_name.img >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE $test_name.img $test_name.img.jnl
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $test_name.img $test_name.img.jnl $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
index 36a7699..8b6545a 100644 (file)
@@ -1,5 +1,5 @@
 test_filesys: recovering journal
-JBD2: Invalid checksum recovering block 1090 in log
+JBD2: Invalid checksum recovering data block 1090 in log
 Journal checksum error found in test_filesys
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
index 2bce973..a380805 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 IMAGE=$test_dir/image.gz
 FSCK_OPT=-fy
@@ -10,29 +13,22 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 gzip -d < $IMAGE > $TMPFILE
 
 $FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 echo "cat /a" > $TMPFILE.cmd
 echo >> $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
 echo >> $OUT
-rm -f $TMPFILE.cmd
-
-rm -f $TMPFILE
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -47,7 +43,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 9c16975..ab314f6 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 IMAGE=$test_dir/image.gz
 FSCK_OPT=-fy
@@ -10,28 +13,21 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 gzip -d < $IMAGE > $TMPFILE
 
 $FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 echo "cat /a" > $TMPFILE.cmd
 echo >> $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -f $TMPFILE.cmd
-
-rm -f $TMPFILE
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -46,7 +42,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 9c16975..ab314f6 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 IMAGE=$test_dir/image.gz
 FSCK_OPT=-fy
@@ -10,28 +13,21 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 gzip -d < $IMAGE > $TMPFILE
 
 $FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 echo "cat /a" > $TMPFILE.cmd
 echo >> $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -f $TMPFILE.cmd
-
-rm -f $TMPFILE
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -46,7 +42,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 9c16975..ab314f6 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 IMAGE=$test_dir/image.gz
 FSCK_OPT=-fy
@@ -10,28 +13,21 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 gzip -d < $IMAGE > $TMPFILE
 
 $FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 echo "cat /a" > $TMPFILE.cmd
 echo >> $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -f $TMPFILE.cmd
-
-rm -f $TMPFILE
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -46,7 +42,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 9c16975..ab314f6 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 IMAGE=$test_dir/image.gz
 FSCK_OPT=-fy
@@ -10,28 +13,21 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 gzip -d < $IMAGE > $TMPFILE
 
 $FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 echo "cat /a" > $TMPFILE.cmd
 echo >> $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -f $TMPFILE.cmd
-
-rm -f $TMPFILE
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -46,7 +42,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 8dc95cd..2838bbd 100644 (file)
@@ -42,13 +42,14 @@ Required extra isize:     28
 Desired extra isize:      28
 Default directory hash:   half_md4
 Checksum type:            crc32c
-Journal checksum type:    crc32c
-Journal checksum:         0x661e816f
 Journal features:         journal_64bit journal_checksum_v3
-Journal block size:       1024
-Journal length:           2048
+Total journal size:       2048k
+Total journal blocks:     2048
+Max transaction length:   2048
+Fast commit length:       0
 Journal first block:      3
 Journal sequence:         0x00000003
 Journal start:            0
-Journal number of users:  1
+Journal checksum type:    crc32c
+Journal checksum:         0x661e816f
 Journal users:            117f752e-f27d-4f6f-a652-072586a29b82
index 1611c45..b7bae59 100644 (file)
@@ -7,23 +7,17 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 gunzip < $test_dir/image.gz > $TMPFILE
 
-echo "e2fsck external journal" >> $OUT
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+echo "e2fsck external journal" > $OUT.new
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-echo "dumpe2fs external journal" >> $OUT
-$DUMPE2FS $TMPFILE > $OUT.new 2>&1
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-rm -f $TMPFILE
+echo "dumpe2fs external journal" >> $OUT.new
+$DUMPE2FS $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
index 777010d..932a5bd 100644 (file)
@@ -1 +1 @@
-revoked transaction nuking free space w/ ext. journal
+revoke trans nuking free space w/ ext. journal
index fe45c72..c99c8f1 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,54 +12,43 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 JNLFILE=$TMPFILE.jnl
 
 touch $JNLFILE
-$MKE2FS -F -o Linux -b 1024 -O journal_dev -T ext4 -U 1db3f677-6832-4adb-bafc-8e4059c30a34 $JNLFILE 262144 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
-$MKE2FS -F -o Linux -b 1024 -O ^has_journal -T ext4 $TMPFILE 262144 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 1024 -O journal_dev -T ext4 -U 1db3f677-6832-4adb-bafc-8e4059c30a34 $JNLFILE 262144 > $OUT.new 2>&1
+$MKE2FS -F -o Linux -b 1024 -O ^has_journal -T ext4 $TMPFILE 262144 >> $OUT.new 2>&1
 
-echo "debugfs add journal device/UUID" >> $OUT
+echo "debugfs add journal device/UUID" >> $OUT.new
 $DEBUGFS -w -f - $TMPFILE <<-EOF >> $OUT.new 2>&1
        feature has_journal
        ssv journal_dev 0x9999
        ssv journal_uuid 1db3f677-6832-4adb-bafc-8e4059c30a34
 EOF
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK -fy -N test_filesys -j $JNLFILE $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys -j $JNLFILE $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo -f $JNLFILE" > $TMPFILE.cmd
 echo "jw -b 259-4356 /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
 echo "jo -f $JNLFILE" >> $TMPFILE.cmd
 echo "jw -r 259-4356 /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$JNLFILE" "$JOURNAL_DUMP_DIR/$test_name.img.jnl"
 echo "logdump -c -f $JNLFILE" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed -e 's/logdump -c -f.*/logdump -c/g' >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-echo "debugfs fsck" >> $OUT
-$FSCK -fy -N test_filesys -j $JNLFILE $TMPFILE > $OUT.new 2>&1
+echo "debugfs fsck" >> $OUT.new
+$FSCK -fy -N test_filesys -j $JNLFILE $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE $JNLFILE
+sed -f $cmd_dir/filter.sed -e 's/logdump -c -f.*/logdump -c/g' $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $JNLFILE $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -71,7 +63,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP JNLFILE
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index d379610..ea3c87f 100644 (file)
@@ -98,6 +98,8 @@ Fix? yes
 Free inodes count wrong (16372, counted=16373).
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/16384 files (0.0% non-contiguous), 6228/262144 blocks
index f71e5a4..f19fb89 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,51 +12,40 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
 JNLFILE=$TMPFILE.jnl
 
 touch $JNLFILE
-$MKE2FS -F -o Linux -b 1024 -O journal_dev -T ext4 -U 1db3f677-6832-4adb-bafc-8e4059c30a34 $JNLFILE 262144 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
-$MKE2FS -F -o Linux -b 1024 -O ^has_journal -T ext4 $TMPFILE 262144 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 1024 -O journal_dev -T ext4 -U 1db3f677-6832-4adb-bafc-8e4059c30a34 $JNLFILE 262144 > $OUT.new 2>&1
+$MKE2FS -F -o Linux -b 1024 -O ^has_journal -T ext4 $TMPFILE 262144 >> $OUT.new 2>&1
 
-echo "debugfs add journal device/UUID" >> $OUT
+echo "debugfs add journal device/UUID" >> $OUT.new
 $DEBUGFS -w -f - $TMPFILE <<- EOF >> $OUT.new 2>&1
        feature has_journal
        ssv journal_dev 0x9999
        ssv journal_uuid 1db3f677-6832-4adb-bafc-8e4059c30a34
 EOF
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$FSCK -fy -N test_filesys -j $JNLFILE $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys -j $JNLFILE $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo -f $JNLFILE" > $TMPFILE.cmd
 echo "jw -b 259-4356 /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$JNLFILE" "$JOURNAL_DUMP_DIR/$test_name.img.jnl"
 echo "logdump -c -f $JNLFILE" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed -e 's/logdump -c -f.*/logdump -c/g' >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-echo "debugfs fsck" >> $OUT
-$FSCK -fy -N test_filesys -j $JNLFILE $TMPFILE > $OUT.new 2>&1
+echo "debugfs fsck" >> $OUT.new
+$FSCK -fy -N test_filesys -j $JNLFILE $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE $JNLFILE
+sed -f $cmd_dir/filter.sed -e 's/logdump -c -f.*/logdump -c/g' $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $JNLFILE $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -68,7 +60,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP JNLFILE
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 4a0c5d1..d59578d 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,39 +12,30 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 1024 -O has_journal -T ext4 $TMPFILE 262144 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 1024 -O has_journal -T ext4 $TMPFILE 262144 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo" > $TMPFILE.cmd
 echo "jw -b 259-4356 /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
 echo "jo" >> $TMPFILE.cmd
 echo "jw -r 259-4356" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -56,7 +50,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 3d78c07..1aca67d 100644 (file)
@@ -1 +1 @@
-revoked transaction nuking free space on 32bit,metadata_csum
+revoked trans nuking free space 32bit,mcsum
index fc0d0ad..8e5a029 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,44 +12,34 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 1024 -O ^64bit,has_journal,metadata_csum -T ext4 $TMPFILE 524288 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 1024 -O ^64bit,has_journal,metadata_csum -T ext4 $TMPFILE 524288 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo -c" > $TMPFILE.cmd
 echo "jw -b 260-4356 /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
 echo "jo" >> $TMPFILE.cmd
 echo "jw -r 260-4356" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-#$DEBUGFS_EXE -w $TMPFILE -f $TMPFILE.cmd >> $OUT 2>&1
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -61,7 +54,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 809900b..0fa20fe 100644 (file)
@@ -1 +1 @@
-revoked transaction nuking free space on 64bit,metadata_csum
+revoke trans nuking free space 64bit,mcsum
index e206f88..4bc0962 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,44 +12,34 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 1024 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 524288 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 1024 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 524288 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo -c" > $TMPFILE.cmd
 echo "jw -b 262-4358 /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
 echo "jo" >> $TMPFILE.cmd
 echo "jw -r 262-4358" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-#$DEBUGFS_EXE -w $TMPFILE -f $TMPFILE.cmd >> $OUT 2>&1
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -61,7 +54,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 7a17541..82b3caf 100644 (file)
@@ -96,6 +96,8 @@ Fix? yes
 Free inodes count wrong (16372, counted=16373).
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 Recreate journal? yes
 
 Creating journal (8192 blocks):  Done.
index 68172c4..ff4dab3 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,36 +12,27 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 1024 -O has_journal -T ext4 $TMPFILE 262144 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 1024 -O has_journal -T ext4 $TMPFILE 262144 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo" > $TMPFILE.cmd
 echo "jw -b 259-4356 /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -53,7 +47,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index a808d9f..ffae07a 100644 (file)
@@ -135,6 +135,8 @@ Fix? yes
 Free inodes count wrong (32756, counted=32757).
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 Recreate journal? yes
 
 Creating journal (16384 blocks):  Done.
index ac43f51..d4473d9 100644 (file)
@@ -1 +1 @@
-transaction nuking free space on 32bit,metadata_csum
+trans nuking free space 32bit,meta_csum
index 4722242..76da8ca 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,40 +12,31 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 1024 -O ^64bit,has_journal,metadata_csum -T ext4 $TMPFILE 524288 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 1024 -O ^64bit,has_journal,metadata_csum -T ext4 $TMPFILE 524288 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo -c" > $TMPFILE.cmd
 echo "jw -b 260-4356 /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -57,7 +51,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 76e109a..e891def 100644 (file)
@@ -134,6 +134,8 @@ Fix? yes
 Free inodes count wrong (32756, counted=32757).
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 Recreate journal? yes
 
 Creating journal (16384 blocks):  Done.
index 9dab338..e204e79 100644 (file)
@@ -1 +1 @@
-transaction nuking free space on 64bit,metadata_csum
+trans nuking free space 64bit,meta_csum
index 65ca1b7..b68d1d5 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,40 +12,31 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 1024 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 524288 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 1024 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 524288 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo -c" > $TMPFILE.cmd
 echo "jw -b 262-4358 /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -57,7 +51,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 491784a..fdbda36 100644 (file)
@@ -10,6 +10,8 @@ Fix? yes
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/8192 files (0.0% non-contiguous), 7739/131072 blocks
index 4b0ec48..cc736ca 100755 (executable)
@@ -8,7 +8,6 @@ bzip2 -d < $IMAGE > $TMPFILE
 # Run fsck to fix things?
 EXP1=$test_dir/expect.1
 OUT1=$test_name.1.log
-rm -rf $test_name.failed $test_name.ok
 
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE 2>&1 | head -n 1000 | tail -n +2 > $OUT1
 echo "Exit status is $?" >> $OUT1
index 491784a..fdbda36 100644 (file)
@@ -10,6 +10,8 @@ Fix? yes
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/8192 files (0.0% non-contiguous), 7739/131072 blocks
index 4b0ec48..cc736ca 100755 (executable)
@@ -8,7 +8,6 @@ bzip2 -d < $IMAGE > $TMPFILE
 # Run fsck to fix things?
 EXP1=$test_dir/expect.1
 OUT1=$test_name.1.log
-rm -rf $test_name.failed $test_name.ok
 
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE 2>&1 | head -n 1000 | tail -n +2 > $OUT1
 echo "Exit status is $?" >> $OUT1
diff --git a/tests/j_recover_csum3_64bit/expect.1 b/tests/j_recover_csum3_64bit/expect.1
new file mode 100644 (file)
index 0000000..6aed56a
--- /dev/null
@@ -0,0 +1,16 @@
+test_filesys: recovering journal
+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
+Free blocks count wrong (121285, counted=121282).
+Fix? yes
+
+Free inodes count wrong (32757, counted=32754).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 14/32768 files (0.0% non-contiguous), 9790/131072 blocks
+Exit status is 0
diff --git a/tests/j_recover_csum3_64bit/expect.2 b/tests/j_recover_csum3_64bit/expect.2
new file mode 100644 (file)
index 0000000..b7a14da
--- /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: 14/32768 files (0.0% non-contiguous), 9790/131072 blocks
+Exit status is 0
diff --git a/tests/j_recover_csum3_64bit/image.bz2 b/tests/j_recover_csum3_64bit/image.bz2
new file mode 100644 (file)
index 0000000..13b2956
Binary files /dev/null and b/tests/j_recover_csum3_64bit/image.bz2 differ
diff --git a/tests/j_recover_csum3_64bit/name b/tests/j_recover_csum3_64bit/name
new file mode 100644 (file)
index 0000000..8f91d97
--- /dev/null
@@ -0,0 +1 @@
+recover 64-bit journal checksum v3
diff --git a/tests/j_recover_csum3_64bit/script b/tests/j_recover_csum3_64bit/script
new file mode 100755 (executable)
index 0000000..cc736ca
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+FSCK_OPT=-fy
+IMAGE=$test_dir/image.bz2
+
+bzip2 -d < $IMAGE > $TMPFILE
+
+# Run fsck to fix things?
+EXP1=$test_dir/expect.1
+OUT1=$test_name.1.log
+
+$FSCK $FSCK_OPT -N test_filesys $TMPFILE 2>&1 | head -n 1000 | tail -n +2 > $OUT1
+echo "Exit status is $?" >> $OUT1
+
+# Run a second time
+EXP2=$test_dir/expect.2
+OUT2=$test_name.2.log
+
+$FSCK $FSCK_OPT -N test_filesys $TMPFILE 2>&1 | head -n 1000 | tail -n +2 > $OUT2
+echo "Exit status is $?" >> $OUT2
+
+# Figure out what happened
+if cmp -s $EXP1 $OUT1 && cmp -s $EXP2 $OUT2; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "$test_name: $test_description: failed"
+       diff -u $EXP1 $OUT1 >> $test_name.failed
+       diff -u $EXP2 $OUT2 >> $test_name.failed
+fi
diff --git a/tests/j_recover_fast_commit/commands b/tests/j_recover_fast_commit/commands
new file mode 100644 (file)
index 0000000..74e20e4
--- /dev/null
@@ -0,0 +1,4 @@
+ls
+ls a/
+ex a/new
+ex a/data
diff --git a/tests/j_recover_fast_commit/expect b/tests/j_recover_fast_commit/expect
new file mode 100644 (file)
index 0000000..18e2fe0
--- /dev/null
@@ -0,0 +1,22 @@
+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: 14/256 files (14.3% non-contiguous), 1365/2048 blocks
+Exit status is 0
+debugfs: ls
+ 2  (12) .    2  (12) ..    11  (20) lost+found    12  (968) a   
+debugfs: ls a/
+ 12  (12) .    2  (12) ..    13  (12) data    14  (976) new   
+debugfs: ex a/new
+Level Entries       Logical      Physical Length Flags
+ 0/ 0   1/  1     0 -     0  1107 -  1107      1 
+debugfs: ex a/data
+Level Entries       Logical      Physical Length Flags
+ 0/ 1   1/  1     0 -   255  1618            256
+ 1/ 1   1/  5     0 -    15  1619 -  1634     16 
+ 1/ 1   2/  5    16 -    31  1601 -  1616     16 
+ 1/ 1   3/  5    32 -    63  1985 -  2016     32 
+ 1/ 1   4/  5    64 -   127  1537 -  1600     64 
+ 1/ 1   5/  5   128 -   255  1793 -  1920    128 
diff --git a/tests/j_recover_fast_commit/image.gz b/tests/j_recover_fast_commit/image.gz
new file mode 100644 (file)
index 0000000..b7357af
Binary files /dev/null and b/tests/j_recover_fast_commit/image.gz differ
diff --git a/tests/j_recover_fast_commit/script b/tests/j_recover_fast_commit/script
new file mode 100755 (executable)
index 0000000..22ef632
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+FSCK_OPT=-fy
+IMAGE=$test_dir/image.gz
+CMDS=$test_dir/commands
+
+gunzip < $IMAGE > $TMPFILE
+
+# Run fsck to fix things?
+EXP=$test_dir/expect
+OUT=$test_name.log
+
+cp $TMPFILE /tmp/debugthis
+$FSCK $FSCK_OPT -E journal_only -N test_filesys $TMPFILE 2>/dev/null | head -n 1000 | tail -n +2 > $OUT
+echo "Exit status is $?" >> $OUT
+
+$DEBUGFS -f $CMDS $TMPFILE >> $OUT 2>/dev/null
+
+# Figure out what happened
+if cmp -s $EXP $OUT; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "$test_name: $test_description: failed"
+       diff -u $EXP $OUT >> $test_name.failed
+fi
index 4eec436..0e84e46 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,41 +12,32 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo" > $TMPFILE.cmd
 echo "jw -b $bitmaps /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
 echo "jo" >> $TMPFILE.cmd
 echo "jw -r $bitmaps" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -58,7 +52,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index fb286fd..de05e51 100644 (file)
@@ -1 +1 @@
-revoke blocks of transaction nuking the bitmaps on 64bit,metadata_csum
+revoke trans nuking bmap 64bit,meta_csum
index c943efa..9b97b11 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,45 +12,36 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 131072 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 131072 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo -c" > $TMPFILE.cmd
 echo "jw -b $bitmaps /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
 echo "jo" >> $TMPFILE.cmd
 echo "jw -r $bitmaps" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -62,7 +56,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index bcc8fe8..2bd0e50 100644 (file)
@@ -32,6 +32,8 @@ Fix? yes
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
index 852e7a5..ec28a59 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,38 +12,29 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo" > $TMPFILE.cmd
 echo "jw -b $bitmaps /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -55,7 +49,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index f9971eb..808dc61 100644 (file)
@@ -34,6 +34,8 @@ Fix? yes
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/16384 files (0.0% non-contiguous), 5196/65536 blocks
index 994fa21..7680473 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,42 +12,33 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O 64bit,has_journal -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O 64bit,has_journal -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo" > $TMPFILE.cmd
 echo "jw -b $bitmaps /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -59,7 +53,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index d876ff0..d73e282 100644 (file)
@@ -34,6 +34,8 @@ Fix? yes
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/32768 files (0.0% non-contiguous), 6353/131072 blocks
index 4751cc2..da839e9 100644 (file)
@@ -1 +1 @@
-transaction nuking the bitmaps on 64bit,metadata_csum
+trans nuking bitmaps 64bit,meta_csum
index 034b237..511d4b7 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,42 +12,33 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 131072 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 131072 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo -c" > $TMPFILE.cmd
 echo "jw -b $bitmaps /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE $TMPFILE.cmd
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -59,7 +53,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 29ac27f..6cf06d4 100644 (file)
@@ -34,6 +34,8 @@ Fix? yes
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
index 2e81f94..435e9bc 100644 (file)
@@ -1 +1 @@
-transaction nuking the bitmaps with old journal checksum (v1)
+trans nuking bitmaps v1 journal csum
index 56f8bcb..f58f213 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,42 +12,33 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo -c" > $TMPFILE.cmd
 echo "jw -b $bitmaps /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -59,7 +53,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index be6e363..3e86819 100644 (file)
@@ -37,6 +37,8 @@ Fix? yes
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
index 892e95c..c6bb568 100644 (file)
@@ -1 +1 @@
-ensure we can't recover the journal with journal open
+don't recover open journal
index 67136fe..d68504b 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,46 +12,35 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo" > $TMPFILE.cmd
 echo "jw -b $bitmaps /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-echo "debugfs can't recover open journal" >> $OUT
+echo "debugfs can't recover open journal" >> $OUT.new
 echo "jo" > $TMPFILE.cmd
 echo "jr" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE > $OUT.new 2>&1
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE $TMPFILE.cmd
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -63,7 +55,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 7586733..508858c 100644 (file)
@@ -34,6 +34,8 @@ Fix? yes
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
index e7b4943..37e9441 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,47 +12,36 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo" > $TMPFILE.cmd
 echo "jw -b 333,$bitmaps /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
 echo "jo" >> $TMPFILE.cmd
 echo "jw -r 333" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-echo "debugfs recover journal" >> $OUT
+echo "debugfs recover journal" >> $OUT.new
 echo "jr" > $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE $TMPFILE.cmd
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -64,7 +56,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 9cc3309..8c637f1 100644 (file)
@@ -36,6 +36,8 @@ Fix? yes
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/32768 files (0.0% non-contiguous), 6353/131072 blocks
index 7ccdcb0..01b4acd 100644 (file)
@@ -1 +1 @@
-uncommitted transaction nuking the bitmaps on 64bit,metadata_csum (debugfs recover)
+uncommitted trans nuking bmap 64bit,mcsum
index 2c56e0f..cb2635b 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,51 +12,40 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 131072 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 131072 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo -c" > $TMPFILE.cmd
 echo "jw -b 333,$bitmaps /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
 echo "jo" >> $TMPFILE.cmd
 echo "jw -r 333" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-echo "debugfs recover journal" >> $OUT
+echo "debugfs recover journal" >> $OUT.new
 echo "jr" > $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE $TMPFILE.cmd
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -68,7 +60,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index a1fc3b4..b7a64b3 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,38 +12,29 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O has_journal -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo" > $TMPFILE.cmd
 echo "jw -b $bitmaps -c /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -55,7 +49,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 9771f4b..9113950 100644 (file)
@@ -1 +1 @@
-uncommitted transaction nuking the bitmaps on 64bit,metadata_csum
+uncommitted trans nuking bmap 64b,mcsum
index a0b8c7f..fe11af1 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,42 +12,33 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 131072 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O 64bit,has_journal,metadata_csum -T ext4 $TMPFILE 131072 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo -c" > $TMPFILE.cmd
 echo "jw -b $bitmaps /dev/zero -c" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | grep '^Journal features:' >> $OUT.new
 
 test -d "$JOURNAL_DUMP_DIR" -a -w "$JOURNAL_DUMP_DIR" && cp "$TMPFILE" "$JOURNAL_DUMP_DIR/$test_name.img"
 echo "logdump -c" > $TMPFILE.cmd
-$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-rm -rf $TMPFILE.cmd
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -59,7 +53,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index cfa3bc9..956d248 100644 (file)
@@ -24,6 +24,7 @@ Filesystem OS type:       Linux
 Inode count:              128
 Block count:              1024
 Reserved block count:     51
+Overhead clusters:        28
 Free blocks:              982
 Free inodes:              117
 First block:              1
index 8900596..eb0e3bc 100644 (file)
@@ -18,6 +18,7 @@ Filesystem OS type:       Linux
 Inode count:              1344
 Block count:              2750000
 Reserved block count:     137500
+Overhead clusters:        1286982
 Free blocks:              1463011
 Free inodes:              1333
 First block:              0
@@ -41,8 +42,10 @@ Journal inode:            8
 Default directory hash:   half_md4
 Journal backup:           inode blocks
 Journal features:         (none)
-Journal size:             5000M
-Journal length:           1280000
+Total journal size:       5000M
+Total journal blocks:     1280000
+Max transaction length:   1280000
+Fast commit length:       0
 Journal sequence:         0x00000001
 Journal start:            0
 
index 0e55e8f..970d556 100644 (file)
@@ -26,6 +26,7 @@ Filesystem OS type:       Linux
 Inode count:              16384
 Block count:              32768
 Reserved block count:     1638
+Overhead clusters:        1094
 Free blocks:              31664
 Free inodes:              16373
 First block:              0
index 5a7da87..1cd9758 100644 (file)
@@ -26,6 +26,7 @@ Filesystem OS type:       Linux
 Inode count:              8192
 Block count:              131072
 Reserved block count:     6553
+Overhead clusters:        4284
 Free blocks:              126774
 Free inodes:              8181
 First block:              1
index 5f26699..dfc55c7 100644 (file)
@@ -1,6 +1,9 @@
-if test -x $DEBUGFS_EXE; then
-
 test_description="create fs image from /dev"
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
+
 MKFS_DIR=/dev
 OUT=$test_name.log
 
@@ -13,7 +16,7 @@ $DEBUGFS -R 'ls /' $TMPFILE >> $OUT 2>&1
 $FSCK -f -n $TMPFILE >> $OUT 2>&1
 fsck_status=$?
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" < $OUT > $OUT.tmp
+sed -f $cmd_dir/filter.sed $OUT > $OUT.tmp
 mv $OUT.tmp $OUT
 
 if [ $mkfs_status -ne 0 ]; then
@@ -25,9 +28,5 @@ else
         echo "$test_name: $test_description: failed"
 fi
 
-rm -rf $TMPFILE.cmd $OUT.sed
+rm -f $TMPFILE.cmd
 unset MKFS_DIR OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index a5c553b..5f999f3 100755 (executable)
@@ -24,11 +24,11 @@ write_section_conf()
 ENDL
 }
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "error default" >> $OUT
index 34e8a80..9a9219e 100644 (file)
@@ -27,6 +27,7 @@ Filesystem OS type:       Linux
 Inode count:              16384
 Block count:              65536
 Reserved block count:     3276
+Overhead clusters:        7446
 Free blocks:              58076
 Free inodes:              16373
 First block:              1
@@ -47,8 +48,10 @@ Journal inode:            8
 Default directory hash:   half_md4
 Journal backup:           inode blocks
 Journal features:         (none)
-Journal size:             4096k
-Journal length:           4096
+Total journal size:       4096k
+Total journal blocks:     4096
+Max transaction length:   4096
+Fast commit length:       0
 Journal sequence:         0x00000001
 Journal start:            0
 
index 82a6031..ee33fe5 100644 (file)
@@ -12,25 +12,8 @@ Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-
+test_filesys: 13/1048576 files (0.0% non-contiguous), 1073709417/1073741824 blocks
 Exit status is 0
-debugfs -R "extents /store/big-data" test.img | head
-Level Entries                 Logical                Physical Length Flags
- 0/ 2   1/  1          0 - 1073610751     131070              1073610752
- 1/ 2   1/ 97          0 -   11108351     131071              11108352
- 2/ 2   1/339          0 -      32767     131072 -     163839  32768 
- 2/ 2   2/339      32768 -      65535     163840 -     196607  32768 
- 2/ 2   3/339      65536 -      98303     196608 -     229375  32768 
- 2/ 2   4/339      98304 -     131071     229376 -     262143  32768 
- 2/ 2   5/339     131072 -     163839     262144 -     294911  32768 
- 2/ 2   6/339     163840 -     196607     294912 -     327679  32768 
- 2/ 2   7/339     196608 -     229375     327680 -     360447  32768 
- 2/ 2   8/339     229376 -     262143     360448 -     393215  32768 
- 2/ 2   9/339     262144 -     294911     393216 -     425983  32768 
- 2/ 2  10/339     294912 -     327679     425984 -     458751  32768 
- 2/ 2  11/339     327680 -     360447     458752 -     491519  32768 
- 2/ 2  12/339     360448 -     393215     491520 -     524287  32768 
- 2/ 2  13/339     393216 -     425983     524288 -     557055  32768 
- 2/ 2  14/339     425984 -     458751     557056 -     589823  32768 
- 2/ 2  15/339     458752 -     491519     589824 -     622591  32768 
- 2/ 2  16/339     491520 -     524287     622592 -     655359  32768 
+debugfs -R "extents /store/big-data" test.img
+Last logical block: 1073610751
+Last physical block: 1073741823
index 2750d53..1abdb7d 100644 (file)
@@ -37,16 +37,64 @@ ENDL
 
 echo "mke2fs -F -T hugefile test.img 4T" > $OUT
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T hugefile $TMPFILE 4T >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # check the file system if we get this far, we succeeded...
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
 
-echo 'debugfs -R "extents /store/big-data" test.img | head' >> $OUT
+echo 'debugfs -R "extents /store/big-data" test.img' >> $OUT
 
-$DEBUGFS -R "extents /store/big-data" $TMPFILE 2>&1 | head -n 20 >> $OUT 2>&1
+$DEBUGFS -R "extents /store/big-data" $TMPFILE 2>&1 | tr / " " | tr -d - | awk '
+BEGIN {
+       expected_logical_start = 0;
+       expected_physical_start = 0;
+}
+{
+       if (NR != 1) {
+               level = $1;
+               total_levels = $2;
+
+               if (level == total_levels) {
+                       logical_start=$5;
+                       logical_end=$6;
+                       physical_start=$7;
+                       physical_end=$8;
+                       len = $9;
+
+                       if (logical_end + 1 - logical_start != len) {
+                               print logical_end + 1 - logical_start, len;
+                               print "UNEXPECTED LENGTH for extent", $0;
+                       }
+                       if (physical_end + 1 - physical_start != len) {
+                               print physical_end + 1 - physical_start, len;
+                               print "UNEXPECTED LENGTH for extent", $0;
+                       }
+
+                       if (logical_start != expected_logical_start) {
+                               print "UNEXPECTED LOGICAL DISCONTINUITY between extents:";
+                               print "\t", prev;
+                               print "\t", $0;
+                       }
+                       if (physical_start != expected_physical_start &&
+                               expected_logical_start != 0) {
+                               print "PHYSICAL DISCONTINUITY between extents:";
+                               print "\t", prev;
+                               print "\t", $0;
+                       }
+
+                       expected_logical_start = logical_end + 1;
+                       expected_physical_start = physical_end + 1;
+               }
+       }
+       prev=$0;
+}
+END {
+    print "Last logical block:", expected_logical_start-1;
+    print "Last physical block:", expected_physical_start-1;
+}
+' >> $OUT 2>&1
 
 rm $TMPFILE
 
@@ -54,7 +102,7 @@ rm $TMPFILE
 # Do the verification
 #
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" -e 's/test_filesys:.*//g' < $OUT > $OUT.new
+sed -f $cmd_dir/filter.sed $OUT > $OUT.new
 mv $OUT.new $OUT
 
 cmp -s $OUT $EXP
index 8d51fd6..fd4e4d0 100644 (file)
@@ -1 +1 @@
-mke2fs creating a hugefile fs with a lot of slack
+mke2fs create hugefile fs with slack
index 3a0f057..da7098a 100644 (file)
@@ -23,7 +23,7 @@ ENDL
 
 echo "mke2fs -F -T ext4h -I 128 test.img 786432" > $OUT
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h -I 128 $TMPFILE 786432 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check. if we get this far, we succeeded...
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1
diff --git a/tests/m_image_mmp/expect.1 b/tests/m_image_mmp/expect.1
new file mode 100644 (file)
index 0000000..6630002
--- /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/64 files (0.0% non-contiguous), 13/100 blocks
+Exit status is 0
diff --git a/tests/m_image_mmp/name b/tests/m_image_mmp/name
new file mode 100644 (file)
index 0000000..1015c34
--- /dev/null
@@ -0,0 +1 @@
+create image for partition with enabled mmp and execute fsck on image
diff --git a/tests/m_image_mmp/script b/tests/m_image_mmp/script
new file mode 100644 (file)
index 0000000..5af6f55
--- /dev/null
@@ -0,0 +1,22 @@
+$MKE2FS -q -F -o Linux -b 4096 -O mmp -E mmp_update_interval=1 $TMPFILE 100 >> $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "mke2fs -O mmp failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+if test -x $E2IMAGE_EXE; then
+
+ONE_PASS_ONLY=true
+FSCK_OPT="-n -f"
+IMAGE=$TMPFILE
+SKIP_GUNZIP=true
+PREP_CMD="$E2IMAGE_EXE -r  $TMPFILE $TMPFILE.raw 2>/dev/null; \
+          mv $TMPFILE.raw $TMPFILE"
+
+. $cmd_dir/run_e2fsck
+
+else
+       echo "$test_name: $test_description: skipped"
+fi
index 06c8257..955ba77 100644 (file)
@@ -24,6 +24,7 @@ Filesystem OS type:       Linux
 Inode count:              64
 Block count:              16384
 Reserved block count:     819
+Overhead clusters:        11
 Free blocks:              16367
 Free inodes:              53
 First block:              0
index 624bf02..bbf1f9b 100644 (file)
@@ -7,9 +7,7 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 1024 -O journal_dev,metadata_csum -T ext4 $TMPFILE 4096 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 1024 -O journal_dev,metadata_csum -T ext4 $TMPFILE 4096 2>&1 | sed -f $cmd_dir/filter.sed > $OUT
 $DUMPE2FS -h $TMPFILE 2>&1 | grep 'Filesystem features:' >> $OUT
 
 rm -f $TMPFILE
index 7df4230..1b90b55 100644 (file)
@@ -26,6 +26,7 @@ Filesystem OS type:       Linux
 Inode count:              32768
 Block count:              131072
 Reserved block count:     6553
+Overhead clusters:        4376
 Free blocks:              126683
 Free inodes:              32757
 First block:              1
index 90158da..d2e9a9e 100644 (file)
@@ -11,6 +11,7 @@ Filesystem OS type:       Linux
 Inode count:              1024
 Block count:              16384
 Reserved block count:     819
+Overhead clusters:        265
 Free blocks:              16065
 Free inodes:              1006
 First block:              1
index 662e76f..4e2314c 100644 (file)
@@ -1,6 +1,9 @@
-if test -x $DEBUGFS_EXE -a -x $RESIZE2FS_EXE; then
-
 test_description="create fs image from dir, then minimize it"
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
+
 MKFS_DIR=$TMPFILE.dir
 OUT=$test_name.log
 EXP=$test_dir/expect
@@ -33,7 +36,7 @@ stat /emptydir
 stat /dir
 stat /dir/file
 ENDL
-$DEBUGFS -f $TMPFILE.cmd $TMPFILE 2>&1 | egrep "(stat|Size:|Type:)" | sed -f $test_dir/output.sed >> $OUT
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE 2>&1 | egrep "(stat|Size:|Type:)" >> $OUT
 
 cat > $TMPFILE.cmd << ENDL
 ex /emptyfile
@@ -43,7 +46,7 @@ ex /bigzerofile
 ex /dir
 ex /dir/file
 ENDL
-$DEBUGFS -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $test_dir/output.sed >> $OUT
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT 2>&1
 $FSCK -f -n $TMPFILE >> $OUT 2>&1
 
 echo "minify fs" >> $OUT
@@ -58,7 +61,7 @@ $RESIZE2FS -M $TMPFILE >> $OUT 2>&1
 $DUMPE2FS $TMPFILE >> $OUT 2>&1
 $FSCK -f -n $TMPFILE >> $OUT 2>&1
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" < $OUT > $OUT.tmp
+sed -f $cmd_dir/filter.sed -f $test_dir/output.sed -e "s;$TMPFILE;test.img;" < $OUT > $OUT.tmp
 mv $OUT.tmp $OUT
 
 # Do the verification
@@ -73,9 +76,5 @@ else
         diff $DIFF_OPTS $EXP $OUT > $test_name.failed
 fi
 
-rm -rf $TMPFILE.cmd $MKFS_DIR $OUT.sed
+rm -rf $TMPFILE.cmd $MKFS_DIR
 unset MKFS_DIR OUT EXP
-
-else #if test -x $DEBUGFS_EXE -a -x RESIZE2FS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index c21da0c..ce8e465 100644 (file)
@@ -10,8 +10,6 @@ MKE2FS_SKIP_CHECK_MSG=true
 export MKE2FS_SKIP_PROGRESS MKE2FS_SKIP_CHECK_MSG
 > $TMPFILE
 
-cp /dev/null $OUT
-
 $MKE2FS -F -o Linux $MKE2FS_OPTS $TMPFILE $FS_SIZE 2>&1 |
        sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" > $OUT
 
index a1452e6..475cd1d 100644 (file)
@@ -27,6 +27,7 @@ Filesystem OS type:       Linux
 Inode count:              65536
 Block count:              65536
 Reserved block count:     3276
+Overhead clusters:        2086
 Free blocks:              63443
 Free inodes:              65525
 First block:              0
@@ -46,6 +47,14 @@ Inode size:            128
 Default directory hash:   half_md4
 MMP block number:         1049
 MMP update interval:      5
+MMP_block:
+    mmp_magic: 0x4d4d50
+    mmp_check_interval: 5
+    mmp_sequence: 0xff4d4d50
+    mmp_update_date: test date
+    mmp_update_time: test_time
+    mmp_node_name: test_node
+    mmp_device_name: test.img
 
 
 Group 0: (Blocks 0-32767)
index 6a9394d..e456183 100644 (file)
@@ -3,16 +3,6 @@ FS_SIZE=65536
 MKE2FS_DEVICE_SECTSIZE=2048
 export MKE2FS_DEVICE_SECTSIZE
 
-# use current directory instead of /tmp becase tmpfs doesn't support DIO
-rm -f $TMPFILE
-TMPFILE=$(mktemp ./tmp-$test_name.XXXXXX)
-
-stat -f $TMPFILE | grep -q "Type: tmpfs"
-if [ $? = 0 ]; then
-       rm -f $TMPFILE
-       echo "$test_name: $test_description: skipped for tmpfs (no O_DIRECT)"
-       return 0
-fi
 MKE2FS_OPTS="-b 4096 -O mmp"
 . $cmd_dir/run_mke2fs
 unset MKE2FS_DEVICE_SECTSIZE
index e15e7b4..a0678ac 100644 (file)
@@ -1,4 +1,7 @@
-Superblock MMP block checksum does not match MMP block.  Fix? yes
+dumpe2fs: MMP block checksum does not match while trying to open test.img
+dumpe2fs: MMP last updated by 'test_node' on test date
+Exit status is 1
+Superblock MMP block checksum does not match.  Fix? yes
 
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
@@ -7,3 +10,14 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/128 files (0.0% non-contiguous), 19/512 blocks
 Exit status is 0
+dumpe2fs: it is safe to mount 'test.img', MMP is clean
+Exit status is 0
+MMP_block:
+    mmp_magic: 0x4d4d50
+    mmp_check_interval: 5
+    mmp_sequence: 0xff4d4d50
+    mmp_update_date: test date
+    mmp_update_time: test_time
+    mmp_node_name: test_node
+    mmp_device_name: test.img
+    mmp_block_number: 8
index 09e870c..a5e222e 100644 (file)
@@ -1,19 +1,16 @@
-# use current directory instead of /tmp becase tmpfs doesn't support DIO
-rm -f $TMPFILE
-TMPFILE=$(mktemp ./tmp-$test_name.XXXXXX)
-
-stat -f $TMPFILE | grep -q "Type: tmpfs"
-if [ $? = 0 ]; then
-       rm -f $TMPFILE
-       echo "$test_name: $test_description: skipped for tmpfs (no O_DIRECT)"
-       return 0
-fi
 gzip -dc < $test_dir/image.gz > $TMPFILE
 
 OUT=$test_name.log
 EXP=$test_dir/expect
-$FSCK -fy $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed > $OUT
+$E2MMPSTATUS $TMPFILE > $OUT 2>&1
+echo Exit status is $? >> $OUT
+$FSCK -fy $TMPFILE >> $OUT 2>&1
+echo Exit status is $? >> $OUT
+$E2MMPSTATUS $TMPFILE >> $OUT 2>&1
 echo Exit status is $? >> $OUT
+$E2MMPSTATUS -i $TMPFILE >> $OUT 2>&1
+sed -f $cmd_dir/filter.sed $OUT > $OUT.new
+mv $OUT.new $OUT
 
 rm -f $TMPFILE
 cmp -s $OUT $EXP
index b5dfb89..d5fa98c 100644 (file)
@@ -1,3 +1,5 @@
+dumpe2fs: MMP: invalid magic number while trying to open test.img
+Exit status is 2
 Superblock has invalid MMP magic.  Fix? yes
 
 Pass 1: Checking inodes, blocks, and sizes
@@ -7,3 +9,14 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/128 files (0.0% non-contiguous), 19/512 blocks
 Exit status is 0
+dumpe2fs: it is safe to mount 'test.img', MMP is clean
+Exit status is 0
+MMP_block:
+    mmp_magic: 0x4d4d50
+    mmp_check_interval: 5
+    mmp_sequence: 0xff4d4d50
+    mmp_update_date: test date
+    mmp_update_time: test_time
+    mmp_node_name: test_node
+    mmp_device_name: test.img
+    mmp_block_number: 8
index 09e870c..a5e222e 100644 (file)
@@ -1,19 +1,16 @@
-# use current directory instead of /tmp becase tmpfs doesn't support DIO
-rm -f $TMPFILE
-TMPFILE=$(mktemp ./tmp-$test_name.XXXXXX)
-
-stat -f $TMPFILE | grep -q "Type: tmpfs"
-if [ $? = 0 ]; then
-       rm -f $TMPFILE
-       echo "$test_name: $test_description: skipped for tmpfs (no O_DIRECT)"
-       return 0
-fi
 gzip -dc < $test_dir/image.gz > $TMPFILE
 
 OUT=$test_name.log
 EXP=$test_dir/expect
-$FSCK -fy $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed > $OUT
+$E2MMPSTATUS $TMPFILE > $OUT 2>&1
+echo Exit status is $? >> $OUT
+$FSCK -fy $TMPFILE >> $OUT 2>&1
+echo Exit status is $? >> $OUT
+$E2MMPSTATUS $TMPFILE >> $OUT 2>&1
 echo Exit status is $? >> $OUT
+$E2MMPSTATUS -i $TMPFILE >> $OUT 2>&1
+sed -f $cmd_dir/filter.sed $OUT > $OUT.new
+mv $OUT.new $OUT
 
 rm -f $TMPFILE
 cmp -s $OUT $EXP
index 58b311c..deaf22e 100644 (file)
@@ -26,6 +26,7 @@ Filesystem OS type:       Linux
 Inode count:              16384
 Block count:              65536
 Reserved block count:     3276
+Overhead clusters:        2081
 Free blocks:              63442
 Free inodes:              16373
 First block:              1
index e4bc3c4..d49e555 100755 (executable)
@@ -2,18 +2,18 @@ test_description="mke2fs with offset option (-E offset=N)"
 OUT="$test_name.log"
 
 echo "testing mke2fs with -E offset=524288 option (no fssize)" > "$OUT"
-yes a | dd of="$TMPFILE" bs=1k count=2048 iflag=fullblock 2>>"$OUT"
+yes a | $DD of="$TMPFILE" bs=1k count=2048 iflag=fullblock 2>>"$OUT"
 $MKE2FS -F -b 1024 -E offset=524288 "$TMPFILE" >> "$OUT" 2>&1
 # compute crc of the first 512 1k blocks
-crc_first1=`dd if="$TMPFILE" bs=1k count=512 2>/dev/null | $CRCSUM`
+crc_first1=`$DD if="$TMPFILE" bs=1k count=512 2>/dev/null | $CRCSUM`
 
 echo "testing mke2fs with -E offset=524288 option (explicit fssize)" >> "$OUT"
-yes a | dd of="$TMPFILE" bs=1k count=2048 iflag=fullblock 2>>"$OUT"
+yes a | $DD of="$TMPFILE" bs=1k count=2048 iflag=fullblock 2>>"$OUT"
 $MKE2FS -F -b 1024 -E offset=524288 "$TMPFILE" 1024 >> "$OUT" 2>&1
 # compute crc of the first and last 512 1k blocks
-crc_first2=`dd if="$TMPFILE" bs=1k count=512 2>/dev/null | $CRCSUM`
-crc_last2=`dd if="$TMPFILE" bs=1k count=512 skip=1536 2>/dev/null | $CRCSUM`
-crc_exp=`yes a | dd bs=1k count=512 2>/dev/null | $CRCSUM`
+crc_first2=`$DD if="$TMPFILE" bs=1k count=512 2>/dev/null | $CRCSUM`
+crc_last2=`$DD if="$TMPFILE" bs=1k count=512 skip=1536 2>/dev/null | $CRCSUM`
+crc_exp=`yes a | $DD bs=1k count=512 2>/dev/null | $CRCSUM`
 # a warning should be only emitted by the first mke2fs call
 warning=`grep -c "offset specified without an explicit file system size." \
        "$OUT"`
index 8cdad30..74e38ca 100644 (file)
@@ -26,6 +26,7 @@ Filesystem OS type:       Linux
 Inode count:              32768
 Block count:              131072
 Reserved block count:     6553
+Overhead clusters:        9773
 Free blocks:              121267
 Free inodes:              32756
 First block:              1
index 0fccb7c..7536631 100644 (file)
@@ -26,6 +26,7 @@ Filesystem OS type:       Linux
 Inode count:              32768
 Block count:              131072
 Reserved block count:     6553
+Overhead clusters:        7224
 Free blocks:              123834
 Free inodes:              32757
 First block:              1
diff --git a/tests/m_resize_inode_meta_bg/expect.1 b/tests/m_resize_inode_meta_bg/expect.1
new file mode 100644 (file)
index 0000000..7feaed9
--- /dev/null
@@ -0,0 +1,172 @@
+Creating filesystem with 3840 4k blocks and 960 inodes
+Superblock backups stored on blocks: 
+       256, 768, 1280, 1792, 2304
+
+Allocating group tables:      \b\b\b\b\bdone                            
+Writing inode tables:      \b\b\b\b\bdone                            
+Creating journal (1024 blocks): done
+Writing superblocks and filesystem accounting information:      \b\b\b\b\bdone
+
+Filesystem features: has_journal ext_attr dir_index filetype meta_bg extent 64bit flex_bg sparse_super 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
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 11/960 files (0.0% non-contiguous), 1127/3840 blocks
+Exit status is 0
+Filesystem volume name:   <none>
+Last mounted on:          <not available>
+Filesystem magic number:  0xEF53
+Filesystem revision #:    1 (dynamic)
+Filesystem features:      has_journal ext_attr dir_index filetype meta_bg extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
+Default mount options:    (none)
+Filesystem state:         clean
+Errors behavior:          Continue
+Filesystem OS type:       Linux
+Inode count:              960
+Block count:              3840
+Reserved block count:     192
+Overhead clusters:        1122
+Free blocks:              2713
+Free inodes:              949
+First block:              0
+Block size:               4096
+Fragment size:            4096
+Group descriptor size:    64
+Blocks per group:         256
+Fragments per group:      256
+Inodes per group:         64
+Inode blocks per group:   4
+Flex block group size:    16
+Mount count:              0
+Check interval:           15552000 (6 months)
+Reserved blocks uid:      0
+Reserved blocks gid:      0
+First inode:              11
+Inode size:              256
+Required extra isize:     32
+Desired extra isize:      32
+Journal inode:            8
+Default directory hash:   half_md4
+Journal backup:           inode blocks
+Journal features:         (none)
+Total journal size:       4096k
+Total journal blocks:     1024
+Max transaction length:   1024
+Fast commit length:       0
+Journal sequence:         0x00000001
+Journal start:            0
+
+
+Group 0: (Blocks 0-255) [ITABLE_ZEROED]
+  Primary superblock at 0, Group descriptor at 1
+  Block bitmap at 2 (+2)
+  Inode bitmap at 17 (+17)
+  Inode table at 32-35 (+32)
+  159 free blocks, 53 free inodes, 2 directories, 53 unused inodes
+  Free blocks: 97-255
+  Free inodes: 12-64
+Group 1: (Blocks 256-511) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Backup superblock at 256, Group descriptor at 257
+  Block bitmap at 3 (bg #0 + 3)
+  Inode bitmap at 18 (bg #0 + 18)
+  Inode table at 36-39 (bg #0 + 36)
+  254 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 258-511
+  Free inodes: 65-128
+Group 2: (Blocks 512-767) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 4 (bg #0 + 4)
+  Inode bitmap at 19 (bg #0 + 19)
+  Inode table at 40-43 (bg #0 + 40)
+  256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 512-767
+  Free inodes: 129-192
+Group 3: (Blocks 768-1023) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Backup superblock at 768
+  Block bitmap at 5 (bg #0 + 5)
+  Inode bitmap at 20 (bg #0 + 20)
+  Inode table at 44-47 (bg #0 + 44)
+  255 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 769-1023
+  Free inodes: 193-256
+Group 4: (Blocks 1024-1279) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 6 (bg #0 + 6)
+  Inode bitmap at 21 (bg #0 + 21)
+  Inode table at 48-51 (bg #0 + 48)
+  256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 1024-1279
+  Free inodes: 257-320
+Group 5: (Blocks 1280-1535) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Backup superblock at 1280
+  Block bitmap at 7 (bg #0 + 7)
+  Inode bitmap at 22 (bg #0 + 22)
+  Inode table at 52-55 (bg #0 + 52)
+  255 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 1281-1535
+  Free inodes: 321-384
+Group 6: (Blocks 1536-1791) [INODE_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 8 (bg #0 + 8)
+  Inode bitmap at 23 (bg #0 + 23)
+  Inode table at 56-59 (bg #0 + 56)
+  0 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 
+  Free inodes: 385-448
+Group 7: (Blocks 1792-2047) [INODE_UNINIT, ITABLE_ZEROED]
+  Backup superblock at 1792
+  Block bitmap at 9 (bg #0 + 9)
+  Inode bitmap at 24 (bg #0 + 24)
+  Inode table at 60-63 (bg #0 + 60)
+  0 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 
+  Free inodes: 449-512
+Group 8: (Blocks 2048-2303) [INODE_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 10 (bg #0 + 10)
+  Inode bitmap at 25 (bg #0 + 25)
+  Inode table at 64-67 (bg #0 + 64)
+  0 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 
+  Free inodes: 513-576
+Group 9: (Blocks 2304-2559) [INODE_UNINIT, ITABLE_ZEROED]
+  Backup superblock at 2304
+  Block bitmap at 11 (bg #0 + 11)
+  Inode bitmap at 26 (bg #0 + 26)
+  Inode table at 68-71 (bg #0 + 68)
+  0 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 
+  Free inodes: 577-640
+Group 10: (Blocks 2560-2815) [INODE_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 12 (bg #0 + 12)
+  Inode bitmap at 27 (bg #0 + 27)
+  Inode table at 72-75 (bg #0 + 72)
+  254 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 2562-2815
+  Free inodes: 641-704
+Group 11: (Blocks 2816-3071) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 13 (bg #0 + 13)
+  Inode bitmap at 28 (bg #0 + 28)
+  Inode table at 76-79 (bg #0 + 76)
+  256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 2816-3071
+  Free inodes: 705-768
+Group 12: (Blocks 3072-3327) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 14 (bg #0 + 14)
+  Inode bitmap at 29 (bg #0 + 29)
+  Inode table at 80-83 (bg #0 + 80)
+  256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 3072-3327
+  Free inodes: 769-832
+Group 13: (Blocks 3328-3583) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 15 (bg #0 + 15)
+  Inode bitmap at 30 (bg #0 + 30)
+  Inode table at 84-87 (bg #0 + 84)
+  256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 3328-3583
+  Free inodes: 833-896
+Group 14: (Blocks 3584-3839) [INODE_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 16 (bg #0 + 16)
+  Inode bitmap at 31 (bg #0 + 31)
+  Inode table at 88-91 (bg #0 + 88)
+  256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
+  Free blocks: 3584-3839
+  Free inodes: 897-960
diff --git a/tests/m_resize_inode_meta_bg/script b/tests/m_resize_inode_meta_bg/script
new file mode 100644 (file)
index 0000000..41ffb32
--- /dev/null
@@ -0,0 +1,7 @@
+DESCRIPTION="resize_inode and meta_bg enabled"
+FS_SIZE=15360
+MKE2FS_DEVICE_SECTSIZE=4096
+export MKE2FS_DEVICE_SECTSIZE
+MKE2FS_OPTS="-T ext4 -g256 -O 64bit"
+. $cmd_dir/run_mke2fs
+unset MKE2FS_DEVICE_SECTSIZE
index 30d119e..9c978b0 100644 (file)
@@ -24,6 +24,7 @@ Filesystem OS type:       Linux
 Inode count:              128
 Block count:              1024
 Reserved block count:     51
+Overhead clusters:        24
 Free blocks:              986
 Free inodes:              117
 First block:              1
index 7b5c18d..dbc7977 100644 (file)
@@ -10,6 +10,7 @@ Filesystem OS type:       Linux
 Inode count:              1024
 Block count:              16384
 Reserved block count:     819
+Overhead clusters:        1543
 Free blocks:              14786
 Free inodes:              1005
 First block:              1
@@ -35,8 +36,10 @@ Default directory hash:   half_md4
 Journal backup:           inode blocks
 Checksum type:            crc32c
 Journal features:         (none)
-Journal size:             1024k
-Journal length:           1024
+Total journal size:       1024k
+Total journal blocks:     1024
+Max transaction length:   1024
+Fast commit length:       0
 Journal sequence:         0x00000001
 Journal start:            0
 
index fbe1b31..2e54ae1 100644 (file)
@@ -1,6 +1,9 @@
-if test -x $DEBUGFS_EXE; then
-
 test_description="create fs image from dir"
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
+
 MKFS_DIR=$TMPFILE.dir
 OUT=$test_name.log
 EXP=$test_dir/expect
@@ -34,7 +37,7 @@ stat /emptydir
 stat /dir
 stat /dir/file
 ENDL
-$DEBUGFS -f $TMPFILE.cmd $TMPFILE 2>&1 | egrep "(stat|Size:|Type:)" | sed -f $test_dir/output.sed >> $OUT
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE 2>&1 | egrep "(stat|Size:|Type:)" >> $OUT
 
 cat > $TMPFILE.cmd << ENDL
 ex /emptyfile
@@ -44,11 +47,11 @@ ex /bigzerofile
 ex /dir
 ex /dir/file
 ENDL
-$DEBUGFS -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $test_dir/output.sed >> $OUT 2>&1
+$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT 2>&1
 
 $FSCK -f -n $TMPFILE >> $OUT 2>&1
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" < $OUT > $OUT.tmp
+sed -f $cmd_dir/filter.sed -f $test_dir/output.sed -e "s;$TMPFILE;test.img;" < $OUT > $OUT.tmp
 mv $OUT.tmp $OUT
 
 # Do the verification
@@ -63,9 +66,5 @@ else
         diff $DIFF_OPTS $EXP $OUT > $test_name.failed
 fi
 
-rm -rf $TMPFILE.cmd $MKFS_DIR $OUT.sed
+rm -rf $TMPFILE.cmd $MKFS_DIR
 unset MKFS_DIR OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index b05031f..a11cb9b 100644 (file)
@@ -26,6 +26,7 @@ Filesystem OS type:       Linux
 Inode count:              16384
 Block count:              65536
 Reserved block count:     3276
+Overhead clusters:        3350
 Free blocks:              62172
 Free inodes:              16373
 First block:              1
index e886dfb..b60e8cc 100644 (file)
@@ -26,6 +26,7 @@ Filesystem OS type:       Linux
 Inode count:              32768
 Block count:              131072
 Reserved block count:     6553
+Overhead clusters:        5677
 Free blocks:              125381
 Free inodes:              32757
 First block:              1
index c06050d..ee246ba 100644 (file)
                features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
                inode_size = 256
        }
-       ext4dev = {
-               features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
-               inode_size = 256
-               options = test_fs=1
-       }
        small = {
                blocksize = 1024
                inode_size = 128
index f6a31b9..e1325c6 100644 (file)
@@ -8,6 +8,7 @@ VPATH = @srcdir@
 top_builddir = ../..
 my_dir = tests/progs
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
 @MCONFIG@
 
@@ -71,10 +72,12 @@ distclean: clean
 # Makefile dependencies follow.  This must be the last section in
 # the Makefile.in file
 #
-test_rel.o: $(srcdir)/test_rel.c $(top_srcdir)/lib/et/com_err.h \
+test_rel.o: $(srcdir)/test_rel.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/et/com_err.h \
  $(top_srcdir)/lib/ss/ss.h $(top_builddir)/lib/ss/ss_err.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/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/ext2fs/irel.h $(top_srcdir)/lib/ext2fs/brel.h \
- $(srcdir)/test_rel.h
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.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/hashmap.h \
+ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/ext2fs/irel.h \
+ $(top_srcdir)/lib/ext2fs/brel.h $(srcdir)/test_rel.h
index d028a60..8b01ea4 100644 (file)
@@ -61,7 +61,8 @@ static int parse_inode(const char *request, const char *desc,
        return 0;
 }
 
-void do_create_icount(int argc, char **argv)
+void do_create_icount(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                     void *infop EXT2FS_ATTR((unused)))
 {
        errcode_t       retval;
        char            *progname;
@@ -91,8 +92,13 @@ void do_create_icount(int argc, char **argv)
        }
 }
 
-void do_free_icount(int argc, char **argv)
+void do_free_icount(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
+       if (argc != 1) {
+               printf("Usage: free_icount\n");
+               return;
+       }
        if (check_icount(argv[0]))
                return;
 
@@ -100,7 +106,8 @@ void do_free_icount(int argc, char **argv)
        test_icount = 0;
 }
 
-void do_fetch(int argc, char **argv)
+void do_fetch(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        const char      *usage = "usage: %s inode\n";
        errcode_t       retval;
@@ -123,7 +130,8 @@ void do_fetch(int argc, char **argv)
        printf("Count is %u\n", count);
 }
 
-void do_increment(int argc, char **argv)
+void do_increment(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        const char      *usage = "usage: %s inode\n";
        errcode_t       retval;
@@ -147,7 +155,8 @@ void do_increment(int argc, char **argv)
        printf("Count is now %u\n", count);
 }
 
-void do_decrement(int argc, char **argv)
+void do_decrement(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        const char      *usage = "usage: %s inode\n";
        errcode_t       retval;
@@ -171,7 +180,8 @@ void do_decrement(int argc, char **argv)
        printf("Count is now %u\n", count);
 }
 
-void do_store(int argc, char **argv)
+void do_store(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        const char      *usage = "usage: %s inode count\n";
        errcode_t       retval;
@@ -200,12 +210,17 @@ void do_store(int argc, char **argv)
        }
 }
 
-void do_dump(int argc, char **argv)
+void do_dump(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        errcode_t       retval;
        ext2_ino_t      i;
        __u16           count;
 
+       if (argc != 1) {
+               printf("Usage: dump\n");
+               return;
+       }
        if (check_icount(argv[0]))
                return;
        for (i=1; i <= test_fs->super->s_inodes_count; i++) {
@@ -220,10 +235,15 @@ void do_dump(int argc, char **argv)
        }
 }
 
-void do_validate(int argc, char **argv)
+void do_validate(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        errcode_t       retval;
 
+       if (argc != 1) {
+               printf("Usage: validate\n");
+               return;
+       }
        if (check_icount(argv[0]))
                return;
        retval = ext2fs_icount_validate(test_icount, stdout);
@@ -234,10 +254,15 @@ void do_validate(int argc, char **argv)
        printf("Icount structure successfully validated\n");
 }
 
-void do_get_size(int argc, char **argv)
+void do_get_size(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
+                   void *infop EXT2FS_ATTR((unused)))
 {
        ext2_ino_t      size;
 
+       if (argc != 1) {
+               printf("Usage: get_size\n");
+               return;
+       }
        if (check_icount(argv[0]))
                return;
        size = ext2fs_get_icount_size(test_icount);
index 59ea1a4..29d56ab 100644 (file)
@@ -1,10 +1,10 @@
-void do_create_icount(int argc, char **argv);
-void do_free_icount(int argc, char **argv);
-void do_fetch(int argc, char **argv);
-void do_increment(int argc, char **argv);
-void do_decrement(int argc, char **argv);
-void do_store(int argc, char **argv);
-void do_get_size(int argc, char **argv);
-void do_dump(int argc, char **argv);
-void do_validate(int argc, char **argv);
+void do_create_icount(int argc, char **argv, int sci_idx, void *infop);
+void do_free_icount(int argc, char **argv, int sci_idx, void *infop);
+void do_fetch(int argc, char **argv, int sci_idx, void *infop);
+void do_increment(int argc, char **argv, int sci_idx, void *infop);
+void do_decrement(int argc, char **argv, int sci_idx, void *infop);
+void do_store(int argc, char **argv, int sci_idx, void *infop);
+void do_get_size(int argc, char **argv, int sci_idx, void *infop);
+void do_dump(int argc, char **argv, int sci_idx, void *infop);
+void do_validate(int argc, char **argv, int sci_idx, void *infop);
 
index 2038cb9..cdeb8e3 100644 (file)
@@ -1,6 +1,9 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-
 test_description="ext2 1024 blocksize with small block groups"
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
+
 FEATURES="-t ext2 -O ^resize_inode -b 1024 -g 1024"
 SIZE_1=64M
 SIZE_2=2G
@@ -16,7 +19,7 @@ if [ $RC -eq 0 ]; then
        echo "$test_name: $test_description: ok"
        touch $test_name.ok
 elif [ $RC -eq 111 ]; then
-       echo "$test_name: $test_description: skipped"
+       echo "$test_name: $test_description: skipped (no large sparse files)"
        touch $test_name.ok
 else
        echo "$test_name: $test_description: failed"
@@ -25,7 +28,3 @@ 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 f5fa56b..de573b3 100644 (file)
@@ -31,7 +31,13 @@ Change in FS metadata:
  Default mount options:    user_xattr acl
  Filesystem state:         clean
  Errors behavior:          Continue
-@@ -15,7 +15,8 @@
+@@ -10,13 +10,13 @@
+ Inode count:              65536
+ Block count:              524288
+ Reserved block count:     26214
+-Overhead clusters:        35228
+ Free blocks:              589
+ Free inodes:              65048
  First block:              1
  Block size:               1024
  Fragment size:            1024
@@ -41,7 +47,7 @@ Change in FS metadata:
  Blocks per group:         8192
  Fragments per group:      8192
  Inodes per group:         1024
-@@ -40,16 +41,16 @@
+@@ -43,16 +43,16 @@
  
  
  group:block:super:gdt:bbitmap:ibitmap:itable
@@ -64,7 +70,7 @@ Change in FS metadata:
  10:81921:-1:-1:270:286:2852
  11:90113:-1:-1:271:287:3108
  12:98305:-1:-1:272:288:3364
-@@ -65,9 +66,9 @@
+@@ -68,9 +68,9 @@
  22:180225:-1:-1:131079:131095:132641
  23:188417:-1:-1:131080:131096:132897
  24:196609:-1:-1:131081:131097:133153
@@ -76,7 +82,7 @@ Change in FS metadata:
  28:229377:-1:-1:131085:131101:134177
  29:237569:-1:-1:131086:131102:134433
  30:245761:-1:-1:131087:131103:134689
-@@ -89,7 +90,7 @@
+@@ -92,7 +92,7 @@
  46:376833:-1:-1:262159:262175:265761
  47:385025:-1:-1:262160:262176:266017
  48:393217:-1:-1:393217:393233:393249
index de08bfb..47ca9ea 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 FSCK_OPT=-fn
 OUT=$test_name.log
@@ -24,7 +27,7 @@ ENDL
 echo "resize2fs test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h $TMPFILE 524288 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
 ($DUMPE2FS -h $TMPFILE; $DUMPE2FS -g $TMPFILE) 2> /dev/null | sed -f $cmd_dir/filter.sed > $OUT.before
@@ -34,7 +37,7 @@ echo Exit status is $status >> $OUT
 
 # resize it
 echo "resize2fs test.img -b" >> $OUT
-$RESIZE2FS -b -f $TMPFILE 2>&1 >> $OUT 2>&1
+$RESIZE2FS -b -f $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
 
@@ -52,7 +55,7 @@ rm $TMPFILE $OUT.before $OUT.after
 # Do the verification
 #
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" -e 's/test_filesys:.*//g' < $OUT > $OUT.new
+sed -f $cmd_dir/filter.sed -e 's/test_filesys:.*//g' < $OUT > $OUT.new
 mv $OUT.new $OUT
 
 cmp -s $OUT $EXP
@@ -67,8 +70,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP CONF
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
-
index 2f04601..34b08c7 100644 (file)
@@ -1 +1 @@
-convert a totally full filesystem to 64bit, then expand
+convert+expand full fs to 64bit
index 7a57084..018f42c 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 FSCK_OPT=-fn
 OUT=$test_name.log
@@ -26,7 +29,7 @@ ENDL
 echo "resize2fs test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h $TMPFILE 786432 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # check
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1
@@ -35,18 +38,18 @@ echo Exit status is $status >> $OUT
 
 # convert it
 echo "resize2fs -b test.img" >> $OUT
-$RESIZE2FS -b -f $TMPFILE 2>&1 >> $OUT 2>&1
-$DUMPE2FS -g $TMPFILE 2>&1 >> $OUT.before 2> /dev/null
+$RESIZE2FS -b -f $TMPFILE >> $OUT 2>&1
+$DUMPE2FS -g $TMPFILE >> $OUT.before 2> /dev/null
 
 # grow it
 echo "resize2fs test.img" >> $OUT
 dd if=/dev/zero of=$TMPFILE conv=notrunc bs=1 count=1 seek=1207959552 2> /dev/null
-$RESIZE2FS -f $TMPFILE 2>&1 >> $OUT 2>&1
+$RESIZE2FS -f $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
 
 # dump and check
-$DUMPE2FS -g $TMPFILE 2>&1 >> $OUT.after 2> /dev/null
+$DUMPE2FS -g $TMPFILE >> $OUT.after 2> /dev/null
 echo "Change in FS metadata:" >> $OUT
 diff -u $OUT.before $OUT.after | tail -n +3 >> $OUT
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1
@@ -76,8 +79,3 @@ fi
 rm $OUT.before $OUT.after
 
 unset IMAGE FSCK_OPT OUT EXP CONF
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
-
index 0eacd45..70babbd 100644 (file)
@@ -31,10 +31,11 @@ Change in FS metadata:
  Default mount options:    user_xattr acl
  Filesystem state:         clean
  Errors behavior:          Continue
-@@ -10,11 +10,12 @@
+@@ -10,12 +10,12 @@
  Inode count:              65536
  Block count:              524288
  Reserved block count:     26214
+-Overhead clusters:        32912
 -Free blocks:              858
 +Free blocks:              852
  Free inodes:              65046
@@ -45,7 +46,7 @@ Change in FS metadata:
  Blocks per group:         8192
  Fragments per group:      8192
  Inodes per group:         1024
-@@ -54,9 +55,9 @@
+@@ -57,9 +57,9 @@
  12:98305:-1:-1:15:31:3107
  13:106497:-1:-1:16:32:3363
  14:114689:-1:-1:17:33:3619
@@ -58,7 +59,7 @@ Change in FS metadata:
  18:147457:-1:-1:131075:131091:131617
  19:155649:-1:-1:131076:131092:131873
  20:163841:-1:-1:131077:131093:132129
-@@ -86,9 +87,9 @@
+@@ -89,9 +89,9 @@
  44:360449:-1:-1:262158:262174:265250
  45:368641:-1:-1:262159:262175:265506
  46:376833:-1:-1:262160:262176:265762
index 25872c4..5bf649f 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 FSCK_OPT=-fn
 OUT=$test_name.log
@@ -24,7 +27,7 @@ ENDL
 echo "resize2fs test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h $TMPFILE 524288 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
 ($DUMPE2FS -h $TMPFILE; $DUMPE2FS -g $TMPFILE) 2> /dev/null | sed -f $cmd_dir/filter.sed > $OUT.before
@@ -34,7 +37,7 @@ echo Exit status is $status >> $OUT
 
 # resize it
 echo "resize2fs test.img -b" >> $OUT
-$RESIZE2FS -b -f $TMPFILE 2>&1 >> $OUT 2>&1
+$RESIZE2FS -b -f $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
 
@@ -67,8 +70,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP CONF
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
-
index b51663d..a1d2aeb 100644 (file)
@@ -31,10 +31,11 @@ Change in FS metadata:
  Default mount options:    user_xattr acl
  Filesystem state:         clean
  Errors behavior:          Continue
-@@ -10,11 +10,12 @@
+@@ -10,12 +10,12 @@
  Inode count:              98304
  Block count:              786432
  Reserved block count:     39321
+-Overhead clusters:        41193
 -Free blocks:              764
 +Free blocks:              734
  Free inodes:              97566
@@ -45,7 +46,7 @@ Change in FS metadata:
  Blocks per group:         8192
  Fragments per group:      8192
  Inodes per group:         1024
-@@ -38,16 +39,16 @@
+@@ -41,16 +41,16 @@
  
  
  group:block:super:gdt:bbitmap:ibitmap:itable
@@ -68,7 +69,7 @@ Change in FS metadata:
  10:81921:-1:-1:81921:81922:81923
  11:90113:-1:-1:90113:90114:90115
  12:98305:-1:-1:98305:98306:98307
-@@ -63,9 +64,9 @@
+@@ -66,9 +66,9 @@
  22:180225:-1:-1:180225:180226:180227
  23:188417:-1:-1:188417:188418:188419
  24:196609:-1:-1:196609:196610:196611
@@ -80,7 +81,7 @@ Change in FS metadata:
  28:229377:-1:-1:229377:229378:229379
  29:237569:-1:-1:237569:237570:237571
  30:245761:-1:-1:245761:245762:245763
-@@ -87,7 +88,7 @@
+@@ -90,7 +90,7 @@
  46:376833:-1:-1:376833:376834:376835
  47:385025:-1:-1:385025:385026:385027
  48:393217:-1:-1:393217:393218:393219
@@ -89,7 +90,7 @@ Change in FS metadata:
  50:409601:-1:-1:409601:409602:409603
  51:417793:-1:-1:417793:417794:417795
  52:425985:-1:-1:425985:425986:425987
-@@ -119,7 +120,7 @@
+@@ -122,7 +122,7 @@
  78:638977:-1:-1:638977:638978:638979
  79:647169:-1:-1:647169:647170:647171
  80:655361:-1:-1:655361:655362:655363
index 7e6bb25..7dc2155 100644 (file)
@@ -1 +1 @@
-convert 32bit fs to 64bit fs, forcing inode table move
+convert 32 to 64bit w/ itable move
index c188acd..c0b3e94 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 FSCK_OPT=-fn
 OUT=$test_name.log
@@ -24,7 +27,7 @@ ENDL
 echo "resize2fs test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h $TMPFILE 786432 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
 ($DUMPE2FS -h $TMPFILE; $DUMPE2FS -g $TMPFILE) 2> /dev/null | sed -f $cmd_dir/filter.sed > $OUT.before
@@ -34,7 +37,7 @@ echo Exit status is $status >> $OUT
 
 # convert it
 echo "resize2fs test.img -b" >> $OUT
-$RESIZE2FS -b -f $TMPFILE 2>&1 >> $OUT 2>&1
+$RESIZE2FS -b -f $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
 
@@ -67,8 +70,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP CONF
-
-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/is_slow_test b/tests/r_64bit_big_expand/is_slow_test
new file mode 100644 (file)
index 0000000..e69de29
index 0319f0e..3e5bdf2 100644 (file)
@@ -1,6 +1,9 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-
 test_description="very large fs growth using ext4 w/64bit"
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
+
 FEATURES="-t ext4 -O 64bit"
 SIZE_1=512M
 SIZE_2=2T
@@ -21,7 +24,7 @@ if [ $RC -eq 0 ]; then
        echo "$test_name: $test_description: ok"
        touch $test_name.ok
 elif [ $RC -eq 111 ]; then
-       echo "$test_name: $test_description: skipped"
+       echo "$test_name: $test_description: skipped (no large sparse files)"
        touch $test_name.ok
 else
        echo "$test_name: $test_description: failed"
@@ -29,8 +32,3 @@ else
 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 13e94a2..eb609fb 100644 (file)
@@ -31,10 +31,11 @@ Change in FS metadata:
  Default mount options:    user_xattr acl
  Filesystem state:         clean
  Errors behavior:          Continue
-@@ -10,12 +10,11 @@
+@@ -10,13 +10,11 @@
  Inode count:              65536
  Block count:              524288
  Reserved block count:     26214
+-Overhead clusters:        35246
 -Free blocks:              571
 +Free blocks:              589
  Free inodes:              65048
@@ -45,7 +46,7 @@ Change in FS metadata:
  Reserved GDT blocks:      256
  Blocks per group:         8192
  Fragments per group:      8192
-@@ -41,16 +40,16 @@
+@@ -44,16 +42,16 @@
  
  
  group:block:super:gdt:bbitmap:ibitmap:itable
@@ -68,7 +69,7 @@ Change in FS metadata:
  10:81921:-1:-1:272:288:2854
  11:90113:-1:-1:273:289:3110
  12:98305:-1:-1:274:290:3366
-@@ -66,9 +65,9 @@
+@@ -69,9 +67,9 @@
  22:180225:-1:-1:131079:131095:132641
  23:188417:-1:-1:131080:131096:132897
  24:196609:-1:-1:131081:131097:133153
@@ -80,7 +81,7 @@ Change in FS metadata:
  28:229377:-1:-1:131085:131101:134177
  29:237569:-1:-1:131086:131102:134433
  30:245761:-1:-1:131087:131103:134689
-@@ -90,7 +89,7 @@
+@@ -93,7 +91,7 @@
  46:376833:-1:-1:262159:262175:265761
  47:385025:-1:-1:262160:262176:266017
  48:393217:-1:-1:393217:393233:393249
index 5d959f0..a981835 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 FSCK_OPT=-fn
 OUT=$test_name.log
@@ -24,7 +27,7 @@ ENDL
 echo "resize2fs test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h $TMPFILE 524288 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
 ($DUMPE2FS -h $TMPFILE; $DUMPE2FS -g $TMPFILE) 2> /dev/null | sed -f $cmd_dir/filter.sed > $OUT.before
@@ -34,7 +37,7 @@ echo Exit status is $status >> $OUT
 
 # resize it
 echo "resize2fs test.img -s" >> $OUT
-$RESIZE2FS -s -f $TMPFILE 2>&1 >> $OUT 2>&1
+$RESIZE2FS -s -f $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
 
@@ -52,7 +55,7 @@ rm $TMPFILE
 # Do the verification
 #
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" -e 's/test_filesys:.*//g' < $OUT > $OUT.new
+sed -f $cmd_dir/filter.sed -e 's/test_filesys:.*//g' < $OUT > $OUT.new
 mv $OUT.new $OUT
 
 cmp -s $OUT $EXP
@@ -69,8 +72,3 @@ fi
 rm $OUT.before $OUT.after
 
 unset IMAGE FSCK_OPT OUT EXP CONF
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
-
index d6e2dcc..7065590 100644 (file)
@@ -31,10 +31,11 @@ Change in FS metadata:
  Default mount options:    user_xattr acl
  Filesystem state:         clean
  Errors behavior:          Continue
-@@ -10,12 +10,11 @@
+@@ -10,13 +10,11 @@
  Inode count:              65536
  Block count:              524288
  Reserved block count:     26214
+-Overhead clusters:        32918
 -Free blocks:              852
 +Free blocks:              858
  Free inodes:              65046
@@ -45,7 +46,7 @@ Change in FS metadata:
  Blocks per group:         8192
  Fragments per group:      8192
  Inodes per group:         1024
-@@ -55,9 +54,9 @@
+@@ -58,9 +56,9 @@
  12:98305:-1:-1:15:31:3107
  13:106497:-1:-1:16:32:3363
  14:114689:-1:-1:17:33:3619
@@ -58,7 +59,7 @@ Change in FS metadata:
  18:147457:-1:-1:131076:131092:131618
  19:155649:-1:-1:131077:131093:131874
  20:163841:-1:-1:131078:131094:132130
-@@ -87,9 +86,9 @@
+@@ -90,9 +88,9 @@
  44:360449:-1:-1:262158:262174:265250
  45:368641:-1:-1:262159:262175:265506
  46:376833:-1:-1:262160:262176:265762
index 5a02e26..9553e32 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 FSCK_OPT=-fn
 OUT=$test_name.log
@@ -24,7 +27,7 @@ ENDL
 echo "resize2fs test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h $TMPFILE 524288 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
 ($DUMPE2FS -h $TMPFILE; $DUMPE2FS -g $TMPFILE) 2> /dev/null | sed -f $cmd_dir/filter.sed > $OUT.before
@@ -34,7 +37,7 @@ echo Exit status is $status >> $OUT
 
 # resize it
 echo "resize2fs test.img -s" >> $OUT
-$RESIZE2FS -s -f $TMPFILE 2>&1 >> $OUT 2>&1
+$RESIZE2FS -s -f $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
 
@@ -52,7 +55,7 @@ rm $TMPFILE
 # Do the verification
 #
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" -e 's/test_filesys:.*//g' < $OUT > $OUT.new
+sed -f $cmd_dir/filter.sed -e 's/test_filesys:.*//g' < $OUT > $OUT.new
 mv $OUT.new $OUT
 
 cmp -s $OUT $EXP
@@ -69,8 +72,3 @@ fi
 rm $OUT.before $OUT.after
 
 unset IMAGE FSCK_OPT OUT EXP CONF
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
-
index d939aea..ac29e92 100644 (file)
@@ -1,6 +1,9 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-
 test_description="ext4 with bigalloc"
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
+
 FEATURES="-t ext4 -O bigalloc"
 SIZE_1=512M
 SIZE_2=2T
@@ -22,7 +25,7 @@ if [ $RC -eq 0 ]; then
        echo "$test_name: $test_description: ok"
        touch $test_name.ok
 elif [ $RC -eq 111 ]; then
-       echo "$test_name: $test_description: skipped"
+       echo "$test_name: $test_description: skipped (no large sparse files)"
        touch $test_name.ok
 else
        echo "$test_name: $test_description: failed"
@@ -30,8 +33,3 @@ else
 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 a2c09db..8b25652 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 FSCK_OPT=-fn
 OUT=$test_name.log
@@ -23,26 +26,32 @@ cat > $CONF << ENDL
        }
 ENDL
 
+if [ $(uname -s) = "Darwin" ]; then
+       # creates a 786MB filesystem
+       echo "$test_name: $DESCRIPTION: skipped for HFS+ (no sparse files)"
+       return 0
+fi
+
 echo "resize2fs test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h $TMPFILE 786432 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
-$DUMPE2FS -g $TMPFILE 2>&1 >> $OUT.before 2> /dev/null
+$DUMPE2FS -g $TMPFILE >> $OUT.before 2> /dev/null
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
 
 # convert it
 echo "resize2fs test.img" >> $OUT
-dd if=/dev/zero of=$TMPFILE conv=notrunc bs=1 count=1 seek=3221225471 2> /dev/null
-$RESIZE2FS -f $TMPFILE 2>&1 >> $OUT 2>&1
+$DD if=/dev/zero of=$TMPFILE conv=notrunc bs=1 count=1 seek=3221225471 2> /dev/null
+$RESIZE2FS -f $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
 
 # dump and check
-$DUMPE2FS -g $TMPFILE 2>&1 >> $OUT.after 2> /dev/null
+$DUMPE2FS -g $TMPFILE >> $OUT.after 2> /dev/null
 echo "Change in FS metadata:" >> $OUT
 diff -u $OUT.before $OUT.after | tail -n +3 >> $OUT
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1
@@ -72,8 +81,3 @@ fi
 rm $OUT.before $OUT.after
 
 unset IMAGE FSCK_OPT OUT EXP CONF
-
-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/is_slow_test b/tests/r_ext4_big_expand/is_slow_test
new file mode 100644 (file)
index 0000000..e69de29
index 1b8c823..c081d44 100644 (file)
@@ -1,6 +1,9 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-
 test_description="very large fs growth using ext4"
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
+
 FEATURES="-t ext4"
 SIZE_1=512M
 SIZE_2=2T
@@ -21,7 +24,7 @@ if [ $RC -eq 0 ]; then
        echo "$test_name: $test_description: ok"
        touch $test_name.ok
 elif [ $RC -eq 111 ]; then
-       echo "$test_name: $test_description: skipped"
+       echo "$test_name: $test_description: skipped (no large sparse files)"
        touch $test_name.ok
 else
        echo "$test_name: $test_description: failed"
@@ -29,8 +32,3 @@ else
 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 cdc6e4a..ac7556c 100644 (file)
@@ -1,6 +1,9 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-
 test_description="ext4 1024 blocksize with small block groups"
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
+
 FEATURES="-t ext4 -O ^resize_inode -b 1024 -g 512"
 SIZE_1=64M
 SIZE_2=2G
@@ -16,7 +19,7 @@ if [ $RC -eq 0 ]; then
        echo "$test_name: $test_description: ok"
        touch $test_name.ok
 elif [ $RC -eq 111 ]; then
-       echo "$test_name: $test_description: skipped"
+       echo "$test_name: $test_description: skipped (no large sparse files)"
        touch $test_name.ok
 else
        echo "$test_name: $test_description: failed"
@@ -24,8 +27,3 @@ else
 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 6a5c5af..9fc0ec5 100755 (executable)
@@ -1,9 +1,11 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
 test_description="fix up last bg when expanding within the last bg"
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 EXP=$test_dir/expect
-OUT=$test_name.out
-LOG=$test_name.log
+OUT=$test_name.log
 E2FSCK=../e2fsck/e2fsck
 
 $MKE2FS -T ext4 -b 1024 -F -U 56d3ee50-8532-4f29-8181-d7c6ea4a94a6 $TMPFILE 20000 > $OUT 2>&1
@@ -17,21 +19,17 @@ $RESIZE2FS_EXE -f -p $TMPFILE 20004 >> $OUT 2>&1
 $DUMPE2FS $TMPFILE 2>&1 | grep -A10 '^Group 2:' >> $OUT
 $E2FSCK -fy $TMPFILE >> $OUT 2>&1
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" < $OUT > $LOG
-rm -rf $OUT
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" < $OUT > $OUT.new
+mv $OUT.new $OUT
 
-cmp -s $LOG $EXP
-RC=$?
-if [ $RC -eq 0 ]; then
+cmp -s $OUT $EXP
+status=$?
+if [ $status -eq 0 ]; then
        echo "$test_name: $test_description: ok"
        touch $test_name.ok
 else
        echo "$test_name: $test_description: failed"
-       diff -u $EXP $LOG > $test_name.failed
+       diff -u $EXP $OUT > $test_name.failed
 fi
 
-unset EXP LOG OUT E2FSCK
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
+unset EXP OUT E2FSCK
index 97d9fd4..ea169e6 100755 (executable)
@@ -1,9 +1,11 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
 test_description="fix up last bg when expanding beyond the last bg"
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 EXP=$test_dir/expect
-OUT=$test_name.out
-LOG=$test_name.log
+OUT=$test_name.log
 E2FSCK=../e2fsck/e2fsck
 
 $MKE2FS -T ext4 -b 1024 -F -U 56d3ee50-8532-4f29-8181-d7c6ea4a94a6 $TMPFILE 20000 > $OUT 2>&1
@@ -13,25 +15,26 @@ $DEBUGFS -R "set_bg 2 flags 0" -w $TMPFILE > /dev/null 2>&1
 $DEBUGFS -R "set_bg 2 checksum 0xd318" -w $TMPFILE > /dev/null 2>&1
 $DUMPE2FS $TMPFILE 2>&1 | grep -A10 '^Group 2:' >> $OUT
 dd if=/dev/zero of=$TMPFILE bs=1 count=1 seek=$((1024 * 40000)) conv=notrunc >> $OUT 2> /dev/null
-RESIZE2FS_FORCE_ITABLE_INIT=1 $RESIZE2FS_EXE -f -p $TMPFILE >> $OUT 2>&1
+(
+RESIZE2FS_FORCE_ITABLE_INIT=1
+export RESIZE2FS_FORCE_ITABLE_INIT
+unset RESIZE2FS_FORCE_LAZY_ITABLE_INIT
+$RESIZE2FS_EXE -f -p $TMPFILE >> $OUT 2>&1
+)
 $DUMPE2FS $TMPFILE 2>&1 | grep -A10 '^Group 2:' >> $OUT
 $E2FSCK -fy $TMPFILE >> $OUT 2>&1
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" < $OUT > $LOG
-rm -rf $OUT
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" < $OUT > $OUT.new
+mv $OUT.new $OUT
 
-cmp -s $LOG $EXP
-RC=$?
-if [ $RC -eq 0 ]; then
+cmp -s $OUT $EXP
+status=$?
+if [ $status -eq 0 ]; then
        echo "$test_name: $test_description: ok"
        touch $test_name.ok
 else
        echo "$test_name: $test_description: failed"
-       diff -u $EXP $LOG > $test_name.failed
+       diff -u $EXP $OUT > $test_name.failed
 fi
 
-unset EXP LOG OUT E2FSCK
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
+unset EXP OUT E2FSCK
index 885de59..773db10 100644 (file)
@@ -1,5 +1,5 @@
 resize2fs test
-debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|user.name (''
+debugfs -R ''stat file'' test.img 2>&1 | grep -E ''^Inode\|in inode body\|user.name \(''
 Inode: 1550   Type: regular    Mode:  0644   Flags: 0x0
   user.name (11) = "propervalue"
 Exit status is 0
@@ -8,7 +8,7 @@ Resizing the filesystem on test.img to 5120 (1k) blocks.
 The filesystem on test.img is now 5120 (1k) blocks long.
 
 Exit status is 0
-debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|user.name (''
+debugfs -R ''stat file'' test.img 2>&1 | grep -E ''^Inode\|in inode body\|user.name \(''
 Inode: 12   Type: regular    Mode:  0644   Flags: 0x0
   user.name (11) = "propervalue"
 Exit status is 0
index eb2085d..2f754e6 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 IMAGE=$test_dir/image.gz
 FSCK_OPT=-yf
@@ -7,27 +10,27 @@ EXP=$test_dir/expect
 
 gunzip < $IMAGE > $TMPFILE
 
-echo "resize2fs test" > $OUT
+echo "resize2fs test" > $OUT.new
 
 # Look at existing inline extended attribute
-echo "debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|user.name (''" >> $OUT
-$DEBUGFS -R "stat file" $TMPFILE 2>&1 | grep "^Inode\|in inode body\|user.name (" >> $OUT
+echo "debugfs -R ''stat file'' test.img 2>&1 | grep -E ''^Inode\|in inode body\|user.name \\(''" >> $OUT.new
+$DEBUGFS -R "stat file" $TMPFILE 2>&1 | grep -E "^Inode|in inode body|user.name \(" >> $OUT.new
 status=$?
-echo Exit status is $status >> $OUT
+echo Exit status is $status >> $OUT.new
 
 # resize it
-echo "resize2fs test.img 5M" >> $OUT
-$RESIZE2FS $TMPFILE 5M 2>&1 >> $OUT.new 2>&1
+echo "resize2fs test.img 5M" >> $OUT.new
+$RESIZE2FS $TMPFILE 5M >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-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\|user.name (''" >> $OUT
-$DEBUGFS -R "stat file" $TMPFILE 2>&1 | grep "^Inode\|in inode body\|user.name (" >> $OUT
+echo "debugfs -R ''stat file'' test.img 2>&1 | grep -E ''^Inode\|in inode body\|user.name \\(''" >> $OUT.new
+$DEBUGFS -R "stat file" $TMPFILE 2>&1 | grep -E "^Inode|in inode body|user.name \(" >> $OUT.new
 status=$?
-echo Exit status is $status >> $OUT
+echo Exit status is $status >> $OUT.new
 
+sed -f $cmd_dir/filter.sed < $OUT.new > $OUT
 rm $TMPFILE $OUT.new
 
 #
@@ -46,8 +49,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
-
index de77777..c39b860 100644 (file)
@@ -1,6 +1,9 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-
 test_description="meta_bg shrink"
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
+
 FEATURES="-t ext4 -O 64bit,meta_bg,^resize_inode -b 1024"
 SIZE_1=1G
 SIZE_2=48M
@@ -19,7 +22,7 @@ if [ $RC -eq 0 ]; then
        echo "$test_name: $test_description: ok"
        touch $test_name.ok
 elif [ $RC -eq 111 ]; then
-       echo "$test_name: $test_description: skipped"
+       echo "$test_name: $test_description: skipped (no large sparse files)"
        touch $test_name.ok
 else
        echo "$test_name: $test_description: failed"
@@ -27,8 +30,3 @@ else
 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 beb6cf9..16d3f64 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 IMAGE=$test_dir/image.gz
 FSCK_OPT=-yf
@@ -7,10 +10,10 @@ EXP=$test_dir/expect
 
 gunzip < $IMAGE > $TMPFILE
 
-echo "resize2fs test" > $OUT
+echo "resize2fs test" > $OUT.new
 
-echo "resize2fs -M test.img" >> $OUT
-$RESIZE2FS -M $TMPFILE 2>&1 >> $OUT.new 2>&1
+echo "resize2fs -M test.img" >> $OUT.new
+$RESIZE2FS -M $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
 
@@ -18,8 +21,7 @@ echo " " >> $OUT.new
 echo fsck $FSCK_OPT -N test_filesys test.img >> $OUT.new
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT.new 2>&1
 echo Exit status is $status >> $OUT.new
-
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
 rm $TMPFILE $OUT.new
 
 #
@@ -38,8 +40,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
-
diff --git a/tests/r_move_inode_int_extent/expect b/tests/r_move_inode_int_extent/expect
new file mode 100644 (file)
index 0000000..1de31d0
--- /dev/null
@@ -0,0 +1,15 @@
+resize2fs test
+resize2fs test.img 8M
+Resizing the filesystem on test.img to 8192 (1k) blocks.
+The filesystem on test.img is now 8192 (1k) blocks long.
+
+Exit status is 0
+fsck -yf -E fixes_only -N test_filesys test.img
+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: 14/2048 files (0.0% non-contiguous), 1445/8192 blocks
+Exit status is 0
diff --git a/tests/r_move_inode_int_extent/image.gz b/tests/r_move_inode_int_extent/image.gz
new file mode 100644 (file)
index 0000000..d5de18f
Binary files /dev/null and b/tests/r_move_inode_int_extent/image.gz differ
diff --git a/tests/r_move_inode_int_extent/name b/tests/r_move_inode_int_extent/name
new file mode 100644 (file)
index 0000000..64a55b5
--- /dev/null
@@ -0,0 +1 @@
+move inode and its interior extent tree block
diff --git a/tests/r_move_inode_int_extent/script b/tests/r_move_inode_int_extent/script
new file mode 100644 (file)
index 0000000..9c1a392
--- /dev/null
@@ -0,0 +1,42 @@
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
+
+IMAGE=$test_dir/image.gz
+FSCK_OPT="-yf -E fixes_only"
+OUT=$test_name.log
+EXP=$test_dir/expect
+
+gunzip < $IMAGE > $TMPFILE
+
+echo "resize2fs test" > $OUT.new
+
+echo "resize2fs test.img 8M" >> $OUT.new
+$RESIZE2FS $TMPFILE 8M >> $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+
+echo " " >> $OUT.new
+echo fsck $FSCK_OPT -N test_filesys test.img >> $OUT.new
+$FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT.new 2>&1
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new > $OUT
+rm $TMPFILE $OUT.new
+
+#
+# Do the verification
+#
+
+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 IMAGE FSCK_OPT OUT EXP
index 3f02a79..14d918a 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 FSCK_OPT=-yf
 OUT=$test_name.log
@@ -9,93 +12,78 @@ else
        EXP=$test_dir/expect
 fi
 
-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 -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo mke2fs -q -F -o Linux -b 1024 -g 256 test.img 1024 > $OUT.new
+$MKE2FS -q -F -o Linux -b 1024 -g 256 $TMPFILE 1024 >> $OUT.new 2>&1
 
-echo resize2fs -p test.img 10000 >> $OUT
-$RESIZE2FS -p $TMPFILE 10000 2>&1 |
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo resize2fs -p test.img 10000 >> $OUT.new
+$RESIZE2FS -p $TMPFILE 10000 >> $OUT.new 2>&1
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-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
 $DEBUGFS -R "set_super_value hash_seed null" -w $TMPFILE >/dev/null 2>&1
 $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.sed -e '/Block bitmap.*$/N;s/\n  Inode bitmap/, Inode bitmap/g' >> $OUT
+echo dumpe2fs test.img >> $OUT.new
+$DUMPE2FS $TMPFILE >> $OUT.new 2>&1
 
-echo "--------------------------------" >> $OUT
+echo "--------------------------------" >> $OUT.new
 
-echo resize2fs -p test.img 20000 >> $OUT
-$RESIZE2FS -p $TMPFILE 20000 2>&1 |
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo resize2fs -p test.img 20000 >> $OUT.new
+$RESIZE2FS -p $TMPFILE 20000 >> $OUT.new 2>&1
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-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
 $DEBUGFS -R "set_super_value hash_seed null" -w $TMPFILE >/dev/null 2>&1
 $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.sed -e '/Block bitmap.*$/N;s/\n  Inode bitmap/, Inode bitmap/g' >> $OUT
+echo dumpe2fs test.img >> $OUT.new
+$DUMPE2FS $TMPFILE >> $OUT.new 2>&1
 
-echo "--------------------------------" >> $OUT
+echo "--------------------------------" >> $OUT.new
 
-echo resize2fs -p test.img 30000 >> $OUT
-$RESIZE2FS -p $TMPFILE 30000 2>&1 |
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo resize2fs -p test.img 30000 >> $OUT.new
+$RESIZE2FS -p $TMPFILE 30000 >> $OUT.new 2>&1
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-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
 $DEBUGFS -R "set_super_value hash_seed null" -w $TMPFILE >/dev/null 2>&1
 $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.sed -e '/Block bitmap.*$/N;s/\n  Inode bitmap/, Inode bitmap/g' >> $OUT
+echo dumpe2fs test.img >> $OUT.new
+$DUMPE2FS $TMPFILE >> $OUT.new 2>&1
 
-echo "--------------------------------" >> $OUT
+echo "--------------------------------" >> $OUT.new
 
-echo resize2fs -p test.img 40000 >> $OUT
-$RESIZE2FS -p $TMPFILE 40000 2>&1 |
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo resize2fs -p test.img 40000 >> $OUT.new
+$RESIZE2FS -p $TMPFILE 40000 >> $OUT.new 2>&1
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-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
 $DEBUGFS -R "set_super_value hash_seed null" -w $TMPFILE >/dev/null 2>&1
 $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.sed -e '/Block bitmap.*$/N;s/\n  Inode bitmap/, Inode bitmap/g' >> $OUT
-
-rm -f $TMPFILE
+echo dumpe2fs test.img >> $OUT.new
+$DUMPE2FS $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e '/Block bitmap.*$/N;s/\n  Inode bitmap/, Inode bitmap/g' < $OUT.new > $OUT
+rm -f $TMPFILE $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -110,7 +98,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi 
diff --git a/tests/r_move_itable_nostride/expect b/tests/r_move_itable_nostride/expect
new file mode 100644 (file)
index 0000000..74c2cc0
--- /dev/null
@@ -0,0 +1,61 @@
+mke2fs -q -F -o Linux -b 1024 -i 1024 -E stride=8192 -t ext4 test.img 1024000
+resize2fs -p test.img 10240000
+Resizing the filesystem on test.img to 100000000 (1k) blocks.
+Begin pass 2 (max = 2062)
+Relocating blocks             ----------------------------------------\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+Begin pass 3 (max = 125)
+Scanning inode table          ----------------------------------------\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+Begin pass 5 (max = 5)
+Moving inode table            ----------------------------------------\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+The filesystem on test.img is now 99999745 (1k) blocks long.
+
+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/99999744 files (0.0% non-contiguous), 25048026/99999745 blocks
+Exit status is 0
+dumpe2fs -h test.img
+Filesystem volume name:   <none>
+Last mounted on:          <not available>
+Filesystem magic number:  0xEF53
+Filesystem revision #:    1 (dynamic)
+Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
+Default mount options:    (none)
+Filesystem state:         clean
+Errors behavior:          Continue
+Filesystem OS type:       Linux
+Inode count:              99999744
+Block count:              99999745
+Reserved block count:     4999987
+Free blocks:              74951719
+Free inodes:              99999733
+First block:              1
+Block size:               1024
+Fragment size:            1024
+Blocks per group:         8192
+Fragments per group:      8192
+Inodes per group:         8192
+Inode blocks per group:   2048
+RAID stride:              8192
+Flex block group size:    16
+Mount count:              0
+Check interval:           15552000 (6 months)
+Reserved blocks uid:      0
+Reserved blocks gid:      0
+First inode:              11
+Inode size:              256
+Required extra isize:     32
+Desired extra isize:      32
+Journal inode:            8
+Default directory hash:   half_md4
+Journal backup:           inode blocks
+Journal features:         (none)
+Total journal size:       16M
+Total journal blocks:     16384
+Max transaction length:   16384
+Fast commit length:       0
+Journal sequence:         0x00000001
+Journal start:            0
+
diff --git a/tests/r_move_itable_nostride/name b/tests/r_move_itable_nostride/name
new file mode 100644 (file)
index 0000000..798af7f
--- /dev/null
@@ -0,0 +1 @@
+resize with flex_bg and stride value set
diff --git a/tests/r_move_itable_nostride/script b/tests/r_move_itable_nostride/script
new file mode 100644 (file)
index 0000000..08940f6
--- /dev/null
@@ -0,0 +1,63 @@
+if [ $(uname -s) = "FreeBSD" ]; then
+       # creates a 96GB filesystem
+       echo "$test_name: $DESCRIPTION: skipped for FreeBSD (no sparse files)"
+       return 0
+fi
+
+if [ $(uname -s) = "Darwin" ]; then
+       # creates a 96GB filesystem
+       echo "$test_name: $DESCRIPTION: skipped for HFS+ (no sparse files)"
+       return 0
+fi
+
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
+
+FSCK_OPT=-yf
+OUT=$test_name.log
+if [ -f $test_dir/expect.gz ]; then
+       EXP=$test_name.tmp
+       gunzip < $test_dir/expect.gz > $EXP1
+else
+       EXP=$test_dir/expect
+fi
+
+dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
+
+echo mke2fs -q -F -o Linux -b 1024 -i 1024 -E stride=8192 -t ext4 test.img 1024000 > $OUT
+$MKE2FS -q -F -o Linux -b 1024 -i 1024 -E stride=8192 -t ext4 \
+       $TMPFILE 1024000 >> $OUT 2>&1
+
+echo resize2fs -p test.img 10240000 >> $OUT
+$RESIZE2FS -p $TMPFILE 100000000 >> $OUT 2>&1
+
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT 2>&1
+status=$?
+echo Exit status is $status >> $OUT
+
+$DEBUGFS -R "set_super_value lastcheck 0" -w $TMPFILE >/dev/null 2>&1
+$DEBUGFS -R "set_super_value hash_seed null" -w $TMPFILE >/dev/null 2>&1
+$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 -h test.img >> $OUT
+$DUMPE2FS -h $TMPFILE >> $OUT 2>&1
+sed -f $cmd_dir/filter.sed -e '/Block bitmap.*$/N;s/\n  Inode bitmap/, Inode bitmap/g' < $OUT > $OUT.new
+mv $OUT.new $OUT
+rm -f $TMPFILE
+
+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
+       rm -f $test_name.tmp
+fi
+
+unset IMAGE FSCK_OPT OUT EXP
diff --git a/tests/r_move_itable_realloc/expect b/tests/r_move_itable_realloc/expect
new file mode 100644 (file)
index 0000000..67f2fe4
--- /dev/null
@@ -0,0 +1,60 @@
+mke2fs -q -F -o Linux -b 1024 -i 1024 -O ^resize_inode -t ext4 test.img 1024000
+resize2fs -p test.img 100000000
+Resizing the filesystem on test.img to 100000000 (1k) blocks.
+Begin pass 2 (max = 2061)
+Relocating blocks             ----------------------------------------\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+Begin pass 3 (max = 125)
+Scanning inode table          ----------------------------------------\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+Begin pass 5 (max = 5)
+Moving inode table            ----------------------------------------\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+The filesystem on test.img is now 99999745 (1k) blocks long.
+
+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/99999744 files (0.0% non-contiguous), 25048025/99999745 blocks
+Exit status is 0
+dumpe2fs -h test.img
+Filesystem volume name:   <none>
+Last mounted on:          <not available>
+Filesystem magic number:  0xEF53
+Filesystem revision #:    1 (dynamic)
+Filesystem features:      has_journal ext_attr dir_index filetype extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
+Default mount options:    (none)
+Filesystem state:         clean
+Errors behavior:          Continue
+Filesystem OS type:       Linux
+Inode count:              99999744
+Block count:              99999745
+Reserved block count:     4999987
+Free blocks:              74951720
+Free inodes:              99999733
+First block:              1
+Block size:               1024
+Fragment size:            1024
+Blocks per group:         8192
+Fragments per group:      8192
+Inodes per group:         8192
+Inode blocks per group:   2048
+Flex block group size:    16
+Mount count:              0
+Check interval:           15552000 (6 months)
+Reserved blocks uid:      0
+Reserved blocks gid:      0
+First inode:              11
+Inode size:              256
+Required extra isize:     32
+Desired extra isize:      32
+Journal inode:            8
+Default directory hash:   half_md4
+Journal backup:           inode blocks
+Journal features:         (none)
+Total journal size:       16M
+Total journal blocks:     16384
+Max transaction length:   16384
+Fast commit length:       0
+Journal sequence:         0x00000001
+Journal start:            0
+
diff --git a/tests/r_move_itable_realloc/name b/tests/r_move_itable_realloc/name
new file mode 100644 (file)
index 0000000..c265317
--- /dev/null
@@ -0,0 +1 @@
+don't allocate inode table from in-use blocks
diff --git a/tests/r_move_itable_realloc/script b/tests/r_move_itable_realloc/script
new file mode 100644 (file)
index 0000000..ae875e4
--- /dev/null
@@ -0,0 +1,63 @@
+if [ $(uname -s) = "FreeBSD" ]; then
+       # creates a 96GB filesystem
+       echo "$test_name: $DESCRIPTION: skipped for FreeBSD (no sparse files)"
+       return 0
+fi
+
+if [ $(uname -s) = "Darwin" ]; then
+       # creates a 96GB filesystem
+       echo "$test_name: $DESCRIPTION: skipped for HFS+ (no sparse files)"
+       return 0
+fi
+
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
+
+FSCK_OPT=-yf
+OUT=$test_name.log
+if [ -f $test_dir/expect.gz ]; then
+       EXP=$test_name.tmp
+       gunzip < $test_dir/expect.gz > $EXP1
+else
+       EXP=$test_dir/expect
+fi
+
+dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
+
+echo mke2fs -q -F -o Linux -b 1024 -i 1024 -O ^resize_inode -t ext4 test.img 1024000 > $OUT
+$MKE2FS -q -F -o Linux -b 1024 -i 1024 -O ^resize_inode -t ext4 \
+       $TMPFILE 1024000 >> $OUT 2>&1
+
+echo resize2fs -p test.img 100000000 >> $OUT
+$RESIZE2FS -p $TMPFILE 100000000 >> $OUT 2>&1
+
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT 2>&1
+status=$?
+echo Exit status is $status >> $OUT
+
+$DEBUGFS -R "set_super_value lastcheck 0" -w $TMPFILE >/dev/null 2>&1
+$DEBUGFS -R "set_super_value hash_seed null" -w $TMPFILE >/dev/null 2>&1
+$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 -h test.img >> $OUT
+$DUMPE2FS -h $TMPFILE >> $OUT 2>&1
+sed -f $cmd_dir/filter.sed -e '/Block bitmap.*$/N;s/\n  Inode bitmap/, Inode bitmap/g' < $OUT > $OUT.new
+mv $OUT.new $OUT
+rm -f $TMPFILE
+
+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
+       rm -f $test_name.tmp
+fi
+
+unset IMAGE FSCK_OPT OUT EXP
index 4e3eb19..f6a500c 100644 (file)
@@ -9,79 +9,67 @@ else
        EXP=$test_dir/expect
 fi
 
-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 -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo mke2fs -q -F -O resize_inode -o Linux -b 1024 -g 1024 test.img 16384 > $OUT.new
+$MKE2FS -q -F -O resize_inode -o Linux -b 1024 -g 1024 $TMPFILE 16384 >> $OUT.new 2>&1
 
-echo resize2fs test.img 65536 >> $OUT
-$RESIZE2FS $TMPFILE 65536 2>&1 |
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo resize2fs test.img 65536 >> $OUT.new
+$RESIZE2FS $TMPFILE 65536 >> $OUT.new 2>&1
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-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
 $DEBUGFS -R "set_super_value hash_seed null" -w $TMPFILE >/dev/null 2>&1
 $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.sed -e '/Block bitmap.*$/N;s/\n  Inode bitmap/, Inode bitmap/g' >> $OUT
+echo dumpe2fs test.img >> $OUT.new
+$DUMPE2FS $TMPFILE >> $OUT.new 2>&1
 
-echo "--------------------------------" >> $OUT
+echo "--------------------------------" >> $OUT.new
 
 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 -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo mke2fs -q -F -O resize_inode -o Linux -b 1024 -g 1024 test.img 65536 >> $OUT.new
+$MKE2FS -q -F -O resize_inode -o Linux -b 1024 -g 1024 $TMPFILE 65536 >> $OUT.new 2>&1
 
-echo resize2fs test.img 16384 >> $OUT
-$RESIZE2FS $TMPFILE 16384 2>&1 |
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo resize2fs test.img 16384 >> $OUT.new
+$RESIZE2FS $TMPFILE 16384 >> $OUT.new 2>&1
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-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
 $DEBUGFS -R "set_super_value hash_seed null" -w $TMPFILE >/dev/null 2>&1
 $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.sed -e '/Block bitmap.*$/N;s/\n  Inode bitmap/, Inode bitmap/g' >> $OUT
+echo dumpe2fs test.img >> $OUT.new
+$DUMPE2FS $TMPFILE >> $OUT.new 2>&1
 
-echo "--------------------------------" >> $OUT
+echo "--------------------------------" >> $OUT.new
 
-echo resize2fs test.img 165536 >> $OUT
-$RESIZE2FS $TMPFILE 165536 2>&1 |
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
+echo resize2fs test.img 165536 >> $OUT.new
+$RESIZE2FS $TMPFILE 165536 >> $OUT.new 2>&1
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-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
 $DEBUGFS -R "set_super_value hash_seed null" -w $TMPFILE >/dev/null 2>&1
 $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.sed -e '/Block bitmap.*$/N;s/\n  Inode bitmap/, Inode bitmap/g' >> $OUT
+echo dumpe2fs test.img >> $OUT.new
+$DUMPE2FS $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e '/Block bitmap.*$/N;s/\n  Inode bitmap/, Inode bitmap/g' < $OUT.new > $OUT
+rm -f $TMPFILE $OUT.new
 
-rm -f $TMPFILE
 cmp -s $OUT $EXP
 status=$?
 
index 5f28d92..e2c6596 100644 (file)
@@ -47,17 +47,17 @@ cp /dev/null $OUT1
 
 eval $PREP_CMD
 
-$FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT1.new 2>&1
+$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT1.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT1.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT1.new >> $OUT1
+sed -f $cmd_dir/filter.sed $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 -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT2.new > $OUT2
+       sed -f $cmd_dir/filter.sed $OUT2.new > $OUT2
        rm -f $OUT2.new
 fi
 
index 82eca41..7a47f56 100644 (file)
@@ -12,15 +12,15 @@ 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 -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" > $OUT1;
+       sed -f $cmd_dir/filter.sed >> $OUT1;
        $DEBUGFS -R features $TMPFILE 2>&1 |
-       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT1'
+       sed -f $cmd_dir/filter.sed >> $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
        rm -f $test_name.ok $test_name.failed
-       echo "skipped"
+       echo "skipped (no debugfs)"
 fi 
 
 unset DESCRIPTION FS_SIZE MKE2FS_OPTS MKE2FS_SKIP_PROGRESS \
diff --git a/tests/scripts/gen-test-data b/tests/scripts/gen-test-data
new file mode 100755 (executable)
index 0000000..0cbd928
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+t1="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.  "
+t2="Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.  Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring.  Capitalize on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line.  "
+t3="Licensed Product under the copyright owner that is not possible to put the Notice in a manner which does not specify a version number of this document is to say, a work based on the Program (including Contributions) may always be distributed subject to the Licensed Product. Intellectual Property Matters. Third Party Claims. If you develop a new version of the Derivative Works, in at least six (6) months after a subsequent version of this section has the right to acquire, license, develop, have others develop for it, market and/or distribute the Program (or a work based on infringement of intellectual property laws of the Package, in its Contribution, if any, specified by the terms of this Agreement more than your cost of all necessary servicing, repair, or correction. In no event and under no obligation to respond to any patent claims licensable by a copyright notice appear in all copies of it that are distributed by the terms applicable to software that is included in any Digital Font Program, which may be used to render or display fonts. Program shall mean a computer system.  "
+
+export LANG=C
+export LC_ALL=C
+
+t="$t1$t2$t3"
+len=${#t}
+
+c=131072
+
+while test $c -gt 0 ; do
+    if test $c -gt $len ; then
+        echo -n "$t"
+       c=$(($c - $len))
+    else
+       echo -n "$t" | cut -c -$(($c - 1))
+       c=0
+    fi
+done
index be8cbfa..d568f46 100755 (executable)
@@ -1,10 +1,10 @@
 test_description="change uuid on a pre-metadata-csum"
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "create fs without metadata_csum" >> $OUT
index 826d287..3658594 100755 (executable)
@@ -1,10 +1,10 @@
 test_description="change uuid on a metadata-csum"
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "create fs with metadata_csum" >> $OUT
index 0efcae5..5a534a0 100755 (executable)
@@ -1,10 +1,10 @@
 test_description="change uuid on a metadata-csum"
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "create fs with metadata_csum" >> $OUT
index 05b0bd7..c827325 100755 (executable)
@@ -1,10 +1,10 @@
-test_description="change uuid on a metadata-csum with mcsum-seed"
+test_description="change meta-csum uuid with mcsum-seed"
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "create fs with metadata_csum" >> $OUT
index 827ff59..150f451 100755 (executable)
@@ -1,10 +1,10 @@
 test_description="change uuid on a mounted pre-metadata-csum"
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "create fs without metadata_csum" >> $OUT
index bae7e0e..31aaf4f 100644 (file)
@@ -11,6 +11,8 @@ Writing superblocks and filesystem accounting information:      \b\b\b\b\bdone
 
 tune2fs -O metadata_csum test.img
 
+This operation requires a freshly checked filesystem.
+
 Please run e2fsck -f on the filesystem.
 
 Exit status is 1
@@ -35,15 +37,11 @@ Pass 5: Checking group summary information
 Exit status is 0
 tune2fs -O metadata_csum test.img
 Enabling checksums could take some time.
-Proceed anyway (or wait 5 seconds) ? (y,N) 
+Proceed anyway (or wait 5 seconds to proceed) ? (y,N) 
 Exit status is 1
 tune2fs -I 512 test.img
 Resizing inodes could take some time.
-Proceed anyway (or wait 5 seconds) ? (y,N) 
-Exit status is 1
-tune2fs -U random test.img
-Setting UUID on a checksummed filesystem could take some time.
-Proceed anyway (or wait 5 seconds) ? (y,N) 
+Proceed anyway (or wait 5 seconds to proceed) ? (y,N) 
 Exit status is 1
 
 Change in FS metadata:
@@ -56,7 +54,9 @@ Pass 5: Checking group summary information
 Exit status is 0
 tune2fs -O metadata_csum test.img
 Enabling checksums could take some time.
-Proceed anyway (or wait 5 seconds) ? (y,N) 
+Proceed anyway (or wait 5 seconds to proceed) ? (y,N) 
+This operation requires a freshly checked filesystem.
+
 Please run e2fsck -fD on the filesystem.
 
 Exit status is 0
@@ -72,11 +72,11 @@ Pass 5: Checking group summary information
 
 tune2fs -I 512 test.img
 Resizing inodes could take some time.
-Proceed anyway (or wait 5 seconds) ? (y,N) Setting inode size 512
+Proceed anyway (or wait 5 seconds to proceed) ? (y,N) Setting inode size 512
 Exit status is 0
 tune2fs -U f0f0f0f0-f0f0-f0f0-f0f0-f0f0f0f0f0f0 test.img
-Setting UUID on a checksummed filesystem could take some time.
-Proceed anyway (or wait 5 seconds) ? (y,N) Exit status is 0
+Setting the UUID on this filesystem could take some time.
+Proceed anyway (or wait 5 seconds to proceed) ? (y,N) Exit status is 0
 Backing up journal inode block information.
 
 
@@ -95,3 +95,26 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 
 Exit status is 0
+Testing with metadata checksum enabled
+Creating filesystem with 524288 1k blocks and 65536 inodes
+Superblock backups stored on blocks: 
+       8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
+
+Allocating group tables:      \b\b\b\b\bdone                            
+Writing inode tables:      \b\b\b\b\bdone                            
+Creating journal (16384 blocks): done
+Creating 445 huge file(s) with 1024 blocks each: done
+Writing superblocks and filesystem accounting information:      \b\b\b\b\bdone
+
+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
+
+Exit status is 0
+tune2fs -U random test.img
+Setting the UUID on this filesystem could take some time.
+Proceed anyway (or wait 5 seconds to proceed) ? (y,N) 
+Exit status is 1
index dc70ad2..f684d56 100644 (file)
@@ -17,6 +17,18 @@ cat > $CONF << ENDL
                hugefiles_size = 1M
                zero_hugefiles = false
        }
+       ext4m = {
+               features = has_journal,extent,huge_file,^flex_bg,uninit_bg,dir_nlink,extra_isize,sparse_super,filetype,dir_index,ext_attr,resize_inode,64bit,metadata_csum
+               blocksize = 1024
+               inode_size = 256
+               make_hugefiles = true
+               hugefiles_dir = /
+               hugefiles_slack = 32M
+               hugefiles_name = aaaaa
+               hugefiles_digits = 4
+               hugefiles_size = 1M
+               zero_hugefiles = false
+       }
 ENDL
 
 echo "tune2fs dangerous prompts test" > $OUT
@@ -62,12 +74,6 @@ echo 'n' | TUNE2FS_FORCE_PROMPT=1 $TUNE2FS -I 512 $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
 
-# change uuid
-echo "tune2fs -U random test.img" >> $OUT
-echo 'n' | TUNE2FS_FORCE_PROMPT=1 $TUNE2FS -U random $TMPFILE >> $OUT 2>&1
-status=$?
-echo Exit status is $status >> $OUT
-
 # check
 $FSCK -yD -N test_filesys $TMPFILE >> $OUT 2>&1
 
@@ -111,13 +117,28 @@ $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
 
+echo " " >> $OUT
+echo "Testing with metadata checksum enabled" >> $OUT
+
+MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4m -U 6fc3daa4-180d-4f2b-a6f2-f7a5efb79bcf $TMPFILE 524288 >> $OUT 2>&1
+$DUMPE2FS $TMPFILE 2> /dev/null | grep '^Group 0:' -B99 -A20 | sed -f $cmd_dir/filter.sed > $OUT.before
+$FSCK $FSCK_OPT -f -N test_filesys $TMPFILE >> $OUT 2>&1
+status=$?
+echo Exit status is $status >> $OUT
+
+# change uuid
+echo "tune2fs -U random test.img" >> $OUT
+echo 'n' | TUNE2FS_FORCE_PROMPT=1 $TUNE2FS -U random $TMPFILE >> $OUT 2>&1
+status=$?
+echo Exit status is $status >> $OUT
+
 rm $TMPFILE $OUT.before $OUT.after $CONF
 
 #
 # Do the verification
 #
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" -e 's/test_filesys:.*//g' < $OUT > $OUT.new
+sed -f $cmd_dir/filter.sed -e 's/test_filesys:.*//g' < $OUT > $OUT.new
 mv $OUT.new $OUT
 
 cmp -s $OUT $EXP
index 9443731..f721144 100755 (executable)
@@ -1,10 +1,10 @@
-test_description="disable csum seed via tune2fs after changing uuid"
+test_description="tune2fs disable csum seed after uuid change"
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "create fs without csum_seed" >> $OUT
index 3be6dd9..229d6ee 100755 (executable)
@@ -1,10 +1,10 @@
-test_description="disable csum seed on mounted fs via tune2fs after changing uuid"
+test_description="mounted tune2fs disable csum+uuid"
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "create fs without csum_seed" >> $OUT
index 28fdc5c..cb1cbc6 100755 (executable)
@@ -1,10 +1,10 @@
 test_description="disable csum seed via tune2fs"
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "create fs without csum_seed" >> $OUT
index e04f26a..bfa21b8 100644 (file)
@@ -28,14 +28,14 @@ Change in FS metadata:
  Default mount options:    user_xattr acl
  Filesystem state:         clean
  Errors behavior:          Continue
-@@ -33,7 +33,6 @@
+@@ -34,7 +34,6 @@
  Journal inode:            8
  Default directory hash:   half_md4
  Journal backup:           inode blocks
 -Checksum type:            crc32c
  Journal features:         (none)
Journal size:             16M
Journal length:           16384
Total journal size:       16M
Total journal blocks:     16384
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
index a022631..fe61fcb 100644 (file)
@@ -28,15 +28,15 @@ Change in FS metadata:
  Default mount options:    user_xattr acl
  Filesystem state:         clean
  Errors behavior:          Continue
-@@ -33,7 +33,6 @@
+@@ -34,7 +34,6 @@
  Journal inode:            8
  Default directory hash:   half_md4
  Journal backup:           inode blocks
 -Checksum type:            crc32c
  Journal features:         (none)
Journal size:             16M
Journal length:           16384
-@@ -47,18 +46,18 @@
Total journal size:       16M
Total journal blocks:     16384
+@@ -50,18 +49,18 @@
    Block bitmap at 262 (+261)
    Inode bitmap at 278 (+277)
    Inode table at 294-549 (+293)
index db49864..70f40a9 100644 (file)
@@ -22,7 +22,7 @@ ENDL
 echo "tune2fs ^metadata_csum test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h $TMPFILE 524288 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
 $DUMPE2FS $TMPFILE 2> /dev/null | grep '^Group 0:' -B99 -A20 | sed -f $cmd_dir/filter.sed > $OUT.before
index df3d6c0..b906248 100644 (file)
@@ -28,14 +28,14 @@ Change in FS metadata:
  Default mount options:    user_xattr acl
  Filesystem state:         clean
  Errors behavior:          Continue
-@@ -33,7 +33,6 @@
+@@ -34,7 +34,6 @@
  Journal inode:            8
  Default directory hash:   half_md4
  Journal backup:           inode blocks
 -Checksum type:            crc32c
  Journal features:         (none)
Journal size:             16M
Journal length:           16384
Total journal size:       16M
Total journal blocks:     16384
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
index 2d04041..1f260b8 100644 (file)
@@ -22,7 +22,7 @@ ENDL
 echo "tune2fs ^metadata_csum test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h $TMPFILE 524288 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
 $DUMPE2FS $TMPFILE 2> /dev/null | grep '^Group 0:' -B99 -A20 | sed -f $cmd_dir/filter.sed > $OUT.before
index 9eb18e3..20e52ac 100755 (executable)
@@ -1,10 +1,10 @@
 test_description="disable csum seed and csums via tune2fs"
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "create fs without csum_seed" >> $OUT
index 55cade6..5eff077 100755 (executable)
@@ -1,10 +1,10 @@
 test_description="enable csum seed via tune2fs"
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "create fs without csum_seed" >> $OUT
index 5a1a33a..fcb0ed1 100644 (file)
@@ -18,6 +18,8 @@ Pass 5: Checking group summary information
 Exit status is 0
 tune2fs -O metadata_csum test.img
 
+This operation requires a freshly checked filesystem.
+
 Please run e2fsck -fD on the filesystem.
 
 Exit status is 0
@@ -41,24 +43,24 @@ Change in FS metadata:
  Default mount options:    user_xattr acl
  Filesystem state:         clean
  Errors behavior:          Continue
-@@ -10,7 +10,7 @@
- Inode count:              65536
+@@ -11,7 +11,7 @@
  Block count:              524288
  Reserved block count:     26214
+ Overhead clusters:        35246
 -Free blocks:              571
 +Free blocks:              568
  Free inodes:              65048
  First block:              1
  Block size:               1024
-@@ -33,6 +33,7 @@
+@@ -34,6 +34,7 @@
  Journal inode:            8
  Default directory hash:   half_md4
  Journal backup:           inode blocks
 +Checksum type:            crc32c
  Journal features:         (none)
Journal size:             16M
Journal length:           16384
-@@ -46,8 +47,8 @@
Total journal size:       16M
Total journal blocks:     16384
+@@ -49,8 +50,8 @@
    Block bitmap at 262 (+261)
    Inode bitmap at 278 (+277)
    Inode table at 294-549 (+293)
index 0f761a9..549e60e 100644 (file)
@@ -31,15 +31,15 @@ Change in FS metadata:
  Default mount options:    user_xattr acl
  Filesystem state:         clean
  Errors behavior:          Continue
-@@ -29,6 +29,7 @@
+@@ -30,6 +30,7 @@
  Journal inode:            8
  Default directory hash:   half_md4
  Journal backup:           inode blocks
 +Checksum type:            crc32c
  Journal features:         (none)
Journal size:             16M
Journal length:           16384
-@@ -36,7 +37,7 @@
Total journal size:       16M
Total journal blocks:     16384
+@@ -39,7 +40,7 @@
  Journal start:            0
  
  
@@ -48,7 +48,7 @@ Change in FS metadata:
    Primary superblock at 1, Group descriptors at 2-3
    Reserved GDT blocks at 4-259
    Block bitmap at 260 (+259)
-@@ -45,7 +46,7 @@
+@@ -48,7 +49,7 @@
    0 free blocks, 1013 free inodes, 2 directories
    Free blocks: 
    Free inodes: 12-1024
@@ -57,7 +57,7 @@ Change in FS metadata:
    Backup superblock at 8193, Group descriptors at 8194-8195
    Reserved GDT blocks at 8196-8451
    Block bitmap at 8452 (+259)
-@@ -54,6 +55,6 @@
+@@ -57,6 +58,6 @@
    0 free blocks, 1024 free inodes, 0 directories
    Free blocks: 
    Free inodes: 1025-2048
index ed4774c..987141f 100644 (file)
@@ -18,6 +18,8 @@ Pass 5: Checking group summary information
 Exit status is 0
 tune2fs -O metadata_csum test.img
 
+This operation requires a freshly checked filesystem.
+
 Please run e2fsck -fD on the filesystem.
 
 Exit status is 0
@@ -41,24 +43,24 @@ Change in FS metadata:
  Default mount options:    user_xattr acl
  Filesystem state:         clean
  Errors behavior:          Continue
-@@ -10,7 +10,7 @@
- Inode count:              65536
+@@ -11,7 +11,7 @@
  Block count:              524288
  Reserved block count:     26214
+ Overhead clusters:        35246
 -Free blocks:              571
 +Free blocks:              568
  Free inodes:              65048
  First block:              1
  Block size:               1024
-@@ -33,6 +33,7 @@
+@@ -34,6 +34,7 @@
  Journal inode:            8
  Default directory hash:   half_md4
  Journal backup:           inode blocks
 +Checksum type:            crc32c
  Journal features:         (none)
Journal size:             16M
Journal length:           16384
-@@ -40,24 +41,24 @@
Total journal size:       16M
Total journal blocks:     16384
+@@ -43,24 +44,24 @@
  Journal start:            0
  
  
index bb31cc7..2831416 100644 (file)
@@ -7,14 +7,14 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 1024 -O journal_dev,metadata_csum -T ext4 $TMPFILE 4096 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 1024 -O journal_dev,metadata_csum -T ext4 $TMPFILE 4096 > $OUT 2>&1
 echo "tune2fs external journal" >> $OUT
-$TUNE2FS -i 0 $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
-
+$TUNE2FS -i 0 $TMPFILE >> $OUT 2>&1
 rm -f $TMPFILE
 
+sed -f $cmd_dir/filter.sed < $OUT > $OUT.new
+mv $OUT.new $OUT
+
 cmp -s $OUT $EXP
 status=$?
 
index 1829514..882e8eb 100755 (executable)
@@ -1,10 +1,10 @@
 test_description="format with csum_seed"
 
-trap "rm -rf $TMPFILE $TMPFILE.conf" EXIT INT QUIT
+trap "rm -f $TMPFILE $TMPFILE.conf" EXIT INT QUIT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 OUT=$test_name.log
 EXP=$test_dir/expect
-rm -rf $OUT
+rm -f $OUT
 
 # Test command line option
 echo "create fs with csum_seed" >> $OUT
index 3eb1715..354818e 100644 (file)
@@ -20,13 +20,13 @@ tune2fs -I 256 test.img
 Setting inode size 256
 Exit status is 0
 Change in FS metadata:
-@@ -13 +13 @@
+@@ -14 +14 @@
 -Free blocks:              12301
 +Free blocks:              12
-@@ -22 +22 @@
+@@ -23 +23 @@
 -Inode blocks per group:   128
 +Inode blocks per group:   256
-@@ -28 +28 @@
+@@ -29 +29 @@
 -Inode size:             128
 +Inode size:             256
 Pass 1: Checking inodes, blocks, and sizes
index f8565a7..bd0b700 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
 
 if [ $(uname -s) = "Darwin" ]; then
        # creates a 3GB filesystem
@@ -32,7 +35,7 @@ ENDL
 echo "tune2fs test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h -I 128 $TMPFILE 786432 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
 ($DUMPE2FS -h $TMPFILE; $DUMPE2FS -g $TMPFILE) 2>&1 | sed -f $cmd_dir/filter.sed -e '/^Checksum:.*/d' >> $OUT.before 2> /dev/null
@@ -61,7 +64,7 @@ rm $TMPFILE
 # Do the verification
 #
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" -e 's/test_filesys:.*//g' < $OUT > $OUT.new
+sed -f $cmd_dir/filter.sed -e 's/test_filesys:.*//g' < $OUT > $OUT.new
 mv $OUT.new $OUT
 
 cmp -s $OUT $EXP
@@ -78,8 +81,3 @@ fi
 rm $OUT.before $OUT.after
 
 unset IMAGE FSCK_OPT OUT EXP CONF
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
-
index 0ebf162..c24a245 100644 (file)
@@ -19,6 +19,8 @@ Exit status is 0
 tune2fs -I 256 -O metadata_csum test.img
 Setting inode size 256
 
+This operation requires a freshly checked filesystem.
+
 Please run e2fsck -fD on the filesystem.
 
 Exit status is 0
@@ -37,13 +39,13 @@ Change in FS metadata:
 @@ -5 +5 @@
 -Filesystem features:      has_journal ext_attr dir_index filetype extent 64bit sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
 +Filesystem features:      has_journal ext_attr dir_index filetype extent 64bit sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
-@@ -21 +21 @@
+@@ -22 +22 @@
 -Inode blocks per group:   128
 +Inode blocks per group:   256
-@@ -27 +27 @@
+@@ -28 +28 @@
 -Inode size:             128
 +Inode size:             256
-@@ -30,0 +31 @@
+@@ -31,0 +32 @@
 +Checksum type:            crc32c
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
index 4b584d3..32c8d0e 100644 (file)
@@ -1,4 +1,8 @@
-if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+       return 0
+fi
+
 if [ $(uname -s) = "Darwin" ]; then
        # creates a 3GB filesystem
        echo "$test_name: $DESCRIPTION: skipped for HFS+ (no sparse files)"
@@ -31,10 +35,10 @@ ENDL
 echo "tune2fs test" > $OUT
 
 MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h -I 128 $TMPFILE 786432 >> $OUT 2>&1
-rm -rf $CONF
+rm -f $CONF
 
 # dump and check
-($DUMPE2FS -h $TMPFILE | grep -v '^Free blocks:'; $DUMPE2FS -g $TMPFILE) 2>&1 | sed -f $cmd_dir/filter.sed -e '/^Checksum:.*/d' >> $OUT.before 2> /dev/null
+($DUMPE2FS -h $TMPFILE | grep -v '^Free blocks:'; $DUMPE2FS -g $TMPFILE) 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT.before 2> /dev/null
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1
 status=$?
 echo Exit status is $status >> $OUT
@@ -48,7 +52,7 @@ echo Exit status is $status >> $OUT
 $FSCK -N test_filesys -y -f -D $TMPFILE >> $OUT 2>&1
 
 # dump and check
-($DUMPE2FS -h $TMPFILE | grep -v '^Free blocks:'; $DUMPE2FS -g $TMPFILE) 2>&1 | sed -f $cmd_dir/filter.sed -e '/^Checksum:.*/d' >> $OUT.after 2> /dev/null
+($DUMPE2FS -h $TMPFILE | grep -v '^Free blocks:'; $DUMPE2FS -g $TMPFILE) 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT.after 2> /dev/null
 echo "Change in FS metadata:" >> $OUT
 diff -U 0 $OUT.before $OUT.after | sed -e '/^---.*/d' -e '/^+++.*/d' >> $OUT
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1
@@ -61,7 +65,7 @@ rm $TMPFILE
 # Do the verification
 #
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" -e 's/test_filesys:.*//g' < $OUT > $OUT.new
+sed -f $cmd_dir/filter.sed -e 's/test_filesys:.*//g' < $OUT > $OUT.new
 mv $OUT.new $OUT
 
 cmp -s $OUT $EXP
@@ -78,8 +82,3 @@ fi
 rm $OUT.before $OUT.after
 
 unset IMAGE FSCK_OPT OUT EXP CONF
-
-else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
-
index cfed2ca..733395e 100644 (file)
@@ -1,16 +1,5 @@
 FSCK_OPT=-yf
 
-# use current directory instead of /tmp becase tmpfs doesn't support DIO
-rm -f $TMPFILE
-TMPFILE=$(mktemp ./tmp-$test_name.XXXXXX)
-
-stat -f $TMPFILE | grep -q "Type: tmpfs"
-if [ $? = 0 ] ; then
-       rm -f $TMPFILE
-       echo "$test_name: $test_description: skipped for tmpfs (no O_DIRECT)"
-       return 0
-fi
-
 $MKE2FS -q -F -o Linux -b 4096 $TMPFILE 100 > $test_name.log 2>&1
 status=$?
 if [ "$status" != 0 ] ; then
index 6556201..1cd0719 100644 (file)
@@ -1,16 +1,5 @@
 FSCK_OPT=-yf
 
-# use current directory instead of /tmp becase tmpfs doesn't support DIO
-rm -f $TMPFILE
-TMPFILE=$(mktemp ./tmp-$test_name.XXXXXX)
-
-stat -f $TMPFILE | grep -q "Type: tmpfs"
-if [ $? = 0 ]; then
-       rm -f $TMPFILE
-       echo "$test_name: $test_description: skipped for tmpfs (no O_DIRECT)"
-       return 0
-fi
-
 $MKE2FS -q -F -o Linux -b 4096 -O mmp $TMPFILE 100 > $test_name.log 2>&1
 status=$?
 if [ "$status" != 0 ] ; then
@@ -19,7 +8,7 @@ if [ "$status" != 0 ] ; then
        return $status
 fi
 
-$TUNE2FS -O ^mmp $TMPFILE > $test_name.log 2>&1
+$TUNE2FS -O ^mmp $TMPFILE >> $test_name.log 2>&1
 status=$?
 if [ "$status" != 0 ] ; then
        echo "tune2fs -O ^mmp failed" > $test_name.failed
@@ -27,7 +16,7 @@ if [ "$status" != 0 ] ; then
        return $status
 fi
 
-$FSCK $FSCK_OPT $TMPFILE > $test_name.log 2>&1
+$FSCK $FSCK_OPT $TMPFILE >> $test_name.log 2>&1
 status=$?
 if [ "$status" = 0 ] ; then
        echo "$test_name: $test_description: ok"
diff --git a/tests/t_mmp_fail/is_slow_test b/tests/t_mmp_fail/is_slow_test
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/t_mmp_fail/name b/tests/t_mmp_fail/name
new file mode 100644 (file)
index 0000000..e872dda
--- /dev/null
@@ -0,0 +1 @@
+error running tune2fs with MMP
diff --git a/tests/t_mmp_fail/script b/tests/t_mmp_fail/script
new file mode 100644 (file)
index 0000000..5fa6a84
--- /dev/null
@@ -0,0 +1,44 @@
+FSCK_OPT=-yf
+
+$MKE2FS -q -F -o Linux -I 128 -b 1024 -O mmp $TMPFILE 100 > $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "mke2fs -O mmp failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+$TUNE2FS -O project $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" == 0 ] ; then
+       echo "'tune2fs -O project' succeeded on small inode" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return 1
+fi
+$TUNE2FS -o bad_option $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" == 0 ] ; then
+       echo "'tune2fs -o bad_option' succeeded" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return 1
+fi
+$E2MMPSTATUS -i $TMPFILE >> $test_name.log 2>&1
+$E2MMPSTATUS $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "$TUNE2FS left MMP block in bad state" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+$FSCK $FSCK_OPT $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" = 0 ] ; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "e2fsck after MMP disable failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+rm -f $TMPFILE
diff --git a/tests/t_project_1on/name b/tests/t_project_1on/name
new file mode 100644 (file)
index 0000000..6b2dd29
--- /dev/null
@@ -0,0 +1 @@
+enable project using tune2fs -O option
diff --git a/tests/t_project_1on/script b/tests/t_project_1on/script
new file mode 100644 (file)
index 0000000..606963f
--- /dev/null
@@ -0,0 +1,41 @@
+FSCK_OPT=-yf
+
+if [ "$QUOTA" != "y" ]; then
+       echo "$test_name: $test_description: skipped"
+       return 0
+fi
+
+$MKE2FS -q -F -o Linux -I 256 -b 4096 $TMPFILE 10000 > $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "mke2fs failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+dd if=/dev/zero of=$TMPFILE.2 bs=1048576 count=1 >> $test_name.log 2>&1
+cat <<- EOF | $DEBUGFS -w $TMPFILE >> $test_name.log 2>&1
+       write $TMPFILE.2 file1
+       set_inode_field file1 projid 500
+EOF
+rm -f $TMPFILE.2
+
+$TUNE2FS -O project $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "tune2fs -O project failed with $status" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+$FSCK $FSCK_OPT $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" = 0 ] ; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "e2fsck with project enabled failed with $status" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+rm -f $TMPFILE
diff --git a/tests/t_project_2off/name b/tests/t_project_2off/name
new file mode 100644 (file)
index 0000000..293717d
--- /dev/null
@@ -0,0 +1 @@
+disable project using tune2fs
diff --git a/tests/t_project_2off/script b/tests/t_project_2off/script
new file mode 100644 (file)
index 0000000..98696b4
--- /dev/null
@@ -0,0 +1,35 @@
+FSCK_OPT=-yf
+
+if [ "$QUOTA" != "y" ]; then
+       echo "$test_name: $test_description: skipped"
+       return 0
+fi
+
+$MKE2FS -q -F -o Linux -I 256 -b 4096 -O quota,project $TMPFILE 100 > $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "mke2fs -O quota,project failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+$TUNE2FS -O ^project $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "tune2fs -O ^project failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+$FSCK $FSCK_OPT $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" = 0 ] ; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "e2fsck with project enabled failed with $status" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+rm -f $TMPFILE
diff --git a/tests/t_project_3on/name b/tests/t_project_3on/name
new file mode 100644 (file)
index 0000000..9a10680
--- /dev/null
@@ -0,0 +1 @@
+enable project using tune2fs -Q option
diff --git a/tests/t_project_3on/script b/tests/t_project_3on/script
new file mode 100644 (file)
index 0000000..5eaaa15
--- /dev/null
@@ -0,0 +1,41 @@
+FSCK_OPT=-yf
+
+if [ "$QUOTA" != "y" ]; then
+       echo "$test_name: $test_description: skipped"
+       return 0
+fi
+
+$MKE2FS -q -F -o Linux -I 256 -b 4096 $TMPFILE 10000 > $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "mke2fs failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+dd if=/dev/zero of=$TMPFILE.2 bs=1048576 count=1 >> $test_name.log 2>&1
+cat <<- EOF | $DEBUGFS -w $TMPFILE >> $test_name.log 2>&1
+       write $TMPFILE.2 file1
+       set_inode_field file1 projid 500
+EOF
+rm -f $TMPFILE.2
+
+$TUNE2FS -Q prj  $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "tune2fs -Q project failed with $status" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+$FSCK $FSCK_OPT $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" = 0 ] ; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "e2fsck with project enabled failed with $status" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+rm -f $TMPFILE
diff --git a/tests/t_project_4off/name b/tests/t_project_4off/name
new file mode 100644 (file)
index 0000000..5ef6430
--- /dev/null
@@ -0,0 +1 @@
+disable project using tune2fs -Q option
diff --git a/tests/t_project_4off/script b/tests/t_project_4off/script
new file mode 100644 (file)
index 0000000..29de6bc
--- /dev/null
@@ -0,0 +1,35 @@
+FSCK_OPT=-yf
+
+if [ "$QUOTA" != "y" ]; then
+       echo "$test_name: $test_description: skipped"
+       return 0
+fi
+
+$MKE2FS -q -F -o Linux -I 256 -b 4096 -O quota,project $TMPFILE 100 > $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "mke2fs -O quota,project failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+$TUNE2FS -Q ^prj $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" != 0 ] ; then
+       echo "tune2fs -O ^project failed" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+$FSCK $FSCK_OPT $TMPFILE >> $test_name.log 2>&1
+status=$?
+if [ "$status" = 0 ] ; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "e2fsck with project enabled failed with $status" > $test_name.failed
+       echo "$test_name: $test_description: failed"
+       return $status
+fi
+
+rm -f $TMPFILE
index ed17f33..3704d7a 100644 (file)
@@ -14,7 +14,7 @@ if [ "$status" != 0 ] ; then
 fi
 
 dd if=/dev/zero of=$TMPFILE.2 bs=1048576 count=1 >> $test_name.log 2>&1
-cat <<- EOF | $DEBUGFS -w -f /dev/stdin $TMPFILE >> $test_name.log 2>&1
+cat <<- EOF | $DEBUGFS -w $TMPFILE >> $test_name.log 2>&1
        write $TMPFILE.2 file1
        set_inode_field file1 uid 500
        set_inode_field file1 gid 500
index f491937..3e19d92 100644 (file)
@@ -16,7 +16,7 @@ Pass 5: Checking group summary information
 test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
 Exit status is 0
 debugfs write journal
-disable metadata_csum on a dirty-journal fs
+set the label on a dirty-journal fs
 Recovering journal.
 fsck the whole mess
 Pass 1: Checking inodes, blocks, and sizes
@@ -30,6 +30,8 @@ Fix? yes
 Inode bitmap differences:  +(1--11)
 Fix? yes
 
+Padding at end of inode bitmap is not set. Fix? yes
+
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
 test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
index 0be10ea..3b033a8 100644 (file)
@@ -1,4 +1,7 @@
-if test -x $DEBUGFS_EXE; then
+if ! test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs)"
+       return 0
+fi
 
 FSCK_OPT=-fy
 OUT=$test_name.log
@@ -9,37 +12,29 @@ else
        EXP=$test_dir/expect
 fi
 
-cp /dev/null $OUT
-
-$MKE2FS -F -o Linux -b 4096 -O has_journal,metadata_csum -T ext4 $TMPFILE 65536 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+$MKE2FS -F -o Linux -b 4096 -O has_journal,metadata_csum -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
 
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
 
 bitmaps="$($DUMPE2FS $TMPFILE 2>&1 | grep 'bitmap at' | sed -e 's/^.*bitmap at \([0-9]*\).*$/\1/g' | tr '\n' ',')"
 
-echo "debugfs write journal" >> $OUT
+echo "debugfs write journal" >> $OUT.new
 echo "jo" > $TMPFILE.cmd
 echo "jw -b $bitmaps /dev/zero" >> $TMPFILE.cmd
 echo "jc" >> $TMPFILE.cmd
-$DEBUGFS_EXE -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
-sed -f $cmd_dir/filter.sed < $OUT.new >> $OUT
-rm -rf $OUT.new
+$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE 2>> $OUT.new > /dev/null
 
-echo "disable metadata_csum on a dirty-journal fs" >> $OUT
-$TUNE2FS -O ^metadata_csum $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT 2>&1
+echo "set the label on a dirty-journal fs" >> $OUT.new
+$TUNE2FS -L testing $TMPFILE >> $OUT.new 2>&1
 
-echo "fsck the whole mess" >> $OUT
-$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+echo "fsck the whole mess" >> $OUT.new
+$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
-rm -f $OUT.new
-
-rm -f $TMPFILE $TMPFILE.cmd
+sed -f $cmd_dir/filter.sed < $OUT.new > $OUT
+rm -f $TMPFILE $TMPFILE.cmd $OUT.new
 
 cmp -s $OUT $EXP
 status=$?
@@ -54,7 +49,3 @@ else
 fi
 
 unset IMAGE FSCK_OPT OUT EXP
-
-else #if test -x $DEBUGFS_EXE; then
-       echo "$test_name: $test_description: skipped"
-fi
index 308ef25..7b95710 100644 (file)
@@ -10,12 +10,11 @@ if [ $(uname -s) = "Darwin" ]; then
 fi
 
 cp /dev/null $TMPFILE
-rm -f $OUT.new
 
-echo mke2fs -q -t ext4 -F -o Linux -b 1024 $TMPFILE 1G >> $OUT.new
+echo mke2fs -q -t ext4 -F -o Linux -b 1024 test.img 1G > $OUT.new
 $MKE2FS -q -t ext4 -F -o Linux -b 1024 $TMPFILE 1G >> $OUT.new 2>&1
 
-echo "tune2fs -f -O ^uninit_bg $TMPFILE" >> $OUT.new
+echo "tune2fs -f -O ^uninit_bg test.img" >> $OUT.new
 $TUNE2FS -f -O ^uninit_bg $TMPFILE >> $OUT.new 2>&1
 
 echo " " >> $OUT.new
@@ -24,19 +23,18 @@ $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT.new 2>&1
 
 echo " " >> $OUT.new
 cp /dev/null $TMPFILE
-echo mke2fs -q -t ext4 -O bigalloc -F -o Linux -b 1024 -C 8192 $TMPFILE 10G >> $OUT.new
+echo mke2fs -q -t ext4 -O bigalloc -F -o Linux -b 1024 -C 8192 test.img 10G >> $OUT.new
 $MKE2FS -q -t ext4 -O bigalloc -F -o Linux -b 1024 -C 8192 $TMPFILE 10G >> $OUT.new 2>&1
 
-echo "tune2fs -f -O ^uninit_bg $TMPFILE" >> $OUT.new
+echo "tune2fs -f -O ^uninit_bg test.img" >> $OUT.new
 $TUNE2FS -f -O ^uninit_bg $TMPFILE >> $OUT.new 2>&1
 
 echo " " >> $OUT.new
 echo fsck $FSCK_OPT -N test_filesys test.img >> $OUT.new
 $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed < $OUT.new > $OUT
 
-sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
-
-rm -f $OUT.new $TMPFILE
+rm -f $TMPFILE $OUT.new
 
 #
 # Do the verification
index 547ef4c..9dc762c 100644 (file)
@@ -13,11 +13,12 @@ E2IMAGE="$USE_VALGRIND ../misc/e2image"
 E2IMAGE_EXE="../misc/e2image"
 DEBUGFS="$USE_VALGRIND ../debugfs/debugfs"
 DEBUGFS_EXE="../debugfs/debugfs"
-TEST_BITS="../debugfs/debugfs"
+TEST_BITS="test_data.tmp"
 RESIZE2FS_EXE="../resize/resize2fs"
 RESIZE2FS="$USE_VALGRIND $RESIZE2FS_EXE"
 E2UNDO_EXE="../misc/e2undo"
 E2UNDO="$USE_VALGRIND $E2UNDO_EXE"
+E2MMPSTATUS="$USE_VALGRIND ../misc/dumpe2fs -m"
 TEST_REL=../tests/progs/test_rel
 TEST_ICOUNT=../tests/progs/test_icount
 CRCSUM=../tests/progs/crcsum
@@ -34,10 +35,14 @@ E2FSCK_CONFIG=/dev/null
 export E2FSCK_CONFIG
 MKE2FS_CONFIG=./mke2fs.conf
 export MKE2FS_CONFIG
+BLKID_FILE=/dev/null
+export BLKID_FILE
 unset MKE2FS_FIRST_META_BG
 E2FSPROGS_SKIP_PROGRESS=yes
 export E2FSPROGS_SKIP_PROGRESS
 EXT2FS_NO_MTAB_OK=yes
 export EXT2FS_NO_MTAB_OK
+RESIZE2FS_FORCE_LAZY_ITABLE_INIT=yes
+export RESIZE2FS_FORCE_LAZY_ITABLE_INIT
 E2FSPROGS_LIBMAGIC_SUPPRESS=yes
 export E2FSPROGS_LIBMAGIC_SUPPRESS
index fb30e57..5d7607a 100644 (file)
@@ -1,6 +1,8 @@
 #!/bin/sh
 # run a single regression test
 
+export DD
+
 LC_ALL=C
 export LC_ALL
 
@@ -13,10 +15,14 @@ case "$1" in
        export USE_VALGRIND="valgrind --sim-hints=lax-ioctls --leak-check=full --show-reachable=yes --log-file=/tmp/valgrind-%p.log"
        shift;
        ;;
+    --skip-slow-tests)
+       SKIP_SLOW_TESTS=yes
+       shift;
+       ;;
 esac
 
 case "$1" in
-    *.failed|*.new|*.ok|*.log|*.tmp)   exit 0 ;;
+    *.failed|*.new|*.ok|*.log|*.tmp|*.slow)    exit 0 ;;
 esac
 
 test_dir=$1
@@ -30,9 +36,6 @@ fi
 
 test_name=`echo $test_dir | sed -e 's;.*/;;'`
 
-TMPFILE=$(mktemp ${TMPDIR:-/tmp}/e2fsprogs-tmp-$test_name.XXXXXX)
-trap 'rm -f $TMPFILE ; exit' 1 2 15
-
 if [ -f $test_dir ] ; then
        exit 0;
 fi
@@ -49,9 +52,18 @@ else
        test_description=
 fi
 
-rm -f $test_name.ok $test_name.failed
+if [ -n "$SKIP_SLOW_TESTS" -a -f $test_dir/is_slow_test ]; then
+    echo "$test_name: $test_description: skipped (slow test)"
+    exit 0
+fi
+
+rm -f $test_name.ok $test_name.failed $test_name.log $test_name.slow
 #echo -e -n "$test_name: $test_description:\r"
 
+TMPFILE=$(mktemp ${TMPDIR:-/tmp}/e2fsprogs-tmp-$test_name.XXXXXX)
+[ "$SKIP_UNLINK" != "true" ] && trap 'rm -f $TMPFILE ; exit' 0 1 2 15
+
+start=$SECONDS
 if [ -f $test_dir/script ]; then
        . $test_dir/script
 else
@@ -63,6 +75,12 @@ else
                echo "$test_name: Missing test script $default_script!"
        fi
 fi
+elapsed=$((SECONDS - start))
+if [ $elapsed -gt 60 -a ! -f $test_dir/is_slow_test ]; then
+       echo "$test_name:  *** took $elapsed seconds to finish ***" |
+               tee $test_name.slow
+       echo "$test_name:  consider adding $test_dir/is_slow_test"
+fi
 
 if [ "$SKIP_UNLINK" != "true" ] ; then
        rm -f $TMPFILE
index 9959e30..442999d 100644 (file)
@@ -39,7 +39,7 @@ for i; do
 done
 
 if test "$TESTS"x = x ; then
-    if test -n "DO_FAILED"; then
+    if test -n "$DO_FAILED"; then
        exit 0
     fi
     TESTS=`ls -d $SRCDIR/[a-zA-Z]_*`
index bb93917..b5a65ec 100644 (file)
@@ -1,5 +1,8 @@
 test_description="e2undo with debugfs -z"
-if test -x $E2UNDO_EXE -a -x $DEBUGFS_EXE; then
+if ! test -x $E2UNDO_EXE -o ! -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped (no debugfs/e2undo)"
+       return 0
+fi
 
 TDB_FILE=${TMPDIR:-/tmp}/tune2fs-$(basename $TMPFILE).e2undo
 OUT=$test_name.log
@@ -29,4 +32,3 @@ else
        echo "$test_name: $test_description: failed"
 fi
 rm -f $TDB_FILE $TMPFILE
-fi
index 036b7b4..4b34b7a 100644 (file)
@@ -12,10 +12,10 @@ test_e2undo_mke2fs_off() {
        rm -f "$TDB_FILE"
        echo "testing e2undo and mke2fs with the -E offset=$OFF option" >> "$OUT"
        # prepare $TMPFILE
-       yes a | dd of="$TMPFILE" bs="$OFF" count=1 iflag=fullblock \
+       yes a | $DD of="$TMPFILE" bs="$OFF" count=1 iflag=fullblock \
                > /dev/null 2>>"$OUT"
-       yes b | dd bs=1k count=1024 iflag=fullblock >> "$TMPFILE" 2>>"$OUT"
-       yes c | dd bs=1k count=3 iflag=fullblock >> "$TMPFILE" 2>>"$OUT"
+       yes b | $DD bs=1k count=1024 iflag=fullblock >> "$TMPFILE" 2>>"$OUT"
+       yes c | $DD bs=1k count=3 iflag=fullblock >> "$TMPFILE" 2>>"$OUT"
 
        crc_exp=`$CRCSUM "$TMPFILE"`
        $MKE2FS -F -z "$TDB_FILE" -b 1024 -E offset="$OFF" "$TMPFILE" 1024 \
@@ -69,7 +69,7 @@ supplement_test_2048() {
        # data again (this might be considered as a bug (for now,
        # this testcase just documents this behavior))
        SEEK_BLOCKS=$(((2048 + 1024 * 1024) / 1024))
-       yes d | dd of="$TMPFILE" bs=1k count=2 seek="$SEEK_BLOCKS" \
+       yes d | $DD of="$TMPFILE" bs=1k count=2 seek="$SEEK_BLOCKS" \
                iflag=fullblock > /dev/null 2>>"$OUT"
 }
 
index f1d7c2b..6249ff2 100644 (file)
@@ -1,4 +1,4 @@
-test_description="convert fs to 64bit,metadata_csum and revert as one undo file"
+test_description="convert fs to 64bit,mcsum and revert undo file"
 if test -x $RESIZE2FS_EXE -a -x $E2UNDO_EXE; then
 
 TDB_FILE=${TMPDIR:-/tmp}/resize2fs-$(basename $TMPFILE).e2undo
index 27b3b23..6911ec6 100644 (file)
@@ -1,4 +1,4 @@
-test_description="convert fs to 64bit,metadata_csum and revert as one undo file"
+test_description="convert 64bit,mcsum and revert undo file"
 if test -x $RESIZE2FS_EXE -a -x $E2UNDO_EXE; then
 
 TDB_FILE=${TMPDIR:-/tmp}/resize2fs-$(basename $TMPFILE).e2undo
index 6120d00..6599b05 100644 (file)
@@ -1,4 +1,4 @@
-test_description="convert fs to 64bit,metadata_csum and revert both changes"
+test_description="convert 64bit,mcsum and revert both"
 if test -x $RESIZE2FS_EXE -a -x $E2UNDO_EXE; then
 
 TDB_FILE=${TMPDIR:-/tmp}/resize2fs-$(basename $TMPFILE).e2undo
index 96117d9..7ad18c0 100644 (file)
@@ -8,8 +8,9 @@ VPATH = @srcdir@
 top_builddir = ..
 my_dir = util
 INSTALL = @INSTALL@
+MKDIR_P = @MKDIR_P@
 
-SRCS = $(srcdir)/subst.c
+SRCS = $(srcdir)/subst.c $(srcdir)/mkutf8data.c
 
 @MCONFIG@
 
@@ -19,7 +20,7 @@ SRCS = $(srcdir)/subst.c
        $(Q) $(CHECK_CMD) $(ALL_CFLAGS) $<
        $(Q) $(CPPCHECK_CMD) $(CPPFLAGS) $<
 
-PROGS=         subst symlinks
+PROGS=         subst symlinks mkutf8data
 
 all:: $(PROGS) gen-tarball
 
@@ -33,6 +34,10 @@ subst: subst.o
        $(E) "  LD $@"
        $(Q) $(BUILD_CC) $(BUILD_LDFLAGS) -o subst subst.o
 
+mkutf8data: mkutf8data.o
+       $(E) "  LD $@"
+       $(Q) $(BUILD_CC) $(BUILD_LDFLAGS) -o mkutf8data mkutf8data.o
+
 copy_sparse: copy_sparse.o
        $(E) "  LD $@"
        $(Q) $(BUILD_CC) $(BUILD_LDFLAGS) -o copy_sparse copy_sparse.o
@@ -53,7 +58,7 @@ tarballs: gen-tarball
 
 clean::
        $(RM) -f $(PROGS) \#* *.s *.o *.a *~ core *.tar.gz gen-tarball \
-               copy-sparse dirpaths.h install-symlink
+               copy-sparse dirpaths.h install-symlink mkutf8data
 
 mostlyclean: clean
 
@@ -66,3 +71,4 @@ distclean: clean
 # the Makefile.in file
 #
 subst.o: $(srcdir)/subst.c $(top_builddir)/lib/config.h dirpaths.h
+mkutf8data.o: $(srcdir)/mkutf8data.c
diff --git a/util/Makefile.pq b/util/Makefile.pq
deleted file mode 100644 (file)
index ccde118..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-TOPSRC=..
-
-!include $(TOPSRC)\powerquest\MCONFIG
-
-ALL:: libecho.exe
-
-libecho.exe: libecho.c
-
-clean:: 
-       $(RM) libecho.exe
index 0fe3cba..c8a3217 100644 (file)
@@ -1,3 +1,3 @@
-URL: https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/testing/v@VER@/e2fsprogs.@FN@.tar.gz
+URL: https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v@VER@/e2fsprogs-@FN@.tar.gz
 Version: @FN@
 BugComponent: 95221
index b3c12a7..6ac16fe 100644 (file)
@@ -1,32 +1,19 @@
-/* work around bug in AndroidConfig.h */
-#ifdef HAVE_MALLOC_H
-#undef HAVE_MALLOC_H
+#ifndef __APPLE__
 #define HAVE_MALLOC_H 1
 #endif
 
 #define ROOT_SYSCONFDIR "/etc"
 
+#define ENABLE_LIBSPARSE 1
+
 #define DISABLE_BACKTRACE 1
 #define HAVE_DIRENT_H 1
 #define HAVE_ERRNO_H 1
-#define HAVE_EXT2_IOCTLS 1
-#define HAVE_FALLOCATE 1
 #define HAVE_GETOPT_H 1
-#define HAVE_GETPAGESIZE 1
 #define HAVE_GETPWUID_R 1
 #define HAVE_INTPTR_T 1
 #define HAVE_INTTYPES_H 1
-#define HAVE_LINUX_FD_H 1
-#define HAVE_LSEEK64 1
-#define HAVE_LSEEK64_PROTOTYPE 1
 #define HAVE_MMAP 1
-#define HAVE_NETINET_IN_H 1
-#define HAVE_NET_IF_H 1
-#define HAVE_POSIX_MEMALIGN 1
-#define HAVE_PREAD 1
-#define HAVE_PREAD64 1
-#define HAVE_PWRITE 1
-#define HAVE_PWRITE64 1
 #define HAVE_SETJMP_H 1
 #define HAVE_SNPRINTF 1
 #define HAVE_STDLIB_H 1
 #define HAVE_STRNLEN 1
 #define HAVE_STRPTIME 1
 #define HAVE_SYSCONF 1
-#define HAVE_SYS_IOCTL_H 1
-#define HAVE_SYS_MMAN_H 1
-#define HAVE_SYS_MOUNT_H 1
-#define HAVE_SYS_PARAM_H 1
-#define HAVE_SYS_PRCTL_H 1
-#define HAVE_SYS_RESOURCE_H 1
-#define HAVE_SYS_SELECT_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_SYS_TIME_H 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_SYS_WAIT_H 1
 #define HAVE_TYPE_SSIZE_T 1
 #define HAVE_UNISTD_H 1
 #define HAVE_UTIME_H 1
+
+#define HAVE_SYS_STAT_H 1
+#if !defined(__APPLE__)
+# define HAVE_SYS_SYSMACROS_H 1
+#endif
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_TYPES_H 1
+
+#if defined(_WIN32)
+# define HAVE_LINUX_TYPES_H 1
+# define HAVE_WINSOCK_H 1
+#endif
+#if defined(__APPLE__) || defined(__linux__)
+# define HAVE_FCNTL 1
+# define HAVE_FSYNC 1
+# define HAVE_GETPAGESIZE 1
+# define HAVE_NET_IF_H 1
+# define HAVE_NETINET_IN_H 1
+# define HAVE_PREAD 1
+# define HAVE_PWRITE 1
+# define HAVE_POSIX_MEMALIGN 1
+# define HAVE_SYS_IOCTL_H 1
+# define HAVE_SYS_MMAN_H 1
+# define HAVE_SYS_MOUNT_H 1
+# define HAVE_SYS_PARAM_H 1
+# define HAVE_SYS_RESOURCE_H 1
+# define HAVE_SYS_SELECT_H 1
+# define HAVE_SYS_WAIT_H 1
+#endif
+#if defined(__linux__)
+# define HAVE_EXT2_IOCTLS 1
+# define HAVE_FALLOCATE 1
+# define HAVE_LINUX_FD_H 1
+# define HAVE_LINUX_TYPES_H 1
+# define HAVE_LSEEK64 1
+# define HAVE_LSEEK64_PROTOTYPE 1
+# define HAVE_MNTENT_H 1
+# define HAVE_PREAD64 1
+# define HAVE_PWRITE64 1
+# define HAVE_SETMNTENT 1
+# define HAVE_SYS_PRCTL_H 1
+#endif
index 9c3f714..5f05903 100644 (file)
@@ -4,8 +4,8 @@
  * also defined the types that we need.
  */
 #if (!defined(_LINUX_TYPES_H) && !defined(_BLKID_TYPES_H) && \
-       !defined(_EXT2_TYPES_H))
-#define _EXT2_TYPES_H
+       !defined(_EXT2_TYPES_H) && !defined(_UUID_TYPES_H))
+#define _LINUX_TYPES_H
 
 typedef unsigned char __u8;
 typedef __signed__ char __s8;
@@ -24,10 +24,14 @@ typedef __signed__ long long __s64;
 #define EXT2_ENDIAN_H_
 
 #ifdef __CHECKER__
+#ifndef __bitwise
 #define __bitwise              __attribute__((bitwise))
+#endif
 #define __force                        __attribute__((force))
 #else
+#ifndef __bitwise
 #define __bitwise
+#endif
 #define __force
 #endif
 
diff --git a/util/gcc-wall-cleanup b/util/gcc-wall-cleanup
deleted file mode 100644 (file)
index cef7a2d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sed -f
-#
-# This script filters out gcc-wall crud that we're not interested in seeing.
-#
-/^cc /d
-/^kcc /d
-/^gcc /d
-/does not support `long long'/d
-/forbids long long integer constants/d
-/does not support the `ll' length modifier/d
-/does not support the `ll' printf length modifier/d
-/ANSI C forbids long long integer constants/d
-/traditional C rejects string concatenation/d
-/integer constant is unsigned in ANSI C, signed with -traditional/d
-/ISO C forbids conversion of object pointer to function pointer type/,+2d
-/ISO C does not support ‘__FUNCTION__’ predefined identifier/d
-/At top level:/d
-/In file included from/d
-/In function `.*':/d
-/zero-length format string/d
-/warning: (near initialization for/d
-/^[    ]*from/d
-
index ebd8778..cab4e8d 100755 (executable)
@@ -7,7 +7,7 @@ ANDROID_GENERATED_FILES="lib/ext2fs/ext2_err.c lib/ext2fs/ext2_err.h \
        lib/ext2fs/ext2_types.h lib/config.h lib/blkid/blkid.h \
        lib/uuid/uuid.h lib/ext2fs/crc32c_table.h misc/default_profile.c \
        lib/ss/std_rqs.c debugfs/debug_cmds.c debugfs/ro_debug_cmds.c \
-       debugfs/extent_cmds.c debugfs/e2freefrag.c debugfs/create_inode.c \
+       debugfs/extent_cmds.c debugfs/e2freefrag.c \
        debugfs/recovery.c debugfs/revoke.c \
        MODULE_LICENSE_GPL README.version"
 
@@ -37,11 +37,18 @@ rm -f $MK_CMDS
 
 cp lib/blkid/blkid.h.in lib/blkid/blkid.h
 cp lib/uuid/uuid.h.in lib/uuid/uuid.h
+
 cp util/android_types.h lib/ext2fs/ext2_types.h
 cp util/android_types.h lib/blkid/blkid_types.h
 cp util/android_types.h lib/uuid/uuid_types.h
+# Copied header files having exactly same content results in debug output
+# differences on RBE. Hence modify the #define's appropriately.
+sed -i 's/#define _LINUX_TYPES_H/#define _BLKID_TYPES_H/g' lib/blkid/blkid_types.h
+sed -i 's/#define _LINUX_TYPES_H/#define _EXT2_TYPES_H/g' lib/ext2fs/ext2_types.h
+sed -i 's/#define _LINUX_TYPES_H/#define _UUID_TYPES_H/g' lib/uuid/uuid_types.h
+
 cp util/android_config.h lib/config.h
-cp misc/e2freefrag.c misc/create_inode.c debugfs/
+cp misc/e2freefrag.c debugfs/
 cp e2fsck/recovery.c e2fsck/revoke.c debugfs/
 
 gcc -o gen_crc32ctable lib/ext2fs/gen_crc32ctable.c
diff --git a/util/gen-git-tarball b/util/gen-git-tarball
new file mode 100755 (executable)
index 0000000..a959c4a
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Generate the e2fsprogs release tar ball
+#
+
+commit=HEAD
+
+if test -n "$1" ; then
+    commit="$1"
+fi
+
+ver=`git show ${commit}:version.h | grep E2FSPROGS_VERSION  \
+       | awk '{print $3}' | tr \" " " | awk '{print $1}'`
+fn=e2fsprogs-${ver}.tar.gz
+
+git archive --prefix=e2fsprogs-${ver}/ ${commit} | gzip -9n > $fn
+echo "Generated $fn"
index b82f12c..997bd93 100644 (file)
@@ -7,12 +7,12 @@ top_srcdir=@top_srcdir@
 top_dir=`cd $top_srcdir; pwd`
 base_ver=`echo @E2FSPROGS_VERSION@ | sed -e 's/-WIP//' -e 's/pre-//' -e 's/-PLUS//'`
 base_e2fsprogs=`basename $top_dir`
-exclude=/tmp/exclude
+exclude=/tmp/exclude$$
 GZIP=gzip
 
 #
 # This hack is needed because texi2dvi blows up horribly if there are 
-# any '~' chracters in the directory pathname.  So we kludge around it by
+# any '~' characters in the directory pathname.  So we kludge around it by
 # using a non-standard directory name for WIP releases.  dpkg-source
 # complains, but life goes on.
 #
@@ -21,36 +21,30 @@ deb_pkgver=`echo @E2FSPROGS_PKGVER@ | sed -e 's/~/-/g'`
 case $1 in
     debian|ubuntu)
        SRCROOT="e2fsprogs-$deb_pkgver"
-       rename_tarball="e2fsprogs_@E2FSPROGS_PKGVER@.orig.tar.gz"
-       list=all
-       ;;
-    subset)
-       SRCROOT="e2fsprogs-libs-$base_ver"
-       list=subset
+       tarout="e2fsprogs_@E2FSPROGS_PKGVER@.orig.tar.gz"
        ;;
    all|*)
        SRCROOT="e2fsprogs-$base_ver"
-       list=all
+       tarout="$SRCROOT.tar.gz"
        ;;
 esac
 
-mv ../e2fsprogs.spec $top_srcdir/e2fsprogs.spec
+if test -z "$SOURCE_DATE_EPOCH" ; then
+    export SOURCE_DATE_EPOCH=$(cd $top_srcdir; git log -1 --pretty=%ct)
+fi
+
 (cd $top_srcdir/.. ; find $base_e2fsprogs \( -name \*~ -o -name \*.orig \
                -o -name CVS -o -name \*.rej -o -name Makefile.pq \
                -o -name TAGS -o -name \*.old -o -name SCCS \
                -o -name changed-files -o -name .#\* -o -name \*.tar.gz \
                -o -name autom4te.cache \) \
-               -print) | sed -e "s/^$base_e2fsprogs/$SRCROOT/" > $exclude
-sed -e "s;^;$SRCROOT/;" < $srcdir/$list.exclude >> $exclude
+               -print) > $exclude
+sed -e "s;^;$base_e2fsprogs/;" < $srcdir/all.exclude >> $exclude
 
-(cd $top_srcdir/.. ; rm -f $SRCROOT ; ln -sf $base_e2fsprogs $SRCROOT)
-
-(cd $top_srcdir/.. ; tar -c -h -v -f - -X $exclude $SRCROOT) \
-        | $GZIP -9 -c > $SRCROOT.tar.gz
-$GZIP -l $SRCROOT.tar.gz
-
-(cd $top_srcdir/.. ; rm -f $SRCROOT)
-mv $top_srcdir/e2fsprogs.spec ../e2fsprogs.spec 
-if test -n "$rename_tarball"; then
-    mv $SRCROOT.tar.gz $rename_tarball
-fi
+(cd $top_srcdir/.. ; \
+ tar -c -f - -X $exclude --sort=name --owner=0 --group=0 \
+     --transform "flags=r;s|^$base_e2fsprogs|$SRCROOT|" \
+     --numeric-owner --mtime="@${SOURCE_DATE_EPOCH}" $base_e2fsprogs) \
+    | $GZIP -9n -c > $tarout
+$GZIP -ln $tarout
+rm -f "$exclude"
diff --git a/util/mkutf8data.c b/util/mkutf8data.c
new file mode 100644 (file)
index 0000000..49bb0e1
--- /dev/null
@@ -0,0 +1,3392 @@
+/*
+ * Copyright (c) 2014 SGI.
+ * All rights reserved.
+ *
+ * This program 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.
+ *
+ * This program is distributed in the hope that it would 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, write the Free Software Foundation,
+ * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+/* Generator for a compact trie for unicode normalization */
+
+#include <sys/types.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+/* Default names of the in- and output files. */
+
+#define AGE_NAME       "DerivedAge.txt"
+#define CCC_NAME       "DerivedCombiningClass.txt"
+#define PROP_NAME      "DerivedCoreProperties.txt"
+#define DATA_NAME      "UnicodeData.txt"
+#define FOLD_NAME      "CaseFolding.txt"
+#define NORM_NAME      "NormalizationCorrections.txt"
+#define TEST_NAME      "NormalizationTest.txt"
+#define UTF8_NAME      "utf8data.h"
+
+const char     *age_name  = AGE_NAME;
+const char     *ccc_name  = CCC_NAME;
+const char     *prop_name = PROP_NAME;
+const char     *data_name = DATA_NAME;
+const char     *fold_name = FOLD_NAME;
+const char     *norm_name = NORM_NAME;
+const char     *test_name = TEST_NAME;
+const char     *utf8_name = UTF8_NAME;
+
+int verbose = 0;
+
+/* An arbitrary line size limit on input lines. */
+
+#define LINESIZE       1024
+char line[LINESIZE];
+char buf0[LINESIZE];
+char buf1[LINESIZE];
+char buf2[LINESIZE];
+char buf3[LINESIZE];
+
+const char *argv0;
+
+/* ------------------------------------------------------------------ */
+
+/*
+ * Unicode version numbers consist of three parts: major, minor, and a
+ * revision.  These numbers are packed into an unsigned int to obtain
+ * a single version number.
+ *
+ * To save space in the generated trie, the unicode version is not
+ * stored directly, instead we calculate a generation number from the
+ * unicode versions seen in the DerivedAge file, and use that as an
+ * index into a table of unicode versions.
+ */
+#define UNICODE_MAJ_SHIFT              (16)
+#define UNICODE_MIN_SHIFT              (8)
+
+#define UNICODE_MAJ_MAX                        ((unsigned short)-1)
+#define UNICODE_MIN_MAX                        ((unsigned char)-1)
+#define UNICODE_REV_MAX                        ((unsigned char)-1)
+
+#define UNICODE_AGE(MAJ,MIN,REV)                       \
+       (((unsigned int)(MAJ) << UNICODE_MAJ_SHIFT) |   \
+        ((unsigned int)(MIN) << UNICODE_MIN_SHIFT) |   \
+        ((unsigned int)(REV)))
+
+unsigned int *ages;
+int ages_count;
+
+unsigned int unicode_maxage;
+
+static int age_valid(unsigned int major, unsigned int minor,
+                    unsigned int revision)
+{
+       if (major > UNICODE_MAJ_MAX)
+               return 0;
+       if (minor > UNICODE_MIN_MAX)
+               return 0;
+       if (revision > UNICODE_REV_MAX)
+               return 0;
+       return 1;
+}
+
+/* ------------------------------------------------------------------ */
+
+/*
+ * utf8trie_t
+ *
+ * A compact binary tree, used to decode UTF-8 characters.
+ *
+ * Internal nodes are one byte for the node itself, and up to three
+ * bytes for an offset into the tree.  The first byte contains the
+ * following information:
+ *  NEXTBYTE  - flag        - advance to next byte if set
+ *  BITNUM    - 3 bit field - the bit number to tested
+ *  OFFLEN    - 2 bit field - number of bytes in the offset
+ * if offlen == 0 (non-branching node)
+ *  RIGHTPATH - 1 bit field - set if the following node is for the
+ *                            right-hand path (tested bit is set)
+ *  TRIENODE  - 1 bit field - set if the following node is an internal
+ *                            node, otherwise it is a leaf node
+ * if offlen != 0 (branching node)
+ *  LEFTNODE  - 1 bit field - set if the left-hand node is internal
+ *  RIGHTNODE - 1 bit field - set if the right-hand node is internal
+ *
+ * Due to the way utf8 works, there cannot be branching nodes with
+ * NEXTBYTE set, and moreover those nodes always have a righthand
+ * descendant.
+ */
+typedef unsigned char utf8trie_t;
+#define BITNUM         0x07
+#define NEXTBYTE       0x08
+#define OFFLEN         0x30
+#define OFFLEN_SHIFT   4
+#define RIGHTPATH      0x40
+#define TRIENODE       0x80
+#define RIGHTNODE      0x40
+#define LEFTNODE       0x80
+
+/*
+ * utf8leaf_t
+ *
+ * The leaves of the trie are embedded in the trie, and so the same
+ * underlying datatype, unsigned char.
+ *
+ * leaf[0]: The unicode version, stored as a generation number that is
+ *          an index into utf8agetab[].  With this we can filter code
+ *          points based on the unicode version in which they were
+ *          defined.  The CCC of a non-defined code point is 0.
+ * leaf[1]: Canonical Combining Class. During normalization, we need
+ *          to do a stable sort into ascending order of all characters
+ *          with a non-zero CCC that occur between two characters with
+ *          a CCC of 0, or at the begin or end of a string.
+ *          The unicode standard guarantees that all CCC values are
+ *          between 0 and 254 inclusive, which leaves 255 available as
+ *          a special value.
+ *          Code points with CCC 0 are known as stoppers.
+ * leaf[2]: Decomposition. If leaf[1] == 255, then leaf[2] is the
+ *          start of a NUL-terminated string that is the decomposition
+ *          of the character.
+ *          The CCC of a decomposable character is the same as the CCC
+ *          of the first character of its decomposition.
+ *          Some characters decompose as the empty string: these are
+ *          characters with the Default_Ignorable_Code_Point property.
+ *          These do affect normalization, as they all have CCC 0.
+ *
+ * The decompositions in the trie have been fully expanded.
+ *
+ * Casefolding, if applicable, is also done using decompositions.
+ */
+typedef unsigned char utf8leaf_t;
+
+#define LEAF_GEN(LEAF) ((LEAF)[0])
+#define LEAF_CCC(LEAF) ((LEAF)[1])
+#define LEAF_STR(LEAF) ((const char*)((LEAF) + 2))
+
+#define MAXGEN         (255)
+
+#define MINCCC         (0)
+#define MAXCCC         (254)
+#define STOPPER                (0)
+#define DECOMPOSE      (255)
+#define HANGUL         ((char)(255))
+
+#define UTF8HANGULLEAF (12)
+
+struct tree;
+static utf8leaf_t *utf8nlookup(struct tree *, unsigned char *,
+                              const char *, size_t);
+static utf8leaf_t *utf8lookup(struct tree *, unsigned char *, const char *);
+
+unsigned char *utf8data;
+size_t utf8data_size;
+
+utf8trie_t *nfkdi;
+utf8trie_t *nfkdicf;
+
+/* ------------------------------------------------------------------ */
+
+/*
+ * UTF8 valid ranges.
+ *
+ * The UTF-8 encoding spreads the bits of a 32bit word over several
+ * bytes. This table gives the ranges that can be held and how they'd
+ * be represented.
+ *
+ * 0x00000000 0x0000007F: 0xxxxxxx
+ * 0x00000000 0x000007FF: 110xxxxx 10xxxxxx
+ * 0x00000000 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00000000 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ *
+ * There is an additional requirement on UTF-8, in that only the
+ * shortest representation of a 32bit value is to be used.  A decoder
+ * must not decode sequences that do not satisfy this requirement.
+ * Thus the allowed ranges have a lower bound.
+ *
+ * 0x00000000 0x0000007F: 0xxxxxxx
+ * 0x00000080 0x000007FF: 110xxxxx 10xxxxxx
+ * 0x00000800 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
+ * 0x00010000 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x00200000 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * 0x04000000 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ *
+ * Actual unicode characters are limited to the range 0x0 - 0x10FFFF,
+ * 17 planes of 65536 values.  This limits the sequences actually seen
+ * even more, to just the following.
+ *
+ *          0 -     0x7f: 0                     0x7f
+ *       0x80 -    0x7ff: 0xc2 0x80             0xdf 0xbf
+ *      0x800 -   0xffff: 0xe0 0xa0 0x80        0xef 0xbf 0xbf
+ *    0x10000 - 0x10ffff: 0xf0 0x90 0x80 0x80   0xf4 0x8f 0xbf 0xbf
+ *
+ * Even within those ranges not all values are allowed: the surrogates
+ * 0xd800 - 0xdfff should never be seen.
+ *
+ * Note that the longest sequence seen with valid usage is 4 bytes,
+ * the same a single UTF-32 character.  This makes the UTF-8
+ * representation of Unicode strictly smaller than UTF-32.
+ *
+ * The shortest sequence requirement was introduced by:
+ *    Corrigendum #1: UTF-8 Shortest Form
+ * It can be found here:
+ *    http://www.unicode.org/versions/corrigendum1.html
+ *
+ */
+
+#define UTF8_2_BITS     0xC0
+#define UTF8_3_BITS     0xE0
+#define UTF8_4_BITS     0xF0
+#define UTF8_N_BITS     0x80
+#define UTF8_2_MASK     0xE0
+#define UTF8_3_MASK     0xF0
+#define UTF8_4_MASK     0xF8
+#define UTF8_N_MASK     0xC0
+#define UTF8_V_MASK     0x3F
+#define UTF8_V_SHIFT    6
+
+static int utf8encode(char *str, unsigned int val)
+{
+       int len;
+
+       if (val < 0x80) {
+               str[0] = val;
+               len = 1;
+       } else if (val < 0x800) {
+               str[1] = val & UTF8_V_MASK;
+               str[1] |= UTF8_N_BITS;
+               val >>= UTF8_V_SHIFT;
+               str[0] = val;
+               str[0] |= UTF8_2_BITS;
+               len = 2;
+       } else if (val < 0x10000) {
+               str[2] = val & UTF8_V_MASK;
+               str[2] |= UTF8_N_BITS;
+               val >>= UTF8_V_SHIFT;
+               str[1] = val & UTF8_V_MASK;
+               str[1] |= UTF8_N_BITS;
+               val >>= UTF8_V_SHIFT;
+               str[0] = val;
+               str[0] |= UTF8_3_BITS;
+               len = 3;
+       } else if (val < 0x110000) {
+               str[3] = val & UTF8_V_MASK;
+               str[3] |= UTF8_N_BITS;
+               val >>= UTF8_V_SHIFT;
+               str[2] = val & UTF8_V_MASK;
+               str[2] |= UTF8_N_BITS;
+               val >>= UTF8_V_SHIFT;
+               str[1] = val & UTF8_V_MASK;
+               str[1] |= UTF8_N_BITS;
+               val >>= UTF8_V_SHIFT;
+               str[0] = val;
+               str[0] |= UTF8_4_BITS;
+               len = 4;
+       } else {
+               printf("%#x: illegal val\n", val);
+               len = 0;
+       }
+       return len;
+}
+
+static unsigned int utf8decode(const char *str)
+{
+       const unsigned char *s = (const unsigned char*)str;
+       unsigned int unichar = 0;
+
+       if (*s < 0x80) {
+               unichar = *s;
+       } else if (*s < UTF8_3_BITS) {
+               unichar = *s++ & 0x1F;
+               unichar <<= UTF8_V_SHIFT;
+               unichar |= *s & 0x3F;
+       } else if (*s < UTF8_4_BITS) {
+               unichar = *s++ & 0x0F;
+               unichar <<= UTF8_V_SHIFT;
+               unichar |= *s++ & 0x3F;
+               unichar <<= UTF8_V_SHIFT;
+               unichar |= *s & 0x3F;
+       } else {
+               unichar = *s++ & 0x0F;
+               unichar <<= UTF8_V_SHIFT;
+               unichar |= *s++ & 0x3F;
+               unichar <<= UTF8_V_SHIFT;
+               unichar |= *s++ & 0x3F;
+               unichar <<= UTF8_V_SHIFT;
+               unichar |= *s & 0x3F;
+       }
+       return unichar;
+}
+
+static int utf32valid(unsigned int unichar)
+{
+       return unichar < 0x110000;
+}
+
+#define HANGUL_SYLLABLE(U)     ((U) >= 0xAC00 && (U) <= 0xD7A3)
+
+#define NODE 1
+#define LEAF 0
+
+struct tree {
+       void *root;
+       int childnode;
+       const char *type;
+       unsigned int maxage;
+       struct tree *next;
+       int (*leaf_equal)(void *, void *);
+       void (*leaf_print)(void *, int);
+       int (*leaf_mark)(void *);
+       int (*leaf_size)(void *);
+       int *(*leaf_index)(struct tree *, void *);
+       unsigned char *(*leaf_emit)(void *, unsigned char *);
+       int leafindex[0x110000];
+       int index;
+};
+
+struct node {
+       int index;
+       int offset;
+       int mark;
+       int size;
+       struct node *parent;
+       void *left;
+       void *right;
+       unsigned char bitnum;
+       unsigned char nextbyte;
+       unsigned char leftnode;
+       unsigned char rightnode;
+       unsigned int keybits;
+       unsigned int keymask;
+};
+
+/*
+ * Example lookup function for a tree.
+ */
+static void *lookup(struct tree *tree, const char *key)
+{
+       struct node *node;
+       void *leaf = NULL;
+
+       node = tree->root;
+       while (!leaf && node) {
+               if (node->nextbyte)
+                       key++;
+               if (*key & (1 << (node->bitnum & 7))) {
+                       /* Right leg */
+                       if (node->rightnode == NODE) {
+                               node = node->right;
+                       } else if (node->rightnode == LEAF) {
+                               leaf = node->right;
+                       } else {
+                               node = NULL;
+                       }
+               } else {
+                       /* Left leg */
+                       if (node->leftnode == NODE) {
+                               node = node->left;
+                       } else if (node->leftnode == LEAF) {
+                               leaf = node->left;
+                       } else {
+                               node = NULL;
+                       }
+               }
+       }
+
+       return leaf;
+}
+
+/*
+ * A simple non-recursive tree walker: keep track of visits to the
+ * left and right branches in the leftmask and rightmask.
+ */
+static void tree_walk(struct tree *tree)
+{
+       struct node *node;
+       unsigned int leftmask;
+       unsigned int rightmask;
+       unsigned int bitmask;
+       int indent = 1;
+       int nodes, singletons, leaves;
+
+       nodes = singletons = leaves = 0;
+
+       printf("%s_%x root %p\n", tree->type, tree->maxage, tree->root);
+       if (tree->childnode == LEAF) {
+               assert(tree->root);
+               tree->leaf_print(tree->root, indent);
+               leaves = 1;
+       } else {
+               assert(tree->childnode == NODE);
+               node = tree->root;
+               leftmask = rightmask = 0;
+               while (node) {
+                       printf("%*snode @ %p bitnum %d nextbyte %d"
+                              " left %p right %p mask %x bits %x\n",
+                               indent, "", node,
+                               node->bitnum, node->nextbyte,
+                               node->left, node->right,
+                               node->keymask, node->keybits);
+                       nodes += 1;
+                       if (!(node->left && node->right))
+                               singletons += 1;
+
+                       while (node) {
+                               bitmask = 1 << node->bitnum;
+                               if ((leftmask & bitmask) == 0) {
+                                       leftmask |= bitmask;
+                                       if (node->leftnode == LEAF) {
+                                               assert(node->left);
+                                               tree->leaf_print(node->left,
+                                                                indent+1);
+                                               leaves += 1;
+                                       } else if (node->left) {
+                                               assert(node->leftnode == NODE);
+                                               indent += 1;
+                                               node = node->left;
+                                               break;
+                                       }
+                               }
+                               if ((rightmask & bitmask) == 0) {
+                                       rightmask |= bitmask;
+                                       if (node->rightnode == LEAF) {
+                                               assert(node->right);
+                                               tree->leaf_print(node->right,
+                                                                indent+1);
+                                               leaves += 1;
+                                       } else if (node->right) {
+                                               assert(node->rightnode == NODE);
+                                               indent += 1;
+                                               node = node->right;
+                                               break;
+                                       }
+                               }
+                               leftmask &= ~bitmask;
+                               rightmask &= ~bitmask;
+                               node = node->parent;
+                               indent -= 1;
+                       }
+               }
+       }
+       printf("nodes %d leaves %d singletons %d\n",
+              nodes, leaves, singletons);
+}
+
+/*
+ * Allocate an initialize a new internal node.
+ */
+static struct node *alloc_node(struct node *parent)
+{
+       struct node *node;
+       int bitnum;
+
+       node = malloc(sizeof(*node));
+       node->left = node->right = NULL;
+       node->parent = parent;
+       node->leftnode = NODE;
+       node->rightnode = NODE;
+       node->keybits = 0;
+       node->keymask = 0;
+       node->mark = 0;
+       node->index = 0;
+       node->offset = -1;
+       node->size = 4;
+
+       if (node->parent) {
+               bitnum = parent->bitnum;
+               if ((bitnum & 7) == 0) {
+                       node->bitnum = bitnum + 7 + 8;
+                       node->nextbyte = 1;
+               } else {
+                       node->bitnum = bitnum - 1;
+                       node->nextbyte = 0;
+               }
+       } else {
+               node->bitnum = 7;
+               node->nextbyte = 0;
+       }
+
+       return node;
+}
+
+/*
+ * Insert a new leaf into the tree, and collapse any subtrees that are
+ * fully populated and end in identical leaves. A nextbyte tagged
+ * internal node will not be removed to preserve the tree's integrity.
+ * Note that due to the structure of utf8, no nextbyte tagged node
+ * will be a candidate for removal.
+ */
+static int insert(struct tree *tree, char *key, int keylen, void *leaf)
+{
+       struct node *node;
+       struct node *parent;
+       void **cursor;
+       int keybits;
+
+       assert(keylen >= 1 && keylen <= 4);
+
+       node = NULL;
+       cursor = &tree->root;
+       keybits = 8 * keylen;
+
+       /* Insert, creating path along the way. */
+       while (keybits) {
+               if (!*cursor)
+                       *cursor = alloc_node(node);
+               node = *cursor;
+               if (node->nextbyte)
+                       key++;
+               if (*key & (1 << (node->bitnum & 7)))
+                       cursor = &node->right;
+               else
+                       cursor = &node->left;
+               keybits--;
+       }
+       *cursor = leaf;
+
+       /* Merge subtrees if possible. */
+       while (node) {
+               if (*key & (1 << (node->bitnum & 7)))
+                       node->rightnode = LEAF;
+               else
+                       node->leftnode = LEAF;
+               if (node->nextbyte)
+                       break;
+               if (node->leftnode == NODE || node->rightnode == NODE)
+                       break;
+               assert(node->left);
+               assert(node->right);
+               /* Compare */
+               if (! tree->leaf_equal(node->left, node->right))
+                       break;
+               /* Keep left, drop right leaf. */
+               leaf = node->left;
+               /* Check in parent */
+               parent = node->parent;
+               if (!parent) {
+                       /* root of tree! */
+                       tree->root = leaf;
+                       tree->childnode = LEAF;
+               } else if (parent->left == node) {
+                       parent->left = leaf;
+                       parent->leftnode = LEAF;
+                       if (parent->right) {
+                               parent->keymask = 0;
+                               parent->keybits = 0;
+                       } else {
+                               parent->keymask |= (1 << node->bitnum);
+                       }
+               } else if (parent->right == node) {
+                       parent->right = leaf;
+                       parent->rightnode = LEAF;
+                       if (parent->left) {
+                               parent->keymask = 0;
+                               parent->keybits = 0;
+                       } else {
+                               parent->keymask |= (1 << node->bitnum);
+                               parent->keybits |= (1 << node->bitnum);
+                       }
+               } else {
+                       /* internal tree error */
+                       assert(0);
+               }
+               free(node);
+               node = parent;
+       }
+
+       /* Propagate keymasks up along singleton chains. */
+       while (node) {
+               parent = node->parent;
+               if (!parent)
+                       break;
+               /* Nix the mask for parents with two children. */
+               if (node->keymask == 0) {
+                       parent->keymask = 0;
+                       parent->keybits = 0;
+               } else if (parent->left && parent->right) {
+                       parent->keymask = 0;
+                       parent->keybits = 0;
+               } else {
+                       assert((parent->keymask & node->keymask) == 0);
+                       parent->keymask |= node->keymask;
+                       parent->keymask |= (1 << parent->bitnum);
+                       parent->keybits |= node->keybits;
+                       if (parent->right)
+                               parent->keybits |= (1 << parent->bitnum);
+               }
+               node = parent;
+       }
+
+       return 0;
+}
+
+/*
+ * Prune internal nodes.
+ *
+ * Fully populated subtrees that end at the same leaf have already
+ * been collapsed.  There are still internal nodes that have for both
+ * their left and right branches a sequence of singletons that make
+ * identical choices and end in identical leaves.  The keymask and
+ * keybits collected in the nodes describe the choices made in these
+ * singleton chains.  When they are identical for the left and right
+ * branch of a node, and the two leaves comare identical, the node in
+ * question can be removed.
+ *
+ * Note that nodes with the nextbyte tag set will not be removed by
+ * this to ensure tree integrity.  Note as well that the structure of
+ * utf8 ensures that these nodes would not have been candidates for
+ * removal in any case.
+ */
+static void prune(struct tree *tree)
+{
+       struct node *node;
+       struct node *left;
+       struct node *right;
+       struct node *parent;
+       void *leftleaf;
+       void *rightleaf;
+       unsigned int leftmask;
+       unsigned int rightmask;
+       unsigned int bitmask;
+       int count;
+
+       if (verbose > 0)
+               printf("Pruning %s_%x\n", tree->type, tree->maxage);
+
+       count = 0;
+       if (tree->childnode == LEAF)
+               return;
+       if (!tree->root)
+               return;
+
+       leftmask = rightmask = 0;
+       node = tree->root;
+       while (node) {
+               if (node->nextbyte)
+                       goto advance;
+               if (node->leftnode == LEAF)
+                       goto advance;
+               if (node->rightnode == LEAF)
+                       goto advance;
+               if (!node->left)
+                       goto advance;
+               if (!node->right)
+                       goto advance;
+               left = node->left;
+               right = node->right;
+               if (left->keymask == 0)
+                       goto advance;
+               if (right->keymask == 0)
+                       goto advance;
+               if (left->keymask != right->keymask)
+                       goto advance;
+               if (left->keybits != right->keybits)
+                       goto advance;
+               leftleaf = NULL;
+               while (!leftleaf) {
+                       assert(left->left || left->right);
+                       if (left->leftnode == LEAF)
+                               leftleaf = left->left;
+                       else if (left->rightnode == LEAF)
+                               leftleaf = left->right;
+                       else if (left->left)
+                               left = left->left;
+                       else if (left->right)
+                               left = left->right;
+                       else
+                               assert(0);
+               }
+               rightleaf = NULL;
+               while (!rightleaf) {
+                       assert(right->left || right->right);
+                       if (right->leftnode == LEAF)
+                               rightleaf = right->left;
+                       else if (right->rightnode == LEAF)
+                               rightleaf = right->right;
+                       else if (right->left)
+                               right = right->left;
+                       else if (right->right)
+                               right = right->right;
+                       else
+                               assert(0);
+               }
+               if (! tree->leaf_equal(leftleaf, rightleaf))
+                       goto advance;
+               /*
+                * This node has identical singleton-only subtrees.
+                * Remove it.
+                */
+               parent = node->parent;
+               left = node->left;
+               right = node->right;
+               if (parent->left == node)
+                       parent->left = left;
+               else if (parent->right == node)
+                       parent->right = left;
+               else
+                       assert(0);
+               left->parent = parent;
+               left->keymask |= (1 << node->bitnum);
+               node->left = NULL;
+               while (node) {
+                       bitmask = 1 << node->bitnum;
+                       leftmask &= ~bitmask;
+                       rightmask &= ~bitmask;
+                       if (node->leftnode == NODE && node->left) {
+                               left = node->left;
+                               free(node);
+                               count++;
+                               node = left;
+                       } else if (node->rightnode == NODE && node->right) {
+                               right = node->right;
+                               free(node);
+                               count++;
+                               node = right;
+                       } else {
+                               node = NULL;
+                       }
+               }
+               /* Propagate keymasks up along singleton chains. */
+               node = parent;
+               /* Force re-check */
+               bitmask = 1 << node->bitnum;
+               leftmask &= ~bitmask;
+               rightmask &= ~bitmask;
+               for (;;) {
+                       if (node->left && node->right)
+                               break;
+                       if (node->left) {
+                               left = node->left;
+                               node->keymask |= left->keymask;
+                               node->keybits |= left->keybits;
+                       }
+                       if (node->right) {
+                               right = node->right;
+                               node->keymask |= right->keymask;
+                               node->keybits |= right->keybits;
+                       }
+                       node->keymask |= (1 << node->bitnum);
+                       node = node->parent;
+                       /* Force re-check */
+                       bitmask = 1 << node->bitnum;
+                       leftmask &= ~bitmask;
+                       rightmask &= ~bitmask;
+               }
+       advance:
+               bitmask = 1 << node->bitnum;
+               if ((leftmask & bitmask) == 0 &&
+                   node->leftnode == NODE &&
+                   node->left) {
+                       leftmask |= bitmask;
+                       node = node->left;
+               } else if ((rightmask & bitmask) == 0 &&
+                          node->rightnode == NODE &&
+                          node->right) {
+                       rightmask |= bitmask;
+                       node = node->right;
+               } else {
+                       leftmask &= ~bitmask;
+                       rightmask &= ~bitmask;
+                       node = node->parent;
+               }
+       }
+       if (verbose > 0)
+               printf("Pruned %d nodes\n", count);
+}
+
+/*
+ * Mark the nodes in the tree that lead to leaves that must be
+ * emitted.
+ */
+static void mark_nodes(struct tree *tree)
+{
+       struct node *node;
+       struct node *n;
+       unsigned int leftmask;
+       unsigned int rightmask;
+       unsigned int bitmask;
+       int marked;
+
+       marked = 0;
+       if (verbose > 0)
+               printf("Marking %s_%x\n", tree->type, tree->maxage);
+       if (tree->childnode == LEAF)
+               goto done;
+
+       assert(tree->childnode == NODE);
+       node = tree->root;
+       leftmask = rightmask = 0;
+       while (node) {
+               bitmask = 1 << node->bitnum;
+               if ((leftmask & bitmask) == 0) {
+                       leftmask |= bitmask;
+                       if (node->leftnode == LEAF) {
+                               assert(node->left);
+                               if (tree->leaf_mark(node->left)) {
+                                       n = node;
+                                       while (n && !n->mark) {
+                                               marked++;
+                                               n->mark = 1;
+                                               n = n->parent;
+                                       }
+                               }
+                       } else if (node->left) {
+                               assert(node->leftnode == NODE);
+                               node = node->left;
+                               continue;
+                       }
+               }
+               if ((rightmask & bitmask) == 0) {
+                       rightmask |= bitmask;
+                       if (node->rightnode == LEAF) {
+                               assert(node->right);
+                               if (tree->leaf_mark(node->right)) {
+                                       n = node;
+                                       while (n && !n->mark) {
+                                               marked++;
+                                               n->mark = 1;
+                                               n = n->parent;
+                                       }
+                               }
+                       } else if (node->right) {
+                               assert(node->rightnode == NODE);
+                               node = node->right;
+                               continue;
+                       }
+               }
+               leftmask &= ~bitmask;
+               rightmask &= ~bitmask;
+               node = node->parent;
+       }
+
+       /* second pass: left siblings and singletons */
+
+       assert(tree->childnode == NODE);
+       node = tree->root;
+       leftmask = rightmask = 0;
+       while (node) {
+               bitmask = 1 << node->bitnum;
+               if ((leftmask & bitmask) == 0) {
+                       leftmask |= bitmask;
+                       if (node->leftnode == LEAF) {
+                               assert(node->left);
+                               if (tree->leaf_mark(node->left)) {
+                                       n = node;
+                                       while (n && !n->mark) {
+                                               marked++;
+                                               n->mark = 1;
+                                               n = n->parent;
+                                       }
+                               }
+                       } else if (node->left) {
+                               assert(node->leftnode == NODE);
+                               node = node->left;
+                               if (!node->mark && node->parent->mark) {
+                                       marked++;
+                                       node->mark = 1;
+                               }
+                               continue;
+                       }
+               }
+               if ((rightmask & bitmask) == 0) {
+                       rightmask |= bitmask;
+                       if (node->rightnode == LEAF) {
+                               assert(node->right);
+                               if (tree->leaf_mark(node->right)) {
+                                       n = node;
+                                       while (n && !n->mark) {
+                                               marked++;
+                                               n->mark = 1;
+                                               n = n->parent;
+                                       }
+                               }
+                       } else if (node->right) {
+                               assert(node->rightnode == NODE);
+                               node = node->right;
+                               if (!node->mark && node->parent->mark &&
+                                   !node->parent->left) {
+                                       marked++;
+                                       node->mark = 1;
+                               }
+                               continue;
+                       }
+               }
+               leftmask &= ~bitmask;
+               rightmask &= ~bitmask;
+               node = node->parent;
+       }
+done:
+       if (verbose > 0)
+               printf("Marked %d nodes\n", marked);
+}
+
+/*
+ * Compute the index of each node and leaf, which is the offset in the
+ * emitted trie.  These values must be pre-computed because relative
+ * offsets between nodes are used to navigate the tree.
+ */
+static int index_nodes(struct tree *tree, int index)
+{
+       struct node *node;
+       unsigned int leftmask;
+       unsigned int rightmask;
+       unsigned int bitmask;
+       int count;
+       int indent;
+
+       /* Align to a cache line (or half a cache line?). */
+       while (index % 64)
+               index++;
+       tree->index = index;
+       indent = 1;
+       count = 0;
+
+       if (verbose > 0)
+               printf("Indexing %s_%x: %d\n", tree->type, tree->maxage, index);
+       if (tree->childnode == LEAF) {
+               index += tree->leaf_size(tree->root);
+               goto done;
+       }
+
+       assert(tree->childnode == NODE);
+       node = tree->root;
+       leftmask = rightmask = 0;
+       while (node) {
+               if (!node->mark)
+                       goto skip;
+               count++;
+               if (node->index != index)
+                       node->index = index;
+               index += node->size;
+skip:
+               while (node) {
+                       bitmask = 1 << node->bitnum;
+                       if (node->mark && (leftmask & bitmask) == 0) {
+                               leftmask |= bitmask;
+                               if (node->leftnode == LEAF) {
+                                       assert(node->left);
+                                       *tree->leaf_index(tree, node->left) =
+                                                                       index;
+                                       index += tree->leaf_size(node->left);
+                                       count++;
+                               } else if (node->left) {
+                                       assert(node->leftnode == NODE);
+                                       indent += 1;
+                                       node = node->left;
+                                       break;
+                               }
+                       }
+                       if (node->mark && (rightmask & bitmask) == 0) {
+                               rightmask |= bitmask;
+                               if (node->rightnode == LEAF) {
+                                       assert(node->right);
+                                       *tree->leaf_index(tree, node->right) = index;
+                                       index += tree->leaf_size(node->right);
+                                       count++;
+                               } else if (node->right) {
+                                       assert(node->rightnode == NODE);
+                                       indent += 1;
+                                       node = node->right;
+                                       break;
+                               }
+                       }
+                       leftmask &= ~bitmask;
+                       rightmask &= ~bitmask;
+                       node = node->parent;
+                       indent -= 1;
+               }
+       }
+done:
+       /* Round up to a multiple of 16 */
+       while (index % 16)
+               index++;
+       if (verbose > 0)
+               printf("Final index %d\n", index);
+       return index;
+}
+
+/*
+ * Mark the nodes in a subtree, helper for size_nodes().
+ */
+static int mark_subtree(struct node *node)
+{
+       int changed;
+
+       if (!node || node->mark)
+               return 0;
+       node->mark = 1;
+       node->index = node->parent->index;
+       changed = 1;
+       if (node->leftnode == NODE)
+               changed += mark_subtree(node->left);
+       if (node->rightnode == NODE)
+               changed += mark_subtree(node->right);
+       return changed;
+}
+
+/*
+ * Compute the size of nodes and leaves. We start by assuming that
+ * each node needs to store a three-byte offset. The indexes of the
+ * nodes are calculated based on that, and then this function is
+ * called to see if the sizes of some nodes can be reduced.  This is
+ * repeated until no more changes are seen.
+ */
+static int size_nodes(struct tree *tree)
+{
+       struct tree *next;
+       struct node *node;
+       struct node *right;
+       struct node *n;
+       unsigned int leftmask;
+       unsigned int rightmask;
+       unsigned int bitmask;
+       unsigned int pathbits;
+       unsigned int pathmask;
+       unsigned int nbit;
+       int changed;
+       int offset;
+       int size;
+       int indent;
+
+       indent = 1;
+       changed = 0;
+       size = 0;
+
+       if (verbose > 0)
+               printf("Sizing %s_%x\n", tree->type, tree->maxage);
+       if (tree->childnode == LEAF)
+               goto done;
+
+       assert(tree->childnode == NODE);
+       pathbits = 0;
+       pathmask = 0;
+       node = tree->root;
+       leftmask = rightmask = 0;
+       while (node) {
+               if (!node->mark)
+                       goto skip;
+               offset = 0;
+               if (!node->left || !node->right) {
+                       size = 1;
+               } else {
+                       if (node->rightnode == NODE) {
+                               /*
+                                * If the right node is not marked,
+                                * look for a corresponding node in
+                                * the next tree.  Such a node need
+                                * not exist.
+                                */
+                               right = node->right;
+                               next = tree->next;
+                               while (!right->mark) {
+                                       assert(next);
+                                       n = next->root;
+                                       while (n->bitnum != node->bitnum) {
+                                               nbit = 1 << n->bitnum;
+                                               if (!(pathmask & nbit))
+                                                       break;
+                                               if (pathbits & nbit) {
+                                                       if (n->rightnode == LEAF)
+                                                               break;
+                                                       n = n->right;
+                                               } else {
+                                                       if (n->leftnode == LEAF)
+                                                               break;
+                                                       n = n->left;
+                                               }
+                                       }
+                                       if (n->bitnum != node->bitnum)
+                                               break;
+                                       n = n->right;
+                                       right = n;
+                                       next = next->next;
+                               }
+                               /* Make sure the right node is marked. */
+                               if (!right->mark)
+                                       changed += mark_subtree(right);
+                               offset = right->index - node->index;
+                       } else {
+                               offset = *tree->leaf_index(tree, node->right);
+                               offset -= node->index;
+                       }
+                       assert(offset >= 0);
+                       assert(offset <= 0xffffff);
+                       if (offset <= 0xff) {
+                               size = 2;
+                       } else if (offset <= 0xffff) {
+                               size = 3;
+                       } else { /* offset <= 0xffffff */
+                               size = 4;
+                       }
+               }
+               if (node->size != size || node->offset != offset) {
+                       node->size = size;
+                       node->offset = offset;
+                       changed++;
+               }
+skip:
+               while (node) {
+                       bitmask = 1 << node->bitnum;
+                       pathmask |= bitmask;
+                       if (node->mark && (leftmask & bitmask) == 0) {
+                               leftmask |= bitmask;
+                               if (node->leftnode == LEAF) {
+                                       assert(node->left);
+                               } else if (node->left) {
+                                       assert(node->leftnode == NODE);
+                                       indent += 1;
+                                       node = node->left;
+                                       break;
+                               }
+                       }
+                       if (node->mark && (rightmask & bitmask) == 0) {
+                               rightmask |= bitmask;
+                               pathbits |= bitmask;
+                               if (node->rightnode == LEAF) {
+                                       assert(node->right);
+                               } else if (node->right) {
+                                       assert(node->rightnode == NODE);
+                                       indent += 1;
+                                       node = node->right;
+                                       break;
+                               }
+                       }
+                       leftmask &= ~bitmask;
+                       rightmask &= ~bitmask;
+                       pathmask &= ~bitmask;
+                       pathbits &= ~bitmask;
+                       node = node->parent;
+                       indent -= 1;
+               }
+       }
+done:
+       if (verbose > 0)
+               printf("Found %d changes\n", changed);
+       return changed;
+}
+
+/*
+ * Emit a trie for the given tree into the data array.
+ */
+static void emit(struct tree *tree, unsigned char *data)
+{
+       struct node *node;
+       unsigned int leftmask;
+       unsigned int rightmask;
+       unsigned int bitmask;
+       int offlen;
+       int offset;
+       int index;
+       int indent;
+       int size;
+       int bytes;
+       int leaves;
+       int nodes[4];
+       unsigned char byte;
+
+       nodes[0] = nodes[1] = nodes[2] = nodes[3] = 0;
+       leaves = 0;
+       bytes = 0;
+       index = tree->index;
+       data += index;
+       indent = 1;
+       if (verbose > 0)
+               printf("Emitting %s_%x\n", tree->type, tree->maxage);
+       if (tree->childnode == LEAF) {
+               assert(tree->root);
+               tree->leaf_emit(tree->root, data);
+               size = tree->leaf_size(tree->root);
+               index += size;
+               leaves++;
+               goto done;
+       }
+
+       assert(tree->childnode == NODE);
+       node = tree->root;
+       leftmask = rightmask = 0;
+       while (node) {
+               if (!node->mark)
+                       goto skip;
+               assert(node->offset != -1);
+               assert(node->index == index);
+
+               byte = 0;
+               if (node->nextbyte)
+                       byte |= NEXTBYTE;
+               byte |= (node->bitnum & BITNUM);
+               if (node->left && node->right) {
+                       if (node->leftnode == NODE)
+                               byte |= LEFTNODE;
+                       if (node->rightnode == NODE)
+                               byte |= RIGHTNODE;
+                       if (node->offset <= 0xff)
+                               offlen = 1;
+                       else if (node->offset <= 0xffff)
+                               offlen = 2;
+                       else
+                               offlen = 3;
+                       nodes[offlen]++;
+                       offset = node->offset;
+                       byte |= offlen << OFFLEN_SHIFT;
+                       *data++ = byte;
+                       index++;
+                       while (offlen--) {
+                               *data++ = offset & 0xff;
+                               index++;
+                               offset >>= 8;
+                       }
+               } else if (node->left) {
+                       if (node->leftnode == NODE)
+                               byte |= TRIENODE;
+                       nodes[0]++;
+                       *data++ = byte;
+                       index++;
+               } else if (node->right) {
+                       byte |= RIGHTNODE;
+                       if (node->rightnode == NODE)
+                               byte |= TRIENODE;
+                       nodes[0]++;
+                       *data++ = byte;
+                       index++;
+               } else {
+                       assert(0);
+               }
+skip:
+               while (node) {
+                       bitmask = 1 << node->bitnum;
+                       if (node->mark && (leftmask & bitmask) == 0) {
+                               leftmask |= bitmask;
+                               if (node->leftnode == LEAF) {
+                                       assert(node->left);
+                                       data = tree->leaf_emit(node->left,
+                                                              data);
+                                       size = tree->leaf_size(node->left);
+                                       index += size;
+                                       bytes += size;
+                                       leaves++;
+                               } else if (node->left) {
+                                       assert(node->leftnode == NODE);
+                                       indent += 1;
+                                       node = node->left;
+                                       break;
+                               }
+                       }
+                       if (node->mark && (rightmask & bitmask) == 0) {
+                               rightmask |= bitmask;
+                               if (node->rightnode == LEAF) {
+                                       assert(node->right);
+                                       data = tree->leaf_emit(node->right,
+                                                              data);
+                                       size = tree->leaf_size(node->right);
+                                       index += size;
+                                       bytes += size;
+                                       leaves++;
+                               } else if (node->right) {
+                                       assert(node->rightnode == NODE);
+                                       indent += 1;
+                                       node = node->right;
+                                       break;
+                               }
+                       }
+                       leftmask &= ~bitmask;
+                       rightmask &= ~bitmask;
+                       node = node->parent;
+                       indent -= 1;
+               }
+       }
+done:
+       if (verbose > 0) {
+               printf("Emitted %d (%d) leaves",
+                       leaves, bytes);
+               printf(" %d (%d+%d+%d+%d) nodes",
+                       nodes[0] + nodes[1] + nodes[2] + nodes[3],
+                       nodes[0], nodes[1], nodes[2], nodes[3]);
+               printf(" %d total\n", index - tree->index);
+       }
+}
+
+/* ------------------------------------------------------------------ */
+
+/*
+ * Unicode data.
+ *
+ * We need to keep track of the Canonical Combining Class, the Age,
+ * and decompositions for a code point.
+ *
+ * For the Age, we store the index into the ages table.  Effectively
+ * this is a generation number that the table maps to a unicode
+ * version.
+ *
+ * The correction field is used to indicate that this entry is in the
+ * corrections array, which contains decompositions that were
+ * corrected in later revisions.  The value of the correction field is
+ * the Unicode version in which the mapping was corrected.
+ */
+struct unicode_data {
+       unsigned int code;
+       int ccc;
+       int gen;
+       int correction;
+       unsigned int *utf32nfkdi;
+       unsigned int *utf32nfkdicf;
+       char *utf8nfkdi;
+       char *utf8nfkdicf;
+};
+
+struct unicode_data unicode_data[0x110000];
+struct unicode_data *corrections;
+int    corrections_count;
+
+struct tree *nfkdi_tree;
+struct tree *nfkdicf_tree;
+
+struct tree *trees;
+int          trees_count;
+
+/*
+ * Check the corrections array to see if this entry was corrected at
+ * some point.
+ */
+static struct unicode_data *corrections_lookup(struct unicode_data *u)
+{
+       int i;
+
+       for (i = 0; i != corrections_count; i++)
+               if (u->code == corrections[i].code)
+                       return &corrections[i];
+       return u;
+}
+
+static int nfkdi_equal(void *l, void *r)
+{
+       struct unicode_data *left = l;
+       struct unicode_data *right = r;
+
+       if (left->gen != right->gen)
+               return 0;
+       if (left->ccc != right->ccc)
+               return 0;
+       if (left->utf8nfkdi && right->utf8nfkdi &&
+           strcmp(left->utf8nfkdi, right->utf8nfkdi) == 0)
+               return 1;
+       if (left->utf8nfkdi || right->utf8nfkdi)
+               return 0;
+       return 1;
+}
+
+static int nfkdicf_equal(void *l, void *r)
+{
+       struct unicode_data *left = l;
+       struct unicode_data *right = r;
+
+       if (left->gen != right->gen)
+               return 0;
+       if (left->ccc != right->ccc)
+               return 0;
+       if (left->utf8nfkdicf && right->utf8nfkdicf &&
+           strcmp(left->utf8nfkdicf, right->utf8nfkdicf) == 0)
+               return 1;
+       if (left->utf8nfkdicf && right->utf8nfkdicf)
+               return 0;
+       if (left->utf8nfkdicf || right->utf8nfkdicf)
+               return 0;
+       if (left->utf8nfkdi && right->utf8nfkdi &&
+           strcmp(left->utf8nfkdi, right->utf8nfkdi) == 0)
+               return 1;
+       if (left->utf8nfkdi || right->utf8nfkdi)
+               return 0;
+       return 1;
+}
+
+static void nfkdi_print(void *l, int indent)
+{
+       struct unicode_data *leaf = l;
+
+       printf("%*sleaf @ %p code %X ccc %d gen %d", indent, "", leaf,
+               leaf->code, leaf->ccc, leaf->gen);
+       if (leaf->utf8nfkdi && leaf->utf8nfkdi[0] == HANGUL)
+               printf(" nfkdi \"%s\"", "HANGUL SYLLABLE");
+       else if (leaf->utf8nfkdi)
+               printf(" nfkdi \"%s\"", (const char*)leaf->utf8nfkdi);
+       printf("\n");
+}
+
+static void nfkdicf_print(void *l, int indent)
+{
+       struct unicode_data *leaf = l;
+
+       printf("%*sleaf @ %p code %X ccc %d gen %d", indent, "", leaf,
+               leaf->code, leaf->ccc, leaf->gen);
+       if (leaf->utf8nfkdicf)
+               printf(" nfkdicf \"%s\"", (const char*)leaf->utf8nfkdicf);
+       else if (leaf->utf8nfkdi && leaf->utf8nfkdi[0] == HANGUL)
+               printf(" nfkdi \"%s\"", "HANGUL SYLLABLE");
+       else if (leaf->utf8nfkdi)
+               printf(" nfkdi \"%s\"", (const char*)leaf->utf8nfkdi);
+       printf("\n");
+}
+
+static int nfkdi_mark(void *l)
+{
+       return 1;
+}
+
+static int nfkdicf_mark(void *l)
+{
+       struct unicode_data *leaf = l;
+
+       if (leaf->utf8nfkdicf)
+               return 1;
+       return 0;
+}
+
+static int correction_mark(void *l)
+{
+       struct unicode_data *leaf = l;
+
+       return leaf->correction;
+}
+
+static int nfkdi_size(void *l)
+{
+       struct unicode_data *leaf = l;
+
+       int size = 2;
+       if (HANGUL_SYLLABLE(leaf->code))
+               size += 1;
+       else if (leaf->utf8nfkdi)
+               size += strlen(leaf->utf8nfkdi) + 1;
+       return size;
+}
+
+static int nfkdicf_size(void *l)
+{
+       struct unicode_data *leaf = l;
+
+       int size = 2;
+       if (HANGUL_SYLLABLE(leaf->code))
+               size += 1;
+       else if (leaf->utf8nfkdicf)
+               size += strlen(leaf->utf8nfkdicf) + 1;
+       else if (leaf->utf8nfkdi)
+               size += strlen(leaf->utf8nfkdi) + 1;
+       return size;
+}
+
+static int *nfkdi_index(struct tree *tree, void *l)
+{
+       struct unicode_data *leaf = l;
+
+       return &tree->leafindex[leaf->code];
+}
+
+static int *nfkdicf_index(struct tree *tree, void *l)
+{
+       struct unicode_data *leaf = l;
+
+       return &tree->leafindex[leaf->code];
+}
+
+static unsigned char *nfkdi_emit(void *l, unsigned char *data)
+{
+       struct unicode_data *leaf = l;
+       unsigned char *s;
+
+       *data++ = leaf->gen;
+       if (HANGUL_SYLLABLE(leaf->code)) {
+               *data++ = DECOMPOSE;
+               *data++ = HANGUL;
+       } else if (leaf->utf8nfkdi) {
+               *data++ = DECOMPOSE;
+               s = (unsigned char*)leaf->utf8nfkdi;
+               while ((*data++ = *s++) != 0)
+                       ;
+       } else {
+               *data++ = leaf->ccc;
+       }
+       return data;
+}
+
+static unsigned char *nfkdicf_emit(void *l, unsigned char *data)
+{
+       struct unicode_data *leaf = l;
+       unsigned char *s;
+
+       *data++ = leaf->gen;
+       if (HANGUL_SYLLABLE(leaf->code)) {
+               *data++ = DECOMPOSE;
+               *data++ = HANGUL;
+       } else if (leaf->utf8nfkdicf) {
+               *data++ = DECOMPOSE;
+               s = (unsigned char*)leaf->utf8nfkdicf;
+               while ((*data++ = *s++) != 0)
+                       ;
+       } else if (leaf->utf8nfkdi) {
+               *data++ = DECOMPOSE;
+               s = (unsigned char*)leaf->utf8nfkdi;
+               while ((*data++ = *s++) != 0)
+                       ;
+       } else {
+               *data++ = leaf->ccc;
+       }
+       return data;
+}
+
+static void utf8_create(struct unicode_data *data)
+{
+       char utf[18*4+1];
+       char *u;
+       unsigned int *um;
+       int i;
+
+       if (data->utf8nfkdi) {
+               assert(data->utf8nfkdi[0] == HANGUL);
+               return;
+       }
+
+       u = utf;
+       um = data->utf32nfkdi;
+       if (um) {
+               for (i = 0; um[i]; i++)
+                       u += utf8encode(u, um[i]);
+               *u = '\0';
+               data->utf8nfkdi = strdup(utf);
+       }
+       u = utf;
+       um = data->utf32nfkdicf;
+       if (um) {
+               for (i = 0; um[i]; i++)
+                       u += utf8encode(u, um[i]);
+               *u = '\0';
+               if (!data->utf8nfkdi || strcmp(data->utf8nfkdi, utf))
+                       data->utf8nfkdicf = strdup(utf);
+       }
+}
+
+static void utf8_init(void)
+{
+       unsigned int unichar;
+       int i;
+
+       for (unichar = 0; unichar != 0x110000; unichar++)
+               utf8_create(&unicode_data[unichar]);
+
+       for (i = 0; i != corrections_count; i++)
+               utf8_create(&corrections[i]);
+}
+
+static void trees_init(void)
+{
+       struct unicode_data *data;
+       unsigned int maxage;
+       unsigned int nextage;
+       int count;
+       int i;
+       int j;
+
+       /* Count the number of different ages. */
+       count = 0;
+       nextage = (unsigned int)-1;
+       do {
+               maxage = nextage;
+               nextage = 0;
+               for (i = 0; i <= corrections_count; i++) {
+                       data = &corrections[i];
+                       if (nextage < data->correction &&
+                           data->correction < maxage)
+                               nextage = data->correction;
+               }
+               count++;
+       } while (nextage);
+
+       /* Two trees per age: nfkdi and nfkdicf */
+       trees_count = count * 2;
+       trees = calloc(trees_count, sizeof(struct tree));
+
+       /* Assign ages to the trees. */
+       count = trees_count;
+       nextage = (unsigned int)-1;
+       do {
+               maxage = nextage;
+               trees[--count].maxage = maxage;
+               trees[--count].maxage = maxage;
+               nextage = 0;
+               for (i = 0; i <= corrections_count; i++) {
+                       data = &corrections[i];
+                       if (nextage < data->correction &&
+                           data->correction < maxage)
+                               nextage = data->correction;
+               }
+       } while (nextage);
+
+       /* The ages assigned above are off by one. */
+       for (i = 0; i != trees_count; i++) {
+               j = 0;
+               while (ages[j] < trees[i].maxage)
+                       j++;
+               trees[i].maxage = ages[j-1];
+       }
+
+       /* Set up the forwarding between trees. */
+       trees[trees_count-2].next = &trees[trees_count-1];
+       trees[trees_count-1].leaf_mark = nfkdi_mark;
+       trees[trees_count-2].leaf_mark = nfkdicf_mark;
+       for (i = 0; i != trees_count-2; i += 2) {
+               trees[i].next = &trees[trees_count-2];
+               trees[i].leaf_mark = correction_mark;
+               trees[i+1].next = &trees[trees_count-1];
+               trees[i+1].leaf_mark = correction_mark;
+       }
+
+       /* Assign the callouts. */
+       for (i = 0; i != trees_count; i += 2) {
+               trees[i].type = "nfkdicf";
+               trees[i].leaf_equal = nfkdicf_equal;
+               trees[i].leaf_print = nfkdicf_print;
+               trees[i].leaf_size = nfkdicf_size;
+               trees[i].leaf_index = nfkdicf_index;
+               trees[i].leaf_emit = nfkdicf_emit;
+
+               trees[i+1].type = "nfkdi";
+               trees[i+1].leaf_equal = nfkdi_equal;
+               trees[i+1].leaf_print = nfkdi_print;
+               trees[i+1].leaf_size = nfkdi_size;
+               trees[i+1].leaf_index = nfkdi_index;
+               trees[i+1].leaf_emit = nfkdi_emit;
+       }
+
+       /* Finish init. */
+       for (i = 0; i != trees_count; i++)
+               trees[i].childnode = NODE;
+}
+
+static void trees_populate(void)
+{
+       struct unicode_data *data;
+       unsigned int unichar;
+       char keyval[4];
+       int keylen;
+       int i;
+
+       for (i = 0; i != trees_count; i++) {
+               if (verbose > 0) {
+                       printf("Populating %s_%x\n",
+                               trees[i].type, trees[i].maxage);
+               }
+               for (unichar = 0; unichar != 0x110000; unichar++) {
+                       if (unicode_data[unichar].gen < 0)
+                               continue;
+                       keylen = utf8encode(keyval, unichar);
+                       data = corrections_lookup(&unicode_data[unichar]);
+                       if (data->correction <= trees[i].maxage)
+                               data = &unicode_data[unichar];
+                       insert(&trees[i], keyval, keylen, data);
+               }
+       }
+}
+
+static void trees_reduce(void)
+{
+       int i;
+       int size;
+       int changed;
+
+       for (i = 0; i != trees_count; i++)
+               prune(&trees[i]);
+       for (i = 0; i != trees_count; i++)
+               mark_nodes(&trees[i]);
+       do {
+               size = 0;
+               for (i = 0; i != trees_count; i++)
+                       size = index_nodes(&trees[i], size);
+               changed = 0;
+               for (i = 0; i != trees_count; i++)
+                       changed += size_nodes(&trees[i]);
+       } while (changed);
+
+       utf8data = calloc(size, 1);
+       utf8data_size = size;
+       for (i = 0; i != trees_count; i++)
+               emit(&trees[i], utf8data);
+
+       if (verbose > 0) {
+               for (i = 0; i != trees_count; i++) {
+                       printf("%s_%x idx %d\n",
+                               trees[i].type, trees[i].maxage, trees[i].index);
+               }
+       }
+
+       nfkdi = utf8data + trees[trees_count-1].index;
+       nfkdicf = utf8data + trees[trees_count-2].index;
+
+       nfkdi_tree = &trees[trees_count-1];
+       nfkdicf_tree = &trees[trees_count-2];
+}
+
+static void verify(struct tree *tree)
+{
+       struct unicode_data *data;
+       utf8leaf_t      *leaf;
+       unsigned int    unichar;
+       char            key[4];
+       unsigned char   hangul[UTF8HANGULLEAF];
+       int             report;
+       int             nocf;
+
+       if (verbose > 0)
+               printf("Verifying %s_%x\n", tree->type, tree->maxage);
+       nocf = strcmp(tree->type, "nfkdicf");
+
+       for (unichar = 0; unichar != 0x110000; unichar++) {
+               report = 0;
+               data = corrections_lookup(&unicode_data[unichar]);
+               if (data->correction <= tree->maxage)
+                       data = &unicode_data[unichar];
+               utf8encode(key,unichar);
+               leaf = utf8lookup(tree, hangul, key);
+
+               if (!leaf) {
+                       if (data->gen != -1)
+                               report++;
+                       if (unichar < 0xd800 || unichar > 0xdfff)
+                               report++;
+               } else {
+                       if (unichar >= 0xd800 && unichar <= 0xdfff)
+                               report++;
+                       if (data->gen == -1)
+                               report++;
+                       if (data->gen != LEAF_GEN(leaf))
+                               report++;
+                       if (LEAF_CCC(leaf) == DECOMPOSE) {
+                               if (HANGUL_SYLLABLE(data->code)) {
+                                       if (data->utf8nfkdi[0] != HANGUL)
+                                               report++;
+                               } else if (nocf) {
+                                       if (!data->utf8nfkdi) {
+                                               report++;
+                                       } else if (strcmp(data->utf8nfkdi,
+                                                         LEAF_STR(leaf))) {
+                                               report++;
+                                       }
+                               } else {
+                                       if (!data->utf8nfkdicf &&
+                                           !data->utf8nfkdi) {
+                                               report++;
+                                       } else if (data->utf8nfkdicf) {
+                                               if (strcmp(data->utf8nfkdicf,
+                                                          LEAF_STR(leaf)))
+                                                       report++;
+                                       } else if (strcmp(data->utf8nfkdi,
+                                                         LEAF_STR(leaf))) {
+                                               report++;
+                                       }
+                               }
+                       } else if (data->ccc != LEAF_CCC(leaf)) {
+                               report++;
+                       }
+               }
+               if (report) {
+                       printf("%X code %X gen %d ccc %d"
+                               " nfkdi -> \"%s\"",
+                               unichar, data->code, data->gen,
+                               data->ccc,
+                               data->utf8nfkdi);
+                       if (leaf) {
+                               printf(" gen %d ccc %d"
+                                       " nfkdi -> \"%s\"",
+                                       LEAF_GEN(leaf),
+                                       LEAF_CCC(leaf),
+                                       LEAF_CCC(leaf) == DECOMPOSE ?
+                                               LEAF_STR(leaf) : "");
+                       }
+                       printf("\n");
+               }
+       }
+}
+
+static void trees_verify(void)
+{
+       int i;
+
+       for (i = 0; i != trees_count; i++)
+               verify(&trees[i]);
+}
+
+/* ------------------------------------------------------------------ */
+
+static void help(void)
+{
+       printf("Usage: %s [options]\n", argv0);
+       printf("\n");
+       printf("This program creates an a data trie used for parsing and\n");
+       printf("normalization of UTF-8 strings. The trie is derived from\n");
+       printf("a set of input files from the Unicode character database\n");
+       printf("found at: http://www.unicode.org/Public/UCD/latest/ucd/\n");
+       printf("\n");
+       printf("The generated tree supports two normalization forms:\n");
+       printf("\n");
+       printf("\tnfkdi:\n");
+       printf("\t- Apply unicode normalization form NFKD.\n");
+       printf("\t- Remove any Default_Ignorable_Code_Point.\n");
+       printf("\n");
+       printf("\tnfkdicf:\n");
+       printf("\t- Apply unicode normalization form NFKD.\n");
+       printf("\t- Remove any Default_Ignorable_Code_Point.\n");
+       printf("\t- Apply a full casefold (C + F).\n");
+       printf("\n");
+       printf("These forms were chosen as being most useful when dealing\n");
+       printf("with file names: NFKD catches most cases where characters\n");
+       printf("should be considered equivalent. The ignorables are mostly\n");
+       printf("invisible, making names hard to type.\n");
+       printf("\n");
+       printf("The options to specify the files to be used are listed\n");
+       printf("below with their default values, which are the names used\n");
+       printf("by version 11.0.0 of the Unicode Character Database.\n");
+       printf("\n");
+       printf("The input files:\n");
+       printf("\t-a %s\n", AGE_NAME);
+       printf("\t-c %s\n", CCC_NAME);
+       printf("\t-p %s\n", PROP_NAME);
+       printf("\t-d %s\n", DATA_NAME);
+       printf("\t-f %s\n", FOLD_NAME);
+       printf("\t-n %s\n", NORM_NAME);
+       printf("\n");
+       printf("Additionally, the generated tables are tested using:\n");
+       printf("\t-t %s\n", TEST_NAME);
+       printf("\n");
+       printf("Finally, the output file:\n");
+       printf("\t-o %s\n", UTF8_NAME);
+       printf("\n");
+}
+
+static void usage(void)
+{
+       help();
+       exit(1);
+}
+
+static void open_fail(const char *name, int error)
+{
+       printf("Error %d opening %s: %s\n", error, name, strerror(error));
+       exit(1);
+}
+
+static void file_fail(const char *filename)
+{
+       printf("Error parsing %s\n", filename);
+       exit(1);
+}
+
+static void line_fail(const char *filename, const char *line)
+{
+       printf("Error parsing %s:%s\n", filename, line);
+       exit(1);
+}
+
+/* ------------------------------------------------------------------ */
+
+static void print_utf32(unsigned int *utf32str)
+{
+       int     i;
+
+       for (i = 0; utf32str[i]; i++)
+               printf(" %X", utf32str[i]);
+}
+
+static void print_utf32nfkdi(unsigned int unichar)
+{
+       printf(" %X ->", unichar);
+       print_utf32(unicode_data[unichar].utf32nfkdi);
+       printf("\n");
+}
+
+static void print_utf32nfkdicf(unsigned int unichar)
+{
+       printf(" %X ->", unichar);
+       print_utf32(unicode_data[unichar].utf32nfkdicf);
+       printf("\n");
+}
+
+/* ------------------------------------------------------------------ */
+
+static void age_init(void)
+{
+       FILE *file;
+       unsigned int first;
+       unsigned int last;
+       unsigned int unichar;
+       unsigned int major;
+       unsigned int minor;
+       unsigned int revision;
+       int gen;
+       int count;
+       int ret;
+
+       if (verbose > 0)
+               printf("Parsing %s\n", age_name);
+
+       file = fopen(age_name, "r");
+       if (!file)
+               open_fail(age_name, errno);
+       count = 0;
+
+       gen = 0;
+       while (fgets(line, LINESIZE, file)) {
+               ret = sscanf(line, "# Age=V%d_%d_%d",
+                               &major, &minor, &revision);
+               if (ret == 3) {
+                       ages_count++;
+                       if (verbose > 1)
+                               printf(" Age V%d_%d_%d\n",
+                                       major, minor, revision);
+                       if (!age_valid(major, minor, revision))
+                               line_fail(age_name, line);
+                       continue;
+               }
+               ret = sscanf(line, "# Age=V%d_%d", &major, &minor);
+               if (ret == 2) {
+                       ages_count++;
+                       if (verbose > 1)
+                               printf(" Age V%d_%d\n", major, minor);
+                       if (!age_valid(major, minor, 0))
+                               line_fail(age_name, line);
+                       continue;
+               }
+       }
+
+       /* We must have found something above. */
+       if (verbose > 1)
+               printf("%d age entries\n", ages_count);
+       if (ages_count == 0 || ages_count > MAXGEN)
+               file_fail(age_name);
+
+       /* There is a 0 entry. */
+       ages_count++;
+       ages = calloc(ages_count + 1, sizeof(*ages));
+       /* And a guard entry. */
+       ages[ages_count] = (unsigned int)-1;
+
+       rewind(file);
+       count = 0;
+       gen = 0;
+       while (fgets(line, LINESIZE, file)) {
+               ret = sscanf(line, "# Age=V%d_%d_%d",
+                               &major, &minor, &revision);
+               if (ret == 3) {
+                       ages[++gen] =
+                               UNICODE_AGE(major, minor, revision);
+                       if (verbose > 1)
+                               printf(" Age V%d_%d_%d = gen %d\n",
+                                       major, minor, revision, gen);
+                       if (!age_valid(major, minor, revision))
+                               line_fail(age_name, line);
+                       continue;
+               }
+               ret = sscanf(line, "# Age=V%d_%d", &major, &minor);
+               if (ret == 2) {
+                       ages[++gen] = UNICODE_AGE(major, minor, 0);
+                       if (verbose > 1)
+                               printf(" Age V%d_%d = %d\n",
+                                       major, minor, gen);
+                       if (!age_valid(major, minor, 0))
+                               line_fail(age_name, line);
+                       continue;
+               }
+               ret = sscanf(line, "%X..%X ; %d.%d #",
+                            &first, &last, &major, &minor);
+               if (ret == 4) {
+                       for (unichar = first; unichar <= last; unichar++)
+                               unicode_data[unichar].gen = gen;
+                       count += 1 + last - first;
+                       if (verbose > 1)
+                               printf("  %X..%X gen %d\n", first, last, gen);
+                       if (!utf32valid(first) || !utf32valid(last))
+                               line_fail(age_name, line);
+                       continue;
+               }
+               ret = sscanf(line, "%X ; %d.%d #", &unichar, &major, &minor);
+               if (ret == 3) {
+                       unicode_data[unichar].gen = gen;
+                       count++;
+                       if (verbose > 1)
+                               printf("  %X gen %d\n", unichar, gen);
+                       if (!utf32valid(unichar))
+                               line_fail(age_name, line);
+                       continue;
+               }
+       }
+       unicode_maxage = ages[gen];
+       fclose(file);
+
+       /* Nix surrogate block */
+       if (verbose > 1)
+               printf(" Removing surrogate block D800..DFFF\n");
+       for (unichar = 0xd800; unichar <= 0xdfff; unichar++)
+               unicode_data[unichar].gen = -1;
+
+       if (verbose > 0)
+               printf("Found %d entries\n", count);
+       if (count == 0)
+               file_fail(age_name);
+}
+
+static void ccc_init(void)
+{
+       FILE *file;
+       unsigned int first;
+       unsigned int last;
+       unsigned int unichar;
+       unsigned int value;
+       int count;
+       int ret;
+
+       if (verbose > 0)
+               printf("Parsing %s\n", ccc_name);
+
+       file = fopen(ccc_name, "r");
+       if (!file)
+               open_fail(ccc_name, errno);
+
+       count = 0;
+       while (fgets(line, LINESIZE, file)) {
+               ret = sscanf(line, "%X..%X ; %d #", &first, &last, &value);
+               if (ret == 3) {
+                       for (unichar = first; unichar <= last; unichar++) {
+                               unicode_data[unichar].ccc = value;
+                                count++;
+                       }
+                       if (verbose > 1)
+                               printf(" %X..%X ccc %d\n", first, last, value);
+                       if (!utf32valid(first) || !utf32valid(last))
+                               line_fail(ccc_name, line);
+                       continue;
+               }
+               ret = sscanf(line, "%X ; %d #", &unichar, &value);
+               if (ret == 2) {
+                       unicode_data[unichar].ccc = value;
+                        count++;
+                       if (verbose > 1)
+                               printf(" %X ccc %d\n", unichar, value);
+                       if (!utf32valid(unichar))
+                               line_fail(ccc_name, line);
+                       continue;
+               }
+       }
+       fclose(file);
+
+       if (verbose > 0)
+               printf("Found %d entries\n", count);
+       if (count == 0)
+               file_fail(ccc_name);
+}
+
+static void nfkdi_init(void)
+{
+       FILE *file;
+       unsigned int unichar;
+       unsigned int mapping[19]; /* Magic - guaranteed not to be exceeded. */
+       char *s;
+       unsigned int *um;
+       int count;
+       int i;
+       int ret;
+
+       if (verbose > 0)
+               printf("Parsing %s\n", data_name);
+       file = fopen(data_name, "r");
+       if (!file)
+               open_fail(data_name, errno);
+
+       count = 0;
+       while (fgets(line, LINESIZE, file)) {
+               ret = sscanf(line, "%X;%*[^;];%*[^;];%*[^;];%*[^;];%[^;];",
+                            &unichar, buf0);
+               if (ret != 2)
+                       continue;
+               if (!utf32valid(unichar))
+                       line_fail(data_name, line);
+
+               s = buf0;
+               /* skip over <tag> */
+               if (*s == '<')
+                       while (*s++ != ' ')
+                               ;
+               /* decode the decomposition into UTF-32 */
+               i = 0;
+               while (*s) {
+                       mapping[i] = strtoul(s, &s, 16);
+                       if (!utf32valid(mapping[i]))
+                               line_fail(data_name, line);
+                       i++;
+               }
+               mapping[i++] = 0;
+
+               um = malloc(i * sizeof(unsigned int));
+               memcpy(um, mapping, i * sizeof(unsigned int));
+               unicode_data[unichar].utf32nfkdi = um;
+
+               if (verbose > 1)
+                       print_utf32nfkdi(unichar);
+               count++;
+       }
+       fclose(file);
+       if (verbose > 0)
+               printf("Found %d entries\n", count);
+       if (count == 0)
+               file_fail(data_name);
+}
+
+static void nfkdicf_init(void)
+{
+       FILE *file;
+       unsigned int unichar;
+       unsigned int mapping[19]; /* Magic - guaranteed not to be exceeded. */
+       char status;
+       char *s;
+       unsigned int *um;
+       int i;
+       int count;
+       int ret;
+
+       if (verbose > 0)
+               printf("Parsing %s\n", fold_name);
+       file = fopen(fold_name, "r");
+       if (!file)
+               open_fail(fold_name, errno);
+
+       count = 0;
+       while (fgets(line, LINESIZE, file)) {
+               ret = sscanf(line, "%X; %c; %[^;];", &unichar, &status, buf0);
+               if (ret != 3)
+                       continue;
+               if (!utf32valid(unichar))
+                       line_fail(fold_name, line);
+               /* Use the C+F casefold. */
+               if (status != 'C' && status != 'F')
+                       continue;
+               s = buf0;
+               if (*s == '<')
+                       while (*s++ != ' ')
+                               ;
+               i = 0;
+               while (*s) {
+                       mapping[i] = strtoul(s, &s, 16);
+                       if (!utf32valid(mapping[i]))
+                               line_fail(fold_name, line);
+                       i++;
+               }
+               mapping[i++] = 0;
+
+               um = malloc(i * sizeof(unsigned int));
+               memcpy(um, mapping, i * sizeof(unsigned int));
+               unicode_data[unichar].utf32nfkdicf = um;
+
+               if (verbose > 1)
+                       print_utf32nfkdicf(unichar);
+               count++;
+       }
+       fclose(file);
+       if (verbose > 0)
+               printf("Found %d entries\n", count);
+       if (count == 0)
+               file_fail(fold_name);
+}
+
+static void ignore_init(void)
+{
+       FILE *file;
+       unsigned int unichar;
+       unsigned int first;
+       unsigned int last;
+       unsigned int *um;
+       int count;
+       int ret;
+
+       if (verbose > 0)
+               printf("Parsing %s\n", prop_name);
+       file = fopen(prop_name, "r");
+       if (!file)
+               open_fail(prop_name, errno);
+       assert(file);
+       count = 0;
+       while (fgets(line, LINESIZE, file)) {
+               ret = sscanf(line, "%X..%X ; %s # ", &first, &last, buf0);
+               if (ret == 3) {
+                       if (strcmp(buf0, "Default_Ignorable_Code_Point"))
+                               continue;
+                       if (!utf32valid(first) || !utf32valid(last))
+                               line_fail(prop_name, line);
+                       for (unichar = first; unichar <= last; unichar++) {
+                               free(unicode_data[unichar].utf32nfkdi);
+                               um = malloc(sizeof(unsigned int));
+                               *um = 0;
+                               unicode_data[unichar].utf32nfkdi = um;
+                               free(unicode_data[unichar].utf32nfkdicf);
+                               um = malloc(sizeof(unsigned int));
+                               *um = 0;
+                               unicode_data[unichar].utf32nfkdicf = um;
+                               count++;
+                       }
+                       if (verbose > 1)
+                               printf(" %X..%X Default_Ignorable_Code_Point\n",
+                                       first, last);
+                       continue;
+               }
+               ret = sscanf(line, "%X ; %s # ", &unichar, buf0);
+               if (ret == 2) {
+                       if (strcmp(buf0, "Default_Ignorable_Code_Point"))
+                               continue;
+                       if (!utf32valid(unichar))
+                               line_fail(prop_name, line);
+                       free(unicode_data[unichar].utf32nfkdi);
+                       um = malloc(sizeof(unsigned int));
+                       *um = 0;
+                       unicode_data[unichar].utf32nfkdi = um;
+                       free(unicode_data[unichar].utf32nfkdicf);
+                       um = malloc(sizeof(unsigned int));
+                       *um = 0;
+                       unicode_data[unichar].utf32nfkdicf = um;
+                       if (verbose > 1)
+                               printf(" %X Default_Ignorable_Code_Point\n",
+                                       unichar);
+                       count++;
+                       continue;
+               }
+       }
+       fclose(file);
+
+       if (verbose > 0)
+               printf("Found %d entries\n", count);
+       if (count == 0)
+               file_fail(prop_name);
+}
+
+static void corrections_init(void)
+{
+       FILE *file;
+       unsigned int unichar;
+       unsigned int major;
+       unsigned int minor;
+       unsigned int revision;
+       unsigned int age;
+       unsigned int *um;
+       unsigned int mapping[19]; /* Magic - guaranteed not to be exceeded. */
+       char *s;
+       int i;
+       int count;
+       int ret;
+
+       if (verbose > 0)
+               printf("Parsing %s\n", norm_name);
+       file = fopen(norm_name, "r");
+       if (!file)
+               open_fail(norm_name, errno);
+
+       count = 0;
+       while (fgets(line, LINESIZE, file)) {
+               ret = sscanf(line, "%X;%[^;];%[^;];%d.%d.%d #",
+                               &unichar, buf0, buf1,
+                               &major, &minor, &revision);
+               if (ret != 6)
+                       continue;
+               if (!utf32valid(unichar) || !age_valid(major, minor, revision))
+                       line_fail(norm_name, line);
+               count++;
+       }
+       corrections = calloc(count, sizeof(struct unicode_data));
+       corrections_count = count;
+       rewind(file);
+
+       count = 0;
+       while (fgets(line, LINESIZE, file)) {
+               ret = sscanf(line, "%X;%[^;];%[^;];%d.%d.%d #",
+                               &unichar, buf0, buf1,
+                               &major, &minor, &revision);
+               if (ret != 6)
+                       continue;
+               if (!utf32valid(unichar) || !age_valid(major, minor, revision))
+                       line_fail(norm_name, line);
+               corrections[count] = unicode_data[unichar];
+               assert(corrections[count].code == unichar);
+               age = UNICODE_AGE(major, minor, revision);
+               corrections[count].correction = age;
+
+               i = 0;
+               s = buf0;
+               while (*s) {
+                       mapping[i] = strtoul(s, &s, 16);
+                       if (!utf32valid(mapping[i]))
+                               line_fail(norm_name, line);
+                       i++;
+               }
+               mapping[i++] = 0;
+
+               um = malloc(i * sizeof(unsigned int));
+               memcpy(um, mapping, i * sizeof(unsigned int));
+               corrections[count].utf32nfkdi = um;
+
+               if (verbose > 1)
+                       printf(" %X -> %s -> %s V%d_%d_%d\n",
+                               unichar, buf0, buf1, major, minor, revision);
+               count++;
+       }
+       fclose(file);
+
+       if (verbose > 0)
+               printf("Found %d entries\n", count);
+       if (count == 0)
+               file_fail(norm_name);
+}
+
+/* ------------------------------------------------------------------ */
+
+/*
+ * Hangul decomposition (algorithm from Section 3.12 of Unicode 6.3.0)
+ *
+ * AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+ * D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+ *
+ * SBase = 0xAC00
+ * LBase = 0x1100
+ * VBase = 0x1161
+ * TBase = 0x11A7
+ * LCount = 19
+ * VCount = 21
+ * TCount = 28
+ * NCount = 588 (VCount * TCount)
+ * SCount = 11172 (LCount * NCount)
+ *
+ * Decomposition:
+ *   SIndex = s - SBase
+ *
+ * LV (Canonical/Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *
+ * LVT (Canonical)
+ *   LVIndex = (SIndex / TCount) * TCount
+ *   TIndex = (Sindex % TCount)
+ *   LVPart = SBase + LVIndex
+ *   TPart = TBase + TIndex
+ *
+ * LVT (Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   TIndex = (Sindex % TCount)
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *   if (TIndex == 0) {
+ *          d = <LPart, VPart>
+ *   } else {
+ *          TPart = TBase + TIndex
+ *          d = <LPart, VPart, TPart>
+ *   }
+ *
+ */
+
+static void hangul_decompose(void)
+{
+       unsigned int sb = 0xAC00;
+       unsigned int lb = 0x1100;
+       unsigned int vb = 0x1161;
+       unsigned int tb = 0x11a7;
+       /* unsigned int lc = 19; */
+       unsigned int vc = 21;
+       unsigned int tc = 28;
+       unsigned int nc = (vc * tc);
+       /* unsigned int sc = (lc * nc); */
+       unsigned int unichar;
+       unsigned int mapping[4];
+       unsigned int *um;
+        int count;
+       int i;
+
+       if (verbose > 0)
+               printf("Decomposing hangul\n");
+       /* Hangul */
+       count = 0;
+       for (unichar = 0xAC00; unichar <= 0xD7A3; unichar++) {
+               unsigned int si = unichar - sb;
+               unsigned int li = si / nc;
+               unsigned int vi = (si % nc) / tc;
+               unsigned int ti = si % tc;
+
+               i = 0;
+               mapping[i++] = lb + li;
+               mapping[i++] = vb + vi;
+               if (ti)
+                       mapping[i++] = tb + ti;
+               mapping[i++] = 0;
+
+               assert(!unicode_data[unichar].utf32nfkdi);
+               um = malloc(i * sizeof(unsigned int));
+               memcpy(um, mapping, i * sizeof(unsigned int));
+               unicode_data[unichar].utf32nfkdi = um;
+
+               assert(!unicode_data[unichar].utf32nfkdicf);
+               um = malloc(i * sizeof(unsigned int));
+               memcpy(um, mapping, i * sizeof(unsigned int));
+               unicode_data[unichar].utf32nfkdicf = um;
+
+               /*
+                * Add a cookie as a reminder that the hangul syllable
+                * decompositions must not be stored in the generated
+                * trie.
+                */
+               unicode_data[unichar].utf8nfkdi = malloc(2);
+               unicode_data[unichar].utf8nfkdi[0] = HANGUL;
+               unicode_data[unichar].utf8nfkdi[1] = '\0';
+
+               if (verbose > 1)
+                       print_utf32nfkdi(unichar);
+
+               count++;
+       }
+       if (verbose > 0)
+               printf("Created %d entries\n", count);
+}
+
+static void nfkdi_decompose(void)
+{
+       unsigned int unichar;
+       unsigned int mapping[19]; /* Magic - guaranteed not to be exceeded. */
+       unsigned int *um;
+       unsigned int *dc;
+       int count;
+       int i;
+       int j;
+       int ret;
+
+       if (verbose > 0)
+               printf("Decomposing nfkdi\n");
+
+       count = 0;
+       for (unichar = 0; unichar != 0x110000; unichar++) {
+               if (!unicode_data[unichar].utf32nfkdi)
+                       continue;
+               for (;;) {
+                       ret = 1;
+                       i = 0;
+                       um = unicode_data[unichar].utf32nfkdi;
+                       while (*um) {
+                               dc = unicode_data[*um].utf32nfkdi;
+                               if (dc) {
+                                       for (j = 0; dc[j]; j++)
+                                               mapping[i++] = dc[j];
+                                       ret = 0;
+                               } else {
+                                       mapping[i++] = *um;
+                               }
+                               um++;
+                       }
+                       mapping[i++] = 0;
+                       if (ret)
+                               break;
+                       free(unicode_data[unichar].utf32nfkdi);
+                       um = malloc(i * sizeof(unsigned int));
+                       memcpy(um, mapping, i * sizeof(unsigned int));
+                       unicode_data[unichar].utf32nfkdi = um;
+               }
+               /* Add this decomposition to nfkdicf if there is no entry. */
+               if (!unicode_data[unichar].utf32nfkdicf) {
+                       um = malloc(i * sizeof(unsigned int));
+                       memcpy(um, mapping, i * sizeof(unsigned int));
+                       unicode_data[unichar].utf32nfkdicf = um;
+               }
+               if (verbose > 1)
+                       print_utf32nfkdi(unichar);
+               count++;
+       }
+       if (verbose > 0)
+               printf("Processed %d entries\n", count);
+}
+
+static void nfkdicf_decompose(void)
+{
+       unsigned int unichar;
+       unsigned int mapping[19]; /* Magic - guaranteed not to be exceeded. */
+       unsigned int *um;
+       unsigned int *dc;
+       int count;
+       int i;
+       int j;
+       int ret;
+
+       if (verbose > 0)
+               printf("Decomposing nfkdicf\n");
+       count = 0;
+       for (unichar = 0; unichar != 0x110000; unichar++) {
+               if (!unicode_data[unichar].utf32nfkdicf)
+                       continue;
+               for (;;) {
+                       ret = 1;
+                       i = 0;
+                       um = unicode_data[unichar].utf32nfkdicf;
+                       while (*um) {
+                               dc = unicode_data[*um].utf32nfkdicf;
+                               if (dc) {
+                                       for (j = 0; dc[j]; j++)
+                                               mapping[i++] = dc[j];
+                                       ret = 0;
+                               } else {
+                                       mapping[i++] = *um;
+                               }
+                               um++;
+                       }
+                       mapping[i++] = 0;
+                       if (ret)
+                               break;
+                       free(unicode_data[unichar].utf32nfkdicf);
+                       um = malloc(i * sizeof(unsigned int));
+                       memcpy(um, mapping, i * sizeof(unsigned int));
+                       unicode_data[unichar].utf32nfkdicf = um;
+               }
+               if (verbose > 1)
+                       print_utf32nfkdicf(unichar);
+               count++;
+       }
+       if (verbose > 0)
+               printf("Processed %d entries\n", count);
+}
+
+/* ------------------------------------------------------------------ */
+
+int utf8agemax(struct tree *, const char *);
+int utf8nagemax(struct tree *, const char *, size_t);
+int utf8agemin(struct tree *, const char *);
+int utf8nagemin(struct tree *, const char *, size_t);
+ssize_t utf8len(struct tree *, const char *);
+ssize_t utf8nlen(struct tree *, const char *, size_t);
+struct utf8cursor;
+int utf8cursor(struct utf8cursor *, struct tree *, const char *);
+int utf8ncursor(struct utf8cursor *, struct tree *, const char *, size_t);
+int utf8byte(struct utf8cursor *);
+
+/*
+ * Hangul decomposition (algorithm from Section 3.12 of Unicode 6.3.0)
+ *
+ * AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+ * D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+ *
+ * SBase = 0xAC00
+ * LBase = 0x1100
+ * VBase = 0x1161
+ * TBase = 0x11A7
+ * LCount = 19
+ * VCount = 21
+ * TCount = 28
+ * NCount = 588 (VCount * TCount)
+ * SCount = 11172 (LCount * NCount)
+ *
+ * Decomposition:
+ *   SIndex = s - SBase
+ *
+ * LV (Canonical/Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *
+ * LVT (Canonical)
+ *   LVIndex = (SIndex / TCount) * TCount
+ *   TIndex = (Sindex % TCount)
+ *   LVPart = SBase + LVIndex
+ *   TPart = TBase + TIndex
+ *
+ * LVT (Full)
+ *   LIndex = SIndex / NCount
+ *   VIndex = (Sindex % NCount) / TCount
+ *   TIndex = (Sindex % TCount)
+ *   LPart = LBase + LIndex
+ *   VPart = VBase + VIndex
+ *   if (TIndex == 0) {
+ *          d = <LPart, VPart>
+ *   } else {
+ *          TPart = TBase + TIndex
+ *          d = <LPart, VPart, TPart>
+ *   }
+ */
+
+/* Constants */
+#define SB     (0xAC00)
+#define LB     (0x1100)
+#define VB     (0x1161)
+#define TB     (0x11A7)
+#define LC     (19)
+#define VC     (21)
+#define TC     (28)
+#define NC     (VC * TC)
+#define SC     (LC * NC)
+
+/* Algorithmic decomposition of hangul syllable. */
+static utf8leaf_t *utf8hangul(const char *str, unsigned char *hangul)
+{
+       unsigned int    si;
+       unsigned int    li;
+       unsigned int    vi;
+       unsigned int    ti;
+       unsigned char   *h;
+
+       /* Calculate the SI, LI, VI, and TI values. */
+       si = utf8decode(str) - SB;
+       li = si / NC;
+       vi = (si % NC) / TC;
+       ti = si % TC;
+
+       /* Fill in base of leaf. */
+       h = hangul;
+       LEAF_GEN(h) = 2;
+       LEAF_CCC(h) = DECOMPOSE;
+       h += 2;
+
+       /* Add LPart, a 3-byte UTF-8 sequence. */
+       h += utf8encode((char *)h, li + LB);
+
+       /* Add VPart, a 3-byte UTF-8 sequence. */
+       h += utf8encode((char *)h, vi + VB);
+
+       /* Add TPart if required, also a 3-byte UTF-8 sequence. */
+       if (ti)
+               h += utf8encode((char *)h, ti + TB);
+
+       /* Terminate string. */
+       h[0] = '\0';
+
+       return hangul;
+}
+
+/*
+ * Use trie to scan s, touching at most len bytes.
+ * Returns the leaf if one exists, NULL otherwise.
+ *
+ * A non-NULL return guarantees that the UTF-8 sequence starting at s
+ * is well-formed and corresponds to a known unicode code point.  The
+ * shorthand for this will be "is valid UTF-8 unicode".
+ */
+static utf8leaf_t *utf8nlookup(struct tree *tree, unsigned char *hangul,
+                              const char *s, size_t len)
+{
+       utf8trie_t      *trie = utf8data + tree->index;
+       int             offlen;
+       int             offset;
+       int             mask;
+       int             node;
+
+       if (!tree)
+               return NULL;
+       if (len == 0)
+               return NULL;
+       node = 1;
+       while (node) {
+               offlen = (*trie & OFFLEN) >> OFFLEN_SHIFT;
+               if (*trie & NEXTBYTE) {
+                       if (--len == 0)
+                               return NULL;
+                       s++;
+               }
+               mask = 1 << (*trie & BITNUM);
+               if (*s & mask) {
+                       /* Right leg */
+                       if (offlen) {
+                               /* Right node at offset of trie */
+                               node = (*trie & RIGHTNODE);
+                               offset = trie[offlen];
+                               while (--offlen) {
+                                       offset <<= 8;
+                                       offset |= trie[offlen];
+                               }
+                               trie += offset;
+                       } else if (*trie & RIGHTPATH) {
+                               /* Right node after this node */
+                               node = (*trie & TRIENODE);
+                               trie++;
+                       } else {
+                               /* No right node. */
+                               return NULL;
+                       }
+               } else {
+                       /* Left leg */
+                       if (offlen) {
+                               /* Left node after this node. */
+                               node = (*trie & LEFTNODE);
+                               trie += offlen + 1;
+                       } else if (*trie & RIGHTPATH) {
+                               /* No left node. */
+                               return NULL;
+                       } else {
+                               /* Left node after this node */
+                               node = (*trie & TRIENODE);
+                               trie++;
+                       }
+               }
+       }
+       /*
+        * Hangul decomposition is done algorithmically. These are the
+        * codepoints >= 0xAC00 and <= 0xD7A3. Their UTF-8 encoding is
+        * always 3 bytes long, so s has been advanced twice, and the
+        * start of the sequence is at s-2.
+        */
+       if (LEAF_CCC(trie) == DECOMPOSE && LEAF_STR(trie)[0] == HANGUL)
+               trie = utf8hangul(s - 2, hangul);
+       return trie;
+}
+
+/*
+ * Use trie to scan s.
+ * Returns the leaf if one exists, NULL otherwise.
+ *
+ * Forwards to trie_nlookup().
+ */
+static utf8leaf_t *utf8lookup(struct tree *tree, unsigned char *hangul,
+                             const char *s)
+{
+       return utf8nlookup(tree, hangul, s, (size_t)-1);
+}
+
+/*
+ * Return the number of bytes used by the current UTF-8 sequence.
+ * Assumes the input points to the first byte of a valid UTF-8
+ * sequence.
+ */
+static inline int utf8clen(const char *s)
+{
+       unsigned char c = *s;
+       return 1 + (c >= 0xC0) + (c >= 0xE0) + (c >= 0xF0);
+}
+
+/*
+ * Maximum age of any character in s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ * Return 0 if only non-assigned code points are used.
+ */
+int utf8agemax(struct tree *tree, const char *s)
+{
+       utf8leaf_t      *leaf;
+       int             age = 0;
+       int             leaf_age;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!tree)
+               return -1;
+
+       while (*s) {
+               leaf = utf8lookup(tree, hangul, s);
+               if (!leaf)
+                       return -1;
+               leaf_age = ages[LEAF_GEN(leaf)];
+               if (leaf_age <= tree->maxage && leaf_age > age)
+                       age = leaf_age;
+               s += utf8clen(s);
+       }
+       return age;
+}
+
+/*
+ * Minimum age of any character in s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ * Return 0 if non-assigned code points are used.
+ */
+int utf8agemin(struct tree *tree, const char *s)
+{
+       utf8leaf_t      *leaf;
+       int             age;
+       int             leaf_age;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!tree)
+               return -1;
+       age = tree->maxage;
+       while (*s) {
+               leaf = utf8lookup(tree, hangul, s);
+               if (!leaf)
+                       return -1;
+               leaf_age = ages[LEAF_GEN(leaf)];
+               if (leaf_age <= tree->maxage && leaf_age < age)
+                       age = leaf_age;
+               s += utf8clen(s);
+       }
+       return age;
+}
+
+/*
+ * Maximum age of any character in s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+int utf8nagemax(struct tree *tree, const char *s, size_t len)
+{
+       utf8leaf_t      *leaf;
+       int             age = 0;
+       int             leaf_age;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!tree)
+               return -1;
+
+        while (len && *s) {
+               leaf = utf8nlookup(tree, hangul, s, len);
+               if (!leaf)
+                       return -1;
+               leaf_age = ages[LEAF_GEN(leaf)];
+               if (leaf_age <= tree->maxage && leaf_age > age)
+                       age = leaf_age;
+               len -= utf8clen(s);
+               s += utf8clen(s);
+       }
+       return age;
+}
+
+/*
+ * Maximum age of any character in s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+int utf8nagemin(struct tree *tree, const char *s, size_t len)
+{
+       utf8leaf_t      *leaf;
+       int             leaf_age;
+       int             age;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!tree)
+               return -1;
+       age = tree->maxage;
+        while (len && *s) {
+               leaf = utf8nlookup(tree, hangul, s, len);
+               if (!leaf)
+                       return -1;
+               leaf_age = ages[LEAF_GEN(leaf)];
+               if (leaf_age <= tree->maxage && leaf_age < age)
+                       age = leaf_age;
+               len -= utf8clen(s);
+               s += utf8clen(s);
+       }
+       return age;
+}
+
+/*
+ * Length of the normalization of s.
+ * Return -1 if s is not valid UTF-8 unicode.
+ *
+ * A string of Default_Ignorable_Code_Point has length 0.
+ */
+ssize_t utf8len(struct tree *tree, const char *s)
+{
+       utf8leaf_t      *leaf;
+       size_t          ret = 0;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!tree)
+               return -1;
+       while (*s) {
+               leaf = utf8lookup(tree, hangul, s);
+               if (!leaf)
+                       return -1;
+               if (ages[LEAF_GEN(leaf)] > tree->maxage)
+                       ret += utf8clen(s);
+               else if (LEAF_CCC(leaf) == DECOMPOSE)
+                       ret += strlen(LEAF_STR(leaf));
+               else
+                       ret += utf8clen(s);
+               s += utf8clen(s);
+       }
+       return ret;
+}
+
+/*
+ * Length of the normalization of s, touch at most len bytes.
+ * Return -1 if s is not valid UTF-8 unicode.
+ */
+ssize_t utf8nlen(struct tree *tree, const char *s, size_t len)
+{
+       utf8leaf_t      *leaf;
+       size_t          ret = 0;
+       unsigned char   hangul[UTF8HANGULLEAF];
+
+       if (!tree)
+               return -1;
+       while (len && *s) {
+               leaf = utf8nlookup(tree, hangul, s, len);
+               if (!leaf)
+                       return -1;
+               if (ages[LEAF_GEN(leaf)] > tree->maxage)
+                       ret += utf8clen(s);
+               else if (LEAF_CCC(leaf) == DECOMPOSE)
+                       ret += strlen(LEAF_STR(leaf));
+               else
+                       ret += utf8clen(s);
+               len -= utf8clen(s);
+               s += utf8clen(s);
+       }
+       return ret;
+}
+
+/*
+ * Cursor structure used by the normalizer.
+ */
+struct utf8cursor {
+       struct tree     *tree;
+       const char      *s;
+       const char      *p;
+       const char      *ss;
+       const char      *sp;
+       unsigned int    len;
+       unsigned int    slen;
+       short int       ccc;
+       short int       nccc;
+       unsigned int    unichar;
+       unsigned char   hangul[UTF8HANGULLEAF];
+};
+
+/*
+ * Set up an utf8cursor for use by utf8byte().
+ *
+ *   s      : string.
+ *   len    : length of s.
+ *   u8c    : pointer to cursor.
+ *   trie   : utf8trie_t to use for normalization.
+ *
+ * Returns -1 on error, 0 on success.
+ */
+int utf8ncursor(struct utf8cursor *u8c, struct tree *tree, const char *s,
+               size_t len)
+{
+       if (!tree)
+               return -1;
+       if (!s)
+               return -1;
+       u8c->tree = tree;
+       u8c->s = s;
+       u8c->p = NULL;
+       u8c->ss = NULL;
+       u8c->sp = NULL;
+       u8c->len = len;
+       u8c->slen = 0;
+       u8c->ccc = STOPPER;
+       u8c->nccc = STOPPER;
+       u8c->unichar = 0;
+       /* Check we didn't clobber the maximum length. */
+       if (u8c->len != len)
+               return -1;
+       /* The first byte of s may not be an utf8 continuation. */
+       if (len > 0 && (*s & 0xC0) == 0x80)
+               return -1;
+       return 0;
+}
+
+/*
+ * Set up an utf8cursor for use by utf8byte().
+ *
+ *   s      : NUL-terminated string.
+ *   u8c    : pointer to cursor.
+ *   trie   : utf8trie_t to use for normalization.
+ *
+ * Returns -1 on error, 0 on success.
+ */
+int utf8cursor(struct utf8cursor *u8c, struct tree *tree, const char *s)
+{
+       return utf8ncursor(u8c, tree, s, (unsigned int)-1);
+}
+
+/*
+ * Get one byte from the normalized form of the string described by u8c.
+ *
+ * Returns the byte cast to an unsigned char on succes, and -1 on failure.
+ *
+ * The cursor keeps track of the location in the string in u8c->s.
+ * When a character is decomposed, the current location is stored in
+ * u8c->p, and u8c->s is set to the start of the decomposition. Note
+ * that bytes from a decomposition do not count against u8c->len.
+ *
+ * Characters are emitted if they match the current CCC in u8c->ccc.
+ * Hitting end-of-string while u8c->ccc == STOPPER means we're done,
+ * and the function returns 0 in that case.
+ *
+ * Sorting by CCC is done by repeatedly scanning the string.  The
+ * values of u8c->s and u8c->p are stored in u8c->ss and u8c->sp at
+ * the start of the scan.  The first pass finds the lowest CCC to be
+ * emitted and stores it in u8c->nccc, the second pass emits the
+ * characters with this CCC and finds the next lowest CCC. This limits
+ * the number of passes to 1 + the number of different CCCs in the
+ * sequence being scanned.
+ *
+ * Therefore:
+ *  u8c->p  != NULL -> a decomposition is being scanned.
+ *  u8c->ss != NULL -> this is a repeating scan.
+ *  u8c->ccc == -1  -> this is the first scan of a repeating scan.
+ */
+int utf8byte(struct utf8cursor *u8c)
+{
+       utf8leaf_t *leaf;
+       int ccc;
+
+       for (;;) {
+               /* Check for the end of a decomposed character. */
+               if (u8c->p && *u8c->s == '\0') {
+                       u8c->s = u8c->p;
+                       u8c->p = NULL;
+               }
+
+               /* Check for end-of-string. */
+               if (!u8c->p && (u8c->len == 0 || *u8c->s == '\0')) {
+                       /* There is no next byte. */
+                       if (u8c->ccc == STOPPER)
+                               return 0;
+                       /* End-of-string during a scan counts as a stopper. */
+                       ccc = STOPPER;
+                       goto ccc_mismatch;
+               } else if ((*u8c->s & 0xC0) == 0x80) {
+                       /* This is a continuation of the current character. */
+                       if (!u8c->p)
+                               u8c->len--;
+                       return (unsigned char)*u8c->s++;
+               }
+
+               /* Look up the data for the current character. */
+               if (u8c->p) {
+                       leaf = utf8lookup(u8c->tree, u8c->hangul, u8c->s);
+               } else {
+                       leaf = utf8nlookup(u8c->tree, u8c->hangul,
+                                          u8c->s, u8c->len);
+               }
+
+               /* No leaf found implies that the input is a binary blob. */
+               if (!leaf)
+                       return -1;
+
+               /* Characters that are too new have CCC 0. */
+               if (ages[LEAF_GEN(leaf)] > u8c->tree->maxage) {
+                       ccc = STOPPER;
+               } else if ((ccc = LEAF_CCC(leaf)) == DECOMPOSE) {
+                       u8c->len -= utf8clen(u8c->s);
+                       u8c->p = u8c->s + utf8clen(u8c->s);
+                       u8c->s = LEAF_STR(leaf);
+                       /* Empty decomposition implies CCC 0. */
+                       if (*u8c->s == '\0') {
+                               if (u8c->ccc == STOPPER)
+                                       continue;
+                               ccc = STOPPER;
+                               goto ccc_mismatch;
+                       }
+                       leaf = utf8lookup(u8c->tree, u8c->hangul, u8c->s);
+                       ccc = LEAF_CCC(leaf);
+               }
+               u8c->unichar = utf8decode(u8c->s);
+
+               /*
+                * If this is not a stopper, then see if it updates
+                * the next canonical class to be emitted.
+                */
+               if (ccc != STOPPER && u8c->ccc < ccc && ccc < u8c->nccc)
+                       u8c->nccc = ccc;
+
+               /*
+                * Return the current byte if this is the current
+                * combining class.
+                */
+               if (ccc == u8c->ccc) {
+                       if (!u8c->p)
+                               u8c->len--;
+                       return (unsigned char)*u8c->s++;
+               }
+
+               /* Current combining class mismatch. */
+       ccc_mismatch:
+               if (u8c->nccc == STOPPER) {
+                       /*
+                        * Scan forward for the first canonical class
+                        * to be emitted.  Save the position from
+                        * which to restart.
+                        */
+                       assert(u8c->ccc == STOPPER);
+                       u8c->ccc = MINCCC - 1;
+                       u8c->nccc = ccc;
+                       u8c->sp = u8c->p;
+                       u8c->ss = u8c->s;
+                       u8c->slen = u8c->len;
+                       if (!u8c->p)
+                               u8c->len -= utf8clen(u8c->s);
+                       u8c->s += utf8clen(u8c->s);
+               } else if (ccc != STOPPER) {
+                       /* Not a stopper, and not the ccc we're emitting. */
+                       if (!u8c->p)
+                               u8c->len -= utf8clen(u8c->s);
+                       u8c->s += utf8clen(u8c->s);
+               } else if (u8c->nccc != MAXCCC + 1) {
+                       /* At a stopper, restart for next ccc. */
+                       u8c->ccc = u8c->nccc;
+                       u8c->nccc = MAXCCC + 1;
+                       u8c->s = u8c->ss;
+                       u8c->p = u8c->sp;
+                       u8c->len = u8c->slen;
+               } else {
+                       /* All done, proceed from here. */
+                       u8c->ccc = STOPPER;
+                       u8c->nccc = STOPPER;
+                       u8c->sp = NULL;
+                       u8c->ss = NULL;
+                       u8c->slen = 0;
+               }
+       }
+}
+
+/* ------------------------------------------------------------------ */
+
+static int normalize_line(struct tree *tree)
+{
+       char *s;
+       char *t;
+       int c;
+       struct utf8cursor u8c;
+
+       /* First test: null-terminated string. */
+       s = buf2;
+       t = buf3;
+       if (utf8cursor(&u8c, tree, s))
+               return -1;
+       while ((c = utf8byte(&u8c)) > 0)
+               if (c != (unsigned char)*t++)
+                       return -1;
+       if (c < 0)
+               return -1;
+       if (*t != 0)
+               return -1;
+
+       /* Second test: length-limited string. */
+       s = buf2;
+       /* Replace NUL with a value that will cause an error if seen. */
+       s[strlen(s) + 1] = -1;
+       t = buf3;
+       if (utf8cursor(&u8c, tree, s))
+               return -1;
+       while ((c = utf8byte(&u8c)) > 0)
+               if (c != (unsigned char)*t++)
+                       return -1;
+       if (c < 0)
+               return -1;
+       if (*t != 0)
+               return -1;
+
+       return 0;
+}
+
+static void normalization_test(void)
+{
+       FILE *file;
+       unsigned int unichar;
+       struct unicode_data *data;
+       char *s;
+       char *t;
+       int ret;
+       int ignorables;
+       int tests = 0;
+       int failures = 0;
+
+       if (verbose > 0)
+               printf("Parsing %s\n", test_name);
+       /* Step one, read data from file. */
+       file = fopen(test_name, "r");
+       if (!file)
+               open_fail(test_name, errno);
+
+       while (fgets(line, LINESIZE, file)) {
+               ret = sscanf(line, "%[^;];%*[^;];%*[^;];%*[^;];%[^;];",
+                            buf0, buf1);
+               if (ret != 2 || *line == '#')
+                       continue;
+               s = buf0;
+               t = buf2;
+               while (*s) {
+                       unichar = strtoul(s, &s, 16);
+                       t += utf8encode(t, unichar);
+               }
+               *t = '\0';
+
+               ignorables = 0;
+               s = buf1;
+               t = buf3;
+               while (*s) {
+                       unichar = strtoul(s, &s, 16);
+                       data = &unicode_data[unichar];
+                       if (data->utf8nfkdi && !*data->utf8nfkdi)
+                               ignorables = 1;
+                       else
+                               t += utf8encode(t, unichar);
+               }
+               *t = '\0';
+
+               tests++;
+               if (normalize_line(nfkdi_tree) < 0) {
+                       printf("Line %s -> %s", buf0, buf1);
+                       if (ignorables)
+                               printf(" (ignorables removed)");
+                       printf(" failure\n");
+                       failures++;
+               }
+       }
+       fclose(file);
+       if (verbose > 0)
+               printf("Ran %d tests with %d failures\n", tests, failures);
+       if (failures)
+               file_fail(test_name);
+}
+
+/* ------------------------------------------------------------------ */
+
+static void write_file(void)
+{
+       FILE *file;
+       int i;
+       int j;
+       int t;
+       int gen;
+
+       if (verbose > 0)
+               printf("Writing %s\n", utf8_name);
+       file = fopen(utf8_name, "w");
+       if (!file)
+               open_fail(utf8_name, errno);
+
+       fprintf(file, "/* This file is generated code, do not edit. */\n");
+       fprintf(file, "#ifndef __INCLUDED_FROM_UTF8NORM_C__\n");
+       fprintf(file, "#error Only nls_utf8-norm.c should include this file.\n");
+       fprintf(file, "#endif\n");
+       fprintf(file, "\n");
+       fprintf(file, "static const unsigned int utf8vers = %#x;\n",
+               unicode_maxage);
+       fprintf(file, "\n");
+       fprintf(file, "static const unsigned int utf8agetab[] = {\n");
+       for (i = 0; i != ages_count; i++)
+               fprintf(file, "\t%#x%s\n", ages[i],
+                       ages[i] == unicode_maxage ? "" : ",");
+       fprintf(file, "};\n");
+       fprintf(file, "\n");
+       fprintf(file, "static const struct utf8data utf8nfkdicfdata[] = {\n");
+       t = 0;
+       for (gen = 0; gen < ages_count; gen++) {
+               fprintf(file, "\t{ %#x, %d }%s\n",
+                       ages[gen], trees[t].index,
+                       ages[gen] == unicode_maxage ? "" : ",");
+               if (trees[t].maxage == ages[gen])
+                       t += 2;
+       }
+       fprintf(file, "};\n");
+       fprintf(file, "\n");
+       fprintf(file, "static const struct utf8data utf8nfkdidata[] = {\n");
+       t = 1;
+       for (gen = 0; gen < ages_count; gen++) {
+               fprintf(file, "\t{ %#x, %d }%s\n",
+                       ages[gen], trees[t].index,
+                       ages[gen] == unicode_maxage ? "" : ",");
+               if (trees[t].maxage == ages[gen])
+                       t += 2;
+       }
+       fprintf(file, "};\n");
+       fprintf(file, "\n");
+       fprintf(file, "static const unsigned char utf8data[%zd] = {\n",
+               utf8data_size);
+       t = 0;
+       for (i = 0; i != utf8data_size; i += 16) {
+               if (i == trees[t].index) {
+                       fprintf(file, "\t/* %s_%x */\n",
+                               trees[t].type, trees[t].maxage);
+                       if (t < trees_count-1)
+                               t++;
+               }
+               fprintf(file, "\t");
+               for (j = i; j != i + 16; j++)
+                       fprintf(file, "0x%.2x%s", utf8data[j],
+                               (j < utf8data_size -1 ? "," : ""));
+               fprintf(file, "\n");
+       }
+       fprintf(file, "};\n");
+       fclose(file);
+}
+
+/* ------------------------------------------------------------------ */
+
+int main(int argc, char *argv[])
+{
+       unsigned int unichar;
+       int opt;
+
+       argv0 = argv[0];
+
+       while ((opt = getopt(argc, argv, "a:c:d:f:hn:o:p:t:v")) != -1) {
+               switch (opt) {
+               case 'a':
+                       age_name = optarg;
+                       break;
+               case 'c':
+                       ccc_name = optarg;
+                       break;
+               case 'd':
+                       data_name = optarg;
+                       break;
+               case 'f':
+                       fold_name = optarg;
+                       break;
+               case 'n':
+                       norm_name = optarg;
+                       break;
+               case 'o':
+                       utf8_name = optarg;
+                       break;
+               case 'p':
+                       prop_name = optarg;
+                       break;
+               case 't':
+                       test_name = optarg;
+                       break;
+               case 'v':
+                       verbose++;
+                       break;
+               case 'h':
+                       help();
+                       exit(0);
+               default:
+                       usage();
+               }
+       }
+
+       if (verbose > 1)
+               help();
+       for (unichar = 0; unichar != 0x110000; unichar++)
+               unicode_data[unichar].code = unichar;
+       age_init();
+       ccc_init();
+       nfkdi_init();
+       nfkdicf_init();
+       ignore_init();
+       corrections_init();
+       hangul_decompose();
+       nfkdi_decompose();
+       nfkdicf_decompose();
+       utf8_init();
+       trees_init();
+       trees_populate();
+       trees_reduce();
+       trees_verify();
+       /* Prevent "unused function" warning. */
+       (void)lookup(nfkdi_tree, " ");
+       if (verbose > 2)
+               tree_walk(nfkdi_tree);
+       if (verbose > 2)
+               tree_walk(nfkdicf_tree);
+       normalization_test();
+       write_file();
+
+       return 0;
+}
diff --git a/util/static-analysis-cleanup b/util/static-analysis-cleanup
deleted file mode 100644 (file)
index 6749259..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sed -f
-#
-# This script filters out gcc-wall crud that we're not interested in seeing.
-#
-/^cc /d
-/^kcc /d
-/^gcc /d
-/does not support `long long'/d
-/forbids long long integer constants/d
-/does not support the `ll' length modifier/d
-/does not support the `ll' printf length modifier/d
-/ANSI C forbids long long integer constants/d
-/traditional C rejects string concatenation/d
-/integer constant is unsigned in ANSI C, signed with -traditional/d
-/warning: missing initializer/d
-/warning: (near initialization for/d
-/^[    ]*from/d
-/unused parameter/d
-/e2_types.h" not found.$/d
-/e2_bitops.h" not found.$/d
diff --git a/util/subset.exclude b/util/subset.exclude
deleted file mode 100644 (file)
index 81108d2..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-.git
-.hg
-.hgignore
-.pc
-patches
-build
-build[^/]*
-rpm.log
-TODO
-powerquest
-.exclude-subset
-po/stamp-cat-id
-po/cat-id-tbl.c
-Meta
-e2fsck
-ext2ed
-debugfs
-misc
-tests
-resize
-contrib
-po
-include
-debian
-lib/e2p
-lib/evms
-lib/ext2fs
-lib/support
-ABOUT-NLS
-README
-INSTALL
-INSTALL.dllbin
-INSTALL.elfbin
-RELEASE-NOTES
-e2fsprogs.lsm
-e2fsprogs.spec
index e745d86..66d7d9a 100644 (file)
@@ -1,13 +1,14 @@
 /*
  * subst.c --- substitution program
  *
- * Subst is used as a quicky program to do @ substitutions
+ * Subst is used as a quickie program to do @ substitutions
  *
  */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #else
+#define HAVE_SYS_STAT_H
 #define HAVE_SYS_TIME_H
 #endif
 #include <stdio.h>
index fbc044d..0da4554 100644 (file)
@@ -2,6 +2,7 @@ AWK                     @AWK@
 SED                    @SED@
 E2FSPROGS_MONTH                @E2FSPROGS_MONTH@
 E2FSPROGS_YEAR         @E2FSPROGS_YEAR@
+E2FSPROGS_DATE         @E2FSPROGS_DATE@
 E2FSPROGS_VERSION      @E2FSPROGS_VERSION@
 SIZEOF_LONG_LONG       @SIZEOF_LONG_LONG@
 SIZEOF_LONG            @SIZEOF_LONG@
@@ -18,3 +19,8 @@ $prefix                       @prefix@
 JDEV                   
 # Enable the documentation for the tdb profile in e2fsck.conf's man page
 TDB_MAN_COMMENT                @TDB_MAN_COMMENT@
+root_sbindir           @root_sbindir@
+root_bindir            @root_bindir@
+libdir                 @libdir@
+$exec_prefix           @exec_prefix@
+pkglibdir              @libdir@/e2fsprogs
index 600effa..e9d2b01 100644 (file)
@@ -126,7 +126,7 @@ static int shorten_path (char *path, char *abspath)
 
        /* get rid of unnecessary "../dir" sequences */
        while (abspath && strlen(abspath) > 1 && (p = strstr(path,"../"))) {
-               /* find innermost occurance of "../dir", and save "dir" */
+               /* find innermost occurrence of "../dir", and save "dir" */
                int slashes = 2;
                char *a, *s, *d = dir;
                while ((s = strstr(p+3, "../"))) {
diff --git a/util/ucd/README b/util/ucd/README
new file mode 100644 (file)
index 0000000..9fed514
--- /dev/null
@@ -0,0 +1,37 @@
+The files in this directory are part of the Unicode Character Database
+for version 11.0.0 of the Unicode standard.
+
+The full set of UCD files are not distributed with e2fsprogs, since they
+are very large and only needed to regenerate the lib/ext2fs/utf8data.h
+during an Unicode version update.  They can be found in the link below
+and also in the Linux kernel source tree:
+
+  http://www.unicode.org/Public/11.0.0/ucd/
+
+The latest released version of the UCD can be found here:
+
+  http://www.unicode.org/Public/UCD/latest/
+
+The files in this directory are identical, except that they have been
+renamed with a suffix indicating the unicode version.
+
+Individual source links:
+
+  http://www.unicode.org/Public/11.0.0/ucd/CaseFolding.txt
+  http://www.unicode.org/Public/11.0.0/ucd/DerivedAge.txt
+  http://www.unicode.org/Public/11.0.0/ucd/extracted/DerivedCombiningClass.txt
+  http://www.unicode.org/Public/11.0.0/ucd/DerivedCoreProperties.txt
+  http://www.unicode.org/Public/11.0.0/ucd/NormalizationCorrections.txt
+  http://www.unicode.org/Public/11.0.0/ucd/NormalizationTest.txt
+  http://www.unicode.org/Public/11.0.0/ucd/UnicodeData.txt
+
+md5sums
+
+  414436796cf097df55f798e1585448ee  CaseFolding-11.0.0.txt
+  6032a595fbb782694456491d86eecfac  DerivedAge-11.0.0.txt
+  3240997d671297ac754ab0d27577acf7  DerivedCombiningClass-11.0.0.txt
+  d41d8cd98f00b204e9800998ecf8427e  DerivedCombiningClass.txt
+  2a4fe257d9d8184518e036194d2248ec  DerivedCoreProperties-11.0.0.txt
+  4e7d383fa0dd3cd9d49d64e5b7b7c9e0  NormalizationCorrections-11.0.0.txt
+  c9500c5b8b88e584469f056023ecc3f2  NormalizationTest-11.0.0.txt
+  acc291106c3758d2025f8d7bd5518bee  UnicodeData-11.0.0.txt
index 1d1bb11..844fce2 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.43.4"
-#define E2FSPROGS_DATE "31-Jan-2017"
+#define E2FSPROGS_VERSION "1.46.0"
+#define E2FSPROGS_DATE "29-Jan-2020"